【规则说明·生产】完全限定类名

这篇文章是 Ansible lint Advent Calendar 2022 的第25篇文章。

这次我们将解释规则 fqcn。

完全合格的类名

当在 Ansible 内容中使用 Action 或模块等时,我们将验证其是否以完全限定集合名称(FQCN)进行描述。

目前由于实验而违反了 fqcn,会有警告输出,但不会导致错误。

fqcn 有三个分类,如下所示。

    • fqcn[action]

 

    • fqcn[action-core]

 

    fqcn[canonical]

执行动作fqcn[action]

验证动作插件是否以FQCN的形式进行了描述。

有问题的代码

[defaults]
    # FQCN で記述されていない
    callbacks_enabled = profile_tasks 

被修正的代码

[defaults]
    # FQCN で記述する
    callbacks_enabled =  ansible.posix.profile_tasks

fqcn[action-core] 即全限定类名 [动作核心]。

验证在使用ansible.legacy集合和ansible.builtin集合时是否使用了FQCN(Fully Qualified Class Name)。

有問題的程式碼

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Create an SSH connection
      shell: ssh ssh_user@{{ ansible_ssh_host }} # <- FQCN で記述されていない

已修正的代码 (Yǐ de

---
- name: Example playbook (2nd solution)
  hosts: all
  tasks:
    - name: Create an SSH connection
      # FQCN で記述する
      ansible.builtin.shell: ssh ssh_user@{{ ansible_ssh_host }}

规范的完全限定类名

我会在Ansible的外部模块和外部集合中验证FQCN是否正确显示。

许多Ansible集合在使用旧的FQCN(Fully Qualified Class Name)编写模块名或集合名时,都能够进行名称解析。然而,随着集合版本的提升,之前的名称解析机制可能会被删除。因此,为了与集合版本保持一致,也需要更新FQCN。

要启用fqcn[canonical],您需要先安装相关集合,并且需要安装Ansible Community Package。

有問題的程式碼

---
- name: Example playbook
  hosts: all
  tasks:	
    - name: Get bucket keys
      amazon.aws.aws_s3: # <- Ansible 7.0.0 では amazon.aws.aws_s3 は削除されたが名前解決されるため動作する
        bucket: mamono210
        mode: list
      register: aws_s3_bucket_keys

修正过的代码

---
- name: Example playbook (2nd solution)
  hosts: all
  tasks:
    - name: Get bucket keys
      amazon.aws.s3_object: # <- amazon.aws.s3_object へ変更する
        bucket: mamono210
        mode: list
      register: aws_s3_bucket_keys

请参阅网站

    fqcn — Ansible Lint Documentation
广告
将在 10 秒后关闭
bannerAds