/** * サーバーセットアップ実行前に、レシピが参照する共有ファイルをコントローラ側へ * 取り寄せる(ステージングする)処理。 * * レシピ本体では `ansible.builtin.copy` の `src`(コントローラ側ローカルパス)を * 禁止している。許すと、レシピからエージェント自身のトークンや SSH 秘密鍵を対象 * サーバーへ配布できてしまうためである。その安全な代替が `shared_file` ロールで、 * 「プロジェクトの共有ファイルとしてアップロード済みのものだけ」を配布できる。 * * 実現には、playbook を走らせる**前**に対象ファイルを決めて取り寄せる必要がある。 * そのため `shared_file_src` は静的に決定できるリテラルに限定しており * (`ansible-task-guard.ts` の `isValidSharedFileSrc`)、ここではその値を body から * 集めてダウンロードする。 * * 取得経路はエージェント向けの既存 API(`listProjectFiles` / * `getProjectFileDownloadUrl`)をそのまま使う。テナント・プロジェクトはサーバー側が * エージェントトークンから解決するため、他プロジェクトのファイルは構造上参照できない。 */ import type { ApiClient } from '../api-client'; /** * ステージング先ディレクトリをロールへ渡す extra-var 名。 * * ロールの `defaults/main.yml` の同名変数を上書きする。テナントの `ANSIBLE#` 変数と * 衝突しないよう、runner は変数展開のあとにこのキーを書き込む。 */ export declare const SHARED_FILE_STAGING_DIR_VAR = "shared_file_staging_dir"; /** ステージング対象を指定するロール変数名。 */ export declare const SHARED_FILE_SRC_VAR = "shared_file_src"; /** 共有ファイル配布ロールの名前。 */ export declare const SHARED_FILE_ROLE_NAME = "shared_file"; /** * 1 ファイルあたりの上限。 * * 上限はロール変数にしない。レシピ側から緩められると、エージェントのディスクを * 埋める操作をレシピ作成者が自由に行えることになるため。 */ export declare const SHARED_FILE_MAX_FILE_BYTES: number; /** 1 実行あたりの合計上限。 */ export declare const SHARED_FILE_MAX_TOTAL_BYTES: number; /** * body タスク列から、配布対象として指定された共有ファイルのパスを集める。 * * `block` / `rescue` / `always` の入れ子も走査する。値が文字列でないものは無視する * (ガードが別途拒否するため、ここで二重にエラーにしない)。重複は取り除き、 * 記述順を保つ。 */ export declare function collectSharedFileSources(tasks: readonly unknown[]): string[]; export interface StageSharedFilesInput { client: ApiClient; /** `collectSharedFileSources` が返した共有ファイルの相対パス。 */ sources: readonly string[]; /** 保存先(実行ごとの一時ディレクトリ配下)。 */ stagingDir: string; } /** * レシピが参照する共有ファイルをステージングディレクトリへ取り寄せる。 * * 失敗時は例外を投げる。呼び出し側は playbook を実行せずに失敗させること * (不完全な配布物のまま実行すると、対象サーバーが中途半端な状態になる)。 */ export declare function stageSharedFiles({ client, sources, stagingDir, }: StageSharedFilesInput): Promise; //# sourceMappingURL=shared-file-staging.d.ts.map