ansible (に固有ではないが) の嫌なところは、タスクを role や playbook から除外しても過去に与えてしまった影響を除去できないところだが、まあこれは本質的に難しいので致し方のないことではある。
で、それを解決するには作り直すしかねえ! となるので immutable infrastructure 概念が効いてきて Docker なんかが選択肢に上がってくるのだが、それ Docker container じゃなくて lxc container でできませんか……? となる。
なにかありそうな気はするんだけどな (というかテンプレート作成に必要なので、ないはずがない)
いや、まあ、そもそも immutable でいいなら LXC を使うなというのは一理ありまして、つまり Docker / docker compose を Proxmox VE で直接管理できるようになってくれると嬉しいのだが、とはいえそれってクラスタ機能を活かせないのでそこまでケアしようとすると PVE よりも Kubernetes の方が……あれ?
でも k8s はさすがにオーバーキルだろ、俺はただ単に declarative なインフラ管理をしたいだけやぞ (べつにスケールさせたいわけでも冗長化したいわけでもない)
そもそもコンテナの初期セットアップで甘えまくってインタラクティブなスクリプト叩いたりしてるのがカスというのはあり、まずその悪癖を矯正しないことには如何ともしがたく
Docker はその辺り必要なら環境変数で入力を与えてシェルスクリプトでセットアップをするなどの割合プリミティブな手が使われがちで、たぶん本当はそれが正しい。
まあそれもインストールとセットアップを別にできてこそなのだろうけど
最初の一発しかやらないインストールについては ansible のタスクで頑張るよりもスクリプト走らせた方がずっと楽だし、アプリ固有のセットアップはどうせファイル操作とかではなく CLI 経由のスクリプトで操作することがほとんどなのでやはりスクリプト書いた方が楽。
ansible で楽をできるのは定常的かつ全自動なアップデートが可能なパッケージの更新とか、ファイルの内容を操作するだけで事が済む設定ファイルの管理だけ。
マイグレーション (特に、無条件に走らせることができる自動マイグレーション) とかいうやつは大概面倒なのだが、 Docker の場合はそれをメンテナがやってるからユーザがサボれるだけという気もするにはするんだよなぁ。
だったらそのスクリプトをベアメタルで利用可能にしてくれないものかね (distro 依存とか大きそうだし無理か……)
postgres のメジャーバージョンアップのことを考えて白目を剥いています