こちらの記事はAnsible lint Advent Calendar 2022 16日目の記事になります。
今回はルールlatestとpackage-latestについて説明します。
latest
latestはansible.builtin.gitモジュールおよびcommunity.general.hgモジュールにおいてソースコードが副作用が起こらないように取得されるか検証します。
問題のあるコードその1
---
- name: Example for `latest` rule
hosts: localhost
tasks:
- name: Risky use of git module
ansible.builtin.git:
repo: "https://foosball.example.org/path/to/repo.git"
version: HEAD # <-- HEADが指定されているためリポジトリの更新状態によりどのバージョンのコードが取得されるのか決まっていない
修正されたコードその1
---
- name: Example for `latest` rule
hosts: localhost
tasks:
- name: Safe use of git module
ansible.builtin.git:
repo: "https://foosball.example.org/path/to/repo.git"
version: abcd1234... # <-- コミットのSHA・タグ・ブランチ名等を指定し一意のコミットIDが指定されるようにする
問題のあるコードその2
---
- name: Example for `latest` rule
hosts: localhost
tasks:
- name: Risky use of git module
ansible.builtin.git:
repo: "https://foosball.example.org/path/to/repo.git"
version: main # <- mainブランチが指定されている
修正されたコードその2
---
- name: Example for `latest` rule
hosts: localhost
tasks:
- name: Safe use of git module
ansible.builtin.git:
repo: "https://foosball.example.org/path/to/repo.git"
version: main # noqa: latest <- mainブランチが常に安全であると確信がある場合はAnsible lintの検証をスキップする
package-latest
package-latestはOSのパッケージマネージャーが安全に副作用が起きないようにソフトウェアをインストールできるか検証します。
Ansibleではパッケージを新規インストールする場合はバージョンを指定する
、すでにインストールされたパッケージをアップデートする場合は余計なソフトウェアをインストールしない
ように記述するのが望ましいとのことです。
問題のあるコードその1
---
- name: Example playbook
hosts: localhost
tasks:
- name: Install Ansible
ansible.builtin.yum:
name: ansible
state: latest # <- 最新版のパッケージをインストールする
修正されたコードその1
---
- name: Example playbook
hosts: localhost
tasks:
- name: Install Ansible
ansible.builtin.yum:
name: ansible-2.12.7.0 # <- バージョンを指定する
state: present
問題のあるコードその2
---
- name: Example playbook
hosts: localhost
tasks:
- name: Install Ansible-lint
ansible.builtin.pip:
name: ansible-lint
args:
state: latest # <- 最新版のパッケージを新規インストールする
修正されたコードその2
---
- name: Example playbook
hosts: localhost
tasks:
- name: Install Ansible-lint
ansible.builtin.pip:
name: ansible-lint
args:
state: present
version: 5.4.0 # <- バージョンを指定する
問題のあるコードその3
---
- name: Example playbook
hosts: localhost
tasks:
- name: Install some-package
ansible.builtin.package:
name: some-package
state: latest # <- 最新版のパッケージをインストールする
修正されたコードその3
---
- name: Example playbook
hosts: localhost
tasks:
- name: Install some-package
ansible.builtin.package:
name: some-package
state: present # <- presentを指定する
問題のあるコードその4
---
- name: Example playbook
hosts: localhost
tasks:
- name: Install Ansible with update_only to false
ansible.builtin.yum:
name: sudo
state: latest
update_only: false # <- パッケージを最新版にアップデートする
修正されたコードその4
---
- name: Example playbook
hosts: localhost
tasks:
- name: Update Ansible with update_only to true
ansible.builtin.yum:
name: sudo
state: latest
update_only: true # <- アップデートの実行はするが他のソフトウェアはインストールしない