Backup and restore
Instructions on backing up and restoring Red Hat Edge Manager
Abstract
Preface
Back up and restore the Red Hat Edge Manager PostgreSQL database and control plane on Red Hat Enterprise Linux or Red Hat OpenShift Container Platform.
Chapter 1. Backing up the PostgreSQL database for Red Hat Edge Manager on Red Hat Enterprise Linux
Red Hat Edge Manager stores control-plane data in PostgreSQL when you install the flightctl-services RPM on Red Hat Enterprise Linux. This topic covers database backup scope, recovery point objectives (RPOs), and practices that complement database backups for an RPM deployment.
1.1. Overview
PostgreSQL is the primary data store for the Red Hat Edge Manager control plane. It holds device and fleet configuration, organizations, templates, user-related metadata, and other system state required to operate Flight Control.
You must define a Recovery Point Objective (RPO) that matches your business requirements, compliance obligations, and risk tolerance. Typical baselines include the following:
- Mission-critical environments: RPO on the order of 15 minutes
- Non-production or development environments: RPO up to 24 hours
You are responsible for implementing and operating your own backup and restore procedures for the PostgreSQL database. Red Hat Edge Manager documents strategy and recommendations; it does not perform or manage backups for your deployment.
1.2. Database backup scope
To recover the control plane after data loss or corruption, back up the PostgreSQL database that contains the flightctl schema (including all application data tables), together with the following:
- Data: Devices, fleets, organizations, templates, and related records
- Schema: Table definitions and migrations that match your installed Red Hat Edge Manager release
- Security metadata: Database roles, grants, and users required for the application to access the database
The database runs as part of the Flight Control services you manage with systemctl on the Red Hat Enterprise Linux host (for example, under flightctl.target). Use the backup tooling your organization standardizes on (for example, logical dumps or filesystem snapshots) as long as you can restore a consistent copy of the flightctl database that matches your operational runbooks.
1.3. Testing backups
Validate backups regularly. Untested backups are a common source of failed recoveries.
- Create an isolated test environment that mirrors production closely enough to exercise a restore (same major Red Hat Edge Manager version and similar configuration).
- Restore from your most recent backup using your chosen restore procedure.
- Verify data integrity by listing Flight Control resources (for example, devices and fleets) and comparing them to a known-good source.
- Confirm that the Red Hat Edge Manager API and web console behave as expected against the restored database.
- Record any gaps, errors, and corrective actions in your runbooks.
1.4. Recommended practices
Follow these practices to complement your PostgreSQL database backups for Red Hat Edge Manager on Red Hat Enterprise Linux.
-
Git-backed configuration: Store declarative configuration in Git and sync it with the control plane using
Repositoryresources andgitRefin device and fleet specifications where appropriate. For a CLI-oriented workflow, see Managing the device configuration from a Git repository on the CLI. - Separate failure domain for Git: Host Git repositories outside the same failure domain as the Red Hat Edge Manager host when possible (for example, a managed Git service or a separate cluster).
-
Back up deployment configuration: Include
/etc/flightctl/service-config.yamland any drop-in configuration your deployment uses (for example, under/etc/flightctl/conf.d/) in your configuration-management backups so you can rebuild or reinstall the host consistently. - Version and tag changes: Track changes to configuration and automation with version control and tags so you can roll back or redeploy predictably.
- Restoring on Red Hat Enterprise Linux: When you need to recover the database on the host, see Additional resources.
Chapter 2. Restoring the PostgreSQL database for Red Hat Edge Manager on Red Hat Enterprise Linux
Use this topic after you have a backup of the flightctl database and need to recover Red Hat Edge Manager on Red Hat Enterprise Linux. A typical flightctl-services deployment runs application containers as systemd-managed Podman quadlets. During restore you must keep the PostgreSQL and KV store services running while application services are stopped: the primary procedure restores the database, runs flightctl-restore, then starts application services again. An alternative path skips flightctl-restore but still stops only application services while the database and KV remain up.
2.1. Prerequisites
The following items cover access, tooling, backups, and release compatibility for the restore procedures in this topic on a Red Hat Enterprise Linux host where Red Hat Edge Manager runs as systemd-managed Podman quadlets. The mandatory requirements apply to both the primary restore procedure and the database-only alternative. Optional tools listed later are needed only when you run the steps that use them (for example, temporary port publishing for flightctl-restore).
-
Host access: Root privileges or sudo on the host where the quadlets run, with permission to stop and start systemd units, run
systemctl daemon-reload, create unit drop-in files under.ddirectories, and run Podman commands (includingpodman secretandpodman exec). -
Core tools:
systemctlandpodmaninstalled and usable by your restore account. -
Flight Control CLI tools:
flightctlandflightctl-restoreavailable on the host (or on a jump host if your runbook runs commands remotely). Before you restore, confirm thatflightctl-restorematches the Red Hat Edge Manager server version. -
Backup artifacts: A tested backup of the
flightctlPostgreSQL database, in a form your team can replay (logical dump, physical backup, or other agreed method). Include matching configuration backups from/etc/flightctl/when your recovery plan requires them. -
Compatible versions: The Red Hat Edge Manager /
flightctl-servicesrelease on the host should be compatible with the data in the backup (typically the same major release as when the backup was created).
Optional tools for verification steps in this topic (install only what you use):
-
jq— parse output frompodman secret inspectwhen retrieving passwords. -
pg_isready— check PostgreSQL readiness on localhost after temporary port publishing. -
redis-cli(Red Hat Enterprise Linux 9) orvalkey-cli(Red Hat Enterprise Linux 10) — check KV store connectivity on localhost; use the client that matches your host’s major Red Hat Enterprise Linux version and container image. -
ssornetstat— confirm that ports5432and6379listen during the restore window.
If Red Hat Edge Manager runs on Red Hat OpenShift Container Platform or another Kubernetes cluster rather than on a Red Hat Enterprise Linux quadlet host, prerequisites differ (for example, kubectl access and cluster networking). See This content is not included.Restoring the PostgreSQL database for Red Hat Edge Manager on Red Hat OpenShift Container Platform.
Perform full restores during a maintenance window. Restoring data requires stopping application services and can interrupt device management until the procedure completes.
2.2. Restore using quadlets and flightctl-restore
Typical RPM installations run Red Hat Edge Manager application components as separate systemd units backed by Podman quadlets, while the PostgreSQL and KV store containers keep running until you intentionally restart them. This sequence matches that layout: stop application services only, restore the flightctl database, supply credentials, expose ports locally for flightctl-restore, run the restore binary, remove temporary port publishing, then start application services again.
Verify that
flightctl-restorematches the Red Hat Edge Manager server version:flightctl version flightctl-restore version echo "Server version: $(flightctl version)" echo "Restore version: $(flightctl-restore version)"
ImportantThe server and restore versions must match. Update the
flightctl-restorebinary before you continue if they differ.Stop the Red Hat Edge Manager application services so they do not write to the database during restore. Do not stop
flightctl-db.service,flightctl-kv.service, or other database or KV units; they must keep running while you restore data and runflightctl-restore.# Stop only application services (keep database and KV store running) sudo systemctl stop flightctl-api.service sudo systemctl stop flightctl-worker.service sudo systemctl stop flightctl-periodic.service sudo systemctl stop flightctl-alert-exporter.service sudo systemctl stop flightctl-alertmanager-proxy.service sudo systemctl stop flightctl-telemetry-gateway.service sudo systemctl stop flightctl-pam-issuer.service sudo systemctl stop flightctl-cli-artifacts.service sudo systemctl stop flightctl-alertmanager.service sudo systemctl stop flightctl-imagebuilder-api.service sudo systemctl stop flightctl-imagebuilder-worker.service sudo systemctl stop flightctl-ui.service
NoteIf
systemctlreportsUnknown unitfor a service, your host might not ship that component (for example, image builder or UI). Skip that line. Do not runsystemctl stop flightctl.targethere; that would stop the database and KV services as well.Confirm that the application units you stopped are inactive:
sudo systemctl status flightctl-api.service systemctl is-active flightctl-api.service
-
Restore the
flightctlPostgreSQL database using the method that matches your backup (for example,pg_restore,psqlwith a SQL dump, or storage-level recovery). Ensure the database is consistent and reachable from the deployment before you runflightctl-restore. Retrieve the database application password from the Podman secret:
DB_APP_PASSWORD=$(sudo podman secret inspect flightctl-postgresql-user-password --showsecret | jq -r '.[0].SecretData') echo "Database password retrieved successfully"
Retrieve the KV store password from the Podman secret:
KV_PASSWORD=$(sudo podman secret inspect flightctl-kv-password --showsecret | jq -r '.[0].SecretData') echo "KV store credentials retrieved successfully"
Optional: verify database and KV connectivity from the host through the running containers:
Database: verify readiness:
sudo podman exec flightctl-db pg_isready -U postgres
To connect to the database for additional verification (optional):
sudo podman exec -it flightctl-db psql -U flightctl_app -d flightctl
KV store: on Red Hat Enterprise Linux 9 you can use
redis-cli; on Red Hat Enterprise Linux 10 usevalkey-cliinside the container, for example:sudo podman exec flightctl-kv redis-cli ping
Publish the database and KV ports on
localhostsoflightctl-restorecan reach them. The database and KV containers use a private network by default; use temporary systemd drop-in files to add port publishing, then reload and restart only those services:DB_CONTAINER_FILE=$(systemctl show flightctl-db.service -p SourcePath --value) KV_CONTAINER_FILE=$(systemctl show flightctl-kv.service -p SourcePath --value) DB_DROPIN_DIR="${DB_CONTAINER_FILE}.d" KV_DROPIN_DIR="${KV_CONTAINER_FILE}.d" sudo mkdir -p "$DB_DROPIN_DIR" "$KV_DROPIN_DIR" sudo tee "$DB_DROPIN_DIR/10-publish-port.conf" > /dev/null <<'EOF' [Container] PublishPort=5432:5432 EOF sudo tee "$KV_DROPIN_DIR/10-publish-port.conf" > /dev/null <<'EOF' [Container] PublishPort=6379:6379 EOF sudo systemctl daemon-reload sudo systemctl restart flightctl-db.service flightctl-kv.serviceVerify listening ports and basic connectivity (adjust the KV client for your Red Hat Enterprise Linux major version):
ss -tlnp | grep -E ':5432|:6379' || true pg_isready -h localhost -p 5432 REDISCLI_AUTH="$KV_PASSWORD" redis-cli -h localhost -p 6379 ping
On Red Hat Enterprise Linux 10, use
VALKEYCLI_AUTHwithvalkey-cliinstead ofREDISCLI_AUTHwithredis-cliif that matches your environment.Run
flightctl-restorewith the database and KV passwords (run from the directory that contains the binary if you do not use a full path):DB_PASSWORD="$DB_APP_PASSWORD" KV_PASSWORD="$KV_PASSWORD" ./bin/flightctl-restore
Watch the output for errors or successful completion.
Remove the temporary port publishing drop-ins and restart the database and KV services:
DB_CONTAINER_FILE=$(systemctl show flightctl-db.service -p SourcePath --value) KV_CONTAINER_FILE=$(systemctl show flightctl-kv.service -p SourcePath --value) DB_DROPIN_DIR="${DB_CONTAINER_FILE}.d" KV_DROPIN_DIR="${KV_CONTAINER_FILE}.d" sudo rm -f "$DB_DROPIN_DIR/10-publish-port.conf" "$KV_DROPIN_DIR/10-publish-port.conf" sudo rmdir "$DB_DROPIN_DIR" 2>/dev/null || true sudo rmdir "$KV_DROPIN_DIR" 2>/dev/null || true sudo systemctl daemon-reload sudo systemctl restart flightctl-db.service flightctl-kv.serviceStart the application services again (same set you stopped; omit units your host does not use):
sudo systemctl start flightctl-api.service sudo systemctl start flightctl-worker.service sudo systemctl start flightctl-periodic.service sudo systemctl start flightctl-alert-exporter.service sudo systemctl start flightctl-alertmanager-proxy.service sudo systemctl start flightctl-telemetry-gateway.service sudo systemctl start flightctl-pam-issuer.service sudo systemctl start flightctl-cli-artifacts.service sudo systemctl start flightctl-alertmanager.service sudo systemctl start flightctl-imagebuilder-api.service sudo systemctl start flightctl-imagebuilder-worker.service sudo systemctl start flightctl-ui.service
Verify with
sudo systemctl statuson each unit andsudo podman ps --filter "name=flightctl-".-
Confirm that the API responds and that inventory looks correct in the Red Hat Edge Manager web console or with
flightctlCLI commands.
2.3. Alternative: Database-only restore without flightctl-restore
If your operations team restores the PostgreSQL data without running flightctl-restore (for example, a DBA-led replay into the live database), use the same rule as the main procedure: stop only application services so the database and KV store keep running. Do not use systemctl stop flightctl.target, which stops flightctl-db, flightctl-kv, and everything else.
- Stop the application services only (same list as in the Restore using quadlets and flightctl-restore procedure, step 2). Skip units that do not exist on your host.
Restore the
flightctldatabase using the procedure that matches your backup while PostgreSQL remains available:-
Logical backups (dump files): Use
pg_restore,psql, or equivalent clients per your DBA standards. Storage or snapshot restores: Restore the data directory or volume following your infrastructure playbook.
Ensure database name, roles, and grants match what Red Hat Edge Manager expects.
-
Logical backups (dump files): Use
-
Verify that PostgreSQL accepts connections and that the
flightctldatabase is present (for example,pg_isreadyor a short test query). -
Start the application services again with the same
systemctl startsequence as in the Restore using quadlets and flightctl-restore procedure, step 11. Do not rely onsystemctl start flightctl.targetunless your runbook confirms it does not disrupt the database or KV units you left running. -
Confirm health (for example,
sudo systemctl status flightctl-api.service) and validate data in the web console or withflightctlCLI commands.
2.4. After you restore
When the restore commands finish and application services are healthy again, validate the control plane and plan for device reconciliation. Restoring the database changes what the service knows about devices; edge devices must reconnect and compare their live state to the restored specifications.
Operational follow-up
- Re-run checks from the Testing backups section in the backup topic if you need a structured validation checklist. See Additional resources.
- Record commands, secret handling, and timing in your runbooks so the next restore repeats cleanly.
2.5. Post-restore device status changes
After a successful restore, devices move through automatic status transitions while they reconnect and reconcile with the restored control plane data.
- AwaitingReconnect
-
Devices are always placed in
AwaitingReconnectfirst. The service waits for each device to report its current state again. Spec reconciliation for those devices remains paused until they reconnect. - Enrollment requests and post-restore approval
Devices approved after the restored backup was taken do not exist after the restore and must be approved again. After restore:
-
Devices created from a restored enrollment request are placed in
AwaitingReconnectand follow the normalAwaitingReconnectbehavior. -
Devices without an enrollment request before backup, with a non-zero deployed specification version, are placed in
AwaitingReconnectand follow the normalAwaitingReconnectbehavior. - Devices without an enrollment request before backup, with a zero specification version, move to normal status.
-
Devices created from a restored enrollment request are placed in
- ConflictPaused
-
After a device reconnects and reports its current state, the service compares the specification stored in the restored backup with the device-reported version. If the restored backup specification is older (for example, the device had moved forward while backups lagged), the device can enter
ConflictPaused. Rendering of new specifications stops for that device until an operator resolves the mismatch. Human review is required before you force configuration forward. - Normal operation
- When the restored specification and the device-reported state are compatible, the device returns to normal operational statuses (for example, online or updating) and usual reconciliation resumes.
Monitor device status
Use the flightctl CLI to see which devices need attention:
flightctl get devices flightctl get devices --field-selector=status.summary.status=AwaitingReconnect flightctl get devices --field-selector=status.summary.status=ConflictPaused
Resolve ConflictPaused devices
- Review the specification source: if the device belongs to a fleet, inspect the fleet template and selector; if not, inspect the device spec directly. Review labels and ownership to confirm how the restored specification applies to the device.
When you are confident the restored specification is what you want, resume the device or a group of devices. Replace
example-devicewith your device resource name and adjust selectors to match your environment:flightctl resume device example-device flightctl resume device --selector="environment=production"
Use additional
flightctl resume deviceoptions your deployment supports (for example, field selectors) if you need to resume many devices in bulk.
Additional resources
Chapter 3. Backing up the PostgreSQL database for Red Hat Edge Manager on Red Hat OpenShift Container Platform
This topic describes PostgreSQL backup strategy for Red Hat Edge Manager on Red Hat OpenShift Container Platform: recovery point objectives (RPOs), database backup scope, how to validate restores, and practices that complement database backups in a cluster deployment.
3.1. Overview
Red Hat Edge Manager uses PostgreSQL to store mission-critical data, including device configurations, fleet management records, user profiles, and system state. To protect this data and ensure business continuity, implement backup strategies that support disaster recovery.
Define your Recovery Point Objective (RPO) based on your business requirements, compliance obligations, and risk tolerance. Typical baselines include the following:
- Mission-critical environments: RPO on the order of 15 minutes
- Non-production or development environments: RPO up to 24 hours
You are responsible for implementing and managing your own backup strategies for the PostgreSQL database. Red Hat Edge Manager documents architectural guidance and best practices; it does not manage backups for your deployment.
3.2. Database backup scope
To ensure a full system recovery, back up the flightctl database, including the following:
- Data: Devices, fleets, organizations, templates, and related records
- Schema and structure: The database architecture and table definitions that match your installed Red Hat Edge Manager release
- Security metadata: Database users, roles, and access permissions required for the application
3.3. Testing backups
Regularly test backup and restore procedures. Untested backups are a common source of failed recoveries.
- Create an isolated test environment that mirrors your production configuration closely enough to exercise a restore (same major Red Hat Edge Manager version and similar configuration).
- Restore from your most recent backup into the test environment using your chosen restore procedure.
- Verify data integrity by listing Flight Control resources (for example, devices and fleets) and comparing them to production records.
- Confirm that the Red Hat Edge Manager API and web console behave as expected against the restored database.
- Record any gaps, errors, and corrective actions in your runbooks.
3.4. Recommended practices
Follow these practices to complement your PostgreSQL database backups for Red Hat Edge Manager on Red Hat OpenShift Container Platform.
-
Git-backed configuration: Store declarative configuration in Git. Use the
Repositoryresource to reference configurations withgitRefin device and fleet specifications where appropriate. For a CLI-oriented workflow, see Managing the device configuration from a Git repository on the CLI. - Separate failure domain for Git: Host Git repositories on external services (for example, GitHub, GitLab, or Bitbucket) in a different failure domain than the cluster that runs Red Hat Edge Manager.
- Back up deployment configuration: Regularly back up Helm values files and related configuration manifests so you can redeploy consistently.
- Version and tag changes: Tag and version configuration changes so you can roll back or redeploy predictably.
Chapter 4. Restoring the PostgreSQL database for Red Hat Edge Manager on Red Hat OpenShift Container Platform
After you lose data or need to recover the control plane database on Red Hat OpenShift Container Platform, restore the flightctl PostgreSQL database and related state using the backup artifacts and methods that match your backup scope. This topic walks through scaling workloads, running flightctl-restore, and bringing services back. Exact database restore commands before flightctl-restore still depend on your backup format and tooling.
4.1. Prerequisites
The following prerequisites apply to the restore procedure for Red Hat Edge Manager on Red Hat OpenShift Container Platform.
- Cluster access to the Kubernetes cluster that hosts the Red Hat Edge Manager deployment.
-
The OpenShift project (Kubernetes namespace) where you installed the Red Hat Edge Manager Helm chart. The examples in this topic use the placeholder
rhem-chart-namespace; substitute your real namespace name everywhere it appears (production deployments often use a single namespace for all Red Hat Edge Manager workloads). -
Kubernetes tools:
kubectlinstalled and configured with administrative permissions. -
Flight Control CLI:
flightctlandflightctl-restoreavailable locally or in your restore environment. - Backup artifacts: access to the database backup files required for recovery.
-
Optional verification tools:
redis-cliandpg_isreadyfor validating service readiness and data integrity.
Database restore steps before you run flightctl-restore must match your backup strategy (for example, pg_restore, psql, or volume-level recovery). Follow your organization’s runbooks together with the outline below.
4.2. Restore procedure
Use this procedure to restore the flightctl PostgreSQL database for Red Hat Edge Manager on Red Hat OpenShift Container Platform.
Verify that the
flightctl-restoreversion matches the Red Hat Edge Manager server version:Run the following command for the
flightctlversion:flightctl version
Run the following command for the
flightctl-restoreversion:flightctl-restore version
Confirm that the server version and the restore version are the same:
echo "Server version: $(flightctl version)" echo "Restore version: $(flightctl-restore version)"
ImportantThe server version and restore version must match exactly. If they do not match, update your
flightctl-restorebinary to align with the server version before proceeding.
Scale down the Red Hat Edge Manager services to avoid data conflicts during the restore process. On Red Hat OpenShift Container Platform, all of these workloads run in a single OpenShift project; use the same namespace value on every command (the placeholder
rhem-chart-namespacestands for that project—replace it with yours):# Replace rhem-chart-namespace with your OpenShift project (one namespace for all deployments below) kubectl scale deployment flightctl-api --replicas=0 -n rhem-chart-namespace kubectl scale deployment flightctl-worker --replicas=0 -n rhem-chart-namespace kubectl scale deployment flightctl-periodic --replicas=0 -n rhem-chart-namespace kubectl scale deployment flightctl-alert-exporter --replicas=0 -n rhem-chart-namespace kubectl scale deployment flightctl-alertmanager-proxy --replicas=0 -n rhem-chart-namespace
Wait for pods to terminate, then verify:
# Same namespace as above kubectl get pods -n rhem-chart-namespace
Restore the
flightctlPostgreSQL database from your existing backup.After all Red Hat Edge Manager services are scaled down, restore the database using the method that matches your backup strategy.
-
Target database: Restore the PostgreSQL database instance named
flightctl. -
Supported methods: Use your preferred recovery procedure, such as
pg_restore,psql(for SQL dumps), or infrastructure-level volume snapshots. - Verification: Confirm that the database is fully accessible and that the integrity of the restored data is verified before proceeding.
ImportantThe specific restoration commands depend on your backup strategy and tooling. Ensure the database is fully restored and consistent before you continue.
-
Target database: Restore the PostgreSQL database instance named
Retrieve database and KV store credentials (same namespace as the scale commands):
DB_APP_PASSWORD=$(kubectl get secret flightctl-db-app-secret -n rhem-chart-namespace -o jsonpath='{.data.userPassword}' | base64 -d) echo "Database password retrieved successfully"KV_PASSWORD=$(kubectl get secret flightctl-kv-secret -n rhem-chart-namespace -o jsonpath='{.data.password}' | base64 -d)Set up port forwarding for the database and the KV store. Use separate terminal sessions for each port forward, or run them in the background.
Forward the database service:
# Forward database port (run in a separate terminal or in the background) kubectl port-forward svc/flightctl-db 5432:5432 -n rhem-chart-namespace & DB_PORT_FORWARD_PID=$! # Verify database connectivity (if available) pg_isready -h localhost -p 5432
Forward the KV store service:
# Forward KV store port (run in a separate terminal or in the background) kubectl port-forward svc/flightctl-kv 6379:6379 -n rhem-chart-namespace & KV_PORT_FORWARD_PID=$! # Verify KV store connectivity (if available) REDISCLI_AUTH="$KV_PASSWORD" redis-cli -h localhost -p 6379 ping
Run the restore command using environment variables for the database and KV store passwords:
DB_PASSWORD="$DB_APP_PASSWORD" KV_PASSWORD="$KV_PASSWORD" ./bin/flightctl-restore
Monitor the restore output for errors or completion messages.
Stop the port-forward processes when the restore finishes:
kill $DB_PORT_FORWARD_PID $KV_PORT_FORWARD_PID
If you ran the port forwards in separate terminals instead, stop them with Ctrl+C in those terminals.
Restart Red Hat Edge Manager services. Scale the deployments back to their normal replica counts in the same OpenShift project as in step 2:
# Replace rhem-chart-namespace with your OpenShift project (same single namespace for every command) kubectl scale deployment flightctl-api --replicas=1 -n rhem-chart-namespace kubectl scale deployment flightctl-worker --replicas=1 -n rhem-chart-namespace kubectl scale deployment flightctl-periodic --replicas=1 -n rhem-chart-namespace kubectl scale deployment flightctl-alert-exporter --replicas=1 -n rhem-chart-namespace kubectl scale deployment flightctl-alertmanager-proxy --replicas=1 -n rhem-chart-namespace kubectl get deployments -n rhem-chart-namespace kubectl get pods -n rhem-chart-namespace
4.3. After you restore
When the restore finishes and Red Hat Edge Manager workloads are healthy again in your Red Hat OpenShift Container Platform namespace, validate the control plane and plan for device reconciliation. Restoring the database changes what the service knows about devices; edge devices must reconnect and compare their live state to the restored specifications.
Operational follow-up
- Re-run any validation steps from the Testing backups section in the backup topic if you need a structured checklist. See Additional resources.
- Document deviations, incidents, and command variants in your runbooks so the next restore follows the same path.
4.4. Post-restore device status changes
After a successful restore, devices move through automatic status transitions while they reconnect and reconcile with the restored control plane data.
- AwaitingReconnect
-
Devices are always placed in
AwaitingReconnectfirst. The service waits for each device to report its current state again. Spec reconciliation for those devices remains paused until they reconnect. - Enrollment requests and post-restore approval
Devices approved after the restored backup was taken do not exist after the restore and must be approved again. After restore:
-
Devices created from a restored enrollment request are placed in
AwaitingReconnectand follow the normalAwaitingReconnectbehavior. -
Devices without an enrollment request before backup, with a non-zero deployed specification version, are placed in
AwaitingReconnectand follow the normalAwaitingReconnectbehavior. - Devices without an enrollment request before backup, with a zero specification version, move to normal status.
-
Devices created from a restored enrollment request are placed in
- ConflictPaused
-
After a device reconnects and reports its current state, the service compares the specification stored in the restored backup with the device-reported version. If the restored backup specification is older (for example, the device had moved forward while backups lagged), the device can enter
ConflictPaused. Rendering of new specifications stops for that device until an operator resolves the mismatch. Human review is required before you force configuration forward. - Normal operation
- When the restored specification and the device-reported state are compatible, the device returns to normal operational statuses (for example, online or updating) and usual reconciliation resumes.
Monitor device status
Use the flightctl CLI to see which devices need attention:
flightctl get devices flightctl get devices --field-selector=status.summary.status=AwaitingReconnect flightctl get devices --field-selector=status.summary.status=ConflictPaused
Resolve ConflictPaused devices
- Review the specification source: if the device belongs to a fleet, inspect the fleet template and selector; if not, inspect the device spec directly. Review labels and ownership to confirm how the restored specification applies to the device.
When you are confident the restored specification is what you want, resume the device or a group of devices. Replace
example-devicewith your device resource name and adjust selectors to match your environment:flightctl resume device example-device flightctl resume device --selector="environment=production"
Use additional
flightctl resume deviceoptions your deployment supports (for example, field selectors) if you need to resume many devices in bulk.
Additional resources