我正在尝试在 Ansible 中构建 JSON 对象的数组/列表。我的剧本是通过指定来调用的--extra-vars "userids=123456,654321"
。
然后我尝试使用以下内容构建列表。“待定”只是一个占位符。我将在后面的剧本中使用从 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
列表排序的构建,但它跳过了列表中的第一项。这是结果输出:
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”而不是循环,没有运气
不要使用嵌套的花括号
"{{ ... {{ item }} ... }}"
。正确的语法是接下来,提交一个列表更方便
userids
。那么split
过滤器就没有必要了。例如剧本给
userids
如果属性UserID
应存储为integer
type 而不是. 从列表中的项目中删除单引号string
。例如给出(的值周围没有引号
UserID
)然后使用字典创建用户列表。例如,
给