шеф-повар: как я перезагружаю узел, только если confg файл изменяется

СРЕДА: aws opsworks шеф-повар 11.10 и человечность 14.04.

Я использую рецепт шеф-повара для обновления /etc/dhcp/dhclient.conf файл на узле aws opsworks ec2 для добавления моего пользовательского DNS, ищет суффикс на поисковую строку в /etc/resolv.conf файл.

Как я заставляю свой рецепт перезагружать узел ТОЛЬКО ЕСЛИ file.insert_line_if_no_match обновляет файл? Я, очевидно, не хочу узел, перезагрузил каждый раз, когда рецепт выполняется.

В моем фрагменте кода ниже значения node['opsworks']['stack']['name'] что-то как 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

Фрагмент кода выше добавляет последнюю строку к /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";

После перезагрузки, /etc/dhcp/dhclient.conf изменяется следующим образом:

# 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

Примечание: Я думаю, что это слишком опасно, чтобы попытаться реализовать установку с чем-то как a sudo dhclient -r; sudo dhclient после обновления файла, но я хотел бы услышать, заставил ли кто-либо этот тип обновления работать без перезагрузки.

1
задан 4 November 2014 в 01:24
2 ответа

Я настоятельно рекомендую вам найти способ сделать это без перезапуска машины. Я сделал кое-что подобное, например, на Centos, что было сделано с перезагрузкой сети sudo service . Тем не менее, перезагружаете ли вы машину или просто один сервис, вы будете использовать тот же шаблон.

Правильный способ

Правильный способ сделать это - с помощью пользовательского ресурса/провайдера. В этом случае (а в сообществе, возможно, он уже есть), вы напишете LWRP, который читает файл dhclient.conf и модифицирует его только в том случае, если необходимо внести изменения. Затем он установит update_by_last_action, если файл будет обновлен. В этот момент можно воспользоваться ресурсом или выполнить , чтобы перезапустить службу/машину. Ресурс перезапуска подпишется на изменения ресурса LWRP.

Почти так же круто

Или вы делаете что-то вроде этого:

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
2
ответ дан 3 December 2019 в 21:10

Большое спасибо Теджею Кардону, ваш код работает как шарм (обещаю, когда-нибудь я займусь написанием LWRP)!

FTR следующий код работает для меня на aws ec2 ubuntu 14.04 build без перезагрузки. Я даже смог сделать sudo ifdown eth0 && sudo ifup eth0 из ssh сессии и не отключился.

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

По каким-то причинам sudo service network restart и sudo /etc/init. d/networking restart больше не работает после ubuntu 13.04 и я не делаю этого на рабочем столе или sudo service network-manager restart возможно сработал.

.
0
ответ дан 3 December 2019 в 21:10

Теги

Похожие вопросы