Puppet: Mova o arquivo para um local diferente com base na existência de um diretório

3

Eu tenho esta configuração:

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"]
  } 

Gostaria de poder simplificar isso para que o arquivo /tmp/apc.ini não seja criado toda vez que eu executar puppet agent --test

No momento, recebo a seguinte saída:

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

O que eu posso experimentar?

UPDATE O objetivo é ter o apc.ini em mods-available ou conf.d, dependendo se o primeiro existe ou não

    
por greg0ire 12.08.2013 / 12:14

1 resposta

4

Uma maneira simples de conseguir isso seria implantar um fato personalizado. Se você estiver usando o módulo puppet-stdlib , você pode escrever fatos personalizados no idioma de sua escolha, soltando um script executável em /etc/facter/facts.d (veja este artigo para detalhes). Por exemplo, se você criou um script /etc/facter/facts.d/apc_ini_path com o seguinte conteúdo (e certificou-se de que era executável):

#!/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

Então você teria disponível um fato "apc_ini_path", e você poderia fazer isso:

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

É claro que, se você se sentir confortável com Ruby, também pode soltar um fato do Ruby em YOURMODULE/lib/facter/yourfact.rb usando os exemplos apresentados no mesmo artigo . Eles fornecem um exemplo de fato do Ruby que é bem trivial:

# hardware_platform.rb

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

Deve ser bastante fácil substituir isso por uma verificação de existência de diretório.

    
por 12.08.2013 / 15:42

Tags