木偶变量覆盖失败

时间:2017-03-01 22:56:32

标签: ruby puppet

我是木偶的新手并且遇到了一些问题作为主题,谷歌搜索了一段时间,但失败了匹配的答案。 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,它可以按预期工作。 当木偶应用清单时似乎有些顺序,但我得到的是局部范围变量将始终覆盖变量,这是正确的吗? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

当您include在顶级作用域中进行操作时,在评估期间没有节点块在范围内。这是避免这种诡计的一个很好的理由。

include语句放在节点块中,使用ENC指定要包含的类,或者在节点块中使用hiera_include()以间接包含它。或者,使用顶部范围的hiera为$puppetserver变量设置正确的值,从而将可变阴影从图片中删除。