在 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

相关内容