■前提
現在携わっているプロジェクトでAnsibleを使用していますが、メンテナンス出来るメンバが限られている状態です。そこで、Ansibleの構成について簡単にまとめておきたいと思います。
■環境
CentOS 6.xに対してAnsibleを実行する想定です。
■Ansibleの構成
以下は、サーバにApacheとMySQLをインストールするAnsibleのファイル群です。
「★」がついているものは、任意の名前を付けてOKなものです。
server01 ← [★任意のディレクトリ名、Webサーバに展開するAnsibleであれば「web_server」など]
│
└── roles ← [お決まりのディレクトリ名]
│
├── apache ← [★任意のディレクトリ名、タスクの名前にすると分かりやすい]
│ │
│ └── tasks ← [お決まりのディレクトリ名]
│ │
│ └── main.yml ← [お決まりのファイル名]
│
└── mysql ← [★]
│
├── tasks
│ │
│ └── main.yml
│
├── templates ← [お決まりのディレクトリ名]
│ │
│ └── my.cnf.j2 ← [★任意のファイル名、拡張子は「j2」]
│
└── vars ← [お決まりのディレクトリ名]
│
└── main.yml
■「main.yml」の中身(一部抜粋)
・apache -> tasks
Apacheのインストールから設定など、Apacheに関するタスクを記載しています。
どのタスクも「name」と「tags」を付けるようにしています。
# Apacheのインストール ← [コメント]
- name: install apache ← [Ansibleを実行したときに表示される]
yum: name=httpd state=latest ← [最新のApacheをyumインストール]
tags: apache ← [Ansible実行時に「このtagsの名前のタスクだけ実行!」と指定できる]
MySQLのインストールから設定など、MySQLに関するタスクを記載しています。
・mysql -> tasks
- name: install mysql
yum: name={{ url }}/{{ item }} state=present ← [インストール済みであればインストールしない、「url」は以下の「vars-main.yml」に記載、「with_items」分実行される]
with_items: ← [複数ある場合は以下のように複数記載]
- MySQL-client-{{ version }}.el6.x86_64.rpm ← [「version」は以下の「vars-main.yml」に記載]
- MySQL-shared-compat-{{ version }}.el6.x86_64.rpm
tags: mysql
・mysql -> vars
url: http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.5/ ← [MySQLダウンロード先URL]
version: 5.5.46-1 ← [MySQLバージョン]
■(少し発展編)全タスクで使用する変数を定義したい!
この場合は、「server01」ディレクトリと同じ階層に「group_vars」というディレクトリを作成し、その中に任意のファイルを作成して変数を定義します。
server01
group_vars
│
└── server ← [★任意のファイル名]
上記「server」ファイルで、以下のように記載すれば全main.ymlで定義した変数「hoge_user」「hoge_version」が使用可能になります。
---
hoge_user: hogeuser
hoge_version: 1.2.3
■最後に
Ansibleは完成させるまで苦労しますが、完成後は環境作成がとても楽になります。
コマンド一つで何度でも同じ環境を作成できるのは本当に楽です。
Ansibleは恐くない!Ansibleを味方につけて楽しよう!
Ansible以外の構成管理ツールもたくさんあるので、Ansibleより楽なツールが無いか今後試してみたいと思います。