我正在尝试将证书分发到其相应的主机(我将仅给出私钥任务的示例):
- name: create certificate private key
community.crypto.openssl_privatekey:
path: "/root/client/{{ item }}.key"
type: Ed25519
backup: yes
return_content: yes
register: privatekey
loop: "{{ ansible_play_hosts_all }}"
when: "'prometheus1' in inventory_hostname"
我可以像这样为其他主机调用变量:
{{ hostvars['prometheus1']['privatekey']['results'][0]['privatekey'] }}
索引指向某个键,因此 0 将是第一个主机 ( prometheus1
),1 将是第二个主机,依此类推。
我想模板化是要走的路,但我根本不知道如何编写模板。我认为ansible_play_hosts_all
是解决方案的关键,因为它的索引对应于私钥的索引,例如:
ansible_play_hosts_all[2]
-->hostvars['prometheus1']['privatekey']['results'][2]['privatekey']
但逻辑是:
for i in index of ansible_play_hosts_all
add the hostvars['prometheus1']['privatekey']['results'][i]['privatekey']
if ansible_play_hosts_all[i] in inventory_hostname
我想有这样的效果:) 非常感谢任何帮助。
更新
也许更准确一些:
{% for i in ansible_play_hosts_all|length) %}
{{ hostvars['prometheus1']['privatekey']['results'][i]['privatekey'] }}
{% endfor %}
并在其中添加条件:
{% if ansible_play_hosts_all[i] in inventory_hostname %}