Puppet Ubuntu удалять пакеты больше не требуется

Учу себя марионетке.

Использование Ubuntu 11.10 Puppet 2.7.1 (прямо из apt)

Запуск некоторых тестовых сценариев на одном узле (см. http://docs.puppetlabs.com/learning/manifests.html).

Я сделал манифест, который устанавливает и запускает пакет apache2... все хорошо.

Теперь я хочу изменить это, я делаю манифест, который очищает пакет apache2. Это завершается успешно, проблема в том, что puppet удаляет только пакет apache2, а не все пакеты, которые apache2 включает в себя (я думаю, что apache2.2-bin является основным) ... так что служба apache2 все еще установлена ​​и работает в системе.

Если бы я делал это с помощью apt-get, я бы просто сделал "apt-get autoremove", но как я могу заставить кукол сделать это для меня?

2 ответа

К сожалению, нет хорошего способа сделать это с помощью встроенных типов ресурсов, только два не очень хороших варианта.

"Правильный" способ включает определение package ресурс для всех пакетов, от которых вы хотите избавиться:

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

И "неправильным", но гораздо более управляемым способом было бы создать exec ресурс для автоматического удаления зависимых пакетов при удалении пакета apache2:

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'],
}

Учитывая эти два варианта, второй, безусловно, более привлекательный - приятно иметь возможность использовать встроенные типы, когда это возможно, но это просто не практично, когда вы удаляете пакет с огромным количеством зависимостей.

У вас может быть ресурс exec, который запускается только после удаления пакета apache.

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

exec { "remove-apache-dependencies"
  command => "apt-get -y autoremove",
  subscribe => Package["apache2"],
  refreshonly => true,
}
Другие вопросы по тегам