ruby - Chef : how to get a timestamp at *convergence* rather than *compile* time

标签 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

它发布一条聊天消息:已部署 my-web-app 2016-11-03 12:31

但是,我注意到 Time.new 中的时间戳有点过时 - 它似乎是 Recipe 编译时的时间戳,而不是资源 时的时间戳几分钟后,em>找到了然后跑了。

所以我尝试了这个,但它没有用(消息发布到聊天时 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

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

最佳答案

你想要的是一个像这样的惰性求值器(我不知道你的 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

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

关于ruby - Chef : how to get a timestamp at *convergence* rather than *compile* time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40400590/

相关文章:

javascript - AJAX 表单和 Rails 在 js 模板上呈现?

javascript - 动态添加 jQuery multidatepicker "addDisabledDates"属性

ruby - 如何从 Chef 说明书中的库访问当前节点?

ruby-on-rails - 如何在 Vagrant 中获取 IP 地址?

ruby - 无法在centos上手动安装chef-server旧版本

ruby-on-rails - 有没有办法在一行中有条件地添加到数组?

ruby - 用户输入字符串或整数

javascript - 日期对象行为

java - Spring Boot Jackson 日期和时间戳格式

ruby - 如何在 Rakefile 中上传 IronWorker 的工作人员?