Есть ли способ отложить разрешение атрибута ресурса до фазы выполнения?

У меня есть два 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 быть известным во время компиляции?

Ответы на вопрос(2)

Ваш ответ на вопрос