我试图了解 Puppet 层次结构是如何工作的。
我的 Puppet 服务器hiera.yaml
如下所示:
[root@puppet puppet]# cat hiera.yaml
:backends:
- yaml
:yaml:
:datadir: '/etc/puppet/hieradata/%{::environment}'
:hierarchy:
- fqdns/%{::fqdn}
- roles/%{::role}
- domains/%{::domain}
- common
我希望所有服务器都拥有一些模块,因此我将它们放在文件中common.yaml
,并且每个文件中都包含特定于角色的模块role.yaml
。
当与 Puppet 中的角色匹配的服务器启动时,首先会加载文件中的模块role.yaml
。我的问题是:一旦服务器与角色匹配...它会就此停止吗?还是它会继续在层次结构中并加载其下的模块common.yaml
?
如果不是,我如何确保它会如此表现?
编辑#1:这是其中一个文件的示例role.yaml
:
[root@puppet roles]# cat dataorigin.yaml
classes:
- workspace
jdk_enable: true
jdk_ver: 1.6.0_41
component_ver: 1-1-5-17
tomcat_enable: true
debug_mode: true
fstab_params:
mount1:
mnt_src: "isilonnj01.eyedcny.local:/ifs/Peer39/do_share"
mnt_dest: "/doshare"
mnt_opts: "tcp,hard,intr,noatime"
mnt_dest_parent: ""
服务器site.pp
看起来是这样的:
hiera_include("classes", [])
Package { allow_virtual => false, }
node default {
include stdlib
}
编辑#2:这是一个 motd 模块的示例:
include stdlib
class motd {
file { "/etc/custom_motd.sh":
path => '/etc/custom_motd.sh',
ensure => present,
owner => "root",
group => "root",
mode => "775",
content => template('motd/custom_motd.sh.erb'),
#require => Class['nagios_client'],
}
file_line { 'enable motd':
ensure => present,
line => '/etc/custom_motd.sh',
path => '/etc/profile',
require => File['/etc/custom_motd.sh']
}
}
在文件中配置motd module
了common.yaml
,文件中有一个名为工作区 (workspace) 的模块。我如何告诉 Puppet从文件中role.yaml
加载?motd module
common.yaml
答案1
Hiera 是一款查找工具数据。您给它一个键名,它会遍历其数据文件并返回它找到的第一个匹配项(应该是最具体的匹配项),并在其层次结构中向下遍历。
在 Puppet 中使用它如果某个键有多个值,则您有更多选项可以做什么:
hiera Standard priority lookup. Gets the most specific value for a given key. This can retrieve values of any data type (strings, arrays, hashes) from Hiera. hiera_array Uses an array merge lookup. Gets all of the string or array values in the hierarchy for a given key, then flattens them into a single array of unique values. hiera_hash Uses a hash merge lookup. Expects every value in the hierarchy for a given key to be a hash, and merges the top-level keys in each hash into a single hash. Note that this does not do a deep-merge in the case of nested structures.
使用hiera
ENC 加载模块的工作原理如下这(重点补充):
请注意hiera_include函数使用数组合并查找来检索类数组;这意味着每个节点都会得到每一个来自其层次结构的类。
因此,如果您遵循文档并使用hiera_include
,则将加载整个节点层次结构中指定的所有类。
在您的示例中,假设role=dataorigin
,并且common.yaml
看起来像这样:
---
classes:
- a
您的 site.pp 将导致模块workspace
,stdlib
和a
被分配给查询节点。