Package com.eqixiac.equinix.design.optimizer.wizard


package com.eqixiac.equinix.design.optimizer.wizard
The Deployment Wizard: turns a metro OptimizationResult into an executable DeploymentPlan — Cloud Routers, provider connections, inter-metro backbone links, and routing protocols, with bandwidth-aware profile selection and honestly-reconciled pricing.

The pipeline is plan → validate → execute:

  • Plan — DeploymentWizard.Builder (reached via fabric.deploymentWizard(result)) configures packages, topology, bandwidth strategy, ASN/BFD, notifications, and pricing; plan() produces an immutable plan. Nothing is provisioned by planning.
  • Validate — PlanValidator runs in three layers (structural/catalog checks, a live self-contained Cloud Router dry-run, and the connection endpoint dry-run where an endpoint already exists) and sorts every finding into three buckets that are never conflated: errors (validated now; a hard defect or genuine API rejection — invalidates the plan), deferred to provisioning (the connection endpoint dry-run that must wait for the A-side router to exist), and skipped (could not be attempted — offline gateway or a non-rejection API failure — each with a reason, never invalidating the plan). DeploymentPlan.dryRun() re-runs validation and returns a new plan with refreshed state.
  • Execute — DeploymentPlan.execute(ExecutionInputs) refuses an invalid plan (IllegalStateException), fails fast on missing customer authorization keys, then provisions in dependency order: Cloud Routers (awaiting PROVISIONED), provider connections (each pre-flighted with a live dry-run against its now-real router), backbone links, then routing protocols. State waits distinguish ready / real terminal failure / timeout; a genuine dry-run or create rejection aborts the run and unwinds everything already created in LIFO order, and rollback(outcome) offers the same best-effort teardown for partial deployments.

The safety model is plan-only-until-execute: plans, dry-runs, repricing, value realization, and export are all side-effect free; only execute() creates billable resources, and only after validation, input checks, and per-connection pre-flights.

Sub-packages: model (the plan and its parts), enums (topology, bandwidth strategy, connection purpose).

See Also: