我们正在使用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: }
但这给了我各种错误,例如
'语法错误:&#39 ;;预期'}'
这可能吗?这只是一个标点符号问题还是需要完全不同的方法?
答案 0 :(得分:1)
使用exported resources来解决这个问题会少一些麻烦。
每个服务器都依赖$::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'))
但这是多余的信息,因为它可以为你收集所有这些信息(见上)。