环境:aws opsworks chef 11.10 和 ubuntu 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
,但我很想知道是否有人在不重新启动的情况下获得了这种类型的更新。
我强烈建议您找到一种方法来执行此操作而无需重新启动机器。例如,我在 Centos 上做了类似的事情,这是通过
sudo service network restart
. 尽管如此,无论您重新启动机器还是仅重新启动一个服务,您都将使用相同的模式。正确的方式
正确的方法是使用自定义资源/提供者。在这种情况下(社区中很可能已经有一个),您将编写一个 LWRP 来读取
dhclient.conf
文件并仅在需要更改时对其进行修改。updated_by_last_action
如果文件被更新,它将被设置。那时您可以使用service
orexecute
资源来重新启动服务/机器。重新启动资源将订阅对 LWRP 资源的更改。几乎一样酷的方式
或者,您执行以下操作:
非常感谢 Tejay Cardon,你的代码就像一个魅力(我保证有一天我会考虑写一个 LWRP)!
FTR 以下代码适用于我的 aws ec2 ubuntu 14.04 构建,无需重新启动。我什至能够
sudo ifdown eth0 && sudo ifup eth0
从 ssh 会话中进行操作并且没有断开连接。出于某种原因
sudo service networking restart
,sudo /etc/init.d/networking restart
在 ubuntu 13.04 之后不再工作,我不是在桌面上这样做或者sudo service network-manager restart
可能已经工作了。