山ブログ

山間部

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

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

森に囲まれた日本家屋のなかで授業を受けている。授業を受けている部屋の隣の部屋にはなぜか受講者の思い出(生まれてはじめて行った場所の写真や、子供の頃の誕生日の写真)が貼られている。授業を受けていた気はするけど、内容はまるで覚えていない。ただ授業の途中で隣の部屋に行って、うっかり自分の思い出を見て泣きそうになったことは覚えている。
建物の裏庭には大きな池と縁側がある。縁側で漫画を読んでいた。少年マンガとしてはじまったが、主人公が成長して50代になるような長寿マンガだった。連載初期の頃は敵と戦っていた主人公も様々な理由で引退し結婚、子供は作らなかったが家庭の外に子供がいてそちらは育てていることが作中でほのめかされるといった内容で、レビューによると全編を通して恐ろしくつまらないとのこと。

woffglitch.js作った

woffglitch

https://github.com/hryk/woffglitch.js

数年前、glitch workshop after partyで、youpyさんがフォントをグリッチしてスクリーンに映していたのを見た。それがすごく格好よくて、ブラウザ上で再現できないかと思ってwoffをグリッチするコードを書こうと思ったのが1年と少し前、そろそろちゃんと動く物にしたいと思っていたところに最高の夏合宿が開催されたので動作するところまで持っていった。

あの時見た壊れ方とは全然違っていて、なかなか思ったようには表示出来ないので色々試している。

デモ

http://www.1vq9.com/woffglitch/demo/

Google Fontsから取得したwoffをJavascriptでパースして、特定のfont tableを書き換えて再構成している。

Mendeleyのデータ読むgem

https://github.com/hryk/mendeley_desktop

Mendeley Desktopのデータにアクセスするgemを書いた。書きかけだけど、一応GroupとかFolderを拾ってきたり、中に入ってるdocumentを取ってこれるようになってる。

app = MendeleyDesktop::App.new "you@example.com"

folder = app.folders("FolderName").first

folder.documents.each do |doc|
  puts doc.title
  puts doc.file
end

こういう感じ。Folderに入ってる論文を一気に印刷したいと思って作った。今のところMac版だけ対応している。
Mendeleyのsqlite3にアクセスするのにSequelを使った。Sequel、使い易くて便利だけどモデルをDBに接続しなくてもモデル定義できるといいと思った。ちょっとしたものを作る時はだいたいDataMapperを使っていたけど、1系はもう開発止まってるし、romもどうなるかちょっとわからないのでSequel使うのもありな気がする。

知り合いの店に飲みに行って酩酊した次の日の朝、飲み代を払い忘れて帰った事に気づいた。夕方頃に電話して、飲み代を払い忘れたので今から払いに行ってもよいだろうか、という事を伝えると、昨日払ってから帰ったじゃないですかというような意味の事を言われた。記憶を無くした感覚は無く、完全に記憶がある状態で飲み代を払い忘れたという確信があったので、非常に驚いた。相手は電話口で爆笑していた。
最近こういった記憶の混乱が多いので、自分ではまたか、くらいに思えるけれど、普通はそういう事があまりないらしく、だいたい引かれるか爆笑されるか、かわいそうな人を見る感じになる。今回は笑ってもらえたからよかった。
最近こういう事がちょくちょくあって、だんだんそうやって記憶も無くなっていって、自分の頭でものを考えられなくなると思う。意外と早かったし、もし来年くらいにそういう状態になっていたら悲しい。

cinderとnova-computeが別ホストで動いていて、

nova-computeのホストからkeystoneのendpointに登録したpublicURLに到達できないような構成の場合、nova-computeのホストのnova.confで

cinder_catalog_info = volume:cinder:internalURL

と書いておけばinternalURLを使うように変更できる。