読者です 読者をやめる 読者になる 読者になる

ほわいとぼーど

ぷろぐらまのメモ帳

Ansible1.9+centos6.5でAlternativesが動かなくてハマッた話

※この話は時限的なものなので注意が必要です。
※自分が把握してるのはcentos 6.5 + ansible 1.9.0.1-2.el6の話です。
※(4/30追記)Ansible1.9.1が4/28にリリースされcentos6.5でもAlternativesモジュールが動作しました。

2015/03/25にAnsible 1.9 がリリースされて結構なアップデートが入り、
AWS関係で利用したいものが結構あったので手元で試してみました。
その結果、たまたまJDKを入れる際に使っているAlternativesモジュールが動かない問題にあたりました。

原因は、今まで対応されてなかったcentos(RHEL)の処理がcentos7相当のupdate-alternativesのoptionを用いて実装された結果、該当optionの存在しないcentos6以前で失敗するようになった、らしいです。
それ以前はcentos対応無かったけどelseでうまいこと動いていたというものらしい。

(参考: Ansible Extraとalternativesモジュールの話 | Ansible Advent Calendar2014 <= 後半部)
(参考: Fix multiple issues with alternatives module #313)

既にこの件についてはパッチが出ているので、取り込まれるまで静観しよう、
と3月の時点でなって一旦忘れておりました。

ところがつい先週、同僚氏から
「なんかアプリのvagrantが失敗するようになってしまいました。」
と言われてこの問題が再燃するわけです。

アプリのvagrantは、とあるプロジェクト専用のローカル開発環境用に用意したVagrantfileのことで、
vagrant up時にansibleをguest box内にインストールしレシピを流して環境を作っています。
こうすることで各人の環境依存が減ったり、個人のインストール作業の手間が減りますし、
Vagrantfileはプロジェクトのレポジトリに入れてあるので、 アプリ依存の変更内容も、該当プルリクを教えてもらうことで、 setup用のレシピにフィードバックできたりもしています。

という代物だったのですが、ansibleはprovision時にyum*1*2で入れていたので
そのタイミングで上記の問題が急に発生するようになったのでした。
setup用に使用している1.8.4では発生してなかったので1.8.4のrpmを探したのですが見つからなかったので、 Ansibleインストール後に上記のGithubのファイルを上書きする強硬手段で解決しました。
setup用のAnsibleもこの方法でバージョン上げてしまうか悩んでいるのですが、 入れてもすぐにアップデート分を採用するレシピを書く余裕がないので素直に待ちでしょうか・・・

*1: setup用の方はpipで入れてます。

*2: もしかしたらローカルインストール用はyumで入れないとyumモジュール実行時にこけるかも ?