Upgrade to Astro Private Cloud 2.0 from 1.x
Use this document to upgrade from Astro Private Cloud (APC) 1.x to 2.0. The upgrade primarily involves migrating your values.yaml override file to the new schema and running a Helm upgrade.
If you are upgrading from APC 0.37.x directly to 2.0, use the Upgrade to 2.0 from 0.37 guide instead. That guide covers the additional platform-level steps required when skipping 1.x.
Prerequisites
-
Verify that you are running APC 1.x. If you are on 0.37.x, see the Upgrade to 2.0 from 0.37 guide.
-
Back up your platform database. At minimum, create a snapshot or backup of your PostgreSQL database (RDS snapshot, Azure backup, Cloud SQL backup, or
pg_dump). -
Verify that all platform and Airflow Deployment Pods are healthy:
-
Python 3.10 or later installed on your local computer (required for the values migration script).
-
Install the
ruamel.yamlPython package:
Step 1: Get the migration script
The migration scripts are located in the bin/ folder of the Astronomer Helm chart repository. Clone the repository and check out the release-2.0 branch:
The script you need for this upgrade path is bin/migrate-helm-chart-values-1x-to-2x.py.
Step 2: Migrate your values.yaml
APC 2.0 introduces a unified feature flag schema that reorganizes scattered global.* boolean flags into domain-grouped structures with a consistent .enabled pattern. The migration script also restructures APC API configuration flags under astronomer.houston.config.deployments into nested paths. The migration script automates both transformations.
Back up your override file
Preview changes (dry run)
Run the migration script in dry-run mode to see what will change without modifying any files:
Example output:
If you see No migrations needed, your file is already compatible with 2.0.
Run the migration
In-place with backup (recommended)
Write to a new file
Output to stdout
This modifies your file directly and creates my-values.yaml.bak as a backup.
Review the migrated file
Open the migrated file and verify the changes look correct. The script preserves YAML comments and formatting.
Step 3: Validate the Helm upgrade (dry run)
Before making any changes to your cluster, run a Helm upgrade dry run to verify that the upgrade will succeed:
Replace 2.0.x with the specific patch version you are upgrading to.
Don’t proceed until the dry run completes successfully. If it fails, resolve the reported errors first.
Step 4: Upgrade to APC 2.0
Perform a standard Helm upgrade using your migrated values file:
Replace 2.0.x with the specific patch version you are upgrading to.
Airgapped environments
For airgapped environments that can’t access the internet, download the Helm chart .tgz file directly from the Astronomer Helm repository:
Replace <version> with the specific version you are upgrading to. Upload this file to your internal artifact repository, then reference it in your helm upgrade command.
Step 5: Migrate cluster configuration in the APC database
The Helm values migration Python script updates values.yaml on disk. Separately, the APC database can still store legacy flat deployments keys in each registered cluster’s config and configOverride until the cluster config path migration has run.
That migration is part of the APC API’s yarn migrate script (it invokes migrate-cluster-config-paths along with other jobs). If your control-plane upgrade already runs the full yarn migrate pipeline, this step is usually not a separate manual task.
If the migration hasn’t run or you need to run it again (for example after a failed migrate, or to confirm with a dry run first), you can run the same job independently with yarn migrate-cluster-config-paths from the houston-api pod, with the platform database reachable. Without this database update—whether it ran inside yarn migrate or a standalone run—cluster-level rows might not line up with the 2.0 config governance model.
-
What it does: For every registered cluster, the APC API rewrites stored
config/configOverridefrom old paths to the domain-grouped nested structure (the same renames the Helm migrator applies underastronomer.houston.config.deployments). It also invalidates the cluster details cache in the APC API. -
When you need a standalone run: For 1.x → 2.0 when you had registered data plane clusters in 1.x, and the cluster rows were never migrated (for example
yarn migratedidn’t run, or the step failed). Don’t treat this as a standard 0.37 → 2.0 requirement—you typically have no pre-existing 2.0 cluster records to fix on that path. -
Command (on a host with the APC API release and DB access):
A dry run reports how many clusters would be updated; a full run applies changes and reports migrated vs skipped counts. Exit is non-zero if any cluster failed.
-
Strict config validation in the APC API: The chart sets
astronomer.houston.strictSchemaCheck. For how the 1.x migrator injects it, see the values migration reference section. WhenstrictSchemaCheck.enabledistrue, the APC API rejectsdeploymentsconfig overrides with unknown keys or bad types. If you need to allow keys not yet in the generated schema, you can setastronomer.houston.strictSchemaCheck.enabled: falsein your platformvalues.yamland run anotherhelm upgrade(see Git-Sync relay metrics for a related case).
Step 6: Verify the upgrade
After the upgrade completes, verify that all platform components are running:
All Pods should be in a Running or Completed state. If any Pods are in a CrashLoopBackOff or Error state, see Debug upgrade.
Step 7: Upgrade all Airflow Deployments
After you have validated that all platform Pods are healthy, upgrade your Airflow Deployments to ensure full compatibility with 2.0.
Existing Airflow Deployments typically continue to function after the platform upgrade without immediate action. However, Astronomer recommends upgrading Deployments to ensure full compatibility with the new platform version.
To upgrade Deployments, use one of the following approaches:
- Astro UI: Upgrade each Deployment manually from the Astro UI by navigating to the Deployment and triggering an upgrade.
- APC API: Use the APC API
upsertDeploymentmutation for programmatic or bulk upgrades. - Astro CLI: Use the Astro CLI’s astro deploy command.
Values migration reference
bin/migrate-helm-chart-values-1x-to-2x.py applies rules in this order: (1) every global map in the file (values under each global key, including nested charts); (2) astronomer.houston.config flags; (3) astronomer.houston.config.deployments rewrites, plus chart-only key deletions; (4) nginx.cspPolicy; (5) inject astronomer.houston.strictSchemaCheck if missing. The following tables list every rule in bin/helm_chart_values_migration_shared.py that the 1.x script uses. Keep this list aligned with the release-2.0 branch of the Astronomer Helm chart. The script only migrates keys that are present in your file; it doesn’t add keys you didn’t set, except for strictSchemaCheck as noted. Keys with no rule here are left unchanged.
global feature flags
For each global mapping in the document, the old key is removed after migration (or dropped if the new path already exists).
astronomer.houston.config (non-deployments) flags and move
nginx.cspPolicy
astronomer.houston.config.deployments path migrations
Let d = astronomer.houston.config.deployments. Migrations run in the order below (same as HOUSTON_DEPLOYMENT_PATH_MIGRATIONS in code). The Transform column names match the code: boolean-to-airflowV3 adds a default minimumAstroRuntimeVersion when converting from a plain boolean, and taskUsageReport-to-taskUsageMetrics maps the legacy task usage object into metricsReporting.taskUsageMetrics. deprecated-unset means the key is removed with no replacement.
Removed keys (no replacement, deprecated-unset or chart-only delete)
Injected default
FAQ
Is the migration idempotent?
Yes. Running the script multiple times on the same file produces the same output. Running it on an already-migrated file reports “No migrations needed” and makes no changes.
What about YAML comments?
The script uses ruamel.yaml in round-trip mode, which preserves comments and formatting. Inline comments transfer to the new key names. Comments on untouched keys are unaffected.
What if I have both old and new keys?
If a key already exists at the new-schema path, the new-schema value takes precedence and the stale old key is removed. For example, if your file contains both global.rbacEnabled: true and global.rbac.enabled: false, the script keeps global.rbac.enabled: false and deletes global.rbacEnabled.
What if I have a full copy of values.yaml instead of just overrides?
The script works on full files, but Astronomer recommends extracting only your customizations into a separate override file. Running the migration on a full copy of the old defaults may carry forward old default values (like image tags) that should be updated to the new chart defaults.
Roll back
If you need to revert the values migration:
-
Restore your backup:
-
To downgrade the chart after a Helm upgrade: