Назад | Перейти на главную страницу

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", но как я могу заставить 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,
}