Повар: как получить временную метку при * конвергенции *, а не * времени компиляции

Пожалуйста, рассмотрите этот код в конце моего deploy_to_tomcat рецепт:

  unless Chef::Config[:solo]
    chat_message "Deployed #{artifact_name} `#{Time.new.strftime("%Y-%m-%d %H:%M")}`"
  end

Он отправляет сообщение в чат: Развернуто my-web-app 2016-11-03 12:31

Тем не менее, я заметил метку времени от Time.new Это немного не так - похоже, это временная метка, когда рецепт был скомпилирован, а не когда ресурсы покрывались и запускались пару минут спустя.

Так что я попробовал это, но это не сработало undefined когда сообщение было опубликовано в чате)

  timeNow = "undefined"
  ruby_block "set-time-now" do
    block do
      timeNow = Time.new.strftime("%Y-%m-%d %H:%M:%S")
    end
  end

  unless Chef::Config[:solo]
    chat_message "Deployed #{artifact_name} `#{timeNow}`"
  end

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

2 ответа

Решение

Не уверен, что вы пытаетесь решить, но вы можете использовать узел для хранения метки времени.

node.normal[:cookbook_name][:deployment_time] = "undefined"
ruby_block "set-time-now" do
  block do
    node.normal[:cookbook_name][:deployment_time] = Time.new.strftime("%Y-%m-%d %H:%M:%S")
  end
end

unless Chef::Config[:solo]
  chat_message "Deployed #{artifact_name} #{node[:cookbook_name][:deployment_time]}"
end

То, что вы хотите, это ленивый оценщик, как это (дать или взять, что я не знаю, как ваш chat_message ресурс написан):

unless Chef::Config[:solo]
  chat_message "deployed" do
    message lazy { "Deployed #{artifact_name} `#{Time.new.strftime("%Y-%m-%d %H:%M")}`" }
  end
end

Это задержит оценку строки сообщения до времени конвергенции.

Другие вопросы по тегам