问题描述
我正在尝试为NiFi部署更新配置文件,初始部署配置需要包括节点以允许在它们之间建立HTTPS连接。
我有一个艰巨的任务,需要对配置文件进行必要的结构更改,但似乎无法插入正确的细节。
- name: Add each host to the authorizers.xml
lineinfile:
path: /opt/nifi/conf/authorizers.xml
line: "<property name=\"Node Identity {{ item }}\">CN={{ item }},OU=NiFi</property>"
insertafter: <!--accesspolicyProvider Node Identities-->
loop: "{{ query('inventory_hostnames','nifi') }}"
这将放置主机的IP地址,而我需要获取每个节点的ansible_hostname。 我玩过ansible_play_batch并循环:“ {{groups ['nifi']}}”,但我得到了结果,每次输出ip地址而不是简短的主机名。
简短的主机名没有存储在我的ansans配置中的任何地方,它们(如果我理解正确)是在运行时通过收集事实过程确定的。我真的很想不必将节点名称放入列表变量中。
解决方法
Q:“获取每个节点的ansible_hostname”
A:给定库存
shell> cat hosts
[nifi]
10.1.0.51
10.1.0.52
下面的剧本
- hosts: nifi
tasks:
- debug:
var: ansible_hostname
给予(删节)
ok: [10.1.0.51] =>
ansible_hostname: test_01
ok: [10.1.0.52] =>
ansible_hostname: test_02
可以迭代组中的主机并从hostvars获取 ansible_hostname 。例如, delegate_to 本地主机和 run_once
- debug:
msg: "{{ hostvars[item].ansible_hostname }}"
loop: "{{ groups.nifi }}"
delegate_to: localhost
run_once: true
给予
ok: [10.1.0.51 -> localhost] => (item=10.1.0.51) =>
msg: test_01
ok: [10.1.0.51 -> localhost] => (item=10.1.0.52) =>
msg: test_02