はじめに
2023年5月にリリース予定の ansible-core 2.15 で、vars ディレクティブ直下にリストで変数を定義する方法が Deprecated(非推奨)として警告が表示されるようになります。ansible-core 2.15 の Porting Guide にも掲載されています。
言葉にするとわかりにくいのですが、以下のような定義方法です。
vars: - myvar1: myvalue1 - myvar2: myvalue2 - myvar3: myvalue3
たまにこのような定義を見かけます。
実際どのような警告になるのか確認したかったのでベータ版で試しました。
- 環境
- ansible-core 2.15.0b2
Playbook
こんな Playbook で試します。
--- - name: Test play hosts: localhost connection: local gather_facts: false vars: - myvar1: myvalue1 - myvar2: myvalue2 - myvar3: myvalue3 tasks: - name: Test debug ansible.builtin.debug: msg: "{{ myvar1 }}"
おためし
Playbook の実行結果です。
% ansible-playbook -i localhost, test.yml
[DEPRECATION WARNING]: Specifying a list of dictionaries for vars is deprecated in favor of specifying a dictionary.
This feature will be removed in version 2.18. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [Test play] ******************************************************************************************************
TASK [Test debug] *****************************************************************************************************
ok: [localhost] => {
"msg": "aaaaaaa"
}
PLAY RECAP ************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ということで、[DEPRECATION WARNING]: Specifying a list of dictionaries for vars is deprecated in favor of specifying a dictionary. This feature will be removed in version 2.18. という非推奨警告が表示されました。
上記の Playbook は Play変数としての vars でしたが、以下のようなタスク変数の vars でも警告が表示されました。
...(略)... tasks: - name: Test debug ansible.builtin.debug: msg: "{{ myvar1 }}" vars: - myvar1: myvalue1 - myvar2: myvalue2 - myvar3: myvalue3
警告が表示されない定義方法
vars を以下のように定義すれば警告は表示されません。
...(略)... vars: myvar1: myvalue1 myvar2: myvalue2 myvar3: myvalue3 ...(略)...
この定義の方が馴染みがある方が多いと思います。
補足
もちろん、リストを含む変数の定義はこれからも大丈夫です。
...(略)... vars: mylist: # OK - myvalue1 - myvalue2 - myvalue3 ...(略)...
おわりに
今すぐ慌てて修正するほどでもないですが、これから書く Playbook は警告が表示されないかたちで定義するのが良さそうです。
[2024/09/25 追記]
ansible-core 2.18 で警告になっていた指定方法のサポートが削除されるようです。おそらくエラーになると思います。