我有兩個LWRP。第一個涉及創建磁盤卷,格式化它並將其掛載到虛擬機上,我們將這個資源稱爲cloud_volume
。第二個資源(它並不真正重要)需要用於新格式化卷的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!
異常。
做了一些挖掘之後,我發現食譜分兩個階段處理,一個是編譯階段和一個執行階段。看起來問題出現在編譯時,因爲這個時間點沒有設置node[:volumes][mount_point][:uuid]
。
不幸的是我不能使用Opscode公司擁有here的通知在cloud_volume LWRP正在使用的伎倆(所以它會落入文檔中所示的反模式)
所以,這一切後,我的問題是,有什麼辦法可以避免在編譯時知道disk_uuid
的值?
呃,這就是我正在尋找的!像魅力一樣工作,謝謝:-) – Matt
我已經爲您+1了,但非常感謝您指出添加了懶惰屬性評估的版本。 –