kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

Ansible Galaxyでロールの管理 - コマンド編

個人(主にGithub)でAnsible Galaxyでロールを管理する上で、
よく使うサブコマンドは、initinstallの2つです。
import,search,removeなどは、Ansible Galaxyにある
ロールを使う時によく使うサブコマンドです。

ただ、実際のプロジェクトでは、
Ansible Galaxyにあるロールをあまり使うことはないのかなと思ってます。
既存のロールは、不要なタスクがあったり、タスクが足りなかったりで
自分のプロジェクトにジャストフィットするものは
あまりないという印象です。

自分でロールを開発する時に参考として見るという使い方が
一番しっくり来ています。

init

ロール開発をする雛形を生成してくれるコマンドです。
ansible-galaxy init ansible-role-foo という形で使用します。
ansible-role-foo という部分は自分で指定します。

大体このコマンドで作成したディレクトリをそのまま
リポジトリとして扱っていくことが多いと思います。

ロール名

Ansible Galaxyのサイトでは、 リポジトリ名 = ロール名 になっていないものが多いですが、
個人で管理する場合は、リポジトリ名 = ロール名にしてしまうのが簡単だと思います。
私は、 ansbile-role- か 単に role- を接頭辞につけることが多いです。

ディレクトリ構造

実行すると下記のような構造になります。

ansible-role-foo
├── README.md
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

何をどこに書くのかは、公式ドキュメントにあるベストプラクティス
従うのが今のところ良いのではないかと思います。
日本語で解説されているサイトも多いのでググるといろいろ出てきます。

install

playbookで使用したいロールをローカルに落としてくるのに利用します。
私は、基本的に require.yml に記載したものをインストールするときに使用しています。
ansible-galaxy install -r require.yml のような形で実行します。

実際のプロジェクトでは、ansible-galaxy install -fr require.yml
f オプションを追加して使うことが多いです。fはフォースオプションで、
ロールを落としてくる先に、すでに同名のロールが存在した場合、上書きするオプションです。

Playbookを一旦開発し終わった後でも、ロールに対して修正することがよくあります
そんなときに、再度インストールし直すには、fオプションつけないと更新できません。

ちなみにこの時、 fr の順番に気をつけないとエラーがでることがあるようです。