openstack-resource-controller, or ORC, is a Kubernetes API for declarative management of OpenStack resources. By fully controlling the order of OpenStack operations, it allows consumers to easily create, manage, and reproduce complex deployments. ORC aims to be easily consumed both directly by users, and by higher level controllers. ORC aims to cover all OpenStack APIs which can be expressed declaratively.
ORC is based on Gophercloud, the OpenStack Go SDK.
ORC is deployed and used in production environments and is notably a dependency of Cluster API's OpenStack provider.
The Kubernetes API is currently v1alpha1. The core API patterns are stable and
we do not anticipate major structural changes, but the API is still evolving as
we add new controllers and features. We do not have a timeline for graduation to
v1beta1.
ORC versioning follows semver: there will be no breaking changes within a major release.
We welcome contributions of all kinds! Whether you’re fixing bugs, adding new features, or improving documentation, your help is greatly appreciated. To get started:
- Fork the repository.
- Create a new branch for your changes.
- Setup a local development environment.
- Read the developers guide.
- Make your changes and test thoroughly.
- Submit a pull request with a clear description of your changes.
For significant new features or architectural changes, please review our enhancement proposal process before starting work.
If you're unsure where to start, check out the open issues and feel free to ask questions or propose ideas!
Join us on kubernetes slack, on #gophercloud. Visit slack.k8s.io for an invitation.
ORC heavily uses CEL validations and thus depends on Kubernetes v1.29 or above.
To install a released version of ORC, the simplest is probably to use the provided install.yaml file:
export ORC_RELEASE="https://github.com/k-orc/openstack-resource-controller/releases/latest/download/install.yaml"
kubectl apply --server-side -f $ORC_RELEASE
You may later uninstall ORC using the same install.yaml file:
kubectl delete -f $ORC_RELEASE
| controller | 1.x | 2.x | main |
|---|---|---|---|
| addressscope | ✔ | ✔ | |
| domain | ✔ | ✔ | |
| endpoint | ◐ | ◐ | |
| flavor | ✔ | ✔ | |
| floating ip | ◐ | ◐ | |
| group | ✔ | ✔ | |
| image | ✔ | ✔ | ✔ |
| keypair | ◐ | ◐ | |
| network | ◐ | ◐ | |
| port | ◐ | ◐ | |
| project | ◐ | ◐ | |
| role | ✔ | ✔ | |
| router | ◐ | ◐ | |
| security group (incl. rule) | ✔ | ✔ | |
| server | ◐ | ◐ | |
| server group | ✔ | ✔ | |
| service | ✔ | ✔ | |
| subnet | ◐ | ◐ | |
| trunk | ✔ | ✔ | |
| user | ◐ | ◐ | |
| volume | ◐ | ◐ | |
| volume type | ◐ | ◐ |
✔: mostly implemented
◐: partially implemented
Copyright 2026.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.