使用 puppet 将一个主机的多个 IP 添加到 /etc/hosts 中

使用 puppet 将一个主机的多个 IP 添加到 /etc/hosts 中

我使用 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)。如果不允许将两个资源命名为相同名称,则为每个系列使用一个名称,并将另一个添加为别名。

相关内容