木偶:如果角色匹配,层次结构如何发挥作用?

木偶:如果角色匹配,层次结构如何发挥作用?

我试图了解 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 modulecommon.yaml,文件中有一个名为工作区 (workspace) 的模块。我如何告诉 Puppet从文件中role.yaml加载?motd modulecommon.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.

使用hieraENC 加载模块的工作原理如下(重点补充):

请注意hiera_include函数使用数组合并查找来检索类数组;这意味着每个节点都会得到每一个来自其层次结构的类。

因此,如果您遵循文档并使用hiera_include,则将加载整个节点层次结构中指定的所有类。

在您的示例中,假设role=dataorigin,并且common.yaml看起来像这样:

---
classes:
 - a

您的 site.pp 将导致模块workspacestdliba被分配给查询节点。

相关内容