私は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