учу себя марионетке.
Использование 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", но как я могу заставить puppet сделать это за меня?
К сожалению, нет хорошего способа сделать это с помощью встроенных типов ресурсов, только два не очень хороших варианта.
«Правильный» способ предполагает определение 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,
}