AnsibleのPlaybookを作るgemを作りました。


ご参加の方々また2回目表明の方々ありがとうございます。
予想以上に参加者が増えてびっくりです。
(当初は人気(ひとけ)が無かったので、1つずつモジュールを翻訳して時間を稼ごうかと思っていました…)

3回目はさすがに厳しそうですが、余裕があれば頑張りたいところです:)

さて、Ansibleの初期構成を簡単に作るRubygemを作成しましたので紹介します。


# ダウンロード/ソースコード
Rubygemsページ
**[ansible_tools - RubyGems](https://rubygems.org/gems/ansible_tools)**

Githubページ
**[ansible_tools - Github](https://github.com/volanja/ansible_tools)**

# できること
+ Ansibleのディレクトリ構成を3パターンで生成することが出来ます。
+ roles/xxx/vars/main.yml内の変数を確認することが出来ます。

# 困っていたこと
+ ディレクトリ構成を作るのがめんどくさい。以前、[シェルスクリプトを作った](https://github.com/volanja/ansible-init-shell)けど、不便だった。
+ vas/main.yml内の変数の確認がいちいちめんどくさい。

#インストール
## 動作環境
次の環境で動作を確認しています。

```
MacOS X 10.7.5 + ruby 2.0.0p353
CentOS 6.4 + ruby 2.0.0p353
```

##インストール方法

```
$ gem install ansible_tools
```

#使い方
```
$ ansible-tools
Commands:
  ansible-tools help [COMMAND]  # Describe available commands or one specific command
  ansible-tools init [-s][-r]   # create ansible files by BestPractice
  ansible-tools show            # show ansible valiables in vars/main.yml
  ansible-tools version         # show version
```

##BestPracticeな構成を作る。
[Best Practices - ANSIBLEWORKS](http://www.ansibleworks.com/docs/playbooks_best_practices.html)に従ったディレクトリ構成とファイルを作成します。
ちなみにファイルの中身はありません。そのうち、簡単な中身も入れます。

```bash
$ ansbile-tools init
		create	roles/common/tasks
		create	roles/common/handlers
		create	roles/common/templates
		create	roles/common/vars
		create	roles/common/file
		create	group_var
		create	host_var
		create	site.yml
		create	roles/common/tasks/main.yml
		create	roles/common/handlers/main.yml
		create	roles/common/templates/foo.conf.j2
		create	roles/common/vars/main.yml
		create	roles/common/file/bar.txt
		create	production
		create	stage
		create	group_var/group1
		create	group_var/group2
		create	host_var/hostname1
		create	host_var/hostname2

ヘルプはこんな感じです。
$ ansible-tools help init
Usage:
  ansible-tools init [-s][-r]

Options:
  -s, [--simple]     # simple-mode, create only setup.yml, roles/common
  -r, [--role=ROLE]  # create roles/ROLE

create ansible files by BestPractice
```

##Simpleな構成を作る。
BestPracticeのように大きい構成は必要ない時に、最小限な構成を作ります。
私はこの構成を中心に使っています。
```init```に```-sもしくは--simple```を付加します。


```bash
$ ansbile-tools init -s
		create	roles/common/tasks
		create	roles/common/handlers
		create	roles/common/templates
		create	roles/common/vars
		create	roles/common/file
		create	site.yml
		create	roles/common/tasks/main.yml
		create	roles/common/handlers/main.yml
		create	roles/common/templates/foo.conf.j2
		create	roles/common/vars/main.yml
		create	roles/common/file/bar.txt
```

個人的には以下のようなhostsを用意して、```$ansible-playbook site.yml -i hosts```と実行しています。

```
# hosts
[server]
192.168.0.104
```

## Roleの追加
Roleだけを追加したい時にディレクトリとファイルを追加します。
```init```に```-r nameもしくは--role=name```を付加します。

```
$ ansbile-tools init -r <roles name>

e.g. 
$ ansible-tools init -r gitlab
		create	roles/gitlab/tasks
		create	roles/gitlab/handlers
		create	roles/gitlab/templates
		create	roles/gitlab/vars
		create	roles/gitlab/file
		create	site.yml
		create	roles/gitlab/tasks/main.yml
		create	roles/gitlab/handlers/main.yml
		create	roles/gitlab/templates/foo.conf.j2
		create	roles/gitlab/vars/main.yml
		create	roles/gitlab/file/bar.txt
```

書いている時に気づきましたが、site.ymlも作っているのであとで作らないように修正します。
現状ではsite.ymlが存在していたら作成しないので問題はありません。。

##変数の一覧表示
roles/name/vars/main.ymlの内容を一覧で表示させます。

```
$ ansbile-tools show
+----------------------------------------------------------------------------+
|             File             |          Key          |        Value        |
+----------------------------------------------------------------------------+
| roles/gitlab/vars/main.yml   | mysql_gitlab_password | password            |
| roles/gitlab/vars/main.yml   | mysql_gitlab_database | gitlabhq_production |
| roles/mariadb/vars/main.yml  | mysql_root_password   | password            |
| roles/Packages/vars/main.yml | www_port              |                  80 |
| roles/ruby/vars/main.yml     | ruby_ver              | 2.0.0-p247          |
+----------------------------------------------------------------------------+
```

## TODO
+ テストやドキュメントを書く。
+ 何か必要そうな機能があれば作る。ansible-docを使ってtaskから要領書(word)を作るとか。書類命な勤務先ではなかなか浸透しなさそうなので。。。