语法检查¶
我们的 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.yml
roles/requirements.yml
collections/requirements.yml
tests/requirements.yml
tests/integration/requirements.yml
tests/unit/requirements.yml
注意:如果需求与测试相关,则它们应位于 tests/
中。
有问题的代码¶
---
- name:
Bad use of variable inside hosts block (wrong assumption of it being
defined)
hosts: "{{ my_hosts }}"
tasks: []