feat: uploader.py の追加(ローカル→リモートの rsync 送信)
概要
fetcher.py(remote → local)、backuper.py(local → local/external)に続く3つ目の転送方向として、uploader.py(local → remote)を追加する提案です。ローカルの指定したファイル/ディレクトリを rsync でリモートサーバーへ送信できるようにします。
背景
現在の RsyncTaskConfig は host を常に source側 のリモート指定として扱う設計になっており(rsync_source プロパティが host:source を組み立てる一方、rsync_target は常にローカルパスとしてそのまま返す)、backuper.py も source/target の両方をローカルパスとして verify_directory() で検証しています。
そのため、「ローカル→リモート」方向の転送(例: ローカルのビルド成果物やログをリモートサーバーへ push する)を現状の設定ファイル・コードでは表現できません。
提案内容
設定モデル(config.py)
FnbConfigにupload: dict[str, RsyncTaskConfig] = {}を追加get_enabled_tasks/get_task_by_labelの型をLiteral["fetch", "backup"]→Literal["fetch", "backup", "upload"]に拡張RsyncTaskConfig自体(rsync_source/rsync_targetプロパティ)には変更を加えない — host付与のロジックはuploader.py側にローカルなヘルパーとして持たせ、fetch/backup の既存動作への影響を避ける
src/fnb/uploader.py (新規)
fetcher.py の鏡写しの実装:
gear.run_rsync()を使用- ローカル側である
sourceのみverify_directory()で検証(targetはリモートの可能性があるため検証しない — fetcher.py が逆に target のみ検証するのと対称) - SSH パスワード自動化(
get_ssh_password/get_timeout)も fetcher.py と同様に必要
cli.py
fnb upload LABELコマンドを新設(fetch/backup と同じオプション体系:--dry-run,--create-dirs,--ssh-password,--config, ログ系オプション)
reader.py / generator.py
fnb statusに upload タスクのテーブル表示を追加fnb initのテンプレート(assets/config.toml)に[upload.SECTION_NAME]の例を追加
該当箇所
src/fnb/config.pysrc/fnb/uploader.py(新規)src/fnb/cli.pysrc/fnb/reader.pysrc/fnb/generator.pysrc/fnb/assets/config.toml