Help us understand the problem. What is going on with this article?

ansible-galaxyでRolesを再利用する

More than 5 years have passed since last update.

"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'にする事で、ファイルから読み込む際も外部のリポジトリが使えるようになります。

ファイルを用意します

requirements.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みたいに使えて便利ですね。

orita
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away