Ansible2に移行してから長らく悩んでいた問題が、2016/5/25にリリースされたAnsible 2.1で解決された話です。
・・・大した話じゃないけど嬉しくて書いてしまいました。
はじめに
これまでAnsible 1.Xで運用していたセットアップ用Playbookを、Ansible2に移行したという人も多いんじゃないでしょうか。意外と書式が変わっていますので、Playbookをそのままでは警告が出まくって、直すの面倒でしたよね。
その面倒があったとしても、Ansible2系にすることでblock
が使えるようになったり、依存関係が書きやすくなったりと、メリットがいっぱいありました。
でも、私の環境では困っていることもあったのです。
それは 「yumモジュールの挙動がおかしい」 ことでした。
本記事の動作環境
- セットアップ対象ホスト: CentOS 6.x
- Ansible実行サーバー: CentOS7 + pyenv + python 2.7
問題のPlaybook
yumモジュールを使用してパッケージを更新する、よくあるタスクです。
- name: remove common packages
yum:
name: "{{ item }}"
state: absent
conf_file: /etc/yum.conf.nodisable
with_items: "{{ remove_packages }}"
- name: install kernel
yum:
name: "{{ item }}"
state: present
conf_file: /etc/yum.conf.nodisable
update_cache: yes
with_items: "{{ kernel_packages }}"
- name: update all packages
yum:
name: "*"
state: latest
update_cache: yes
挙動の変化
Ansible 2.0.2の問題の挙動
これはyumモジュールを使用して、(1)不要パッケージを消して、(2)カーネルをアップデートしようとして、失敗した時の例です。
パッケージ名やバージョンは本筋ではないため、適当な文字列に置換しています。
TASK [_initial_setup : remove common packages] *********************************
skipping: [hoge] => (item=[u'cups', u'dovecot'])
TASK [_initial_setup : install kernel] *****************************************
skipping: [hoge] => (item=[u'kernel-2.6.fuga', u'kernel-headers-2.6.fuga', u'kernel-devel-2.6.fuga'])
RUNNING HANDLER [_initial_setup : restart iptables] ****************************
to retry, use: --limit @centos6/initial_setup.retry
・・・この残念感、伝わりますか?
- skippingと表示されているけど、更新されている。あるいは、更新不要(=ok)である。
- skippingと表示されているけど、どうやら失敗したらしい。
- 2つ目のタスクで失敗したはずなのに、なぜかHANDLERで失敗しているように見える。
※ HANDLERを呼んでいるタスクは本記事の例では省略しています。
yumモジュールがansible 2.0系ではデグレっていて、使い勝手が下がっていたんですよね。。。
Ansibleをアップグレードしてみる
本記事執筆時点でAnsible 2.1はリリースされたばかりですが、pipで入れている人なら簡単にアップグレードできます。
$ pip install --upgrade ansible
Ansible 2.1.0の挙動
改めて実行すると、この問題はちゃんと直ってました。
TASK [_initial_setup : remove common packages] *********************************
ok: [hoge] => (item=[u'cups', u'dovecot'])
TASK [_initial_setup : install kernel] *****************************************
changed: [hoge] => (item=[u'kernel-2.6.fuga', u'kernel-headers-2.6.fuga', u'kernel-devel-2.6.fuga'])
TASK [_initial_setup : update all packages] ************************************
changed: [hoge] => (item=[u'curl', u'curl-devel', u'lz4', u'cloud-utils-growpart'])
変更があればchanged、変更不要ならok。わかりやすいですね。
最後に
この問題は私の環境特有の話ではなくて、ちゃんと本家にIssueとして出ています。
およそ1年がかりで直ったってことですね。
Redhat/CentOS系の主要な機能なのだから、もっと早く直して欲しかったなぁ・・・