¿Hay alguna forma de retrasar la resolución de los atributos de un recurso hasta la fase de "ejecución"?

Tengo dos LWRPs. El primero trata de crear un volumen de disco, formatearlo y montarlo en una máquina virtual, llamaremos a este recursocloud_volume. El segundo recurso (no es realmente importante lo que hace) necesita un UUID para el volumen recién formateado, que es un atributo requerido, llamaremos a este recursofoobar.

Los recursoscloud_volume yfoobar Se utilizan en una receta parecida a la siguiente.

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

Entonces, cuando hago una carrera de chef me sale unRequired argument disk_identifier is missing! excepción.

Después de hacer algunas excavaciones, descubrí que las recetas se procesan en dos fases, una fase de compilación y una fase de ejecución. Parece que el problema está en el momento de la compilación, ya que ese es el momento en el quenode[:volumes][mount_point][:uuid] no está establecido

Desafortunadamente no puedo usar el truco que OpsCode tieneaquí ya que las notificaciones se están utilizando en el cloud_volume LWRP (por lo que caería en el antipatrón que se muestra en la documentación)

Entonces, después de todo esto, mi pregunta es, ¿hay alguna manera de sortear el requisito de que el valor dedisk_uuid ser conocido en tiempo de compilación?

Respuestas a la pregunta(2)

Su respuesta a la pregunta