0.88.0,
which ships Automation 1.23.2. Keep the automation image supplied by your licensed
chart unless your release instructions require an override. Compare these settings
with your licensed chart values before installing or upgrading.
Prerequisites
- A public HTTPS application origin, such as
https://app.openhands.example.com. Event-based automations need a URL the event source can reach. - A PostgreSQL instance reachable from the automation pod. This example creates
a separate
automationsdatabase andautomation_userin the bundled instance. - A durable S3-compatible or GCS bucket for automation packages, with access to list the bucket and read, write, and delete objects. Provision storage and permissions separately from the application values below.
- Required and optional Kubernetes Secrets, with values stored in your secret manager:
Choose Package Storage
Enterprise conversation storage (filestore) and automation package storage
(automation.filestore) are separate consumers. Configuring one does not configure
the other. Use a separate automation bucket, such as automation-data, even when
both consumers use the same object-store endpoint. Workspace PVCs are separate again.
The chart defaults to automation.filestore.type: gcs; explicitly set type: s3
when using S3 or RustFS.
- Amazon EKS
- Azure AKS
- Google GKE
Use Amazon S3 with IRSA or EKS Pod Identity
granted to the automation service account. IRSA is EKS-specific; do not
copy its annotation into AKS or GKE values. For IRSA, merge this into the
shared configuration below:Leave
endpoint empty for AWS S3. Provision the bucket and IAM access first.S3-Compatible Settings for RustFS or External Storage
After provisioning the store, merge the following into your automation values. These are application connection settings; they do not deploy RustFS, provision its disks, or configure backup and restore.us-east-1 in the AKS RustFS example). The URL scheme determines TLS;
use the appropriate trusted HTTPS endpoint for an external service. The referenced
Secret must be in the openhands release namespace and contain the two named keys. It can
reference the same credential Secret as the store if its grants cover the separate
automation bucket. If reusing a Secret with different key names, set
accessKeyIdKey and secretAccessKeyKey to match. Never put real access keys in
values or Git.
Provision the bucket first, or set automation.filestore.createBucket: true and
grant bucket-creation permission to let the automation service create it at startup.
Enabling RustFS alone does not create or select the automation bucket. Plan disk
capacity, availability, backups and restore for the in-cluster store.
Step 1: Create Secrets
Use independent, random values for the database password, service key and webhook secret. Create these three Kubernetes Secrets in theopenhands namespace, plus
the filestore credential Secret if using S3-compatible access keys. Create the
optional Git sync and KV Secrets if you need those features; without them, Git
sync credential storage is unavailable and the KV store is disabled. If you
create Secrets with kubectl, use --from-file or your secret manager rather than putting
values directly in a shell command. The service key and webhook secret should
differ. Keep secret values out of your Helm values file and Git repository.
Step 2: Add Helm Values
Add the following to the values you already use for theopenhands release.
Replace the host and database settings with your own, and merge exactly one
storage choice from above into this configuration. Keep your existing
installation values alongside these overrides when upgrading. Remove
automation.image.tag overrides copied from older versions of this guide or the
AKS overlay, unless your release instructions explicitly require an override.
automationService.url value does include /api/automation. It is
used by the OpenHands application to reach the automation service.
automationService.eventForwardingEnabled is what makes the built-in event sources deliver:
GitHub, Azure DevOps, Jira Data Center, and Bitbucket Data Center events reach automations only
when it is true (Replicated installations set it when Automations are enabled). Jira Data
Center events also need jiraDc.enabled: true, which turns on its webhook endpoint. See
Data Center Event Automations.Step 3: Upgrade and Verify
Upgrade the same licensed release used for your initial installation. This example assumes the baseline and merged automation values are in separate files. Use your installed chart version; enabling storage is not a release upgrade. On AKS, append--values values-aks-runc.yaml last:
Automate in Canvas. Create a read-only prompt
automation, run it once with Run now, and confirm that a completed run
appears in Activity Log. For example, ask it to summarize the README of a
test repository without changing files or posting messages. Disable the test
schedule afterward if you do not want it to run again.
Check the automation bucket for the package object after the test run, using an
object-store client authenticated with your approved storage identity:
svc/<rustfs-service> with
kubectl -n openhands port-forward svc/<rustfs-service> 9000:9000 and use
--endpoint-url http://localhost:9000 from your workstation.
In a test environment, restart the automation deployment:
Run now and confirm it completes. This checks
that package storage survives pod replacement. A healthy pod alone does not verify
storage access or persistence.
Troubleshooting Storage
For creating and managing automations, see Automations Overview.
For events from another service, see Event-Based Automations.

