我有一个节点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。
答案 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