Pergunta

É possível especificar valores de atributos no JSON do Chef Solo?Eu tenho um solo.json com uma lista de execução e gostaria de especificar os atributos lá.A documentação do Chef parece indicar que deveria ser possível fazer algo como:

{
    "hostname": {
        "test": "value2"
    },
    "default_attributes": {
        "hostname": {
            "test": "value3"
        }
    },
    "override_attributes": {
        "hostname": {
            "test": "value4"
        }
    },
    "default": {
        "hostname": {
            "test": "value5"
        }
    },
    "run_list": [
        "recipe[hostname::default]"
    ]
}

Porém, sempre que tento acessar o valor da minha receita:

p node['hostname']['test']

Acabei de obter o valor definido em atributos/default.rb e, se não o definir lá, recebo de volta um valor nulo.

Existe uma maneira de referenciar esses valores?

Foi útil?

Solução

O único nível de atributos que você pode armazenar nos dados do nó é normal, todo o resto é redefinido no início da convergência e reconstruído a partir de funções, ambientes e livros de receitas.Você quer algo assim:

{
  "normal": {
    "hostname": {
      "test": "something"
    }
  },
  "run_list": [
    "recipe[hostname::default]"
  ]
}

Outras dicas

Tentei usar o exemplo acima para definir atributos em um arquivo JSON para chef-solo, e o "normal": {...} bloco foi completamente ignorado.A lista de execução foi lida, mas os atributos parecem nunca funcionar.

Meu comando é:

chef-solo -c /path/to/config_file.rb -j /path/to/file.json

Meu arquivo JSON:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "normal": {
    "my_cookbook": {
      "git_branch": "staging"
    }
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}

Durante as convergências, o Chef voltou direto aos valores padrão dentro de attributes/default.rb.Os valores JSON estão sendo inseridos corretamente?Até agora, minha única solução alternativa foi criar uma nova receita para cada "git_branch": atributo que desejo testar com chef-solo e adicionar essa lista de execução atualizada a um arquivo JSON diferente.Essencialmente, copiar uma receita inteira para alterar uma única node.normal['my_cookbook']['git_branch'] valor.Escusado será dizer que isso não deveria ser uma solução.

Usando Chef 14.0.202

Seguir:

Não definir o nível de precedência do atributo dentro do arquivo JSON com Chef Solo funciona.O JSON deve ser semelhante a este:

{
  "name": "my_json_file",
  "description": "JSON run-list and attributes.",
  "my_cookbook": {
    "git_branch": "staging"
  },
  "run_list": [
    "recipe[my_cookbook::recipe1]",
    "recipe[my_cookbook::recipe2]",
  ]
}

Não incluindo o "normal": {...} ou "default_attributes": {...}, etc, passarão atributos para chef-solo usar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top