2

deploy_to_tomcat请在我的食谱末尾考虑这段代码:

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

它发布一条消息进行聊天:Deployed 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

有没有更简单的方法让我的时间戳反映实际时间(而不是食谱开始时)?

4

2 回答 2

4

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

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

于 2016-11-18T16:28:39.017 回答
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
于 2016-11-04T07:21:51.243 回答