我想在Puppet .erb文件中执行类似的操作:
<% if (version_of_apache_package_installed =~ /1.5.82/) then -%>
do one thing
<% else -%>
do a different thing
<% end -%>
如何将某个已安装软件包的版本字符串放入变量version_of_apache_package_installed
中,以便我可以完成上述工作?
答案 0 :(得分:3)
你是在管理那个apache package resource in puppet吗?如果是这样,您可以指定要安装的版本,因此您只需从包资源和此if / else块中读取相同的版本变量。
在您的一个初始文件中......
$package_version = '1.0'
节点中的......
package { 'your_package':
ensure => $package_version,
}
这是在木偶中思考的正确方法,“让这台机器成为我所期待的”而不是“我需要处理这台机器的任何东西”。
您可以使用exec来处理条件而无需管理资源,但这根本不理想。
答案 1 :(得分:0)
Puppet方法是声明一些包及其所需的状态,并在包状态改变时执行一些代码,例如:
package { "apache2":
ensure => 2.2.5,
notify => Exec['update-apache']
}
exec { 'update-apache'
command => "/usr/bin/execute_some_script",
refreshonly => true,
}
这背后的动机主要是表现。检查包版本相对较快,而自定义脚本的执行将延长puppet agent
运行时间。
如有必要,您可以使用以下内容:
exec { "custom exec":
command => "/usr/bin/do something",
onlyif => "/bin/sh -c '/usr/bin/find /etc/apt/* -cnewer /var/cache/apt/pkgcache.bin | /bin/grep . > /dev/null'",
}
确保自定义脚本的执行不会超过Puppet代理程序运行之间的间隔。