コンテンツにスキップ

インベントリ

インベントリファイルへのグループ変数定義

[servers]
host1
host2

[all:vars]
gateway=192.168.0.1

[servers:vars]
db_host=192.168.0.121

localhost

ターゲットホストでlocalhostを指定した場合

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: sample
      ping:

このとき、インベントリファイルにlocalhostの定義が無い場合(や、インベントリファイルを指定しない場合)は、暗黙のlocalhostとして

hosts:
  localhost:
   vars:
     ansible_connection: local
     ansible_python_interpreter: "{{ansible_playbook_python}}"

ってのが内部で用意され、この設定で接続される。よって、connection: localとして動く。

$ ansible-playbook localhost.yml -vvv
:
:
TASK [sample] *****************************************************
task path: /home/zaki/src/ansible-sample/inventory/localhost.yml:6
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: zaki
:
:

こんな感じ。

インベントリにlocalhostの設定があればそれが使われる。当然connection: localが無ければ、設定されたコネクションプラグインが使用される(未指定ならデフォルトのssh)

[localhost]
localhost

こんなlocalhost.iniというインベントリファイルを指定すると、

$ ansible-playbook localhost.yml -i localhost.ini -vvv
:
:
TASK [sample] *****************************************************
task path: /home/zaki/src/ansible-sample/inventory/localhost.yml:6
<localhost> ESTABLISH SSH CONNECTION FOR USER: None
:
:

このようにssh接続となる。

ダイナミックインベントリ

EC2

[Ansible / AWS] ダイナミックインベントリを使ってEC2接続先を動的に取得してAnsible実行お試し - zaki work log

---
plugin: amazon.aws.aws_ec2
regions:
  - ap-northeast-1

デフォルトでaws_ec2グループに全EC2が所属する。

tagを使ったホストのグルーピング

---
plugin: amazon.aws.aws_ec2
regions:
  - ap-northeast-1
keyed_groups:
  - key: tags.Type

keyed_groups配下にリストでkey: tags.<タグ名>をセットすると、対象のタグの値でグループが作成される。
例えば上記の定義の場合、TypeキーがセットされているEC2のグループができる。

EC2 Typeタグの値
host1 Type=server
host2 Type=client
host3 Type=client

このような構成だった場合、_serverグループにhost1、_clientグループにhost2,host3がセットされる。

netbox

[NetBox / Ansible] ダイナミックインベントリを使ってNetBoxに登録されたホスト情報をターゲットノードにAnsibleを実行 - zaki work log

plugin: netbox.netbox.nb_inventory
api_endpoint: http://192.168.0.19:28080
token: 0123456789abcdef0123456789abcdef01234567