木偶:基于目录的存在将文件移动到不同的位置

我有这样的configuration:

file { "/tmp/apc.ini": source => "puppet:///modules/uc/php/apc.ini", require => Package["php-apc"] } exec { "Add apc.ini to php mods-available": command => 'mv /tmp/apc.ini /etc/php5/mods-available/apc.ini', onlyif => "test -d /etc/php5/mods-available", require => File["/tmp/apc.ini"] } exec { "Add apc.ini to php conf.d": command => 'mv /tmp/apc.ini /etc/php5/conf.d/apc.ini', unless => "test -d /etc/php5/mods-available", require => File["/tmp/apc.ini"] } 

我希望能够简化这个,使得/tmp/apc.ini文件不是每次运行puppet agent --test时创build的puppet agent --test

目前,我得到以下输出:

 info: Retrieving plugin info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb info: Loading facts in /var/lib/puppet/lib/facter/concat_basedir.rb info: Loading facts in /var/lib/puppet/lib/facter/postgres.rb info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb info: Caching catalog for frontapp0.demo.infra.universcine.com info: Applying configuration version '1376302253' notice: /Stage[main]/Uc::Role::Php/File[/tmp/apc.ini]/ensure: defined content as '{md5}e5f5a158bd83469ce031b20ec72ce717' notice: /Stage[main]/Uc::Role::Php/Exec[Add apc.ini to php mods-available]/returns: executed successfully notice: Finished catalog run in 36.12 seconds 

我可以尝试什么?

更新目标是使apc.ini在mods-available或conf.d中,取决于前者是否存在

一个简单的方法来完成这将是部署一个自定义的事实。 如果您使用的是puppet-stdlib模块,则可以通过将可执行脚本放入/etc/facter/facts.d (请参阅本文以获取详细信息),以您select的语言编写自定义事实。 例如,如果您创build了具有以下内容的脚本/etc/facter/facts.d/apc_ini_path (并确保它是可执行的):

 #!/bin/sh if [ -d /etc/php5/mods-available ]; then echo "apc_ini_path=/etc/php5/mods-available" else echo "apc_ini_path=/etc/php5/conf.d/" fi 

那么你会有一个事实“apc_ini_path”,你可以这样做:

 file { "$apc_ini_path/apc.ini": source => "puppet:///modules/uc/php/apc.ini", require => Package["php-apc"] } 

当然,如果您对Ruby感到满意,也可以使用同一篇文章中介绍的示例,将 Ruby事实放入YOURMODULE/lib/facter/yourfact.rb 中 。 他们提供了一个很简单的示例Ruby实例:

 # hardware_platform.rb Facter.add("hardware_platform") do setcode do Facter::Util::Resolution.exec('/bin/uname -i') end end 

用目录存在检查代替它应该相当容易。