34 lines
1.5 KiB
Markdown
34 lines
1.5 KiB
Markdown
# pod: バイナリエントリポイントの追加
|
||
|
||
## 背景
|
||
|
||
pod クレートは現在ライブラリのみ(`lib.rs`)。バイナリとしての起動ルートがなく、実行には `examples/pod_cli.rs` を使うか外部クレートから呼ぶしかない。pod 単体で起動できる `main.rs` を追加する。
|
||
|
||
## 方針
|
||
|
||
`-m <path>` でマニフェストファイルのパスを受け取って起動する。
|
||
|
||
```
|
||
pod -m manifest.toml
|
||
```
|
||
|
||
### stdin 対応
|
||
|
||
`-m -` で stdin からマニフェストを読む(jq / kubectl と同じ慣習)。優先度は低い。
|
||
|
||
### CLI args でのマニフェスト指定は採用しない
|
||
|
||
PodManifest は `[pod]` / `[provider]` / `[worker]` のネスト構造。フラットな引数に展開すると煩雑で、スキーマ変更に引数パーサーが追従し続ける必要がある。
|
||
|
||
## 設計ポイント
|
||
|
||
- daemon が pod プロセスを spawn する際、RuntimeDir に書き出し済みのマニフェストファイルのパスをそのまま渡す流れを想定
|
||
- マニフェストがファイルとして残るため、`ps` での確認・再起動・デバッグが容易
|
||
- stdin を占有しないので将来の対話入力と競合しない
|
||
- マニフェストの再読み込み(将来的なホットリロード)にもパスがあれば対応可能
|
||
|
||
## 変更対象
|
||
|
||
- `crates/pod/Cargo.toml` — `[[bin]]` セクション追加、clap 依存追加
|
||
- `crates/pod/src/main.rs` — エントリポイント新規作成
|