install

file server

file server ってなに?

puppet の file server 機能を使うと uri でリソースを指定できる。
冗長性確保とスケールアウトがし易くなるので、一応指定しておく。

設定

/etc/puppet/fileserver.conf
[module]
    path /home/puppet
    allow *
/etc/puppet/manifests/site.pp
  • source の <hostname> は適当に読み替える。module ってのはおまじない。以降は /etc/puppet/fileserver.conf で指定した path からの相対パス。
$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

custom

facter

facter ってなに?

hostname, os, cpu, memory, ip などマシンに関する情報を取得してくれるライブラリ。
puppet では facter を通じてこれらのパラメータを取得している。

hostname からサーバの種類を判別したい。

facter で取得できるパラメータは簡単に追加できる。
下記のように定義すると hostname の数値部分を削除したものを、type 変数として使える。

$ruby_libdir/facter/type.rb
Facter.add("type") do
    setcode do
        Facter.hostname.sub(/[0-9]+/, '')
    end
end
テスト
$ facter hostname type                                                                                                                                                           
hostname => dev0001
type => dev
site.pp に type.rb, type 変数を使いたい file を追加
        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 するとちゃんと取りに来る。むーん。

tips

puppetrunner

/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>
puppet.txt · Last modified: 2007/09/25 22:49 by topaz2