变量渲染部分
- 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,无论变量定义在哪里都可以正常处理。