我们正在使用一个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: }
但是会产生各种错误,比如
在':';预计"}"
这可能吗?这只是标点符号的问题,还是需要一种完全不同的方法?
使用导出的资源来解决这个问题会少一些麻烦。
每个服务器导出自己的主机条目,依赖于诸如$::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"
}
如果坚持要在中保存完整的数据,您可能希望考虑以下结构
hosts:
"server1-hostname":
ip: "a.b.c.d"
host_aliases: server1
"server2-hostname":
...
和在清单中简单的
create_resources('host', hiera('hosts'))
但这是多余的信息,看到一个因子可以为您收集所有这些(见顶部)。