微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用ansible_hostnames的Ansible循环

如何解决使用ansible_hostnames的Ansible循环

我正在尝试为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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。