Estoy usando el opscode nginx libro de cocina para configurar el servidor nginx en mi nodos.
El nginx libro de cocina tiene algunos atributos por defecto me gustaría cambiar en mi papel («web_server»).

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 roles/web_server.rb archivo 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, cuando se ejecuta el chef-client el nginx receta ignora mi anula y utiliza los valores predeterminados.

¿Qué estoy haciendo mal aquí?

Gracias!

  • No se olvidó de cargar papel para chef-server (si se usa) ?
  • Estás running chef-client con o sin personalizado de la lista de ejecución (-s)? Hoy he aprendido (después de 2-3 horas de depuración) que el conjunto de atributos en el papel de nodo no se utiliza cuando se reemplaza la lista de ejecución.
  • Me encontré con el mismo problema :/ estoy bastante seguro de que me puse override_attributes en papel, y yo sólo lo uso por defecto en mi atributos de archivo. Apuesto a que esto es una especie de chef bug o qué.
  • ¿Has solucionado este problema?
  • gracias por tu comentario. Me pasé horas y horas tratando de averiguar por qué mi papel atributos que no estaban obteniendo recogido cuando se ejecuta mi receta a través de -o. Hizo usted encontrar la documentación de este comportamiento en cualquier lugar?
  • Poniendo atributos de papeles es el mal!! Yo les recomiendo vivamente en contra de ella! Hay muchos otros lugares para ellos (demasiados), hazte un favor, y sólo utilizar las funciones principalmente para la run_lists. ; )

InformationsquelleAutor Milan Novota | 2012-08-27

6 Comentarios

  1. 4

    La prioridad de atributo gráfico [1] muestra que estos cuatro opciones de rango por encima de su papel:

    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 estos no parecen ser la causa, tal vez cambiando el formato podría ser de ayuda. Me gustaría escribir 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

  2. 3

    De acuerdo a la Chef Atributo De Preferencia documento, 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 }
    }
    

    Que no se debe usar override_attributes en funciones. Una vez que usted comience a usar anula en lugar de los valores predeterminados, puede encontrar que usted ha utilizado la más fuerte posible anular y no tienen otra manera de anular la misma. Uso default_overrides lugar.

    Las reglas de prioridad en torno a los atributos, utilizando sólo la default nivel son en realidad muy mismo:

    1. Si hay uno, el atributo de la función se utiliza, por ejemplo, require_two_factor_auth se ve obligado a true con default_overrides en role[single_sign_on], incluso en QA
    2. Si hay uno, el atributo del medio ambiente es utilizado, por ejemplo, require_two_factor_auth es forzado a la verdad en production
    3. Si hay uno, el atributo de la receta es utilizado, por ejemplo, require_two_factor_auth se establece en true en auth::two_factor
    4. Finalmente, el cuerdo atributo predeterminado el valor predeterminado del atributo de archivo es utilizado, por ejemplo, require_two_factor_auth = false

    Sin embargo, es muy raro que un mismo atributo se establece en todos los cuatro de esos lugares, aunque. Si el valor del atributo realmente depende de la receta y el papel y el medio ambiente, entonces por lo general el valor resultante combina las características de los tres, y un atributo diferente es establecer en cada nivel y combinados en la receta.


    Si esto no funciona, hay dos posibilidades:

    • Editado papel cargado en el servidor
    • Primordial ejecutar lista con chef-client -o "recipe[nginx]" en lugar de chef-client -o role[web_server] o llanura chef-client

    Si ese no es el caso, favor de proporcionar más detalles. Yo uso todo el tiempo y es que siempre ha trabajado, y yo estaría preocupado si hay casos extremos en que esto no se comportan como se documenta.

  3. 1

    El único problema que me podía imaginar es que estos atributos debe haber sido anulado por
    force_overridden atributo.
    También asegúrese de que los atributos que se han anulado están disponibles para la runlist(ya que yo soy escéptico en cuanto a la forma de organizar su papel archivo)

  4. 1

    También puede utilizar atributos de modificación en función de editor (en la web o un cuchillo de papel edición)

    {
      "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": {
    
      }
    }
    
  5. 0

    ¿Has probado con paréntesis? He probado el ejemplo y con paréntesis y tiene el defecto de los atributos anulado.

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

Dejar respuesta

Please enter your comment!
Please enter your name here