我按照thread跟随将变量附加到Ansible的列表中;我使用逻辑my_group: {{my_group + [item.hostname]}}
- name: "Initialize variables"
set_fact:
my_group: []
- set_fact:
my_group:
"{% if item.hostGroup == "webgroup" %}
{{my_group + [item.hostname]}}
{% endif %}"
with_items: "{{serverList}}"
我的serverList
有效负载看起来像
{
"hostGroup": "dbgroup",
"hostname": "db_server_usa_01"
},
{
"hostGroup": "webgroup",
"hostname": "web_server_usa_01"
}
得到如下错误
"Unexpected templating type error occurred on
({% if item.hostGroup == 'webgroup' %} {{my_group + [item.hostname]}}
{% endif %}): coercing to Unicode: need string or buffer, list found"}
如果没有if
循环,它会完美运行。知道如何使用if
循环来完成这项工作吗?
答案 0 :(得分:2)
这看起来不会更好吗?
- name: "Initialize variables"
set_fact:
my_group: "{{ serverList | selectattr('hostGroup','equalto','webgroup') | map(attribute='hostname') | list }}"