Ansible项何时抛出错误:无法在模板字符串中查找名称或访问属性

Dan*_*nny 6 ansible ansible-playbook

在以下任务中,我收到的错误消息Unable to look up a name or access an attribute in template string. Make sure your variable name does not contain invalid characters like '-'.我已将其追溯到该when子句.

使用调试语句我已经验证:

  • mysql_server_version='5.2.23'
  • mysql_client_version='5.2.23'
  • mysql_version='5.2.23'

如果我删除该when语句,则任务运行.

 - name: download MySQL packages
   tags:
     - preosupdates
   when: "{{ mysql_server_version | version_compare(mysql_version, '<') or mysql_client_version | version_compare(mysql_version, '<') }}"
   command: yum update -y --downloadonly MySQL-server-advanced-{{ mysql_version }} MySQL-shared-compat-advanced-{{ mysql_version }} MySQL-client-advanced-{{ mysql_version }}
   register: downloadonly
   failed_when: downloadonly.rc not in (1, 0)
   changed_when: "downloadonly is defined and 'No Packages marked for Update' not in downloadonly.stdout"
Run Code Online (Sandbox Code Playgroud)

版本

  • ansible-1.9.0.1

bep*_*ter 1

根据文档when条件不需要使用模板标记{{}}因为这些已经隐含了。

试试这个:

when: mysql_server_version | version_compare(mysql_version, '<') or 
      mysql_client_version | version_compare(mysql_version, '<')
Run Code Online (Sandbox Code Playgroud)