talos: 当てたあとのズレを見る drift.sh - #175
Conversation
git から作る machine config と、ノードが持っているもの (talosctl get machineconfig) を 並べて diff を出す。読むだけで当てない (適用は再起動を伴うことがあり、Talos API は mTLS だけなので CI には渡さない)。鍵・証明書は両方から落としてから比べる。 移行後にホストから手で回す、または cron に置く用 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv
|
Claude finished @5ym's task in 2m 45s —— View job レビュー結果
全体的な所感設計方針(検出は自動・適用は手動、鍵/証明書は両側から落として比較、単一ノード構成なので 1点だけ 要確認 としてインラインコメントを付けました:
それ以外の不具合・セキュリティ上の懸念は見当たりませんでした。テストについては、 |
| trap 'rm -rf "$WORK"' EXIT INT TERM | ||
|
|
||
| # 1. git から作る。**本番と同じ道具で**(render.sh は Cilium と local-path を描いてから組む) | ||
| ./talos/render.sh "$WORK/rendered" >/dev/null | ||
|
|
||
| # 2. ノードから取る。`get machineconfig` は資源の器に入って返るので中身(.spec)だけ出す | ||
| # shellcheck disable=SC2086 | ||
| talosctl ${NODE:+-n "$NODE"} get machineconfig v1alpha1 -o yaml \ | ||
| | yq -e '.spec' > "$WORK/live.yaml" |
There was a problem hiding this comment.
要確認: render.sh は ver()/hc() で yq をあえて使わず awk で読んでいます。理由として明記されているのは「サーバに入っているのが v3 で構文が違う」( talos/render.sh:65, talos/render.sh:119 )。
一方この drift.sh は yq -e '.spec'・yq -P '... | del(...) | sort_keys(..)' という mikefarah yq v4 系限定の構文に依存しています(v3 は yq r file.yaml spec のようなサブコマンド形式で、これらのパイプ式は通りません)。
drift.sh は README により「ホストから手で回す、または cron に置く」想定 ── つまり render.sh を手で回すのと同じホストで動かされる可能性が高いです。もし本当にそのホストの yq が v3 のままなら、command -v yq のチェックは通っても実行時に構文エラーで落ちます。
- 実際にこのスクリプトを回すホストの
yqバージョンを確認しているか - 確認済みなら、
render.sh側のコメントとの食い違いに見えるので一言補足があると親切
サーバに入っている yq は v3 (jq 構文) で、書いていた v4 の式は動かない (render.sh が awk で組んでいるのと同じ理由)。レビューの指摘 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv
|
レビューありがとうございます。指摘のとおりでした — ホスト(main)の yq は 3.4.3(jq 構文)で、書いていた v4 の式は動きません。
|
|
Claude finished @5ym's task in 2m 28s —— View job レビュー結果
前回指摘の解消前回の「
1点だけ要確認(ブロッカーではありません): このコメントの「サーバにある」は実機で確認済みという理解でよいでしょうか。もし未確認なら、 ロジックレビュー (talos/drift.sh 本体)
その他、不具合・セキュリティ上の懸念は見当たりませんでした。テストについては、方針上 CI に組み込めない(Talos API が mTLS のみで CI に鍵を渡さない)理由が README・スクリプトのコメント双方に明記されており、自動テストが無いこと自体は妥当と判断します。 |
|
「サーバにある」は実機で確認済みです(2026-09-16、ホスト main): |
Talos では CNI も storage も machine config の inlineManifests に載るので、ズレは git とノードの間で起きる(apply を打ち忘れる / 実機で patch して git に戻し忘れる)。
git から作ったものとノードが持っているものを並べて diff を出すだけの道具を足す。当てはしない(適用は再起動を伴うことがあり、Talos API は mTLS だけなので CI には渡さない — talos-validate と同じ線)。鍵と証明書は両方から落としてから比べる。
移行後にホストから手で回す、または cron に置く想定。一致 0 / ズレ 1。
🤖 Generated with Claude Code
https://claude.ai/code/session_01JgGYf5qbjDXYhtzcpLsGvv