Skip to content

Use Verified Same-Platform Bundles for Network-Lab Migration

Status

Accepted: Existing EVE-NG, GNS3, and Containerlab environments enter the HybridOps lifecycle through verified same-platform bundles. The runtime does not translate one emulator's native state into another emulator's format.

Context

An existing lab may predate its HybridOps environment record or run on a host that must be replaced. Migration needs a bounded recovery artifact whose identity, contents, companion state, target compatibility, and eventual after-state can be reviewed as one chain.

Decision

Migration has three explicit phases:

  1. capture identifies the requested source boundary, checks capacity, and produces a candidate platform-specific recovery set;
  2. inspect validates member paths, checksums, structure, and companion-state relationships without changing runtime state;
  3. import binds the verified set to one environment and compatible blueprint, after which the normal restore lifecycle performs reconstruction.

EVE-NG can include referenced images and stopped node state. Containerlab captures its authoritative source tree and can retain native lab-directory state. GNS3 captures its native project boundary. Capacity is checked before large capture, import, or restore operations.

Consequences

Positive

  • Source files remain in place until target acceptance; stateful capture may quiesce and stop running guests.
  • Migration converges on the same reconstruction and verification contract as normal recovery.
  • Checksums and blueprint binding prevent accidental bundle substitution.

Negative

  • Cross-platform conversion is outside the contract.
  • Large referenced-image sets may take substantial time and storage.
  • Platform licences and secrets must be supplied separately at the target.

Alternatives considered

  • Translate EVE-NG, GNS3, and Containerlab formats automatically: rejected because configuration, disk, interface, and controller semantics do not have a safe general mapping.
  • Copy the entire source host: rejected because it retains unrelated state and weakens inspection of the actual recovery boundary.

References