উত্তর: বর্তমান টার্গেট হোস্টের আইপি ঠিকানা পান


103

আপনি কীভাবে কোনও ভূমিকায় বর্তমান হোস্টের আইপি ঠিকানা পাবেন?

আমি জানি যে আপনি গ্রুপগুলির তালিকা হোস্টের সদস্য এবং হোস্টের হোস্টের নাম পাবেন তবে আমি আইপি ঠিকানা পাওয়ার কোনও সমাধান খুঁজে পাচ্ছি না।

আপনি ব্যবহার করে হোস্টনাম {{inventory_hostname}}এবং গ্রুপটি ব্যবহার করে পেতে পারেন{{group_names}}

আমি ভালো জিনিস চেষ্টা করেছি {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }} এবংip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"

উত্তর:


128

সমস্ত ঠিকানার তালিকা একটি সত্যে 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

তারপরে প্রতিটি নেটওয়ার্ক ইন্টারফেসের জন্য নির্দিষ্ট করা ঠিকানাগুলি রয়েছে ... এই ক্ষেত্রে আপনি সমস্ত তথ্য প্রদর্শন করতে পারেন এবং আপনি যে মানটি ব্যবহার করতে চান তার একটি খুঁজে পেতে পারেন।


আপনি কীভাবে সমস্ত পতাকা প্রদর্শন করবেন?
এসজেসি

4
আপনি কি কোনও কাজের মধ্যে থেকে সমস্ত পতাকা তালিকাবদ্ধ করতে পারেন?
এসজেসি

4
@ এসজেসি পতাকা? আপনি সত্য বলতে চান, তাই না? হ্যাঁ, setup:সাথে মডিউল চালান register: allfactsএবং এর সাথে প্রদর্শন করুন- debug: var=allfacts
টেক্রাফ

4
এর মান কাজ gather_factsকরতে হবে must trueএটি ডিফল্টরূপে সত্য তবে হোস্টগুলির সম্পর্কে তথ্য না প্রয়োজনে কেউ এটিকে ভুলতে পরিণত করতে পারে।
shshnk

4
@ পয়েজ আপনি যেমন নতুন প্রশ্ন জিজ্ঞাসা করেন এটি ভুল হতে পারে।
টেক্রাফ

72

আপনি আইপি ঠিকানা hostvars, ডিক ansible_default_ipv4এবং কী থেকে পেতে পারেনaddress

hostvars[inventory_hostname]['ansible_default_ipv4']['address']

এবং আইপিভি 6 ঠিকানা যথাক্রমে

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']

4
: কিছু ক্ষেত্রে এটি ব্যর্থ হতে পারে, এই দেখুন medium.com/opsops/...
RafalS

26

আপনি আপনার টেম্পলেট.জে 2 {{ ansible_eth0.ipv4.address }}তে একইভাবে ব্যবহার করতে পারেন {{inventory_hostname}}

PS: অনুগ্রহযোগ্য জড়িত ফ্যাক্টসের সাথে রিমোট হোস্ট সম্পর্কে তথ্য কীভাবে সংগ্রহ করতে হবে সে সম্পর্কে আরও তথ্য জানতে দয়া করে নীচের ব্লগপোস্টটি দেখুন ।

'আশা করছি এটি একদিন কাউকে সহায়তা করবে ッ


13
অতিরিক্ত সতর্কতা অবলম্বন করুন। আজকাল ডিফল্ট নেটওয়ার্ক ইন্টারফেস সর্বদা 'eth0' হয় না। এটি কখনও কখনও বলা হয় ens3বা এই enp2s0জাতীয় জিনিস। আপনি যদি ব্যবহার করেন ansible_default_ipv4এবং যদি এটি কাজ না করে তবে আপনার আরও ভাল বেট রয়েছে তবে কিছু বুদ্ধিমান ডিফল্ট সন্ধানে ফিরে যান।
গ্যাবর গারামি

4
এটি সম্ভবত অতীতে কাজ করত তবে উত্তরযোগ্য ২.7 সহ এই পরিবর্তনশীলটি সংজ্ঞায়িত।
শির্ক

5

আপনি যদি বাহ্যিক পাবলিক আইপি চান এবং আপনি AWS বা Azure এর মতো মেঘের পরিবেশে থাকেন তবে আপনি ipif_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:

এটি ভেরিয়েবলের মধ্যে পাবলিক আইপি রাখবে ipify_public_ip


এটি সবসময় কাজ করে না। আমার জন্য ipify_public_ipপরিবর্তনশীল খালি
ডেভিড

4
এডাব্লুএস এর জন্য, ইনভেন্টরি_স্টাস্টমটি আইপি ঠিকানা হবে।
বেরেন্ড ডি বোয়ার

এই প্লাগইনটি পরিস্থিতিতে একটি নির্দিষ্ট সেটের মধ্যে কাজ করতে পারে, যদি আপনি কোনও NAT এর পিছনে থেকে ইন্টারনেট অ্যাক্সেস করেন তবে এটি কাজ করবে না। মূলত এটি কাজ করে যখন সার্ভারগুলি ইন্টারনেটে অ্যাক্সেসযোগ্য হয় এবং সাইট অ্যাক্সেস করার সময় তাদের বাহ্যিক আইপি সমাধান করার জন্য ipify.org ওয়েবসাইটে আঘাত করতে পারে।
slm

4
পুনঃটুইট inventory_hostnameইনভেন্টরিতে যা কিছু সেট করা আছে তা। এটি সেট হিসাবে একটি হোস্ট নাম হতে পারে .ssh/config
তেরেসা ই জুনিয়র

@ এসএলএম আমি যেমন বলেছি, আপনি যদি বাহ্যিক পাবলিক আইপি সন্ধান করেন। যদি আপনি কোনও NAT এর পিছনে থাকেন তবে আপনার কাছে কোনও বাহ্যিক প্রকাশ্যে অ্যাক্সেসযোগ্য আইপি থাকবে না যাতে আপনি এই পদ্ধতিটি ব্যবহার করবেন না।
সাইমন উডসাইড

4

সর্বজনীন আইপি সন্ধানের অন্য উপায় uriহ'ল মডিউলটি ব্যবহার করা :

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

আপনার আইপি হবে ip_response.content


একই রকম ফেরত পাওয়া আর একটি সার্ভিস ইউআরএল:https://ipecho.net/plain
পল পার্কার

@ পোলপার্কার আইপোকো ডটকম / প্লেনটি মনে হয় কেও বা এপি টোকেনকে জিজ্ঞাসা করুন ... ifconfig.me বছরের পর থেকে আরও ভাল এবং স্থিতিশীল পরিষেবা: +1
বাস্তেন

কখনও এপিআই টোকেনের জন্য জিজ্ঞাসা করা হয়নি। আমি পরিষেবাটির ধারাবাহিকতার সাথে কথা বলতে পারি না, আমি এটি পর্যবেক্ষণ করি নি, তবে এটি কখনও আমাকে ব্যর্থ করেনি।
পল পার্কার

3

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

টেমপ্লেটে যেমন উদাহরণস্বরূপ:

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

মন্তব্য:

  • যেহেতু কেবল ডিএনএস নামই ইনভেন্টরিতে ব্যবহার করা যায়নি এটি যদি আরও ভাল আইপি না হয় তবে এটি চেক করা যায়
  • স্পষ্টতই যথেষ্ট পরিমাণে এই প্রাপ্তি পরোক্ষ হোস্টের স্পেসিফিকেশনের উদ্দেশ্যে যেমন কাজ করবে না (যেমন জাম্প হোস্ট ব্যবহার করা, উদাহরণস্বরূপ)

তবে এখনও এটি ব্যবহারের ক্ষেত্রে 99% (রূপকভাবে বলা) কাজ করে।


4
এবং যদি ডিএনএস পরিবেশে ব্যবহার না করা হয়?
টেক্রাফ

(অথবা, আমি আপনার ব্যথা অনুভব করি Otherwise নইলে আপনি এর মতো নিষ্পাপ প্রশ্ন জিজ্ঞাসা করবেন না)) - ডিএনএস যদি ইনভেন্টরিতে ব্যবহার না করা হয় তবে কেবলমাত্র আমার উত্তরে উল্লিখিতভাবে উত্তরযোগ্য_হোস্ট ব্যবহার করুন।
কবিজে

4
ansible_hostপ্রশ্নে হোস্টের আইপি ঠিকানা না হলে কী হবে ?
টেক্রাফ

এটি "এবং কি" নয়। এটি কেবল "কি" কারণ যা আপনার পূর্বে জিজ্ঞাসিত প্রশ্ন গণনা করা হয় না, ভুলবেন না।
পিজি

4
আপনি "আসল আইপি ঠিকানা" হিসাবে যা ডাকছেন তাতে আমার কোনও ধারণা নেই। আপনি কিছু অবাস্তব জানেন?
পিজি

3

সাধারণ ডিবাগ আদেশ:

ansible -i inventory/hosts.yaml -m debug -a "var=hostvars[inventory_hostname]" all

আউটপুট:

"hostvars[inventory_hostname]": {
    "ansible_check_mode": false, 
    "ansible_diff_mode": false, 
    "ansible_facts": {}, 
    "ansible_forks": 5, 
    "ansible_host": "192.168.10.125", 
    "ansible_inventory_sources": [
        "/root/workspace/ansible-minicros/inventory/hosts.yaml"
    ], 
    "ansible_playbook_python": "/usr/bin/python2", 
    "ansible_port": 65532, 
    "ansible_verbosity": 0, 
    "ansible_version": {
        "full": "2.8.5", 
        "major": 2, 
        "minor": 8, 
        "revision": 5, 
        "string": "2.8.5"
    }, 

হোস্ট আইপি ঠিকানা পান:

ansible -i inventory/hosts.yaml -m debug -a "var=hostvars[inventory_hostname].ansible_host" all

zk01 | SUCCESS => {
    "hostvars[inventory_hostname].ansible_host": "192.168.10.125"
}

3

শুধু ansible_ssh_hostপরিবর্তনশীল ব্যবহার করুন

playbook_example.yml

- hosts: host1
  tasks:
  - name: Show host's ip
    debug:
      msg: "{{ ansible_ssh_host }}"

ਮੇਜ਼ਬਾਨ.আইএমএল

[hosts]
host1   ansible_host=1.2.3.4

ফলাফল

TASK [Show host's ip] *********************************************************************************************************************************************************************************************
ok: [host1] => {
     "msg": "1.2.3.4"
}


0

নিম্নলিখিত স্নিপেট রিমোট মেশিনের পাবলিক আইপি এবং ডিফল্ট আইপিও (যেমন: ল্যান) ফিরিয়ে দেবে

কনফিগার ফাইল ব্যবহারে বিভ্রান্তি এড়াতে এটি আইপিসের উদ্ধৃতিগুলিতে মুদ্রণ করবে।

>> 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'] }}"


4
আপনার দ্বারা কিছু মন্তব্য এই উত্তর উন্নতি হবে
Marged
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.