Puppet Ubuntu remove pacotes não mais necessários

4

ensinando-me fantoche.

Usando Ubuntu 11.10 Puppet 2.7.1 (direto do apt)

Execução de alguns scripts de teste em um único nó (seguindo o link ).

Eu fiz um manifesto que instala e inicia o pacote apache2 ... tudo de bom.

Agora quero reverter isso, faço um manifesto que limpa o pacote apache2. Isso é concluído com sucesso, o problema é que o fantoche só remove o pacote apache2, não todos os pacotes que o apache2 traz consigo (acho que o apache2.2-bin é o principal) ... então o serviço apache2 ainda está instalado e em execução no sistema.

Se eu estivesse fazendo isso com o apt-get, eu apenas faria um "apt-get autoremove", mas como posso fazer um fantoche fazer isso por mim?

    
por sMoZely 28.01.2012 / 21:22

2 respostas

7

Infelizmente, não há uma boa maneira de fazer isso com os tipos de recursos internos, apenas duas opções não tão boas.

O modo 'correto' envolve a definição de um recurso package para todos os pacotes dos quais você deseja se livrar:

package { 'apache2.2-common':
    ensure => purged,
}
package { 'apache2-utils':
    ensure => purged,
}
# etc ...

E a maneira "imprópria", mas muito mais gerenciável, seria configurar um recurso exec para executar o autoremove dos pacotes dependentes quando o pacote apache2 for removido:

package { 'apache2':
    ensure => purged,
}
exec { 'autoremove':
    command => '/usr/bin/apt-get autoremove --purge -y',
    # We don't want this running every time the puppet agent runs, 
    # so we'll set it to only run when the apache2 purge actually happens.
    # Note that this would not run on your node that already has the
    # apache2 package removed, since it won't trigger any more changes
    # to the package.
    refreshonly => true,
    subscribe => Package['apache2'],
}

Dadas estas duas opções, a segunda é definitivamente mais atraente - é bom ser capaz de se ater aos tipos embutidos sempre que possível, mas não é prático quando você está removendo um pacote com um grande número de dependências. / p>     

por 28.01.2012 / 21:37
2

Você pode ter um recurso exec que só é executado quando o pacote do apache é removido.

package { "apache2":
  ensure => absent,
}

exec { "remove-apache-dependencies"
  command => "apt-get -y autoremove",
  subscribe => Package["apache2"],
  refreshonly => true,
}
    
por 28.01.2012 / 21:38