请原谅可能的重复,但是我也问了这个问题here,但是为了增加可见性而问了这个问题。
我正在尝试用Ansible构建一个JSON对象的数组/列表。我的剧本是通过指定--extra-vars "userids=123456,654321"
来调用的。
然后,我尝试使用以下内容构建列表。("TBD“只是一个占位符。我将在后面的实战手册中使用从SQL查询中检索到的数据填充这些值)
- name: Initiate User List
set_fact:
all_users: []
- name: Add new JSON Objects to List
set_fact:
all_users: "{{ all_users+ [{ 'UserID': '{{ item }}', 'UserType': 'TBD', 'UserName': 'TBD' }] }}"
loop: "{{ userids.split(',') }}"
- name: Debug
debug:
var: all_users
列表有点构建,但它跳过了列表中的第一个项目,而是具有"{{ item }}“。这是结果输出:
TASK [Initiate User List] *************************************************************************************************************************************************************
ok: [localhost]
TASK [Add new JSON Objects to List] ******************************************************************************************************************************************************
ok: [localhost] => (item=123456)
ok: [localhost] => (item=654321)
TASK [Debug] *****************************************************************************************************************************************************************************
ok: [localhost] => {
"all_users": [
{
"UserID": "654321",
"UserType": "TBD",
"UserName": "TBD"
},
{
"UserID": "{{ item }}",
"UserType": "TBD",
"UserName": "TBD"
}
]
}
我不确定我错过了什么。我尝试在循环任务之前执行"set_fact“,以便首先执行split(),但是没有帮助。我也尝试了"with_items“而不是循环,没有成功。
发布于 2020-05-16 00:25:51
感谢mdaniel的反馈,我结束了学习,我需要删除额外的{{ }}以及项目周围的单引号。我在排除故障时移除了它们中的任何一个,但不是同时移除两个
- name: Initiate User List
set_fact:
all_users: []
- name: Add new JSON Objects to List
set_fact:
all_users: "{{ all_users+
[
{ 'UserID': item,
'UserType': 'TBD',
'UserName': 'TBD'
}
]
}}"
loop: "{{ userids.split(',') }}"
发布于 2020-05-14 13:10:47
这种情况经常出现,这是一个常见问题;不要将嵌套的jinja2模板放在jijna2模板中--它们是python变量,因此您可以这样使用它们。在loop:
或with_items:
中使用set_fact:
几乎不是您想要做的事情
- set_fact:
all_users: >-
{%- set results = [] -%}
{%- for u in userids.split(',') -%}
{%- set _ = results.append({
'UserID': u,
'UserType': u_type,
'UserName': u_name,
}) -%}
{%- endfor -%}
{{ results }}
vars:
u_type: TBD
u_name: TBD
https://stackoverflow.com/questions/61779602
复制相似问题