如何在相同配方的Chef资源块之间传递变量

时间:2017-05-31 17:20:33

标签: chef-recipe

我们有一个带有几个资源块的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?我甚至可能会问这个问题吗?

1 个答案:

答案 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数据的一部分,我认为没有任何理由甚至尝试(在这种情况下)。