web-dev-qa-db-ja.com

Ansible:現在のターゲットホストのIPアドレスを取得します

現在のホストのIPアドレスをロールで取得する方法

私はあなたがあなたがホストであるグループのリストとホストのホスト名を得ることができることを知っています、しかし私はIPアドレスを得るための解決策を見つけることができません。

{{inventory_hostname}}を使用してホスト名を取得し、{{group_names}}を使用してグループを取得できます。

{{ hostvars[{{ inventory_hostname }}]['ansible_ssh_Host'] }}ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_Host }}"のようなことを試しました

62
SJC

すべてのアドレスのリストはファクトansible_all_ipv4_addressesansible_default_ipv4.addressのデフォルトアドレスに格納されています。

---
- hosts: localhost
  connection: local
  tasks:
    - debug: var=ansible_all_ipv4_addresses
    - debug: var=ansible_default_ipv4.address

それから、各ネットワークインターフェースに割り当てられたアドレスがあります。

83
techraf

あなたは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']
46
Pasi H

{{ ansible_eth0.ipv4.address }}を使用するのと同じ方法で、template.j2 {{inventory_hostname}}で使用できます。

ps:次のブログポストを参照して、 その他の事実に関するリモートホストに関する情報を収集する方法 を参照してください。

「いつか誰かに役立つことを願っています。

23
Orsius

外部パブリック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に配置されます。

4
Simon Woodside

パブリックIPを見つけるための別の方法はuriモジュールを使うことです。

    - name: Find my public ip
      uri: 
        url: http://ifconfig.me/ip
        return_content: yes
      register: ip_response

あなたのIPアドレスはip_response.contentになります

3
chava

http://docs.ansible.com/ansible/latest/plugins/lookup/Dig.html

テンプレートでは、eです。 g .:

{{ lookup('Dig', ansible_Host) }}

ノート:

  • インベントリにはDNS名だけを使用できるわけではないので、IPでないかどうかの確認をすでに追加しておくことをお勧めします。
  • 明らかに十分なこの領収書は、間接的なホスト仕様(例えば、ジャンプホストの使用など)の意図したとおりには機能しません。

それでも、それは99%(比喩的に言えば)のユースケースに役立ちます。

1
poige

次のスニペットはリモートマシンのパブリック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'] }}"
0
Akhil Jalagam