我已经用 puppet“玩”了几个星期了(好吧,实际上是小孩子在玩),但就是搞不清楚如何实现一个名为客户端的模块;这个模块将按如下方式调用:
client { "client-name":
"apache-node" => "name-of-apache-node",
"tomcat-node" => "name-of-tomcat-node",
"https" => true,
# probably other parameters, and other nodes may be implied as well
}
然后会自动生成所有相关节点的配置和分发配置。
注意:我不想使用外部来源(LDAP 或其他),只希望使用适当的 puppet:我单独使用 puppet 就已经够困难了,只有当我有足够的掌握时才会考虑这一点(可能需要几个月的时间……)。
注2:puppet是版本2.6.12,facter是版本1.5.9。
这是可能的吗,还是只是个白日梦?
答案1
当然,这应该是可行的。
首先,您需要将其包含在适用于两个节点的某个地方,然后过滤掉需要应用于不同节点的配置(可能带有一个大case
语句),或者为应用程序的 tomcat 端和 apache 端使用不同的类(这可能会更干净)。
以下是我采取的方法:
为您的客户端应用程序设置多类模块:
modules
-> client-app
-> manifests
-> apache.pp
-> tomcat.pp
使用您需要的配置来设置这些类:
class client-app::apache ($tomcatnodes = undef, $https = true) {
package { 'apache2':
ensure => present,
}
# ... etc etc
# use a template file that utilizes the $tomcatnodes and $https
# variables to set the config that you need
}
然后将它们附加到你的节点:
node tomcatserver1 {
class { 'client-app::tomcat':
apachenode = 'apacheserver',
https = true,
}
}
node tomcatserver2 {
class { 'client-app::tomcat':
apachenode = 'apacheserver',
https = true,
}
}
node apacheserver {
class { 'client-app::apache':
tomcatnodes = [ 'tomcatserver1', 'tomcatserver2' ],
https = true,
}
}