我还想保留手动编辑 hosts 文件的能力,至少是前 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
将这些主机条目放在 /etc/hosts 的底部是完美的。最好的方法是什么?有没有比编写 8 行主机清单更好的方法?
# create a simple hostname and ip host entry
host { 'front-01':
ip => '192.168.1.103',
}
可能有些服务器组需要在其 /etc/hosts 中使用不同的 IP /主机名。我会使用模板,但这意味着人们无法再在其 /etc/hosts 中进行手动更改,因为这些更改会被模板覆盖。
答案1
老实说,使用host
资源是最简单的方法。你只需要定义你想让 Puppet 控制的主机,你仍然可以手动编辑文件的其余部分(即使 Puppet 删除了那个告诉你不要这样做的标题)。
该augeas
模块对于主机文件来说是过度的,因为它只是复制了资源的功能host
(尽管它没有添加“不要编辑此文件”标题)。
如果你真的想要更复杂的东西,或者想要精细地控制文件中行的位置,请使用concat 模块使用其中一个片段的本地源。文档中有一个此类示例(使用 motd 文件)concat
。
但实际上,只需使用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';
}
答案2
使用 puppet 内置的 augeaus 功能。您需要类似
augeas {
context => "files/etc/hosts"
changes => [
"set <ip address> <name>",
],
}
答案3
除了主机资源类型之外,您可能还会选择在 /etc/hosts 文件中使用 augeas,用于重复的 IP 地址行。
hosts 资源类型非常乐意允许具有相同 IP 地址的线路。(谷歌搜索;在哪些极其模糊的情况下这可能是一个好主意。)
但是如果您不希望 /etc/hosts 文件中出现重复的 IP 地址,那么 augeas 可以帮助您。但 hosts 对此没有帮助。
答案4
仅一种方法,无需代码:
使用模板或其他任何可以更新文件/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
。
请注意,当用户编辑文件并且 puppet 运行更改该文件时,会出现竞争条件。或者,指示用户编辑一个文件/etc/hosts.user
,并/etc/hosts
在其中一个文件更改时从两个文件中构建文件。