![如何在 facter 自定义事实中使用 puppet 变量](https://linux22.com/image/728126/%E5%A6%82%E4%BD%95%E5%9C%A8%20facter%20%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E5%AE%9E%E4%B8%AD%E4%BD%BF%E7%94%A8%20puppet%20%E5%8F%98%E9%87%8F.png)
我如何从 puppet manifest 中的 facter 自定义事实中继承变量?在本例中为 $job_name 变量。我想在不同的环境中使用相同的自定义事实。
if $facts['hostname'] =~ /.*name.*/ {
$job_name = 'test'
file { "/opt/$job_name":
ensure => directory,
owner => 'root',
group => 'root',
mode => '0775',
}
file { "/opt/$job_name/version.$job_name":
ensure => present,
owner => 'root',
group => 'root',
mode => '0644',
#notify => Exec["update_test"],
source => "puppet:///modules/test/version.$job_name",
}
if $facts['check_version'] == "aasdadsadasd" {
file { "/opt/$job_name/bla2":
ensure => directory,
owner => 'root',
group => 'root',
mode => '0775',
}
}
我的自定义事实 rb 代码是
require 'facter'
Facter.add(:check_version) do
setcode do
Facter::Core::Execution.exec("/bin/cat /opt/$job_name/version.$job_name")
end
end
提前致谢
答案1
如果您想在自定义事实中使用清单变量,则无法使用。这是因为事实是在编译目录(清单集合)之前在客户端上进行评估的。因此,在运行自定义事实时,该变量$job_name
实际上还不存在。