变量渲染部分
- handler 的name中含变量,导致渲染时找不到这个handler
# 错误的做法
- name: restart redis_{{ redis.port }}
# 正确的做法
- name: restart redis
supervisorctl:
name: redis_{{ redis.port }}
state: restarted
- "Missing end of comment tag"
渲染bash时,出现错误"msg": "AnsibleError: template error while templating string: Missing end of comment tag.
。
最终发现{#
和jinja中的语法comment tag相同,而且只有一半,导致无法渲染。
if [[ ${#resources[@]} -gt 0 ]]
处理办法:这部分原样保留就不会触发jinja的语法规则。
{% raw %}
if [[ ${#resources[@]} -gt 0 ]]
{% endraw %}
- 现象:
在主机inventory中定义了一个变量enable_fs=false
,但是template中if enable_fs
的判断一直是True。
将enable_fs: false
放在group_vars,template中if的判断一直是False。
最终找到的区别:
变量定义在inventory的主机变量或组变量中,false
会被当成字符串,故if
为真,可以用if enable_fs | bool
来处理,逻辑就正常了;
变量定义在group_vars中,false
会被当False处理,故if
为假。
为了避免这个问题,可以使用
if enable_fs | bool
,无论变量定义在哪里都可以正常处理。