ten*_*npn 7 template-engine jinja2 ansible
我有一个看起来像这样的ansible dict:
servers:
- name: foo
port: 1000
- name: bar
port: 2000
Run Code Online (Sandbox Code Playgroud)
我想要一个ansible/jinja2模板来输出这个:
result=pre-foo-1000,pre-bar-1000
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有类似的东西:
result={{ servers | json_query('[*].name') | join(',') }}
Run Code Online (Sandbox Code Playgroud)
但那只输出:
result=foo,bar
Run Code Online (Sandbox Code Playgroud)
我尝试了一些json_query('[*].name-[*].port')没有成功的事情- 它给出了关于无效-文字的错误.我在json_query上找不到很多文档,但是我能在那里做更多的事情吗?或者更好的选择滑入过滤器?
你可以先做一个普通循环,然后收集结果:
- hosts: all
connection: local
vars:
servers:
- name: foo
port: 1000
- name: bar
port: 2000
tasks:
- set_fact:
result_item: '{{ item.name }}-{{ item.port }}'
with_items:
- '{{ servers }}'
register: result_list
- set_fact:
result: '{{ result_list.results | map(attribute="ansible_facts.result_item") | join(",") }}'
- debug:
var: result
Run Code Online (Sandbox Code Playgroud)
或者尝试一些内联jinja循环:
- hosts: all
connection: local
vars:
servers:
- name: foo
port: 1000
- name: bar
port: 2000
tasks:
- set_fact:
result: "{% for item in servers %}{{item.name}}-{{item.port}}{{ '' if loop.last else ',' }}{% endfor %}"
- debug:
var: result
Run Code Online (Sandbox Code Playgroud)
这也应该在模板文件中起作用:
result={% for item in servers %}{{item.name}}-{{item.port}}{{ '' if loop.last else ',' }}{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5336 次 |
| 最近记录: |