0

我有一个节点 1,我的应用程序将使用 puppet 部署在该节点上。我创建了一个 hiera 文件 (node1_application.yaml),其中说明了该应用程序将使用的所有服务器详细信息,例如

ldap_server = node2

mq_server = 节点 3

有什么方法可以在 node.pp 中,我只提供 node1 信息,这些信息统计要在节点 1 上应用哪个类。然后这个类读取我的 hiera 文件并看到 ldap 服务器在节点 2 上,所以 ldap 模块应该应用在节点上2.

应该使用我的 hiera 文件动态决定哪个类应该应用于哪个节点。有可能吗?

我正在使用 puppet enterprise、hiera、facter、puppetdb 和 mcollective。

4

5 回答 5

2

我认为更好用hiera_include('classes')

如果你node01.example.com.yaml现在有,你可以写这样的东西:

---
classes:
  - base
  - ldap

现在在node01.example.com.pp

node 'node01.example.com' {
      hiera_include('classes')
}
于 2015-05-16T04:26:49.373 回答
1

你不能那样做。您必须在 node2 中定义必须包含 ldap 类。它不能被 node1 中的类/层次“扣除”,因为在将更改应用于这些特定节点时,它们是独立解析的。

于 2015-01-09T17:33:58.420 回答
1

是的,这是可能的。

node default{
    if hiera("useldap") == 'true' {
      include ldap
    }
}

将安装ldap在解析的每个节点中useldap = true

于 2014-02-10T09:33:41.537 回答
1

是的你可以。

您应该执行以下操作。

网站.pp

node default{
  hiera_include('classes')
}

hiera.yaml

---
:backends:
  - yaml

:yaml:
  :datadir: "/etc/puppetlabs/code/environments/{::environment}/hieradata"

:hierarchy:
  - "nodes/%{::trusted.certname}"
  - "common"

然后在 hieradata 下你应该有nodes目录,其中包含

node01.domain.com.yaml

---
classes:
  - base
  - application

node02.domain.com.yaml

---
classes:
  - base
  - ldap
于 2016-10-01T01:38:53.833 回答
1

我将推荐一个更新的解决方案,其中节点分隔每个角色(如果 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
于 2016-03-12T18:45:41.227 回答