Skip to main content
Version: 0.17

Upgrade Enterprise

Before proceeding, preserve the database and matching SESSION_SECRET, CertOps wrapping keys, SSO keyring, license, and deployment configuration. Use the backup procedure in the Core docs version paired with your Enterprise release. Read the target release notes and its Core compatibility manifest. An Enterprise upgrade includes the paired Core runtime; do not independently upgrade the Core subchart.

Reverting an image or chart does not reverse database migrations. Recovery requires a matching backup or an explicitly supported migration path.

Upgrading to 0.17.0 fingerprint inventory​

Back up the database and matching secrets, drain automation and prevent lifecycle writes. Apply additive Core migrations 62–66 and deploy the paired Core runtime and Enterprise overlays together before resuming management. Review ambiguous historical retirement evidence and verify grouping, rotation, endpoint removal/re-add, quota and decommission eligibility. Legacy retirement clients must supply the expected certificate identity. Reverting images does not undo migrations; recovery requires a matching pre-upgrade backup.

Each release ships as: new image tags in Harbor, a new Helm chart version in Harbor, and a new install bundle in Harbor. Replace NEXT_VERSION below with the version you are upgrading to. The bundle VERSION file records the version you extracted; TokenTimer support will confirm the target release when you renew.

Retrieve the target bundle​

The bundle is published as a generic OCI artifact, pulled with ORAS (a single static binary):

oras login harbor.tokentimer.ch -u 'robot$tokentimer-enterprise+<company>-<your-id>'
# Enter the robot token at the password prompt.
read -r -p 'Target Enterprise release: ' NEXT_VERSION
oras pull harbor.tokentimer.ch/tokentimer-enterprise/bundles/tokentimer-enterprise:"${NEXT_VERSION}"
tar -xzf "tokentimer-enterprise-${NEXT_VERSION}.tar.gz"

Docker Compose​

cd compose
# Bump TT_ENTERPRISE_TAG in .env if you pin versions, then:
docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d

Helm​

read -r -p 'Target Enterprise release: ' NEXT_VERSION
helm upgrade tokentimer oci://harbor.tokentimer.ch/tokentimer-enterprise/charts/tokentimer-enterprise \
--version "$NEXT_VERSION" \
-n tokentimer \
-f my-values.yaml

Re-check tokentimer.config.baseUrl and tokentimer.config.apiUrl in my-values.yaml after upgrade if you use SSO; chart defaults are localhost-oriented and are not auto-corrected from ingress hostnames.

Config changes in my-values.yaml (URLs, OIDC/SAML env, SMTP, and so on) take effect after the upgrade rolls the API and dashboard pods. The chart annotates Deployments so helm upgrade triggers that rollout automatically. Editing a running ConfigMap with kubectl alone does not restart pods.

Registry token renewal​

Your robot account expires at the same time as your license. When you renew, you receive a new robot token and must update your Docker login and the Kubernetes pull secret. Existing pods continue running with their cached image layers; only the next helm upgrade or docker compose pull re-authenticates. See Rotating credentials at renewal.

Verify after upgrade​

Confirm successful migrations, API/dashboard health, worker scheduling, the effective license, and administrator access. Check your first alert; if SSO is configured, check sign-in with an existing administrator before inviting users.

License lifecycle​

The license JWT drives feature gating at runtime:

StateBehavior
Valid licenseEnterprise features enabled, bell icon clean
Grace period (at most 30 days past expiry; TT_LICENSE_GRACE_DAYS cannot extend past 30)Features still work, responses carry the X-License-Warning header, bell icon shows yellow
Past graceSSO endpoints redirect to /login?error=license_<provider>_required, auto-sync POST/PUT/run return 403; existing configs can still be read and deleted (cleanup is allowed)

Admins can also import or remove a license JWT from System Settings > License at runtime. TT_LICENSE_KEY takes precedence over database imports, which take precedence over the mounted file. Resolution order and the grace period variable (TT_LICENSE_GRACE_DAYS, default and maximum 30) are documented in the Configuration reference.