"Ansible Galaxy"はRolesをシェアできるサービスです。uploadしたり、好みのroleを探してinstallする事ができます。ansible-galaxyはこのAnsible Galaxyを利用する為のコマンドラインツールです。
1.8のansible-galaxyではAnsible Galaxyにホストされているroleだけでなく、SCMを指定できるようになったので外部のリポジトリも扱えるようになりました。
使い方(SCM)
GitHubから。-pで配置するdirectoryを指定しています。
ansible-galaxy install -p ./roles https://github.com/bennojoy/nginx
ブランチ・タグも指定できます
ansible-galaxy install -p ./roles https://github.com/ANXS/mysql.git,v1.0.3
応用
1.8から-rで指定するファイルの拡張子を'yml'にする事で、ファイルから読み込む際も外部のリポジトリが使えるようになります。
ファイルを用意します
# from galaxy
- src: yatesr.timezone
# from github
- src: https://github.com/bennojoy/nginx
# from github with tag
- src: https://github.com/ANXS/mysql.git
version: v1.0.3
実行します
ansible-galaxy install -p ./roles -r requirements.yml
プライベートで使ってみる
プライベートで使っているgitlabに作成した自前のroleをansible-galaxyでinstallしてみます。
ansible-galaxy init [role名] でひな形が作成できます。オフラインで使用する際は--offline
オプションも指定して下さい。
myrole
├── README.md
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
commit, pushしたあと、ansible-galaxyでinstallしてみます。
$ ansible-galaxy install -p ./roles git+git@gitlab.example.com:orita/myrole.git
- executing: git clone git@gitlab.example.com:orita/myrole.git myrole
- executing: git archive --prefix=myrole/ --output=/var/folders/xx/xxxxxxxxxxxxxxxxxxxxxx/x/xxxxxxx.tar master
- extracting myrole to ./roles/myrole
- myrole was installed successfully
うまくいったようです。ssh+gitの場合はリポジトリパスの先頭に"git+"をつけるとうまくいきました。
注意事項
ansible-galaxyは依存しているrole(meta/main.ymlに記述する)も自動的に取得してくれるのですが、現時点ではAnsible Galaxyにあるものに限定されています。外部のリポジトリに置く場合は気をつけましょう。
To download a role with dependencies, and automatically install those dependencies, the role must be uploaded to the Ansible Galaxy website.
Ansible Galaxy — Ansible Documentation
あとがき
今まで自分で使う時はroleもろとも全部同じリポジトリに入れてしまい使い回しが厳しかったり(どっかで見たアンチパターン・・・)、gitのsubmoduleにしてみたもののどうも使い勝手が悪かったりでした。外部のリポジトリも扱えるようになってroleの使い回しが捗りそうです。Berkshelfみたいに使えて便利ですね。