sin valor predeterminado para el atributo requerido

8

¿Cuál es el enfoque recomendado para usar un atributo en un recurso, como una plantilla, cuando no hay un valor predeterminado razonable para ese atributo? Se espera que el valor del atributo se proporcione en tiempo de ejecución. Si no es así, la ejecución de la receta del chef debería ser errónea.

La forma en que tengo cosas ahora es que el valor del atributo cuando se aplica a la plantilla es una cadena vacía.

/recipes/default.rb

template "/var/tmp/my_script.sh" do
    source "my_script.erb"
    mode "0755"
    variables({
        :url => node['environment']['url']
    })
end

/templates/default/my_script.erb

#!/bin/bash
echo "The url is: <%= @url %>"

El archivo /var/tmp/my_script.sh resultante se vería así:

#!/bin/bash
echo "The url is: "

Pero desearía que solo fuera un error. ¿Algún consejo?

Sarah Haskins
fuente

Respuestas:

5

Una cosa para señalar: si node['environment']no se ha establecido en absoluto, su ejemplo fallará tal como está. Aquí está la salida que obtuve:

[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Starting Chef Run for vagrant.int.housepub.org
[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Running start handlers
[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Start handlers complete.
[Tue, 16 Oct 2012 02:40:31 +0000] ERROR: Running exception handlers
[Tue, 16 Oct 2012 02:40:31 +0000] ERROR: Exception handlers complete
[Tue, 16 Oct 2012 02:40:31 +0000] FATAL: Stacktrace dumped to /tmp/vagrant-chef-1/chef-stacktrace.out
[Tue, 16 Oct 2012 02:10:38 +0000] FATAL: NoMethodError: undefined method `[]' for nil:NilClass

Pero eso no es muy útil, y no siempre es suficiente. Quizás desee hacer una validación adicional del atributo. En ese caso, puede poner algo como esto en su receta:

unless node['environment']['url'] && node['environment']['url'].size > 5
  Chef::Application.fatal!("The URL attribute isn't long enough.")
end

Ahora, la ejecución del Chef le dará un mensaje más útil cuando falle:

[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Starting Chef Run for vagrant.int.housepub.org
[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Running start handlers
[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Start handlers complete.
[Tue, 16 Oct 2012 02:41:36 +0000] FATAL: The URL attribute isn't long enough.
[Tue, 16 Oct 2012 02:41:36 +0000] ERROR: Running exception handlers
[Tue, 16 Oct 2012 02:41:36 +0000] ERROR: Exception handlers complete
zts
fuente