gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:33:51 27 4
gpt4 key购买 nike

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

我有这些任务:

在第一个任务(识别集群中的 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. .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] }}"

关于json - 如何使用 set_fact 打印数组变量以在 ansible add_host 模块中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59345993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com