Chef infra 我如何安装一个程序,然后在同一个Chef运行中执行它?
我正在使用Chef安装serf,然后我需要执行Chef infra 我如何安装一个程序,然后在同一个Chef运行中执行它?,chef-infra,Chef Infra,我正在使用Chef安装serf,然后我需要执行serf members-format=JSON。我的代码如下所示: include_recipe "mycookbook::serf" log `serf members -format=json` 但是,日志中没有打印任何内容。重新运行chef运行(安装serf后)会在日志中生成JSON输出 为什么它不能第一次得到信息?在调用serf成员之前,我们如何确保程序已安装?在Chef中计算代码的准确时间可能有点棘手。这是一个多重过程。First ch
serf members-format=JSON
。我的代码如下所示:
include_recipe "mycookbook::serf"
log `serf members -format=json`
但是,日志中没有打印任何内容。重新运行chef运行(安装serf
后)会在日志中生成JSON输出
为什么它不能第一次得到信息?在调用
serf成员之前,我们如何确保程序已安装?在Chef中计算代码的准确时间可能有点棘手。这是一个多重过程。First chef评估其运行列表中的所有烹饪书,以建立一个要做的事情列表。如果您编写“原始ruby”,它将在这个阶段得到评估
因此,在您的情况下,当您向外抛出以运行serf二进制文件时,它还不可用
有两种方法可以处理这个问题,最简单的方法是在chef运行结束时将serf命令放入报表处理程序中
如果在运行期间需要serf结果,则需要指定运行serf命令依赖于资源。最简单的方法是将serf命令放在ruby_块资源中
这确保了ruby将在初始传递和serf安装cookbook之后执行 您想将其放入ruby\u块中
include_recipe "mycookbook::serf"
ruby_block do
block do
Chef::Log.info `serf members -format=json`
end
end
这是可行的,但是我遇到了在不同上下文中访问变量的问题。显然,ruby_块
中的变量只是块本身的局部变量?我很确定情况并非如此。你能帮我寄密码吗?