概要
Inventory ファイルに記載されている IP アドレスを playbook 内で使いたい場合はあると思います
そんな場合には Magic Variables を使いましょう
環境
- CentOS 7.7.1908
- ansible-playbook 2.8.5
サンプルコード
debug_hosts グループ内で定義されているホストの IP アドレスを取得してみたいと思います
vim main.yml
- hosts: target
tasks:
- name: debug inventry
vars:
msg: |
{% for item in groups['debug_hosts'] %}
{{ hostvars[item].ansible_host }}
{% endfor %}
debug:
msg: "{{ msg.split('\n') }}"
# debug:
# msg: "{{ groups }}"
インベントリファイルは以下の通りです
vim inv
target:
hosts:
localhost:
ansible_host: 127.0.0.1
debug_hosts:
hosts:
host1:
ansible_host: 192.168.200.10
host2:
ansible_host: 192.168.200.11
ansible 自体は localhost に実行します
実行
ansible-playbook -i inv main.yml
結果
ok: [localhost] => {
"msg": [
"192.168.200.10",
"192.168.200.11",
""
]
}
解説
まず groups
変数にインベントリファイルに定義したグループの情報が含まれています
ただ groups
にはホスト名までの情報しかなく IP アドレスの情報は含まれていません
そこで登場するのが hostvars
です
これもマップで管理されておりホスト名をキーにするとそのホストの情報が取得できます
その中に ansible_host
というフィールドがありここで IP アドレスを管理しています
サンプルでは debug + template を使っていますが playbook ないで使う場合は好きなリソースを使ってください
また見やすくするように一旦 vars
を使っていますがこれも playbook 内では不要かなと思います
0 件のコメント:
コメントを投稿