我有一个如下所示的var文件,并且两个项目的工作方式不同:第一个被视为JSON对象,并且我可以访问其属性,例如{
"data": [
{
"id": "112",
"name": "john",
"phone": "XXXXXXXXX"
},
{
"id": "213",
"name": "mike",
"phone": "XXXXXXXXX"
},
{
"id": "246",
"name": "jess",
"phone": "XXXXXXXXX"
}
]
}
,但事实并非如此第二个项目似乎是纯字符串。
如何以可以访问其属性的方式定义列表的第二个元素?
script.name
更多详细信息-我在这样的循环中使用列表:
---
file2: script2.j2
scripts_list:
- { name: script1, file: script1.j2 }
- "{ name: script2, file: {{ file2 }} }"
列表中的第一项工作正常,但是第二项在访问其# main.yml
- include_tasks: script.yml
loop: "{{ scripts_list }}"
loop_control:
loop_var: script
# script.yml
- debug:
msg: "loop variable = {{ script }}"
- debug:
msg: "loop variable name = {{ script.name }}"
属性时返回错误。
输出似乎显示出第一项被视为JSON结构,而第二项只是一个纯字符串:
name
答案 0 :(得分:1)
如何以可以访问其属性的方式定义列表的第二个元素?
好吧,IMO是解决此问题的最佳方法,因为您要在yaml文件中定义脚本信息,就是对所有脚本都使用yaml定义,并使用jinja2模板适当地引用元素。
scripts_list:
- name: script1
file: script1.j2
- name: script2
file: "{{ file2 }}"
如果出于某种原因您想要保留jsonish定义,则以下内容应可按预期工作:
scripts_list:
- { name: script1, file: script1.j2 }
- { name: script2, file: "{{ file2 }}" }