CloudStack APIをAnsibleから使ってサーバーを構築する

Ansible便利ですよね。 最初はfablicとかででいいかなと思っていたのですが使ってみると冪とう性を担保してくれるだけでこんなに違うのかと思うほど便利です。

何回実行してもおかしなことにならないし、そこのために作りこみをするなんてことも不要なのは助かります。 あと設定のように記述できるので誰に渡しても怖くないし。 難があるとすればwindowsでコントローラーができないくらいでしょうかね。 もっとansibleを広めるためにハンズオンをするつもりなので、そのあたりはなにか解決できないか模索中です。

さて今回はIDCFクラウドのCloudStack APIをansibleから利用してサーバーを構築するのをやってみよう。 VPSに比べてクラウドって高いし、ラズバイ2もあるから家の中にサーバー構築しようかなと思っていたんですが一番安いのが500円だったりして俄然やる気がわきます。

playbookだけ欲しい人はここからどうぞ。 ただ、現状、ansibleのCloudStackモジュールにポートフォワーディングの設定をするモジュールがないです。 そのためファイヤーウォールの中に作ったサーバーへのポートフォワーディング設定はGUIという少し残念な結果になっています。 ファイヤーウォール自体の設定はできるのでパスする設定はできるので、すごくおしい感が高いです。 https://github.com/bols-blue/idcfcloud_provisioning_playbook

あと、モジュールにバグなのか、IDCFクラウドとの仕様の不一致なのかうまく動かないところがあったので自分のところに修正したモジュールをおいています。 playbookを落とすとサブモジュールとして入っています。

インストールしたことのない人のために手順を書いておきます。

まず、pythonの2.7系を入れます。3.4でも動くようになっているのですがローカルで動かすモジュールを使う場合にはまりやすいので2.7系をおすすめします。 pipというパッケージ管理ツールを使ってインストールします。 pipが一緒に入る環境と入らない環境があると思うので入らない人は別途、pipを入れます。

curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

curlがない人はwget、ブラウザから名前をつけて保存でもいいです。

wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
python get-pip.py

次にpipでansible,csを入れます。 csはクラウドスタックのWeb APIをpythonから呼べるようブリッジするもののようです。

pip install ansible cs

以上でセットアップ完了です。

次にplaybookを落としてAPI keyを設定します。

git clone https://github.com/bols-blue/idcfcloud_provisioning_playbook

設定ファイルは中に入れてあるcloudstack.iniに書き込めばいいです。 API keyの場所は本家のブログのStep2-3を見てください。 http://www.idcf.jp/blog/cloud/api_autoscale2/

あとは実行します。 公式モジュールではないのでモジュールが使われるようモジュールの検索パス-Mオプションをつけます。

ansible-playbook provisioning.yml -M ./ansible-cloudstack/ -i hosts

これでVMが作られてファイヤウォールを通過するようになっていますのであとはwebインターフェースからポートフォワーディングするよう変更しましょう。

ポートフォワーディングモジュールるか、それとも元を作っている人が作ってくれるのを待つか悩み中です…

以上!!