引入ansible-lint并进行语法标准化
首先
Ansible自动化平台2.2已经发布,本次更新中引入了ansible-lint作为techPreview(作为ansible-navigator的子命令)。由于ansible的playbook可以像脚本语言一样自由地编写,因此当团队人数较多时,由于微小的语法差异,可能会导致混乱,在以后的管理过程中可能会变得一团糟!
在Ansible中,可用的Linter选项有yamllint和ansible-lint。由于它已在AAP 2.2中引入,我认为ansible-lint的需求会增加,因此我打算尝试使用ansible-lint。
红帽Ansible自动化平台2.2有哪些新的特性?
Ansible Lint文档
yamllint文档
目录
-
- 安装
-
- 进行检查
-
- 更改规则
- 参考文献
安装
通过pip安装很容易。
pip install ansible-lint
在Mac上,你可以通过brew安装(我个人是用这个)。
brew install ansible-lint
安装完成后,请确认版本。
@MacBook-Pro Downloads % ansible-lint --version
WARNING: PATH altered to include /opt/homebrew/Cellar/ansible-lint/6.3.0/libexec/bin
ansible-lint 6.3.0 using ansible 2.13.0
进行检查
為了試用,準備一個適當的playbook。
---
- hosts: all
gather_facts: no
become: true
tasks:
- name: Copy Local
copy:
src={{ playbook_dir }}/tmp/test.txt
dest=/tmp
owner=root
group=root
mode=0700
tags: upload
- name: Apache Install
yum:
name: httpd
state: latest
立即执行ansible-lint。
MacBook-Pro Downloads % ansible-lint sample.yml
有各种各样的反应和消息正在出现
WARNING: PATH altered to include /opt/homebrew/Cellar/ansible-lint/6.3.0/libexec/bin
WARNING Overriding detected file kind 'yaml' with 'playbook' for given positional argument: sample.yml
WARNING Listing 6 violation(s) that are fatal
yaml: truthy value should be one of [false, true] (yaml[truthy])
sample.yml:3
fqcn-builtins: Use FQCN for builtin actions.
sample.yml:6 Task/Handler: Copy Local
yaml: trailing spaces (yaml[trailing-spaces])
sample.yml:13
fqcn-builtins: Use FQCN for builtin actions.
sample.yml:15 Task/Handler: Apache Install
package-latest: Package installs should not use latest.
sample.yml:15 Task/Handler: Apache Install
yaml: trailing spaces (yaml[trailing-spaces])
sample.yml:16
You can skip specific rules or tags by adding them to your configuration file:
# .config/ansible-lint.yml
warn_list: # or 'skip_list' to silence them completely
- fqcn-builtins # Use FQCN for builtin actions.
- package-latest # Package installs should not use latest.
- yaml # Violations reported by yamllint.
Finished with 6 failure(s), 0 warning(s) on 1 files.
目前有这样的批评意见提出。现在来的先行者、就暂时先说
・请用“真/假”进行填写。
・请使用完全限定类名(FQCN)来明确修饰符。
・有不必要的空格存在。
在进行了一些调查和修正的过程中,我将其省略,并提供以下的修正版本。
---
- hosts: all
gather_facts: false
become: true
tasks:
- name: Copy Local
ansible.builtin.copy:
src={{ playbook_dir }}/tmp/test.txt
dest=/tmp
owner=root
group=root
mode=0700
tags: upload
- name: Apache Install
ansible.builtin.yum:
name: httpd
我将再次尝试执行。
MacBook-Pro Downloads % ansible-lint sample.yml
WARNING: PATH altered to include /opt/homebrew/Cellar/ansible-lint/6.3.0/libexec/bin
WARNING Overriding detected file kind 'yaml' with 'playbook' for given positional argument: site_org.yml
尽管警告仍然存在,但描述问题已经解决。
我认为通常将其嵌入CI作为用法很常见,但首先在本地执行也很方便,以避免触发错误。然而,我觉得这种完全限定类名(FQCN)对于检查现有playbook有些不够好。不过,听说从ansible-lint6开始,它是默认的。
自然地解释了ade fqcn-builtins规则。
所以,我暂时想通过改变规则来忽略这个问题。
规则的变更
修改规则只需要创建 .ansible-lint 文件并编写自定义规则。
(也可以添加自己创建的规则)
skip_list:
- 'fqcn-builtins'
---
- hosts: all
gather_facts: false
become: true
tasks:
- name: Copy Local
copy:
src={{ playbook_dir }}/tmp/test.txt
dest=/tmp
owner=root
group=root
mode=0700
tags: upload
- name: Apache Install
yum:
name: httpd
MacBook-Pro Downloads % ansible-lint sample.yml
WARNING: PATH altered to include /opt/homebrew/Cellar/ansible-lint/6.3.0/libexec/bin
WARNING Overriding detected file kind 'yaml' with 'playbook' for given positional argument: site_org.yml
随着时间的推移,FQCN将会进行相应的更新,这样就可以顺利运行了。
由于CI管理员可以仅分发自定义规则,所以非常方便。
我认为这是一种易于调整负担并且容易引入标准化的工具,因为规则可以更改,尽管引入时很简单。
文献参考
-
- ansible-lint導入
- Ansible LintによるPlaybookのチェック方法