如何在同一配方的厨师资源区块之间传递变量

问题描述:

我们有一对厨师配方,有几个资源区块。第一个资源块位于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数据的一部分,所以我没有看到任何理由甚至尝试(在这种情况下)。

+0

谢谢Szymon。我最终使用Ohai如下并完美地工作:'device node ['filesystem2'] ['by_device'] ['/ dev/mapper/vg_volgroup-lv_logicalvolume'] ['uuid']' – Keith