puppet 2.6 インストール(アップグレード)&ファーストインプレッション

前に @mikeda さんがこう言ってたので、とりあえず自宅環境の0.25を2.6にアップグレードしてみることにしました。

アップグレード

あらかじめ CentOS 5.5 x86_64 で puppet 0.25.5 が稼働している環境になります。新規にインストールする場合はもう少し手順が多いかもしれません。0.25 自体は epel リポジトリから入れてるので、epel が入っていれば、必要なパッケージは全部入ると思います。

puppet 2.6系のyumリポジトリ登録

sudo wget http://tmz.fedorapeople.org/repo/puppet/epel/puppet.repo -P /etc/yum.repos.d

インストール

sudo yum install puppet puppet-server

簡単。今日時点でバージョンは 2.6.3 でした。

puppet.conf修正

そのままpuppetmasterdを起動しなおして、puppetdで接続も出来たんですが、以下のWarningが出ます。

warning: You have configuration parameter $factsync specified in [puppetd], which is a deprecated section. I'm assuming you meant [agent]
warning: You have configuration parameter $ssldir specified in [puppetd], which is a deprecated section. I'm assuming you meant [agent]
warning: You have configuration parameter $factsource specified in [puppetd], which is a deprecated section. I'm assuming you meant [agent]
warning: You have configuration parameter $templatedir specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: You have configuration parameter $ssldir specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: You have configuration parameter $modulepath specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: You have configuration parameter $manifestdir specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
warning: Fact syncing is deprecated as of 0.25 -- use 'pluginsync' instead

エラーにはなりませんでした。/etc/puppet/puppet.conf で [puppetmasterd] となってる記述を [master] に、 [puppetd] となってる記述を [agent] にしてやると大分 Warning が減ります。長い記載が短くなっていいですね。
facterの部分は公式のWiki見ても、最下部にpluginアプローチに変わると記載があります。pluginってあまり使ったことないなー。。今回はスルー。

puppet実行スタイル

2.6のリリースノート見ると、沢山名前あって分かりにくかった実行バイナリが puppet コマンドを起点にシンプルで分かりやすくなっています。

  • puppetmasterd -> puppet master
  • puppetd -> puppet agent puppet -> puppet apply
  • puppetca -> puppet cert
  • ralsh -> puppet resource
  • puppetrun -> puppet kick
  • puppetqd -> puppet queue
  • filebucket -> puppet filebucket
  • puppetdoc -> puppet doc
  • pi –> puppet

もちろん、0.25 以前と同じ名前のバイナリもそのまま使えるので、以前のスタイルに慣れてる場合はそのままで、2.6から使い始める場合は新しいスタイルで覚えるといいんじゃないかなと思いました。
たとえば、puppet のクライアントで一度きりサーバーに接続して変更を適用するコマンドで下記があったとき

sudo puppetd --server manage01.tnmt.local -v -l console --onetime --ignorecache

2.6 以降はこうでもOKになります。

sudo puppet agent puppet  --no-daemonize --server manage01.tnmt.local -v -l console --onetime --ignorecache

まとめと所感

  • バージョンアップの手間はそれほど無い

yum 一発なんでお手軽でした。ただ、puppet サーバー、クライアントともにバージョンは両方一緒にあげた方がいいとは思います。0.24 〜 0.25 にあげたときにハマりました。俺じゃないけど。
既存の環境へのインパクトは少ないです。依存でrubyあげろとか言われたらrails使ってる環境なんかだとキツいなーとは思ってました。

  • 前のバージョンとの互換性はほぼ問題なさそう

設定ファイルは大きな変更なく使い回し出来ました、変更もWarningレベル。自宅の環境はそれほどmanifestが沢山あったりするわけでもないですが、ここもエラーは出てないです。

  • アップグレード後の期待とか

2.6からの一番の目玉はmanifestなどをPure Ruby DSLで書けるようになるというところだと思います。2.6のリリースノートにもあるとおり、旧来のDSLはターゲットはシステム管理者に学習コスト少なく運用出来るように、制約は多いですが割とシンプルではありました。今回の機能追加はRubyを知っているエンジニア向けに提供される選択肢として、今後サーバーエンジニアとアプリエンジニアが協業してメンテしていくなんてことも出来やすくなるかと思います。これってある意味DevOps!!
実際は今はノウハウとかmanifest資産もたまってきてるし、現行のDSLで特に不満も無いので、便利な書き方があったら取り入れてくのが一番効果が上がるかなと感じました。
自由度高くなる→黒魔術的な記法が増える→見通し悪くてメンテしづらくなる。なんてのには気をつけたいですね。