Skip to content

Commit

Permalink
Support for amphora provider services
Browse files Browse the repository at this point in the history
Adds support for launching the amphora controller
services. Implementation is informed by the fact that the amphora
provider specific services share many common configurations and
deployment requirements.

Note: full deployment support isn't available with this change and
would require several manual steps to enable.
  • Loading branch information
beagles committed Sep 21, 2023
1 parent 95d68c1 commit 291c3f0
Show file tree
Hide file tree
Showing 35 changed files with 2,848 additions and 27 deletions.
257 changes: 257 additions & 0 deletions api/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,257 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.10.0
creationTimestamp: null
name: octaviaamphoracontrollers.octavia.openstack.org
spec:
group: octavia.openstack.org
names:
kind: OctaviaAmphoraController
listKind: OctaviaAmphoraControllerList
plural: octaviaamphoracontrollers
singular: octaviaamphoracontroller
scope: Namespaced
versions:
- additionalPrinterColumns:
- description: Status
jsonPath: .status.conditions[0].status
name: Status
type: string
- description: Message
jsonPath: .status.conditions[0].message
name: Message
type: string
name: v1beta1
schema:
openAPIV3Schema:
description: OctaviaAmphoraController is the Schema for the octaviaworkers
API
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
description: OctaviaAmphoraControllerSpec defines common state for all
Octavia Amphora Controllers
properties:
certssecret:
description: '*kubebuilder:validation:Required Secret containing certs
for securing communication with amphora based Load Balancers'
type: string
containerImage:
description: ContainerImage - Amphora Controller Container Image URL
type: string
customServiceConfig:
default: '# add your customization here'
description: CustomServiceConfig - customize the service config using
this parameter to change service defaults, or overwrite rendered
information using raw OpenStack config format. The content gets
added to to /etc/<service>/<service>.conf.d directory as custom.conf
file.
type: string
databaseHostname:
description: DatabaseHostname - Octavia DB hostname
type: string
databaseInstance:
description: MariaDB instance name Right now required by the maridb-operator
to get the credentials from the instance to create the DB Might
not be required in future
type: string
databaseUser:
default: octavia
description: 'DatabaseUser - optional username used for octavia DB,
defaults to octavia TODO: -> implement needs work in mariadb-operator,
right now only octavia'
type: string
defaultConfigOverwrite:
additionalProperties:
type: string
description: 'ConfigOverwrite - interface to overwrite default config
files like e.g. logging.conf or policy.json. But can also be used
to add additional files. Those get added to the service config dir
in /etc/<service> . TODO: -> implement'
type: object
nodeSelector:
additionalProperties:
type: string
description: NodeSelector to target subset of worker nodes running
this service
type: object
passwordSelectors:
default:
database: OctaviaDatabasePassword
service: OctaviaPassword
description: PasswordSelectors - Selectors to identify the DB and
AdminUser password from the Secret
properties:
database:
default: OctaviaDatabasePassword
description: 'Database - Selector to get the octavia Database
user password from the Secret TODO: not used, need change in
mariadb-operator'
type: string
service:
default: OctaviaPassword
description: Service - Selector to get the service user password
from the Secret
type: string
type: object
replicas:
default: 1
description: Replicas - Octavia Worker Replicas
format: int32
maximum: 32
minimum: 0
type: integer
resources:
description: Resources - Compute Resources required by this service
(Limits/Requests). https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
properties:
claims:
description: "Claims lists the names of resources, defined in
spec.resourceClaims, that are used by this container. \n This
is an alpha field and requires enabling the DynamicResourceAllocation
feature gate. \n This field is immutable. It can only be set
for containers."
items:
description: ResourceClaim references one entry in PodSpec.ResourceClaims.
properties:
name:
description: Name must match the name of one entry in pod.spec.resourceClaims
of the Pod where this field is used. It makes that resource
available inside a container.
type: string
required:
- name
type: object
type: array
x-kubernetes-list-map-keys:
- name
x-kubernetes-list-type: map
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: 'Limits describes the maximum amount of compute resources
allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: 'Requests describes the minimum amount of compute
resources required. If Requests is omitted for a container,
it defaults to Limits if that is explicitly specified, otherwise
to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/'
type: object
type: object
role:
description: Role - the role for the controller (one of worker, housekeeping,
healthmanager)
type: string
secret:
description: Secret containing OpenStack password information for
octavia OctaviaDatabasePassword, AdminPassword
type: string
serviceAccount:
description: ServiceAccount - service account name used internally
to provide Octavia services the default SA name
type: string
serviceUser:
default: octavia
description: 'ServiceUser - service user name (TODO: beagles, do we
need this at all)'
type: string
transportURLSecret:
description: TransportURLSecret - Secret containing RabbitMQ transportURL
type: string
required:
- certssecret
- databaseInstance
- role
- secret
- serviceAccount
type: object
status:
description: OctaviaAmphoraControllerStatus defines the observed state
of the Octavia Amphora Controller
properties:
conditions:
description: Conditions
items:
description: Condition defines an observation of a API resource
operational state.
properties:
lastTransitionTime:
description: Last time the condition transitioned from one status
to another. This should be when the underlying condition changed.
If that is not known, then using the time when the API field
changed is acceptable.
format: date-time
type: string
message:
description: A human readable message indicating details about
the transition.
type: string
reason:
description: The reason for the condition's last transition
in CamelCase.
type: string
severity:
description: Severity provides a classification of Reason code,
so the current situation is immediately understandable and
could act accordingly. It is meant for situations where Status=False
and it should be indicated if it is just informational, warning
(next reconciliation might fix it) or an error (e.g. DB create
issue and no actions to automatically resolve the issue can/should
be done). For conditions where Status=Unknown or Status=True
the Severity should be SeverityNone.
type: string
status:
description: Status of the condition, one of True, False, Unknown.
type: string
type:
description: Type of condition in CamelCase.
type: string
required:
- lastTransitionTime
- status
- type
type: object
type: array
databaseHostname:
description: Octavia Database Hostname
type: string
hash:
additionalProperties:
type: string
description: Map of hashes to track e.g. job status
type: object
readyCount:
description: ReadyCount of Octavia Amphora Controllers
format: int32
type: integer
type: object
type: object
served: true
storage: true
subresources:
status: {}
Loading

0 comments on commit 291c3f0

Please sign in to comment.