Cloud SAM 全トポロジー baseline
full-topology-minimal は、有料の最終
representative-redundancy プロファイルと
共通の、全トポロジー baseline を 1 回実行するためのプロファイルです。
網羅的な開発・failover 試験である
sam-full-validation.sh
とは分離します。その開発用 suite を release-QA の mutation window に入れてはいけません。
現在のツリーに対する実環境実行は未実施です。offline wrapper check は移植可能な ソース検証にすぎず、ホスト検証、provisioning、有料 qualification の許可ではありません。
レビュー済みの全トポロジー、すなわちルーター 10 台(pve-rr-a、pve-rr-b と
AWS・Azure・OCI・PVE 各 2 台の leaf)、各環境 1 台ずつ計 4 台のクライアントが必要です。
clients_per_site = 1 とし、従来 8 台構成の同環境内クライアント間通信は検証範囲から外れます。
共有 SAMNodeSet はどの PVE router にも WireGuard endpoint を公開しません。
PVE router の生成設定には、他の PVE router guest に向けた明示的なローカル
bootstrap peer を含め、QGA で発見したゲスト管理アドレスだけを使います。
これらは PVE ホストや public のアドレスではなく、cloud 設定には入りません。
cloud peer への handshake は PVE 側から開始し、cloud 側が WireGuard handshake
から endpoint を学習します。同じ artifact を全 10 router に配備し、次の
baseline 1 回だけを検証します。
- control-plane/dataplane の readiness gate。
- 全 12 directed client-to-client hostname flow。
- 全 9 cloud-origin directed cloud-ingress hostname flow。
- 送信元 private address の固定、SAM route 選択、ICMP 成功をすべて要求する、 全 48 directed cross-site leaf-to-leaf router-origin probe。
MobilityPoolの provider readiness/no-conflict gate。
legacy protocol、performance、load-balance report、transfer probe、failover/rejoin、 provisioning、destruction は行いません。成功を返す前に matrix の期待行数と全結果を 確認します。不完全な matrix は失敗であり、skip ではありません。
Baseline 専用の予算
単体 wrapper の上限は従来どおり 20 分です。最終 release contract はこれだけを
選択せず、representative-redundancy を選択します。代表プロファイルは PVE RR の
A -> AB -> B-only -> AB を既存の cross-site canary 4 経路で確認した後、
AWS・Azure・OCI・PVE の各 edge-A を、独立した試験で 1 台ずつ停止・復帰させます。
各 edge 試験は停止後・復帰後の両方で、全 12 client flow と全 9 cloud-ingress flow、
稼働中の全 leaf の control/dataplane・provider/ownership と RR membership の
必須 gate を確認します。
A の復帰を終えてから次の環境に進みます。B 側の停止・復帰は対象外で未検証です。
PVE は既定の single-router のみを対象とし、優先度が非対称な CARP は使いません。
これは guest の routerd/BGP service の切り替えであり、VM や物理ホストの電源断
試験ではありません。従来の qualification 32 分枠を置き換える、承認済みのソース上の
予算契約は次のとおりです。
"qualification": {
"profile": "representative-redundancy",
"runScope": "full-representative",
"provisioningBudgetSeconds": 1080,
"qualificationBudgetSeconds": 5400,
"minimumSupervisorReserveSeconds": 300
}
guard は、別の最終 profile、18 分超の provision/certification budget、90 分超の
代表 qualification budget、5 分未満の supervisor reserve、合計が mutation TTL の
115 分を超える契約を拒否します。artifact contract は代表 wrapper と依存する
sam-e2e.sh harness を固定します。
reserve の最低値は 5 分のままで、18 + 90 + 5 = 113 分となり、115 分(6900 秒)の
TTL 内に 2 分の余裕があります。cleanup/inventory は従来どおり 10 + 5 分を 2 回とし、
有料リソースの cleanup を含む計画上の枠は 145 分(8700 秒)です。追加の試験時間
ではありません。
5400 秒は最初の RR 呼び出し、後続 edge 4 回、証拠検証を含む wrapper 全体の枠です。 後続呼び出しには残り時間だけを渡します。承認済みの費用方針の見積は US$1.05、 実行許可判定の上限は US$1.60 です。現在の provider 料金の見積書や、実際の請求額の 上限ではありません。拡張したシーケンスの実環境での完走時間は未計測です。 offline PASS やソース上の予算変更承認は、実環境の実行許可でも、実環境 PASS・ 所要時間・実費の保証でもありません。新規の承認済み contract と source/実行の 全 precheck が引き続き必要で、push や実環境検証の完了を意味しません。 PASS を得るために TTL を延長したり、必須 matrix 行を省略したりしないでください。 静的なテンプレート比較の限界は、 代表プロファイルの A/B 検証範囲 を参照してください。
release-QA mutation driver は最初の予算を cloud/PVE provision/certification に使い、
次の予算で profile を呼び出します。境界ごとに timeout を使い、時間切れは fail-closed
とします。永続的な supervisor が mutation process group を終了してから cleanup
に移ります。実行範囲に限定した OpenTofu destroy と網羅的な zero inventory は、
profile ではなく supervisor が実施します。cleanup/inventory の各試行には固定上限が
あり、有料 mutation timer が切れたことを理由に復旧を放棄しません。
有料 cloud run の前に、同じ固定 contract で "runScope": "pve-certification-only"
を使用できます。これは全 PVE topology の gate 1 回だけです。PVE certificate が成功
したら mutation driver は終了し、cloud provisioning や routerd 製品検証には進みません。
cleanup、全 7 scope の zero inventory、PVE token revocation は supervisor が続行します。
その成功は、新規の full-representative run に進むための証拠であり、release PASS
ではありません。
provision/certification、qualification、cleanup は別々の契約です。数時間の故障注入 suite や qualification 延長を、115 分の有料 mutation deadline が許可するものとは 扱いません。
実行
Cloud SAM 再設計の事前監査(英語) と、 ローカル Cloud SAM checks がすべて成功し、承認済みの新規 release-QA contract が read-only precheck を通過してから実行します。provision 済みの topology が必要です。 監査がホスト/cloud 検証を禁止している間は実行しないでください。 有料実行の正規入口は永続的な supervisor です。
tools/release-qa-labs/drivers/start-supervised-release-qa.sh \
/var/lib/routerd-release-qa/<run-id>/runtime/contract.json
provision 済みの全 topology に対する、baseline profile のコマンドは次の形です。
tests/e2e/cloudedge/scripts/sam-full-topology-minimal.sh \
--tofu-output /var/lib/routerd-release-qa/<run-id>/runtime/tofu-output-full.json \
--artifact /var/lib/routerd-release-qa/<run-id>/runtime/routerd-<version>-linux-amd64.tar.gz \
--tfvars /var/lib/routerd-release-qa/<run-id>/runtime/terraform.tfvars \
--ssh-key /var/lib/routerd-release-qa/<run-id>/runtime/secrets/guest_ssh \
--pve-ssh-key /var/lib/routerd-release-qa/<run-id>/runtime/secrets/pve_ssh \
--pve-known-hosts /var/lib/routerd-release-qa/<run-id>/runtime/pinned/pve-known_hosts \
--evidence-root /var/lib/routerd-release-qa/<run-id>/runtime/evidence/qualification/full-topology-minimal \
--max-runtime-seconds 1200
tofu-output-full.json は raw tofu output -json ではなく、PVE certification driver が
QGA で補完した output です。ローカル WireGuard bootstrap peer の生成前に、全 PVE
router で management_ip、pve_management_source: qga-dhcp、QGA で検証した
ssh_host_keys、ssh_host_key_source: qga が必要です。同じ QGA step が mode 0600 の
known-hosts artifact を作り、鍵とゲスト管理アドレスを結び付けます。PVE guest SSH は
共有管理網から鍵を学習しません。
コマンド自体は provision/destruction を行いません。teardown 引数を追加しないでください。 qualification が失敗しても有料リソースを残さないよう、supervisor が無条件の cleanup を所有します。
Offline ソース検証
次は fake local file で wrapper だけを検証します。instance の provision、routerd
の起動、routerd socket の bind、DHCP/RA/network state の変更はしません。
make cloudedge-full-topology-minimal-offline-test
shellcheck -x tests/e2e/cloudedge/scripts/sam-full-topology-minimal.sh \
tests/e2e/cloudedge/scripts/sam-full-topology-minimal-offline-test.sh \
tools/release-qa-labs/drivers/qualification-driver.sh \
tools/release-qa-labs/drivers/mutation-driver.sh
release-QA Python suite を host-safe preflight として実行しないでください。
一部には sudo、service manager、socket、namespace の契約を意図的に検証する case が
あり、それらは別途承認された release-QA フェーズだけで実行します。