ansible で DEPRECATION WARNING に対応したり、しばらく使っていなかった role を久しぶりに使おうとしたら、ひっかかったことがいくつかあったので、そのメモです。
対象バージョン
- ansible 2.7.1
- python version = 3.7.1
apt の DEPRECATION WARNING
- name: "Install packages"
apt:
name: ""
with_items: ""
のように書いていたら
TASK [znz.nadoka : Install packages] ***********************************************************************************
[DEPRECATION WARNING]: Invoking "apt" only once while using a loop via squash_actions is deprecated. Instead of using a
loop to supply multiple items and specifying `name: `, please use `name: ''` and remove
the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
という DEPRECATION WARNING が出ていたので、
- name: "Install packages"
apt:
name: ""
に書き換えました。
apt - Manages apt-packages — Ansible Documentation にこの書き方についてのバージョンの依存は書いていなかったので、 meta/main.yml
の min_ansible_version
は変更しませんでした。
has_key
から in
できるだけ python に依存したくなくて一般的な書き方だけにしたかったのですが、 キーが存在しないときにエラーにならずに空のときも無視するというのがやりたくて、 item.has_key('ta_key') and item.ta_key != ""
のようにしていたのが python 3 になった影響でエラーになったので、 "ta_key" in item and item.ta_key != ""
に 書き換え ました。
and
で複数の条件をチェックしないといけないのが根本的によくない気がしますが、 python に詳しくないので、もっと良い方法を知りたいです。
ansible galaxy の非互換
同様の変更を ansible-role-zabbix にして、 v0.1.1
というタグをうって ansible galaxy で import してみたところ、 znzj.zabbix
だった role が znz.zabbix
に変わってしまいました。
最初の頃は4文字以上のアカウント名しか使えなかったので、 znzj
にしていたのに、 いつの間にか新規に登録する role は znz.
の名前空間になっていて、 以前に登録したものは znzj.
のままだったのに、 またいつの間にか import したタイミングで変わってしまうようになったようです。
直接使っている (そしてこのブログをみている) 人はいないかもしれませんが、 znzj.ja_jp も変わるかもしれません。 今のところ、何も変更予定はないのと、自分で使っている playbook の影響範囲が把握できていないので、 できるだけ原状維持する予定ではあります。