引入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文档

目录

    1. 安装

 

    1. 进行检查

 

    1. 更改规则

 

    参考文献

安装

通过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のチェック方法
广告
将在 10 秒后关闭
bannerAds