Как прервать или остановить запуск ruby_block в цикле по причине "подписки" - PullRequest
0 голосов
/ 08 января 2019

Привет, у меня есть рецепт, в котором я пытаюсь проверить, работает ли служба и доступна ли она.

Итак, у меня есть « ruby_block », который проверяет, работает ли служба, если не она, « уведомляет » в блоке « execute », чтобы запустить его, один раз блок execute запускает сервис, который мне нужен, чтобы еще раз проверить, работает ли он, вызвав «ruby_block» с помощью « подписывается » Но когда служба не запускается, « ruby_block » переходит в неостанавливаемый цикл.

Ниже приведен рецепт, описывающий рабочий процесс

ruby_block 'check_if_Service_running' do

  block do
    # ...some logic to check service

    # generates a return code 301 if successful or any other value if fails and 
    # assign it to an attribute check eg. value = return_code   
  end

  notifies :run, 'execute['start_service']', :immediately
  subscribes :run,'execute[Start_Service]', :immediately
end

execute 'Start_Service' do
  #...code to start the service


  action :nothing

  not_if { value == 301 }
end

Таким образом, в этом случае, когда Службы не запускаются даже после выполнения блока, ruby_block продолжает работать и уведомляет блок «Выполнить» и т. Д.

примечание: при успешном запуске службы оно показывает ожидаемое поведение

Но иногда, когда служба не запускается, она зацикливается

Пожалуйста, помогите мне здесь, чтобы остановить "ruby_block" из-за циклических вызовов более 2 раз и остановить все (цикл), если служба чувствовала, что запускается

Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Похоже, что у вас есть ресурс ruby_block, который подписывается на один и тот же ресурс execute и уведомляет об этом, что, вероятно, всегда неправильно.

Почему вы используете ресурсы ruby_block и execute вместо просто ресурса service?

Ваш рецепт больше похож на то, что вы думаете о шеф-поваре о том, что вы говорите, чтобы делать что-то определенным образом. Вместо этого рецепты Chef должны быть описанием состояния, которое вы хотите утверждать, а затем позволить Chef выяснить, как этого достичь. Скажите Chef, что вы хотите, чтобы ваш сервис работал, и постарайтесь добавить больше подробностей, если и только если это не сработает. Редко бывает необходимо предоставлять эту дополнительную информацию.

0 голосов
/ 08 января 2019

Вместо этого создайте пользовательский ресурс, вы хотите более явный контроль над вещами, чем даст вам DSL.

...