Skip to content

tools・bootstrap: 平文の machine config を手元に残さない・Git Bash の入口・行き先の自動切り替え・Talos の文書を 1 本に - #672

Merged
5ym merged 2 commits into
mainfrom
ops-simplify
Nov 1, 2026
Merged

5ym merged 2 commits into
mainfrom
ops-simplify

Conversation

@5ym

@5ym 5ym commented Nov 1, 2026

Copy link
Copy Markdown
Collaborator

手元の運用を簡単にし、事故を減らす。

  • `bootstrap/apply.sh`: `render.sh` で `/dev/shm` に描いて `apply-config` し、終わったら消す。秘密を平文で含む machine config を手元のディスク (`bootstrap/clusterconfig/`) に残さない。引数は `apply-config` に渡る (`--dry-run` / `--mode=try` / `--insecure -n `)
  • `tools/t`: Git Bash から `t.ps1` を呼ぶ入口。MSYS のパス変換を止め、端末でなければ標準入力を渡さない (閉じないパイプで終わらなかった)。渡すときは `--stdin`
  • `tools/creds.sh`: 10.10.0.4 に届かなければ 10.0.0.2 に繋ぐ (TCP がつながるかだけ見る)。`GITOPS_EP` で決め打ち
  • 文書: `docs/talos.md` を `bootstrap/talos.md` にまとめた (DL360 の頃の記述と二重の schematic の例を落とす。297 → 約 160 行)。参照も直した

確かめたこと: `tools/t` で `/proc/cmdline` がそのまま届く・`--stdin` のときだけ標準入力が渡る・10.10.0.4 の 50000 と 6443 は届く、10.0.0.2 は届かない判定になる。apply.sh と creds.sh は sh -n を通した (age の鍵を消してあるので、クラスタにつなぐところは次に鍵を戻したときに試す)。

🤖 Generated with Claude Code

https://claude.ai/code/session_01T9PbUfqG4pPxus99UeLiJs

…Talos の文書を 1 本に

- bootstrap/apply.sh: render.sh で /dev/shm に描いて apply-config し、終わったら消す。
  手元に bootstrap/clusterconfig/ を作らない。古い talos/ の .gitignore も外す
- tools/t: Git Bash から t.ps1 を呼ぶ入口。MSYS のパス変換を止め、端末でなければ標準入力を
  渡さない (閉じないパイプで終わらなかった)。渡すときは --stdin
- tools/creds.sh: 10.10.0.4 に届かなければ 10.0.0.2 に繋ぐ (2026-11-01 に NIC を付け替えて
  10.10 から届かなくなったとき、手で kubeconfig を書き換えた)。GITOPS_EP で決め打ちできる
- docs/talos.md を bootstrap/talos.md にまとめた (DL360 の頃の記述、二重の schematic の例を落とす)。
  参照も直した

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T9PbUfqG4pPxus99UeLiJs
@claude

claude Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 29s —— View job


レビュー結果

大きな不具合は見つかりませんでした。以下は軽微な指摘と要確認の点です。

確認できたこと

  • docs/talos.md への参照は残っていません(grep 済み)。ワークフロー、deploy/*、talos.sops.yaml のコメントも新しい節名に揃っています。
  • creds.sh が動くコンテナには curl が入っています (tools/Dockerfile)。そのため reach で curl が無くて常に「届く」扱いになる心配はありません。
  • /dev/shm に描いて trap で消す流れは意図どおりです。

指摘

  1. 要確認: 平文がディスクに残る可能性 (bootstrap/apply.sh:11)

    • apply.sh は出力先だけを /dev/shm にしています。
    • 一方 render.sh は WORK=$(mktemp -d) で、/tmp に復号した talos-secrets、talos.sops.yaml、*-values を平文で置きます。
    • /tmp がコンテナの書き込み層だと、/dev/shm に描く効果が薄れます。render.sh の trap で消してはいますが、強制終了では残ります。
    • 目的が「平文を手元のディスクに残さない」なら、apply.sh で TMPDIR=$out のように render.sh の作業場所も /dev/shm に寄せることを検討してください。
    • コンテナを --tmpfs /tmp や --rm で動かしているなら問題ありません。
  2. 軽微: --stdin は先頭の引数でしか効きません (tools/t)

    • tools/t --admin --stdin kubectl apply -f - と書くと、--stdin がコマンドに渡って失敗します。
    • --admin は t.ps1 が先頭で受ける仕様です。そのため README や usage に「--stdin は --admin より前に置く」と一言あるとよいです。
    • 例: tools/t --stdin --admin kubectl ...
  3. 軽微: apply.sh の trap ... INT TERM

    • POSIX sh では、INT/TERM の trap を実行したあとスクリプトが続行します。
    • 実際には子プロセスも同じ信号で落ちるので、set -e で止まります。ただし exit を明示したほうが確実です。
    • 例: trap 'rm -rf "$out"' EXIT; trap 'exit 130' INT TERM
    • render.sh に既にある書き方と同じなので、揃える意図なら現状のままで構いません。
  4. 軽微: creds.sh の到達判定

    • curl の終了コード 7 と 28 だけを不達とし、それ以外は到達扱いにしています。
    • DNS 失敗 (6) は IP 直指定なので起きません。ただしネットワーク不達でも、環境によっては別のコードが返る可能性があります。
    • 両方不達のときは 10.10.0.4 に倒れ、エラーが出ないまま後続で失敗します。「どちらにも届かない」旨を stderr に出すと、原因に気づきやすくなります。

テスト

  • 自動テストの対象外のスクリプトです。PR 本文にあるとおり、sh -n と実機の疎通確認で足りると考えます。
  • apply.sh のクラスタ接続部分は未検証です。次に鍵を戻したとき、--dry-run で確認してください。

設計

  • docs/talos.md を bootstrap/talos.md にまとめて二重管理を無くした点は、既存の方針 (正本を 1 か所にする) と一貫しています。

@claude

claude Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 21s —— View job


レビュー結果

大きな不具合は見つかりませんでした。前回の指摘 4 点は、最新コミット (0a51ed1) で直っています。

確認できたこと

  • bootstrap/apply.sh
    • TMPDIR=/dev/shm を export しています。render.sh:12 の mktemp -d は TMPDIR を見るので、復号した入力も tmpfs に置かれます。
    • trap 'exit 130' INT TERM で中断すると止まります。EXIT の trap も走るので、$out は消えます。
    • 以上で、前回の 1 と 3 は解消です。
  • tools/t: --admin と --stdin を先頭でどの順にも受けるようになりました。前回の 2 は解消です。
  • tools/creds.sh: 両方に届かないときは stderr に知らせます。前回の 4 は解消です。
  • docs/talos.md への参照は残っていません。

所感 (どれも直さなくてよい)

  • tools/creds.sh の reach は、キャッシュ済みの kubeconfig や talosconfig があっても毎回走ります。到達しないときは最大 4 秒余計にかかります。ただし t.ps1 は --rm でコンテナを起動するので、古い endpoint が残る心配はありません。
  • curl が 7 と 28 以外で失敗した場合 (たとえば経路なしの 56 など) は「届く」扱いになります。ただし実際は 7 か 28 になることが多く、GITOPS_EP で決め打ちもできます。そのため現状で十分です。

テスト

  • 自動テストの対象外のスクリプトです。sh -n と疎通確認で足りると考えます。
  • apply.sh のクラスタ接続部分は未検証です (PR 本文にもあります)。鍵を戻したら、先に --dry-run で確認してください。

設計

  • 文書を 1 本にまとめたことと、平文を tmpfs だけに置く方針は一貫しています。

@5ym
5ym merged commit 658bae9 into main Nov 1, 2026
6 checks passed
@5ym
5ym deleted the ops-simplify branch November 1, 2026 03:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant