Ansible のバグを見つけて Pull Request を投げた話

この記事は Ansible Advent Calendar 2016 の 8 日目の記事です。

qiita.com

Ansible を触り始めてから、かれこれ 1 年以上が経過しましたが、現在業務の片手間でやっていたサーバ移行がやっと終わりそうです。もちろん、移行に関する処理を全て Ansible で書いているので、移行作業自体は物理的な手作業を除いてほぼ一瞬で終わる予定です。

さて、本題です。皆さん、copy モジュール使ってますか?使ってますよね。かなり多用しますよね。私も大変お世話になっています。サーバ移行用に書いた処理でも使っていて、例えば RPM ファイルに入っているデフォルト設定をもとに lineinfile とかで設定を書き換えたいというときに、まずは /usr/share/hogehoge 配下に入ってる settings.conf.example とかを所定の /etc 配下にコピーすることを想定していました。当時はこんな感じのタスクを書いていました。

- name: デフォルト設定をコピー
  copy: src=/usr/share/hogehoge/settings.conf.example dest=/etc/hogehoge/settings.conf remote_src=True

さて、タスクが書けたら、まずは check モードで動作確認ですね。ansible-playbook コマンドに --check オプションを付ければいいだけです。簡単ですね。ところがどっこい、check モードで確認したはずなのに、実際にファイルが書き換えられてしまいました。

いやまぁ、草とか言ってる場合ではないんですが、どうやら調べてみたら、remote_src を付けてなければファイルが書き換えられることもなく、正しく check モードで動作していることは確認できました。

せっかくバグも見つけたんだし、と思って、さっそく Pull Request を投げてみました。

github.com

説明足らずでコミッタから再現手順くれよとか言われちゃいましたが、無事マージされて現在は上のようなバグはありません。自分が好きな Ansible に貢献できてよかったな~と思っています。

実は、現在も nmcli モジュールで少し困っていて、設定は変わっていないのに changed 扱いになってしまう問題があります。Ansible のバグ報告見てても、同様の報告が数件あるにも関わらず、現在も解消されていないようです。せっかくなので、自分が直してまた Pull Request を投げようかなと思っているところです。