Deploy a Customer Edge in GCP
Before you begin
Section titled “Before you begin”Plan one dual-interface F5 Distributed Cloud Customer Edge (CE) in an authorized Google Cloud Platform (GCP) test project. Allow roughly 30–50 minutes; registration and upgrades usually take 20–45 minutes, and cold downloads can take longer.
- Access and tools: tenant permission to create and delete a site, GCP command-line authentication, separate Terraform Application Default Credentials, sufficient N2 and storage quota, and Terraform 1.5 or newer. For impersonation, supply the service-account email and owning project; Token Creator and target-project deployment permissions are separate prerequisites.
- Private provider: obtain an invitation to F5Networks/terraform-provider-f5xc- preview and authenticate release access. A private- repository 404 can mean missing access. Each fresh run discovers the newest non-draft release, including prereleases, checks platform support, and binds its exact version and checksum to the saved plan. Existing deployments need a reviewed upgrade plan.
- Inputs: project, region/zone, unique short prefix, two checked non-overlapping private
/26ranges, tenant API URL and private credential source. SSH defaults to none. Keep credentials outside chat and Terraform inputs; state, saved plans, metadata and raw evidence remain private.
The default architecture uses one n2-standard-8 VM without a public IP, separate outside (SLO) and inside (SLI)
networks, SLO Cloud NAT, and Secure Mesh Site v2 JWT registration. NIC order is ens4 → SLO, ens5 → SLI. The saved
plan creates 15 resources, or 16 with optional SSH. The 120 GB pd-balanced boot disk reserves 50% above F5’s 80 GB
Mesh minimum; planning checks current requirements, image size, quota and cost. Verify guest-usable space separately.
Omit Shielded VM configuration for non-UEFI images; review token-dependent metadata before apply and verify live values
privately afterward.
Copy the complete prompt
Section titled “Copy the complete prompt”Enable your agent’s planning mode, copy the whole prompt, and replace bracketed inputs or request checked proposals. Review the discovered environment and scoped plan before approval.
- Planning: read-only and artifact-free by default. Required planning documents need separate affirmative approval naming the absolute workspace and every relative path. Cancellation, silence, timeouts and automatic tool permissions grant no consent. Workflow agents inherit only the approved scope.
- Setup and deployment: all five IAM gates and a private administrator request appear when blocked. Administrator IAM/API changes, local authentication, installations, checkpoints, planning files, the licence probe and deployment retain separate approval boundaries. Access rechecks run for at most ten minutes; auth-status output alone does not prove invalid credentials.
- Resume: checkpoint schema v2 binds planning-file consent to workspace and paths, reads legacy v1, rejects traversal/symlink escapes, and invalidates dependent approval when scope changes. Fixed JSON fields and boolean approvals prevent checkpoint consent from implying other setup. Preserve and repair output-limit failures, verify actual files, and follow host privilege and corporate trust policy without changing system settings.
# Deploy a Customer Edge in GCP
Work in native planning mode first. Use only authorized read-only investigation.Do not edit files, install tools, create licence probes, initialize Terraform,deploy, or change external state until I explicitly approve your scoped plan.Stop after the plan and wait for approval. Once approved, implement and verifythat plan continuously, keeping the session active through registration.During planning, disable file-writing, memory-writing and delegation tools bydefault; allow only read-only investigation and return the plan in chat. Do notinvoke a memory tool to create plan.md in native session memory.If the IDE's Plan mode normally saves a file, skip that optional step or disableits writing tool for this session; report a mandatory-writing limitation beforeproceeding. Automatic platform chat/tool history is allowed. Do not change theuser's normal profile or global settings to enforce this boundary.Before creating any native planning documents, offer a separate planning-fileapproval with the exact absolute workspace and relative file paths. If declined,keep planning read-only and artifact-free. If the selected platform offers astructured planning workflow, propose only the documents and metadata it requires,with their exact paths; do not assume a particular product, directory or filename.Approval permits only those named documents and necessary parent directories.Require an explicit affirmative response approving that exact scope. Cancelled,dismissed, declined, unanswered or timed-out interactions grant no approval.Automatic tool permissions, workflow transitions and a request to continue do notsubstitute for scoped consent. If the outcome is ambiguous, keep planning in chatand pause file creation; never dispatch a writing agent on that outcome.Any delegated workflow agents receive the same scope; do not delegate widerwrites or execute implementation tasks until the deployment plan is approved.Check path containment before every write; reject traversal and symlink escapes.Inventory all workspace changes, including hidden files, at each approval boundary.Keep planning documents concise while retaining every acceptance gate; referencethe canonical prompt's full hash rather than duplicating commands or schemas.Use complete tool arguments within the selected platform's supported limits;split larger documents or use targeted edits within the approved paths as needed.An output-limit stop, incomplete arguments or failed validation is a failedrequest, not a write. Preserve it and repair the request; never repeat it unchangedor infer file creation from a preview. Verify actual files after writing withoutbroadening approval or resetting deadlines. Pass these constraints to any agents.Authentication, installations, checkpoints, IAM administration, licence probesand deployment retain their separate approvals. Return the five prerequisitegates and private IAM-team request in chat even when planning documents are approved.After file-creation approval, enable only the writing tools needed for that scope.Planning-document approval never permits diagnostic captures, temporary files,backup copies or command-output files in any directory. Capture BOTH stdout andstderr in memory through returned tool output or subprocess pipes; never redirectthem to filesystem paths during planning. Deleting or redacting a temporary filelater cannot authorize its creation. Diagnose authentication errors using onlynon-secret categories/status from captured output, not a redaction pipeline.
## Objective and inputs
Deploy one Secure Mesh Site v2 Customer Edge in an existing authorized test GCPproject, using Terraform and two network interfaces. This is a greenfield PoC.
GCP project: [Existing deployment project ID]GCP caller principal: [Human user:email or serviceAccount:email running Terraform]GCP quota project: [Explicit quota project ID for ADC/API requests]GCP authentication: [Existing ADC, service-account impersonation (recommended fora service account), or an organization-required private service-account JSON key]GCP service account: [Full service-account email and its owning project, if used]GCP credential source: [Existing local ADC or private JSON key-file path; never paste keys]Region and zone: [Region and zone, or request an evidence-based recommendation]Name prefix: [Unique DNS-safe short prefix]SLO subnet: [Non-overlapping private /26 CIDR, or request a checked proposal]SLI subnet: [Different non-overlapping private /26 CIDR, or request a checked proposal]F5 Distributed Cloud tenant: [Authorized tenant API URL ending in /api]XC credential source: [Private credential file or inherited environment; never paste secrets]SSH: [None by default; optional public key and narrowly scoped source CIDRs]CE boot disk: [120 GB pd-balanced default; increase for current image or workload requirements]Prompt provenance: [Exact canonical prompt file/attachment or independently supplied full SHA256 for checkpointing]
Exclude HA, workload VMs, load balancers, origin pools, Windows VM provisioning,and changes to unrelated infrastructure. Do not copy reference Terraform orconfiguration from elsewhere on disk. Generate this deployment from this promptand your own environment discovery. Existing owned state may be inspected toidentify a resume, but never adopt or remove unowned resources.
## Read-only discovery
For a clean-room qualification iteration, start a fresh native chat in a newempty workspace and verify its inventory before any setup. Supply only thiscanonical prompt and current customer inputs; do not copy earlier Terraform,plans, state, checkpoints or remediation hints into the new run. Preserve priorattempts privately. Verify prior task-owned deployment resources are absentbefore starting another deployment; uncertainty blocks that iteration. Existingcredentials, the configured profile and approved tools may remain outside theworkspace, but reverify identities and discover the latest provider each time.Do not clear an existing workspace or delete unrelated resources to make it clean.A requested resume is a separate workflow and preserves its checkpoint/ownership.
Discover the operating system, architecture, shell, available native commands,Terraform version (at least 1.5), terraform-docs availability/version,JSON/HTTP/archive/SHA256 tooling, and credentialmechanisms. Check terraform-docs before proposing its installation. If installed,include docs/terraform.md generation in approved file preparation by default,without a separate documentation-choice question. If missing, first ask whetherthe user wants generated docs, explaining that yes requires installingterraform-docs as part of local setup. Continue independent read-only checkswhile awaiting that choice. Yes includes verified installation in the setup plan;no skips installation and docs generation without blocking CE deployment. Respectan explicit opt-out and retain the choice on resume; do not ask again or silentlyinstall it. Planning itself never creates docs or installs tools. Select commands appropriate to the discovered environment ratherthan assuming a shell, operating system, harness, plugin or tool name.Verify the shell actually used by the agent's terminal tool. Run a harmlessmultiline output check and confirm complete output and exit status before longcommands. macOS Bash 3.2 and shell wrappers can corrupt multiline input or losetool output. Prefer an already-installed Bash 5+ or another verified native shell;use task-local clean startup configuration when hooks interfere. Do not changethe user's normal shell/profile or install a shell during planning. Lost outputis UNKNOWN, not success; repair the terminal and rerun affected checks withoutchanging identities, repeating installations or resetting deadlines. Neverprint credential values, even while checking whether a variable is present.Report only presence, identity where needed, status and redacted evidence.Load credential sources only for named-variable presence checks and authenticatedrequests. Never display, byte-dump, trace or log a credential source, even througha redaction filter. Never use cat, od, xxd, shell tracing or partial secret masksto diagnose credentials or shell behavior. Diagnose shell/path issues withoutreading secret bytes; use task-specific variable names that cannot alter PATH.Discover and follow the host's installation and privilege policy. Reuse installedtools and include only permitted installation methods in a separately approvedsetup plan. If elevated privileges are prohibited, do not request them. Use theorganization's required package manager and security hooks when applicable.Never change system trust, the normal profile or global settings to repair transport.Before authenticated checks, discover existing corporate CA configuration fromnon-secret path metadata and installed CLI settings. A wrapper's session CA bundlemay omit corporate interception roots even when native login works. Preserve TLSverification and use the existing corporate CA for the affected request or commandprocess only; use an in-memory SSL context or scoped child environment. Do notcreate or install a CA bundle during artifact-free planning. If trust is unclear,report transport UNKNOWN and pause. Recheck authenticated API identity and privaterepository access before diagnosing an invalid GitHub token or asking for login:an auth-status failure behind a wrapper does not prove the stored credential isinvalid. Never refresh or replace credentials to bypass an unresolved TLS failure.During planning, apart from separately approved native planning documents, create notemporary scripts, HTTP response files, diagnostic files or output redirections,inside or outside the workspace. Perform checksand parse responses in memory. A file-reader or search tool that returnscredential bytes is disclosure, even if you never quote those bytes afterward.If the available planning tools cannot make authenticated requests privately,report the affected gates as UNKNOWN and pause rather than reading credentialsinto the conversation or inferring a grant from incomplete evidence.
Access tokens and API keys must never appear in process command arguments.This includes curl -H headers, query URLs, --data-urlencode, and shell-variableexpansion into command arguments. Capture generated tokens privately and issueHTTP requests inside the same process, using an HTTP library with authorizationheld in memory. Disable tracing and return only selected non-secret metadata.Do not use curl output files or shell pipelines to verify token identity.
Verify the active GCP identity and project, API access, and Terraform ApplicationDefault Credentials independently of CLI login. Do not print access tokens.Use the selected GCP identity for Terraform and every GCP discovery, licence-probe,deployment and cleanup-verification command. Never silently fall back to theuser's own compute permissions when a service account was requested.If requested service-account impersonation is BLOCKED or UNKNOWN, do not runCompute Engine discovery as the human caller, even when labelled "callerevidence". This includes public-image/licence reads, subnets/routes, quotas,machine types and firewall inventories. Keep those checks pending until accessis freshly verified. The caller may check its own identity and authentication,the requested service account's IAM access, Resource Manager project identity,and API enablement; private provider-release and XC discovery may continue.Return the blocked table and IAM-team request promptly, without trying anotherGCP identity. After the separate administrator grant, resume SA-scoped discovery.During planning, use only read-only list/get/describe/help operations, permissiontests and short-lived authentication requests. These tests may use HTTP POST;they must never change IAM, APIs, resources or local authentication configuration. Never execute create,update, delete, reset or install commands to test syntax or permissions. Neverassume a dry-run flag, background a mutation and kill it, or treat cancellationas proof that no resource was created. Licence acceptance can only be proved bya probe after plan approval; report it as unverified during planning.Inventory all project subnets including secondary ranges; check proposed SLO/SLIranges against them and each other. Confirm n2-standard-8 availability in thechosen zone and at least eight free regional N2 vCPUs plus disk/network quotas.Plan operating capacity, not just image bootability. Recheck F5's current Meshrequirements at https://docs.cloud.f5.com/docs-v2/multi-cloud-network-connect/reference/ce-site-size-refand its GCP deployment guide. The documented Mesh baseline is 80 GB minimum;this prompt defaults to 120 GB to reserve 50% above that minimum for software,logs and upgrades. This is an engineering headroom policy, not a claim that F5recommends 120 GB. Use at least max(120, ceil(1.5 * max(current F5 minimum,image diskSizeGb) / 10) * 10) GB, increasing further for measured workload needs.Verify pd-balanced support, selected-region storage quota and current pricing;Persistent Disk capacity is independent of the n2-standard-8 machine flavor.In us-east4, the catalog checked on 2026-10-23 lists zonal Balanced PD atUSD 0.11/GiB-month: 120 costs about 13.20/month, 4.40 more than 80, excludingsnapshots/taxes. Recheck for the actual region; never downsize to the imageminimum merely to save that small difference.Check effective firewall policies: these VPC rules cannot override higher-leveldeny policies. In a fresh deployment, the new VPCs do not exist yet. Unavailableorganization/folder policy inspection stays UNKNOWN with evidence; do not demandorganization-wide IAM grants or infer a deny from an inspection 403. Includepost-creation effective-firewall checks on the exact owned VPCs in the approvedplan, before VM provisioning. A concrete incompatible policy is BLOCKED and mustbe resolved by its administrator; do not bypass it. Inspect existing state and exact-prefix GCP/XC resources to detectfresh, healthy-existing, interrupted, or orphaned runs. Keep existing ownershipand names on resume. Flag missing access or ambiguous ownership before planning.
Private provider access is a prerequisite: the customer must be invited toF5Networks/terraform-provider-f5xc-preview and authenticate release access.An inaccessible private repository may return a misleading 404. The repositoryprovides prebuilt releases; do not assume it is on the public Terraform registryor attempt to compile it. Environment tokens can shadow stored GitHub credentials;check presence without exposing values and select a verified authenticated identity.
At the start of every fresh run, discover the LATEST available preview release.Enumerate all authenticated release pages and select the newest non-draft releaseby publication time, INCLUDING prereleases. Do not use a version remembered fromthis prompt, a prior receipt, an existing mirror or a cached Terraform lockfile.Do not use GitHub's stable-only latest-release endpoint or choose an older releasewhen the newest lacks a native asset. Missing native assets or an exact checksumblock deployment with evidence; do not compile the provider or silently fall back.Resolve the selected release's exact version, native platform zip, asset identityand published SHA256. Recheck the release catalog before implementation; if a newerrelease appeared, return an updated plan with its schema and checksum for review.Then bind the reviewed saved plan to that selected exact version and immutableasset. This per-run binding prevents changes between plan and apply; it is not afixed default for future runs. A resumed or existing deployment keeps its reviewedprovider binding until a separate reviewed upgrade plan changes it.
Disclose the node-local service policy DURING PLANNING using the selected latestrelease's documentation and schema. Do not infer behaviour from a negative fieldname: blocked_services_choice.block_all_services=true has been documented as"Enable all Node Local Services" (WebUI, SSH and DNS). Verify that interpretationfor the selected release and explain the resulting policy. Preserve the reviewedpolicy; GCP SSH access still defaults to none. Confirm the selected schema beforedeployment. Report any unresolved semantics before deployment approval, notafter creation. Do not silently invert the choice or equate GCP SSH reachabilitywith the XC node-local service policy; a different policy needs a reviewed plan.
List f5xc-ce-crt-* images from f5-7626-networks-public, compare newest by namewith newest by creation time, explain disagreements, and pin an approved fullimage name and immutable identity. There is no CE image family. Inspect itslicences read-only. A disk licence probe creates a resource and belongs only inthe approved implementation plan. Check XC access with validated read-onlyresponses; HTTP 200 alone does not establish a valid site or coverage.JWT registration-token inventory uses /register/namespaces/system/tokens, andexact token reads/deletion checks use that route plus the state-owned token nameor ID. /config/namespaces/system/tokens is not this token route; its 404 does notprove token absence. Validate the actual register response and exact ownership.
Ask only for missing inputs or material unresolved decisions. Give checkedrecommendations; do not ask again for values already supplied. Never requestthat secrets be put in chat. A credential file must be private, outside theTerraform directory, and loaded into every command that needs it without logging.
## GCP IAM preflight and administrator handoff
Before checking permissions, identify the actual caller principal, requestedTerraform service account and its owning project, deployment project, explicitquota project and credential method. The human running Terraform and an optionalidentity attached to the VM are different. This recipe requires no VM serviceaccount; do not attach one merely to run Terraform as a service account.
Return one prerequisite table in the conversation, without creating workspacefiles (including plan.md). Every row has gate, PASS/BLOCKED/UNKNOWN, reason andevidence, caller, target resource, responsible team, next action and UTC observationtime. The status cell must be exactly PASS, BLOCKED or UNKNOWN, with no qualifier.Do not introduce PARTIAL or another status. Put passing subchecks and pendingsubchecks in the evidence column. For each gate, a validated missing requirementmakes it BLOCKED; otherwise an unverified required check makes it UNKNOWN; PASSrequires every required check to pass. In particular, caller identity alone cannotpass identity selection before the effective Terraform identity is verified, andenabled APIs cannot pass the API/quota gate while capacity is unchecked.Never include tokens, key contents or complete IAM policies. The five gates:1. Identity selection: verified caller and effective Terraform identity, requested service account/project, deployment project and credential method agree.2. Impersonation access: the verified caller has iam.serviceAccounts.getAccessToken on the exact requested service account, and a short-lived token request works. For direct ADC/key authentication, explicitly report impersonation not used.3. Deployment permissions: the selected Terraform identity has the needed create/read/update/delete permissions for instances, disks, VPC networks, subnets, firewall rules, routers and NAT in the deployment project. Include operation polling, image use and external image read access. If a VM identity is explicitly requested, separately test iam.serviceAccounts.actAs on it.4. APIs/quota project: Compute Engine, IAM and IAM Credentials APIs are enabled where needed, and the actual quota-project identity has serviceusage.services.use. Independently inspect regional quotas and machine availability; API availability alone does not pass capacity checks.5. CLI/ADC authentication: independent authenticated read-only requests verify both paths use the selected identity. Expired auth, conflicting credential sources, double impersonation or unverified ADC identity cannot pass.
Use resource-specific testIamPermissions authenticated as the identity beingchecked: POST https://iam.googleapis.com/v1/projects/-/serviceAccounts/EMAIL:testIamPermissionswith permissions=["iam.serviceAccounts.getAccessToken"] using the caller; POSThttps://cloudresourcemanager.googleapis.com/v1/projects/PROJECT:testIamPermissionswith the exact deployment permissions using the Terraform identity; POSThttps://compute.googleapis.com/compute/v1/projects/f5-7626-networks-public/global/images/IMAGE/testIamPermissionswith permissions=["compute.images.useReadOnly"] using that identity for the exactresolved CE image; and the same project endpoint for serviceusage.services.use in the explicit quota project.Keep bearer tokens only in private process memory. Verify identities through anindependent authenticated identity request, not the requested account name alone.Prefer POST https://oauth2.googleapis.com/tokeninfo with an application/x-www-form-urlencodedaccess_token body assembled inside the private process. Validate a non-emptyemail matching the expected caller/service account. Public OAuth/OpenID identityrequests must omit x-goog-user-project; applying a GCP quota header to the OpenIDuserinfo endpoint can return 403 even when impersonation and token generationwork. Keep the explicit quota header for GCP resource/API requests. A failedidentity endpoint is UNKNOWN, not evidence that Token Creator is missing; inspectits HTTP status/shape instead of spending the propagation budget on a wrong request.Test short-lived impersonation with the IAM Credentials generateAccessTokenendpoint with cloud-platform AND userinfo.email scopes so tokeninfo can verifythe service-account email; privately validate accessToken/expireTime and use it for read-onlycompute requests. Check API states through authenticated Service Usage GETs.A successful permission-list response must have a valid JSON object and a listof permission strings (an omitted permissions field means none granted). Missingrequested permissions in that validated response are BLOCKED. A generic 403,unreadable policy, conditional-policy uncertainty, invalid response, transportfailure or unavailable identity evidence is UNKNOWN with its own next action;never turn a generic 403 into a Token Creator diagnosis. Policy bindings aresupporting evidence only: narrow and project-level grants can both work; evaluateconditions, deny policies and current effective access rather than inferringsuccess from a visible binding. Recheck missing evidence before dependent work.
External-image exception: a readable shared/public image can return a valid emptyimages.testIamPermissions result, including for compute.images.get even thoughimages.get works. Keep that discrepancy UNKNOWN; neither metadata read nor theempty permission list alone establishes image-use access. Validate the exactimage name, immutable ID and READY state through authenticated images.get. Donot invent a publisher IAM grant or require a customer to administer the publicimage project. If caller/impersonation, deployment-project permissions, APIs andCLI/ADC checks pass and only image-use/licence or prospective-policy evidence isunresolved, return a reviewable phased plan. It may include a separately approvedtemporary licence probe and owned-network policy checks before VM provisioning.This is approved implementation, never a planning mutation. A successful diskcreation from the exact pinned image as the selected identity proves image-useand licence capability; record the evidence and verify probe deletion beforepassing that gate. A failure pauses dependent deployment with its actual error,without a guessed grant, unreviewed retry or identity fallback.
The intended caller needs impersonation permission ON the requested serviceaccount. Granting Token Creator to the service account itself does not grant thehuman caller access. roles/iam.serviceAccountTokenCreator on that service accountis a standard option; a correct project-level grant in its owning project canalso work, while a service-account-level grant is narrower. Token Creator doesnot grant deployment permissions. Preserve approved custom roles. Describeroles/compute.admin only as a broad option requiring administrator approval;never silently recommend Owner or Editor. roles/iam.serviceAccountUser grantsactAs for an attached VM identity, not getAccessToken for impersonation.
For blocked access, return ONE private, copyable request for the customer's IAMteam in the conversation, containing the verified caller principal, exact targetservice account and owning project, deployment/quota projects, missing permissionor approved role, observed sanitized failure/time and recheck steps. For verifiedmissing impersonation include this administrator command with actual selectedvalues, properly quoted for the discovered shell:gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL --project=SERVICE_ACCOUNT_PROJECT --member=CALLER_PRINCIPAL --role=roles/iam.serviceAccountTokenCreatorState that a binding to the service account itself is insufficient. For computeor API blockers ask the administrator to retain approved custom roles or enableonly required APIs; do not invent a broad grant command. UNKNOWN requests ask forinvestigation of the specific evidence failure, not an assumed IAM grant.Do not send the request automatically or ask the sales engineer to change IAM.Do not create service accounts/keys, grant roles, enable APIs or alter organizationpolicies as part of CE deployment. IAM administration is a separate approval andoperator step from local authentication setup and from deployment approval.
Pause dependent work until administrator confirmation. Only then recheck effectiveaccess every 30 seconds, for at most ten minutes from confirmation, includingrestarts. Retain sanitized observations privately after local setup approval;before that keep the table/request in the conversation. A timeout preservesfailures and pauses: it does not prove a grant is wrong. Group membership changesmay take longer. Do not repeat an IAM change or restart the propagation budget.After access works, refresh all five gates before proposing deployment.
## GCP service-account authentication
Inspect existing authentication read-only. If setup is missing, present theauthentication prerequisite plan and wait for explicit approval before login,ADC-file creation or local authentication changes. Human browser authenticationbelongs to the customer. Then rerun discovery as the selected identity beforepresenting the deployment plan. No prerequisite setup authorizes deployment.
For approved impersonation setup, prefer local impersonated ADC. Select nativecommands and explain the equivalent of:gcloud auth logingcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAILTerraform's Google provider uses this ADC automatically, without a JSON key.For each supporting GCP CLI operation, explicitly use--impersonate-service-account=SERVICE_ACCOUNT_EMAIL and --project=TARGET_PROJECT_ID.CLI login alone does not make Terraform impersonate the service account.
An alternative is existing primary-user ADC with the Google provider'simpersonate_service_account setting or GOOGLE_IMPERSONATE_SERVICE_ACCOUNT.Use exactly one Terraform impersonation method: do not add provider impersonationon top of already impersonated ADC. Detect conflicting explicit credentials orGOOGLE_APPLICATION_CREDENTIALS before selecting ADC; resolve them within theapproved task environment without changing unrelated CLI profiles.
If the customer requires an existing JSON key, use its private file path outsidethe Terraform/input directory via GOOGLE_APPLICATION_CREDENTIALS. Configure thetask's GCP CLI to use that same service account and key, using the nativeequivalent of gcloud auth activate-service-account SERVICE_ACCOUNT_EMAIL--key-file=PRIVATE_KEY_PATH --project=TARGET_PROJECT_ID only after approval.Do not create or download a key. Do not paste its contents, inline credentialsinto HCL/tfvars, or place credential values in command arguments or transcripts.Keep key files and local credential stores owner-only or equivalently protected.
Verify with authenticated read-only project/compute queries under the selectedidentity and a private ADC-backed request for Terraform; never display generatedaccess tokens. Record method, effective service-account email, target project andany quota project. If verification fails, stop dependent work and report thespecific missing prerequisite; do not create resources during IAM preflight.The separately reviewed image/licence probe described above is an explicitimplementation phase, not permission testing during planning.GCP authentication is separate from private GitHub provider-release access andthe XC API token. A private .env may supply F5XCProvider_URL andF5XCProvider_API_TOKEN; .env files are not loaded automatically by Terraform.Load only the required named values privately into each process that needs them.Keep customer-owned service accounts, IAM bindings and credential sources afterCE teardown; they are not owned resources of this Terraform state.
## Private checkpoint and same-session resume
During native planning, return prerequisites and the IAM-team request in chat;create no files except the separately approved native planning documents. Do notdownload a helper or create plan.md. This prompt containssufficient instructions to perform the checks without downloading a helper.After explicit local setup approval, save an owner-only checkpoint outside theworkspace with the SHA256 of this exact prompt, caller, Terraform service account,service-account project, deployment/quota projects, credential method, completedgate observations, outstanding administrator requests, scoped approvals includingseparate planning-file approval and its exact workspace/path scope,installation receipts and the original propagation deadline. Store no token, keycontents, complete IAM policy, credential-bearing response or raw transcript init. Raw failures belong only in separate private evidence with secret handling.A checkpoint-only approval authorizes ONLY that checkpoint. Planning-file approval alonecannot authorize checkpoint creation. Checkpoint approval does not authorizenative session-memory plan files, workspace plan.md, scripts or other artifacts.Keep the plan in chat until its own planning-file approval; always return theIAM-team request in chat. Private or agent-owned storage is not an exemption.Use exactly the following core JSON field names and structure so checkpointsremain readable across platforms and by the helper. Substitute observed values;never retain example placeholders or copy example approval/status values as facts.Do not rename fields or replace boolean approvals with status objects. The sixselection fields are strings. If no service account is selected, both service-accountfields are empty and credential_method is existing-adc; otherwise use the chosenmethod from the enum shown below.local_setup records checkpoint-persistence consent ONLY. It never authorizesauthentication changes, installations, other files or deployment. The approvalsmap contains only these four booleans. Other action scopes require their ownseparately approved receipts; do not invent additional core approval flags.planning_scope is null when no planning files are approved; otherwise it is{"workspace": "[exact absolute approved workspace]", "paths": ["[exact approved relative file]"]}.Copy all approved paths into that list. Record the pending private IAM-team requestas an object in outstanding_request; use null only when no request is outstanding.installation_receipts contains only verified SHA256 digests, never log text.propagation_deadline is null before administrator confirmation; on confirmation,set it once to confirmation time plus 600 seconds, as numeric UTC Unix seconds,BEFORE any propagation polling. Its original confirmation time is deadline minus600 seconds. Preserve that deadline across retries and same-session recovery.Checkpoint v2 core JSON template:```json{ "schema_version": 2, "prompt_sha256": "[Full SHA256 of this exact canonical prompt]", "selection": { "caller": "[user:email or serviceAccount:email]", "service_account": "[Service-account email, or empty for existing-adc without a service account]", "service_account_project": "[Service-account owning project, or empty when no service account]", "deployment_project": "[Deployment project ID]", "quota_project": "[Quota project ID]", "credential_method": "[existing-adc, impersonated-adc, provider-impersonation or json-key]" }, "gates": [ { "gate": "identity_selection", "status": "UNKNOWN", "reason": "[Actual evidence and remaining uncertainty]", "caller": "[Full caller principal]", "target_resource": "[Exact target resource]", "owner": "[Responsible team]", "next_action": "[Recheck or remediation action]", "observed_at": "[UTC observation time]" }, { "gate": "impersonation_access", "status": "UNKNOWN", "reason": "[Actual evidence and remaining uncertainty]", "caller": "[Full caller principal]", "target_resource": "[Exact target resource]", "owner": "[Responsible team]", "next_action": "[Recheck or remediation action]", "observed_at": "[UTC observation time]" }, { "gate": "deployment_permissions", "status": "UNKNOWN", "reason": "[Actual evidence and remaining uncertainty]", "caller": "[Full caller principal]", "target_resource": "[Exact target resource]", "owner": "[Responsible team]", "next_action": "[Recheck or remediation action]", "observed_at": "[UTC observation time]" }, { "gate": "apis_quota_project", "status": "UNKNOWN", "reason": "[Actual evidence and remaining uncertainty]", "caller": "[Full caller principal]", "target_resource": "[Exact target resource]", "owner": "[Responsible team]", "next_action": "[Recheck or remediation action]", "observed_at": "[UTC observation time]" }, { "gate": "cli_adc_authentication", "status": "UNKNOWN", "reason": "[Actual evidence and remaining uncertainty]", "caller": "[Full caller principal]", "target_resource": "[Exact target resource]", "owner": "[Responsible team]", "next_action": "[Recheck or remediation action]", "observed_at": "[UTC observation time]" } ], "outstanding_request": null, "approvals": { "local_setup": true, "planning_files": false, "iam_administration": false, "deployment": false }, "planning_scope": null, "installation_receipts": [], "propagation_deadline": null}```Write checkpoint schema version 2 and continue reading legacy version 1 withoutinferring planning-file approval. Revalidate workspace/path containment on resume;workspace or path changes revoke planning-file and dependent deployment approval.Copy the five complete prerequisite rows into the checkpoint, including status,reason/evidence, caller, target resource, owner, next action and observation time.PASS rows also retain a responsible team and recheck action; required metadatamust not be replaced with dashes or omitted.Save the initial pending gate rows, selected identities, approvals and originalconfirmation deadline BEFORE starting propagation polling, then update thatcheckpoint with fresh observations. Do not wait until access succeeds to makethe deadline durable.Image-use uncertainty keeps the aggregate deployment-permissions gate UNKNOWN;do not record that gate PASS while an auxiliary image check remains unresolved.Hash the entire exact canonical prompt, never its title, first paragraph or anexcerpt. Use the supplied exact file/attachment bytes or independently verifiedfull hash. If provenance is missing, record hash UNKNOWN and resolve it beforecalling the checkpoint complete; continue independent read-only discovery.
On resume reload the checkpoint and reverify effective access and both auth paths;"the grant is done" is confirmation to recheck, never proof of access. Changes tocaller, service account, either project, quota project or credential methodinvalidate affected observations and dependent deployment approval; a changedprompt hash requires review against the revised scope. Recheck all five gatesbefore deployment. Preserve installation receipts: do not repeat approvedinstallations on session restart, silently change identities or deployautomatically. IAM confirmation, local setup approval and scoped deploymentapproval and planning-file approval remain separate. Passing authentication neverauthorizes deployment. A revised prompt also requires review of Planning-file approval.
## Plan and approval boundary
Present the discovered identities, prerequisites, selected exact provider assetand checksum, pinned image, zone, CIDRs, SSH choice, resource ownership, proposedcost and teardown. Include the GCP authentication method, effective serviceaccount if used, and separately approved authentication setup. Give objectiveacceptance criteria and ordered implementation,verification and recovery steps. List proposed installations, file creation,licence probe, and deployment explicitly. Identify the active IDE workspace(or current working directory in a terminal client). Default to relative paths:terraform/ for .tf files and saved Terraform plans, and docs/terraform.md whendocumentation is enabled. Include the documentation choice and any required toolinstallation in the plan. Generated files must appear in the workspace explorer.If the workspace is not private, proposean owner-only workspace and opening it before implementation. Do not silentlywrite Terraform into an unrelated sibling or scratch directory hidden from theactive workspace. Credentials stay outside the Terraform directory; the privatecheckpoint and provider scratch may remain outside the workspace. Planning mustcreate no workspace files and make no deployment changes.Stop after the plan. Require explicit approval before any of those mutations.
## Approved implementation
After approval, announce each phase and expected wait, then execute the scopedplan without asking for routine reconfirmation. Create the approved Terraformdirectory at ./terraform relative to the approved active workspace. Create ./docsonly when documentation is enabled. Verify the generated files are visible in its explorer.Preserve failures and private raw evidence. Download the selected release asset and checksums into a private taskscratch directory. Match exactly one checksum entry for the exact zip filename,verify SHA256 before extraction or installation, and reject missing, duplicated,malformed or mismatched checksums. Install into Terraform's native local pluginmirror for the resolved version and platform. Pin required_providers f5xc to thatEXACT version before init; reject an absent/loose constraint or an older cachedlockfile. Never copy a fixed provider version from the fallback template. Recordother resolved provider versions in the lockfile.
Create a uniquely named temporary disk from the pinned image in the selectedproject/zone to verify image-use capability and marketplace licence acceptance.The probe disk must be at least the pinned image's diskSizeGb; omit an explicitsize to use GCP's image minimum, or choose the approved CE boot-disk size. Thisimmediately deleted probe is not the operating CE disk and needs no upgrade reserve.Use this scoped phase to resolve the readable-public-image permission-testdiscrepancy when recorded in the approved plan. Record its ownership andprove deletion even after a failed probe. Never delete an unrelated probe disk.A failed marketplace acceptance prerequisite requires the customer's acceptanceof the terms before continuing.
When prospective policy evidence was UNKNOWN, first create only random_id andthe four owned network/subnet resources (five resources total, including theirnaming dependency) using an inspected saved plan, then validate effectivefirewalls on those exact VPCs. Stop on a concrete incompatible inherited rule.Inspect the subsequent saved plan for the remaining ten resources and applyonly it. Both plans together must match the approved fifteen-resource scope;never use unreviewed targets or recompute a plan at apply time. Record eachsaved-plan digest and the actual executor/identity. Optional SSH adds one resourceto the second plan, for sixteen total. If policy evidence wasalready sufficient, use the single complete saved plan instead.
Write nine grouped Terraform files: versions.tf, providers.tf, variables.tf,network.tf, firewall.tf, site.tf, token.tf, instance.tf and outputs.tf, plus privateinput values and an active-session registration poller. Keep the .tf files,private tfvars and Terraform state in ./terraform. Save Terraform plan binariesand their private review JSON under ./terraform/plans/ (or directly under./terraform), so the plan files are visible in the active workspace. Do not movethem into a sibling plans directory or an unrelated temporary folder because theyare sensitive: use owner-only directories/files instead. Provider scratch,checkpoint and raw HTTP/VM evidence may stay in private storage outside theworkspace. Keep configuration, state, plans, schemas and raw evidence private.When documentation is enabled, after fmt/validate use terraform-docs to generatedocs/terraform.md from the terraform/ module. Reuse the installed tool withoutanother question; install a missing tool only when the user chose docs and localsetup is approved. Verify its native download/checksum and retain the receipt.Keep generated docs in sync with configuration changes. Include requirements,providers, resources, inputs and outputs; never include credential values,registration tokens, raw state, IAM policies or saved-plan contents. Verify theTerraform directory and enabled documentation before deployment. If docs weredeclined, record them as skipped by choice, not a failure, and do not create anempty docs directory. When checkpoint saving is approved, retain the docs choice,tool availability and installation approval so resume does not repeat the question.Retain configuration and any generated docs through teardown for review.
Use random_id with byte_length=3 and local.name="${var.name_prefix}-${random_id.suffix.hex}".Derive every owned name and a task-specific CE tag from local.name. Scope everyfirewall rule to that matching VM tag. Create two custom-mode VPCs, two regionalsubnets, an SLO Cloud Router and Cloud NAT covering the SLO subnet's primary range.No public IP on the VM. No existing networks are modified.
Create five default egress firewall resources: registration TCP 443 to159.60.141.140/32; separate worldwide RE TCP 80/443 and UDP 4500/123 rules;HTTPS TCP 443 to 0.0.0.0/0 for CDN-backed software domains; and DNS/NTP UDP 53/123plus TCP 53 to 8.8.8.8/32, 8.8.4.4/32, 216.239.35.0/32, 216.239.35.4/32,216.239.35.8/32 and 216.239.35.12/32. Broad HTTPS does not bypass organizationalpolicies or domain filters. Use F5's Secure Mesh v2 CE reference, not legacy ranges:https://docs.cloud.f5.com/docs-v2/multi-cloud-network-connect/reference/ce-ip-dom-ref
Worldwide RE TCP destinations checked on 2026-10-22:5.182.215.0/25, 84.54.61.0/25, 23.158.32.0/25, 84.54.62.0/25, 185.94.143.0/25, 185.94.142.0/24, 159.60.190.0/24, 159.60.168.0/24, 159.60.180.0/24, 159.60.174.0/24, 159.60.175.0/24, 159.60.176.0/24, 159.60.177.0/24, 159.60.179.0/24, 159.60.181.0/24, 159.60.183.0/24, 5.182.213.0/24, 5.182.212.0/25, 5.182.214.0/25, 84.54.60.0/25, 185.56.154.0/25, 159.60.160.0/24, 159.60.161.0/24, 159.60.162.0/24, 159.60.163.0/24, 159.60.188.0/24, 159.60.182.0/24, 159.60.178.0/24, 103.135.56.0/24, 103.135.57.0/25, 103.135.59.0/25, 103.135.58.0/24, 159.60.189.0/24, 159.60.166.0/24, 159.60.164.0/24, 159.60.170.0/24, 159.60.172.0/24, 159.60.191.0/24, 159.60.184.0/24, 159.60.185.0/24, 159.60.186.0/24
Worldwide RE UDP destinations checked on 2026-10-22:5.182.215.0/25, 84.54.61.0/25, 23.158.32.0/25, 84.54.62.0/25, 185.94.143.0/25, 185.94.142.0/24, 159.60.190.0/24, 159.60.168.0/24, 159.60.180.0/24, 159.60.174.0/24, 159.60.175.0/24, 159.60.176.0/24, 159.60.177.0/24, 159.60.179.0/24, 159.60.181.0/24, 159.60.183.0/24, 5.182.213.0/24, 5.182.212.0/25, 5.182.214.0/25, 84.54.60.0/25, 185.56.154.0/25, 159.60.160.0/24, 159.60.161.0/24, 159.60.162.0/24, 159.60.163.0/24, 159.60.188.0/24, 159.60.182.0/24, 159.60.178.0/24, 103.135.56.0/24, 103.135.57.0/25, 103.135.59.0/25, 103.135.58.0/24, 159.60.189.0/24, 159.60.166.0/24, 159.60.164.0/24, 159.60.170.0/24, 159.60.172.0/24, 159.60.184.0/24, 159.60.185.0/24, 159.60.186.0/24
Preserve the protocol difference (159.60.191.0/24 is TCP only); never union thesets or replace them with an unrestricted tunnel rule. If the current officialreference changes, report the difference for review before implementing it.Do not open UDP 500 or ESP; CE-to-CE mesh is excluded. Ingress is optional SSHTCP 22 only when requested, with approved narrow source ranges and an actualprivate connectivity path. No default inbound access is required.
There are 15 Terraform resources by default: random_id, two networks, two subnets,router, NAT, five firewall rules, site, JWT token and instance. Optional SSH addsone firewall resource (16). This count includes Terraform and XC objects.
Configure f5xc from F5XCProvider_URL and F5XCProvider_API_TOKEN inherited privately;use timeout and throttling={}, without required credential variables that causeinteractive prompts. This does not guarantee secrets stay out of state. The JWTand cloud-init metadata are sensitive, and provider versions may persist othercredentials. Treat all state, plans, metadata and logs as secret-bearing. Wrap JWTinterpolation with sensitive(); do not output it. Use restrictive local permissionsor an encrypted access-controlled backend. Publish sanitized receipts only.
Use f5xc_securemesh_site_v2 in namespace system with attribute object syntax:provider_choice={gcp={orchestration_choice={not_managed={}}}}.Set exactly one member in each required one-of choice:blocked_services_choice={block_all_services=true},logs_receiver_choice={logs_streaming_disabled=true},node_ha_choice={disable_ha=true},dns_ntp_config={dns_server_choice={f5_dns_default=true},ntp_server_choice={f5_ntp_default=true}},re_select={re_selection_choice={geo_proximity=true}}.Verify service-choice semantics against the selected schema/API; do not inferbehavior from a negative field name. No managed GCP orchestration or service-accountkey is sent to XC. Do not declare node_list: registration reports interfaces.
Site lifecycle must ignore_changes=[provider_choice,labels,operating_system_version,volterra_software_version], because registration populates those fields; removingthem can strip the discovered NIC configuration. These exclusions also hide drift,so verify those fields independently using the API after registration.
Use f5xc_token with type=["JWT"], site_name bound to the site, and pass its .contentstring to the node, never .id or .content[0]. Do not assume a fixed JWT lifetime.Inspect the issued token's iat/exp timestamps privately and use its actual expirationfor validity, resume and recovery decisions; lifetime can vary with server policy.Cloud-init writes only token: <JWT> in /etc/vpm/user_data, owned by root with 0600permissions. Do not use SMSv1 /etc/vpm/config.yaml, Vpm/Kubernetes nesting,certified_hardware or a registration_approval resource.Include read-only startup disk diagnostics (df and lsblk, where supported) inthe existing cloud-init, reporting disk/partition/filesystem size and free spacefor / and persistent data/log paths such as /var, /var/lib and /var/log,to serial output without printing credentials or /etc/vpm/user_data. Do notmodify partitions or filesystems with guessed commands. Check the image'ssupported root-filesystem expansion rather than assuming a larger GCP diskautomatically becomes usable guest capacity.
Create one n2-standard-8 VM, can_ip_forward=true, 120 GB pd-balanced boot disk,pinned image, matching CE tag. NIC 0 is SLO (ens4); NIC 1 is SLI (ens5). Neitherhas access_config. Set VmDnsSetting="ZonalPreferred" and metadata["block-project-ssh-keys"]="true"so any optional SSH uses only the explicitly supplied key, never inherited project keys. Do not enable unsupportedShielded VM features. Inspect the pinned image's guestOsFeatures. If it lacksUEFI_COMPATIBLE, omit shielded_instance_config entirely; an explicit all-falseblock can produce perpetual drift when the API omits unsupported settings.Do not hide that drift with ignore_changes or apply it repeatedly. Propose ascoped configuration-only removal and require a fresh no-change plan.VM lifecycle ignores metadata["user-data"] so rotating aJWT does not implicitly replace a healthy VM. Explicit depends_on must includethe site, token and SLO NAT so the VM boots with working egress.
Run init non-interactively, fmt then fmt -check, validate, inspect the selectedprovider schema, and create a saved plan. Inspect the saved plan for the approved15/16 resources, exact project/zone/image, CIDRs, NIC order, firewall rules, lifecycleand absence of unrelated changes. Apply only that inspected saved plan; do notapply a recomputed plan. Stop and revise the plan if it exceeds approved scope.The registration token can make the entire VM metadata map unknown in a savedplan. Check the exact reviewed configuration and its saved-plan references forthe required static keys, sensitive JWT .content and token-only bootstrap file.Record those checks as source-verified and deferred, not proven live values.Immediately after apply, privately verify the actual metadata, matching token,token-only /etc/vpm/user_data definition with root ownership and 0600 mode, and state sensitivity beforepolling. Missing source proof, unexpected references or known wrong values fail.Include durable registration-deadline and poll-state paths in artifact approval;write only those approved paths and request missing scope before creating a file.
## Registration and completion
Expect 20-45 minutes for registration/upgrades, roughly 30-50 minutes overall,with cold downloads/init sometimes longer. Budget at most 60 minutes of pollingfrom VM creation, including command restarts. Announce downloads, init, apply,registration and teardown waits. Poll every 30 seconds and print each poll withvisible elapsed time. Keep the session active; use bounded tool waits and continuecollecting output without detaching the work or ending the turn while pending.
Validate HTTP status, JSON shape and a non-empty recognized spec.site_state from/config/namespaces/system/sites/<exact-owned-site>. Distinguish transport errors,HTTP/auth errors, invalid JSON/shape, pending states and terminal failure. Unknownstates are invalid, not success. ONLINE is the only registration success. PendingWAITING_FOR_REGISTRATION, PROVISIONING or UPGRADING can oscillate. FAILED orERROR_IN_ORCHESTRATION is a failure. Bound transient retries within the original60-minute deadline, stop promptly on authorization or repeated invalid responses,and never return success on timeout. Preserve raw evidence privately and reportwhich completion gates remain unmet.
An initial ONLINE response can briefly regress to PROVISIONING during registration.Require two consecutive valid ONLINE observations at least 30 seconds apart beforepassing registration. A pending state or response failure clears this stabilitywindow; continue read-only polling within the ORIGINAL VM-creation deadline.Check that deadline before requests and before accepting a response. Never resetthe budget, redeploy or declare completion from the first ONLINE sample alone.
After 60 minutes stop polling and perform at most 10 minutes of read-only diagnostics:owned VM status and serial logs, NAT mappings, effective firewall rules, site/noderesponses and JWT age/validity without exposing its value. Do not retry indefinitely.No automatic taint, token rotation, VM reset, replacement or resource deletion.Propose a reviewed recovery plan checking state ownership, token validity andignored user-data: rotating a token alone will not update VM metadata, and a resetcan reuse stale data. Explain exact replacement/metadata effects and requireapproval of recovery changes before executing them. Keep the failed attempt.
Completion also requires the approved terraform/ files and, when documentationis enabled, docs/terraform.md to be visible in the active workspace and free ofcredential values. An explicit docs opt-out does not block completion. Deployment completion requires evidence for ALL three gates:1. Two consecutive validated site_state=ONLINE observations at least 30 seconds apart.2. /config/namespaces/system/securemesh_site_v2s/<site> reports exactly the expected node's ens4=site_local_network (SLO, primary=true) and ens5=site_local_inside_network (SLI, primary=false), matched to the owned VM NICs. Read spec.gcp.not_managed.node_list[].interface_list[]: the role is under network_option.site_local_network or network_option.site_local_inside_network, with name, ethernet_interface.device/mac and is_primary alongside it. Do not look for the role at the interface's top level or assume a reported IP field.3. A POST-registration terraform plan -detailed-exitcode returns 0. Exit 1 is error; exit 2 is drift. Never apply that drift blindly or call an earlier clean plan success. Recheck ONLINE after this plan before declaring completion. A regression resumes the original bounded polling and requires fresh NIC and post-registration plan evidence after stability returns; an expired budget pauses for bounded diagnostics.
Record connected_re separately from registration; validate its response shape andreport observed RE identities/count without equating ONLINE with connectivity.Independently verify the actual boot disk has the approved capacity/type andinspect supported node telemetry or the startup serial diagnostics for usablefilesystem size and free space. Report provisioned and guest-usable capacityseparately; diskSizeGb alone does not prove upgrade headroom. Missing guestevidence stays UNKNOWN and must not be described as a successful upgrade test.Empty sli_address is not a reliable SLI check; inspect node_list instead.Summarize met/unmet gates, timestamps, immutable provider/image identities, totalelapsed time, cost of keeping the VM and owned teardown instructions.
## Teardown when authorized
Create and inspect a saved destroy plan for ONLY the state-owned resources, applythat plan, and prove state is empty. Independently query exact owned GCP instance,boot disk, networks, subnets, router/NAT, firewall rules and licence probe, plus XCsite, Secure Mesh v2 object and token. A valid absence response or validated listwithout the exact object proves absence; transport errors, malformed responses orempty unvalidated output do not. Bound XC deletion checks and preserve failures.Do not clean by broad prefix or delete unrelated resources. Report cleanup asincomplete until all owned resources and the XC site are independently absent.If a destroy command loses transport while polling an operation, it does notprove deletion failed. Preserve the failure, re-read the exact resource andoperation using the selected identity, then create and inspect a NEW saveddestroy plan for only the remaining state-owned resources. Refresh may reconcilean object already deleted in GCP. Apply only the new inspected plan; never replaythe stale original plan, remove unverified state entries or broaden cleanup.Existing scoped teardown approval covers this convergence; stop on authentication,ownership or scope uncertainty and keep all evidence.Verify and clean up
Section titled “Verify and clean up”The agent polls every 30 seconds with visible elapsed time and keeps the session active. The 60-minute registration deadline remains anchored to VM creation across resumes. Timeout, invalid responses and pending states cannot pass; preserve evidence for bounded read-only diagnostics.
Completion requires:
- Consecutive validated
ONLINEobservations at least 30 seconds apart. - Verified
ens4 → SLOprimary andens5 → SLInonprimary interface roles. - A post-registration
terraform plan -detailed-exitcodereturning zero, followed by anotherONLINEcheck. A regression resumes the original bounded polling and requires fresh interface and plan evidence. Record Regional Edge connectivity separately.
When teardown is authorized, inspect and apply a saved destroy plan, then independently prove all owned GCP resources, the temporary marketplace licence probe and both XC site representations are absent. Preserve private evidence until cleanup is verified. Recovery mutations require a reviewed plan.
Use the step-by-step fallback guide for the nine Terraform files and detailed checks if your agent cannot execute the workflow. See How to use for the common prompt workflow.
Qualification
Section titled “Qualification”The current prompt passed Kiro CLI, Kiro Desktop and two VS Code GitHub Copilot Chat runs on macOS with Claude Opus 5.5
on 2026-10-26. Each verified deployment, stable ONLINE status, SLO/SLI roles, a zero-change post-registration Terraform
plan and independent cleanup. Recheck prerequisites and provider/image versions for each deployment.
Supporting receipts: Kiro CLI, Kiro Desktop, Copilot run 1 and Copilot run 2.