在Puppet中向/ etc / hosts文件添加一段文本的最佳方法是什么?


8

我还希望保留手动编辑主机文件的功能,至少要保留前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 / hostname。我将使用模板,但这意味着人们无法再在/ etc / hosts中进行手动更改,因为它们会被模板覆盖。

Answers:


14

老实说,使用host资源是最简单的方法。您只需要定义要由puppet控制的主机,您仍然可以手动编辑文件的其余部分(即使Puppet落在该标头中,告诉您不要这样做)。

augeas模块对于主机文件来说是多余的,因为它只是复制了host资源的功能(尽管它没有添加到“请勿编辑此文件”标头中)。

如果您确实想要更复杂的东西,或者想要更好地控制文件中行的位置,请使用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';
}

这个答案比我的要好得多:-)
Cian

1

使用木偶内置的augeaus功能。你想要类似的东西

augeas {
  context => "files/etc/hosts"
  changes => [
    "set <ip address> <name>",
  ],
}

0

除了主机资源类型以外,您还可以选择对/ etc / hosts文件使用augeas-重复IP地址行。

主机资源类型很令人愉快,允许具有相同IP地址的线路。(谷歌浏览器;这是个好主意,但情况极不明显的情况。)

但是,如果您不想在/ etc / hosts文件中使用重复的IP地址,那么augeas可以为您提供帮助。主机对此没有帮助。


-1

只是一个方法,没有代码:

使用模板或/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

当用户编辑文件并且木偶运行会更改它时,请注意这具有争用条件。或者,指示您的用户编辑文件/etc/hosts.user/etc/hosts在一个文件发生更改时从两个文件中构造文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.