vik*_*eve 3 ruby date chef-infra convergence chatops
请考虑我的食谱末尾的这段代码deploy_to_tomcat
:
unless Chef::Config[:solo]
chat_message "Deployed #{artifact_name} `#{Time.new.strftime("%Y-%m-%d %H:%M")}`"
end
Run Code Online (Sandbox Code Playgroud)
它发布一条消息进行聊天:部署了 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
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法让我的时间戳反映实际时间(而不是食谱开始时)?
你想要的是一个像这样的惰性评估器(不管怎样,我不知道你的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
Run Code Online (Sandbox Code Playgroud)
这将延迟消息字符串的评估,直到收敛时间。