Existe uma maneira de passar parâmetros em tempo de execução no Chef?

6

Eu queria passar alguns atributos para chef-client em tempo de execução. Existe uma maneira de fazer o mesmo? Eu estava procurando na opção chef-client -j , mas que eu saiba, ela pode ser usada para especificar o run_list. Posso passar alguns atributos nele? Se sim, como?

    
por Manak Wadhwa 19.02.2013 / 09:58

3 respostas

9

Sim, você pode usar a opção -j json para preencher os atributos do nó.

{
  "my_attribute": "I like attributes!"
}

Isso fará com que um atributo chamado my_attribute esteja disponível em seus livros de culinária. Por exemplo,

Chef::Log.info(node['my_attribute'])

Ou

if node['my_attribute'] =~ /like/
  package "foo-likes-attributes" do
    action :install
  end
end

Definir uma run_list inicial é o uso mais comum do arquivo de atributos do json para o Chef Client. Se você estiver usando o Chef + Chef Server, no entanto, você pode simplesmente modificar o objeto do nó no servidor através do webui (Open Source Chef Server) ou console de gerenciamento (Opscode Hosted / Private Chef) ou através de knife node edit if você está usando a ferramenta de linha de comando, faca.

Observe que o uso do arquivo JSON é como modificar o objeto do nó no servidor, os atributos definidos aqui como prioridade "normal", como quando são usados em uma receita, e esses valores de atributos serão salvos no objeto Nó no servidor no final de uma corrida bem sucedida.

por 19.02.2013 / 17:07
1

A maneira ideal de usar atributos é escrevê-los em seu livro de receitas ou em um pacote de dados. Aqui estão os locais dos arquivos para:

Layout do Diretório de Repo do Chef

|- chef-repo
|---- cookbooks
|------- attributes
|---------- default.rb
|------- recipes
|---------- default.rb
|---- data_bags
|------- users
|---------- john.json
|---------- susan.json
|------- databases
|----------- master.json
|----------- slave.json

Você pode armazenar dados em seus arquivos de bolsa de dados no formato JSON básico ( knife create data_bag users ).

Crie um pacote de dados do usuário para john:

$ knife data bag create users john

{
  "id" : "john"
  "age" : "27"
  "height" : "60in"
}

Usando Sacos de Dados

Se você optar por usar bolsas de dados (eu as recomendo se você tiver muitos usuários ou servidores de banco de dados diferentes (neste contexto)), poderá ver mais informações em link . Além disso, é mais fácil criar um diretório users em seu diretório data_bags, e criar os arquivos .json do usuário lá (~ / chef-repo / data_bags / users / john.json) com o conteúdo acima, então carregar o pacote de dados para o servidor do chef: knife data bag from file users /path/to/data_bags/users/john.json

Usando atributos

Você também pode armazenar os dados em seu arquivo de atributos:

arquivo de atributos

$ vi ~/chef-repo/cookbooks/my-cookbook-name/attributes/default.rb

default['my-cookbook-name']['user-1'] = "John"
default['my-cookbook-name']['user-1']['age'] = "27"
default['my-cookbook-name']['user-1']['height'] = "60in"

receita de livro de receitas

$ vi ~/chef-repo/cookbooks/my-cookbook-name/default.rb

template "/root/user-list" do
  action :create
  source "user-list.erb"
end

user-list.erb

$ vi ~/chef-repo/cookbooks/my-cookbook-name/templates/default/user-list.erb

<html>
<head>
 <title>My User List</title>
</head>
<body>
<h1>User List</h1>
User 1: <%= node['my-cookbook-name']['user-1'] %>
User Age: <%= node['my-cookbook-name']['user-1']['age'] %>
User Height: <%= node['my-cookbook-name']['user-1']['height'] %>
</body> 
</html>
    
por 04.10.2014 / 16:01
1

você pode fazer isso na linha de comando, mas - especialmente em uma execução de faca - ele vai começar a parecer reeeally ooky:

chef-client \
  -o vmware-tools \
  --force-formatter \
  -j '<(echo {\"vmware-tools\":{\"style\":\"rpm\"}})'

Mas aqui estamos aproveitando -j e um <(notation) para criar o arquivo JSON em tempo real, como artefatos lançados via faca (ou ssh-i, aqui). Se você tiver que fazer isso, o risco é que os delimitadores conflitantes o deixem insano no momento em que você o faz funcionar.

    
por 25.04.2017 / 19:23

Tags