【规则说明·生产】完全限定类名
这篇文章是 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