繁体   English   中英

如何使用 set_fact 打印数组变量以在 ansible add_host 模块中使用

[英]How to print array variable with set_fact to use in ansible add_host module

我正在尝试使用 add_hosts 模块动态构建“elasticsearch”集群的清单。

我有这些任务:

在第一个任务(识别集群中的ES节点)中,我查询elasticsearch API以获取节点的名称并将其保存在“es_nodes”数组中

    - name: Identify ES nodes in cluster
      uri:
        url: http://localhost:9200/_nodes/_all/ip
        method: GET
        return_content: yes
        body_format: json
        failed_when: false
      register: es_nodes

在第二个(提取节点名称)中,我提取节点的名称并将它们保存在“nodo”数组中

    - name: Extract Node Names
      set_fact:
        nodo: "{{ es_nodes.json.nodes | map('regex_search', '([^\\s]+)') | select('string') | list }}"

在第三个(为 IP 节点创建新变量)中,(我尝试过,但我不能)使用带有节点名称的循环获取 IP。 我设法打印了变量“es_nodes.json.nodes.<nodo>.ip”的名称,但我无法打印内容,即IP!

    - name: Create new var for Node IP
      set_fact:
        nodo_ip: es_nodes.json.nodes.{{ item }}.ip
      with_items: "{{ nodo }}"

在详细输出显示:

ok: [<ansible_ip>] => (item=GxcbPcQ0Qe6vSFOde0zFwg) => {"ansible_facts": {"nodo_ip": "es_nodes.json.nodes.GxcbPcQ0Qe6vSFOde0zFwg.ip"}, "changed": false, "item": "GxcbPcQ0Qe6vSFOde0zFwg"}
ok: [<ansible_ip>] => (item=V2bdDTnwTCexY67U36YE8g) => {"ansible_facts": {"nodo_ip": "es_nodes.json.nodes.V2bdDTnwTCexY67U36YE8g.ip"}, "changed": false, "item": "V2bdDTnwTCexY67U36YE8g"}

我的最终目的是获取一个包含 elasticsearch 集群“node_ip”IP 的数组,以使用“add_hosts”将它们动态添加到清单中,并能够在主机组上工作:“elasticsearch-security”

我想它会是这样的:

    - name: Add host to group elasticsearch-security
      add_host:
        name: "{{ item }}"
        groups: elasticsearch-security
      with_items: "{{ nodo_ip }}"

如果您知道打印 IP 的正确语法,而不是第三个任务中的节点名称,或者以“不同”的方式执行相同操作以动态创建库存,我将不胜感激。

如果我很好理解,您需要从另一个 var 的内容(从 with_items 获得)构建一个变量,然后检索该变量的内容。

一种可能性是创建一个单独的剧本,该剧本将从主脚本中包含并在包含任务中使用 with_items。 这是一个简单的示例,您可以根据自己的情况进行调整:

主要剧本:

- hosts: localhost
  vars:
    es_nodes_x: "val x"
    es_nodes_y: "val y"
  tasks:
    # Create new var for Node IP
    - include: sub.yml param={{item}}
      with_items:
        - "x"
        - "y"

包含的剧本(sub.yml):

- set_fact:
    v: "{{param}}"
- debug:
    msg: "{{ vars['es_nodes_' + v] }}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM