現在のホストのIPアドレスをロールで取得する方法
私はあなたがあなたがホストであるグループのリストとホストのホスト名を得ることができることを知っています、しかし私はIPアドレスを得るための解決策を見つけることができません。
{{inventory_hostname}}
を使用してホスト名を取得し、{{group_names}}
を使用してグループを取得できます。
{{ hostvars[{{ inventory_hostname }}]['ansible_ssh_Host'] }}
やip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_Host }}"
のようなことを試しました
すべてのアドレスのリストはファクトansible_all_ipv4_addresses
、ansible_default_ipv4.address
のデフォルトアドレスに格納されています。
---
- hosts: localhost
connection: local
tasks:
- debug: var=ansible_all_ipv4_addresses
- debug: var=ansible_default_ipv4.address
それから、各ネットワークインターフェースに割り当てられたアドレスがあります。
あなたはhostvars
、dict ansible_default_ipv4
およびkey address
からIPアドレスを取得できます。
hostvars[inventory_hostname]['ansible_default_ipv4']['address']
それぞれIPv6アドレス
hostvars[inventory_hostname]['ansible_default_ipv6']['address']
プレイブックの例:
---
- hosts: localhost
tasks:
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv6']['address']
{{ ansible_eth0.ipv4.address }}
を使用するのと同じ方法で、template.j2 {{inventory_hostname}}
で使用できます。
ps:次のブログポストを参照して、 その他の事実に関するリモートホストに関する情報を収集する方法 を参照してください。
「いつか誰かに役立つことを願っています。
外部パブリックIPが必要で、AWSやAzureのようなクラウド環境にいる場合は、 ipify_factsモジュールを使用できます :
# TODO: SECURITY: This requires that we trust ipify to provide the correct public IP. We could run our own ipify server.
- name: Get my public IP from ipify.org
ipify_facts:
これによりパブリックIPが変数ipify_public_ip
に配置されます。
パブリックIPを見つけるための別の方法はuri
モジュールを使うことです。
- name: Find my public ip
uri:
url: http://ifconfig.me/ip
return_content: yes
register: ip_response
あなたのIPアドレスはip_response.content
になります
http://docs.ansible.com/ansible/latest/plugins/lookup/Dig.html
テンプレートでは、eです。 g .:
{{ lookup('Dig', ansible_Host) }}
ノート:
それでも、それは99%(比喩的に言えば)のユースケースに役立ちます。
次のスニペットはリモートマシンのパブリックIPアドレスとデフォルトのIPアドレス(つまりLAN)を返します。
これは設定ファイルを使う際の混乱を避けるためにipを引用符で囲んで表示します。
>> main.yml
---
- hosts: localhost
tasks:
- name: ipify
ipify_facts:
- debug: var=hostvars[inventory_hostname]['ipify_public_ip']
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
- name: template
template:
src: debug.j2
dest: /tmp/debug.ansible
>> templates/debug.j2
public_ip={{ hostvars[inventory_hostname]['ipify_public_ip'] }}
public_ip_in_quotes="{{ hostvars[inventory_hostname]['ipify_public_ip'] }}"
default_ipv4={{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}
default_ipv4_in_quotes="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"