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