2017-05-31 11 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 

は、私たちは、第2の資源ブロックに変数$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の値は2番目のリソースブロックに渡されません。

2番目のリソースブロックから$ uuidを参照するより適切な方法はありますか?私は何を求めているのでしょうか?

答えて

1

UUIDはfilesystem2 Ohai dataの一部です:

filesystem2: 
    by_device: 
    /dev/md1: 
     ... 
     uuid:    f49a3dc8-a0b6-4e1c-8cd3-926fa7d8ee29 

このためblkidを実行する必要はありません。

ブロック内で何かを計算して後で使用する必要がある場合は、ブロックの前にuuidという変数を宣言し、代わりにruby_blockを使用します。また、ルビブロック内でノード変数を使用することもできます。とにかく、あなたはシェフのtwo pass modelの影響を受けるでしょうし、さらなる回避策(怠惰な属性のような)が必要になります。

また、ヘルパーメソッドを使用するオプションもありますが、UUIDはOhaiデータの一部であるため、(この場合は)試しても何の理由もありません。

+0

ありがとうSzymon。私はOhaiを次のように使ってしまい、完全に動作します: 'device node ['filesystem2'] ['by_device'] ['/ dev/mapper/vg_volgroup-lv_logicalvolume'] ['uuid']' – Keith

関連する問題