Puppet:试图使用定义$title作为层次变量名的一部分



我们正在使用一个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'))

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

相关内容

  • 没有找到相关文章

最新更新