Ansibleで環境構築(3) - ベストプラクティス構成にする
AnsibleにはBest PracticesなDirectory Layoutがあるらしく、その構成を作ってみます。
とりあえず空のファイルとディレクトリを作る
$ touch ansible.cfg
$ touch production stage
$ touch site.xml
$ touch common.yml blog.yml
$ mkdir group_vars
$ mkdir host_vars
$ mkdir -p roles/common roles/blog
$ cd roles/common
$ mkdir defaults files handlers meta tasks vars
$ touch tasks/main.yml
$ cd ../blog
$ mkdir defaults files handlers meta tasks vars
$ touch tasks/main.yml
$ cd ../../
$ tree
.
├── ansible.cfg
├── blog.yml
├── common.yml
├── group_vars
├── host_vars
├── production
├── roles
│ ├── blog
│ │ ├── defaults
│ │ ├── files
│ │ ├── handlers
│ │ ├── meta
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── vars
│ └── common
│ ├── defaults
│ ├── files
│ ├── handlers
│ ├── meta
│ ├── tasks
│ │ └── main.yml
│ └── vars
├── site.xml
└── stage
ファイル大杉...
全体設定
./ansible.cfg
[defaults]
hostfile = stage
ansible-playbook
でInventory Fileを毎回指定するのが面倒なので、検証用環境であるstage
が選ばれるようにします。
また、本番環境の時だけ-i production
を明示的に指定することになるので、操作ミスも減るかと思います。
検証環境の設定
./stage
[blog]
192.168.33.10 ansible_ssh_user=vagrant
検証環境はVagrantなので、それ用の接続情報にします。
本番環境の設定
./production
[blog]
vps ansible_ssh_user=admin
なお、vpsは.ssh/config
に名前で登録してあります。
Playbookの設定
./site.yml
---
- include: common.yml
- include: blog.yml
エントリーポイントになるPlaybook。
common.yml
とblog.yml
を読み込むだけ。
./common.yml
---
- hosts: all
sudo: yes
gather_facts: no
roles:
- common
common.yml
には全てのサーバー(hosts)を対象にするタスクをcommon
というロールにまとめておきます。
roles: - common
とすることで、./roles/common/tasks/main.yml
をinclude
してくれます。
ちなみに、gather_facts
はサーバーの環境情報を取得するものですが、重いので使うまではoffにします。
./blog.yml
---
- hosts: blog
sudo: yes
gather_facts: no
roles:
- blog
common.yml
とほぼ一緒で、こちらは./roles/blog/tasks/main.yml
をinclude
します。
commonロールのタスク設定
./roles/common/tasks/main.yml
---
- apt: pkg=git update_cache=yes state=latest
とりあえず、前回作ったgit
をインストールするモジュールを指定してみます。
blogロールのタスク設定
./roles/blog/tasks/main.yml
---
- debug: msg="TODO blog task"
あとで書くということでTODOにしておく。
実行してみる
$ ansible-playbook site.yml
PLAY [all] ********************************************************************
TASK: [common | apt pkg=git update_cache=yes state=latest] ********************
changed: [vagrant]
PLAY [blog] *******************************************************************
TASK: [blog | debug msg=TODO blog install] ************************************
ok: [vagrant] => {
"item": "",
"msg": "TODO blog task"
}
PLAY RECAP ********************************************************************
vagrant : ok=2 changed=1 unreachable=0 failed=0
できました。
次回からは、中身をごりごり埋めていきます(予定)