VTRyo Blog

一歩ずつ前に進むブログ

AnsibleのインベントリとPlaybookの関係

f:id:vtryo:20180714235526p:plain

ども。久々の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という書き方も可能です。

ただ、それだと何個もあったときめんどくさいよねーということでグルーピングすることをおすすめします。

では今日は簡単にこれにて。