こちらの記事はAnsible lint Advent Calendar 2022 25日目の記事になります。
今回はルール fqcn について説明します。
fqcn
fqcn は Ansibleコンテンツで Action やモジュール等を利用する際 FQCN (fully-qualified collection names) で記述されているか検証します。
現在のところはexperimental
のため fqcn に違反していると警告が出力されエラーにはなりません。
fqcn は以下の3つの分類があります。
- fqcn[action]
- fqcn[action-core]
- fqcn[canonical]
fqcn[action]
Action プラグイン が FQCN で記述されているか検証します。
問題のあるコード
[defaults]
# FQCN で記述されていない
callbacks_enabled = profile_tasks
修正されたコード
[defaults]
# FQCN で記述する
callbacks_enabled = ansible.posix.profile_tasks
fqcn[action-core]
ansible.legacy
コレクションおよびansible.builtin
コレクションが利用されている時に FQCN で記述されいるか検証します。
問題のあるコード
---
- name: Example playbook
hosts: all
tasks:
- name: Create an SSH connection
shell: ssh ssh_user@{{ ansible_ssh_host }} # <- FQCN で記述されていない
修正されたコード
---
- name: Example playbook (2nd solution)
hosts: all
tasks:
- name: Create an SSH connection
# FQCN で記述する
ansible.builtin.shell: ssh ssh_user@{{ ansible_ssh_host }}
fqcn[canonical]
Ansible の外部モジュールや外部コレクションで FQCN が正しく表記されているか検証します。
多くの Ansible コレクションではモジュール名やコレクション名が古い FQCN で記述されていても名前解決されます。しかしコレクションのバージョンが上がればそれまで機能していた名前解決の仕組みが削除される可能性もあるためコレクションのバージョンに合わせて 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