![使用 puppet 将一个主机的多个 IP 添加到 /etc/hosts 中](https://linux22.com/image/741249/%E4%BD%BF%E7%94%A8%20puppet%20%E5%B0%86%E4%B8%80%E4%B8%AA%E4%B8%BB%E6%9C%BA%E7%9A%84%E5%A4%9A%E4%B8%AA%20IP%20%E6%B7%BB%E5%8A%A0%E5%88%B0%20%2Fetc%2Fhosts%20%E4%B8%AD.png)
我使用 puppet 管理主机。主机运行双栈 IPv4 和 IPv6。我想将两个地址都添加到 /etc/hosts。当我手动添加时,我的 /etc/hosts 文件将如下所示:
192.0.2.1 hostname.example.com hostname
2001:db8::1 hostname.example.com hostname
我尝试使用 puppet 来执行此操作,同时仍然能够手动将主机添加到 /etc/hosts。
我的第一次尝试是以下清单:
host {
"hostname.example.com":
ip => '192.0.2.1',
host_alias => ["hostname"],
;
"hostname-v6.example.com":
ip => '2001:db8::1',
host_alias => ["hostname","hostname.example.com"],
;
}
这将导致以下 /etc/hosts 文件:
192.0.2.1 hostname.example.com hostname
2001:db8::1 hostname-v6.example.com hostname.example.com hostname
这将起作用,但会引入不需要的第二个主机名,某些应用程序(例如 pythons getfqdn())会将其返回为默认主机名。
当我尝试将 /etc/hosts 中的资源名称和主机名分离时,如下所示:
host {
"ip4-host":
name => "hostname.example.com",
ip => '192.0.2.1',
host_aliases => ["hostname"],
alias => 'ipv4-hostname',
;
"ip6-host":
name => "hostname.example.com",
ip => '2001:db8::1',
host_aliases => ["hostname"],
alias => 'ipv6-hostname',
;
}
我会收到以下错误:
Cannot alias Host[ipv6-host] to ["hostname.example.com"] at (file: /etc/puppetlabs/code/environments/production/site/mymodule/manifests/init.pp, line: 23); resource ["Host", "hostname.example.com"] already declared (file: /etc/puppetlabs/code/environments/production/site/mymodule/manifests/init.pp, line: 19) (file: /etc/puppetlabs/code/environments/production/site/mymodule/manifests/init.pp, line: 23, column: 9) on node hostname.example.com
其中第 19 行是第一个主机资源,第 23 行是第二个主机资源。
目前,我使用模板编写 /etc/hosts,但这样我就失去了手动添加条目的能力。
您还有其他想法吗?
答案1
您有两个地址系列和两个名称(hostname 和 hostname.example.com)。如果不允许将两个资源命名为相同名称,则为每个系列使用一个名称,并将另一个添加为别名。