Puppet Cloud Provisionerとnode_openstackのこと
Puppet Cloud Provisionerとnode_openstackを使って、OpenStack上にあるインスタンスにpuppet agentをインストールするときにハマったのでメモします。作業中ググっても情報が出てこなかったので、何度も『実はPuppet誰も使ってないんじゃ…』とか『実はcloud provisionerとか誰も使ってないのでは…』とか『シェ…』とか色々頭によぎったりしましたが、心の声を無視して作業を続けた結果、一応うまく動いたようです。
環境
クライアント側:
OS: Mac OS X 10.8.5
Ruby: 1.9.3-p392 (rbenv)
Puppet: 3.3.1
OpenStack側:
OS: Ubuntu (precise)
以下、puppet, hiera, facterをOS Xにインストールした状態で進めています。まずはこちらのドキュメント通りに進めて行きましょう。ドキュメントではec2前提ですが、node_awsをnode_openstackに読み替えればだいたい大丈夫です。
Prerequisites
ここはそのまま進めて問題ありません。依存するfogとguidをインストールします。ドキュメントでは0.7.2と書かれていますが、最新版の1.15.0を使っても特に問題はありませんでした。
$ gem install fog $ gem install guid
Installing
主にこの辺りが怪しいです。まずCloud Provisionerですが、1.0.5を使っているとインスタンスにpuppetをインストールする時に使われるシェル中で追加するaptのリポジトリが足りず、インストールに失敗します。Puppet ForgeのCloud Provisionerは1.0.5が最新ですが、Githubのリポジトリでは1.1.4が最新です。一体何が起こっているのかはわかりませんが、こちらを使います。ちなみに、node_openstackもPuppet forgeが0.0.3, Githubが0.0.4です。こちらも0.0.4を使用します。
# 使わない $ sudo puppet module install puppetlabs-cloud_provisioner
このコマンドでは1.0.5が入ってしまうので、Githubからtarballをダウンロードしてきます。
$ wget -Opuppetlabs-cloud_provisioner-1.1.4.tar.gz https://github.com/puppetlabs/puppetlabs-cloud_provisioner/archive/1.1.4.tar.gz $ wget -Opuppetlabs-node_openstack-0.0.4.tar.gz https://github.com/puppetlabs/puppetlabs-node_openstack/archive/0.0.4.tar.gz
`puppet module install`コマンドは引数をファイルパスにすると、そのtarballを使ってインストールを行うようになっています。旦し、ファイルの名前がパース可能("#{username}-#{modulename}-#{version}")でないとコケます。ドキュメントのどこにも書いてありませんが、このあたりに書いてあります。
ダウンロードしたtarballをインストールします。--forceをつけないと依存関係エラーが出てしまい、インストールできません。この辺り何故なのかは調べていません。
$ puppet module install --force ./puppetlabs-cloud_provisioner-1.1.4.tar.gz $ puppet module install --force ./puppetlabs-node_openstack-0.0.4.tar.gz
めでたくインストールが完了しました。"After installing it, "以降のパスを通す作業は書いてある通りに行います。
Configuration
書いてある通りに行います。openstackの場合、dashboardからEC2 Credentialをダウンロードして使います。
puppet node install
node_awsではpuppet node_aws installコマンドを使うようですが、node_openstackではpuppet node installコマンドを用いてインストールを行います。インスタンスは既に立ててあり、classifyも済んでいるものとします。node_aws installのExampleには
puppet node_aws install ec2-XXX-XXX-XXX-XX.compute-1.amazonaws.com \ --login root --keyfile ~/.ssh/puppetlabs-ec2_rsa \ --install-script gems --puppet-version 2.6.9
と書かれていますが、node_openstackでは以下のコマンドになります。
puppet node install --install-script=puppet-community --server=$PUPPET_SERVER \ --login $USER --keyfile $KEYFILE --puppetagent-certname $NODE_CERTNAME
Cloud Provisionerは--install-scriptオプションがデフォルトでpuppet-enterpriseになっているので、puppet communityを利用している場合は指定が必要です。これでCloud provisionerを使ってpuppetをインスタンスにインストールする環境が整いました。尚、node_awsにはinitとかbootstrapとか便利そうなコマンドがありますが、そのあたりはnode_openstackには存在しません。
ブログ書いてないでドキュメント更新作業に参加するべきですね…