私は2つのLWRPを持っています。1つ目は、ディスクボリュームの作成、フォーマット、および仮想マシンへのマウントを扱います。このリソースをこのリソースと呼びますcloud_volume
。2番目のリソース(実際には重要ではありません)には、必須属性である、新しくフォーマットされたボリュームのUUIDが必要です。これをこのリソースと呼びますfoobar
。
リソースcloud_volume
とfoobar
は、次のようなレシピで使用されます。
volumes.each do |mount_point, volume|
cloud_volume "#{mount_point}" do
size volume['size']
label volume['label']
action [:create, :initialize]
end
foobar "#{mount_point}" do
disk_uuid node[:volumes][mount_point][:uuid] # This is set by cloud_volume
action [:do_stuff]
end
end
したがって、シェフランを実行すると、Required argument disk_identifier is missing!
例外が発生します。
いくつか掘り下げた後、レシピがコンパイルフェーズと実行フェーズの2つのフェーズで処理されることを発見しました。問題はコンパイル時であるように見えます。それは設定されていない時点でnode[:volumes][mount_point][:uuid]
あるためです。
残念ながら、通知がcloud_volume LWRPで使用されているため、OpsCodeがここに持っているトリックを使用することはできません(したがって、ドキュメントに示されているアンチパターンに分類されます)
だから、このすべての後、私の質問は、disk_uuid
コンパイル時にの値がわかっているという要件を回避する方法はありますか?