tenant-gitops-onboarding
Execute the 22-stage multi-branch Kubernetes, Cloud IAM, KMS, and ArgoCD GitOps tenant onboarding workflow using examples/tenant_gitops_onboarding/actions.py.
작성자를 위한 경고
- "name" should match the name of the directory that holds SKILL.md
- Not listed through the skills extension: the directory must be named after the skill.
Enterprise Tenant GitOps Onboarding (tenant_gitops_onboarding)
Executes the 22-stage multi-branch tenant onboarding pipeline across 4 phases
using examples/tenant_gitops_onboarding/actions.py. Persist a single state
dictionary (payload) across turns (e.g., /tmp/tenant_state.json) so every
stage's return dictionary is recorded under
payload["outputs"]["<stage_name>"].
Phase 1 — Spec Resolution, RBAC Check & Change Advisory Gate (6 stages)
init_spec: Callactions.initialize_spec(payload)(alias,compliance_tierin{"standard", "pci", "hipaa"},sandbox_dir). Store underoutputs["init_spec"].check_admin: Callactions.check_operator_is_admin(payload). Store underoutputs["check_admin"].verify_spec(Human/Operator Gate 1):- STOP and present
outputs["init_spec"](alias,k8s_namespace,compliance_tier) to the requester. - Wait for explicit
{"approved": True}. Store underoutputs["verify_spec"].
- STOP and present
- Branch Pattern #1 — Role-Based Early Handoff
(
outputs.check_admin.is_admin):create_ticket(run ifoutputs.verify_spec.approved == True): Callactions.create_provisioning_request(payload)->outputs["create_ticket"].stop_non_admin_stage(run ifis_admin == False): Callactions.stop_non_admin(payload)->outputs["stop_non_admin_stage"]and exit early.wait_governance_approval(run ifis_admin == True): Pollactions.check_governance_approval(payload)untild["governance_approved"] == True. Store underoutputs["wait_governance_approval"].
Phase 2 — IdP Groups, SCIM 2.0 Push & Cloud IAM Workload Identity (6 stages)
provision_identity_groups: Callactions.provision_identity_groups(payload)->outputs["provision_identity_groups"].wait_scim_sync: Pollactions.check_scim_ready(payload)untild["scim_ready"] == True->outputs["wait_scim_sync"].create_workload_iam_role: Callactions.create_workload_iam_role(payload)->outputs["create_workload_iam_role"]. Inspectiam_status = outputs["create_workload_iam_role"]["iam_status"]:- Branch Pattern #2 — 3-Way Status Fan-Out +
ALL_DONEConvergence:fail_on_iam_failed(run ifiam_status == "FAILED"): Callactions.fail_workflow(payload)and abort.prompt_iam_quota_override(Human/Operator Gate 2) (run ifiam_status == "QUOTA_EXCEEDED"): STOP and ask the security operator for{"approved": True, "quota_override_approved": True}. Store underoutputs["prompt_iam_quota_override"].wait_iam_role_ready(run ifiam_status == "SUCCESS"OR (iam_status == "QUOTA_EXCEEDED"andquota_override_approved == True)): Pollactions.check_iam_role_ready(payload)untild["iam_role_ready"] == True->outputs["wait_iam_role_ready"].
- Branch Pattern #2 — 3-Way Status Fan-Out +
Phase 3 — Backing-Resource Diamond & Compliance-Tier KMS Branch (4 stages)
provision_external_resources: Callactions.provision_external_resources(payload)(retry up to 2 attempts; on failure callactions.rollback_external_resources(payload)) ->outputs["provision_external_resources"].- Branch Pattern #3 — Compliance-Tier KMS Mutual Exclusion
(
outputs.init_spec.compliance_tier):provision_dedicated_kms_key(run ifcompliance_tier == "pci"): Callactions.provision_dedicated_kms_key(payload)->outputs["provision_dedicated_kms_key"].apply_shared_kms_policy(run ifcompliance_tier != "pci"): Callactions.apply_shared_kms_policy(payload)->outputs["apply_shared_kms_policy"].
checkpoint_catalog(join after storage + KMS complete): Callactions.checkpoint_registry(payload)->outputs["checkpoint_catalog"].
Phase 4 — Declarative GitOps PRs & ArgoCD Sync (6 stages)
scaffold_k8s_gitops_pr: Callactions.scaffold_k8s_gitops_pr(payload)->outputs["scaffold_k8s_gitops_pr"].wait_k8s_gitops_pr: Pollactions.check_pr_merged(payload, target_stage="scaffold_k8s_gitops_pr", target_pr_key="k8s_pr_id")untild["pr_merged"] == True->outputs["wait_k8s_gitops_pr"].wait_argocd_namespace_sync: Pollactions.check_argocd_synced(payload, app_name="tenant-namespace", required_pr_stage="wait_k8s_gitops_pr")untild["app_synced"] == True->outputs["wait_argocd_namespace_sync"].package_mesh_and_catalog_pr: Callactions.package_mesh_and_catalog_pr(payload)->outputs["package_mesh_and_catalog_pr"].wait_mesh_and_catalog_pr: Pollactions.check_pr_merged(payload, target_stage="package_mesh_and_catalog_pr", target_pr_key="catalog_pr_id")untild["pr_merged"] == True->outputs["wait_mesh_and_catalog_pr"].wait_argocd_mesh_sync: Pollactions.check_argocd_synced(payload, app_name="mesh-and-catalog", required_pr_stage="wait_mesh_and_catalog_pr")untild["app_synced"] == True->outputs["wait_argocd_mesh_sync"].
이 스킬의 파일
이 스킬에는 보조 파일이 없습니다.