ansible 使用记录

变量渲染部分

  1. handler 的name中含变量,导致渲染时找不到这个handler
# 错误的做法
- name: restart redis_{{ redis.port }}

# 正确的做法
- name: restart redis
   supervisorctl:
     name: redis_{{ redis.port }}
     state: restarted
  1. "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 %}
  1. 现象:
    在主机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,无论变量定义在哪里都可以正常处理。

原文地址:https://www.cnblogs.com/hiyang/p/12631521.html