根据 hiera 上的Puppet 文档,以下示例应该可以工作,但由于某种原因,它没有将参数传递给模块。
我有一个名为 的简单模块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 {
}
没有制作文件:(
更新
好的,所以我有点误解了文档大声笑......而且我仍然误解和之间的区别class
......define
但我想我的大脑稍后会明白这一点
我设法通过将 common.yaml 文件更改为define hello::talk
:class hello::talk
classes:
- hello
- hello::talk
hello::talk::say_hello = true
hello::talk::message = 'Yay! ... Kinda'
hello::talk::say_goodbye = true
这让我想到了一个新问题……有没有一种方法可以重组类,这样,就像其他模块一样,我只需要包含hello
然后可以设置参数。另外,如果我不必不断使用hello::talk::
来设置参数,那就太好了......