For information relating to the generally available Azure Red Hat OpenShift v3 service, please see the following links:
- https://azure.microsoft.com/en-us/services/openshift/
- https://www.openshift.com/products/azure-openshift
- https://docs.microsoft.com/en-us/azure/openshift/
- https://docs.openshift.com/aro/welcome/index.html
-
If you have a whitelisted subscription and want to use
az aro
to create a cluster, follow usingaz aro
. -
If you want to deploy a development RP, follow deploy development RP.
-
.github/workflows: CI workflows using GitHub Actions.
-
cmd/rp: RP entrypoint.
-
deploy: ARM templates to deploy RP in development and production.
-
docs: Documentation.
-
hack: Build scripts and utilities.
-
pkg: RP source code:
-
pkg/api: RP internal and external API definitions.
-
pkg/backend: RP backend workers.
-
pkg/client: Autogenerated ARO service Go client.
-
pkg/database: RP CosmosDB wrapper layer.
-
pkg/deploy: /deploy ARM template generation code.
-
pkg/env: RP environment-specific shims for running in production, development or test
-
pkg/frontend: RP frontend webserver.
-
pkg/install: OpenShift installer wrapper layer.
-
pkg/swagger: /swagger Swagger specification generation code.
-
pkg/util: Utility libraries.
-
-
python: Autogenerated ARO service Python client and
az aro
client extension. -
swagger: Autogenerated ARO service Swagger specification.
-
test: End-to-end tests.
-
vendor: Vendored Go libraries.
-
pkg/frontend is intended to become a spec-compliant RP web server. It is backed by CosmosDB. Incoming PUT/DELETE requests are written to the database with an non-terminal (Updating/Deleting) provisioningState.
-
pkg/backend reads documents with non-terminal provisioningStates, asynchronously updates them and finally updates document with a terminal provisioningState (Succeeded/Failed). The backend updates the document with a heartbeat - if this fails, the document will be picked up by a different worker.
-
As CosmosDB does not support document patch, care is taken to correctly pass through any fields in the internal model which the reader is unaware of (see
github.com/ugorji/go/codec.MissingFielder
). This is intended to help in upgrade cases and (in the future) with multiple microservices reading from the database in parallel. -
Care is taken to correctly use optimistic concurrency to avoid document corruption through concurrent writes (see
RetryOnPreconditionFailed
). -
The pkg/api architecture differs somewhat from
github.com/openshift/openshift-azure
: the intention is to fix the broken merge semantics and try pushing validation into the versioned APIs to improve error reporting. -
Everything is intended to be crash/restart/upgrade-safe, horizontally scaleable, upgradeable...