是否可以从 Puppet 清单中访问 Puppet Master 配置变量(如 confdir、masterport 等)?
答案1
有三种方法。
- Jeff McCune 在他的 github 上有一个很好的功能,可以做到这一点:
模块 Puppet::Parser::Functions 新函数(:getconf,:type => :rvalue,:doc => 2010-09-29 getconf 函数接受一个参数,即 配置设置并返回该设置的值。 它类似于 --configprint 命令行参数 返回配置设置,除非它公开此信息 语言。 结束_HEREDOC 做|参数| 如果 args.length != 1 那么 引发 Puppet::ParseError, ("错误:getconf() 只接受一个参数") 结尾 傀儡[参数[0]] 结束# 执行|args| 结束#模块 # 结尾
将其放入 Puppet 服务器 libdir ( /var/puppet/lib/puppet/parser/functions/getconf.rb
) 中名为“getconf.rb”的文件中,然后从清单中访问它,例如
# somemanifest.pp
$myvar = getconf("ssldir")
notify {"set ssldir to ${myvar}":}
2. 在 Puppet 2.6 中,这变得更容易,因为整个设置都可以通过 访问${settings::somevar}
,因此清单很简单:
# 26manifest.pp
$myvar = $settings::ssldir
notify {"set ssldir to $myvar":}
3. 在 puppet 0.25 中,您可以使用内联模板:
# 25manifest.pp
$myvar = inline_template("<%= Puppet.settings[:ssldir] %>")
notify {"set ssldir to ${myvar}":}
方法 2 和 3 感谢puppet-users 上的这个帖子