8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

8
8
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
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?