Может ли рабочий процесс puppet остановиться при наличии ошибки в манифесте?

#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. Большое тебе спасибо, Джон. Помечаем ваш ответ как правильный 🙂