puppetマニフェストメモ
★puppetマニフェストで使う変数の定義方法がいまいちわかってなかったのでメモ
■puppetの構成
[root@ha-01 puppet]# tree . |-- auth.conf |-- autosign.conf |-- fileserver.conf |-- manifests | `-- site.pp |-- modules | |-- hadoop | | `-- manifests | | `-- init.pp | `-- os | `-- manifests | `-- init.pp |-- namespaceauth.conf `-- puppet.conf 6 directories, 8 files [root@ha-01 puppet]#
■/etc/puppet/manifests/site.pp
[root@ha-01 puppet]# cat manifests/site.pp case $operatingsystemrelease { #facterコマンドで表示されるから定義する必要なし 5.6: { include common include hadoop_create_dir } 5.7: { include common } } class hadoop_create_dir { hadoop::create_dir{test:} } class common { os::etc{test: resolv => "192.168.11.1", # facterコマンドで表示されない変数は定義してあげる com => COMMON, # ↑ と同じ } } [root@ha-01 puppet]#
■/etc/puppet/modules/os/manifests/init.pp
[root@ha-01 puppet]# cat modules/os/manifests/init.pp define os::etc($resolv,$com) { # ← site.ppで定義した変数は「()」の中に「$」をつけて記述しておく file { "/etc/hosts": owner => root, group => root, mode => 644, content => template("/test/templates/$com/etc/hosts"), # ←「$com」はsite.ppで定義した「COMMON」になる } file { "/etc/resolv.conf": owner => root, group => root, mode => 644, content => template("/test/templates/$com/etc/resolv.conf"), # ←「$com」はsite.ppで定義した「COMMON」になる } case $network_eth0 { # ← facterコマンドで表示されるからそのまま使える "192.168.11.0" : { file { "/tmp/sample.txt": owner => root, group => root, mode => 755, content => template("/test/templates/$operatingsystemrelease/sample.txt"), } # ↑ facterコマンドで表示されるからそのまま使える } "192.168.100.0" : { file { "/tmp/sample.txt": owner => root, group => root, mode => 755, content => template("/test/templates/$operatingsystemrelease/sample.txt"), } # ↑ facterコマンドで表示されるからそのまま使える } } file { "/tmp/hostname.txt": owner => root, group => root, mode => 644, content => template("/test/templates/$hostname/hostname.txt"), } # ↑ facterコマンドで表示されるからそのまま使える } [root@ha-01 puppet]#
■site.ppで定義した変数「resolv => "192.168.11.1",」を配布する設定ファイル内に定義する時
例)
[root@ha-01 test]# cat templates/COMMON/etc/resolv.conf nameserver <%= resolv %> # ← <%= %> で囲むことで参照できる。「$」は付ける必要なし [root@ha-01 test]#
※配布するファイルは「content => template()」の「()」内のパスに配置してあげる。
デフォルトは「/var/puppet/templates」配下だけど、フルパスで書けばどこでもOK
★メモ
■puppetのver0.25以降だと正規表現が使える。「/」で囲んであげるとOK
例)
/^hadoop-slave[1-17]$/
■puppetマスターとpuppetクライアントで時刻が一致していないと認証に失敗してしまうので注意
■puppetmasterへの接続は、↓のコマンドラインだったらどっちでもOK
1. puppetd --no-daemonize --onetime --server ha-01 --verbose
2. puppetd --test --server ha-01