From df78a5728f435c3b836e9f8dc185a304907e9697 Mon Sep 17 00:00:00 2001 From: Luca Miccini Date: Fri, 20 Mar 2026 14:01:07 +0100 Subject: [PATCH] Drop rabbitmq-cluster-operator and add rabbitmq version label Co-Authored-By: Claude Opus 4.6 --- Makefile | 1 - ....openstack.org_openstackcontrolplanes.yaml | 54 +- .../core.openstack.org_openstackversions.yaml | 4 + .../operator.openstack.org_openstacks.yaml | 1 - api/core/v1beta1/openstackversion_types.go | 3 +- api/core/v1beta1/zz_generated.deepcopy.go | 5 + api/go.mod | 3 +- api/go.sum | 6 +- api/operator/v1beta1/openstack_types.go | 18 +- bindata/crds/crds.yaml | 58 +- .../crds/rabbitmq.com_rabbitmqclusters.yaml | 5378 ----------------- .../rabbitmq.openstack.org_rabbitmqs.yaml | 341 +- bindata/operator/rabbit.yaml | 57 - bindata/rbac/infra-operator-rbac.yaml | 22 +- .../rbac/rabbitmq-cluster-operator-rbac.yaml | 203 - ....openstack.org_openstackcontrolplanes.yaml | 54 +- .../core.openstack.org_openstackversions.yaml | 4 + .../operator.openstack.org_openstacks.yaml | 1 - config/operator/default_images.yaml | 2 +- config/operator/manager_operator_images.yaml | 4 +- config/operator/rabbit.yaml | 57 - go.mod | 2 + go.sum | 4 +- hack/export_operator_related_images.sh | 3 +- hack/export_related_images.sh | 2 +- hack/pin-bundle-images.sh | 5 - hack/sync-bindata.sh | 9 +- .../operator/openstack_controller.go | 127 +- internal/openstack/rabbitmq.go | 10 +- internal/openstack/version.go | 3 + .../05-cleanup.yaml | 3 + .../05-cleanup.yaml | 2 + .../ctlplane-basic-deployment/05-cleanup.yaml | 2 + .../tests/ctlplane-collapsed/02-cleanup.yaml | 3 + .../ctlplane-galera-3replicas/02-cleanup.yaml | 2 + .../ctlplane-nodeselectors/05-cleanup.yaml | 2 + .../03-cleanup.yaml | 2 + .../05-cleanup.yaml | 2 + .../05-cleanup.yaml | 2 + .../11-cleanup.yaml | 2 + .../ctlplane-tls-custom-route/05-cleanup.yaml | 2 + 41 files changed, 473 insertions(+), 5992 deletions(-) delete mode 100644 bindata/crds/rabbitmq.com_rabbitmqclusters.yaml delete mode 100644 bindata/operator/rabbit.yaml delete mode 100644 bindata/rbac/rabbitmq-cluster-operator-rbac.yaml delete mode 100644 config/operator/rabbit.yaml diff --git a/Makefile b/Makefile index 7de3aeac69..04a26810b3 100644 --- a/Makefile +++ b/Makefile @@ -166,7 +166,6 @@ bindata: kustomize yq ## Call sync bindata script sed -i bindata/operator/operator.yaml -e "/customRequests/c\\ cpu: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.CPU }}\n memory: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.Memory }}" sed -i bindata/operator/operator.yaml -e "/customTolerations/c\\ tolerations:\n{{- range .OpenStackOperator.Deployment.Tolerations }}\n - key: \"{{ .Key }}\"\n{{- if .Operator }}\n operator: \"{{ .Operator }}\"\n{{- end }}\n{{- if .Value }}\n value: \"{{ .Value }}\"\n{{- end }}\n{{- if .Effect }}\n effect: \"{{ .Effect }}\"\n{{- end }}\n{{- if .TolerationSeconds }}\n tolerationSeconds: {{ .TolerationSeconds }}\n{{- end }}\n{{- end }}" cp config/operator/managers.yaml bindata/operator/ - cp config/operator/rabbit.yaml bindata/operator/ $(KUSTOMIZE) build config/rbac > bindata/rbac/rbac.yaml /bin/bash hack/sync-bindata.sh diff --git a/api/bases/core.openstack.org_openstackcontrolplanes.yaml b/api/bases/core.openstack.org_openstackcontrolplanes.yaml index bce2e279e5..01faa67c0b 100644 --- a/api/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/api/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -14138,10 +14138,25 @@ spec: x-kubernetes-list-type: atomic type: object type: object + config: + properties: + additionalConfig: + type: string + additionalPlugins: + items: + type: string + type: array + x-kubernetes-list-type: atomic + advancedConfig: + type: string + envConfig: + type: string + erlangInetConfig: + type: string + type: object delayStartSeconds: default: 30 format: int32 - minimum: 0 type: integer nodeSelector: additionalProperties: @@ -14260,9 +14275,8 @@ spec: type: object x-kubernetes-preserve-unknown-fields: true type: object + x-kubernetes-preserve-unknown-fields: true persistence: - default: - storage: 10Gi properties: storage: anyOf: @@ -14330,23 +14344,16 @@ spec: rabbitmq: properties: additionalConfig: - maxLength: 100000 type: string additionalPlugins: items: - maxLength: 100 - pattern: ^\w+$ type: string - maxItems: 100 type: array advancedConfig: - maxLength: 100000 type: string envConfig: - maxLength: 100000 type: string erlangInetConfig: - maxLength: 2000 type: string type: object replicas: @@ -14437,27 +14444,33 @@ spec: type: string type: object ipFamilyPolicy: - enum: - - SingleStack - - PreferDualStack - - RequireDualStack type: string labels: additionalProperties: type: string type: object type: - default: ClusterIP - enum: - - ClusterIP - - LoadBalancer - - NodePort type: string type: object skipPostDeploySteps: type: boolean + storage: + properties: + storage: + anyOf: + - type: integer + - type: string + default: 10Gi + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClassName: + type: string + type: object + targetVersion: + pattern: ^\d+\.\d+(\.\d+)?$ + type: string terminationGracePeriodSeconds: - default: 604800 + default: 60 format: int64 minimum: 0 type: integer @@ -14486,6 +14499,7 @@ spec: type: string type: object type: array + x-kubernetes-list-type: atomic topologyRef: properties: name: diff --git a/api/bases/core.openstack.org_openstackversions.yaml b/api/bases/core.openstack.org_openstackversions.yaml index ae79d6c77d..0ee1523021 100644 --- a/api/bases/core.openstack.org_openstackversions.yaml +++ b/api/bases/core.openstack.org_openstackversions.yaml @@ -250,6 +250,8 @@ spec: properties: glanceWsgi: type: string + rabbitmqVersion: + type: string type: object type: object availableVersion: @@ -685,6 +687,8 @@ spec: properties: glanceWsgi: type: string + rabbitmqVersion: + type: string type: object trackedCustomImages: additionalProperties: diff --git a/api/bases/operator.openstack.org_openstacks.yaml b/api/bases/operator.openstack.org_openstacks.yaml index 32ea32218d..3b72a29ac5 100644 --- a/api/bases/operator.openstack.org_openstacks.yaml +++ b/api/bases/operator.openstack.org_openstacks.yaml @@ -141,7 +141,6 @@ spec: - openstack-baremetal - ovn - placement - - rabbitmq-cluster - swift - telemetry - test diff --git a/api/core/v1beta1/openstackversion_types.go b/api/core/v1beta1/openstackversion_types.go index 1f138156d6..3a360b49ad 100644 --- a/api/core/v1beta1/openstackversion_types.go +++ b/api/core/v1beta1/openstackversion_types.go @@ -177,7 +177,8 @@ type ContainerTemplate struct { // ServiceDefaults - struct that contains defaults for OSP services that can change over time // but are associated with a specific OpenStack release version type ServiceDefaults struct { - GlanceWsgi *string `json:"glanceWsgi,omitempty"` + GlanceWsgi *string `json:"glanceWsgi,omitempty"` + RabbitmqVersion *string `json:"rabbitmqVersion,omitempty"` } // OpenStackVersionStatus defines the observed state of OpenStackVersion diff --git a/api/core/v1beta1/zz_generated.deepcopy.go b/api/core/v1beta1/zz_generated.deepcopy.go index b8b1cf7fe5..a5107687d7 100644 --- a/api/core/v1beta1/zz_generated.deepcopy.go +++ b/api/core/v1beta1/zz_generated.deepcopy.go @@ -1763,6 +1763,11 @@ func (in *ServiceDefaults) DeepCopyInto(out *ServiceDefaults) { *out = new(string) **out = **in } + if in.RabbitmqVersion != nil { + in, out := &in.RabbitmqVersion, &out.RabbitmqVersion + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceDefaults. diff --git a/api/go.mod b/api/go.mod index a49f7040a3..0bd2e59cd7 100644 --- a/api/go.mod +++ b/api/go.mod @@ -86,7 +86,6 @@ require ( github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.65.0 // indirect github.com/prometheus/procfs v0.16.1 // indirect - github.com/rabbitmq/cluster-operator/v2 v2.16.0 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/spf13/pflag v1.0.9 // indirect github.com/x448/float16 v0.8.4 // indirect @@ -143,3 +142,5 @@ replace k8s.io/code-generator => k8s.io/code-generator v0.31.14 //allow-merging replace k8s.io/component-base => k8s.io/component-base v0.31.14 //allow-merging replace github.com/cert-manager/cmctl/v2 => github.com/cert-manager/cmctl/v2 v2.1.2-0.20241127223932-88edb96860cf //allow-merging + +replace github.com/openstack-k8s-operators/infra-operator/apis => github.com/lmiccini/infra-operator/apis v0.0.0-20260320164938-2057972ad9de diff --git a/api/go.sum b/api/go.sum index 3950fa6340..2b44f3b9e9 100644 --- a/api/go.sum +++ b/api/go.sum @@ -90,6 +90,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lmiccini/infra-operator/apis v0.0.0-20260320164938-2057972ad9de h1:kapZ0xUDC+MrtXXLmqvuWQg5nxuFNoxM/EfhXhsxdnY= +github.com/lmiccini/infra-operator/apis v0.0.0-20260320164938-2057972ad9de/go.mod h1:QXzR9220I2d7CcoHqL4HWtU1PogJSN3NLmnh+bK3mco= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo= @@ -126,8 +128,6 @@ github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20260314075609-1b8 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20260314075609-1b85a36fcef9/go.mod h1:8o0wLkMYyDDqZAdvU/YKMwgwiOyQzADWrmy38rZcHyE= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20260314075038-6794e497bcfc h1:3r2wVspdAWx4j7ZScrukfLiPcGM7J9S/ClyOHsbY7ro= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20260314075038-6794e497bcfc/go.mod h1:P0hUdNDsv8ISnK2GyFogNQF+dxatbKhtQ76UKhX6t7w= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20260314122830-5d1715fa2f64 h1:1orzxWFuQH+QarnH32GXtc4GbE0efL4NddSsRFx3QYM= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20260314122830-5d1715fa2f64/go.mod h1:nC/Jf3OYJRML8UEzJ/mn/TQcSCv/nhqO6x6LGkdDt60= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20260314080422-d98151f45e34 h1:UgaEid1bqgUzsLg21BHtXSYOV2pljxR1Z3i1BcRVNQc= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20260314080422-d98151f45e34/go.mod h1:xEHdAz96FYfnBb1QAFgbfR2BCWCBIqhqKYT84IqU6zc= github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20260314080138-b41734470581 h1:FntUoWPVWx8xaGCwP7kdUVT/N8Z0kfIxLLK4L+oQJ7c= @@ -154,8 +154,6 @@ github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260314104343-4225 github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20260314104343-4225d7a41ec7/go.mod h1:PxLz6iV8Z3Ql2QDylxLiljfoisGptsUVWEvbcXC8I3o= github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260314091105-4ba8bc4c4955 h1:5LJ5YAEGNRZh5hVolC23bzViQoaT1P0MgRQu9xc7RRU= github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20260314091105-4ba8bc4c4955/go.mod h1:+8lsJYJYsR8fBvgY4Wtvde4iY+l9O5PBPf6yhVQ1LQU= -github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250929174222-a0d328fa4dec h1:saovr368HPAKHN0aRPh8h8n9s9dn3d8Frmfua0UYRlc= -github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250929174222-a0d328fa4dec/go.mod h1:Nh2NEePLjovUQof2krTAg4JaAoLacqtPTZQXK6izNfg= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260314085148-07c5c7f39186 h1:2uSOOWJJXomiSegRgMrhbOcUQsyxEV+m7OJP4pXlCE0= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20260314085148-07c5c7f39186/go.mod h1:kOdVr5xAw1jdwYJ8P9yKaqc+qbEzKhuxvOQdPfelPdg= github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20260314104344-15c2ffcfe08e h1:mjuYX0PJjdZCuXzq+S4VLmZcAZ6BgcQLm7WB1DSfd14= diff --git a/api/operator/v1beta1/openstack_types.go b/api/operator/v1beta1/openstack_types.go index 1918bd2a3a..96b42bb517 100644 --- a/api/operator/v1beta1/openstack_types.go +++ b/api/operator/v1beta1/openstack_types.go @@ -44,7 +44,6 @@ const ( OpenStackBaremetalOperatorName = "openstack-baremetal" OvnOperatorName = "ovn" PlacementOperatorName = "placement" - RabbitMQOperatorName = "rabbitmq-cluster" SwiftOperatorName = "swift" TelemetryOperatorName = "telemetry" TestOperatorName = "test" @@ -161,21 +160,6 @@ var ( { Name: PlacementOperatorName, }, - { - Name: RabbitMQOperatorName, - ControllerManager: ContainerSpec{ - Resources: corev1.ResourceRequirements{ - Requests: corev1.ResourceList{ - corev1.ResourceCPU: resource.MustParse("5m"), - corev1.ResourceMemory: resource.MustParse("64Mi"), - }, - Limits: corev1.ResourceList{ - corev1.ResourceCPU: resource.MustParse("200m"), - corev1.ResourceMemory: resource.MustParse("500Mi"), - }, - }, - }, - }, { Name: SwiftOperatorName, }, @@ -204,7 +188,7 @@ type OpenStackSpec struct { type OperatorSpec struct { // +kubebuilder:validation:Required // +kubebuilder:validation:MinLength=1 - // +kubebuilder:validation:Enum:=openstack;barbican;cinder;designate;glance;heat;horizon;infra;ironic;keystone;manila;mariadb;neutron;nova;octavia;openstack-baremetal;ovn;placement;rabbitmq-cluster;swift;telemetry;test;watcher + // +kubebuilder:validation:Enum:=openstack;barbican;cinder;designate;glance;heat;horizon;infra;ironic;keystone;manila;mariadb;neutron;nova;octavia;openstack-baremetal;ovn;placement;swift;telemetry;test;watcher // Name of the service operators. Name string `json:"name"` diff --git a/bindata/crds/crds.yaml b/bindata/crds/crds.yaml index a7c1fac3b0..89e08099fd 100644 --- a/bindata/crds/crds.yaml +++ b/bindata/crds/crds.yaml @@ -14403,10 +14403,25 @@ spec: x-kubernetes-list-type: atomic type: object type: object + config: + properties: + additionalConfig: + type: string + additionalPlugins: + items: + type: string + type: array + x-kubernetes-list-type: atomic + advancedConfig: + type: string + envConfig: + type: string + erlangInetConfig: + type: string + type: object delayStartSeconds: default: 30 format: int32 - minimum: 0 type: integer nodeSelector: additionalProperties: @@ -14525,9 +14540,8 @@ spec: type: object x-kubernetes-preserve-unknown-fields: true type: object + x-kubernetes-preserve-unknown-fields: true persistence: - default: - storage: 10Gi properties: storage: anyOf: @@ -14595,23 +14609,16 @@ spec: rabbitmq: properties: additionalConfig: - maxLength: 100000 type: string additionalPlugins: items: - maxLength: 100 - pattern: ^\w+$ type: string - maxItems: 100 type: array advancedConfig: - maxLength: 100000 type: string envConfig: - maxLength: 100000 type: string erlangInetConfig: - maxLength: 2000 type: string type: object replicas: @@ -14702,27 +14709,33 @@ spec: type: string type: object ipFamilyPolicy: - enum: - - SingleStack - - PreferDualStack - - RequireDualStack type: string labels: additionalProperties: type: string type: object type: - default: ClusterIP - enum: - - ClusterIP - - LoadBalancer - - NodePort type: string type: object skipPostDeploySteps: type: boolean + storage: + properties: + storage: + anyOf: + - type: integer + - type: string + default: 10Gi + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClassName: + type: string + type: object + targetVersion: + pattern: ^\d+\.\d+(\.\d+)?$ + type: string terminationGracePeriodSeconds: - default: 604800 + default: 60 format: int64 minimum: 0 type: integer @@ -14751,6 +14764,7 @@ spec: type: string type: object type: array + x-kubernetes-list-type: atomic topologyRef: properties: name: @@ -21465,6 +21479,8 @@ spec: properties: glanceWsgi: type: string + rabbitmqVersion: + type: string type: object type: object availableVersion: @@ -21900,6 +21916,8 @@ spec: properties: glanceWsgi: type: string + rabbitmqVersion: + type: string type: object trackedCustomImages: additionalProperties: diff --git a/bindata/crds/rabbitmq.com_rabbitmqclusters.yaml b/bindata/crds/rabbitmq.com_rabbitmqclusters.yaml deleted file mode 100644 index ab439948e7..0000000000 --- a/bindata/crds/rabbitmq.com_rabbitmqclusters.yaml +++ /dev/null @@ -1,5378 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.16.5 - creationTimestamp: null - labels: - app.kubernetes.io/component: rabbitmq-operator - app.kubernetes.io/name: rabbitmq-cluster-operator - app.kubernetes.io/part-of: rabbitmq - servicebinding.io/provisioned-service: "true" - name: rabbitmqclusters.rabbitmq.com -spec: - group: rabbitmq.com - names: - categories: - - all - - rabbitmq - kind: RabbitmqCluster - listKind: RabbitmqClusterList - plural: rabbitmqclusters - shortNames: - - rmq - singular: rabbitmqcluster - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.conditions[?(@.type == 'AllReplicasReady')].status - name: AllReplicasReady - type: string - - jsonPath: .status.conditions[?(@.type == 'ReconcileSuccess')].status - name: ReconcileSuccess - type: string - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1beta1 - schema: - openAPIV3Schema: - description: |- - RabbitmqCluster is the Schema for the RabbitmqCluster API. Each instance of this object - corresponds to a single RabbitMQ cluster. - 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: Spec is the desired state of the RabbitmqCluster Custom Resource. - properties: - affinity: - description: Affinity scheduling rules to be applied on created Pods. - properties: - nodeAffinity: - description: Describes node affinity scheduling rules for the - pod. - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: |- - The scheduler will prefer to schedule pods to nodes that satisfy - the affinity expressions specified by this field, but it may choose - a node that violates one or more of the expressions. The node that is - most preferred is the one with the greatest sum of weights, i.e. - for each node that meets all of the scheduling requirements (resource - request, requiredDuringScheduling affinity expressions, etc.), - compute a sum by iterating through the elements of this field and adding - "weight" to the sum if the node matches the corresponding matchExpressions; the - node(s) with the highest sum are the most preferred. - items: - description: |- - An empty preferred scheduling term matches all objects with implicit weight 0 - (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). - properties: - preference: - description: A node selector term, associated with the - corresponding weight. - properties: - matchExpressions: - description: A list of node selector requirements - by node's labels. - items: - description: |- - A node selector requirement is a selector that contains values, a key, and an operator - that relates the key and values. - properties: - key: - description: The label key that the selector - applies to. - type: string - operator: - description: |- - Represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: |- - An array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. If the operator is Gt or Lt, the values - array must have a single element, which will be interpreted as an integer. - This array is replaced during a strategic merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchFields: - description: A list of node selector requirements - by node's fields. - items: - description: |- - A node selector requirement is a selector that contains values, a key, and an operator - that relates the key and values. - properties: - key: - description: The label key that the selector - applies to. - type: string - operator: - description: |- - Represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: |- - An array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. If the operator is Gt or Lt, the values - array must have a single element, which will be interpreted as an integer. - This array is replaced during a strategic merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - type: object - x-kubernetes-map-type: atomic - weight: - description: Weight associated with matching the corresponding - nodeSelectorTerm, in the range 1-100. - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - x-kubernetes-list-type: atomic - requiredDuringSchedulingIgnoredDuringExecution: - description: |- - If the affinity requirements specified by this field are not met at - scheduling time, the pod will not be scheduled onto the node. - If the affinity requirements specified by this field cease to be met - at some point during pod execution (e.g. due to an update), the system - may or may not try to eventually evict the pod from its node. - properties: - nodeSelectorTerms: - description: Required. A list of node selector terms. - The terms are ORed. - items: - description: |- - A null or empty node selector term matches no objects. The requirements of - them are ANDed. - The TopologySelectorTerm type implements a subset of the NodeSelectorTerm. - properties: - matchExpressions: - description: A list of node selector requirements - by node's labels. - items: - description: |- - A node selector requirement is a selector that contains values, a key, and an operator - that relates the key and values. - properties: - key: - description: The label key that the selector - applies to. - type: string - operator: - description: |- - Represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: |- - An array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. If the operator is Gt or Lt, the values - array must have a single element, which will be interpreted as an integer. - This array is replaced during a strategic merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchFields: - description: A list of node selector requirements - by node's fields. - items: - description: |- - A node selector requirement is a selector that contains values, a key, and an operator - that relates the key and values. - properties: - key: - description: The label key that the selector - applies to. - type: string - operator: - description: |- - Represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: |- - An array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. If the operator is Gt or Lt, the values - array must have a single element, which will be interpreted as an integer. - This array is replaced during a strategic merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - type: object - x-kubernetes-map-type: atomic - type: array - x-kubernetes-list-type: atomic - required: - - nodeSelectorTerms - type: object - x-kubernetes-map-type: atomic - type: object - podAffinity: - description: Describes pod affinity scheduling rules (e.g. co-locate - this pod in the same node, zone, etc. as some other pod(s)). - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: |- - The scheduler will prefer to schedule pods to nodes that satisfy - the affinity expressions specified by this field, but it may choose - a node that violates one or more of the expressions. The node that is - most preferred is the one with the greatest sum of weights, i.e. - for each node that meets all of the scheduling requirements (resource - request, requiredDuringScheduling affinity expressions, etc.), - compute a sum by iterating through the elements of this field and adding - "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the - node(s) with the highest sum are the most preferred. - items: - description: The weights of all of the matched WeightedPodAffinityTerm - fields are added per-node to find the most preferred node(s) - properties: - podAffinityTerm: - description: Required. A pod affinity term, associated - with the corresponding weight. - properties: - labelSelector: - description: |- - A label query over a set of resources, in this case pods. - If it's null, this PodAffinityTerm matches with no Pods. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are - ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that - the selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - description: |- - MatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both matchLabelKeys and labelSelector. - Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - description: |- - MismatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. - Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - description: |- - A label query over the set of namespaces that the term applies to. - The term is applied to the union of the namespaces selected by this field - and the ones listed in the namespaces field. - null selector and null or empty namespaces list means "this pod's namespace". - An empty selector ({}) matches all namespaces. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are - ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that - the selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - description: |- - namespaces specifies a static list of namespace names that the term applies to. - The term is applied to the union of the namespaces listed in this field - and the ones selected by namespaceSelector. - null or empty namespaces list and null namespaceSelector means "this pod's namespace". - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - description: |- - This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching - the labelSelector in the specified namespaces, where co-located is defined as running on a node - whose value of the label with key topologyKey matches that of any node on which any of the - selected pods is running. - Empty topologyKey is not allowed. - type: string - required: - - topologyKey - type: object - weight: - description: |- - weight associated with matching the corresponding podAffinityTerm, - in the range 1-100. - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - x-kubernetes-list-type: atomic - requiredDuringSchedulingIgnoredDuringExecution: - description: |- - If the affinity requirements specified by this field are not met at - scheduling time, the pod will not be scheduled onto the node. - If the affinity requirements specified by this field cease to be met - at some point during pod execution (e.g. due to a pod label update), the - system may or may not try to eventually evict the pod from its node. - When there are multiple elements, the lists of nodes corresponding to each - podAffinityTerm are intersected, i.e. all terms must be satisfied. - items: - description: |- - Defines a set of pods (namely those matching the labelSelector - relative to the given namespace(s)) that this pod should be - co-located (affinity) or not co-located (anti-affinity) with, - where co-located is defined as running on a node whose value of - the label with key matches that of any node on which - a pod of the set of pods is running - properties: - labelSelector: - description: |- - A label query over a set of resources, in this case pods. - If it's null, this PodAffinityTerm matches with no Pods. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the - selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - description: |- - MatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both matchLabelKeys and labelSelector. - Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - description: |- - MismatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. - Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - description: |- - A label query over the set of namespaces that the term applies to. - The term is applied to the union of the namespaces selected by this field - and the ones listed in the namespaces field. - null selector and null or empty namespaces list means "this pod's namespace". - An empty selector ({}) matches all namespaces. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the - selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - description: |- - namespaces specifies a static list of namespace names that the term applies to. - The term is applied to the union of the namespaces listed in this field - and the ones selected by namespaceSelector. - null or empty namespaces list and null namespaceSelector means "this pod's namespace". - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - description: |- - This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching - the labelSelector in the specified namespaces, where co-located is defined as running on a node - whose value of the label with key topologyKey matches that of any node on which any of the - selected pods is running. - Empty topologyKey is not allowed. - type: string - required: - - topologyKey - type: object - type: array - x-kubernetes-list-type: atomic - type: object - podAntiAffinity: - description: Describes pod anti-affinity scheduling rules (e.g. - avoid putting this pod in the same node, zone, etc. as some - other pod(s)). - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: |- - The scheduler will prefer to schedule pods to nodes that satisfy - the anti-affinity expressions specified by this field, but it may choose - a node that violates one or more of the expressions. The node that is - most preferred is the one with the greatest sum of weights, i.e. - for each node that meets all of the scheduling requirements (resource - request, requiredDuringScheduling anti-affinity expressions, etc.), - compute a sum by iterating through the elements of this field and adding - "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the - node(s) with the highest sum are the most preferred. - items: - description: The weights of all of the matched WeightedPodAffinityTerm - fields are added per-node to find the most preferred node(s) - properties: - podAffinityTerm: - description: Required. A pod affinity term, associated - with the corresponding weight. - properties: - labelSelector: - description: |- - A label query over a set of resources, in this case pods. - If it's null, this PodAffinityTerm matches with no Pods. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are - ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that - the selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - description: |- - MatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both matchLabelKeys and labelSelector. - Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - description: |- - MismatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. - Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - description: |- - A label query over the set of namespaces that the term applies to. - The term is applied to the union of the namespaces selected by this field - and the ones listed in the namespaces field. - null selector and null or empty namespaces list means "this pod's namespace". - An empty selector ({}) matches all namespaces. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are - ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that - the selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - description: |- - namespaces specifies a static list of namespace names that the term applies to. - The term is applied to the union of the namespaces listed in this field - and the ones selected by namespaceSelector. - null or empty namespaces list and null namespaceSelector means "this pod's namespace". - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - description: |- - This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching - the labelSelector in the specified namespaces, where co-located is defined as running on a node - whose value of the label with key topologyKey matches that of any node on which any of the - selected pods is running. - Empty topologyKey is not allowed. - type: string - required: - - topologyKey - type: object - weight: - description: |- - weight associated with matching the corresponding podAffinityTerm, - in the range 1-100. - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - x-kubernetes-list-type: atomic - requiredDuringSchedulingIgnoredDuringExecution: - description: |- - If the anti-affinity requirements specified by this field are not met at - scheduling time, the pod will not be scheduled onto the node. - If the anti-affinity requirements specified by this field cease to be met - at some point during pod execution (e.g. due to a pod label update), the - system may or may not try to eventually evict the pod from its node. - When there are multiple elements, the lists of nodes corresponding to each - podAffinityTerm are intersected, i.e. all terms must be satisfied. - items: - description: |- - Defines a set of pods (namely those matching the labelSelector - relative to the given namespace(s)) that this pod should be - co-located (affinity) or not co-located (anti-affinity) with, - where co-located is defined as running on a node whose value of - the label with key matches that of any node on which - a pod of the set of pods is running - properties: - labelSelector: - description: |- - A label query over a set of resources, in this case pods. - If it's null, this PodAffinityTerm matches with no Pods. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the - selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - description: |- - MatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key in (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both matchLabelKeys and labelSelector. - Also, matchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - description: |- - MismatchLabelKeys is a set of pod label keys to select which pods will - be taken into consideration. The keys are used to lookup values from the - incoming pod labels, those key-value labels are merged with `labelSelector` as `key notin (value)` - to select the group of existing pods which pods will be taken into consideration - for the incoming pod's pod (anti) affinity. Keys that don't exist in the incoming - pod labels will be ignored. The default value is empty. - The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. - Also, mismatchLabelKeys cannot be set when labelSelector isn't set. - This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default). - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - description: |- - A label query over the set of namespaces that the term applies to. - The term is applied to the union of the namespaces selected by this field - and the ones listed in the namespaces field. - null selector and null or empty namespaces list means "this pod's namespace". - An empty selector ({}) matches all namespaces. - properties: - matchExpressions: - description: matchExpressions is a list of label - selector requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the - selector applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - description: |- - namespaces specifies a static list of namespace names that the term applies to. - The term is applied to the union of the namespaces listed in this field - and the ones selected by namespaceSelector. - null or empty namespaces list and null namespaceSelector means "this pod's namespace". - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - description: |- - This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching - the labelSelector in the specified namespaces, where co-located is defined as running on a node - whose value of the label with key topologyKey matches that of any node on which any of the - selected pods is running. - Empty topologyKey is not allowed. - type: string - required: - - topologyKey - type: object - type: array - x-kubernetes-list-type: atomic - type: object - type: object - autoEnableAllFeatureFlags: - description: |- - Set to true to automatically enable all feature flags after each upgrade - For more information, see https://www.rabbitmq.com/docs/feature-flags - type: boolean - delayStartSeconds: - default: 30 - description: |- - DelayStartSeconds is the time the init container (`setup-container`) will sleep before terminating. - This effectively delays the time between starting the Pod and starting the `rabbitmq` container. - RabbitMQ relies on up-to-date DNS entries early during peer discovery. - The purpose of this artificial delay is to ensure that DNS entries are up-to-date when booting RabbitMQ. - For more information, see https://github.com/kubernetes/kubernetes/issues/92559 - If your Kubernetes DNS backend is configured with a low DNS cache value or publishes not ready addresses - promptly, you can decrase this value or set it to 0. - format: int32 - minimum: 0 - type: integer - image: - description: |- - Image is the name of the RabbitMQ docker image to use for RabbitMQ nodes in the RabbitmqCluster. - Must be provided together with ImagePullSecrets in order to use an image in a private registry. - type: string - imagePullSecrets: - description: List of Secret resource containing access credentials - to the registry for the RabbitMQ image. Required if the docker registry - is private. - items: - description: |- - LocalObjectReference contains enough information to let you locate the - referenced object inside the same namespace. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - type: array - override: - properties: - service: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - spec: - properties: - allocateLoadBalancerNodePorts: - type: boolean - clusterIP: - type: string - clusterIPs: - items: - type: string - type: array - x-kubernetes-list-type: atomic - externalIPs: - items: - type: string - type: array - x-kubernetes-list-type: atomic - externalName: - type: string - externalTrafficPolicy: - type: string - healthCheckNodePort: - format: int32 - type: integer - internalTrafficPolicy: - type: string - ipFamilies: - items: - type: string - type: array - x-kubernetes-list-type: atomic - ipFamilyPolicy: - type: string - loadBalancerClass: - type: string - loadBalancerIP: - type: string - loadBalancerSourceRanges: - items: - type: string - type: array - x-kubernetes-list-type: atomic - ports: - items: - properties: - appProtocol: - type: string - name: - type: string - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: array - x-kubernetes-list-map-keys: - - port - - protocol - x-kubernetes-list-type: map - publishNotReadyAddresses: - type: boolean - selector: - additionalProperties: - type: string - type: object - x-kubernetes-map-type: atomic - sessionAffinity: - type: string - sessionAffinityConfig: - properties: - clientIP: - properties: - timeoutSeconds: - format: int32 - type: integer - type: object - type: object - trafficDistribution: - type: string - type: - type: string - type: object - type: object - statefulSet: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - type: object - spec: - properties: - minReadySeconds: - format: int32 - type: integer - persistentVolumeClaimRetentionPolicy: - properties: - whenDeleted: - type: string - whenScaled: - type: string - type: object - podManagementPolicy: - type: string - replicas: - format: int32 - type: integer - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - serviceName: - type: string - template: - properties: - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - activeDeadlineSeconds: - format: int64 - type: integer - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - type: object - x-kubernetes-map-type: atomic - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - x-kubernetes-list-type: atomic - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - type: object - x-kubernetes-map-type: atomic - type: array - x-kubernetes-list-type: atomic - required: - - nodeSelectorTerms - type: object - x-kubernetes-map-type: atomic - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - x-kubernetes-list-type: atomic - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - x-kubernetes-list-type: atomic - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - x-kubernetes-list-type: atomic - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - mismatchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - x-kubernetes-list-type: atomic - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - x-kubernetes-list-type: atomic - type: object - type: object - automountServiceAccountToken: - type: boolean - containers: - items: - properties: - args: - items: - type: string - type: array - x-kubernetes-list-type: atomic - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - envFrom: - items: - properties: - configMapRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - prefix: - type: string - secretRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - type: object - type: array - x-kubernetes-list-type: atomic - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - default: TCP - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - required: - - resourceName - - restartPolicy - type: object - type: array - x-kubernetes-list-type: atomic - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - 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 - 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 - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - devicePath - x-kubernetes-list-type: map - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - mountPath - x-kubernetes-list-type: map - workingDir: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - dnsConfig: - properties: - nameservers: - items: - type: string - type: array - x-kubernetes-list-type: atomic - options: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - x-kubernetes-list-type: atomic - searches: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - dnsPolicy: - type: string - enableServiceLinks: - type: boolean - ephemeralContainers: - items: - properties: - args: - items: - type: string - type: array - x-kubernetes-list-type: atomic - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - envFrom: - items: - properties: - configMapRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - prefix: - type: string - secretRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - type: object - type: array - x-kubernetes-list-type: atomic - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - default: TCP - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - required: - - resourceName - - restartPolicy - type: object - type: array - x-kubernetes-list-type: atomic - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - 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 - 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 - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - targetContainerName: - type: string - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - devicePath - x-kubernetes-list-type: map - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - mountPath - x-kubernetes-list-type: map - workingDir: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - hostAliases: - items: - properties: - hostnames: - items: - type: string - type: array - x-kubernetes-list-type: atomic - ip: - type: string - required: - - ip - type: object - type: array - x-kubernetes-list-map-keys: - - ip - x-kubernetes-list-type: map - hostIPC: - type: boolean - hostNetwork: - type: boolean - hostPID: - type: boolean - hostUsers: - type: boolean - hostname: - type: string - imagePullSecrets: - items: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - initContainers: - items: - properties: - args: - items: - type: string - type: array - x-kubernetes-list-type: atomic - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - envFrom: - items: - properties: - configMapRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - prefix: - type: string - secretRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - type: object - type: array - x-kubernetes-list-type: atomic - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - default: TCP - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - required: - - resourceName - - restartPolicy - type: object - type: array - x-kubernetes-list-type: atomic - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - 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 - 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 - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - devicePath - x-kubernetes-list-type: map - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - mountPath - x-kubernetes-list-type: map - workingDir: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - nodeName: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - x-kubernetes-map-type: atomic - os: - properties: - name: - type: string - required: - - name - type: object - overhead: - 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 - type: object - preemptionPolicy: - type: string - priority: - format: int32 - type: integer - priorityClassName: - type: string - readinessGates: - items: - properties: - conditionType: - type: string - required: - - conditionType - type: object - type: array - x-kubernetes-list-type: atomic - resourceClaims: - items: - properties: - name: - type: string - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - restartPolicy: - type: string - runtimeClassName: - type: string - schedulerName: - type: string - schedulingGates: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - securityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - serviceAccount: - type: string - serviceAccountName: - type: string - setHostnameAsFQDN: - type: boolean - shareProcessNamespace: - type: boolean - subdomain: - type: string - terminationGracePeriodSeconds: - format: int64 - type: integer - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - x-kubernetes-list-type: atomic - topologySpreadConstraints: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - matchLabelKeys: - items: - type: string - type: array - x-kubernetes-list-type: atomic - maxSkew: - format: int32 - type: integer - minDomains: - format: int32 - type: integer - nodeAffinityPolicy: - type: string - nodeTaintsPolicy: - type: string - topologyKey: - type: string - whenUnsatisfiable: - type: string - required: - - maxSkew - - topologyKey - - whenUnsatisfiable - type: object - type: array - x-kubernetes-list-map-keys: - - topologyKey - - whenUnsatisfiable - x-kubernetes-list-type: map - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - default: ext4 - type: string - kind: - type: string - readOnly: - default: false - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - x-kubernetes-list-type: atomic - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - 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 - 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 - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - x-kubernetes-list-type: atomic - wwids: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - image: - properties: - pullPolicy: - type: string - reference: - type: string - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - default: default - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - x-kubernetes-list-type: atomic - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - clusterTrustBundle: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - name: - type: string - optional: - type: boolean - path: - type: string - signerName: - type: string - required: - - path - type: object - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - x-kubernetes-list-type: atomic - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - default: /etc/ceph/keyring - type: string - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - pool: - default: rbd - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - default: admin - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - default: xfs - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - default: ThinProvisioned - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - required: - - containers - type: object - type: object - updateStrategy: - properties: - rollingUpdate: - properties: - maxUnavailable: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - partition: - format: int32 - type: integer - type: object - type: - type: string - type: object - volumeClaimTemplates: - items: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - labels: - additionalProperties: - type: string - type: object - name: - type: string - namespace: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - x-kubernetes-list-type: atomic - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - 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 - 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 - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - type: object - type: array - type: object - type: object - type: object - persistence: - default: - storage: 10Gi - description: The desired persistent storage configuration for each - Pod in the cluster. - properties: - storage: - anyOf: - - type: integer - - type: string - default: 10Gi - description: |- - The requested size of the persistent volume attached to each Pod in the RabbitmqCluster. - The format of this field matches that defined by kubernetes/apimachinery. - See https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity for more info on the format of this field. - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - storageClassName: - description: The name of the StorageClass to claim a PersistentVolume - from. - type: string - type: object - rabbitmq: - description: Configuration options for RabbitMQ Pods created in the - cluster. - properties: - additionalConfig: - description: |- - Modify to add to the rabbitmq.conf file in addition to default configurations set by the operator. - Modifying this property on an existing RabbitmqCluster will trigger a StatefulSet rolling restart and will cause rabbitmq downtime. - For more information on this config, see https://www.rabbitmq.com/configure.html#config-file - maxLength: 100000 - type: string - additionalPlugins: - description: 'List of plugins to enable in addition to essential - plugins: rabbitmq_management, rabbitmq_prometheus, and rabbitmq_peer_discovery_k8s.' - items: - description: A Plugin to enable on the RabbitmqCluster. - maxLength: 100 - pattern: ^\w+$ - type: string - maxItems: 100 - type: array - advancedConfig: - description: |- - Specify any rabbitmq advanced.config configurations to apply to the cluster. - For more information on advanced config, see https://www.rabbitmq.com/configure.html#advanced-config-file - maxLength: 100000 - type: string - envConfig: - description: |- - Modify to add to the rabbitmq-env.conf file. Modifying this property on an existing RabbitmqCluster will trigger a StatefulSet rolling restart and will cause rabbitmq downtime. - For more information on env config, see https://www.rabbitmq.com/man/rabbitmq-env.conf.5.html - maxLength: 100000 - type: string - erlangInetConfig: - description: |- - Erlang Inet configuration to apply to the Erlang VM running rabbit. - See also: https://www.erlang.org/doc/apps/erts/inet_cfg.html - maxLength: 2000 - type: string - type: object - replicas: - default: 1 - description: |- - Replicas is the number of nodes in the RabbitMQ cluster. Each node is deployed as a Replica in a StatefulSet. Only 1, 3, 5 replicas clusters are tested. - This value should be an odd number to ensure the resultant cluster can establish exactly one quorum of nodes - in the event of a fragmenting network partition. - format: int32 - minimum: 0 - type: integer - resources: - default: - limits: - cpu: 2000m - memory: 2Gi - requests: - cpu: 1000m - memory: 2Gi - description: The desired compute resource requirements of Pods in - the cluster. - properties: - claims: - description: |- - Claims lists the names of resources, defined in spec.resourceClaims, - that are used by this container. - - This is an alpha field and requires enabling the - DynamicResourceAllocation feature gate. - - 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 - request: - description: |- - Request is the name chosen for a request in the referenced claim. - If empty, everything from the claim is made available, otherwise - only the result of this request. - 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. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - type: object - type: object - secretBackend: - description: |- - Secret backend configuration for the RabbitmqCluster. - Enables to fetch default user credentials and certificates from K8s external secret stores. - properties: - externalSecret: - description: |- - LocalObjectReference contains enough information to let you locate the - referenced object inside the same namespace. - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - vault: - description: |- - VaultSpec will add Vault annotations (see https://www.vaultproject.io/docs/platform/k8s/injector/annotations) - to RabbitMQ Pods. It requires a Vault Agent Sidecar Injector (https://www.vaultproject.io/docs/platform/k8s/injector) - to be installed in the K8s cluster. The injector is a K8s Mutation Webhook Controller that alters RabbitMQ Pod specifications - (based on the added Vault annotations) to include Vault Agent containers that render Vault secrets to the volume. - properties: - annotations: - additionalProperties: - type: string - description: |- - Vault annotations that override the Vault annotations set by the cluster-operator. - For a list of valid Vault annotations, see https://www.vaultproject.io/docs/platform/k8s/injector/annotations - type: object - defaultUserPath: - description: |- - Path in Vault to access a KV (Key-Value) secret with the fields username and password for the default user. - For example "secret/data/rabbitmq/config". - type: string - defaultUserUpdaterImage: - description: |- - Sidecar container that updates the default user's password in RabbitMQ when it changes in Vault. - Additionally, it updates /var/lib/rabbitmq/.rabbitmqadmin.conf (used by rabbitmqadmin CLI). - Set to empty string to disable the sidecar container. - type: string - role: - description: |- - Role in Vault. - If vault.defaultUserPath is set, this role must have capability to read the pre-created default user credential in Vault. - If vault.tls is set, this role must have capability to create and update certificates in the Vault PKI engine for the domains - "" and ".svc". - type: string - tls: - properties: - altNames: - description: |- - Specifies the requested Subject Alternative Names (SANs), in a comma-delimited list. - These will be appended to the SANs added by the cluster-operator. - The cluster-operator will add SANs: - "-server-.-nodes." for each pod, - e.g. "myrabbit-server-0.myrabbit-nodes.default". - type: string - commonName: - description: |- - Specifies the requested certificate Common Name (CN). - Defaults to ..svc if not provided. - type: string - ipSans: - description: Specifies the requested IP Subject Alternative - Names, in a comma-delimited list. - type: string - pkiIssuerPath: - description: |- - Path in Vault PKI engine. - For example "pki/issue/hashicorp-com". - required - type: string - pkiRootPath: - description: Specifies an optional path to retrieve the - root CA from vault. Useful if certificates are issued - by an intermediate CA - type: string - type: object - type: object - type: object - service: - default: - type: ClusterIP - description: The desired state of the Kubernetes Service to create - for the cluster. - properties: - annotations: - additionalProperties: - type: string - description: Annotations to add to the Service. - type: object - ipFamilyPolicy: - description: |- - IPFamilyPolicy represents the dual-stack-ness requested or required by a Service - See also: https://pkg.go.dev/k8s.io/api/core/v1#IPFamilyPolicy - enum: - - SingleStack - - PreferDualStack - - RequireDualStack - type: string - labels: - additionalProperties: - type: string - type: object - type: - default: ClusterIP - description: |- - Type of Service to create for the cluster. Must be one of: ClusterIP, LoadBalancer, NodePort. - For more info see https://pkg.go.dev/k8s.io/api/core/v1#ServiceType - enum: - - ClusterIP - - LoadBalancer - - NodePort - type: string - type: object - skipPostDeploySteps: - description: |- - If unset, or set to false, the cluster will run `rabbitmq-queues rebalance all` whenever the cluster is updated. - Set to true to prevent the operator rebalancing queue leaders after a cluster update. - Has no effect if the cluster only consists of one node. - For more information, see https://www.rabbitmq.com/rabbitmq-queues.8.html#rebalance - type: boolean - terminationGracePeriodSeconds: - default: 604800 - description: |- - TerminationGracePeriodSeconds is the timeout that each rabbitmqcluster pod will have to terminate gracefully. - It defaults to 604800 seconds ( a week long) to ensure that the container preStop lifecycle hook can finish running. - For more information, see: https://github.com/rabbitmq/cluster-operator/blob/main/docs/design/20200520-graceful-pod-termination.md - format: int64 - minimum: 0 - type: integer - tls: - description: TLS-related configuration for the RabbitMQ cluster. - properties: - caSecretName: - description: |- - Name of a Secret in the same Namespace as the RabbitmqCluster, containing the Certificate Authority's public certificate for TLS. - The Secret must store this as ca.crt. - This Secret can be created by running `kubectl create secret generic ca-secret --from-file=ca.crt=path/to/ca.crt` - Used for mTLS, and TLS for rabbitmq_web_stomp and rabbitmq_web_mqtt. - type: string - disableNonTLSListeners: - description: |- - When set to true, the RabbitmqCluster disables non-TLS listeners for RabbitMQ, management plugin and for any enabled plugins in the following list: stomp, mqtt, web_stomp, web_mqtt. - Only TLS-enabled clients will be able to connect. - type: boolean - secretName: - description: |- - Name of a Secret in the same Namespace as the RabbitmqCluster, containing the server's private key & public certificate for TLS. - The Secret must store these as tls.key and tls.crt, respectively. - This Secret can be created by running `kubectl create secret tls tls-secret --cert=path/to/tls.crt --key=path/to/tls.key` - type: string - type: object - tolerations: - description: Tolerations is the list of Toleration resources attached - to each Pod in the RabbitmqCluster. - items: - description: |- - The pod this Toleration is attached to tolerates any taint that matches - the triple using the matching operator . - properties: - effect: - description: |- - Effect indicates the taint effect to match. Empty means match all taint effects. - When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. - type: string - key: - description: |- - Key is the taint key that the toleration applies to. Empty means match all taint keys. - If the key is empty, operator must be Exists; this combination means to match all values and all keys. - type: string - operator: - description: |- - Operator represents a key's relationship to the value. - Valid operators are Exists and Equal. Defaults to Equal. - Exists is equivalent to wildcard for value, so that a pod can - tolerate all taints of a particular category. - type: string - tolerationSeconds: - description: |- - TolerationSeconds represents the period of time the toleration (which must be - of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, - it is not set, which means tolerate the taint forever (do not evict). Zero and - negative values will be treated as 0 (evict immediately) by the system. - format: int64 - type: integer - value: - description: |- - Value is the taint value the toleration matches to. - If the operator is Exists, the value should be empty, otherwise just a regular string. - type: string - type: object - type: array - type: object - status: - description: Status presents the observed state of RabbitmqCluster - properties: - binding: - description: |- - Binding exposes a secret containing the binding information for this - RabbitmqCluster. It implements the service binding Provisioned Service - duck type. See: https://github.com/servicebinding/spec#provisioned-service - properties: - name: - default: "" - description: |- - Name of the referent. - This field is effectively required, but due to backwards compatibility is - allowed to be empty. Instances of this type with an empty value here are - almost certainly wrong. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - type: string - type: object - x-kubernetes-map-type: atomic - conditions: - description: Set of Conditions describing the current state of the - RabbitmqCluster - items: - properties: - lastTransitionTime: - description: The last time this Condition type changed. - format: date-time - type: string - message: - description: Full text reason for current status of the condition. - type: string - reason: - description: One word, camel-case reason for current status - of the condition. - type: string - status: - description: True, False, or Unknown - type: string - type: - description: Type indicates the scope of RabbitmqCluster status - addressed by the condition. - type: string - required: - - status - - type - type: object - type: array - defaultUser: - description: Identifying information on internal resources - properties: - secretReference: - description: |- - Reference to the Kubernetes Secret containing the credentials of the default - user. - properties: - keys: - additionalProperties: - type: string - description: Key-value pairs in the Secret corresponding to - `username`, `password`, `host`, and `port` - type: object - name: - description: Name of the Secret containing the default user - credentials - type: string - namespace: - description: Namespace of the Secret containing the default - user credentials - type: string - required: - - keys - - name - - namespace - type: object - serviceReference: - description: Reference to the Kubernetes Service serving the cluster. - properties: - name: - description: Name of the Service serving the cluster - type: string - namespace: - description: Namespace of the Service serving the cluster - type: string - required: - - name - - namespace - type: object - type: object - observedGeneration: - description: |- - observedGeneration is the most recent successful generation observed for this RabbitmqCluster. It corresponds to the - RabbitmqCluster's generation, which is updated on mutation by the API Server. - format: int64 - type: integer - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null diff --git a/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml b/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml index 6185003ecd..10df9be9f1 100644 --- a/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml +++ b/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml @@ -52,7 +52,7 @@ spec: description: RabbitMqSpec defines the desired state of RabbitMq properties: affinity: - description: Affinity scheduling rules to be applied on created Pods. + description: Affinity - Pod affinity/anti-affinity rules properties: nodeAffinity: description: Describes node affinity scheduling rules for the @@ -971,6 +971,33 @@ spec: x-kubernetes-list-type: atomic type: object type: object + config: + description: Config - RabbitMQ configuration options + properties: + additionalConfig: + description: AdditionalConfig - Additional RabbitMQ configuration + type: string + additionalPlugins: + description: AdditionalPlugins - Additional RabbitMQ plugins to + enable + items: + type: string + type: array + x-kubernetes-list-type: atomic + advancedConfig: + description: AdvancedConfig - Erlang advanced configuration + type: string + envConfig: + description: |- + EnvConfig - Additional environment variables for RabbitMQ (rabbitmq-env.conf format). + These are shell variables sourced by rabbitmq-server at startup. + type: string + erlangInetConfig: + description: |- + ErlangInetConfig - Erlang inet configuration (erl_inetrc format). + When set, overrides the default IPv6 inet configuration. + type: string + type: object containerImage: description: Name of the rabbitmq container image to run (will be set to environmental default if empty) @@ -978,15 +1005,9 @@ spec: delayStartSeconds: default: 30 description: |- - DelayStartSeconds is the time the init container (`setup-container`) will sleep before terminating. - This effectively delays the time between starting the Pod and starting the `rabbitmq` container. - RabbitMQ relies on up-to-date DNS entries early during peer discovery. - The purpose of this artificial delay is to ensure that DNS entries are up-to-date when booting RabbitMQ. - For more information, see https://github.com/kubernetes/kubernetes/issues/92559 - If your Kubernetes DNS backend is configured with a low DNS cache value or publishes not ready addresses - promptly, you can decrase this value or set it to 0. + DEPRECATED: For backward compatibility with old rabbitmq-cluster-operator format. + This field is no longer used and will be removed in a future release. format: int32 - minimum: 0 type: integer nodeSelector: additionalProperties: @@ -995,41 +1016,30 @@ spec: this service type: object override: - description: Provides the ability to override the generated manifest - of several child resources. + description: |- + DEPRECATED: For backward compatibility with old RabbitmqClusterSpecCore format. + Use explicit fields above instead. This will be removed in a future release. properties: service: description: Override configuration for the Service created to serve traffic to the cluster. properties: metadata: - description: |- - EmbeddedLabelsAnnotations is an embedded subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta. - Only labels and annotations are included. + description: DeprecatedEmbeddedLabelsAnnotations mirrors the + old rabbitmq-cluster-operator EmbeddedLabelsAnnotations + type. properties: annotations: additionalProperties: type: string - description: |- - Annotations is an unstructured key value map stored with a resource that may be - set by external tools to store and retrieve arbitrary metadata. They are not - queryable and should be preserved when modifying objects. - More info: http://kubernetes.io/docs/user-guide/annotations type: object labels: additionalProperties: type: string - description: |- - Map of string keys and values that can be used to organize and categorize - (scope and select) objects. May match selectors of replication controllers - and services. - More info: http://kubernetes.io/docs/user-guide/labels type: object type: object spec: - description: |- - Spec defines the behavior of a Service. - https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status + description: Spec defines the behavior of a Service. properties: allocateLoadBalancerNodePorts: description: |- @@ -1378,21 +1388,18 @@ spec: type: object x-kubernetes-preserve-unknown-fields: true type: object + x-kubernetes-preserve-unknown-fields: true persistence: - default: - storage: 10Gi - description: The desired persistent storage configuration for each - Pod in the cluster. + description: |- + DEPRECATED: For backward compatibility with old format. + Use Storage field instead. properties: storage: anyOf: - type: integer - type: string default: 10Gi - description: |- - The requested size of the persistent volume attached to each Pod in the RabbitmqCluster. - The format of this field matches that defined by kubernetes/apimachinery. - See https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity for more info on the format of this field. + description: The requested size of the persistent volume. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true storageClassName: @@ -1401,10 +1408,7 @@ spec: type: string type: object podOverride: - description: |- - PodOverride - Override configuration for per-pod services. When specified, individual LoadBalancer - services will be created for each pod with the provided configuration, and the transport URL will be - configured to use these per-pod services. + description: PodOverride - Override configuration for per-pod services properties: services: description: Services - list of per-pod service overrides @@ -1560,55 +1564,31 @@ spec: type: object queueType: description: |- - QueueType to eventually apply the ha-all policy or configure default queue type for the cluster. - Allowed values are: None, Mirrored, Quorum. Defaults to Quorum if not specified. + QueueType - the default queue type for the cluster. + Allowed values: Mirrored, Quorum. New clusters default to Quorum. + Existing clusters without a value default to Mirrored. type: string rabbitmq: - description: Configuration options for RabbitMQ Pods created in the - cluster. + description: |- + DEPRECATED: For backward compatibility with old format. + Use Config field instead. properties: additionalConfig: - description: |- - Modify to add to the rabbitmq.conf file in addition to default configurations set by the operator. - Modifying this property on an existing RabbitmqCluster will trigger a StatefulSet rolling restart and will cause rabbitmq downtime. - For more information on this config, see https://www.rabbitmq.com/configure.html#config-file - maxLength: 100000 type: string additionalPlugins: - description: 'List of plugins to enable in addition to essential - plugins: rabbitmq_management, rabbitmq_prometheus, and rabbitmq_peer_discovery_k8s.' items: - description: A Plugin to enable on the RabbitmqCluster. - maxLength: 100 - pattern: ^\w+$ type: string - maxItems: 100 type: array advancedConfig: - description: |- - Specify any rabbitmq advanced.config configurations to apply to the cluster. - For more information on advanced config, see https://www.rabbitmq.com/configure.html#advanced-config-file - maxLength: 100000 type: string envConfig: - description: |- - Modify to add to the rabbitmq-env.conf file. Modifying this property on an existing RabbitmqCluster will trigger a StatefulSet rolling restart and will cause rabbitmq downtime. - For more information on env config, see https://www.rabbitmq.com/man/rabbitmq-env.conf.5.html - maxLength: 100000 type: string erlangInetConfig: - description: |- - Erlang Inet configuration to apply to the Erlang VM running rabbit. - See also: https://www.erlang.org/doc/apps/erts/inet_cfg.html - maxLength: 2000 type: string type: object replicas: default: 1 - description: |- - Replicas is the number of nodes in the RabbitMQ cluster. Each node is deployed as a Replica in a StatefulSet. Only 1, 3, 5 replicas clusters are tested. - This value should be an odd number to ensure the resultant cluster can establish exactly one quorum of nodes - in the event of a fragmenting network partition. + description: Replicas - Number of RabbitMQ nodes in the cluster format: int32 minimum: 0 type: integer @@ -1620,8 +1600,7 @@ spec: requests: cpu: 1000m memory: 2Gi - description: The desired compute resource requirements of Pods in - the cluster. + description: Resources - Resource requirements for RabbitMQ containers properties: claims: description: |- @@ -1681,8 +1660,8 @@ spec: type: object secretBackend: description: |- - Secret backend configuration for the RabbitmqCluster. - Enables to fetch default user credentials and certificates from K8s external secret stores. + DEPRECATED: For backward compatibility with old rabbitmq-cluster-operator format. + This field is no longer used and will be removed in a future release. properties: externalSecret: description: |- @@ -1701,143 +1680,108 @@ spec: type: object x-kubernetes-map-type: atomic vault: - description: |- - VaultSpec will add Vault annotations (see https://www.vaultproject.io/docs/platform/k8s/injector/annotations) - to RabbitMQ Pods. It requires a Vault Agent Sidecar Injector (https://www.vaultproject.io/docs/platform/k8s/injector) - to be installed in the K8s cluster. The injector is a K8s Mutation Webhook Controller that alters RabbitMQ Pod specifications - (based on the added Vault annotations) to include Vault Agent containers that render Vault secrets to the volume. + description: DeprecatedVaultSpec mirrors the old rabbitmq-cluster-operator + VaultSpec type. properties: annotations: additionalProperties: type: string - description: |- - Vault annotations that override the Vault annotations set by the cluster-operator. - For a list of valid Vault annotations, see https://www.vaultproject.io/docs/platform/k8s/injector/annotations type: object defaultUserPath: - description: |- - Path in Vault to access a KV (Key-Value) secret with the fields username and password for the default user. - For example "secret/data/rabbitmq/config". type: string defaultUserUpdaterImage: - description: |- - Sidecar container that updates the default user's password in RabbitMQ when it changes in Vault. - Additionally, it updates /var/lib/rabbitmq/.rabbitmqadmin.conf (used by rabbitmqadmin CLI). - Set to empty string to disable the sidecar container. type: string role: - description: |- - Role in Vault. - If vault.defaultUserPath is set, this role must have capability to read the pre-created default user credential in Vault. - If vault.tls is set, this role must have capability to create and update certificates in the Vault PKI engine for the domains - "" and ".svc". type: string tls: + description: DeprecatedVaultTLSSpec mirrors the old rabbitmq-cluster-operator + VaultSpec TLS fields. properties: altNames: - description: |- - Specifies the requested Subject Alternative Names (SANs), in a comma-delimited list. - These will be appended to the SANs added by the cluster-operator. - The cluster-operator will add SANs: - "-server-.-nodes." for each pod, - e.g. "myrabbit-server-0.myrabbit-nodes.default". type: string commonName: - description: |- - Specifies the requested certificate Common Name (CN). - Defaults to ..svc if not provided. type: string ipSans: - description: Specifies the requested IP Subject Alternative - Names, in a comma-delimited list. type: string pkiIssuerPath: - description: |- - Path in Vault PKI engine. - For example "pki/issue/hashicorp-com". - required type: string pkiRootPath: - description: Specifies an optional path to retrieve the - root CA from vault. Useful if certificates are issued - by an intermediate CA type: string type: object type: object type: object service: - description: Settable attributes for the Service resource. + description: Service - Service configuration properties: annotations: additionalProperties: type: string - description: Annotations to add to the Service. + description: Annotations - Service annotations type: object ipFamilyPolicy: - description: |- - IPFamilyPolicy represents the dual-stack-ness requested or required by a Service - See also: https://pkg.go.dev/k8s.io/api/core/v1#IPFamilyPolicy - enum: - - SingleStack - - PreferDualStack - - RequireDualStack + description: IPFamilyPolicy - IP family policy for the service type: string labels: additionalProperties: type: string + description: 'DEPRECATED: For backward compatibility with old + format. Use override.service.metadata.labels instead.' type: object type: - default: ClusterIP - description: |- - Type of Service to create for the cluster. Must be one of: ClusterIP, LoadBalancer, NodePort. - For more info see https://pkg.go.dev/k8s.io/api/core/v1#ServiceType - enum: - - ClusterIP - - LoadBalancer - - NodePort + description: Type - Service type (ClusterIP, LoadBalancer, etc.) type: string type: object skipPostDeploySteps: - description: |- - If unset, or set to false, the cluster will run `rabbitmq-queues rebalance all` whenever the cluster is updated. - Set to true to prevent the operator rebalancing queue leaders after a cluster update. - Has no effect if the cluster only consists of one node. - For more information, see https://www.rabbitmq.com/rabbitmq-queues.8.html#rebalance + description: SkipPostDeploySteps - Skip post-deploy queue rebalancing type: boolean - terminationGracePeriodSeconds: - default: 604800 + storage: + description: Storage - Persistent storage configuration + properties: + storage: + anyOf: + - type: integer + - type: string + default: 10Gi + description: Storage - Size of the persistent volume claim + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClassName: + description: StorageClassName - Storage class name for the persistent + volume claim + type: string + type: object + targetVersion: description: |- - TerminationGracePeriodSeconds is the timeout that each rabbitmqcluster pod will have to terminate gracefully. - It defaults to 604800 seconds ( a week long) to ensure that the container preStop lifecycle hook can finish running. - For more information, see: https://github.com/rabbitmq/cluster-operator/blob/main/docs/design/20200520-graceful-pod-termination.md + TargetVersion - the desired RabbitMQ version (e.g., "4.2", "3.13.1"). + When set to a version different from Status.CurrentVersion, the controller + will initiate a storage wipe and version upgrade. The controller updates + Status.CurrentVersion once the upgrade completes. + pattern: ^\d+\.\d+(\.\d+)?$ + type: string + terminationGracePeriodSeconds: + default: 60 + description: TerminationGracePeriodSeconds - Timeout for graceful + pod termination format: int64 minimum: 0 type: integer tls: - description: TLS-related configuration for the RabbitMQ cluster. + description: TLS - TLS configuration properties: caSecretName: - description: |- - Name of a Secret in the same Namespace as the RabbitmqCluster, containing the Certificate Authority's public certificate for TLS. - The Secret must store this as ca.crt. - This Secret can be created by running `kubectl create secret generic ca-secret --from-file=ca.crt=path/to/ca.crt` - Used for mTLS, and TLS for rabbitmq_web_stomp and rabbitmq_web_mqtt. + description: CaSecretName - Name of the secret containing CA certificate + (ca.crt) type: string disableNonTLSListeners: - description: |- - When set to true, the RabbitmqCluster disables non-TLS listeners for RabbitMQ, management plugin and for any enabled plugins in the following list: stomp, mqtt, web_stomp, web_mqtt. - Only TLS-enabled clients will be able to connect. + description: DisableNonTLSListeners - Disable non-TLS listeners type: boolean secretName: - description: |- - Name of a Secret in the same Namespace as the RabbitmqCluster, containing the server's private key & public certificate for TLS. - The Secret must store these as tls.key and tls.crt, respectively. - This Secret can be created by running `kubectl create secret tls tls-secret --cert=path/to/tls.crt --key=path/to/tls.key` + description: SecretName - Name of the secret containing TLS certificates + (tls.crt and tls.key) type: string type: object tolerations: - description: Tolerations is the list of Toleration resources attached - to each Pod in the RabbitmqCluster. + description: Tolerations - Pod tolerations items: description: |- The pod this Toleration is attached to tolerates any taint that matches @@ -1875,10 +1819,10 @@ spec: type: string type: object type: array + x-kubernetes-list-type: atomic topologyRef: - description: |- - TopologyRef to apply the Topology defined by the associated CR referenced - by name + description: TopologyRef to apply the Topology defined by the associated + CR referenced by name properties: name: description: Name - The Topology CR name that the Service references @@ -1940,6 +1884,43 @@ spec: - type type: object type: array + currentVersion: + description: |- + CurrentVersion - the currently deployed RabbitMQ version (e.g., "3.9", "4.2") + This is controller-managed and reflects the actual running version. + Set Spec.TargetVersion to request a version change. + type: string + defaultUser: + description: DefaultUser - Identifying information on default user + secret + properties: + secretReference: + description: SecretReference - reference to the secret containing + credentials + properties: + keys: + additionalProperties: + type: string + description: Keys in the secret + type: object + name: + description: Name of the secret + type: string + namespace: + description: Namespace of the secret + type: string + type: object + serviceReference: + description: ServiceReference - reference to the service + properties: + name: + description: Name of the service + type: string + namespace: + description: Namespace of the service + type: string + type: object + type: object lastAppliedTopology: description: LastAppliedTopology - the last applied Topology properties: @@ -1963,10 +1944,33 @@ spec: the opentack-operator in the top-level CR (e.g. the ContainerImage) format: int64 type: integer + oldCRCleaned: + description: |- + OldCRCleaned - set to "True" when the old rabbitmq.com RabbitmqCluster CR has been + cleaned up during migration from rabbitmq-cluster-operator. + enum: + - "True" + - "False" + - "" + type: string + proxyRequired: + description: |- + ProxyRequired - set to "True" when the AMQP proxy sidecar is required for this cluster. + Set when upgrading from RabbitMQ 3.x to 4.x with Quorum queues. + The proxy allows non-durable clients to work with quorum queues during the upgrade window. + Only cleared when the AnnotationClientsReconfigured annotation is set to "true". + enum: + - "True" + - "False" + - "" + type: string queueType: - description: QueueType - store whether default ha-all policy is present - or not + description: QueueType - the active queue type for this cluster type: string + readyCount: + description: ReadyCount tracks ready replicas + format: int32 + type: integer serviceHostnames: description: |- ServiceHostnames - list of per-pod service hostnames for RabbitMQ cluster. @@ -1975,6 +1979,25 @@ spec: type: string type: array x-kubernetes-list-type: atomic + upgradePhase: + description: |- + UpgradePhase - tracks the current phase of a version upgrade or migration. + This allows resuming upgrades that failed midway. + type: string + vctCleaned: + description: |- + VCTCleaned - set to "True" when stale ownerReferences in the StatefulSet's + volumeClaimTemplates have been cleaned up during migration. + enum: + - "True" + - "False" + - "" + type: string + wipeReason: + description: |- + WipeReason - tracks why the current storage wipe was initiated. + Persisted so that resumed upgrades use the correct handling path. + type: string type: object type: object served: true diff --git a/bindata/operator/rabbit.yaml b/bindata/operator/rabbit.yaml deleted file mode 100644 index a1d4ee3e15..0000000000 --- a/bindata/operator/rabbit.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: rabbitmq-operator - app.kubernetes.io/name: rabbitmq-cluster-operator - app.kubernetes.io/part-of: rabbitmq - name: rabbitmq-cluster-operator-manager - namespace: {{ .RabbitmqOperator.Namespace }} -spec: - replicas: {{ .RabbitmqOperator.Deployment.Replicas }} - selector: - matchLabels: - app.kubernetes.io/name: rabbitmq-cluster-operator - template: - metadata: - labels: - app.kubernetes.io/component: rabbitmq-operator - app.kubernetes.io/name: rabbitmq-cluster-operator - app.kubernetes.io/part-of: rabbitmq - spec: - containers: - - command: - - /manager - env: - - name: OPERATOR_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace -{{- range .RabbitmqOperator.Deployment.Manager.Env }} - - name: '{{ .Name }}' - value: '{{ .Value }}' -{{- end }} - image: {{ .RabbitmqOperator.Deployment.Manager.Image }} - name: operator - ports: - - containerPort: 9782 - name: metrics - protocol: TCP - resources: - limits: - cpu: {{ .RabbitmqOperator.Deployment.Manager.Resources.Limits.CPU }} - memory: {{ .RabbitmqOperator.Deployment.Manager.Resources.Limits.Memory }} - requests: - cpu: {{ .RabbitmqOperator.Deployment.Manager.Resources.Requests.CPU }} - memory: {{ .RabbitmqOperator.Deployment.Manager.Resources.Requests.Memory }} - serviceAccountName: rabbitmq-cluster-operator-controller-manager - terminationGracePeriodSeconds: 10 - tolerations: - - key: "node.kubernetes.io/not-ready" - operator: "Exists" - effect: "NoExecute" - tolerationSeconds: 120 - - key: "node.kubernetes.io/unreachable" - operator: "Exists" - effect: "NoExecute" - tolerationSeconds: 120 diff --git a/bindata/rbac/infra-operator-rbac.yaml b/bindata/rbac/infra-operator-rbac.yaml index 53f7354734..e43cf47845 100644 --- a/bindata/rbac/infra-operator-rbac.yaml +++ b/bindata/rbac/infra-operator-rbac.yaml @@ -72,6 +72,7 @@ rules: - configmaps - pods - secrets + - serviceaccounts - services verbs: - create @@ -84,15 +85,24 @@ rules: - apiGroups: - "" resources: + - endpoints + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events - pods/exec verbs: - create - apiGroups: - "" resources: - - serviceaccounts + - persistentvolumeclaims verbs: - - create + - delete - get - list - patch @@ -289,19 +299,12 @@ rules: resources: - rabbitmqclusters verbs: - - create - delete - get - list - patch - update - watch -- apiGroups: - - rabbitmq.com - resources: - - rabbitmqclusters/finalizers - verbs: - - update - apiGroups: - rabbitmq.openstack.org resources: @@ -347,6 +350,7 @@ rules: - roles verbs: - create + - delete - get - list - patch diff --git a/bindata/rbac/rabbitmq-cluster-operator-rbac.yaml b/bindata/rbac/rabbitmq-cluster-operator-rbac.yaml deleted file mode 100644 index 43e0a0f842..0000000000 --- a/bindata/rbac/rabbitmq-cluster-operator-rbac.yaml +++ /dev/null @@ -1,203 +0,0 @@ -# NOTE: this file is automatically generated by hack/sync-bindata.sh! -# ---- -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - labels: - app.kubernetes.io/component: certificate - app.kubernetes.io/created-by: openstack-operator - app.kubernetes.io/instance: selfsigned-issuer - app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/name: issuer - app.kubernetes.io/part-of: rabbitmq-cluster-operator - name: rabbitmq-cluster-operator-selfsigned-issuer - namespace: '{{ .OperatorNamespace }}' -spec: - selfSigned: {} ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: rabbitmq-cluster-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: rabbitmq-cluster-operator-leader-election-role - namespace: '{{ .OperatorNamespace }}' -rules: -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - creationTimestamp: null - name: rabbitmq-cluster-operator-manager-role -rules: -- apiGroups: - - "" - resources: - - configmaps - - persistentvolumeclaims - - secrets - - serviceaccounts - - services - verbs: - - create - - get - - list - - update - - watch -- apiGroups: - - "" - resources: - - endpoints - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - get - - patch -- apiGroups: - - "" - resources: - - pods - verbs: - - get - - list - - update - - watch -- apiGroups: - - "" - resources: - - pods/exec - verbs: - - create -- apiGroups: - - apps - resources: - - statefulsets - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - rabbitmq.com - resources: - - rabbitmqclusters - verbs: - - create - - get - - list - - update - - watch -- apiGroups: - - rabbitmq.com - resources: - - rabbitmqclusters/finalizers - verbs: - - update -- apiGroups: - - rabbitmq.com - resources: - - rabbitmqclusters/status - verbs: - - get - - update -- apiGroups: - - rbac.authorization.k8s.io - resources: - - rolebindings - - roles - verbs: - - create - - get - - list - - update - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: rabbitmq-cluster-operator-leader-election-rolebinding - namespace: '{{ .OperatorNamespace }}' -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: rabbitmq-cluster-operator-leader-election-role -subjects: -- kind: ServiceAccount - name: rabbitmq-cluster-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: rabbitmq-cluster-operator-manager-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: rabbitmq-cluster-operator-manager-role -subjects: -- kind: ServiceAccount - name: rabbitmq-cluster-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: rabbitmq-cluster-operator-proxy-rolebinding -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: rabbitmq-cluster-operator-proxy-role -subjects: -- kind: ServiceAccount - name: rabbitmq-cluster-operator-controller-manager - namespace: '{{ .OperatorNamespace }}' ---- -apiVersion: v1 -kind: Service -metadata: - labels: - app.kubernetes.io/name: rabbitmq-cluster-operator - control-plane: controller-manager - name: rabbitmq-cluster-operator-controller-manager-metrics-service - namespace: '{{ .OperatorNamespace }}' -spec: - ports: - - name: https - port: 8443 - protocol: TCP - targetPort: 8443 - selector: - app.kubernetes.io/name: rabbitmq-cluster-operator - control-plane: controller-manager diff --git a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml index bce2e279e5..01faa67c0b 100644 --- a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -14138,10 +14138,25 @@ spec: x-kubernetes-list-type: atomic type: object type: object + config: + properties: + additionalConfig: + type: string + additionalPlugins: + items: + type: string + type: array + x-kubernetes-list-type: atomic + advancedConfig: + type: string + envConfig: + type: string + erlangInetConfig: + type: string + type: object delayStartSeconds: default: 30 format: int32 - minimum: 0 type: integer nodeSelector: additionalProperties: @@ -14260,9 +14275,8 @@ spec: type: object x-kubernetes-preserve-unknown-fields: true type: object + x-kubernetes-preserve-unknown-fields: true persistence: - default: - storage: 10Gi properties: storage: anyOf: @@ -14330,23 +14344,16 @@ spec: rabbitmq: properties: additionalConfig: - maxLength: 100000 type: string additionalPlugins: items: - maxLength: 100 - pattern: ^\w+$ type: string - maxItems: 100 type: array advancedConfig: - maxLength: 100000 type: string envConfig: - maxLength: 100000 type: string erlangInetConfig: - maxLength: 2000 type: string type: object replicas: @@ -14437,27 +14444,33 @@ spec: type: string type: object ipFamilyPolicy: - enum: - - SingleStack - - PreferDualStack - - RequireDualStack type: string labels: additionalProperties: type: string type: object type: - default: ClusterIP - enum: - - ClusterIP - - LoadBalancer - - NodePort type: string type: object skipPostDeploySteps: type: boolean + storage: + properties: + storage: + anyOf: + - type: integer + - type: string + default: 10Gi + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + storageClassName: + type: string + type: object + targetVersion: + pattern: ^\d+\.\d+(\.\d+)?$ + type: string terminationGracePeriodSeconds: - default: 604800 + default: 60 format: int64 minimum: 0 type: integer @@ -14486,6 +14499,7 @@ spec: type: string type: object type: array + x-kubernetes-list-type: atomic topologyRef: properties: name: diff --git a/config/crd/bases/core.openstack.org_openstackversions.yaml b/config/crd/bases/core.openstack.org_openstackversions.yaml index ae79d6c77d..0ee1523021 100644 --- a/config/crd/bases/core.openstack.org_openstackversions.yaml +++ b/config/crd/bases/core.openstack.org_openstackversions.yaml @@ -250,6 +250,8 @@ spec: properties: glanceWsgi: type: string + rabbitmqVersion: + type: string type: object type: object availableVersion: @@ -685,6 +687,8 @@ spec: properties: glanceWsgi: type: string + rabbitmqVersion: + type: string type: object trackedCustomImages: additionalProperties: diff --git a/config/crd/bases/operator.openstack.org_openstacks.yaml b/config/crd/bases/operator.openstack.org_openstacks.yaml index 32ea32218d..3b72a29ac5 100644 --- a/config/crd/bases/operator.openstack.org_openstacks.yaml +++ b/config/crd/bases/operator.openstack.org_openstacks.yaml @@ -141,7 +141,6 @@ spec: - openstack-baremetal - ovn - placement - - rabbitmq-cluster - swift - telemetry - test diff --git a/config/operator/default_images.yaml b/config/operator/default_images.yaml index 430bc00ce3..218f6b9abb 100644 --- a/config/operator/default_images.yaml +++ b/config/operator/default_images.yaml @@ -174,7 +174,7 @@ spec: - name: RELATED_IMAGE_PLACEMENT_API_IMAGE_URL_DEFAULT value: quay.io/podified-antelope-centos9/openstack-placement-api:current-podified - name: RELATED_IMAGE_RABBITMQ_IMAGE_URL_DEFAULT - value: quay.io/podified-antelope-centos9/openstack-rabbitmq:current-podified + value: quay.io/lmiccini/openstack-rabbitmq:r42p - name: RELATED_IMAGE_SWIFT_ACCOUNT_IMAGE_URL_DEFAULT value: quay.io/podified-antelope-centos9/openstack-swift-account:current-podified - name: RELATED_IMAGE_SWIFT_CONTAINER_IMAGE_URL_DEFAULT diff --git a/config/operator/manager_operator_images.yaml b/config/operator/manager_operator_images.yaml index 5f073df0f3..7ce45fbfc7 100644 --- a/config/operator/manager_operator_images.yaml +++ b/config/operator/manager_operator_images.yaml @@ -26,7 +26,7 @@ spec: - name: RELATED_IMAGE_HORIZON_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/horizon-operator@sha256:703ad3a2b749bce100f1e2a445312b65dc3b8b45e8c8ba59f311d3f8f3368113 - name: RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/infra-operator@sha256:a4cb438fef247332815b032c8a248bc65b873274aaac92478a22aa2f915798db + value: quay.io/lmiccini/infra-operator@sha256:76230ac3dc798dbd0d803461849d1f879a4193f0dc57c72aba938776beebe892 - name: RELATED_IMAGE_IRONIC_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/ironic-operator@sha256:9dd26bc51e7757d84736528d4988a1f980ad50ccb070aef6fc252e32c5c423a8 - name: RELATED_IMAGE_KEYSTONE_OPERATOR_MANAGER_IMAGE_URL @@ -47,8 +47,6 @@ spec: value: quay.io/openstack-k8s-operators/ovn-operator@sha256:bef93f71d3b42a72d8b96c69bdb4db4b8bd797c5093a0a719443d7a5c9aaab55 - name: RELATED_IMAGE_PLACEMENT_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/placement-operator@sha256:c8743a6661d118b0e5ba3eb110643358a8a3237dc75984a8f9829880b55a1622 - - name: RELATED_IMAGE_RABBITMQ_CLUSTER_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/rabbitmq-cluster-operator@sha256:893e66303c1b0bc1d00a299a3f0380bad55c8dc813c8a1c6a4aab379f5aa12a2 - name: RELATED_IMAGE_SWIFT_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/swift-operator@sha256:866844c5b88e1e0518ceb7490cac9d093da3fb8b2f27ba7bd9bd89f946b9ee6e - name: RELATED_IMAGE_TELEMETRY_OPERATOR_MANAGER_IMAGE_URL diff --git a/config/operator/rabbit.yaml b/config/operator/rabbit.yaml deleted file mode 100644 index a1d4ee3e15..0000000000 --- a/config/operator/rabbit.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - app.kubernetes.io/component: rabbitmq-operator - app.kubernetes.io/name: rabbitmq-cluster-operator - app.kubernetes.io/part-of: rabbitmq - name: rabbitmq-cluster-operator-manager - namespace: {{ .RabbitmqOperator.Namespace }} -spec: - replicas: {{ .RabbitmqOperator.Deployment.Replicas }} - selector: - matchLabels: - app.kubernetes.io/name: rabbitmq-cluster-operator - template: - metadata: - labels: - app.kubernetes.io/component: rabbitmq-operator - app.kubernetes.io/name: rabbitmq-cluster-operator - app.kubernetes.io/part-of: rabbitmq - spec: - containers: - - command: - - /manager - env: - - name: OPERATOR_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace -{{- range .RabbitmqOperator.Deployment.Manager.Env }} - - name: '{{ .Name }}' - value: '{{ .Value }}' -{{- end }} - image: {{ .RabbitmqOperator.Deployment.Manager.Image }} - name: operator - ports: - - containerPort: 9782 - name: metrics - protocol: TCP - resources: - limits: - cpu: {{ .RabbitmqOperator.Deployment.Manager.Resources.Limits.CPU }} - memory: {{ .RabbitmqOperator.Deployment.Manager.Resources.Limits.Memory }} - requests: - cpu: {{ .RabbitmqOperator.Deployment.Manager.Resources.Requests.CPU }} - memory: {{ .RabbitmqOperator.Deployment.Manager.Resources.Requests.Memory }} - serviceAccountName: rabbitmq-cluster-operator-controller-manager - terminationGracePeriodSeconds: 10 - tolerations: - - key: "node.kubernetes.io/not-ready" - operator: "Exists" - effect: "NoExecute" - tolerationSeconds: 120 - - key: "node.kubernetes.io/unreachable" - operator: "Exists" - effect: "NoExecute" - tolerationSeconds: 120 diff --git a/go.mod b/go.mod index e817004d57..3f5d7ead9c 100644 --- a/go.mod +++ b/go.mod @@ -181,3 +181,5 @@ replace k8s.io/code-generator => k8s.io/code-generator v0.31.14 //allow-merging replace k8s.io/component-base => k8s.io/component-base v0.31.14 //allow-merging replace github.com/cert-manager/cmctl/v2 => github.com/cert-manager/cmctl/v2 v2.1.2-0.20241127223932-88edb96860cf //allow-merging + +replace github.com/openstack-k8s-operators/infra-operator/apis => github.com/lmiccini/infra-operator/apis v0.0.0-20260320164938-2057972ad9de diff --git a/go.sum b/go.sum index 31a7b19857..77625c3615 100644 --- a/go.sum +++ b/go.sum @@ -114,6 +114,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lmiccini/infra-operator/apis v0.0.0-20260320164938-2057972ad9de h1:kapZ0xUDC+MrtXXLmqvuWQg5nxuFNoxM/EfhXhsxdnY= +github.com/lmiccini/infra-operator/apis v0.0.0-20260320164938-2057972ad9de/go.mod h1:QXzR9220I2d7CcoHqL4HWtU1PogJSN3NLmnh+bK3mco= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo= @@ -150,8 +152,6 @@ github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20260314075609-1b8 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20260314075609-1b85a36fcef9/go.mod h1:8o0wLkMYyDDqZAdvU/YKMwgwiOyQzADWrmy38rZcHyE= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20260314075038-6794e497bcfc h1:3r2wVspdAWx4j7ZScrukfLiPcGM7J9S/ClyOHsbY7ro= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20260314075038-6794e497bcfc/go.mod h1:P0hUdNDsv8ISnK2GyFogNQF+dxatbKhtQ76UKhX6t7w= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20260314122830-5d1715fa2f64 h1:1orzxWFuQH+QarnH32GXtc4GbE0efL4NddSsRFx3QYM= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20260314122830-5d1715fa2f64/go.mod h1:nC/Jf3OYJRML8UEzJ/mn/TQcSCv/nhqO6x6LGkdDt60= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20260314080422-d98151f45e34 h1:UgaEid1bqgUzsLg21BHtXSYOV2pljxR1Z3i1BcRVNQc= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20260314080422-d98151f45e34/go.mod h1:xEHdAz96FYfnBb1QAFgbfR2BCWCBIqhqKYT84IqU6zc= github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20260314080138-b41734470581 h1:FntUoWPVWx8xaGCwP7kdUVT/N8Z0kfIxLLK4L+oQJ7c= diff --git a/hack/export_operator_related_images.sh b/hack/export_operator_related_images.sh index 12efcceb63..a679a4072e 100644 --- a/hack/export_operator_related_images.sh +++ b/hack/export_operator_related_images.sh @@ -6,7 +6,7 @@ export RELATED_IMAGE_DESIGNATE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s- export RELATED_IMAGE_GLANCE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/glance-operator@sha256:76a1cde9f29fb39ed715b06be16adb803b9a2e24d68acb369911c0a88e33bc7d export RELATED_IMAGE_HEAT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/heat-operator@sha256:c6ef5db244d874430a56c3cc9d27662e4bd57cdaa489e1f6059abcacf3aa0900 export RELATED_IMAGE_HORIZON_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/horizon-operator@sha256:703ad3a2b749bce100f1e2a445312b65dc3b8b45e8c8ba59f311d3f8f3368113 -export RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/infra-operator@sha256:a4cb438fef247332815b032c8a248bc65b873274aaac92478a22aa2f915798db +export RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL=quay.io/lmiccini/infra-operator@sha256:76230ac3dc798dbd0d803461849d1f879a4193f0dc57c72aba938776beebe892 export RELATED_IMAGE_IRONIC_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/ironic-operator@sha256:9dd26bc51e7757d84736528d4988a1f980ad50ccb070aef6fc252e32c5c423a8 export RELATED_IMAGE_KEYSTONE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/keystone-operator@sha256:ec36a9083657587022f8471c9d5a71b87a7895398496e7fc546c73aa1eae4b56 export RELATED_IMAGE_MANILA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/manila-operator@sha256:f2e0b0fb34995b8acbbf1b0b60b5dbcf488b4f3899d1bb0763ae7dcee9bae6da @@ -17,7 +17,6 @@ export RELATED_IMAGE_OCTAVIA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-op export RELATED_IMAGE_OPENSTACK_BAREMETAL_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/openstack-baremetal-operator@sha256:bf7cdbfb125c4327b35870f8640cbed9ddc32d6f07fedd117c6fd59f16463329 export RELATED_IMAGE_OVN_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/ovn-operator@sha256:bef93f71d3b42a72d8b96c69bdb4db4b8bd797c5093a0a719443d7a5c9aaab55 export RELATED_IMAGE_PLACEMENT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/placement-operator@sha256:c8743a6661d118b0e5ba3eb110643358a8a3237dc75984a8f9829880b55a1622 -export RELATED_IMAGE_RABBITMQ_CLUSTER_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/rabbitmq-cluster-operator@sha256:893e66303c1b0bc1d00a299a3f0380bad55c8dc813c8a1c6a4aab379f5aa12a2 export RELATED_IMAGE_SWIFT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/swift-operator@sha256:866844c5b88e1e0518ceb7490cac9d093da3fb8b2f27ba7bd9bd89f946b9ee6e export RELATED_IMAGE_TELEMETRY_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/telemetry-operator@sha256:c500fa7080b94105e85eeced772d8872e4168904e74ba02116e15ab66f522444 export RELATED_IMAGE_TEST_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/test-operator@sha256:43bd420bc05b4789243740bc75f61e10c7aac7883fc2f82b2d4d50085bc96c42 diff --git a/hack/export_related_images.sh b/hack/export_related_images.sh index 52bbf16b79..493de788f7 100755 --- a/hack/export_related_images.sh +++ b/hack/export_related_images.sh @@ -2,7 +2,7 @@ export OPENSTACK_RELEASE_VERSION=0.0.1-$(date +%s) export RELATED_IMAGE_OPENSTACK_CLIENT_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-openstackclient:current-podified -export RELATED_IMAGE_RABBITMQ_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-rabbitmq:current-podified +export RELATED_IMAGE_RABBITMQ_IMAGE_URL_DEFAULT=quay.io/lmiccini/openstack-rabbitmq:r42p export RELATED_IMAGE_KEYSTONE_API_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-keystone:current-podified export RELATED_IMAGE_MARIADB_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-mariadb:current-podified export RELATED_IMAGE_INFRA_MEMCACHED_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-memcached:current-podified diff --git a/hack/pin-bundle-images.sh b/hack/pin-bundle-images.sh index b85726c5b9..9e2647b5e2 100755 --- a/hack/pin-bundle-images.sh +++ b/hack/pin-bundle-images.sh @@ -121,8 +121,3 @@ for MOD_PATH in ${MOD_PATHS}; do echo -n ",${REPO_URL}/${BASE}-operator-bundle:$SHA" fi done -# append the rabbitmq URL only if we aren't in Dockerfile mode -if [ -z "$DOCKERFILE" ]; then - # pin rabbit to sha256 for our v2.16.0_patches fork - echo -n ",quay.io/openstack-k8s-operators/rabbitmq-cluster-operator-bundle@sha256:1612b82e274827281af1d64740a7d52e21745bc74c91d5149f111135d8e7779f" -fi diff --git a/hack/sync-bindata.sh b/hack/sync-bindata.sh index 0d7e2382b8..29f4b27b1a 100755 --- a/hack/sync-bindata.sh +++ b/hack/sync-bindata.sh @@ -371,13 +371,8 @@ EOF_CAT for X in $(ls manifests/*clusterserviceversion.yaml); do OPERATOR_NAME=$(echo $X | sed -e "s|manifests\/\([^\.]*\)\..*|\1|" | sed -e "s|-|_|g" | tr '[:lower:]' '[:upper:]' ) echo $OPERATOR_NAME - if [[ $OPERATOR_NAME == "RABBITMQ_CLUSTER_OPERATOR" ]]; then - # Rabbitmq cluster operator has just a container in the deployment and name is operator, different that openstack ones - IMAGE=$(cat $X | $LOCAL_BINARIES/yq -r '.spec.install.spec.deployments[0].spec.template.spec.containers.[] | select(.name == "operator") | .image') - else - # The name of the actual operator container in the openstack operators is manager - IMAGE=$(cat $X | $LOCAL_BINARIES/yq -r '.spec.install.spec.deployments[0].spec.template.spec.containers.[] | select(.name == "manager") | .image') - fi + # The name of the actual operator container in the openstack operators is manager + IMAGE=$(cat $X | $LOCAL_BINARIES/yq -r '.spec.install.spec.deployments[0].spec.template.spec.containers.[] | select(.name == "manager") | .image') echo $IMAGE diff --git a/internal/controller/operator/openstack_controller.go b/internal/controller/operator/openstack_controller.go index 22db386fe4..daaa8fb5df 100644 --- a/internal/controller/operator/openstack_controller.go +++ b/internal/controller/operator/openstack_controller.go @@ -251,6 +251,11 @@ func (r *OpenStackReconciler) Reconcile(ctx context.Context, req ctrl.Request) ( return ctrl.Result{}, err } + // cleanup rabbitmq-cluster-operator (now managed inline by infra-operator) + if err := r.cleanupRabbitMQClusterOperator(ctx, instance); err != nil { + Log.Error(err, "Failed to cleanup rabbitmq-cluster-operator resources") + } + // Check if OPENSTACK_RELEASE_VERSION has changed - if so, delete all owned resources // This is a one-time fix to handle incompatible upgrades shouldReinstall := false @@ -803,12 +808,6 @@ func (r *OpenStackReconciler) applyOperator(ctx context.Context, instance *opera Name: "METRICS_CERTS", Value: "false", }) - case operatorv1beta1.RabbitMQOperatorName: - serviceOp.Deployment.Manager.Env = append(serviceOp.Deployment.Manager.Env, - corev1.EnvVar{ - Name: "METRICS_CERTS", - Value: "false", - }) case operatorv1beta1.SwiftOperatorName: serviceOp.Deployment.Manager.Env = append(serviceOp.Deployment.Manager.Env, corev1.EnvVar{ @@ -856,9 +855,9 @@ func (r *OpenStackReconciler) applyOperator(ctx context.Context, instance *opera instance.Status.DisabledOperatorCount = &disabledOperators instance.Status.EnabledOperatorCount = &enabledOperators - // serviceOperators a copy of operators details, without openstack-operator and rabbitmq-cluster-operator - // which get removed bellow when creating openstackOperator and rabbitmqOperator, since they use dedicated - // templates + // serviceOperators a copy of operators details, without openstack-operator + // which gets removed below when creating openstackOperator, since it uses a dedicated + // template serviceOperators := operators // openstack-operator-controller-manager @@ -870,23 +869,11 @@ func (r *OpenStackReconciler) applyOperator(ctx context.Context, instance *opera serviceOperators = append(serviceOperators[:idx], serviceOperators[idx+1:]...) } - // rabbitmq-cluster-operator - rabbitmqOperator := operator.Operator{} - idx, op = operator.GetOperator(serviceOperators, operatorv1beta1.RabbitMQOperatorName) - if idx >= 0 { - rabbitmqOperator = op - // remove rabbitmq-cluster-operator from serviceOperators - serviceOperators = append(serviceOperators[:idx], serviceOperators[idx+1:]...) - } - data := bindata.MakeRenderData() // global stuff data.Data["OperatorNamespace"] = instance.Namespace - // rabbitmaq-cluster-operator-manager image rabbit.yaml - data.Data["RabbitmqOperator"] = rabbitmqOperator - // openstack-operator-controller-manager image operator.yaml data.Data["OpenStackOperator"] = openstackOperator @@ -1156,3 +1143,101 @@ func (r *OpenStackReconciler) SetupWithManager(mgr ctrl.Manager) error { For(&operatorv1beta1.OpenStack{}). Complete(r) } + +// cleanupRabbitMQClusterOperator removes the old rabbitmq-cluster-operator +// resources that are no longer needed since RabbitMQ is now managed inline +// by the infra-operator. +func (r *OpenStackReconciler) cleanupRabbitMQClusterOperator(ctx context.Context, instance *operatorv1beta1.OpenStack) error { + Log := r.GetLogger(ctx) + + // List of namespaced resources to delete + namespacedResources := []struct { + gvk schema.GroupVersionKind + name string + }{ + {schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}, "rabbitmq-cluster-operator-manager"}, + {schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ServiceAccount"}, "rabbitmq-cluster-operator-controller-manager"}, + {schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Service"}, "rabbitmq-cluster-operator-controller-manager-metrics-service"}, + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "Role"}, "rabbitmq-cluster-operator-leader-election-role"}, + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "RoleBinding"}, "rabbitmq-cluster-operator-leader-election-rolebinding"}, + {schema.GroupVersionKind{Group: "cert-manager.io", Version: "v1", Kind: "Issuer"}, "rabbitmq-cluster-operator-selfsigned-issuer"}, + } + + for _, res := range namespacedResources { + obj := &uns.Unstructured{} + obj.SetGroupVersionKind(res.gvk) + obj.SetName(res.name) + obj.SetNamespace(instance.Namespace) + if err := r.Delete(ctx, obj); err != nil { + if !apierrors.IsNotFound(err) { + return fmt.Errorf("failed to delete %s %s: %w", res.gvk.Kind, res.name, err) + } + } else { + Log.Info("Deleted rabbitmq-cluster-operator resource", "kind", res.gvk.Kind, "name", res.name) + } + } + + // Cluster-scoped RBAC resources + clusterRBACResources := []struct { + gvk schema.GroupVersionKind + name string + }{ + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "ClusterRole"}, "rabbitmq-cluster-operator-manager-role"}, + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "ClusterRole"}, "rabbitmq-cluster-operator-proxy-role"}, + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "ClusterRoleBinding"}, "rabbitmq-cluster-operator-manager-rolebinding"}, + {schema.GroupVersionKind{Group: "rbac.authorization.k8s.io", Version: "v1", Kind: "ClusterRoleBinding"}, "rabbitmq-cluster-operator-proxy-rolebinding"}, + } + + for _, res := range clusterRBACResources { + obj := &uns.Unstructured{} + obj.SetGroupVersionKind(res.gvk) + obj.SetName(res.name) + if err := r.Delete(ctx, obj); err != nil { + if !apierrors.IsNotFound(err) { + return fmt.Errorf("failed to delete %s %s: %w", res.gvk.Kind, res.name, err) + } + } else { + Log.Info("Deleted rabbitmq-cluster-operator resource", "kind", res.gvk.Kind, "name", res.name) + } + } + + // Delete the rabbitmqclusters.rabbitmq.com CRD only if no instances remain. + // The infra-operator handles deleting RabbitmqCluster CRs after reparenting. + rabbitmqClusterList := &uns.UnstructuredList{} + rabbitmqClusterList.SetGroupVersionKind(schema.GroupVersionKind{ + Group: "rabbitmq.com", + Version: "v1beta1", + Kind: "RabbitmqClusterList", + }) + canDeleteCRD := false + if err := r.List(ctx, rabbitmqClusterList); err != nil { + if apierrors.IsNotFound(err) || strings.Contains(err.Error(), "no matches for kind") { + // CRD already gone + return nil + } + Log.Info("Could not list RabbitmqCluster resources, skipping CRD deletion", "error", err.Error()) + } else if len(rabbitmqClusterList.Items) == 0 { + canDeleteCRD = true + } else { + Log.Info("RabbitmqCluster instances still exist, skipping CRD deletion", "count", len(rabbitmqClusterList.Items)) + } + + if canDeleteCRD { + crd := &uns.Unstructured{} + crd.SetGroupVersionKind(schema.GroupVersionKind{ + Group: "apiextensions.k8s.io", + Version: "v1", + Kind: "CustomResourceDefinition", + }) + crd.SetName("rabbitmqclusters.rabbitmq.com") + if err := r.Delete(ctx, crd); err != nil { + if !apierrors.IsNotFound(err) { + return fmt.Errorf("failed to delete rabbitmqclusters.rabbitmq.com CRD: %w", err) + } + } else { + Log.Info("Deleted rabbitmqclusters.rabbitmq.com CRD") + } + } + + return nil +} diff --git a/internal/openstack/rabbitmq.go b/internal/openstack/rabbitmq.go index 742b92ac8e..5c71e8c799 100644 --- a/internal/openstack/rabbitmq.go +++ b/internal/openstack/rabbitmq.go @@ -26,6 +26,7 @@ import ( "k8s.io/utils/ptr" k8s_errors "k8s.io/apimachinery/pkg/api/errors" + apimeta "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ctrl "sigs.k8s.io/controller-runtime" @@ -277,6 +278,13 @@ func reconcileRabbitMQ( rabbitmq.Spec.TLS.CaSecretName = tlsCert rabbitmq.Spec.TLS.DisableNonTLSListeners = true } + // set the target rabbitmq-server version in spec + if version.Status.ServiceDefaults.RabbitmqVersion != nil { + rabbitmq.Spec.TargetVersion = version.Status.ServiceDefaults.RabbitmqVersion + } else { + rabbitmq.Spec.TargetVersion = ptr.To("3.9") + } + rabbitmq.Spec.ContainerImage = *version.Status.ContainerImages.RabbitmqImage err := controllerutil.SetControllerReference(helper.GetBeforeObject(), rabbitmq, helper.GetScheme()) if err != nil { @@ -313,7 +321,7 @@ func removeRabbitmqClusterControllerReference( Namespace: instance.Namespace, } if err := helper.GetClient().Get(ctx, namespacedName, rabbitmqCluster); err != nil { - if k8s_errors.IsNotFound(err) { + if k8s_errors.IsNotFound(err) || apimeta.IsNoMatchError(err) { return nil } return err diff --git a/internal/openstack/version.go b/internal/openstack/version.go index f15e6c1914..5eaf787185 100644 --- a/internal/openstack/version.go +++ b/internal/openstack/version.go @@ -230,6 +230,9 @@ func InitializeOpenStackVersionServiceDefaults(ctx context.Context) *corev1beta1 trueString := "true" defaults.GlanceWsgi = &trueString // all new glance deployments use WSGI by default (FR3 and later) + versionString := "4.2" + defaults.RabbitmqVersion = &versionString // all new rabbitmq deployments will have rabbitmq-server 4.2 (FR5) + return defaults } diff --git a/test/kuttl/tests/ctlplane-basic-deployment-with-appcred/05-cleanup.yaml b/test/kuttl/tests/ctlplane-basic-deployment-with-appcred/05-cleanup.yaml index df9df9fe0f..c7a8395e98 100644 --- a/test/kuttl/tests/ctlplane-basic-deployment-with-appcred/05-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-basic-deployment-with-appcred/05-cleanup.yaml @@ -6,6 +6,9 @@ delete: name: openstack commands: - script: | + oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE oc delete secret -l ca-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-basic-deployment-with-nicMappings/05-cleanup.yaml b/test/kuttl/tests/ctlplane-basic-deployment-with-nicMappings/05-cleanup.yaml index 6b4992512a..6a724fcc8c 100644 --- a/test/kuttl/tests/ctlplane-basic-deployment-with-nicMappings/05-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-basic-deployment-with-nicMappings/05-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-basic-deployment/05-cleanup.yaml b/test/kuttl/tests/ctlplane-basic-deployment/05-cleanup.yaml index 6b4992512a..6a724fcc8c 100644 --- a/test/kuttl/tests/ctlplane-basic-deployment/05-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-basic-deployment/05-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-collapsed/02-cleanup.yaml b/test/kuttl/tests/ctlplane-collapsed/02-cleanup.yaml index 0f45e50bc7..0819900434 100644 --- a/test/kuttl/tests/ctlplane-collapsed/02-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-collapsed/02-cleanup.yaml @@ -6,6 +6,9 @@ delete: name: openstack-collapsed-cell commands: - script: | + oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE oc delete secret -l ca-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-galera-3replicas/02-cleanup.yaml b/test/kuttl/tests/ctlplane-galera-3replicas/02-cleanup.yaml index 22507881a3..77ba1da302 100644 --- a/test/kuttl/tests/ctlplane-galera-3replicas/02-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-galera-3replicas/02-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ mysql-db-openstack-galera-0 \ mysql-db-openstack-galera-1 \ mysql-db-openstack-galera-2 \ diff --git a/test/kuttl/tests/ctlplane-nodeselectors/05-cleanup.yaml b/test/kuttl/tests/ctlplane-nodeselectors/05-cleanup.yaml index 722a0e8b1d..1dc965afba 100644 --- a/test/kuttl/tests/ctlplane-nodeselectors/05-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-nodeselectors/05-cleanup.yaml @@ -8,6 +8,8 @@ commands: - script: | oc annotate namespace $NAMESPACE openshift.io/node-selector- oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-staged-deployment/03-cleanup.yaml b/test/kuttl/tests/ctlplane-staged-deployment/03-cleanup.yaml index 6b4992512a..6a724fcc8c 100644 --- a/test/kuttl/tests/ctlplane-staged-deployment/03-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-staged-deployment/03-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-tls-cert-rotation/05-cleanup.yaml b/test/kuttl/tests/ctlplane-tls-cert-rotation/05-cleanup.yaml index 6b4992512a..6a724fcc8c 100644 --- a/test/kuttl/tests/ctlplane-tls-cert-rotation/05-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-tls-cert-rotation/05-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-tls-custom-issuers/05-cleanup.yaml b/test/kuttl/tests/ctlplane-tls-custom-issuers/05-cleanup.yaml index 6b4992512a..6a724fcc8c 100644 --- a/test/kuttl/tests/ctlplane-tls-custom-issuers/05-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-tls-custom-issuers/05-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE oc delete secret -l service-cert -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-tls-custom-issuers/11-cleanup.yaml b/test/kuttl/tests/ctlplane-tls-custom-issuers/11-cleanup.yaml index 6fdd31ed94..98bfa81cd8 100644 --- a/test/kuttl/tests/ctlplane-tls-custom-issuers/11-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-tls-custom-issuers/11-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete --ignore-not-found=true -n $NAMESPACE issuer rootca-internal-custom rootca-ingress-custom oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE diff --git a/test/kuttl/tests/ctlplane-tls-custom-route/05-cleanup.yaml b/test/kuttl/tests/ctlplane-tls-custom-route/05-cleanup.yaml index 6fdd31ed94..98bfa81cd8 100644 --- a/test/kuttl/tests/ctlplane-tls-custom-route/05-cleanup.yaml +++ b/test/kuttl/tests/ctlplane-tls-custom-route/05-cleanup.yaml @@ -7,6 +7,8 @@ delete: commands: - script: | oc delete --ignore-not-found=true -n $NAMESPACE pvc \ + persistence-rabbitmq-server-0 \ + persistence-rabbitmq-cell1-server-0 \ srv-swift-storage-0 oc delete --ignore-not-found=true -n $NAMESPACE issuer rootca-internal-custom rootca-ingress-custom oc delete secret --ignore-not-found=true combined-ca-bundle -n $NAMESPACE