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

Марионетка: удаление пакета и остановка

Я новичок в Puppet, но пока он мне очень нравится. Прямо сейчас я настраиваю его для автоматизации небольшой архитектуры.

Однако у меня есть одна проблема - я хочу удалить пакет и убедиться, что он остановлен. Для этого в моем манифесте есть следующая запись:

package { 'supervisor':
    ensure => absent,
}

service { 'supervisor':
    ensure     => stopped,
    enable     => false,
    hasstatus  => true,
}

Проблема заключается в том, что после того, как манифест был применен к узлу один раз, при следующем запуске я получаю следующую ошибку:

debug: Service[supervisor](provider=debian): Could not find supervisor in /etc/init.d
debug: Service[supervisor](provider=debian): Could not find supervisor.sh in /etc/init.d
err: /Stage[main]/Screenly_core/Service[supervisor]: Could not evaluate: Could not find init script for 'supervisor'

Есть ли способ сделать какой-то условный оператор, такой, чтобы процедура остановки выполнялась только в том случае, если пакет действительно присутствовал (а затем запускался до удаления пакета)?

В системах на основе debian (и я предполагаю, что также в системах rpm) удаление пакета останавливает его службы перед удалением файлов (этап prerm в пакетах deb).

Но то, о чем вы просите, может быть достигнуто путем вставки зависимости с помощью 'require'

package { 'supervisor':
    ensure => absent,
    require => Service["supervisor"],
}

service { 'supervisor':
    ensure     => stopped,
    enable     => false,
    hasstatus  => true,
}