3

1 つのグループでのみ実行されるプレイブックから、インベントリ ファイル内のすべてのホストの IP のリストを取得しようとしています。

次のインベントリ ファイルがあるとします。

[dbservers]
db1.example.com
db2.example.com

[webservers]
www1.example.com
www2.example.com

そしてプレイブック:

---

- hosts: dbservers
  roles:
  - dosomething

そして何かをする役割:

- name: print all host ips
  template: src=hosts.j2 dest=/tmp/hosts.txt

そして、hosts.j2 テンプレート:

{% for host in hostvars %}

{{ hostvars[host].ansible_eth0.ipv4.address }}

{% endfor %}

問題:

これを実行すると、すべての ip ではなく、dbserver ip のみがリストされます

質問:

この Playbook 内からインベントリ全体にアクセスするにはどうすればよいですか? プレイブックでホストをすべてに変更すると機能しますが、dosomething プレイブックもすべてのホストで実行されます。これは私が望んでいるものではありません。dbservers のリストのみが必要です。

4

2 に答える 2

2

hostvars 内のすべてのホストにアクセスするには、まずすべてのホストのタスクを作成する必要があります。すべてのホストで何かを単純にエコーする単純な役割を作成しました。次に、このロールは、すべてのホストで事実を強制的に収集し、それぞれを hostvars グループに追加します。

その後、タグ制限を指定して Playbook を実行すると、hostvars グループが再び影響を受けることに注意してください。

ここでヒントを得ました: https://groups.google.com/forum/#!msg/Ansible-project/f90Y4T4SJfQ/L1YomumcPEQJ

于 2014-08-25T07:55:43.810 に答える