1 votes

chef : comment redémarrer un nœud seulement si un fichier confg est modifié

ENVIRONNEMENT : aws opsworks chef 11.10 et ubuntu 14.04.

J'utilise une recette de chef pour mettre à jour les /etc/dhcp/dhclient.conf sur un nœud aws opsworks ec2 afin d'ajouter mon suffixe de recherche dns personnalisé à la ligne de recherche dans le fichier /etc/resolv.conf fichier.

Comment puis-je faire en sorte que ma recette redémarre le nœud UNIQUEMENT si l'option file.insert_line_if_no_match met à jour le fichier ? Je ne veux évidemment pas que le nœud soit redémarré à chaque fois que la recette est exécutée.

Dans mon extrait de code ci-dessous la valeur de node['opsworks']['stack']['name'] est quelque chose comme a.dev.mydomain.com .

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

L'extrait de code ci-dessus ajoute la dernière ligne à /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 = array of unsigned integer 8;
send host-name = gethostname();
request subnet-mask, broadcast-address, time-offset, routers,
        domain-name, domain-name-servers, domain-search, host-name,
        dhcp6.name-servers, dhcp6.domain-search,
        netbios-name-servers, netbios-scope, interface-mtu,
        rfc3442-classless-static-routes, ntp-servers,
        dhcp6.fqdn, dhcp6.sntp-servers;
append domain-search "a.dev.mydomain.com";

Après un redémarrage, le /etc/dhcp/dhclient.conf est modifié comme suit :

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

REMARQUE : Je pense qu'il est trop risqué d'essayer de mettre en œuvre le paramètre avec quelque chose comme une sudo dhclient -r; sudo dhclient après la mise à jour du fichier, mais j'aimerais savoir si quelqu'un a réussi à faire fonctionner ce type de mise à jour sans redémarrage.

2voto

Tejay Cardon Points 379

Je vous suggère fortement de trouver un moyen de le faire sans redémarrer la machine. J'ai fait quelque chose de similaire sur Centos, par exemple, qui a été accompli avec un fichier sudo service network restart . Néanmoins, que vous redémarriez la machine ou un seul service, vous utiliserez le même schéma.

La "bonne" façon

La bonne façon de procéder est d'utiliser une ressource/fournisseur personnalisé. Dans ce cas (et il se peut très bien qu'il y en ait déjà un dans la communauté), vous écrirez un LWRP qui lit le fichier dhclient.conf et ne le modifie que si un changement est nécessaire. Il définit alors updated_by_last_action si le fichier est mis à jour. À ce moment-là, vous pourriez utiliser un service o execute pour redémarrer le service/machine. La ressource de redémarrage s'abonne aux modifications apportées à la ressource LWRP.

La façon presque aussi cool

Ou, vous faites quelque chose comme ça :

execute "add custom dns domain search suffix" do
  command "echo 'append domain-search \"#{node['opsworks']['stack']['name']}\";' >> /etc/dhcp/dhclient.conf"
  not_if { ::File.open('/etc/dhcp/dhclient.conf').read() =~ /append domain-search/ }
end

execute 'restart machine' do
  command 'shutdown immediate -r'
  action :nothing
  subscribes :run, 'execute[add custom dns domain search suffix]'
end

0voto

mr.bio Points 501

Merci beaucoup Tejay Cardon, votre code fonctionne comme un charme (je promets de me pencher sur l'écriture d'un LWRP un jour) !

Pour information, le code suivant fonctionne pour moi sur une version aws ec2 ubuntu 14.04. sans redémarrage . J'ai même pu faire un sudo ifdown eth0 && sudo ifup eth0 depuis une session ssh et n'a pas été déconnecté.

execute "add custom dns domain search suffix" do
  command "echo 'append domain-search \"#{node['opsworks']['stack']['name']}\";' >> /etc/dhcp/dhclient.conf"
  not_if { ::File.open('/etc/dhcp/dhclient.conf').read() =~ /append domain-search/ }
end

execute 'bounce eth0' do
  command 'sudo ifdown eth0 && sudo ifup eth0'
  action :nothing
  subscribes :run, 'execute[add custom dns domain search suffix]'
end

Pour une raison quelconque sudo service networking restart y sudo /etc/init.d/networking restart ne fonctionnent plus après la version 13.04 d'ubuntu et je ne fais pas cela sur un ordinateur de bureau ou sur un ordinateur portable. sudo service network-manager restart a pu fonctionner.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X