--- name: sdaf-control-plane-bootstrap description: > Deploy the SDAF control plane locally: prepare DEPLOYER and LIBRARY tfvars, review the plan, run `deploy_controlplane.sh` per `docs/local/03-00-control-plane.md § Run`, and validate the deployer + library + state hand-off. Grounded in `docs/local/03-00-control-plane.md`. Use when a user says "deploy the SDAF control plane", "run deploy_controlplane.sh", "bootstrap SDAF from an empty subscription", "install the deployer" or "create the SAP library". Do NOT use for workload zone (see sdaf-workload-zone), SAP system (see sdaf-sap-system), removal (`sdaf-safe-removal`), or Azure Government / sovereign-cloud deltas (`sdaf-sovereign-cloud`). allowed-tools: shell license: MIT --- # SDAF Control Plane Bootstrap Action-loop skill. Deploys the control plane strictly per `docs/local/03-00-control-plane.md` for local execution. On ADO / GitHub surfaces, defer stage mechanics to the surface bootstrap plugin — this skill covers the shared control-plane semantics. ## When to invoke Trigger on: "deploy the SDAF control plane", "run deploy_controlplane.sh", "install the deployer", "create the SAP library", "bootstrap SDAF from empty". Do NOT trigger on: workload zone, SAP system, software download, install, removal, or state repair. ## Preconditions (documented gates) - `sdaf-readiness-check` has passed (`docs/local/02-00-prepare-execution-environment.md § Readiness verification`; `docs/local/03-00-control-plane.md § Before you begin`). - Control-plane config files (DEPLOYER + LIBRARY tfvars) are prepared under the documented `WORKSPACES` layout — see `sdaf-workspace-and-tfvars` (`§ Configuration preparation`, `§ Inputs`). - The three required env vars are set (`docs/local/troubleshooting.md § A required export is missing`): `SAP_AUTOMATION_REPO_PATH`, `CONFIG_REPO_PATH`, `ARM_SUBSCRIPTION_ID`. ## Recipe ### Step 1 — Review the tfvars Re-read the DEPLOYER and LIBRARY tfvars once (`docs/local/03-00-control-plane.md § Review before execution`). Confirm naming matches `docs/region-codes.md § Where the region code appears`. ### Step 2 — Confirm the review gate Docs require an explicit review before every state-changing step (`docs/local/03-00-control-plane.md § Review before execution`; `§ Run`). ### Step 3 — Run the documented control-plane deploy From `CONFIG_REPO_PATH`, exactly per `docs/local/03-00-control-plane.md § Run`: ```bash set -e cd "$CONFIG_REPO_PATH/WORKSPACES" "$SAP_AUTOMATION_REPO_PATH/deploy/scripts/deploy_controlplane.sh" \ --deployer_parameter_file \ "$CONFIG_REPO_PATH/WORKSPACES/DEPLOYER/-INFRASTRUCTURE/-INFRASTRUCTURE.tfvars" \ --library_parameter_file \ "$CONFIG_REPO_PATH/WORKSPACES/LIBRARY/--SAP_LIBRARY/--SAP_LIBRARY.tfvars" \ --subscription "$ARM_SUBSCRIPTION_ID" || { rc=$? echo "control-plane exit=$rc — route to sdaf-failure-triage" exit "$rc" } ``` Do not claim success unless the exit code is `0` AND the validation checks in Step 5 pass. Treat `exit 2` as a validation-gate failure that must not be silenced. ### Step 4 — Do not update SDAF between plan and apply `docs/local/01-00-prerequisites.md § Pin versions`. ### Step 5 — Validate `docs/local/03-00-control-plane.md § Validate` and `§ Outcome`: - Deployer + library deployed. - Terraform state migrated to the library storage account (`tfstate` container) — see `§ What the automation does`. - `.sap_deployment_automation` metadata populated (`§ What the automation does`, `§ Validate`). - Summary written (`§ Outcome`). ## If the run fails Route to **`sdaf-failure-triage`**. It walks `docs/local/troubleshooting.md` and hands back the specific documented anchor. Stage-owned preventive checks (that belong here rather than in triage): - Filename / directory / basename mismatch — fix before rerun (`docs/local/troubleshooting.md § A parameter file is not found`). - Interrupted control-plane rerun with `--recover` — do so only after the state agrees (`docs/local/troubleshooting.md § A control-plane run stopped partway through`). ## Hard rules - Documented behaviour only (D19). If a knob is not in the shipped docs or the script's own `--help`, do not describe it. - Do not pass `--auto-approve` for reviewed local deployment (`docs/local/03-00-control-plane.md § Review before execution`). - Do not `--force` casually (`docs/local/03-00-control-plane.md § Safe retry`). - Repo-wide rules apply: **do not run `terraform fmt`** and follow the Terraform / Ansible / Python guidance in [`.github/copilot-instructions.md`](../../.github/copilot-instructions.md). ## See also - `sdaf-workspace-and-tfvars`, `sdaf-readiness-check`, `sdaf-workload-zone`, `sdaf-sap-system`, `sdaf-safe-removal`, `sdaf-sovereign-cloud`, `sdaf-failure-triage`. - `docs/local/03-00-control-plane.md`, `docs/local/troubleshooting.md`, [`.github/copilot-instructions.md`](../../.github/copilot-instructions.md).