This repository provisions a fixed Cisco SD-WAN controller lab on STACKIT:
- 3
vManage - 2
vBond - 2
vSmart
main.tf,locals.tf,variables.tf,outputs.tf: Terraform topology, defaults, and outputs.cloud-init/vmanage-rootca.yaml.tftpl,cloud-init/vbond-rootca.yaml.tftpl,cloud-init/vsmart-rootca.yaml.tftpl: active wrapper templates used by the current Terraform flow.cloud-init/vmanage.xml.tftpl,cloud-init/vbond.xml.tftpl,cloud-init/vsmart.xml.tftpl: active working day-0 XML payloads used by the current Terraform flow.scripts/stackit_disk_format.py: published/dev/vdbfirst-boot handling with strict/opt/datavalidation.scripts/stackit_cluster_certificate.py: published post-deploy wrapper for 3-node vManage cluster formation followed by controller certificate enrollment.scripts/stackit_upload_image.py: helper for uploading controller qcow2/raw images to STACKIT and printing Terraform-ready image IDs.scripts/bootstrap_vmanage_cluster.py,scripts/cert_api_script.py: lower-level implementation scripts used by the wrapper and still useful for debugging.scripts/teardown_stackit_lab.sh: preferred destroy helper when plainterraform destroygets stuck.
- The controller qcow2 images should be downloaded from
software.cisco.com > SDWAN > vManage Software / vSmart Software / vEdge Cloud > vBond Softwarebefore using the STACKIT image upload helper. organization_namemust match the value used onsoftware.cisco.com.vbond_hostnamemust be a DNS-resolvable vBond FQDN. It must match the value configured insoftware.cisco.com > Network Plug and Play > Controller Profiles.admin_access_cidrsshould contain only external operator/admin source ranges. Controller-to-controller reachability is added automatically by Terraform.run_vmanage_firstboot_initshould remainfalseby default so the user can verify the Terraform deployment first and run the first-boot helper independently.
- The Python scripts read Terraform outputs, especially
controller_inventory, from the module directory. - By default they assume the repo root is the module directory.
- If the repo is copied elsewhere, use
--module-dir /absolute/path/to/repofor the Python scripts that support it. - Shell helpers derive paths from the repo they live in, so run them from the checkout you want to operate on.
- The Python helpers are expected to run from a local virtual environment in the repo, using
python3 -m venv .venvandpython3 -m pip install -r requirements.txt. requirements.txtcurrently contains the pip-managed runtime dependency set for the repo scripts. Non-Python tools such as Terraform, OpenSSL, SSH, and shell utilities are separate host prerequisites.
- STACKIT API resets can interrupt
terraform apply; rerunningterraform applyis the normal recovery path. vManagecan look reachable before/dev/vdbformatting is actually complete; trust/opt/datavalidation, not early HTTPS.- Cisco Services Registration may show correctly in the portal even when older Smart Account APIs return empty objects; the current cert workflow treats the
ciscoServicesPlug-and-Play row as authoritative on this build. vSmartandvBondonboarding on this build works through management public IPs.- Secondary
vManageCSR generation needs the node’s own API endpoint rather than only the primary cluster API. - Raw destroy can still get stuck on
vManagedata-volume detach; preferscripts/teardown_stackit_lab.sh.
- Do not commit local secrets, generated certificates,
terraform.tfvars, Terraform state, orartifacts/. - Do not destroy or replace a live lab without explicit confirmation from the user.