【问题标题】:chef: how to get a timestamp at *convergence* rather than *compile* time厨师:如何在 *convergence* 而不是 *compile* 时间获得时间戳
【发布时间】:2016-11-03 11:40:40
【问题描述】:

请在我的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

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

【问题讨论】:

    标签: ruby date chef-infra convergence chatops


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 谢谢,我会在星期一试试这个。
      猜你喜欢
      • 2015-03-20
      • 2015-11-29
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      相关资源
      最近更新 更多