Ansible: الحصول على عنوان IP المضيف الحالي الهدف




ansible-facts ansible-template (5)

إذا كنت تريد عنوان 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 للمضيف الحالي في دور؟

أعلم أنه يمكنك الحصول على قائمة المجموعات التي يكون المضيف عضوًا فيها واسم المضيف للمضيف ولكن لا أستطيع إيجاد حل للحصول على عنوان IP.

يمكنك الحصول على اسم المضيف باستخدام {{inventory_hostname}} والمجموعة باستخدام {{group_names}}

لقد جربت أشياء مثل {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }} و ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"


سيعيد المقتطف التالي عنوان 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'] }}"


يتم تخزين قائمة بجميع العناوين في حقيقة 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

ثم هناك عناوين مخصصة لكل واجهة شبكة ... في مثل هذه الحالات ، يمكنك عرض كل الحقائق والعثور على تلك التي لها القيمة التي تريد استخدامها.


يمكنك أن تستخدم في القالب الخاص بك. {{ ansible_eth0.ipv4.address }} بنفس الطريقة التي تستخدم بها {{inventory_hostname}} .

ملاحظة: يرجى الرجوع إلى المدونة التالية للحصول على مزيد من المعلومات حول كيفية جمع المعلومات حول خراطيم التحكم عن بعد مع حقائق GATHERS الواضحة .

آمل أن يساعد شخص ما يومًا ما ッ


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

حتى في القالب ، على سبيل المثال:

{{ lookup('dig', ansible_host) }}

ملاحظات:

  • نظرًا لأنه لا يمكن استخدام اسم DNS فقط في قائمة الجرد ، فهل من الأفضل إضافة عنوان IP بالفعل
  • من الواضح أن هذا الإيصال لن يعمل كما هو محدد لمواصفات المضيف غير المباشرة (مثل استخدام مضيفات الانتقال ، على سبيل المثال)

ولكن لا يزال يخدم 99 ٪ (بالمعنى المجازي) من حالات الاستخدام.





ansible-template