puppet の file server 機能を使うと uri でリソースを指定できる。
冗長性確保とスケールアウトがし易くなるので、一応指定しておく。
[module]
path /home/puppet
allow *
$dist = '<hostname>'
file { "/etc/sudoers":
mode => 440,
owner => root,
group => root,
source => "puppet://$dist/module/base/etc/sudoers"
}
sudo -u puppet mkdir /home/puppet/ for type in base web scc sca dns mta lb db fs mail r mon log dist sesc sesdb; do for d in etc var/spool/cron; do sudo -u puppet mkdir -p $type/$d; done; done
hostname, os, cpu, memory, ip などマシンに関する情報を取得してくれるライブラリ。
puppet では facter を通じてこれらのパラメータを取得している。
facter で取得できるパラメータは簡単に追加できる。
下記のように定義すると hostname の数値部分を削除したものを、type 変数として使える。
Facter.add("type") do setcode do Facter.hostname.sub(/[0-9]+/, '') end end
$ facter hostname type hostname => dev0001 type => dev
file { '/etc/nagios/nrpe.cfg': owner => root, group => root, # require => Service[puppet], source => [ "puppet://$dist/module/web/etc/nagios/nrpe.cfg.$type", "puppet://$dist/module/web/etc/nagios/nrpe.cfg" ] } file { '$ruby_libdir/facter/type.rb': owner => root, group => root, # before => File['/etc/nagios/nrpe.cfg'], # notify => Service[puppet], source => "puppet://$dist/module/base/$ruby_libdir/type.rb"; } # service { # 'puppet': # name => puppet, # ensure => running, # }
これで種類に応じた nrpe.cfg が deploy される。
type.rb を更新した後、puppetd を再起動しないと facter のパラメータが更新されなかったので
puppetd を再起動するように依存関係を設定してみたが、上手くいかず。
2回 puppetrun するとちゃんと取りに来る。むーん。
/etc/puppet/namespaceauth.conf がない状態で、puppetd を立ち上げるとエラーになる。
$ sudo puppetd --server <hostname> --listen --no-client -v err: Will not start without authorization file /etc/puppet/namespaceauth.conf
/etc/puppet/namespaceauth.conf で サーバ側のホスト名を指定してあげればOK。
# /etc/puppet/namespaceauth.conf [puppetrunner] allow <hostname>