Posted at

Ansible 2.1がリリースされて何より嬉しかったこと

More than 3 years have passed since last update.

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モジュールを使用してパッケージを更新する、よくあるタスクです。


package_update.yml

- 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系の主要な機能なのだから、もっと早く直して欲しかったなぁ・・・