如何在同一配方的厨师资源区块之间传递变量
问题描述:
我们有一对厨师配方,有几个资源区块。第一个资源块位于bash中,并获取逻辑卷的UUID的值并存储到变量$ uuid中。如何在同一配方的厨师资源区块之间传递变量
# Get UUID value
bash 'get uuid' do
cwd "/"
code <<-EOH
uuid=$(blkid -o value -s UUID /dev/vg_volgroup/lv_logicalvolume)
EOH
end
我们需要的变量$uuid
传递给我们的第二个资源区块:
# Mount directory, format, update fstab
mount node['mount_dir'] do
dump 1
pass 2
device #{uuid}
device_type :uuid
fstype node['fstype']
options node['options']
action [ :mount, :enable]
end
不幸的是,这是行不通的。 $ uuid的值不会传入第二个资源块。
是否有更合适的方法来从第二个资源块中引用$ uuid?我甚至可能问什么?
答
UUID是filesystem2
Ohai data部分:
filesystem2:
by_device:
/dev/md1:
...
uuid: f49a3dc8-a0b6-4e1c-8cd3-926fa7d8ee29
没有必要运行blkid
这一点。但是,如果您确实需要计算某个块中的某些内容并稍后使用它,则可以在该块之前声明uuid
变量,并使用ruby_block
来代替。你也可以在ruby块中使用节点变量。无论如何,你会受到厨师two pass model的影响,它需要更多的解决方法(如懒惰属性)。
也有一个选项可以使用助手方法,但由于UUID是Ohai数据的一部分,所以我没有看到任何理由甚至尝试(在这种情况下)。
谢谢Szymon。我最终使用Ohai如下并完美地工作:'device node ['filesystem2'] ['by_device'] ['/ dev/mapper/vg_volgroup-lv_logicalvolume'] ['uuid']' – Keith