ども。久々のansibleネタ。
ansibleのインベントリとPlaybookの関係についてです。
Playbook.ymlの- hosts
はインベントリのどこを参照しているのでしょうか?
ディレクトリ構成
$ pwd
~/ansible-directory
$ tree
.
├── group_vars
│ ├── all.yml
├── hosts
│ ├── all_host
├── Playbook.yml
└── roles
├── nginx
│ ├── handlers
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ └── templates
│ └── nginx.conf
├── check-ssh
│ └── tasks
│ └── main.yml
└── vuls-package-update
└── tasks
└── main.yml
シンプルな構成にしておきました。
- group_vars: 変数ディレクトリ
- hosts: インベントリディレクトリ
- roles: 実行タスクディレクトリ
- Playbook.yml: メイン実行ファイル
Playbook.yml
Playbook.ymlには開発と本番とで中身をわけておきました。
- hosts: all become: True roles: - check-ssh - hosts: dev-web become: True roles: - nginx - hosts: prd-web become: True roles: - vuls-package-update
このPlaybook.ymlのall
, prd-web
, dev-web
はどこを読みこんでいるのでしょう。
dev-web, prd-web
ではインベントリを確認していきます。
hosts/all_host
[web] xxx-web-dev xxx-web-prd [api] xxx-api-dev xxx-api-prd [batch] xxx-batch-prd [all:children] web api batch #---------------------- [d-web] xxx-web-dev [p-web] xxx-web-prd [dev-web:children] d-web [prd-web:children] p-web
[all:children]
, [dev-web:children]
, [prd-web:children]
でホストのグルーピングをしています。
つまり、Playbook.ymlの- hosts
とall_hostのall
, dev-web
, prd-web
が対応しているということです。
実行すると、各ホストグループに入っているサーバへそれぞれSSHしに行きます。
もちろん、実行内容も書いたとおりに振り分けられているはずです。
おわりに
もし特定のサーバだけにansibleを実行したい場合は、ansible-playbook -i hosts/all_host -l xxx-web-dev Playbook.yml
という書き方も可能です。
ただ、それだと何個もあったときめんどくさいよねーということでグルーピングすることをおすすめします。
では今日は簡単にこれにて。