我有一个节点 1,我的应用程序将使用 puppet 部署在节点 1 上。我创建了一个 hiera 文件 (node1_application.yaml),其中说明了该应用程序将使用的所有服务器详细信息,例如
ldap_server = 节点 2
mq_server = 节点 3
有什么办法可以在node.pp中,我只给node1信息,这些信息统计了要在节点1上应用的类。然后这个类读取我的 hiera 文件,看到 ldap 服务器在节点 2 上,所以 ldap 模块应该应用于节点 2。
应该使用我的 hiera 文件动态决定应该在哪个节点上应用哪个类。可以做到吗?
我正在使用puppet enterprise,hiera,facter,puppetdb和mcollective。
我认为最好使用hiera_include('classes')
如果你现在有node01.example.com.yaml
,你可以写这样的东西:
---
classes:
- base
- ldap
现在在node01.example.com.pp
:
node 'node01.example.com' {
hiera_include('classes')
}
是的,这是可能的。
node default{
if hiera("useldap") == 'true' {
include ldap
}
}
将在解析useldap = true
的每个节点中安装ldap
那样做。您必须在节点 2 中定义必须包含 ldap 类。它不能被node1中的class/hiera"扣除",因为在将这些特定节点应用更改时,这些是独立解析的。
我将推荐一个更新的解决方案,其中节点将每个角色分开(如果 puppetmaster <4.0)。
现在,manifests/database.pp:
node /^(projectnameinthreechar)-([a-z]{3})-db([d]+)./ {
class {
"server::project::db":
;
}
}
class server::project::db ($paramteres) { ... }
匹配所有节点,主机名符合此模式:
/^(projectnameinthreechar)-([a-z]{3})-db([d]+)./
例:
web-can-db01
是的,你可以。
您应该执行以下操作。
网站.pp:
node default{
hiera_include('classes')
}
hiera.yaml:
---
:backends:
- yaml
:yaml:
:datadir: "/etc/puppetlabs/code/environments/{::environment}/hieradata"
:hierarchy:
- "nodes/%{::trusted.certname}"
- "common"
然后在 hieradata 下,您应该有包含
node01.domain.com.yaml:
---
classes:
- base
- application
node02.domain.com.yaml:
---
classes:
- base
- ldap