Puppetモジュールの管理にlibrarian-puppetを使う

#puppet

librarian-puppetはbundlerのPuppet版ツールだ。 Puppet関連ツールではおなじみと言ってもいい、Tim Sharpe氏1の作品でもある。 the Puppet Forge2というPuppetモジュールのリポジトリやGitHub, あるいはgitアドレスを持つモジュール等をGemfile風に管理することが出来る。

サードパーティ製のPuppetモジュールを直接リポジトリで管理しようとすると、更新に追い付くことが大変になる。 バージョン情報の確認が面倒だし、あれこれ入れているとリポジトリの肥大化も招く。

bundelrを知っている人にとって、バージョントラッキングとインストール情報の管理の恩恵は最早不要だと思う。 librarian-puppetはPuppetfilePuppetfile.lockによって、サードパーティ製モジュールの管理を行う。 ここから先は、librarian-puppetの使い方を簡単に紹介しようと思う。

librarian-puppetクイックスタート

librarian-puppetのインストールと初期設定

librarian-puppetはRuby製で、gemからインストールが可能だ。

gem i librarian-puppet

initコマンドで初期化を行う。実行すると、Puppetfileが実行ディレクトリに生成されるだろう。

librarian-puppet init

モジュールの追加・編集

Puppetfileを編集して、必要なモジュールの追加や修正を行う。 例として、Puppet Labsのstdlib3とTim Sharpe氏のlogrotateモジュール4の追加されたファイルを以下に示す。
※各モジュールを追加する書式は、mod "<ORGANIZATION>-<MODULENAME>"となっていることに注意したい。

forge "https://forge.puppetlabs.com"

mod "puppetlabs-stdlib"
mod "rodjek-logrotate",
  :git => "git://github.com/rodjek/puppet-logrotate.git"

モジュールのインストール

configuration

モジュールのインストールパスのデフォルトはmodulesである5。 変更したい場合はconfigコマンドを実行すればよい。 configコマンドは以下のようにKEY/VALUEで指定することが出来る。 (--local--globalを選択できるが、プロジェクトリポジトリで実行するなら--localで良いと思う)

librarian-puppet config KEY VALUE --local(--global)

サードパーティ製モジュールは自前のモジュールと区別したいので、今回はvendor/modulesという場所を選択する。 なお、新しいディレクトリを指定する場合は、modulepathにそのディレクトリを指定することを忘れないように注意したい(puppet.confに書くか--modulepathで指定する)。

librarian-puppet config path vendor/modules --local

install

ここまでで準備は完了である。 モジュールのインストールはinstallコマンドで実行可能だ。

librarian-puppet install

これでPuppetfile.lockにバージョン情報や依存関係が定義され、pathで設定したディレクトリにモジュールがインストールされる。 出力が物足りない場合は--verboseを付けるといい。

更新情報の取得

outdatedupdateコマンドで更新情報の確認・変更を行うことが可能である。 updateはモジュールを単体指定することも可能である。

終わりに

ここまででlibrarian-puppetのひと通りの使い方を紹介した。

librarian-puppetによってサードパーティ製Puppetモジュールのバージョン管理を効率良く行えるようになるが、デプロイに課題が残る。 Puppetfileによって管理されたモジュールらは、リポジトリにファイルとして含めないようにしたいが、そのままではデプロイ先で毎回labrarian-puppet installを手打ちで実行しなければならない。

この課題は、Capistrano(Webistrano)のレシピを作成することで解決しよう。 ペパボではどのようにlibrarian-puppetとCapistranoを連動させているかを、次の機会に紹介したいと思う。