Puppet - hiera没有为模块分配参数

时间:2015-11-09 22:35:09

标签: hiera

根据hiera上的Puppet documentation,以下示例应该有效,但由于某种原因,它没有将参数传递给模块。

我有一个名为hello的简单模块,它使用hello::talk接收参数,并在/home/user/hello.txt输出文件。

这是班级:

class hello {
    // other stuff
}
define hello::talk (
    $say_hello = true,
    $message = '',
    $say_goodbye = false,
) {
    file { '/home/user/hello.txt':
        owner => root, group => root, mode => 0755,
        ensure => file,
        content => template('hello/template.erb')
    }
}

如果在节点内,我会这样使用它:

node foo {
    include hello
    hello::talk {'config':
        say_hello = true,
        message = 'howdy!',
        say_goodbye = false,
    }
}

它按预期工作(创建文件等)

但是如果我尝试使用hiera,我只能将它包含在类中,但不能执行hello::talk位。

这是我的common.yaml:

classes:
    - hello

hello::talk -
    say_hello = true
    message = "Oh dear ..."
    say_goodbye = false

并且site.pp:

hiera_include('classes')

node foo {

}

没有文件:(

更新

好吧,所以我误解了文档有点大声笑......而且我仍然误解了classdefine之间的区别......但是我想我的大脑会在以后找到它/ p>

我设法通过将define hello::talk更改为class hello::talk并将common.yaml文件更改为:

来使其工作
classes:
    - hello
    - hello::talk

hello::talk::say_hello = true
hello::talk::message = 'Yay! ... Kinda'
hello::talk::say_goodbye = true

这引出了一个新问题......是否有一种方法可以重构类,因此,与其他模块一样,我只需要包含hello,然后可以设置参数。另外,如果我不必继续使用hello::talk::来设置参数......那就太好了。

1 个答案:

答案 0 :(得分:1)

类和定义之间的主要区别在于,如果提供不同的名称,则只能调用一次类,并且可以多次调用定义。

关于你的上一个问题。

您需要在hello类中移动参数并在其中调用hello :: talk class / define(我将假设hello :: talk是一个定义):

class hello (
    say_hello   = true,
    message     = 'howdy!',
    say_goodbye = false
) {
    hello::talk {'config':
      say_hello   => $say_hello,
      message     => $message ,
      say_goodbye => $say_goodbye,
    }
}

使用上述结构,您可以在hiera中设置:

classes:
    - hello

hello::say_hello: true
hello::message: 'Yay! ... Kinda'
hello::say_goodbye: true