山ブログ

山間部

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には存在しません。

ブログ書いてないでドキュメント更新作業に参加するべきですね…