Есть ли способ отложить разрешение атрибута ресурса до фазы выполнения?
У меня есть два 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Вот поскольку уведомления используются в LWRP cloud_volume (поэтому они могут попасть в анти-шаблон, показанный в документации)
Итак, после всего этого, мой вопрос, есть ли способ обойти требование, что значениеdisk_uuid
быть известным во время компиляции?