我还想保留手动编辑主机文件的function,至less前10行。
#Public IP's - eth0 192.168.1.103 front-01 192.168.1.106 front-02 #Private IP's - eth1 192.169.40.201 priv0-0 192.169.40.202 priv0-1 192.169.40.207 priv1-0 192.169.40.208 priv1-1 #Virtual IP's - eth0:1 192.169.50.202 vip-01 192.169.50.205 vip-02
将这些主机input到/ etc / hosts的底部,将是完美的。 什么是最好的方法来做到这一点? 有没有比编写8个主机行清单更好的方法?
# create a simple hostname and ip host entry host { 'front-01': ip => '192.168.1.103', }
可能有服务器组在/ etc / hosts中需要不同的IP /主机名。 我会使用一个模板,但这意味着人们不能再在/ etc / hosts中进行手动更改,因为它们会被模板覆盖。
老实说,使用host资源是最简单的方法。 你只需要定义你想要由puppet控制的主机,你仍然可以手工编辑文件的其余部分(尽pipePuppet在这个头文件中放下了,告诉你不要)。
augeas模块对主机文件来说是过分的,因为它只是复制了host资源的function(尽pipe它没有添加到“不要编辑这个文件”头文件中)。
如果您真的想要更复杂的事情,或者您想要精确控制文件中行的位置,请使用concat模块和其中一个片段的本地源。 concat文档中有这样一个例子(使用motd文件)。
但是实际上,只需要使用host资源作为你想要从Puppet定义的主机,并编辑本地主机文件来获得你需要的任何东西。
另外请注意,您可以在Puppet中非常紧凑地编写主机定义:
host { # Public IPs - eth0 'front-01': ip => '192.168.1.103'; 'front-02': ip => '192.168.1.106'; # Private IPs - eth1 'priv0-0': ip => '192.169.40.201'; 'priv0-1': ip => '192.169.40.202'; 'priv1-0': ip => '192.169.40.207'; 'priv1-1': ip => '192.169.40.208'; # Virtual IPs - eth0:1 'vip-01': ip => '192.169.50.202'; 'vip-02': ip => '192.169.50.205'; }
使用木偶内置的augeausfunction。 你想要的东西
augeas { context => "files/etc/hosts" changes => [ "set <ip address> <name>", ], }
只是一个方法,没有代码:
使用模板或任何更新文件/etc/hosts.puppet清除开始和结束行
###PUPPETSTART### ## Users: Lines between START and END will be deleted, put your own entries below 192.168.0.1 host1 ###PUPPETEND###
并有一个shell脚本作为依赖关系,将这个段从/etc/hosts删除,并用/etc/hosts.puppet的内容replace它。
请注意,当用户编辑文件并且木偶运行改变文件时,这会造成竞争状态。 或者,指导用户编辑文件/etc/hosts.user并在每次更改时从两个文件中构build/etc/hosts 。