我是木偶的新手并且遇到了一些问题作为主题,谷歌搜索了一段时间,但失败了匹配的答案。 Mys问题如下:
我在/etc/puppet/manifests/site.pp中定义了全局变量$ puppetserver,如下所示:
case $domain {
/domain2/:{
$puppetserver = "puppetserver2"
include migrate
}
default:{
$puppetserver = "puppetserver3"
}
}
在manifests / labs / domain2 / nodes.pp
中domain2中服务器的节点定义中 node 'server1.domain2.com' {
$puppetserver = "puppetserver3"
}
迁移模块用于木偶迁移,从以下网站获取:
/etc/puppet/modules/migrate/manifests/config.pp中的
class migrate::config {
if $puppetserver == undef {
fail('You must define the targeted Puppet master to perform the migration')
}
augeas { 'puppet.conf.migrate':
context => '/files/etc/puppet/puppet.conf/main',
changes => [
"set server $puppetserver",
]
}
}
由于节点' server1.domain2.com'可以匹配site.pp中的domain2设置,所以它应用了迁移模块,我期望的是:它应该得到' puppetserver3' for $ puppetserver在node block中定义,然后在/etc/puppet/puppet.conf'中更新;由Augeas,但实际结果是:它使用' puppetserver2'这是在site.pp中定义的。我无法弄清楚为什么压倒不起作用。你能帮忙检查一下是什么错误吗?
作为测试:
当我尝试移动' include migrate'模块从site.pp到node' server1.domain2.com' {}块nodes.pp,它可以按预期工作。 当木偶应用清单时似乎有些顺序,但我得到的是局部范围变量将始终覆盖变量,这是正确的吗? 非常感谢您的帮助。
答案 0 :(得分:1)
当您include
在顶级作用域中进行操作时,在评估期间没有节点块在范围内。这是避免这种诡计的一个很好的理由。
将include
语句放在节点块中,使用ENC指定要包含的类,或者在节点块中使用hiera_include()
以间接包含它。或者,使用顶部范围的hiera为$puppetserver
变量设置正确的值,从而将可变阴影从图片中删除。