Eu criei uma solução alternativa. Prepare-se, isso é nojento.
if $::puppetversion == '2.7.11' {
$ensure_puppet = 'held'
} else {
$ensure_puppet = '2.7.11-1puppetlabs1'
}
package { ['puppet', 'puppet-common']:
ensure => $ensure_puppet
}
Ele usa o fato interno $::puppetversion
para fazer interrogação de versão. Assim, o estado do pacote será 'mantido', a menos que a versão instalada seja diferente da desejada. Isso deve permitir que eu atualize a infraestrutura de fantoches à vontade sem se preocupar com upgrades autônomos fazendo isso por mim.
Isso não responde exatamente à pergunta sobre o bloqueio de versão do Apache, mas é possível escrever um fato personalizado para consultar o Apache em sua versão.
Eu tinha inicialmente tentado a abordagem manual do dpkg hold. Eu usei o tipo de pacote para garantir as versões e, em seguida, executei um script de execução para garantir que ele fosse mantido separadamente. É semelhante à abordagem que tomo com o bloqueio de versão do yum.
define apt::hold() {
exec { "hold-${name}":
command => "/bin/echo '${name} hold' | /usr/bin/dpkg --set-selections",
unless => "/usr/bin/dpkg --get-selections ${name} | /bin/grep hold",
require => Package[$name]
}
}
package { ['puppet', 'puppet-common']:
ensure => '2.7.11-1puppetlabs1'
}
apt::hold { ['puppet', 'puppet-common']: }
Agora, isso funciona, mas produz muitas notificações irritantes nos logs e relatórios. O tipo de pacote não pode reconciliar que um pacote pode ser mantido e uma certa versão. Por isso, ele me notificará que o estado do pacote foi alterado de 'mantido' para '2.7.11-1puppetlabs1'.
[sanitized.server.name.net] out: info: Retrieving plugin
[sanitized.server.name.net] out: info: Loading facts in /var/lib/puppet/lib/facter/operatingsystemmajor.rb
[sanitized.server.name.net] out: info: Loading facts in /var/lib/puppet/lib/facter/datacenter.rb
[sanitized.server.name.net] out: info: Caching catalog for sanitized.server.name.net
[sanitized.server.name.net] out: info: Applying configuration version '1333727048'
[sanitized.server.name.net] out: notice: /Stage[main]/Puppet/Package[facter]/ensure: ensure changed 'held' to '1.6.6-1puppetlabs1'
[sanitized.server.name.net] out: notice: /Stage[main]/Puppet::Client/Package[puppet-common]/ensure: ensure changed 'held' to '2.7.11-1puppetlabs1'
[sanitized.server.name.net] out: notice: /Stage[main]/Puppet::Client/Package[puppet]/ensure: ensure changed 'held' to '2.7.11-1puppetlabs1'
[sanitized.server.name.net] out: notice: Finished catalog run in 6.25 seconds
Eu não gosto dos meus relatórios chorando lobo o tempo todo. Também causa problemas se eu quiser fazer algo como:
package { ['puppet', 'puppet-common']:
ensure => '2.7.11-1puppetlabs1',
notify => Service['puppet']
}
Para reiniciar o serviço após uma atualização. Eu termino com o serviço sendo devolvido toda vez que um fantoche é executado.
Concordo com todos os outros, embora o termo 'detidos' deva ser provavelmente um atributo separado do tipo de pacote.