大厨:如何在* convergence *而不是* compile * time获得时间戳

时间:2016-11-03 11:40:40

标签: ruby date chef convergence chatops

请在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的时间戳有点过了 - 这似乎是配方编译时的时间戳,而不是资源覆盖的时间戳

所以我试过这个,但它没有用(当消息发布到聊天时,timeNow仍然是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 个答案:

答案 0 :(得分:2)

你想要的是这样一个懒惰的评估者(给予或接受我不知道你的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

这将延迟评估消息字符串,直到收敛时间。

答案 1 :(得分:1)

不确定您尝试解决的问题,但您可以使用节点存储时间戳。

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