Ansible 2.7.4でロール用ディレクトリを一括作成
目次
概要
AnsibleのPlaybookを作成する際に、1つのPlaybookにあまりにも多くの処理を記述してしまうと 可読性が落ち、Playbookの再利用性も悪くなってしまいます。 この問題に対し、Playbookのメンテナンス性を向上させることを目的に、 Playbook内の関連のある処理をロールという単位でPlaybookを分割することができます。 例えば、1台のLinuxサーバを構築するPlaybookがあるとして、その中で、 Linuxの初期設定、Apache HTTP Serverの導入、PostgreSQLの導入という処理をやっている場合、 「Linuxの初期設定」や「Apache HTTP Serverの導入」などがそれぞれ1つのロールとなります。 何を1つのロールとするかは自由なので、もっと細かくても良いですし、もっと大ざっぱでも構いません。 メンテナンス性や再利用性を考えて自分なりの単位でロールを決めれば良いです。
前置きが長くなりましたが、Playbookをロールで分割しようとした場合、 Ansibleには決められたディレクトリ構成があります。 その決められたディレクトリ構成をコマンド一発で作成することができるので、その方法を紹介します。
構成
検証環境
サーバにはAmazonのEC2インスタンスを利用しました。 AmazonマシンイメージはAWS標準のものではなく、AWS Marketplaceから取得しています。 サーバのスペックは以下のとおりです。
| 項目 | 内容 | 
|---|---|
| Amazonマシンイメージ | CentOS 7 (x86_64) - with Updates HVM | 
| インスタンスタイプ | t2.micro | 
| vCPU | 1 | 
| メモリ | 1GiB | 
| ディスク | SSD 8GiB | 
| リージョン | アジアパシフィック (東京) | 
サーバ構成
OSバージョン
CentOS 7.5.1804 x86_64
ソフトウェア・パッケージ一覧
- epel-release-7-11.noarch.rpm
- ansible-2.7.4-1.el7.noarch.rpm
環境構築
設定
Playbook用ディレクトリ作成
Ansible操作用のユーザ ansible にスイッチした後、 AnsibleのPlaybook用のディレクトリを作成し、 その中にロール用のディレクトリを作成するものとします。 Playbook用のディレクトリは今回は主役ではないので、 適当に test という名前にしておきます。
$ sudo su - Last login: Wed Jan 23 14:25:53 UTC 2019 on pts/0 # su - ansible ←Ansible操作用ユーザにスイッチ Last login: Mon Feb 18 15:48:16 UTC 2019 on pts/0 $ cd /data/ansible/ $ mkdir test ←Playbook用ディレクトリを作成 $ cd test/
ロール用ディレクトリを一括作成
ロール用ディレクトリを一括作成するには、ansible-galaxy init コマンドを使用します。 コマンドに続けて作成したいロール名を指定します。今回は common という名前のロールを作成します。
$ ansible-galaxy init common - common was created successfully
作成したロール用ディレクトリの確認
ロール用ディレクトリ作成コマンド実行後に、何が作成されたか確認します。 なお、ディレクトリ作成と書きましたが、実際にはディレクトリ内に ロールを定義するためのYAMLファイルも一緒に作成されます。 確認には find コマンドを使用します。
$ find ./ -exec ls -ld {} \;
drwxrwxr-x. 3 ansible ansible 20 Feb 18 15:51 ./
drwxrwxr-x. 10 ansible ansible 135 Feb 18 15:51 ./common
-rw-rw-r--. 1 ansible ansible 1328 Feb 18 15:51 ./common/README.md
drwxrwxr-x. 2 ansible ansible 22 Feb 18 15:51 ./common/defaults
-rw-rw-r--. 1 ansible ansible 30 Feb 18 15:51 ./common/defaults/main.yml
drwxrwxr-x. 2 ansible ansible 6 Feb 18 15:51 ./common/files
drwxrwxr-x. 2 ansible ansible 22 Feb 18 15:51 ./common/handlers
-rw-rw-r--. 1 ansible ansible 30 Feb 18 15:51 ./common/handlers/main.yml
drwxrwxr-x. 2 ansible ansible 22 Feb 18 15:51 ./common/meta
-rw-rw-r--. 1 ansible ansible 1973 Feb 18 15:51 ./common/meta/main.yml
drwxrwxr-x. 2 ansible ansible 22 Feb 18 15:51 ./common/tasks
-rw-rw-r--. 1 ansible ansible 27 Feb 18 15:51 ./common/tasks/main.yml
drwxrwxr-x. 2 ansible ansible 6 Feb 18 15:51 ./common/templates
drwxrwxr-x. 2 ansible ansible 39 Feb 18 15:51 ./common/tests
-rw-rw-r--. 1 ansible ansible 11 Feb 18 15:51 ./common/tests/inventory
-rw-rw-r--. 1 ansible ansible 64 Feb 18 15:51 ./common/tests/test.yml
drwxrwxr-x. 2 ansible ansible 22 Feb 18 15:51 ./common/vars
-rw-rw-r--. 1 ansible ansible 26 Feb 18 15:51 ./common/vars/main.yml
作成されたディレクトリについて簡単に説明します。
| ディレクトリ名 | 内容 | 
|---|---|
| defaults | デフォルトで優先順位の低い変数を定義するファイルを格納 | 
| files | copyリソースで使用するファイルを格納 scriptリソースで使用するスクリプトファイルを格納 | 
| handlers | handlersを定義するファイルを格納 | 
| meta | ロールの依存関係を定義するファイルを格納 | 
| tasks | tasksを定義するファイルを格納 | 
| templates | templateリソースで使用するファイルを格納 ファイルの拡張子は.j2を指定 | 
| tests | ロールをテストするためのインベントリファイルとPlaybookを格納 | 
| vars | ロールに関連する変数を定義するファイルを格納 | 

