Deploy EVE-NG (HyOps Blueprint)¶
- Purpose: Deploy a working EVE-NG foundation using a repeatable blueprint run.
- Owner: Platform engineering
- Trigger: Lab platform bring-up, baseline refresh, or controlled environment rebuild
- Impact: Consumes shared SDN/NetBox authority, builds Jammy template image (if needed), provisions an EVE-NG VM, configures EVE-NG, and proves live health
- Severity: P2
- Pre-reqs: Proxmox init completed for the environment, vault decrypt working, NetBox authority is ready (authoritative IPAM), Ansible deps installed, EVE-NG target is Ubuntu 22.04.
- Rollback strategy:
hyops blueprint destroytears down all steps in reverse order. See §Teardown.
Context¶
This runbook covers the current EVE-NG blueprint pair:
onprem/eve-ng@v1gcp/eve-ng@v1
Both blueprints converge on the same provider-neutral config and health modules:
platform/linux/eve-ngplatform/linux/eve-ng-healthcheck
For the GCP variant, treat the zone and VM shape as environment choices, not fixed defaults. The EVE-NG host needs a nested-virtualization-capable shape, and both zonal capacity and project CPU quota can shift. Keep the env overlay authoritative for the selected zone and shape, and rerun the VM step if GCP capacity or quota constraints change.
Preconditions and safety checks¶
- Installed
hyops(viainstall.sh) can be run from any working directory. - Source-checkout usage should export
HYOPS_CORE_ROOT=/path/to/hybridops-core. - Correct environment selected (
--env dev|staging|prod). - Secrets available via shell env or runtime vault:
EVENG_ROOT_PASSWORDEVENG_ADMIN_PASSWORD- Those secrets should be seeded before preflight. The base EVE module defaults to
load_vault_env: trueand fails early if they are missing. - EVE-NG VM must be Ubuntu 22.04 (Jammy). HyOps enforces this during preflight/apply.
NetBox foundation is required for IPAM:
- This blueprint allocates the EVE-NG VM IP from NetBox (no hardcoded per-VM IPs) and consumes the shared SDN authority state.
- By default, HyOps expects NetBox authority in
--env shared. If it is not ready yet, run:hyops blueprint deploy --env shared --ref onprem/bootstrap-netbox@v1 --execute
This also seeds the shared SDN foundation and NetBox IPAM/inventory datasets consumed by this blueprint.
For gcp/eve-ng@v1, the config and healthcheck phases are intentionally rerun on deploy, and the VM step now
verifies provider state even when the step is skipped on historical ok state. Historical green config state
is not enough evidence after a VM replacement or a project/zone rehome.
In constrained projects, use an env-scoped proof profile rather than rewriting the shipped blueprint baseline. For example, a project with a low global CPU quota can use:
zone: europe-west2-amachine_type: n2-standard-2eveng_resource_profile: minimal
That keeps the source blueprint aligned to the intended standard host while allowing a smaller live proof lane in the env overlay.
If the shared Proxmox SDN authority drifts on the host side (for example the vnetmgmt bridge exists but the expected 10.10.0.1/24 gateway is missing), dependent VM steps now fail early with a remediation to re-run core/onprem/network-sdn using a fresh host_reconcile_nonce.
Install/update Ansible runtime deps for the env:
# If you installed via install.sh (default runs setup-all), this is already done.
# To (re)install Ansible Galaxy deps for an env:
hyops setup ansible --env dev
Steps¶
Substitute --ref onprem/eve-ng@v1 or --ref gcp/eve-ng@v1 depending on target surface.
The on-prem variant requires the authoritative foundation (NetBox, shared SDN) deployed first.
The GCP variant uses static addressing and can run without NetBox.
-
Validate and plan
# On-prem hyops blueprint validate --ref onprem/eve-ng@v1 hyops blueprint plan --ref onprem/eve-ng@v1 # GCP hyops blueprint validate --ref gcp/eve-ng@v1 hyops blueprint plan --ref gcp/eve-ng@v1 -
Preflight
hyops blueprint preflight --env dev \ --ref onprem/eve-ng@v1 # or gcp/eve-ng@v1 -
Execute
hyops blueprint deploy --env dev \ --ref onprem/eve-ng@v1 \ # or gcp/eve-ng@v1 --execute
hyops blueprint deploy --execute now runs a blueprint preflight gate first.
If contracts/resolution fail, execution stops before the first module step.
Use --skip-preflight only for controlled break-glass runs.
During long module phases, HyOps prints:
progress: logs=...(active driver log file)progress: phase=preflight|apply|destroy|...- periodic heartbeat lines for long-running streamed commands
Optional tuning:
export HYOPS_PROGRESS_INTERVAL_S=30
- Verify (GCP state instance example)
cat $HOME/.hybridops/envs/dev/state/modules/platform__linux__eve-ng/instances/gcp_eve_ng_config.json \ | python3 -m json.tool | grep -E '"status"|"outputs"' -A10
Verification¶
Success indicators:
- foundation state is
ok outputs.eveng_urlis presentoutputs.cap.lab.evengisready- healthcheck state is
ok outputs.eveng_health_statusishealthy
Current live verification¶
Use this when you need current proof for the active GCP-backed EVE-NG lane.
Verify VM state¶
gcloud compute instances describe platform-labs-eve-ng-01 \
--project hybridops-dev-gcp-03 \
--zone europe-west2-a \
--format='yaml(name,status,machineType,advancedMachineFeatures.enableNestedVirtualization,networkInterfaces[0].networkIP,networkInterfaces[0].accessConfigs[0].natIP)'
Expected:
status: RUNNING- the VM name
platform-labs-eve-ng-01is published - the current internal IPv4 address
10.72.16.20is published - the current public IPv4 address
34.13.41.164is published - the active machine type
n2-standard-2is published enableNestedVirtualization: trueis published
Verify EVE-NG config and health¶
cat $HOME/.hybridops/envs/dev/state/modules/platform__linux__eve-ng/instances/gcp_eve_ng_config.json \
| python3 -m json.tool
cat $HOME/.hybridops/envs/dev/state/modules/platform__linux__eve-ng-healthcheck/instances/gcp_eve_ng_healthcheck.json \
| python3 -m json.tool
Expected:
platform/linux/eve-ng#gcp_eve_ng_configisstatus=okcap.lab.eveng: readyeveng_url: http://platform-labs-eve-ng-01/platform/linux/eve-ng-healthcheck#gcp_eve_ng_healthcheckisstatus=okeveng_health_status: healthy
Verify HTTP reachability¶
For the current GCP proof lane, verify reachability over IAP from the operator workstation:
gcloud compute ssh opsadmin@platform-labs-eve-ng-01 \
--project hybridops-dev-gcp-03 \
--zone europe-west2-a \
--tunnel-through-iap \
--command 'curl -fsSI http://127.0.0.1/'
Expected:
- the endpoint responds with
HTTP/1.1 200 OK - the returned headers identify the EVE-NG Apache surface
- the live GCP lane is reachable through the governed operator access path
Teardown¶
Destroy all blueprint resources in reverse order using the blueprint file:
hyops blueprint destroy --env dev \
--file "$HOME/.hybridops/envs/dev/config/blueprints/gcp-eve-ng.yml" \
--execute
For the on-prem variant, substitute the corresponding initialized blueprint file. Steps are destroyed in the order: healthcheck → config → VM. Steps with no recorded state are skipped automatically. Use --yes to skip the confirmation prompt in non-interactive contexts.
Follow-on modules¶
The blueprint now verifies base health as part of the foundation run. Typical next steps after that are:
platform/linux/eve-ng-imagesplatform/linux/eve-ng-labsThat separation keeps the blueprint reusable across instructor, academy, and shared lab lanes without baking specific image libraries or lab content into the base foundation.