#puppet
#puppet
Вопрос:
Я ищу варианты остановки запуска моего puppet, например, когда я вижу некоторый сбой при некоторой проверке внутри манифеста.
Когда я запускаю puppet agent -t на узле, если в манифесте есть какая-либо ошибка, он должен остановить выполнение, а не продолжать работу с оставшимся манифестом.
Я попробовал команду «сбой», если файл не может быть найден на узле, но я получил эту ошибку
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Function Call
Я пытался сделать что-то подобное ниже, если файл существует, то уведомите, что я присутствую, иначе произойдет сбой, и остановите выполнение
$file = "/tmp/file"
exec { "chk_${file}_exist":
command => "true",
path => ["/usr/bin","/usr/sbin", "/bin"],
onlyif => "test -f ${file}"
}
-> if !(Exec["chk_${file}_exist"]) {
fail('I am failing')
}
else {
notify { 'I am present ":}
}
Комментарии:
1. Чем эффект
fail
функции отличается от того, чего вы пытаетесь достичь?2. В более общем плане, вы путаете построение каталога (на главном, из манифестов, данных и фактов) с приложением каталога (на клиенте)?
3. Не могли бы вы, пожалуйста, быть более конкретным? Я пытался выполнить команду с узла (тестирование) Я хотел, чтобы на консоли выводился вывод «У меня сбой » вместо ошибки «Ошибка при оценке инструкции ресурса, ошибка оценки: Ошибка при оценке вызова функции, *»
4. Хорошо, похоже, здесь проблема с терминологией. Если есть ошибка в манифесте затем каталога компиляция завершается с ошибкой. При настройке master / agent это происходит на главном сервере, и результатом является именно такое сообщение об ошибке, которое вы получаете. Похоже, вместо этого вам нужен способ немедленно остановить приложение catalog при сбое любого ресурса.
5. Хорошо, я думаю, что я вас понял. Спасибо
Ответ №1:
Насколько мне известно, в Puppet нет механизма общего назначения, позволяющего полностью прервать работу приложения catalog при сбое одного ресурса, хотя такая функция запрашивалась ранее. Обычно к такому вопросу подходят с немного большей точностью, используя тот или иной аспект отношений с ресурсами.
Если у вас есть ресурс, корректное применение которого зависит от того, что сначала был успешно применен другой конкретный ресурс, то вы описываете это в Puppet, объявляя связь между ними, используя либо один из операторов цепочки, либо один из метапараметров ресурса, предназначенных для этой цели ( before
, require
, notify
, subscribe
). Это обеспечит как относительный порядок применения этих ресурсов, так и то, что не будет предпринято никаких попыток применить зависимый, если применение зависимости завершится неудачей. Вы можете применить эту концепцию к группам ресурсов, установив отношения с классами или экземплярами определенного типа с одной или обеих сторон, или даже задействовав этапы выполнения.
Однако в настоящее время нет способа заставить приложение catalog в целом немедленно останавливаться при сбое ресурса, когда остаются ресурсы, которые могут быть применены.
Комментарии:
1. Привет, Джон, спасибо за комментарий, довольно информативный. Я понимаю, что мы можем использовать это «объявление связи», но дело в том, что puppet не останавливает выполнение, если в зависимости происходят сбои, оно просто пропускается с сообщением «Notice: /Stage [main]/…….: У Dependency Exec[…] есть ошибки: true Предупреждение: /Stage[main]/…….: Пропуск из-за сбойных зависимостей, а затем продолжение с оставшимися
2. Да, @user3355927, это то, что я уже говорил. Фактически, к чему я привел: «Насколько мне известно, в Puppet нет механизма общего назначения, позволяющего полностью прервать работу приложения catalog при сбое одного ресурса».
3. Большое тебе спасибо, Джон. Помечаем ваш ответ как правильный 🙂