2017-09-26 9 views
1

간단한 클러스터 재고입니다 클러스터에 노드의 IP를 수집합니다. 이 정보는 setup 모듈로 수집 할 수 있으며 ansible_facts.ansible_{{ interface }}.ipv4.address입니다.Ansible 여기

각 호스트에서 interface의 IPv4 주소를 얻고 각 호스트가 cluster에 각 호스트에서 사용할 수 있도록하여 각 호스트가 모든 클러스터 IP를 인식하도록하려면 어떻게해야합니까?

역할에서 어떻게 구현 될 수 있습니까?

+0

이 정보는 [hostvars] (HTTPS를 사용하여 이미 * 클러스터의 각 호스트에 * 볼 수 있습니다 .com/ansible/latest/playbooks_variables.html # magic-variables-and-how-to-access-other-hosts에 대한 정보). – larsks

답변

0

마찬가지로 @larsks는 이미 주석을 달았으므로 정보는 hostvars에서 사용할 수 있습니다. 당신은, 예를 들어, 모든 클러스터 IP를 인쇄 할 경우에 당신은 groups['cluster'] 반복 것 : 먼저 사실을 수집해야합니다

- name: Print IP addresses 
    debug: 
    var: hostvars[item]['ansible_eth0']['ipv4']['address'] 
    with_items: "{{ groups['cluster'] }}" 

참고 클러스터 호스트에 대한 hostvars을 채울 수 있습니다. 당신이 작업을 (또는 작업이 역할에서)를 호출 플레이에 다음을 갖추고 있는지 확인 :

- name: A play 
    hosts: cluster 
    gather_facts: yes 
0

을 Jinja2로 목록 변수를 만드는 방법에 잠시 동안 검색 한 후. 여기에 연결을 확인하기 위해 클러스터에 cluster_interface 변수와 핑의 모든 노드를 필요로 완벽한 솔루션은 다음과 같습니다 //docs.ansible :

--- 
- name: gather facts about {{ cluster_interface }} 
    setup: 
    filter: "ansible_{{ cluster_interface }}" 
    delegate_to: "{{ item }}" 
    delegate_facts: True 
    with_items: "{{ ansible_play_hosts }}" 
    when: hostvars[item]['ansible_' + cluster_interface] is not defined 

- name: cluster nodes IP addresses 
    set_fact: 
    cluster_nodes_ips: "{{ cluster_nodes_ips|default([]) + [hostvars[item]['ansible_' + cluster_interface]['ipv4']['address']] }}" 
    with_items: "{{ ansible_play_hosts }}" 

- name: current cluster node IP address 
    set_fact: 
    cluster_current_node_ip: "{{ hostvars[inventory_hostname]['ansible_' + cluster_interface]['ipv4']['address'] }}" 

- name: ping all cluster nodes 
    command: ping -c 1 {{ item }} 
    with_items: "{{ cluster_nodes_ips }}" 
    changed_when: false