Ansible 매니페스트에 변수 등록

Ansible 매니페스트에 변수 등록

저는 Ansible을 처음 사용하지만 환경(100개 서버 제공 또는 수신)별로 인벤토리를 적절하게 정렬하려고 노력해 왔습니다. 예를 들면 다음과 같습니다.

[dev]
server1
server2

[qa]
server3
server4

[prod]
server5
server6

이러한 서버의 이름에는 자신이 속한 환경(dev/qa/prod)을 식별할 수 있는 내용이 없습니다. 대신 각 서버에 연결하고 각 서버에 있는 /foo/var/file 파일을 검색합니다.

지금까지 나는 이것을 만들었습니다.

---
- hosts: ALL
  gather_facts: no
  tasks:
     - name: return environment to registered var
       shell: 'cat /foo/var/file'
       register: environment
     
     - template:
          src: template.csv.j2
          dest: list.csv
       delegate_to: localhost
       with_items: {{ environment }}

템플릿은 다음과 같습니다.

{% for x in environment %}
['x']
{{ host }}
{% endfor %}

그래서 저는 이러한 값을 사용하여 일종의 인벤토리를 생성할 수 있도록 이러한 값을 검색하고 싶습니다.

이 인벤토리를 만드는 가장 좋은 방법은 무엇입니까?

답변1

사용ansible_play_hosts그리고호스트 변수등록된 값을 반복합니다. 예를 들어 다음 체크리스트, 플레이북, 템플릿은 다음과 같습니다.

shell> cat hosts
test_01
test_02
test_03
shell> cat pb.yml
- hosts: all
  tasks:
    - command: uptime
      register: environment
    - template:
        src: template.csv.j2
        dest: list.csv
      delegate_to: localhost
shell> cat template.csv.j2
{% for host in ansible_play_hosts %}
{{ host }}, {{ hostvars[host]['environment']['stdout'] }}
{% endfor %}

주다

shell> cat list.csv
test_01, 12:02AM  up 62 days,  3:21, 2 users, load averages: 0.51, 0.65, 0.40
test_02, 12:02AM  up 62 days,  3:21, 1 user, load averages: 0.51, 0.65, 0.40
test_03, 10:02PM  up 62 days,  3:21, 1 user, load averages: 0.55, 0.65, 0.41

관련 정보