我们有一个带有几个资源块的Chef配方。第一个资源块在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?我甚至可能会问这个问题吗?
答案 0 :(得分:0)
UUID是filesystem2
Ohai data的一部分:
filesystem2:
by_device:
/dev/md1:
...
uuid: f49a3dc8-a0b6-4e1c-8cd3-926fa7d8ee29
无需为此运行blkid
。
但是,如果您确实需要在块中计算某些内容并稍后使用它,则可以在块之前声明uuid
变量并改为使用ruby_block
。您还可以在ruby块中使用节点变量。无论如何,您将受到Chef two pass model的影响,并且需要进一步的解决方法(如懒惰属性)。
还有一个使用辅助方法的选项,但由于UUID是Ohai数据的一部分,我认为没有任何理由甚至尝试(在这种情况下)。