自宅のマシンの管理を自動化、再現可能にする↩︎
そうしようと思い、Ansible 1で3つぐらいroleを書いて、Moleculeというansibleを隔離されたコンテナ環境などでテストできるツールを利用して、テストしようとしていた。土台はそこそこできたので、安全な練習環境で実施に動かしてテストしてみようというわけだ。
が、moleculeのドキュメントがかなり自分にとっては不足していて、とりあえずはテストできるようになったが、この先ansibleとmoleculeを使い続けることを考えると不安、憂鬱になった。
Ansibleがきつすぎる↩︎
そんなこんなで弄らなくなって3ヶ月ぐらい経過した。そろそろメイン機のOSを更新して環境構築したいので、自動化を完成させる必要があると思い、久しぶりに前に書いたansibleの設定を弄り始めたが、やはりきつい。
使ってみて感じたこととしては
- Ansible, Moleculeのドキュメントへの不満 https://docs.ansible.com/projects/ansible/latest/
- YAMLの問題点
AnsibleではYAMLファイルに自動化の設定、操作を記述していく。
- ゴールが見えにくい
- Ansible, Moleculeの仕様変更の影響 コードであれば、せいぜいexportされているmodule、関数が消えたり、関数の引数が消えたりするぐらいなので修正すべき箇所がすぐに特定できる。
- Ansible, MoleculeのCLIによるYAML生成 これは上述に含まれるが、特に嫌な部分だったので別にした。
コードでapiが提供されているのであれば、apiのmoduleや関数からどのような機能があるのか分かりやすくなる。
何より、 Xをしたい というときにapiの関数さえ見つければ、引数から何が必要なのかをすぐに知ることができる。
仮にドキュメントに不足があってもエスパーすることができる。
AnsibleのYAML用のVSCode Pluginが開発されているようなので、それを使えば緩和されるのかもしれない。
YAMLだと、ansible-playbook --syntax-checkなどで検証は効くのかもしれないが、修正に関してコードのほうが自分の使い方やコーディングスタイルでは少なくなると考えた。
molecule init,ansible-galaxy collection/role initなどでテンプレートを生成してから開発すると仮定する。
すると、一度生成したら、ツール側の生成ロジックに変更、更新があっても、生成したYAMLをすでに弄ってしまっているのだから、更新などがあれば手動で行わないといけなくなる。
これがなんか嫌だった。
加えて、謎にhttps://github.com/ansible/ansible-creatorという選択肢もあったので、比較に労力を割く必要があって疲れた。(結論は忘れた)
- 単純にコードのほうが強い 結局本格的にやるとYAML内でjinja(だっけ?)テンプレートを多用したりして、可読性が落ちて複雑になっていく。
https://docs.ansible.com/projects/molecule/
自分の能力の問題かもしれないが、とにかく知りたい情報にたどり着けない、そしておそらく存在しない。
なんでYAMLで無理してやってんだ俺? と考えてしまったらもう止まらない。
redhat公式の文章かなんかで、ansibleはYAMLを使っているので、開発者でなくてもインフラ管理に参加できるみたいなことが書いてあったが、これを学ぶコストを考えるとプログラミングを習得するほうが簡単だと思った。
カイシャでのAWS CloudFormationでもYAMLで似たような苦しみを味わったことがある。
ansibleに比べれば、ドキュメント的にもそちらのほうが全然ましだった。
AWS CDK, Terraformなどの
xyz as codeの人気が高そうなのはそういうことだろう。救いの神、py-infra↩︎
でansibleを検討した際に認知していたpy-infraを使うことにした。一応最終確認としてドキュメントを読んで、どれほど充実しているのか確認した。
py-infra: Operations Index
https://docs.pyinfra.com/en/3.x/connectors/docker.html#docker-connectorによると、dockerも扱うことができ、コンテナ内でテスト実行も可能らしい。
まじ、ありがてえ。
自分の用途には十分すぎる。
おわり↩︎
ansibleから開放される。時間を無駄にしたが、 redhat様がfundしているansibleを選ぶほうが丸いだろ jk(笑) などと浅はか、無知、愚かな選択をした罰だろう。
今回はpyinfra様を利用させていただくが、(本当に必要な)機会があればAnsibleやSaltにも挑戦してみたい。