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
ファイルの1つの例を次に示します。
[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
ファイルで構成され、role.yaml
ファイルにはworkspaceというモジュールがあります。 motd module
ファイルからcommon.yaml
をロードするようにPuppetに指示するにはどうすればよいですか?
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.
モジュールをロードするためのENCとしてhiera
を使用すると、次のように機能します this (強調が追加されました):
hiera_include関数は、配列マージルックアップを使用してクラス配列を取得することに注意してください。これは、すべてのノードがその階層からeveryクラスを取得することを意味します。
したがって、ドキュメントに従ってhiera_include
を使用した場合、ノードの階層全体で指定したすべてのクラスがロードされます。
あなたの例では、role=dataorigin
を想定し、common.yaml
は次のようになります。
---
classes:
- a
Site.ppを使用すると、モジュールworkspace
、stdlib
、およびa
がクエリノードに割り当てられます。