1

我们正在使用 puppet 模块来创建我们的主机条目,它变得相当大。目前我们有这个

host { hiera('server1-hostname'):
ip           => hiera('server1-ip-host'),
host_aliases => 'server1',
}

我们每台服务器都有一次。我们还有一个开发和生产环境,服务器数量略有不同,这一切都变得有点混乱。

为了简化它,我正在尝试这个

define hosts::addhost () {
host { hiera("${title}-hostname"):
ip           => hiera("${title}-ip-host"),
host_aliases => $title,
}
}

然后在课堂上,

$hostlist = server1, server2

addhost {$hostlist: }

但这给了我各种错误,例如

':' 处的语法错误;预期的 '}'

这可能吗?这只是标点符号的问题还是需要完全不同的方法?

4

1 回答 1

1

使用导出的资源来解决这个问题会少一些麻烦。

每个服务器都导出自己的主机条目,依赖于诸如$::hostname

@@host { "$::fqdn": ip => $::ipaddress_eth0, host_aliases => $::hostname, tag => "server-list" }

并且还从所有(其他)机器中删除所有这些资源

Host<<| tag == "server-list" |>>

您当然可以使用 Hiera 来覆盖这些值,例如,如果facter选择了错误的 IP 地址,则导出特定的 IP 地址。

@@host { "$::fqdn": 
  ip => hiera('hosts-ip-address', $::ipaddress_eth0),
  host_aliases => $::hostname,
  tag => "server-list"
}

如果你坚持要把你的完整数据放在 Hiera 中,不妨考虑如下结构

hosts:
  "server1-hostname":
    ip: "a.b.c.d"
    host_aliases: server1
  "server2-hostname":
    ...

并在清单中简单地

create_resources('host', hiera('hosts'))

但这是多余的信息,因为 facter 可以为您收集所有这些信息(见顶部)。

于 2014-06-10T12:15:26.643 回答