AnsibleでEucalyptusを試そう(と思った/途中まで)

この記事は[Eucalyptus Advent Calendar 2014](http://www.adventar.org/calendars/547)の12/18分の記事です。遅刻してすみません。

昨年2013年はひたすらインフラ管理というか、IaaS周りでお世話になったわけですが、どういうわけか今年2014年からはロボット(Pepperくん)の仕事もやらせていただいていたります。
そんな感じの年末、[shidat1234さんのスライド](http://www.slideshare.net/shidat1234/eucalyptus-adventcalendar2014)を見て**自分もEucalyptusで書かねば・・・**となにか使命感のようなものが湧いてきてしまったので、今お気に入りのAnsibleたんにEucalyptusを組み立ててもらおうとしたのでそのメモを。まだできてなくてすみません。

#前提

自分らが運用するベアメタルクラウド上で物理マシン 5台を確保。
いずれもフロントに通じるNICとマシン間で通じるプライベートなNICを持ったマシンを作り、CentOS6.5イメージで初期化している。

これに https://github.com/eucalyptus/playbook でEucalyptusを生やせないのかと、そんな感じの実験をしてみる。
なお、これで構築できるEucalyptusのバージョンは(設定ファイル類の定数を見る限り)3.4っぽい。(最終更新9ヶ月前・・・)

#準備

Ansibleを動かすマシンに https://github.com/eucalyptus/playbook.git をcloneしてきて、 `vars/main.yml` に関して、以下の作業を実施。

1. `em1`とか`em2`とか、NIC名を指定しているところを環境にあわせて書き換える
2. `nc_gateway:`あたりを環境にあわせて書き換える
3. ホスト情報をInventoryファイルに書く。なお、デプロイ元ホストで作ったキーペアの公開鍵を各ホストの `~/.ssh/authorized_keys` に加えておく

Inventoryはこんな感じ。`euca.hosts`みたいなファイル名で作成。

```
[clc]
192.168.207.97 ansible_ssh_user=testuser

[walrus]
192.168.207.98 ansible_ssh_user=testuser

[sc]
192.168.207.99 ansible_ssh_user=testuser

[cc]
192.168.207.100 ansible_ssh_user=testuser

[nc]
192.168.207.101 ansible_ssh_user=testuser
```

とりあえず何も考えず各ロールに1マシンずつ割り振ってみる。

#実行してみる

`ansible-playbook --sudo -i euca.hosts site.yml` みたいな感じでサクッと実行。

すると、Playbookが実行されていく。

```
PLAY [cc] ********************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [192.168.207.100]

PLAY [nc] ********************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [192.168.207.101]

TASK: [common | Template repo files (release)] ******************************** 
changed: [192.168.207.101] => (item=eucalyptus-release.repo)
changed: [192.168.207.101] => (item=euca2ools-release.repo)
changed: [192.168.207.101] => (item=elrepo.repo)
changed: [192.168.207.101] => (item=epel.repo)

TASK: [common | Template repo files (nightly)] ******************************** 
skipping: [192.168.207.101] => (item=eucalyptus-nightly.repo)
skipping: [192.168.207.101] => (item=euca2ools-release.repo)
skipping: [192.168.207.101] => (item=elrepo.repo)
skipping: [192.168.207.101] => (item=epel.repo)

...

TASK: [nc | Remove virbr0] **************************************************** 
skipping: [192.168.207.101] => (item=net-destroy)
skipping: [192.168.207.101] => (item=net-undefine)
```

こんな感じで着々とtaskが進んでいくように見える。試しに、NCにしたマシンでサービスを確認してみると、「おー」という感じ。

```
[root@xxxxxxxxxx ~]# service eucalyptus-nc status
NC is running
```

なんとなくサービスも動いているっぽい。やはりAnsibleが自動的にガツガツデプロイしていくさまは少しかわいげがあります。

で、見守る。

```
GATHERING FACTS *************************************************************** 
ok: [192.168.207.97]

TASK: [Check for Walrus] ****************************************************** 
failed: [192.168.207.97] => {"changed": true, "cmd": "/usr/sbin/euca_conf --list-walruses | grep -q 192.168.207.98", "delta": "0:00:44.916468", "end": "2014-12-19 01:40:43.791090", "rc": 1, "start": "2014-12-19 01:39:58.874622", "warnings": []}
stderr: warning: No credentials found; attempting local authentication
...ignoring

TASK: [Register Walrus] ******************************************************* 
fatal: [192.168.207.97] => with_items expects a list or a set

FATAL: all hosts have already failed -- aborting
```

・・・・・・うむ・・・・・・・時間は、あまり、ないな・・・・・・**また来年よろしくお願いします！！！！**