suzuki-shunsuke / issue

MIT License
4 stars 0 forks source link

Ansible こそ test first であるべきなのかもしれない #32

Closed suzuki-shunsuke closed 4 years ago

suzuki-shunsuke commented 4 years ago

ブログにする前の下書きてきななにかです。

Ansible ではテスト書く必要ないのでは

そう思ってた頃が自分にもありました。 というのも Ansible の Playbook がサーバのあるべき姿を表現しているものであり、それをそのまま他のツール(serverspec や goss など)でテストにしたとしても、同じものを別の言語で書き直しているようなものであり、この作業意味ある?って感覚に陥るからです。 尤も、 Ansible 自体のバグを発見できる場合はありますが(service を enabled にしているはずが実際には enabled になってないことがあるみたいな既知のバグを見つけたことがあります。最新では直ってるはず)。

そういったテストを書いておいてテストが落ちたとしても、多くの場合 Playbook の変更にテストが追従できてなかっただけみたいなことも多く、無駄なメンテコストが発生することも多かったです。

しかし、本当にテストがいらないかというとそんなことはなくて、プロセスが起動しているかとか、 listen しているかみたいなテストは必要です。 例えば Ansible に成功しても Nginx の起動に失敗しているとかそういうことはままあります。

なので本当に必要なのはブラックボックステスト的なものです。

仕様を考えてテストとして表現し、そのあとその仕様を満たす Ansible を実装すべきなのではないかと思います。 Ansible を書いてからそれを元にテストを書き始めると、実装の詳細にテストが引っ張られ、 本質的ではないテストが増え、変更に弱いテストになってしまいます。

と言っても、現実には既に Playbook があるけどテストはないみたいなケースも多く、今更 test first と言っても遅いということはありますが。

ここまで書いてて思ったのは「Ansible でテストって書けたっけな。あるいは Ansible でテスト書いたほうがいいかもな。全部は無理でも一部のテストは Ansible で書ける気がしないでもないな」ということです。あとで調べてみようと思います。

suzuki-shunsuke commented 4 years ago

Ansible のテストは実装ではなく仕様を満たしているかテストすべき