Chef:食谱中的流程序列

时间:2017-10-18 13:29:11

标签: chef chef-recipe

我的问题是验证我的食谱中的过程。

我的测试是 厨师12.18.31 Ubuntu 16.04 - AWS EC2 - Opsworks Stack

所以,如果我的配方有这样的序列:

Native_Chef_Resource do
Chef::Log.info("First")
My_First_Variable
end

My_Command do
my script based on My_First_Variable
end

My_Resource do
Chef::Log.info("Second")
My_Second_Variable
end

My_Other_Command do
my script based on My_Second_Variable
end

我注意到本地主厨资源是及时执行的,以便在My_Command中有价值,但是我在我的食谱中创建的资源不遵守序列,我没有My_Other_Command中的值。

在怀疑之后,我尝试用这些食谱和资源“通知”。

配方

test 'test notify' do
par_test 'primo test'
notifies :run, 'execute[bo]', :immediately
end

execute 'bo' do
command 'echo uname -a'
Chef::Log.info("execute bo")
end

资源

resource_name :test
property :par_test
default_action :create
action :create do
Chef::Log.info("#{par_test}")
end

我做了两次测试,一次是'立即',另一次是'之前'。

结果:

立即测试 [2017-10-15T12:54:41 + 02:00] INFO:执行bo [2017-10-15T12:54:41 + 02:00]信息:处理测试[测试通知]动作创建(deploy :: test_notify第1行) [2017-10-15T12:54:41 + 02:00]信息:primo测试 [2017-10-15T12:54:41 + 02:00]信息:处理执行[bo]动作运行(deploy :: test_notify第6行) [2017-10-15T12:54:41 + 02:00]信息:执行[bo]成功运行

用之前的测试

[2017-10-15T13:16:31 + 02:00] INFO:执行bo [2017-10-15T13:16:31 + 02:00]信息:测试[测试通知]运行为什么 - 运行创建动作以支持行动 [2017-10-15T13:16:31 + 02:00]信息:处理测试[测试通知]动作创建(deploy :: test_notify第1行) [2017-10-15T13:16:31 + 02:00]信息:primo测试 [2017-10-15T13:16:31 + 02:00]信息:处理测试[测试通知]动作创建(deploy :: test_notify第1行) [2017-10-15T13:16:31 + 02:00]信息:primo测试 [2017-10-15T13:16:31 + 02:00]信息:处理执行[bo]动作运行(deploy :: test_notify第6行) [2017-10-15T13:16:31 + 02:00]信息:执行[bo]成功运行

您对执行顺序有何看法? 感谢

1 个答案:

答案 0 :(得分:0)

我在https://coderanger.net/two-pass/得到了更长时间的描述,但基本上是:

在编译配方文件时,将运行基础级别配方中的任何Ruby代码(包括创建资源的所有调用)。这包括资源的主do ... end块中的任何代码(与block的{​​{1}}属性或ruby_block内的任何内容相对),因为该块是{{1在创建资源对象期间。在编译运行列表中的所有配方之后,在收敛阶段期间运行资源的操作方法。对于自定义资源,这个过程以递归方式重复,其动作方法是他们自己的迷你编译和收敛阶段。