てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] ansible-plyabook コマンドでインベントリを複数指定する

はじめに

ansible-playbook コマンドの -i オプションは複数のインベントリを指定できます。

ansible-playbook -i inventory01.ini -i inventory02.ini playbook.yml 

この記事ではかんたんなサンプルと実行例を紹介します。

  • 動作確認環境
    • ansible 5.1.0 (asnble-core 2.12.1)

サンプル

インベントリファイルの用意

インベントリファイルを2つ用意します。分かりやすくするため、1つめに group01、2つめに group02 を定義します。

  • inventory01.ini
[grouop01]
router101
router102
  • inventory02.ini
[grouop02]
server201
server202

合計、4台のホストです。

Playbookの実行

hosts: all にした適当なPlaybookを実行します。

$ ansible-playbook -i inventory01.ini -i inventory02.ini test.yml

PLAY [all] **************************************************************************

TASK [debug inventory_hostname] *****************************************************
ok: [router101] => {
    "msg": "I am router101"
}
ok: [router102] => {
    "msg": "I am router102"
}
ok: [server201] => {
    "msg": "I am server201"
}
ok: [server202] => {
    "msg": "I am server202"
}

PLAY RECAP ***************************************************************************
router101  : ok=1  changed=0  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0   
router102  : ok=1  changed=0  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0   
server201  : ok=1  changed=0  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0   
server202  : ok=1  changed=0  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0   

2つのインベントリに含まれる4台のホスト分が実行されました。

Playbookを実行せずにホスト一覧を確認する

Playbookを実行せずとも、ホストの確認だけなら他の方法もあります。

ansible-playbook--list-hosts オプションを利用する方法。こちらでは、Playbookが hosts: all なので、全部出力されます。

$ ansible-playbook -i inventory01.ini -i inventory02.ini test.yml --list-hosts

playbook: test.yml

  play #1 (all): all    TAGS: []
    pattern: ['all']
    hosts (4):
      server201
      router101
      router102
      server202

ansible-inventory というインベントリ確認用のコマンドも便利です。

@all:
  |--@grouop01:
  |  |--router101
  |  |--router102
  |--@grouop02:
  |  |--server201
  |  |--server202
  |--@ungrouped:

少し応用(スタティックとダイナミックの組み合わせ)

先程ほどのサンプルは、スタティックなインベントリを複数していました。スタティックとダイナミックの組み合わせもできます。

ここでは、AzureのVMの情報を利用できる azure.azcollection.azure_rmインベントリプラグインを利用するインベントリを、2つめに指定します。

$ansible-inventory -i inventory01.ini -i inventory_azure_rm.yml --graph 
@all:
  |--@grouop01:
  |  |--router101
  |  |--router102
  |--@rg_ansible_azure:
  |  |--azure01_7192
  |--@ungrouped:
  |--@windows:
  |  |--azure01_7192

rg_ansible_azurewindows グループが、azure.azcollection.azure_rm インベントリプラグインで取得したものです。