Я новичок в 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,
}