2017-05-31 79 views
0

我們有一對廚師配方,有幾個資源區塊。第一個資源塊位於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

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