Definindo propriedades no chef-client.rb

4

Eu tenho um caso de uso em que uma receita de chef precisa usar 'remote_file' para buscar um arquivo em um virtual, e a busca precisa ser feita por meio de um proxy HTTP. Isso não está funcionando porque o chef-client não usa as configurações de proxy do sistema ... ele obtém suas configurações de proxy do /etc/chef/chef-client.rb

Então, como obtenho configurações de proxy (ou configurações em geral) no arquivo chef-client.rb em um cliente?

Idealmente, eu gostaria que isso acontecesse no momento do bootstrap do cliente, mas não consigo ver como fazer isso antes de hackear o código.

A outra possibilidade é que eu poderia criar uma receita que atualize o arquivo chef-client.rb . Mas isso me parece um pouco perigoso. E isso significa que você precisa executar o chef-client duas vezes antes de funcionar, supondo que a configuração de proxy ausente na primeira execução faça com que a execução falhe no final.

Alguma idéia de como corrigir isso?

    
por Stephen C 24.01.2012 / 01:56

3 respostas

5

Fyi: O arquivo de configuração padrão é /etc/chef/client.rb , você precisaria passar -c /etc/chef/chef-client.rb para usar esse arquivo.

Para definir as definições de configuração do Chef para o proxy http , você pode definir o proxy para usar com knife bootstrap com a opção de linha de comando --bootstrap-proxy URL . Ou você pode adicionar isso em knife.rb .

knife[:bootstrap_proxy] = "https://proxy.example.com"

Substitua o valor " https://proxy.example.com " pelo seu URL do servidor proxy.

Isso adicionará as linhas http_proxy e https_proxy ao arquivo /etc/chef/client.rb automaticamente. Alternativamente, você pode criar um modelo de bootstrap personalizado com estes valores de configuração na seção de configuração do cliente . Algo parecido com isto (modificado de ubuntu10.04-gems.erb):

(
cat <<'EOP'
http_proxy "http://proxy.example.com" # replace with your URL
<%= config_content %>
EOP
) > /etc/chef/client.rb
    
por 30.01.2012 / 04:00
1

Surgiu esta questão quando tentei executar sozinho um trabalho de firewall por parte do Chef.

As mesmas configurações de http_proxy para o cliente chef client.rb podem ser usadas em solo.rb

Então, a corrida solo do chef será assim

solo.rb se parece com abaixo

cookbook_path File.expand_path("../cookbooks", __FILE__)
json_attribs File.expand_path("../node.json", __FILE__)

# HTTP for environment behind firewall
# http://docs.opscode.com/config.html
# solo.rb and client.rb can use the same http_proxy settings
http_proxy "http://proxy.company.com:3128"
# http_proxy_user "username"
# http_proxy_pass "password"

O chef é executado = > chef-solo -c solo.rb -j nó.json -l depurar '

Funciona! ; -)

    
por 25.06.2013 / 03:51
0

Então eu tive o mesmo problema e não pude obter dicas para trabalhar corretamente, pois não parece funcionar dessa maneira particular + falta de amostras de documentação.

No final, optei por editar o chef-full.erb , que é o modelo padrão de inicialização usado para gerar o client.rb

Para obter o arquivo correto, execute isto:

$ gem contents chef | grep bootstrap | grep full
/home/henryt/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb

Então vim that chef-full.erb file e adicione ohai :disabled_plugins line dentro do documento client.rb here ( cat > /etc/chef/client.rb <<'EOP' )

Ohai::Config[:disabled_plugins] = [:Passwd]

Meu arquivo de patch:

--- ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb.orig
   2016-07-22 00:53:33.689961205 -0700
+++ ~me/.rvm/gems/ruby-1.9.3-p547/gems/chef-11.16.4/lib/chef/knife/bootstrap/chef-full.erb
2016-07-22 00:44:21.253493396 -0700
@@ -64,6 +64,7 @@

cat > /etc/chef/client.rb <<'EOP'
<%= config_content %>
+Ohai::Config[:disabled_plugins] = [:Passwd]
EOP

cat > /etc/chef/first-boot.json <<'EOP'

Agora, toda vez que eu inicializo uma máquina, o client.rb é gerado com essa linha ohai :disabled_plugins e não preciso ter um arquivo client.rb personalizado.

    
por 22.07.2016 / 10:18

Tags