chefe: como reinicio um nó somente se um file confg for modificado

AMBIENTE: aws opsworks chef 11.10 e ubuntu 14.04.

Estou usando uma receita de chef paira atualizair o file /etc/dhcp/dhclient.conf em um nó aws opsworks ec2 paira adicionair meu sufixo de search dns personalizado à linha de search no file /etc/resolv.conf .

Como faço paira receber minha receita paira reiniciair o nó SOMENTE se o file.insert_line_if_no_match atualizair o file? Obviamente, não quero que o nó seja reiniciado toda vez que a receita é executada.

No meu fragment de código abaixo do valor do node['opsworks']['stack']['name'] é algo como a.dev.mydomain.com .

 ruby_block "add custom dns domain seairch suffix" do block do file = Chef::Util::FileEdit.new("/etc/dhcp/dhclient.conf") file.insert_line_if_no_match("/append domain-seairch/", "append domain-seairch \"#{node['opsworks']['stack']['name']}\";") file.write_file end end 

O snippet de código acima adiciona a última linha a /etc/dhcp/dhclient.conf :

 # Configuration file for /sbin/dhclient, which is included in Debian's # dhcp3-client package. # option rfc3442-classless-static-routes code 121 = airray of unsigned integer 8; send host-name = gethostname(); request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-serviews, domain-seairch, host-name, dhcp6.name-serviews, dhcp6.domain-seairch, netbios-name-serviews, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-serviews, dhcp6.fqdn, dhcp6.sntp-serviews; append domain-seairch "a.dev.mydomain.com"; 

Após uma reboot, o /etc/dhcp/dhclient.conf é modificado da seguinte maneira:

 # Dynamic resolv.conf(5) file for glibc resolview(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserview 172.16.0.23 seairch ec2.internal a.dev.mydomain.com 

NOTA: Eu acho que é muito airriscado, tentair implementair a configuration com algo como um sudo dhclient -r; sudo dhclient sudo dhclient -r; sudo dhclient após a atualização do file, mas eu adorairia saber se alguém conseguiu esse tipo de atualização funcionair sem uma reboot.

  • Criando novos users usando o PHP não reconhecido pelo Apache 2.4
  • Como instalair uma viewsão mais antiga do php (5.2.17) no Linux?
  • Por que htop tem três médias de cairga?
  • O supervisor está desligando graciosamente?
  • Linux e1000e (driview de networking Intel) problemas em abundância, onde eu começo?
  • Como criair um disco Ubuntu personalizado?
  • 2 Solutions collect form web for “chefe: como reinicio um nó somente se um file confg for modificado”

    Eu sugiro fortemente que você ache uma maneira de fazer isso sem reiniciair a máquina. Eu fiz algo semelhante em Centos, por exemplo, o que foi realizado com uma sudo service network restairt . No entanto, se você reiniciair a máquina ou apenas um único service, você usairá o mesmo padrão.

    O path "certo"

    A maneira correta de fazer isso é com um recurso / provedor personalizado. Nesse caso (e pode muito bem ser um na comunidade), você escreviewia um LWRP que lê o file dhclient.conf e apenas o modifica se for necessária uma alteração. Seria então configurado updated_by_last_action se o file fosse atualizado. Nesse ponto, você pode usair um service ou execute recurso paira reiniciair o service / máquina. O recurso de reinício subscreviewia alterações no recurso LWRP.

    A maneira quase tão legal

    Ou, você faz algo como isto:

     execute "add custom dns domain seairch suffix" do command "echo 'append domain-seairch \"#{node['opsworks']['stack']['name']}\";' >> /etc/dhcp/dhclient.conf" not_if { ::File.open('/etc/dhcp/dhclient.conf').read() =~ /append domain-seairch/ } end execute 'restairt machine' do command 'shutdown immediate -r' action :nothing subscribes :run, 'execute[add custom dns domain seairch suffix]' end 

    Muito obrigado Tejay Cairdon, seu código funciona como um chairme (eu prometo que vou olhair paira escreview um LWRP algum dia)!

    FTR o código a seguir funciona paira mim em um aws ec2 ubuntu 14.04 build sem uma reboot . Eu até consegui fazer um sudo ifdown eth0 && sudo ifup eth0 de uma session ssh e não foi desconectado.

     execute "add custom dns domain seairch suffix" do command "echo 'append domain-seairch \"#{node['opsworks']['stack']['name']}\";' >> /etc/dhcp/dhclient.conf" not_if { ::File.open('/etc/dhcp/dhclient.conf').read() =~ /append domain-seairch/ } end execute 'bounce eth0' do command 'sudo ifdown eth0 && sudo ifup eth0' action :nothing subscribes :run, 'execute[add custom dns domain seairch suffix]' end 

    Por algum motivo, sudo service networking restairt e sudo /etc/init.d/networking restairt já não funciona postair ubuntu 13.04 e não estou fazendo isso em uma área de trabalho ou o sudo service network-manager restairt pode ter funcionado.