【发布时间】:2020-11-06 10:52:19
【问题描述】:
我正在尝试循环字典并设置一个变量。这是我的模板文件中的内容。
{% for item in db_server() %}
{% if item.name in fqdn.stdout and item.mysql == "mysql-5-5-28" %}
{% set version = "mysql-5.5.28-linux2.6-x86_64" %}
{% elif item.name in fqdn.stdout and item.mysql == "mysql-5-1-51" %}
{% set version = "mysql-5.1.51-linux-x86_64-glibc23" %}
{% endif %}
{% endfor %}
我的 var 文件是
db_server:
- name: "test1"
mysql: "mysql_5_5_28"
- name: "test2"
mysql: "mysql_5_5_28"
- name: "test3"
mysql: "mysql_5_5_28"
我遇到了一个错误
fatal: [st-cms-db2]: FAILED! => {
"changed": false,
"msg": "AttributeError: 'list' object has no attribute '__call__'"
}
我是 ansible 模板的新手。我是通过谷歌搜索写的。请善待...
【问题讨论】:
-
错误似乎来自
db_server()。在迭代列表时,您不需要()。尝试不使用这些括号。 -
没有括号,变量“version”没有设置“msg”:“AnsibleUndefinedVariable: 'version' is undefined
-
预期的结果是什么?模板迭代列表并在每次迭代中重写变量version。这既低效又容易出错。每次要添加新版本时,都必须更改代码。将逻辑放入字典中。请参阅我关于如何前进的答案。
-
我看起来错误是因为您使用
db_server作为方法,请删除()并重试。
标签: ansible jinja2 ansible-template