1
1

More than 1 year has passed since last update.

【ルール説明】empty-string-compare

Last updated at Posted at 2022-12-27

こちらの記事は Ansible lint Advent Calendar 2022 カレンダー2 22日目の記事になります。

今回はルール empty-string-compare について説明します。

empty-string-compare

empty-string-compare は Ansible playbook 等で条件を指定する際に空の文字列が利用されていないかチェックします。空の文字列の比較は jinja2 フィルターの形式 にします。

  • when: var != ""ではなくwhen: var | length > 0と記述する
  • when: var == ""ではなくwhen: var | length == 0と記述する

jinja2 フィルターはvar | lengthvarが何文字かをカウントします。その文字数のカウントの結果と0を比較します。プログラミング的に言えば副作用を避けるために文字列と数値の比較ではなく数値と数値の比較にすると言う処理になります。

empty-string-compareopt-inのため初期設定では無効になっています。empty-string-compare を有効にするには Ansible lint の設定ファイルを変更します。

.ansible-lint
enable_list:
  - empty-string-compare

問題のあるコード

Ansible がターゲットの OS 情報を取得できない場合/sbin/shutdown -t nowを実行する処理です。

--
- name: Example playbook
  hosts: all
  tasks:
    - name: Shut down
      ansible.builtin.command: /sbin/shutdown -t now
      when: ansible_os_family == "" # <- 空の文字列で比較している

修正されたコード

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Shut down
      ansible.builtin.shell: |
        /sbin/shutdown -t now
        echo $var ==
      when: ansible_os_family | length == 0 # <- jinja2 テンプレートの形式で記述する

参考サイト

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1