为何molecule lint与ansible-lint规则不同?及相关配置疑问
Molecule与Ansible-Lint规则差异及配置方案
规则差异原因
- 工作目录不一致:直接运行
ansible-lint *是在你的项目根目录执行,明确指定了检查文件;而Molecule执行ansible-lint .时,实际工作目录是场景的临时目录(如.molecule/default/),ansible-lint无法正确识别项目根,导致规则加载异常——比如默认行长度从160回退到旧版的80,部分规则因目录结构差异未触发。 - 配置识别问题:ansible-lint会优先读取项目根的
.ansible-lint配置(即使你没自定义,默认规则也依赖项目根的识别),临时目录中缺少这个上下文,导致规则应用不一致。
Molecule Lint的执行位置
你的推测正确,Molecule lint是在容器外(宿主机)执行,只有provision、verify等部署验证步骤会在容器内运行。
配置Molecule使用Ansible-Lint默认规则的方法
方法1:指定项目根目录
修改molecule/default/molecule.yml的lint配置,用Molecule自动设置的$MOLECULE_PROJECT_DIRECTORY环境变量指向项目根:
lint: | set -e yamllint "$MOLECULE_PROJECT_DIRECTORY" ansible-lint "$MOLECULE_PROJECT_DIRECTORY"
方法2:添加显式的默认规则配置文件
在项目根创建.ansible-lint文件,明确声明使用默认规则,确保ansible-lint无论在哪个目录都能识别项目根:
# 项目根目录的.ansible-lint文件内容 extends: default
方法3:指定lint工作目录
修改Molecule配置,让lint命令在项目根目录执行:
lint: command: | set -e yamllint . ansible-lint . working_dir: "{{ molecule_project_directory }}"
相关文档说明
Molecule官方文档中提到working_dir参数和内置环境变量的用法,ansible-lint文档也明确规则加载依赖项目根目录的配置上下文,工作目录不符会导致规则应用异常。
内容的提问来源于stack exchange,提问作者grafra
相关产品推荐
相关产品推荐

