kikukawa's diary

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

Ansible Galaxyでロールの管理 - リポジトリ編

リポジトリについて

Ansible Galaxyで管理していく場合、
リポジトリはロール単位で管理してくことになります。
それとは別にPlaybookを管理していくリポジトリも必要です。

そのため、Playbookを管理する一つのリポジトリと、
そのPlaybookに必要な分のロールのリポジトリができあがります。

Playbook用のリポジトリの雛形

前回の記事で少し触れましたが、
私はよく使う構成をPlaybookのリポジトリの雛形として
githubにおいています。 そのリポジトリ に入れているものの紹介をしたいと思います。

.editorconfig

root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
trim_trailing_whitespace = true


[*.md]
trim_trailing_whitespace = false

Ansibleはyml形式で書いていくのでその設定を入れています。
README用に *.md の設定も入れています。

ansible.cfg

Ansibleの設定ファイルです。 AnsibleのGithubリポジトリにあるexampleのものをベースとしていますが、 以下だけ変更しています。

inventory      = hosts
roles_path    = roles

リポジトリ直下にそのプロジェクト用のhostsファイルを
作成することが多いのでinventory = hosts を設定しています。

また、Ansible Galaxyでインストールするロールは、
プロジェクトディレクトリ(Playbookのリポジトリ)直下のrolesディレクトリに
インストールしたいのでroles_path = roles を設定しています。
複数プロジェクトが共存する環境下で、お互いに影響がでないことを考えてです。

.gitignore

*.retry
roles/role-*

playbookを実行すると.retryというファイルを生成する場合があるので
それをリポジトリに含めいないようにしています。
roles/role-* に関しては入れたり入れなかったりです。

ansible.cfgでroles_path = rolesの設定を入れると
リポジトリ内のrolesにAnsible Galaxyで持ってきたロール群が配置されます。
それらは、リポジトリ管理したくないので除外しています。
ただ、roles配下すべてを除外してしまうと、
そのPlaybookのリポジトリだけで必要な使い回す必要のないロールも除外されてしまいます。
なので、Ansible Galaxyでインストールするものは、
role-xxxという命名規則でインストールされるようにして、
その命名規則にあったものだけ除外しています。

require.yml

Ansible Galaxyでインストールするロールを記載しておくためのファイルです。
このファイルにPlaybookで必要なロールを記載しておくことで、
複数のロールを一気にインストールできます。
npmのpackage.josnとかcomposerのcomposer.jsonみたいなものです。
Ansible Galaxyでは、npmやcomposerほど高度なことはできませんが。。

雛形のリポジトリには、Ansible Galaxyの説明に書いてあったサンプルを
そのまま記載しています。

一番多く使うのは、Githubかつバージョン、name指定の方法です。
下記のような書き方です。

 - src: https://github.com/kkkw/ansible-role-example
   version: master
   name: role-example