Como gerar um arquivo de configuração do atributo node (array) com o Chef?

1

Um dos atributos do nó do chef é uma matriz de hashes:

"array_of_hashes": [
      {
        "hash_key_1": "value1",
        "hash_key2": "value2",
      },
      {
        "hash_key_2": "value4",
        "hash_key_1": "value3",
      }
    ]

Eu preciso percorrer todos os elementos da matriz e gerar um arquivo de configuração com parâmetros de modelo definidos por valores em hashes:

# cat my_config.conf
key1=value1; key2=value2
key1=value3; key2=value4

Eu não consigo alcançar este resultado usando o recurso template porque ele escreve o arquivo de configuração (não o adiciona) em cada iteração de ciclo e eu recebo apenas a última string como resultado.

Qual é a melhor maneira de gerar esse arquivo de configuração mencionado acima?

    
por HUB 01.02.2012 / 09:48

2 respostas

2

Você pode usar um bloco de bash?

link

Então, algo como:

bash "append_to_config" do
  user "root"
  cwd "/path/to/config/directory"
  code <<-EOH
  echo "#{node[:array_of_hashes][:hash_key]}=#{node[:array_of_hashes][:hash_value]}" > my_config.conf
  EOH
end

Além dos laços, condições, etc., você precisaria fazer esse trabalho.

    
por 01.02.2012 / 13:38
1

Isso não é estritamente incorporado ao Chef como um recurso da biblioteca ou de qualquer um dos recursos, pois ao gerenciar o estado do sistema é melhor e mais confiável gerenciar todo o conteúdo de um arquivo. Se o conteúdo do modelo for modificado em outro lugar em outro livro de receitas, considere por que isso acontece e se pode ser sensato consolidar as receitas.

Você também pode usar um recurso interessante para "reabrir" um recurso definido - o método resources pode ser usado para selecionar determinado recurso. Exemplo muito básico:

Dito isso, a classe Chef::Util::FileEdit tem vários métodos auxiliares para gerenciar o conteúdo. O ticket que originalmente implementou o recurso é CHEF-78 . Não é documentado (desculpe) por razões que mencionei acima. Há um patch para estender ainda mais essa biblioteca para anexar uma linha, se ela não existir, que está sob o ticket CHEF-2740 . Você pode conseguir os resultados desejados com os métodos da biblioteca existente.

    
por 03.02.2012 / 05:54

Tags