para imagen emplea ejemplo atributos atributo chef

chef - imagen - ejemplo de atributo alt html



Chef: ¿Cómo invalido los atributos predeterminados en los roles? (6)

Estoy usando el libro de cocina opscode nginx para configurar el servidor nginx en mis nodos. El libro de cocina nginx tiene algunos atributos predeterminados que me gustaría anular en mi función ("servidor web").

Estos son los atributos que me gustaría anular:

default[''nginx''][''version''] = "1.2.2" # in cookbooks/nginx/attributes/default.rb default[''nginx''][''source''][''prefix''] = "/opt/nginx-#{node[''nginx''][''version'']}" # in cookbooks/nginx/attributes/source.rb

En mi archivo roles / web_server.rb tengo algo como esto:

name "web_server" description "Setup a web server" run_list "role[base]", "recipe[nginx]" override_attributes ''nginx'' => { ''install_method'' => "source", ''version'' => "1.2.3", ''source'' => { "prefix" => "/opt/nginx", "checksum" => nil } }

Sin embargo, al ejecutar el chef-cliente, la receta nginx ignora mis anulaciones y usa las predeterminadas.

¿Qué estoy haciendo mal aquí?

¡Gracias!



¿Has probado con paréntesis? Probé su ejemplo entre paréntesis y anulé los atributos predeterminados.

# your roles/web_server.rb file override_attributes( ''nginx'' => { ''install_method'' => "source", ''version'' => "1.2.3", ''source'' => { "prefix" => "/opt/nginx", "checksum" => nil } } )


De acuerdo con el documento de https://docs.chef.io/attributes.html#attribute-precedence del https://docs.chef.io/attributes.html#attribute-precedence , esto debería funcionar:

name "web_server" description "Setup a web server" run_list "role[base]", "recipe[nginx]" default_attributes ''nginx'' => { ''install_method'' => "source", ''version'' => "1.2.3", ''source'' => { "prefix" => "/opt/nginx", "checksum" => nil } }

No debe usar override_attributes en los roles . Una vez que comience a usar anulaciones en lugar de valores predeterminados, terminará rápidamente encontrando que ha usado la anulación más fuerte posible y no tendrá otra forma de anularla. Utilice default_overrides lugar.

Las reglas de precedencia en torno a los atributos, que usan solo el nivel default son en realidad bastante similares:

  1. Si hay uno, se usa el atributo del rol, por ejemplo, require_two_factor_auth se fuerza a verdadero con default_overrides en el role[single_sign_on] , incluso en QA
  2. Si hay uno, se usa el atributo del entorno, por ejemplo, require_two_factor_auth se fuerza a verdadero en production
  3. Si hay uno, se usa el atributo de la receta, por ejemplo, require_two_factor_auth se establece en true en auth::two_factor
  4. Finalmente, se utiliza el atributo predeterminado sano del archivo de atributos predeterminado, por ejemplo, require_two_factor_auth = false

Sin embargo, es extremadamente inusual que se establezca el mismo atributo en esos cuatro lugares. Si el valor correcto del atributo realmente depende de la receta, el rol y el entorno, entonces el valor resultante combina las características de los tres, y se establece un atributo diferente en cada nivel y se combina en la receta.

Si esto no funciona, dos posibilidades son:

  • Rol editado no cargado al servidor
  • Anulación de la lista de ejecuciones con chef-client -o "recipe[nginx]" lugar de chef-client -o role[web_server] o simple chef-client

Si ese no es el caso, por favor proporcione más detalles. Uso esto todo el tiempo y siempre ha funcionado, y me preocuparía si hubiera casos extremos en los que esto no se comporte como se documenta.


El único problema que puedo adivinar es que estos atributos deben haber sido superados por el atributo force_overridden. También asegúrese de que los atributos que ha superado estén disponibles para la lista de ejecución (ya que soy escéptico sobre la forma en que ha organizado su archivo de rol)


El cuadro de precedencia de atributos [1] muestra que estas cuatro opciones se ubican por encima de su rol:

12. An override attribute located in an environment 13. A force_override attribute located in a cookbook attribute file 14. A force_override attribute located in a recipe 15. An automatic attribute identified by Ohai at the start of the chef-client run

Si esto no parece ser la causa, quizás ayude cambiar el formato. Yo lo escribiría como:

override_attributes( nginx: { install_method: ''source'', version: ''1.2.3'', source: { prefix: ''/opt/nginx'', checksum: [ ], }, } )

[1] https://docs.chef.io/attributes.html#attribute-precedence


También puede usar los atributos de anulación en el editor de roles (en la web o en la edición de roles de cuchillo)

{ "name": "web_server", "description": "nginx version", "json_class": "Chef::Role", "default_attributes": { }, "override_attributes": { "nginx": { "version": "1.2.2" } }, "chef_type": "role", "run_list": [ "recipe[]", "recipe[]" ], "env_run_lists": { } }