Вопрос: Кукольный: удаление пакета и обеспечение остановки


Я довольно новичок в 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'

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


7
2018-01-08 15:08


Источник


что вы спрашиваете о том, что в марионеточной терминологии называется «подписываться». Точно так же в примерах ntp перезапускается после установки или обновления, вы можете делать то, что вы хотите здесь. - Sirex
попробуйте здесь: docs.puppetlabs.com/learning/ordering.html - Sirex
Разве этого недостаточно, чтобы просто удалить пакет? Он должен быть автоматически остановлен. - Khaled
@Hhaled Я не уверен. Возможно, но я могу быть в безопасности, чем сожалеть. - vpetersson
@Sirex Ordering здесь не помогает. Чтобы остановить службу, вам нужен сценарий инициализации, который обычно является частью пакета. Но вы хотите удалить пакет одновременно. Для меня это похоже на то, что оно не разрешено с обычными марионетками. - Slaven Rezic


Ответы:


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

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

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

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

3
2018-01-08 20:35



Спасибо @hayalci. Я думаю, что все должно быть наоборот: package {'supervisor': обеспечить => absent,} service {'supervisor': обеспечить => остановить, включить => false, hasstatus => true, require => Package [ supervisor "],} Тем не менее, я все еще получаю ошибки, а их меньше. - vpetersson