首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ansible hostvars中使用jinja2循环索引?

如何在ansible hostvars中使用jinja2循环索引?
EN

Stack Overflow用户
提问于 2020-08-31 17:01:07
回答 1查看 185关注 0票数 0

我正在尝试使用主机变量中的jinja2循环索引从清单中获取ip地址(从ansible):

库存如下所示:

代码语言:javascript
复制
all:
  hosts:
    host1:
      ansible_host: 192.168.1.1
    host2:
      ansible_host: 192.168.1.2
    host3:
      ansible_host: 192.168.1.3
    service_nodes:
      hosts:
        host1:
        host2:
        host3:

Template.yml类似于:

代码语言:javascript
复制
...
{% for host in service_nodes %}
  - {{ loop.index }}:{{ hostvars[groups.service_nodes[{{ loop.index }}]].ansible_host }}
...
{% endfor %}
...

我运行了攻略,但遇到了:{"changed": false, "msg": "AnsibleError: template error while templating string: expected token ':', got '}'.查看了AnsibleError: template error while templating string: expected token 'end of statement block', got '{',但似乎这不是我的答案。

另外,我在模板上尝试了这些,但失败了:

代码语言:javascript
复制
{% set idx = loop.index %}
  - {{ loop.index }}:{{ hostvars[groups.service_nodes[{{ idx }}]].ansible_host }}

代码语言:javascript
复制
  - {{ loop.index }}:{{ hostvars[groups.service_nodes["{{ loop.index }}"]].ansible_host }}
EN

回答 1

Stack Overflow用户

发布于 2020-08-31 18:07:24

使用指令children声明group of hosts service_nodes

代码语言:javascript
复制
shell> cat hosts
all:
  hosts:
    host1:
      ansible_host: 192.168.1.1
    host2:
      ansible_host: 192.168.1.2
    host3:
      ansible_host: 192.168.1.3
  children:
    service_nodes:
      hosts:
        host1:
        host2:
        host3:

测试它。查看命令的输出

代码语言:javascript
复制
shell> ansible-inventory -i hosts --list

然后是下面的攻略

代码语言:javascript
复制
shell> cat playbook.yml
- hosts: all
  tasks:
    - template:
        src: template.yml
        dest: hosts.txt
      delegate_to: localhost
      run_once: true

和模板

代码语言:javascript
复制
shell> cat template.yml 
{% for host in groups.service_nodes %}
  - {{ loop.index }}:{{ hostvars[host]['ansible_host'] }}
{% endfor %}

代码语言:javascript
复制
shell> cat hosts.txt
  - 1:192.168.1.1
  - 2:192.168.1.2
  - 3:192.168.1.3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63667812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档