Como atualizar o nginx via Chef

1

Eu sou um desenvolvedor que recentemente herdou a configuração do nosso chef anterior. Estou executando o servidor Chef 10 e percebi que o livro de receitas do nginx do opscode ainda usa a versão 1.2.6 do nginx. Como há muitos patches de segurança que foram lançados, eu gostaria de passar para o 1.4.1 e achar que o Chef deve facilitar isso. No entanto, provou ser um pesadelo.

Meu primeiro pensamento foi simplesmente tornar o livro de receitas do nginx "custom" e alterar o atributo default['nginx']['version'] para 1.4.1, fazer upload do livro de receitas e convergir um servidor de teste. Eu assisti a busca da nova versão do livro de receitas (lembrei-me de atualizar os metadados) e a ignorei imediatamente, pois ela continuava usando o 1.2.6.

Depois pensei em substituir os atributos na função que estou usando (rails_tier_web é o nome da função). Falando com uma pessoa mais experiente do Chef, ele advertiu contra isso, já que os papéis não podem ser versionados e fixados da mesma forma que os livros de culinária. No entanto, lendo a documentação do livro de receitas, eles dizem para você usar os atributos de substituição em sua função e é isso que eu fiz:

override_attributes( 'nginx' => { 'source' => { 'version' => '1.4.1', 'prefix' => '/opt/nginx-1.4.1' }, 'version' => '1.4.1' } )

No entanto, quando eu converjo, ainda vejo traços de 1.2.6 aparecerem na saída do log.

[2013-07-15T18:52:03-04:00] INFO: Processing remote_file[http://nginx.org/download/nginx-1.2.6.tar.gz] action create (nginx::source line 56)
[2013-07-15T18:52:05-04:00] INFO: remote_file[http://nginx.org/download/nginx-1.2.6.tar.gz] updated

e logo depois disso ...

Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20130715-4790-1m689ee" ----
STDOUT:
STDERR: /tmp/chef-script20130715-4790-1m689ee: line 2: cd: nginx-1.4.1: No such file or directory
---- End output of "bash"  "/tmp/chef-script20130715-4790-1m689ee" ----
Ran "bash"  "/tmp/chef-script20130715-4790-1m689ee" returned 1

Resource Declaration:
---------------------
# In /var/chef/cache/cookbooks/nginx/recipes/source.rb

 84: bash "compile_nginx_source" do
 85:   cwd ::File.dirname(src_filepath)
 86:   code <<-EOH
 87:     tar zxf #{::File.basename(src_filepath)} -C #{::File.dirname(src_filepath)} &&
 88:     cd nginx-#{node['nginx']['source']['version']} &&
 89:     ./configure #{node.run_state['nginx_configure_flags'].join(" ")} &&
 90:     make && make install
 91:   EOH
 92:
 93:   not_if do
 94:     nginx_force_recompile == false &&
 95:       node.automatic_attrs['nginx'] &&
 96:       node.automatic_attrs['nginx']['version'] == node['nginx']['source']['version'] &&
 97:       node.automatic_attrs['nginx']['configure_arguments'].sort == configure_flags.sort
 98:   end
 99:
100:   notifies :restart, "service[nginx]"
101: end
102:

Compiled Resource:
------------------
# Declared in /var/chef/cache/cookbooks/nginx/recipes/source.rb:84:in 'from_file'

bash("compile_nginx_source") do
  action "run"
  retries 0
  retry_delay 2
  command "\"bash\"  \"/tmp/chef-script20130715-4790-1m689ee\""
  backup 5
  cwd "/var/chef/cache"
  returns 0
  code "    tar zxf nginx-1.4.1.tar.gz -C /var/chef/cache &&\n    cd nginx-1.4.1 &&\n    ./configure --prefix=/opt/nginx-1.2.6 --conf-path=/etc/nginx/nginx.conf --with-http_gzip_static_module --with-http_realip_module --with-http_ssl_module --with-http_stub_status_module &&\n    make && make install\n"
  interpreter "bash"
  cookbook_name "nginx"
  recipe_name "source"
  not_if { #code block }
end

Estou realmente no final, porque esperava poder substituir um atributo de versão e fazer com que tudo se encaixasse. Obviamente, esse não é o caso até agora e eu realmente não quero ter que fazer o patch manual e / ou a edição de objetos do nó se eu puder ajudar. Qualquer ajuda seria apreciada.

    
por MattC 16.07.2013 / 01:04

1 resposta

0

Você poderia colar o seu recipes/source.rb ? Parece-me que você está instalando a partir da fonte. estou certo?

Além disso, dê uma olhada nesta linha em seus atributos / default.rb:

default['nginx']['install_method'] = 'package'

Estou usando a linha acima para instalar o nginx 1.4.0

    
por 23.07.2013 / 23:15

Tags