木偶 - 应用木偶类

时间:2014-02-09 14:29:39

标签: puppet hiera

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

ldap_server = node2

mq_server = node3

在node.pp中有什么办法,我只给node1信息哪个stats要在节点1上应用哪个类。然后这个类读取我的hiera文件,看到ldap服务器在节点2上,所以ldap模块应该是应用于节点2。

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

我正在使用木偶企业,hiera,facter,puppetdb和mcollective。

5 个答案:

答案 0 :(得分:2)

我认为最好使用hiera_include('classes')

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

---
classes:
  - base
  - ldap

现在在node01.example.com.pp

node 'node01.example.com' {
      hiera_include('classes')
}

答案 1 :(得分:1)

是的,这是可能的。

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

将在解析ldap

的每个节点中安装useldap = true

答案 2 :(得分:1)

你不能这样做。您必须在node2中定义必须包含ldap类。它不能由node1中的class / hiera“扣除”,因为在将更改应用于这些特定节点时会对它们进行独立解析。

答案 3 :(得分:1)

我会推荐一个更新的解决方案,其中节点将每个角色分开(如果puppetmaster <4.0)。

现在,manifest / database.pp:

) AS store_names, 'author' as param FROM books AS b LEFT JOIN books_authors AS b_a ON b.id = b_a.book_id LEFT JOIN authors AS a ON a.id = b_a.author_id LEFT JOIN books_stores AS b_s ON b.id = b_s.book_id LEFT JOIN stores AS s ON s.id = b_s.store_id WHERE b.id IN ( SELECT DISTINCT book_id FROM books_authors WHERE author_id IN (?,?) ) GROUP BY b.id ORDER BY b.id" 01201

匹配所有节点,其主机名称为此模式:

node /^(projectnameinthreechar)-([a-z]{3})-db([\d]+)\./ {
    class {
            "server::project::db":
                    ;
    }
}


class server::project::db ($paramteres) { ... }

示例:

 /^(projectnameinthreechar)-([a-z]{3})-db([\d]+)\./

答案 4 :(得分:1)

是的,你可以。

您应该执行以下操作。

<强> site.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