2013-05-18(土) [長年日記]
■ Puppet ModuleをPuppetで管理する
あいかわらずVagrant & Puppetで遊ぶ日々(※遊びじゃない)。
基本的なことはだいたいできるようになったので、さて実用に供するためにはなんといってもRubyの開発環境を作らねば……と思って調べてみると、puppet-rbenvというのを見つけた。rbenv自身のインストールから、指定バージョンのrubyのビルド、Gemやrbenvプラグインのインストールまで面倒みてくれるすぐれもの。で、これをインストールするにはというと、puppetにmoduleサブコマンドがあってこれを使う:
% sudo puppet module install alup-rbenv
便利だなーって……これってつまり、puppetの外でインストールしろってこと? せっかくpuppetがあるのに、なんでpuppetで管理できないの? とつぶやいたら、(Vagrantではない)本番環境にはpuppetがあるとは限らないというしごくまっとうな指摘を受ける。そりゃそうだ。ただし、いまおれが構築してる環境はVagrant前提でいっこうにかまわないので、puppet moduleを管理するtypeを書いてしまおう。puppet/module.pp:
これで、こんな感じで書けるようになった:
include puppet puppet::module { 'alup-rbenv': ensure => installed } $me = 'tdtds' $ruby = '2.0.0-p195' rbenv::install { $me: } rbenv::compile { "${me}/${ruby}": user => $me, ruby => $ruby, global => true } rbenv::gem { ['tdiary', 'tdiary-contrib']: user => $me, ruby => $ruby }
ちょう便利。