Puppet: Como funciona a hierarquia se uma função é correspondida?

2

Estou tentando entender como funciona a hierarquia de marionetes.

O hiera.yaml do meu servidor de marionetes é assim:

[root@puppet puppet]# cat hiera.yaml 
:backends: 
  - yaml 
:yaml: 
  :datadir: '/etc/puppet/hieradata/%{::environment}' 
:hierarchy: 
  - fqdns/%{::fqdn} 
  - roles/%{::role} 
  - domains/%{::domain} 
  - common

Existem módulos que eu quero que todos os servidores tenham, então eu os coloquei no arquivo common.yaml e existem módulos específicos da função que estão incluídos em cada arquivo role.yaml .

Quando um servidor que corresponde a uma função no Puppet for iniciado, os módulos do arquivo role.yaml serão carregados primeiro. Minha pergunta é: Uma vez que um servidor é combinado com um papel ... ele vai parar aí? ou continuará na hierarquia e carregará os módulos sob o common.yaml também?

Se não, como posso ter certeza de que é assim que se comportará?

Editar # 1: Aqui está um exemplo de um dos arquivos 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: ""

E o site.pp do servidor é assim:

hiera_include("classes", [])
Package {  allow_virtual => false, }
node default {
include stdlib
}

Editar # 2: Aqui está um exemplo de um módulo 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']
    }
}

O motd module está configurado no arquivo common.yaml e, no arquivo role.yaml , há um módulo chamado workspace. Como posso dizer ao Puppet para carregar o motd module do arquivo common.yaml ?

    
por Itai Ganot 13.04.2015 / 08:39

1 resposta

2

O Hiera é uma ferramenta para pesquisar dados . Você atribui a ela um nome de chave e percorre seus arquivos de dados e retorna a primeira correspondência (que deve ser a mais específica) que aparece, percorrendo sua hierarquia para baixo.

Usando-o dentro do fantoche , você tem mais opções sobre o que fazer se há mais de um valor para uma chave:

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.

Usar hiera como um ENC para carregar módulos funciona como this (ênfase adicionada):

Note that the hiera_include function uses an array merge lookup to retrieve the classes array; this means every node will get every class from its hierarchy.

Portanto, se você seguiu os documentos e usou hiera_include , todas as classes especificadas em toda a hierarquia de um nó serão carregadas.

No seu exemplo, assumindo role=dataorigin e common.yaml é assim:

---
classes:
 - a

Seu site.pp fará com que os módulos workspace , stdlib e a sejam atribuídos ao nó de consulta.

    
por 13.04.2015 / 09:45