语法检查¶
我们的 lint 工具在所有 playbook 上运行 ansible-playbook --syntax-check,如果其中任何一个报告语法错误,这将停止对这些文件的进一步处理。
此错误**无法禁用**,因为它其他步骤的先决条件。您可以将这些文件从 linting 中排除,但最好确保它们可以被 Ansible 加载。这通常通过编辑 inventory 文件和/或 ansible.cfg 来实现,以便 ansible 可以加载所需的变量。
如果未定义的变量导致失败,您可以使用 Jinja default() 过滤器来提供回退值,如下例所示。
此规则是少数几个无法添加到 skip_list 或 warn_list 的 unskippable 规则之一。一种可能的解决方法是将整个文件添加到 exclude_paths。这对于特殊情况是有效的方法,例如故意无效的测试装置。
最常见的错误来源之一是未能在 playbook 开头断言各种变量的存在。
此规则可以产生如下消息
syntax-check[empty-playbook]: 空的 playbook,无事可做syntax-check[malformed]: 加载块时遇到格式错误的块syntax-check[missing-file]: 无法检索文件内容...找不到或无法访问...syntax-check[unknown-module]: 无法解析模块/操作syntax-check[specific]: 对于上面未提及的其他错误。
syntax-check[unknown-module]¶
linter 依赖于 ansible-core 代码来加载 ansible 代码,如果代码引用了未安装的 ansible 内容,则会产生语法错误。您必须确保存储库内使用的所有集合和角色都列在 requirements.yml 文件中,以便 linter 可以在它们丢失时安装它们。
requirements.yml 的有效位置是
requirements.ymlroles/requirements.ymlcollections/requirements.ymltests/requirements.ymltests/integration/requirements.ymltests/unit/requirements.yml
注意:如果需求与测试相关,则它们应位于 tests/ 中。
有问题的代码¶
---
- name:
Bad use of variable inside hosts block (wrong assumption of it being
defined)
hosts: "{{ my_hosts }}"
tasks: []