From 86c1aefa139fbfae87b457acfb49e437d8fb78b0 Mon Sep 17 00:00:00 2001 From: jlarriba Date: Tue, 1 Jul 2025 11:38:25 +0200 Subject: [PATCH 01/10] Add CloudKitty to the services deployed by Telemetry --- ....openstack.org_openstackcontrolplanes.yaml | 421 +++++++++++++++++ .../core.openstack.org_openstackversions.yaml | 12 + .../v1beta1/openstackcontrolplane_types.go | 5 + .../v1beta1/openstackcontrolplane_webhook.go | 4 + apis/core/v1beta1/openstackversion_types.go | 2 + apis/core/v1beta1/zz_generated.deepcopy.go | 11 + bindata/crds/crds.yaml | 433 ++++++++++++++++++ bindata/operator/operator.yaml | 7 +- ....openstack.org_openstackcontrolplanes.yaml | 421 +++++++++++++++++ .../core.openstack.org_openstackversions.yaml | 12 + config/operator/default_images.yaml | 4 + hack/export_related_images.sh | 2 + pkg/openstack/telemetry.go | 57 +++ pkg/openstack/version.go | 2 + 14 files changed, 1388 insertions(+), 5 deletions(-) diff --git a/apis/bases/core.openstack.org_openstackcontrolplanes.yaml b/apis/bases/core.openstack.org_openstackcontrolplanes.yaml index bd0096461..ab12f54dd 100644 --- a/apis/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/apis/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -17171,6 +17171,130 @@ spec: type: string type: object type: object + cloudKittyApiOverride: + properties: + route: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + alternateBackends: + items: + properties: + kind: + enum: + - Service + - "" + type: string + name: + type: string + weight: + format: int32 + maximum: 256 + minimum: 0 + type: integer + type: object + maxItems: 3 + type: array + host: + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + type: string + path: + pattern: ^/ + type: string + port: + properties: + targetPort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - targetPort + type: object + subdomain: + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + type: string + tls: + properties: + caCertificate: + type: string + certificate: + type: string + destinationCACertificate: + type: string + externalCertificate: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + insecureEdgeTerminationPolicy: + enum: + - Allow + - None + - Redirect + - "" + type: string + key: + type: string + termination: + enum: + - edge + - reencrypt + - passthrough + type: string + required: + - termination + type: object + x-kubernetes-validations: + - message: 'cannot have both spec.tls.termination: + passthrough and spec.tls.insecureEdgeTerminationPolicy: + Allow' + rule: 'has(self.termination) && has(self.insecureEdgeTerminationPolicy) + ? !((self.termination==''passthrough'') && (self.insecureEdgeTerminationPolicy==''Allow'')) + : true' + to: + properties: + kind: + enum: + - Service + - "" + type: string + name: + type: string + weight: + format: int32 + maximum: 256 + minimum: 0 + type: integer + type: object + wildcardPolicy: + enum: + - None + - Subdomain + - "" + type: string + type: object + type: object + tls: + properties: + secretName: + type: string + type: object + type: object enabled: default: true type: boolean @@ -17402,6 +17526,9 @@ spec: ceilometerService: default: CeilometerPassword type: string + cloudKittyService: + default: CloudKittyPassword + type: string type: object preserveJobs: default: false @@ -17529,6 +17656,9 @@ spec: ceilometerService: default: CeilometerPassword type: string + cloudKittyService: + default: CloudKittyPassword + type: string type: object rabbitMqClusterName: default: rabbitmq @@ -17556,6 +17686,293 @@ spec: required: - secret type: object + cloudkitty: + properties: + apiTimeout: + default: 60 + type: integer + cloudKittyAPI: + properties: + containerImage: + type: string + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + override: + properties: + service: + additionalProperties: + properties: + endpointURL: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + externalName: + type: string + externalTrafficPolicy: + type: string + internalTrafficPolicy: + type: string + ipFamilyPolicy: + type: string + loadBalancerClass: + type: string + loadBalancerSourceRanges: + items: + type: string + type: array + x-kubernetes-list-type: atomic + sessionAffinity: + type: string + sessionAffinityConfig: + properties: + clientIP: + properties: + timeoutSeconds: + format: int32 + type: integer + type: object + type: object + type: + type: string + type: object + type: object + type: object + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + 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 + tls: + properties: + api: + properties: + internal: + properties: + secretName: + type: string + type: object + public: + properties: + secretName: + type: string + type: object + type: object + caBundleSecretName: + type: string + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - containerImage + type: object + cloudKittyProc: + properties: + containerImage: + type: string + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + 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 + tls: + properties: + caBundleSecretName: + type: string + secretName: + type: string + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - containerImage + type: object + customServiceConfig: + type: string + databaseAccount: + default: cloudkitty + type: string + databaseInstance: + type: string + enabled: + default: false + type: boolean + memcachedInstance: + default: memcached + type: string + nodeSelector: + additionalProperties: + type: string + type: object + passwordSelector: + default: + cloudKittyService: CloudKittyPassword + properties: + aodhService: + default: AodhPassword + type: string + ceilometerService: + default: CeilometerPassword + type: string + cloudKittyService: + default: CloudKittyPassword + type: string + type: object + preserveJobs: + default: false + type: boolean + prometheusHost: + type: string + prometheusPort: + format: int32 + maximum: 65535 + minimum: 1 + type: integer + prometheusTLSCaCertSecret: + nullable: true + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + rabbitMqClusterName: + default: rabbitmq + type: string + secret: + type: string + serviceUser: + default: cloudkitty + type: string + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - cloudKittyAPI + - cloudKittyProc + - databaseInstance + - memcachedInstance + - rabbitMqClusterName + - secret + type: object logging: properties: annotations: @@ -18527,6 +18944,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: diff --git a/apis/bases/core.openstack.org_openstackversions.yaml b/apis/bases/core.openstack.org_openstackversions.yaml index 811640cd0..c018b827f 100644 --- a/apis/bases/core.openstack.org_openstackversions.yaml +++ b/apis/bases/core.openstack.org_openstackversions.yaml @@ -83,6 +83,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: @@ -307,6 +311,10 @@ spec: type: string cinderVolumeImage: type: string + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: @@ -495,6 +503,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: diff --git a/apis/core/v1beta1/openstackcontrolplane_types.go b/apis/core/v1beta1/openstackcontrolplane_types.go index b0cf1cb52..2e8167c0f 100644 --- a/apis/core/v1beta1/openstackcontrolplane_types.go +++ b/apis/core/v1beta1/openstackcontrolplane_types.go @@ -689,6 +689,11 @@ type TelemetrySection struct { // AodhAPIOverride, provides the ability to override the generated manifest of several child resources. AodhAPIOverride Override `json:"aodhApiOverride,omitempty"` + // +kubebuilder:validation:Optional + // +operator-sdk:csv:customresourcedefinitions:type=spec + // CloudKittyAPIOverride, provides the ability to override the generated manifest of several child resources. + CloudKittyAPIOverride Override `json:"cloudKittyApiOverride,omitempty"` + // +kubebuilder:validation:Optional // +operator-sdk:csv:customresourcedefinitions:type=spec // PrometheusOverride, provides the ability to override the generated manifest of several child resources. diff --git a/apis/core/v1beta1/openstackcontrolplane_webhook.go b/apis/core/v1beta1/openstackcontrolplane_webhook.go index 006425495..f328040d4 100644 --- a/apis/core/v1beta1/openstackcontrolplane_webhook.go +++ b/apis/core/v1beta1/openstackcontrolplane_webhook.go @@ -243,6 +243,10 @@ func (r *OpenStackControlPlane) checkDepsEnabled(name string) string { if !(r.Spec.Rabbitmq.Enabled && r.Spec.Keystone.Enabled) { reqs = "RabbitMQ, Keystone" } + case "Telemetry.CloudKitty": + if !(r.Spec.Rabbitmq.Enabled && r.Spec.Keystone.Enabled) { + reqs = "RabbitMQ, Keystone" + } } // If "reqs" is not the empty string, we have missing requirements diff --git a/apis/core/v1beta1/openstackversion_types.go b/apis/core/v1beta1/openstackversion_types.go index d65773876..e848e127f 100644 --- a/apis/core/v1beta1/openstackversion_types.go +++ b/apis/core/v1beta1/openstackversion_types.go @@ -95,6 +95,8 @@ type ContainerTemplate struct { CinderAPIImage *string `json:"cinderAPIImage,omitempty"` CinderBackupImage *string `json:"cinderBackupImage,omitempty"` CinderSchedulerImage *string `json:"cinderSchedulerImage,omitempty"` + CloudKittyAPIImage *string `json:"cloudkittyAPIImage,omitempty"` + CloudKittyProcImage *string `json:"cloudkittyProcImage,omitempty"` DesignateAPIImage *string `json:"designateAPIImage,omitempty"` DesignateBackendbind9Image *string `json:"designateBackendbind9Image,omitempty"` DesignateCentralImage *string `json:"designateCentralImage,omitempty"` diff --git a/apis/core/v1beta1/zz_generated.deepcopy.go b/apis/core/v1beta1/zz_generated.deepcopy.go index 9bd836b09..77a6672ea 100644 --- a/apis/core/v1beta1/zz_generated.deepcopy.go +++ b/apis/core/v1beta1/zz_generated.deepcopy.go @@ -346,6 +346,16 @@ func (in *ContainerTemplate) DeepCopyInto(out *ContainerTemplate) { *out = new(string) **out = **in } + if in.CloudKittyAPIImage != nil { + in, out := &in.CloudKittyAPIImage, &out.CloudKittyAPIImage + *out = new(string) + **out = **in + } + if in.CloudKittyProcImage != nil { + in, out := &in.CloudKittyProcImage, &out.CloudKittyProcImage + *out = new(string) + **out = **in + } if in.DesignateAPIImage != nil { in, out := &in.DesignateAPIImage, &out.DesignateAPIImage *out = new(string) @@ -1703,6 +1713,7 @@ func (in *TelemetrySection) DeepCopyInto(out *TelemetrySection) { (*in).DeepCopyInto(*out) } in.AodhAPIOverride.DeepCopyInto(&out.AodhAPIOverride) + in.CloudKittyAPIOverride.DeepCopyInto(&out.CloudKittyAPIOverride) in.PrometheusOverride.DeepCopyInto(&out.PrometheusOverride) in.AlertmanagerOverride.DeepCopyInto(&out.AlertmanagerOverride) } diff --git a/bindata/crds/crds.yaml b/bindata/crds/crds.yaml index ea4bc6f2c..9ff7f2b24 100644 --- a/bindata/crds/crds.yaml +++ b/bindata/crds/crds.yaml @@ -17335,6 +17335,130 @@ spec: type: string type: object type: object + cloudKittyApiOverride: + properties: + route: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + alternateBackends: + items: + properties: + kind: + enum: + - Service + - "" + type: string + name: + type: string + weight: + format: int32 + maximum: 256 + minimum: 0 + type: integer + type: object + maxItems: 3 + type: array + host: + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + type: string + path: + pattern: ^/ + type: string + port: + properties: + targetPort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - targetPort + type: object + subdomain: + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + type: string + tls: + properties: + caCertificate: + type: string + certificate: + type: string + destinationCACertificate: + type: string + externalCertificate: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + insecureEdgeTerminationPolicy: + enum: + - Allow + - None + - Redirect + - "" + type: string + key: + type: string + termination: + enum: + - edge + - reencrypt + - passthrough + type: string + required: + - termination + type: object + x-kubernetes-validations: + - message: 'cannot have both spec.tls.termination: + passthrough and spec.tls.insecureEdgeTerminationPolicy: + Allow' + rule: 'has(self.termination) && has(self.insecureEdgeTerminationPolicy) + ? !((self.termination==''passthrough'') && (self.insecureEdgeTerminationPolicy==''Allow'')) + : true' + to: + properties: + kind: + enum: + - Service + - "" + type: string + name: + type: string + weight: + format: int32 + maximum: 256 + minimum: 0 + type: integer + type: object + wildcardPolicy: + enum: + - None + - Subdomain + - "" + type: string + type: object + type: object + tls: + properties: + secretName: + type: string + type: object + type: object enabled: default: true type: boolean @@ -17566,6 +17690,9 @@ spec: ceilometerService: default: CeilometerPassword type: string + cloudKittyService: + default: CloudKittyPassword + type: string type: object preserveJobs: default: false @@ -17693,6 +17820,9 @@ spec: ceilometerService: default: CeilometerPassword type: string + cloudKittyService: + default: CloudKittyPassword + type: string type: object rabbitMqClusterName: default: rabbitmq @@ -17720,6 +17850,293 @@ spec: required: - secret type: object + cloudkitty: + properties: + apiTimeout: + default: 60 + type: integer + cloudKittyAPI: + properties: + containerImage: + type: string + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + override: + properties: + service: + additionalProperties: + properties: + endpointURL: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + externalName: + type: string + externalTrafficPolicy: + type: string + internalTrafficPolicy: + type: string + ipFamilyPolicy: + type: string + loadBalancerClass: + type: string + loadBalancerSourceRanges: + items: + type: string + type: array + x-kubernetes-list-type: atomic + sessionAffinity: + type: string + sessionAffinityConfig: + properties: + clientIP: + properties: + timeoutSeconds: + format: int32 + type: integer + type: object + type: object + type: + type: string + type: object + type: object + type: object + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + 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 + tls: + properties: + api: + properties: + internal: + properties: + secretName: + type: string + type: object + public: + properties: + secretName: + type: string + type: object + type: object + caBundleSecretName: + type: string + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - containerImage + type: object + cloudKittyProc: + properties: + containerImage: + type: string + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + 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 + tls: + properties: + caBundleSecretName: + type: string + secretName: + type: string + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - containerImage + type: object + customServiceConfig: + type: string + databaseAccount: + default: cloudkitty + type: string + databaseInstance: + type: string + enabled: + default: false + type: boolean + memcachedInstance: + default: memcached + type: string + nodeSelector: + additionalProperties: + type: string + type: object + passwordSelector: + default: + cloudKittyService: CloudKittyPassword + properties: + aodhService: + default: AodhPassword + type: string + ceilometerService: + default: CeilometerPassword + type: string + cloudKittyService: + default: CloudKittyPassword + type: string + type: object + preserveJobs: + default: false + type: boolean + prometheusHost: + type: string + prometheusPort: + format: int32 + maximum: 65535 + minimum: 1 + type: integer + prometheusTLSCaCertSecret: + nullable: true + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + rabbitMqClusterName: + default: rabbitmq + type: string + secret: + type: string + serviceUser: + default: cloudkitty + type: string + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - cloudKittyAPI + - cloudKittyProc + - databaseInstance + - memcachedInstance + - rabbitMqClusterName + - secret + type: object logging: properties: annotations: @@ -18691,6 +19108,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: @@ -20278,6 +20699,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: @@ -20502,6 +20927,10 @@ spec: type: string cinderVolumeImage: type: string + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: @@ -20690,6 +21119,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: diff --git a/bindata/operator/operator.yaml b/bindata/operator/operator.yaml index 5a4745d5b..446dabd7b 100644 --- a/bindata/operator/operator.yaml +++ b/bindata/operator/operator.yaml @@ -82,10 +82,7 @@ spec: value: '{{ .RenewDeadline }}' - name: RETRY_PERIOD value: '{{ .RetryPeriod }}' -{{ range $envName, $envValue := .OpenStackServiceRelatedImages }} - - name: {{ $envName }} - value: {{ $envValue }} -{{ end }} + envCustomImage: replace_me image: '{{ .OperatorImage }}' livenessProbe: httpGet: @@ -122,7 +119,7 @@ spec: - --upstream=http://127.0.0.1:8080/ - --logtostderr=true - --v=0 - image: '{{ .KubeRbacProxyImage }}' + image: kube-rbac-proxy:replace_me name: kube-rbac-proxy ports: - containerPort: 8443 diff --git a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml index bd0096461..ab12f54dd 100644 --- a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -17171,6 +17171,130 @@ spec: type: string type: object type: object + cloudKittyApiOverride: + properties: + route: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + alternateBackends: + items: + properties: + kind: + enum: + - Service + - "" + type: string + name: + type: string + weight: + format: int32 + maximum: 256 + minimum: 0 + type: integer + type: object + maxItems: 3 + type: array + host: + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + type: string + path: + pattern: ^/ + type: string + port: + properties: + targetPort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - targetPort + type: object + subdomain: + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + type: string + tls: + properties: + caCertificate: + type: string + certificate: + type: string + destinationCACertificate: + type: string + externalCertificate: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + insecureEdgeTerminationPolicy: + enum: + - Allow + - None + - Redirect + - "" + type: string + key: + type: string + termination: + enum: + - edge + - reencrypt + - passthrough + type: string + required: + - termination + type: object + x-kubernetes-validations: + - message: 'cannot have both spec.tls.termination: + passthrough and spec.tls.insecureEdgeTerminationPolicy: + Allow' + rule: 'has(self.termination) && has(self.insecureEdgeTerminationPolicy) + ? !((self.termination==''passthrough'') && (self.insecureEdgeTerminationPolicy==''Allow'')) + : true' + to: + properties: + kind: + enum: + - Service + - "" + type: string + name: + type: string + weight: + format: int32 + maximum: 256 + minimum: 0 + type: integer + type: object + wildcardPolicy: + enum: + - None + - Subdomain + - "" + type: string + type: object + type: object + tls: + properties: + secretName: + type: string + type: object + type: object enabled: default: true type: boolean @@ -17402,6 +17526,9 @@ spec: ceilometerService: default: CeilometerPassword type: string + cloudKittyService: + default: CloudKittyPassword + type: string type: object preserveJobs: default: false @@ -17529,6 +17656,9 @@ spec: ceilometerService: default: CeilometerPassword type: string + cloudKittyService: + default: CloudKittyPassword + type: string type: object rabbitMqClusterName: default: rabbitmq @@ -17556,6 +17686,293 @@ spec: required: - secret type: object + cloudkitty: + properties: + apiTimeout: + default: 60 + type: integer + cloudKittyAPI: + properties: + containerImage: + type: string + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + override: + properties: + service: + additionalProperties: + properties: + endpointURL: + type: string + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object + spec: + properties: + externalName: + type: string + externalTrafficPolicy: + type: string + internalTrafficPolicy: + type: string + ipFamilyPolicy: + type: string + loadBalancerClass: + type: string + loadBalancerSourceRanges: + items: + type: string + type: array + x-kubernetes-list-type: atomic + sessionAffinity: + type: string + sessionAffinityConfig: + properties: + clientIP: + properties: + timeoutSeconds: + format: int32 + type: integer + type: object + type: object + type: + type: string + type: object + type: object + type: object + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + 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 + tls: + properties: + api: + properties: + internal: + properties: + secretName: + type: string + type: object + public: + properties: + secretName: + type: string + type: object + type: object + caBundleSecretName: + type: string + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - containerImage + type: object + cloudKittyProc: + properties: + containerImage: + type: string + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + 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 + tls: + properties: + caBundleSecretName: + type: string + secretName: + type: string + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - containerImage + type: object + customServiceConfig: + type: string + databaseAccount: + default: cloudkitty + type: string + databaseInstance: + type: string + enabled: + default: false + type: boolean + memcachedInstance: + default: memcached + type: string + nodeSelector: + additionalProperties: + type: string + type: object + passwordSelector: + default: + cloudKittyService: CloudKittyPassword + properties: + aodhService: + default: AodhPassword + type: string + ceilometerService: + default: CeilometerPassword + type: string + cloudKittyService: + default: CloudKittyPassword + type: string + type: object + preserveJobs: + default: false + type: boolean + prometheusHost: + type: string + prometheusPort: + format: int32 + maximum: 65535 + minimum: 1 + type: integer + prometheusTLSCaCertSecret: + nullable: true + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + rabbitMqClusterName: + default: rabbitmq + type: string + secret: + type: string + serviceUser: + default: cloudkitty + type: string + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + required: + - cloudKittyAPI + - cloudKittyProc + - databaseInstance + - memcachedInstance + - rabbitMqClusterName + - secret + type: object logging: properties: annotations: @@ -18527,6 +18944,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: diff --git a/config/crd/bases/core.openstack.org_openstackversions.yaml b/config/crd/bases/core.openstack.org_openstackversions.yaml index 811640cd0..c018b827f 100644 --- a/config/crd/bases/core.openstack.org_openstackversions.yaml +++ b/config/crd/bases/core.openstack.org_openstackversions.yaml @@ -83,6 +83,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: @@ -307,6 +311,10 @@ spec: type: string cinderVolumeImage: type: string + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: @@ -495,6 +503,10 @@ spec: additionalProperties: type: string type: object + cloudkittyAPIImage: + type: string + cloudkittyProcImage: + type: string designateAPIImage: type: string designateBackendbind9Image: diff --git a/config/operator/default_images.yaml b/config/operator/default_images.yaml index 7d88ab492..a2fae708f 100644 --- a/config/operator/default_images.yaml +++ b/config/operator/default_images.yaml @@ -53,6 +53,10 @@ spec: value: quay.io/podified-antelope-centos9/openstack-cinder-scheduler:current-podified - name: RELATED_IMAGE_CINDER_VOLUME_IMAGE_URL_DEFAULT value: quay.io/podified-antelope-centos9/openstack-cinder-volume:current-podified + - name: RELATED_IMAGE_CLOUDKITTY_API_IMAGE_URL_DEFAULT + value: quay.io/podified-master-centos9/openstack-cloudkitty-api:current-podified + - name: RELATED_IMAGE_CLOUDKITTY_PROCESSOR_IMAGE_URL_DEFAULT + value: quay.io/podified-master-centos9/openstack-cloudkitty-processor:current-podified - name: RELATED_IMAGE_DESIGNATE_API_IMAGE_URL_DEFAULT value: quay.io/podified-antelope-centos9/openstack-designate-api:current-podified - name: RELATED_IMAGE_DESIGNATE_BACKENDBIND9_IMAGE_URL_DEFAULT diff --git a/hack/export_related_images.sh b/hack/export_related_images.sh index a747106ea..123ab96ab 100755 --- a/hack/export_related_images.sh +++ b/hack/export_related_images.sh @@ -36,6 +36,8 @@ export RELATED_IMAGE_CEILOMETER_IPMI_IMAGE_URL_DEFAULT=quay.io/podified-antelope export RELATED_IMAGE_CEILOMETER_SGCORE_IMAGE_URL_DEFAULT=quay.io/openstack-k8s-operators/sg-core:latest export RELATED_IMAGE_CEILOMETER_MYSQLD_EXPORTER_IMAGE_URL_DEFAULT=quay.io/prometheus/mysqld-exporter:v0.15.1 export RELATED_IMAGE_KSM_IMAGE_URL_DEFAULT=registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.15.0 +export RELATED_IMAGE_CLOUDKITTY_API_IMAGE_URL_DEFAULT=quay.io/podified-master-centos9/openstack-cloudkitty-api:current-podified +export RELATED_IMAGE_CLOUDKITTY_PROCESSOR_IMAGE_URL_DEFAULT=quay.io/podified-master-centos9/openstack-expocloudkitty-processor:current-podified export RELATED_IMAGE_AODH_API_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-aodh-api:current-podified export RELATED_IMAGE_AODH_EVALUATOR_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-aodh-evaluator:current-podified export RELATED_IMAGE_AODH_NOTIFIER_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-aodh-notifier:current-podified diff --git a/pkg/openstack/telemetry.go b/pkg/openstack/telemetry.go index 505fb4724..b83dc7d2f 100644 --- a/pkg/openstack/telemetry.go +++ b/pkg/openstack/telemetry.go @@ -52,6 +52,8 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont instance.Status.ContainerImages.AodhEvaluatorImage = nil instance.Status.ContainerImages.AodhNotifierImage = nil instance.Status.ContainerImages.AodhListenerImage = nil + instance.Status.ContainerImages.CloudKittyAPIImage = nil + instance.Status.ContainerImages.CloudKittyProcImage = nil return ctrl.Result{}, nil } @@ -86,6 +88,14 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont AddServiceOpenStackOperatorLabel( instance.Spec.Telemetry.Template.Autoscaling.Aodh.Override.Service[endpointType], telemetry.Name) + + if instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.Override.Service == nil { + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.Override.Service = make(map[service.Endpoint]service.RoutedOverrideSpec) + } + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.Override.Service[endpointType] = + AddServiceOpenStackOperatorLabel( + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.Override.Service[endpointType], + telemetry.Name) } // preserve any previously set TLS certs, set CA cert @@ -95,12 +105,20 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont instance.Spec.Telemetry.Template.Ceilometer.TLS = telemetry.Spec.Ceilometer.TLS instance.Spec.Telemetry.Template.Ceilometer.MysqldExporterTLS = telemetry.Spec.Ceilometer.MysqldExporterTLS instance.Spec.Telemetry.Template.Ceilometer.KSMTLS = telemetry.Spec.Ceilometer.KSMTLS + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.TLS = telemetry.Spec.CloudKitty.CloudKittyAPI.TLS + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyProc.TLS = telemetry.Spec.CloudKitty.CloudKittyProc.TLS + // TODO + // instance.Spec.Telemetry.Template.CloudKitty.CloudKittyProc.PrometheusTLS = telemetry.Spec.CloudKitty.CloudKittyProc.PrometheusTLS } instance.Spec.Telemetry.Template.Autoscaling.Aodh.TLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName instance.Spec.Telemetry.Template.Ceilometer.TLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName instance.Spec.Telemetry.Template.Ceilometer.MysqldExporterTLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName instance.Spec.Telemetry.Template.Ceilometer.KSMTLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName instance.Spec.Telemetry.Template.MetricStorage.PrometheusTLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.TLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyProc.TLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName + // TODO + // instance.Spec.Telemetry.Template.CloudKitty.CloudKittyProc.PrometheusTLS.CaBundleSecretName = instance.Status.TLS.CaBundleSecretName aodhSvcs, err := service.GetServicesListWithLabel( ctx, @@ -140,6 +158,7 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont if err != nil { return ctrl.Result{}, err } + ksmSvcs, err := service.GetServicesListWithLabel( ctx, helper, @@ -160,6 +179,42 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont return ctrl.Result{}, err } + cloudKittySvcs, err := service.GetServicesListWithLabel( + ctx, + helper, + instance.Namespace, + map[string]string{common.AppSelector: "cloudkitty"}, + ) + if err != nil { + return ctrl.Result{}, err + } + + // make sure to get to EndpointConfig when all service got created + if len(cloudKittySvcs.Items) == len(instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.Override.Service) { + endpointDetails, ctrlResult, err := EnsureEndpointConfig( + ctx, + instance, + helper, + telemetry, + cloudKittySvcs, + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.Override.Service, + instance.Spec.Telemetry.CloudKittyAPIOverride, + corev1beta1.OpenStackControlPlaneExposeTelemetryReadyCondition, + false, // TODO (mschuppert) could be removed when all integrated service support TLS + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.TLS, + ) + if err != nil { + return ctrlResult, err + } else if (ctrlResult != ctrl.Result{}) { + return ctrlResult, nil + } + // set service overrides + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.Override.Service = endpointDetails.GetEndpointServiceOverrides() + // update TLS settings with cert secret + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.TLS.API.Public.SecretName = endpointDetails.GetEndptCertSecret(service.EndpointPublic) + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.TLS.API.Internal.SecretName = endpointDetails.GetEndptCertSecret(service.EndpointInternal) + } + // make sure to get to EndpointConfig when all service got created if len(aodhSvcs.Items) == len(instance.Spec.Telemetry.Template.Autoscaling.Aodh.Override.Service) { endpointDetails, ctrlResult, err := EnsureEndpointConfig( @@ -388,6 +443,8 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont instance.Status.ContainerImages.AodhEvaluatorImage = version.Status.ContainerImages.AodhEvaluatorImage instance.Status.ContainerImages.AodhNotifierImage = version.Status.ContainerImages.AodhNotifierImage instance.Status.ContainerImages.AodhListenerImage = version.Status.ContainerImages.AodhListenerImage + instance.Status.ContainerImages.CloudKittyAPIImage = version.Status.ContainerImages.CloudKittyAPIImage + instance.Status.ContainerImages.CloudKittyProcImage = version.Status.ContainerImages.CloudKittyProcImage instance.Status.Conditions.MarkTrue(corev1beta1.OpenStackControlPlaneTelemetryReadyCondition, corev1beta1.OpenStackControlPlaneTelemetryReadyMessage) } else { instance.Status.Conditions.Set(condition.FalseCondition( diff --git a/pkg/openstack/version.go b/pkg/openstack/version.go index 83a783969..aeb8ce981 100644 --- a/pkg/openstack/version.go +++ b/pkg/openstack/version.go @@ -117,6 +117,8 @@ func GetContainerImages(defaults *corev1beta1.ContainerDefaults, instance corev1 CinderAPIImage: getImg(instance.Spec.CustomContainerImages.CinderAPIImage, defaults.CinderAPIImage), CinderBackupImage: getImg(instance.Spec.CustomContainerImages.CinderBackupImage, defaults.CinderBackupImage), CinderSchedulerImage: getImg(instance.Spec.CustomContainerImages.CinderSchedulerImage, defaults.CinderSchedulerImage), + CloudKittyAPIImage: getImg(instance.Spec.CustomContainerImages.CloudKittyAPIImage, defaults.CloudKittyAPIImage), + CloudKittyProcImage: getImg(instance.Spec.CustomContainerImages.CloudKittyProcImage, defaults.CloudKittyProcImage), DesignateAPIImage: getImg(instance.Spec.CustomContainerImages.DesignateAPIImage, defaults.DesignateAPIImage), DesignateBackendbind9Image: getImg(instance.Spec.CustomContainerImages.DesignateBackendbind9Image, defaults.DesignateBackendbind9Image), DesignateCentralImage: getImg(instance.Spec.CustomContainerImages.DesignateCentralImage, defaults.DesignateCentralImage), From f96223b2baa19a99dcb0464dc2cecc0112818ef3 Mon Sep 17 00:00:00 2001 From: jlarriba Date: Tue, 23 Sep 2025 10:40:57 +0200 Subject: [PATCH 02/10] Test unmerged version of the telemetry-operator --- apis/go.mod | 6 +++++- apis/go.sum | 10 ++++++---- go.mod | 6 +++++- go.sum | 10 ++++++---- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/apis/go.mod b/apis/go.mod index 81a2198c3..11620e8e2 100644 --- a/apis/go.mod +++ b/apis/go.mod @@ -13,7 +13,7 @@ require ( github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250913143437-ca03bf1e106a github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327 github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046 - github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250919143843-b81500a16049 + github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257 github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250922082314-c83d83092a04 @@ -68,6 +68,7 @@ require ( github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gophercloud/gophercloud v1.14.1 // indirect + github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -117,3 +118,6 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202507112000 // custom RabbitmqClusterSpecCore for OpenStackControlplane (v2.9.0_patches_tag_n) replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d //allow-merging + +// Test CloudKitty +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 diff --git a/apis/go.sum b/apis/go.sum index 806925342..8123c23ed 100644 --- a/apis/go.sum +++ b/apis/go.sum @@ -60,8 +60,12 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gophercloud/gophercloud v1.14.1 h1:DTCNaTVGl8/cFu58O1JwWgis9gtISAFONqpMKNg/Vpw= github.com/gophercloud/gophercloud v1.14.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba h1:P5Wgp2HfGfNPLCPpS+YqquKdrrl4tW0El7VX23D6vtg= +github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba/go.mod h1:OBAgJh0mLYRvziBzBKr4/anrPHqGY9qEfuNXCpnUNi0= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 h1:9H+DxrR9/zzJtTZ9HeC7Ngxq83fLyZU6Z2sr4J5HOcI= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28/go.mod h1:+SOqfHuYQlyFGykNxqMWZcFjdIB6+2+L3K7w+Uh+vCM= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -105,8 +109,8 @@ github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327/go.mod h1:FTwd2VQgKqSngqCXVW3uZ9wqm50rIFHyVBBJi/6GFl4= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046 h1:RgLAlW1BAxs60piMF+uKRhab6D9u/e0Jb/XvALrwRjY= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046/go.mod h1:j9yGw80eA38kEvHEkx/BONqIhLnKFmpjAtyAB8S817E= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250919143843-b81500a16049 h1:mTh1657W/9SG6l8cLcowFFpGlGFp0P13B0L7mc3y+kw= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250919143843-b81500a16049/go.mod h1:Dv8qpmBIQy3Jv/EyQnOyc0w61X8vyfxpjcIQONP5CwY= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 h1:Ea+FZQOW0Eha1jorgSECFeqI9UrKz8TZlGnSM7X8Yf4= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182/go.mod h1:3Im8PFiRKPaOZpOuqYShJRN2O2pfjUuhDTUpW4KMHZw= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257 h1:vuPPSXGCKKCOPs3AV5wdViPOSsU6wqSHLGF4JJEEIZI= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257/go.mod h1:pnJ/UY5Qvr565W2wKQU8WRyR936VVCkjcieuTXKDHfo= github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d h1:lSRMftk/MbN4qd8ihHh9ucdX4sfR/HUudEcy2h/BNhQ= @@ -137,8 +141,6 @@ github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.2025071 github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d/go.mod h1:6Mq2N/KtNFW20L+PQC5qkeK8R8UGadmGBXL8HDY6lcg= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764 h1:uhGPaufK6M4E8GpE/5hQ3dhvcDLfec1StPvUVcRKbY0= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764/go.mod h1:ygMZ5eETT8vzs85/u/vkPGFxziRPXcp3G2TRBQnuV/E= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250917072532-5152878cf152 h1:uszH4lxCwh2lYWIR+ulX498uPgqnBSMv/cJZHtu0WKc= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250917072532-5152878cf152/go.mod h1:fImjJcK574r/zy3JOH2FBnfLYzk9CHMLAfdZrhXFf20= github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250919081639-e7427981ed8c h1:7MP0Nakns0cAV7zCqjbrHxJQ7mnDU0rYuRWAQbU3RwM= github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250919081639-e7427981ed8c/go.mod h1:d666c/fR+FvqA6f2TgsbxdPSRIM43ooUAO4AvcC+n5E= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/go.mod b/go.mod index 56c79335f..716833571 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250913143437-ca03bf1e106a github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327 github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046 - github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250919143843-b81500a16049 + github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257 github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d github.com/openstack-k8s-operators/lib-common/modules/ansible v0.6.1-0.20250922082314-c83d83092a04 @@ -75,6 +75,7 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect github.com/gophercloud/gophercloud v1.14.1 // indirect + github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -128,3 +129,6 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202507112000 // custom RabbitmqClusterSpecCore for OpenStackControlplane (v2.9.0_patches_tag_n) replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d //allow-merging + +// Test CloudKitty +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 diff --git a/go.sum b/go.sum index e43122c69..f18e034aa 100644 --- a/go.sum +++ b/go.sum @@ -60,10 +60,14 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gophercloud/gophercloud v1.14.1 h1:DTCNaTVGl8/cFu58O1JwWgis9gtISAFONqpMKNg/Vpw= github.com/gophercloud/gophercloud v1.14.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba h1:P5Wgp2HfGfNPLCPpS+YqquKdrrl4tW0El7VX23D6vtg= +github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba/go.mod h1:OBAgJh0mLYRvziBzBKr4/anrPHqGY9qEfuNXCpnUNi0= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 h1:9H+DxrR9/zzJtTZ9HeC7Ngxq83fLyZU6Z2sr4J5HOcI= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28/go.mod h1:+SOqfHuYQlyFGykNxqMWZcFjdIB6+2+L3K7w+Uh+vCM= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -109,8 +113,8 @@ github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327/go.mod h1:FTwd2VQgKqSngqCXVW3uZ9wqm50rIFHyVBBJi/6GFl4= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046 h1:RgLAlW1BAxs60piMF+uKRhab6D9u/e0Jb/XvALrwRjY= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046/go.mod h1:j9yGw80eA38kEvHEkx/BONqIhLnKFmpjAtyAB8S817E= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250919143843-b81500a16049 h1:mTh1657W/9SG6l8cLcowFFpGlGFp0P13B0L7mc3y+kw= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250919143843-b81500a16049/go.mod h1:Dv8qpmBIQy3Jv/EyQnOyc0w61X8vyfxpjcIQONP5CwY= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 h1:Ea+FZQOW0Eha1jorgSECFeqI9UrKz8TZlGnSM7X8Yf4= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182/go.mod h1:3Im8PFiRKPaOZpOuqYShJRN2O2pfjUuhDTUpW4KMHZw= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257 h1:vuPPSXGCKKCOPs3AV5wdViPOSsU6wqSHLGF4JJEEIZI= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257/go.mod h1:pnJ/UY5Qvr565W2wKQU8WRyR936VVCkjcieuTXKDHfo= github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d h1:lSRMftk/MbN4qd8ihHh9ucdX4sfR/HUudEcy2h/BNhQ= @@ -147,8 +151,6 @@ github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.2025071 github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d/go.mod h1:6Mq2N/KtNFW20L+PQC5qkeK8R8UGadmGBXL8HDY6lcg= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764 h1:uhGPaufK6M4E8GpE/5hQ3dhvcDLfec1StPvUVcRKbY0= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764/go.mod h1:ygMZ5eETT8vzs85/u/vkPGFxziRPXcp3G2TRBQnuV/E= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250917072532-5152878cf152 h1:uszH4lxCwh2lYWIR+ulX498uPgqnBSMv/cJZHtu0WKc= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250917072532-5152878cf152/go.mod h1:fImjJcK574r/zy3JOH2FBnfLYzk9CHMLAfdZrhXFf20= github.com/openstack-k8s-operators/test-operator/api v0.6.1-0.20250917084400-574547d2fb8e h1:IbD2qDPxOeelICnA4DHMMKxN95gNkx2PLWnr/1CrZtA= github.com/openstack-k8s-operators/test-operator/api v0.6.1-0.20250917084400-574547d2fb8e/go.mod h1:hxq4jN9hQNJAKewb5oOchF3VrucA4q5msrkx9zln8q8= github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250919081639-e7427981ed8c h1:7MP0Nakns0cAV7zCqjbrHxJQ7mnDU0rYuRWAQbU3RwM= From 05c41e1fb97feb40baeebfb36239d0c2b278b4ce Mon Sep 17 00:00:00 2001 From: jlarriba Date: Tue, 23 Sep 2025 13:33:09 +0200 Subject: [PATCH 03/10] Added cloudkitty to sample deployment --- ...controlplane_galera_network_isolation.yaml | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml b/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml index 87b84b74b..e0799e8e3 100644 --- a/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml +++ b/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml @@ -359,6 +359,53 @@ spec: metallb.universe.tf/loadBalancerIPs: 172.17.0.80 port: 10514 cloNamespace: openshift-logging + cloudkitty: + apiTimeout: 0 + cloudKittyAPI: + containerImage: quay.io/jwysogla/cloudkitty-api:latest + override: + service: + internal: + metadata: + annotations: + metallb.universe.tf/address-pool: internalapi + metallb.universe.tf/allow-shared-ip: internalapi + metallb.universe.tf/loadBalancerIPs: 172.17.0.80 + spec: + type: LoadBalancer + replicas: 1 + resources: {} + tls: + api: + internal: {} + public: {} + caBundleSecretName: combined-ca-bundle + cloudKittyProc: + containerImage: quay.io/jwysogla/cloudkitty-processor:latest + replicas: 1 + resources: {} + tls: + caBundleSecretName: combined-ca-bundle + databaseAccount: cloudkitty + databaseInstance: openstack + enabled: false + memcachedInstance: memcached + passwordSelector: + aodhService: AodhPassword + ceilometerService: CeilometerPassword + cloudKittyService: CloudKittyPassword + preserveJobs: false + rabbitMqClusterName: rabbitmq + s3StorageConfig: + schemas: + - effectiveDate: "2024-11-18" + version: v13 + secret: + name: logging-loki-s3 + type: s3 + secret: osp-secret + serviceUser: cloudkitty + storageClass: local-storage swift: enabled: true proxyOverride: From d08b934585c451f9347fc5f0930884312b929019 Mon Sep 17 00:00:00 2001 From: jlarriba Date: Mon, 29 Sep 2025 12:07:20 +0200 Subject: [PATCH 04/10] Adjust to use CloudKittyCore to avoid exposing images in the ControlPlane --- ....openstack.org_openstackcontrolplanes.yaml | 66 +++++-- apis/go.mod | 3 +- apis/go.sum | 6 +- bindata/crds/crds.yaml | 187 ++++++++++++++++-- bindata/operator/operator.yaml | 34 +--- ....openstack.org_openstackcontrolplanes.yaml | 66 +++++-- config/operator/default_images.yaml | 4 +- ...controlplane_galera_network_isolation.yaml | 20 +- go.mod | 3 +- go.sum | 6 +- hack/export_related_images.sh | 4 +- pkg/openstack/telemetry.go | 9 +- 12 files changed, 309 insertions(+), 99 deletions(-) diff --git a/apis/bases/core.openstack.org_openstackcontrolplanes.yaml b/apis/bases/core.openstack.org_openstackcontrolplanes.yaml index 2ca41bf3c..5f2428a8e 100644 --- a/apis/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/apis/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -14675,18 +14675,18 @@ spec: type: integer cloudKittyAPI: properties: - containerImage: - type: string customServiceConfig: type: string customServiceConfigSecrets: items: type: string type: array + x-kubernetes-list-type: atomic networkAttachments: items: type: string type: array + x-kubernetes-list-type: atomic nodeSelector: additionalProperties: type: string @@ -14755,6 +14755,8 @@ spec: properties: name: type: string + request: + type: string required: - name type: object @@ -14804,23 +14806,21 @@ spec: namespace: type: string type: object - required: - - containerImage type: object cloudKittyProc: properties: - containerImage: - type: string customServiceConfig: type: string customServiceConfigSecrets: items: type: string type: array + x-kubernetes-list-type: atomic networkAttachments: items: type: string type: array + x-kubernetes-list-type: atomic nodeSelector: additionalProperties: type: string @@ -14837,6 +14837,8 @@ spec: properties: name: type: string + request: + type: string required: - name type: object @@ -14875,8 +14877,6 @@ spec: namespace: type: string type: object - required: - - containerImage type: object customServiceConfig: type: string @@ -14884,6 +14884,7 @@ spec: default: cloudkitty type: string databaseInstance: + default: openstack type: string enabled: default: false @@ -14925,6 +14926,7 @@ spec: key: type: string name: + default: "" type: string optional: type: boolean @@ -14935,11 +14937,52 @@ spec: rabbitMqClusterName: default: rabbitmq type: string + s3StorageConfig: + default: + secret: + name: cloudkitty-loki-s3 + type: s3 + properties: + schemas: + default: + - effectiveDate: "2020-10-11" + version: v11 + items: + properties: + effectiveDate: + type: string + version: + type: string + type: object + minItems: 1 + type: array + secret: + properties: + credentialMode: + type: string + name: + type: string + type: + type: string + type: object + tls: + properties: + caKey: + type: string + caName: + type: string + required: + - caName + type: object + type: object secret: + default: osp-secret type: string serviceUser: default: cloudkitty type: string + storageClass: + type: string topologyRef: properties: name: @@ -14947,13 +14990,6 @@ spec: namespace: type: string type: object - required: - - cloudKittyAPI - - cloudKittyProc - - databaseInstance - - memcachedInstance - - rabbitMqClusterName - - secret type: object logging: properties: diff --git a/apis/go.mod b/apis/go.mod index 11620e8e2..4030290a8 100644 --- a/apis/go.mod +++ b/apis/go.mod @@ -68,7 +68,6 @@ require ( github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gophercloud/gophercloud v1.14.1 // indirect - github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -120,4 +119,4 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202507112000 replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d //allow-merging // Test CloudKitty -replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 diff --git a/apis/go.sum b/apis/go.sum index 8123c23ed..3ba2bfa05 100644 --- a/apis/go.sum +++ b/apis/go.sum @@ -60,12 +60,10 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gophercloud/gophercloud v1.14.1 h1:DTCNaTVGl8/cFu58O1JwWgis9gtISAFONqpMKNg/Vpw= github.com/gophercloud/gophercloud v1.14.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= -github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba h1:P5Wgp2HfGfNPLCPpS+YqquKdrrl4tW0El7VX23D6vtg= -github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba/go.mod h1:OBAgJh0mLYRvziBzBKr4/anrPHqGY9qEfuNXCpnUNi0= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 h1:9H+DxrR9/zzJtTZ9HeC7Ngxq83fLyZU6Z2sr4J5HOcI= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28/go.mod h1:+SOqfHuYQlyFGykNxqMWZcFjdIB6+2+L3K7w+Uh+vCM= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 h1:LDZKByr7fpYLZydCGiY3hYUJerC+axk0VvLYKSWEqIg= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872/go.mod h1:v4Stbc6YFVR3r7ofSuErpTJ9Ki2Ka9Fs8S+dgiNqx60= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/bindata/crds/crds.yaml b/bindata/crds/crds.yaml index 6808214e9..a8547b459 100644 --- a/bindata/crds/crds.yaml +++ b/bindata/crds/crds.yaml @@ -14846,13 +14846,25 @@ spec: customServiceConfig: type: string customServiceConfigSecrets: + allOf: + - items: + type: string + - items: + type: string items: type: string type: array + x-kubernetes-list-type: atomic networkAttachments: + allOf: + - items: + type: string + - items: + type: string items: type: string type: array + x-kubernetes-list-type: atomic nodeSelector: additionalProperties: type: string @@ -14888,6 +14900,11 @@ spec: loadBalancerClass: type: string loadBalancerSourceRanges: + allOf: + - items: + type: string + - items: + type: string items: type: string type: array @@ -14910,6 +14927,9 @@ spec: type: object type: object replicas: + allOf: + - minimum: 0 + - minimum: 0 default: 1 format: int32 minimum: 0 @@ -14917,10 +14937,35 @@ spec: resources: properties: claims: + allOf: + - items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + x-kubernetes-list-map-keys: + - name + - items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + x-kubernetes-list-map-keys: + - name items: properties: name: type: string + request: + type: string required: - name type: object @@ -14930,6 +14975,13 @@ spec: x-kubernetes-list-type: map limits: additionalProperties: + allOf: + - anyOf: + - type: integer + - type: string + - anyOf: + - type: integer + - type: string anyOf: - type: integer - type: string @@ -14938,6 +14990,13 @@ spec: type: object requests: additionalProperties: + allOf: + - anyOf: + - type: integer + - type: string + - anyOf: + - type: integer + - type: string anyOf: - type: integer - type: string @@ -14970,8 +15029,6 @@ spec: namespace: type: string type: object - required: - - containerImage type: object cloudKittyProc: properties: @@ -14980,18 +15037,33 @@ spec: customServiceConfig: type: string customServiceConfigSecrets: + allOf: + - items: + type: string + - items: + type: string items: type: string type: array + x-kubernetes-list-type: atomic networkAttachments: + allOf: + - items: + type: string + - items: + type: string items: type: string type: array + x-kubernetes-list-type: atomic nodeSelector: additionalProperties: type: string type: object replicas: + allOf: + - minimum: 0 + - minimum: 0 default: 1 format: int32 minimum: 0 @@ -14999,10 +15071,35 @@ spec: resources: properties: claims: + allOf: + - items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + x-kubernetes-list-map-keys: + - name + - items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + x-kubernetes-list-map-keys: + - name items: properties: name: type: string + request: + type: string required: - name type: object @@ -15012,6 +15109,13 @@ spec: x-kubernetes-list-type: map limits: additionalProperties: + allOf: + - anyOf: + - type: integer + - type: string + - anyOf: + - type: integer + - type: string anyOf: - type: integer - type: string @@ -15020,6 +15124,13 @@ spec: type: object requests: additionalProperties: + allOf: + - anyOf: + - type: integer + - type: string + - anyOf: + - type: integer + - type: string anyOf: - type: integer - type: string @@ -15041,8 +15152,6 @@ spec: namespace: type: string type: object - required: - - containerImage type: object customServiceConfig: type: string @@ -15050,9 +15159,12 @@ spec: default: cloudkitty type: string databaseInstance: + default: openstack type: string enabled: - default: false + allOf: + - default: false + - default: false type: boolean memcachedInstance: default: memcached @@ -15081,9 +15193,12 @@ spec: prometheusHost: type: string prometheusPort: + allOf: + - maximum: 65535 + minimum: 1 + - maximum: 65535 + minimum: 1 format: int32 - maximum: 65535 - minimum: 1 type: integer prometheusTLSCaCertSecret: nullable: true @@ -15091,6 +15206,7 @@ spec: key: type: string name: + default: "" type: string optional: type: boolean @@ -15101,11 +15217,61 @@ spec: rabbitMqClusterName: default: rabbitmq type: string + s3StorageConfig: + default: + secret: + name: cloudkitty-loki-s3 + type: s3 + properties: + schemas: + allOf: + - items: + properties: + effectiveDate: + type: string + version: + type: string + type: object + minItems: 1 + - items: + properties: + effectiveDate: + type: string + version: + type: string + type: object + minItems: 1 + default: + - effectiveDate: "2020-10-11" + version: v11 + type: array + secret: + properties: + credentialMode: + type: string + name: + type: string + type: + type: string + type: object + tls: + properties: + caKey: + type: string + caName: + type: string + required: + - caName + type: object + type: object secret: + default: osp-secret type: string serviceUser: default: cloudkitty type: string + storageClass: + type: string topologyRef: properties: name: @@ -15113,13 +15279,6 @@ spec: namespace: type: string type: object - required: - - cloudKittyAPI - - cloudKittyProc - - databaseInstance - - memcachedInstance - - rabbitMqClusterName - - secret type: object logging: properties: diff --git a/bindata/operator/operator.yaml b/bindata/operator/operator.yaml index 611af995d..41416586f 100644 --- a/bindata/operator/operator.yaml +++ b/bindata/operator/operator.yaml @@ -54,7 +54,7 @@ metadata: name: openstack-operator-controller-manager namespace: '{{ .OperatorNamespace }}' spec: - replicas: {{ .OpenStackOperator.Deployment.Replicas }} + replicas: 1 selector: matchLabels: openstack.org/operator-name: openstack @@ -74,10 +74,7 @@ spec: command: - /manager env: -{{- range .OpenStackOperator.Deployment.Manager.Env }} - - name: '{{ .Name }}' - value: '{{ .Value }}' -{{- end }} + - envCustom: replace_me image: '{{ .OpenStackOperator.Deployment.Manager.Image }}' livenessProbe: httpGet: @@ -98,11 +95,9 @@ spec: periodSeconds: 10 resources: limits: - cpu: {{ .OpenStackOperator.Deployment.Manager.Resources.Limits.CPU }} - memory: {{ .OpenStackOperator.Deployment.Manager.Resources.Limits.Memory }} + customLimits: replace_me requests: - cpu: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.CPU }} - memory: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.Memory }} + customRequests: replace_me securityContext: allowPrivilegeEscalation: false volumeMounts: @@ -114,7 +109,7 @@ spec: - --upstream=http://127.0.0.1:8080/ - --logtostderr=true - --v=0 - image: '{{ .OpenStackOperator.Deployment.KubeRbacProxy.Image }}' + image: kube-rbac-proxy:replace_me name: kube-rbac-proxy ports: - containerPort: 8443 @@ -129,22 +124,7 @@ spec: memory: 64Mi securityContext: allowPrivilegeEscalation: false - tolerations: -{{- range .OpenStackOperator.Deployment.Tolerations }} - - key: "{{ .Key }}" -{{- if .Operator }} - operator: "{{ .Operator }}" -{{- end }} -{{- if .Value }} - value: "{{ .Value }}" -{{- end }} -{{- if .Effect }} - effect: "{{ .Effect }}" -{{- end }} -{{- if .TolerationSeconds }} - tolerationSeconds: {{ .TolerationSeconds }} -{{- end }} -{{- end }} + customTolerations: replace_me securityContext: runAsNonRoot: true serviceAccountName: openstack-operator-controller-manager @@ -459,4 +439,4 @@ webhooks: - UPDATE resources: - openstackdataplaneservices - sideEffects: None \ No newline at end of file + sideEffects: None diff --git a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml index 2ca41bf3c..5f2428a8e 100644 --- a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -14675,18 +14675,18 @@ spec: type: integer cloudKittyAPI: properties: - containerImage: - type: string customServiceConfig: type: string customServiceConfigSecrets: items: type: string type: array + x-kubernetes-list-type: atomic networkAttachments: items: type: string type: array + x-kubernetes-list-type: atomic nodeSelector: additionalProperties: type: string @@ -14755,6 +14755,8 @@ spec: properties: name: type: string + request: + type: string required: - name type: object @@ -14804,23 +14806,21 @@ spec: namespace: type: string type: object - required: - - containerImage type: object cloudKittyProc: properties: - containerImage: - type: string customServiceConfig: type: string customServiceConfigSecrets: items: type: string type: array + x-kubernetes-list-type: atomic networkAttachments: items: type: string type: array + x-kubernetes-list-type: atomic nodeSelector: additionalProperties: type: string @@ -14837,6 +14837,8 @@ spec: properties: name: type: string + request: + type: string required: - name type: object @@ -14875,8 +14877,6 @@ spec: namespace: type: string type: object - required: - - containerImage type: object customServiceConfig: type: string @@ -14884,6 +14884,7 @@ spec: default: cloudkitty type: string databaseInstance: + default: openstack type: string enabled: default: false @@ -14925,6 +14926,7 @@ spec: key: type: string name: + default: "" type: string optional: type: boolean @@ -14935,11 +14937,52 @@ spec: rabbitMqClusterName: default: rabbitmq type: string + s3StorageConfig: + default: + secret: + name: cloudkitty-loki-s3 + type: s3 + properties: + schemas: + default: + - effectiveDate: "2020-10-11" + version: v11 + items: + properties: + effectiveDate: + type: string + version: + type: string + type: object + minItems: 1 + type: array + secret: + properties: + credentialMode: + type: string + name: + type: string + type: + type: string + type: object + tls: + properties: + caKey: + type: string + caName: + type: string + required: + - caName + type: object + type: object secret: + default: osp-secret type: string serviceUser: default: cloudkitty type: string + storageClass: + type: string topologyRef: properties: name: @@ -14947,13 +14990,6 @@ spec: namespace: type: string type: object - required: - - cloudKittyAPI - - cloudKittyProc - - databaseInstance - - memcachedInstance - - rabbitMqClusterName - - secret type: object logging: properties: diff --git a/config/operator/default_images.yaml b/config/operator/default_images.yaml index ff86cdeaf..6b06af231 100644 --- a/config/operator/default_images.yaml +++ b/config/operator/default_images.yaml @@ -54,9 +54,9 @@ spec: - name: RELATED_IMAGE_CINDER_VOLUME_IMAGE_URL_DEFAULT value: quay.io/podified-antelope-centos9/openstack-cinder-volume:current-podified - name: RELATED_IMAGE_CLOUDKITTY_API_IMAGE_URL_DEFAULT - value: quay.io/podified-master-centos9/openstack-cloudkitty-api:current-podified + value: quay.rdoproject.org/podified-master-centos10/openstack-cloudkitty-api:current - name: RELATED_IMAGE_CLOUDKITTY_PROCESSOR_IMAGE_URL_DEFAULT - value: quay.io/podified-master-centos9/openstack-cloudkitty-processor:current-podified + value: quay.rdoproject.org/podified-master-centos10/openstack-cloudkitty-processor:current - name: RELATED_IMAGE_DESIGNATE_API_IMAGE_URL_DEFAULT value: quay.io/podified-antelope-centos9/openstack-designate-api:current-podified - name: RELATED_IMAGE_DESIGNATE_BACKENDBIND9_IMAGE_URL_DEFAULT diff --git a/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml b/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml index e0799e8e3..902936f0a 100644 --- a/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml +++ b/config/samples/core_v1beta1_openstackcontrolplane_galera_network_isolation.yaml @@ -362,17 +362,16 @@ spec: cloudkitty: apiTimeout: 0 cloudKittyAPI: - containerImage: quay.io/jwysogla/cloudkitty-api:latest override: - service: - internal: - metadata: - annotations: - metallb.universe.tf/address-pool: internalapi - metallb.universe.tf/allow-shared-ip: internalapi - metallb.universe.tf/loadBalancerIPs: 172.17.0.80 - spec: - type: LoadBalancer + service: + internal: + metadata: + annotations: + metallb.universe.tf/address-pool: internalapi + metallb.universe.tf/allow-shared-ip: internalapi + metallb.universe.tf/loadBalancerIPs: 172.17.0.80 + spec: + type: LoadBalancer replicas: 1 resources: {} tls: @@ -381,7 +380,6 @@ spec: public: {} caBundleSecretName: combined-ca-bundle cloudKittyProc: - containerImage: quay.io/jwysogla/cloudkitty-processor:latest replicas: 1 resources: {} tls: diff --git a/go.mod b/go.mod index 716833571..f8085f13d 100644 --- a/go.mod +++ b/go.mod @@ -75,7 +75,6 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect github.com/gophercloud/gophercloud v1.14.1 // indirect - github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -131,4 +130,4 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202507112000 replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d //allow-merging // Test CloudKitty -replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 diff --git a/go.sum b/go.sum index f18e034aa..22b50c728 100644 --- a/go.sum +++ b/go.sum @@ -60,14 +60,12 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gophercloud/gophercloud v1.14.1 h1:DTCNaTVGl8/cFu58O1JwWgis9gtISAFONqpMKNg/Vpw= github.com/gophercloud/gophercloud v1.14.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= -github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba h1:P5Wgp2HfGfNPLCPpS+YqquKdrrl4tW0El7VX23D6vtg= -github.com/grafana/loki/operator/api/loki v0.0.0-20250910094332-a082b8a061ba/go.mod h1:OBAgJh0mLYRvziBzBKr4/anrPHqGY9qEfuNXCpnUNi0= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28 h1:9H+DxrR9/zzJtTZ9HeC7Ngxq83fLyZU6Z2sr4J5HOcI= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250923092300-186405486b28/go.mod h1:+SOqfHuYQlyFGykNxqMWZcFjdIB6+2+L3K7w+Uh+vCM= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 h1:LDZKByr7fpYLZydCGiY3hYUJerC+axk0VvLYKSWEqIg= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872/go.mod h1:v4Stbc6YFVR3r7ofSuErpTJ9Ki2Ka9Fs8S+dgiNqx60= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/hack/export_related_images.sh b/hack/export_related_images.sh index 951999fb4..c484c453c 100755 --- a/hack/export_related_images.sh +++ b/hack/export_related_images.sh @@ -36,8 +36,8 @@ export RELATED_IMAGE_CEILOMETER_IPMI_IMAGE_URL_DEFAULT=quay.io/podified-antelope export RELATED_IMAGE_CEILOMETER_SGCORE_IMAGE_URL_DEFAULT=quay.io/openstack-k8s-operators/sg-core:latest export RELATED_IMAGE_CEILOMETER_MYSQLD_EXPORTER_IMAGE_URL_DEFAULT=quay.io/prometheus/mysqld-exporter:v0.15.1 export RELATED_IMAGE_KSM_IMAGE_URL_DEFAULT=registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.15.0 -export RELATED_IMAGE_CLOUDKITTY_API_IMAGE_URL_DEFAULT=quay.io/podified-master-centos9/openstack-cloudkitty-api:current-podified -export RELATED_IMAGE_CLOUDKITTY_PROCESSOR_IMAGE_URL_DEFAULT=quay.io/podified-master-centos9/openstack-expocloudkitty-processor:current-podified +export RELATED_IMAGE_CLOUDKITTY_API_IMAGE_URL_DEFAULT=quay.rdoproject.org/podified-master-centos10/openstack-cloudkitty-api:current +export RELATED_IMAGE_CLOUDKITTY_PROCESSOR_IMAGE_URL_DEFAULT=quay.rdoproject.org/podified-master-centos10/openstack-cloudkitty-processor:current export RELATED_IMAGE_AODH_API_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-aodh-api:current-podified export RELATED_IMAGE_AODH_EVALUATOR_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-aodh-evaluator:current-podified export RELATED_IMAGE_AODH_NOTIFIER_IMAGE_URL_DEFAULT=quay.io/podified-antelope-centos9/openstack-aodh-notifier:current-podified diff --git a/pkg/openstack/telemetry.go b/pkg/openstack/telemetry.go index eb4047548..e0e391108 100644 --- a/pkg/openstack/telemetry.go +++ b/pkg/openstack/telemetry.go @@ -377,6 +377,9 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont instance.Spec.Telemetry.Template.Ceilometer.CeilometerSpecCore.DeepCopyInto(&telemetry.Spec.Ceilometer.CeilometerSpecCore) instance.Spec.Telemetry.Template.Logging.DeepCopyInto(&telemetry.Spec.Logging) instance.Spec.Telemetry.Template.MetricStorage.DeepCopyInto(&telemetry.Spec.MetricStorage) + instance.Spec.Telemetry.Template.CloudKitty.CloudKittySpecBase.DeepCopyInto(&telemetry.Spec.CloudKitty.CloudKittySpecBase) + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.DeepCopyInto(&telemetry.Spec.CloudKitty.CloudKittyAPI.CloudKittyAPITemplateCore) + instance.Spec.Telemetry.Template.CloudKitty.CloudKittyProc.DeepCopyInto(&telemetry.Spec.CloudKitty.CloudKittyProc.CloudKittyProcTemplateCore) telemetry.Spec.Ceilometer.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Ceilometer.Enabled) telemetry.Spec.Autoscaling.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Autoscaling.Enabled) @@ -391,6 +394,8 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont telemetry.Spec.Autoscaling.Aodh.EvaluatorImage = *version.Status.ContainerImages.AodhEvaluatorImage telemetry.Spec.Autoscaling.Aodh.NotifierImage = *version.Status.ContainerImages.AodhNotifierImage telemetry.Spec.Autoscaling.Aodh.ListenerImage = *version.Status.ContainerImages.AodhListenerImage + telemetry.Spec.CloudKitty.CloudKittyAPI.ContainerImage = *version.Status.ContainerImages.CloudKittyAPIImage + telemetry.Spec.CloudKitty.CloudKittyProc.ContainerImage = *version.Status.ContainerImages.CloudKittyProcImage telemetry.Spec.Ceilometer.KSMImage = *getImg(version.Status.ContainerImages.KsmImage, &missingImageDefault) telemetry.Spec.Ceilometer.MysqldExporterImage = *getImg(version.Status.ContainerImages.CeilometerMysqldExporterImage, &missingImageDefault) @@ -484,7 +489,9 @@ func TelemetryImageMatch(ctx context.Context, controlPlane *corev1beta1.OpenStac !stringPointersEqual(controlPlane.Status.ContainerImages.AodhAPIImage, version.Status.ContainerImages.AodhAPIImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.AodhEvaluatorImage, version.Status.ContainerImages.AodhEvaluatorImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.AodhNotifierImage, version.Status.ContainerImages.AodhNotifierImage) || - !stringPointersEqual(controlPlane.Status.ContainerImages.AodhListenerImage, version.Status.ContainerImages.AodhListenerImage) { + !stringPointersEqual(controlPlane.Status.ContainerImages.AodhListenerImage, version.Status.ContainerImages.AodhListenerImage) || + !stringPointersEqual(controlPlane.Status.ContainerImages.CloudKittyAPIImage, version.Status.ContainerImages.CloudKittyAPIImage) || + !stringPointersEqual(controlPlane.Status.ContainerImages.CloudKittyProcImage, version.Status.ContainerImages.CloudKittyProcImage) { Log.Info("Telemetry images do not match") return false } From 4a15fb3a6d59751d0c8cd968f7ec009aa94f589c Mon Sep 17 00:00:00 2001 From: jlarriba Date: Tue, 30 Sep 2025 15:37:35 +0200 Subject: [PATCH 05/10] Update bindata for CloudKittySpecCore usage --- bindata/crds/crds.yaml | 145 +-- .../instanceha.openstack.org_instancehas.yaml | 2 +- .../memcached.openstack.org_memcacheds.yaml | 10 +- ...twork.openstack.org_bgpconfigurations.yaml | 4 +- .../crds/network.openstack.org_dnsdata.yaml | 2 +- .../crds/network.openstack.org_dnsmasqs.yaml | 6 +- .../crds/network.openstack.org_ipsets.yaml | 2 +- .../network.openstack.org_netconfigs.yaml | 2 +- .../network.openstack.org_reservations.yaml | 3 +- .../rabbitmq.openstack.org_rabbitmqs.yaml | 130 +- .../rabbitmq.openstack.org_transporturls.yaml | 2 +- bindata/crds/redis.openstack.org_redises.yaml | 18 +- .../telemetry.openstack.org_autoscalings.yaml | 17 +- .../telemetry.openstack.org_ceilometers.yaml | 8 +- .../telemetry.openstack.org_cloudkitties.yaml | 799 ++++++++++++ ...elemetry.openstack.org_cloudkittyapis.yaml | 506 ++++++++ ...lemetry.openstack.org_cloudkittyprocs.yaml | 331 +++++ .../telemetry.openstack.org_loggings.yaml | 2 +- ...elemetry.openstack.org_metricstorages.yaml | 118 +- .../telemetry.openstack.org_telemetries.yaml | 1130 +++++++++++++---- .../topology.openstack.org_topologies.yaml | 109 +- bindata/operator/operator.yaml | 32 +- bindata/rbac/infra-operator-rbac.yaml | 249 +--- bindata/rbac/telemetry-operator-rbac.yaml | 237 +--- config/operator/manager_operator_images.yaml | 4 +- hack/export_operator_related_images.sh | 4 +- 26 files changed, 2953 insertions(+), 919 deletions(-) create mode 100644 bindata/crds/telemetry.openstack.org_cloudkitties.yaml create mode 100644 bindata/crds/telemetry.openstack.org_cloudkittyapis.yaml create mode 100644 bindata/crds/telemetry.openstack.org_cloudkittyprocs.yaml diff --git a/bindata/crds/crds.yaml b/bindata/crds/crds.yaml index a8547b459..67011ff6c 100644 --- a/bindata/crds/crds.yaml +++ b/bindata/crds/crds.yaml @@ -14841,26 +14841,14 @@ spec: type: integer cloudKittyAPI: properties: - containerImage: - type: string customServiceConfig: type: string customServiceConfigSecrets: - allOf: - - items: - type: string - - items: - type: string items: type: string type: array x-kubernetes-list-type: atomic networkAttachments: - allOf: - - items: - type: string - - items: - type: string items: type: string type: array @@ -14900,11 +14888,6 @@ spec: loadBalancerClass: type: string loadBalancerSourceRanges: - allOf: - - items: - type: string - - items: - type: string items: type: string type: array @@ -14927,9 +14910,6 @@ spec: type: object type: object replicas: - allOf: - - minimum: 0 - - minimum: 0 default: 1 format: int32 minimum: 0 @@ -14937,29 +14917,6 @@ spec: resources: properties: claims: - allOf: - - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - x-kubernetes-list-map-keys: - - name - - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - x-kubernetes-list-map-keys: - - name items: properties: name: @@ -14975,13 +14932,6 @@ spec: x-kubernetes-list-type: map limits: additionalProperties: - allOf: - - anyOf: - - type: integer - - type: string - - anyOf: - - type: integer - - type: string anyOf: - type: integer - type: string @@ -14990,13 +14940,6 @@ spec: type: object requests: additionalProperties: - allOf: - - anyOf: - - type: integer - - type: string - - anyOf: - - type: integer - - type: string anyOf: - type: integer - type: string @@ -15032,26 +14975,14 @@ spec: type: object cloudKittyProc: properties: - containerImage: - type: string customServiceConfig: type: string customServiceConfigSecrets: - allOf: - - items: - type: string - - items: - type: string items: type: string type: array x-kubernetes-list-type: atomic networkAttachments: - allOf: - - items: - type: string - - items: - type: string items: type: string type: array @@ -15061,9 +14992,6 @@ spec: type: string type: object replicas: - allOf: - - minimum: 0 - - minimum: 0 default: 1 format: int32 minimum: 0 @@ -15071,29 +14999,6 @@ spec: resources: properties: claims: - allOf: - - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - x-kubernetes-list-map-keys: - - name - - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - x-kubernetes-list-map-keys: - - name items: properties: name: @@ -15109,13 +15014,6 @@ spec: x-kubernetes-list-type: map limits: additionalProperties: - allOf: - - anyOf: - - type: integer - - type: string - - anyOf: - - type: integer - - type: string anyOf: - type: integer - type: string @@ -15124,13 +15022,6 @@ spec: type: object requests: additionalProperties: - allOf: - - anyOf: - - type: integer - - type: string - - anyOf: - - type: integer - - type: string anyOf: - type: integer - type: string @@ -15162,9 +15053,7 @@ spec: default: openstack type: string enabled: - allOf: - - default: false - - default: false + default: false type: boolean memcachedInstance: default: memcached @@ -15193,12 +15082,9 @@ spec: prometheusHost: type: string prometheusPort: - allOf: - - maximum: 65535 - minimum: 1 - - maximum: 65535 - minimum: 1 format: int32 + maximum: 65535 + minimum: 1 type: integer prometheusTLSCaCertSecret: nullable: true @@ -15224,26 +15110,17 @@ spec: type: s3 properties: schemas: - allOf: - - items: - properties: - effectiveDate: - type: string - version: - type: string - type: object - minItems: 1 - - items: - properties: - effectiveDate: - type: string - version: - type: string - type: object - minItems: 1 default: - effectiveDate: "2020-10-11" version: v11 + items: + properties: + effectiveDate: + type: string + version: + type: string + type: object + minItems: 1 type: array secret: properties: diff --git a/bindata/crds/instanceha.openstack.org_instancehas.yaml b/bindata/crds/instanceha.openstack.org_instancehas.yaml index f7b255860..0d2fd5ccd 100644 --- a/bindata/crds/instanceha.openstack.org_instancehas.yaml +++ b/bindata/crds/instanceha.openstack.org_instancehas.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: instancehas.instanceha.openstack.org spec: diff --git a/bindata/crds/memcached.openstack.org_memcacheds.yaml b/bindata/crds/memcached.openstack.org_memcacheds.yaml index 9c5161bca..bc8f56c25 100644 --- a/bindata/crds/memcached.openstack.org_memcacheds.yaml +++ b/bindata/crds/memcached.openstack.org_memcacheds.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: memcacheds.memcached.openstack.org spec: @@ -83,11 +83,9 @@ spec: 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. @@ -98,6 +96,12 @@ spec: 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 diff --git a/bindata/crds/network.openstack.org_bgpconfigurations.yaml b/bindata/crds/network.openstack.org_bgpconfigurations.yaml index e8676a8a6..e76e5a260 100644 --- a/bindata/crds/network.openstack.org_bgpconfigurations.yaml +++ b/bindata/crds/network.openstack.org_bgpconfigurations.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: bgpconfigurations.network.openstack.org spec: @@ -86,11 +86,13 @@ spec: 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 diff --git a/bindata/crds/network.openstack.org_dnsdata.yaml b/bindata/crds/network.openstack.org_dnsdata.yaml index d08bb9b38..c6757b07d 100644 --- a/bindata/crds/network.openstack.org_dnsdata.yaml +++ b/bindata/crds/network.openstack.org_dnsdata.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: dnsdata.network.openstack.org spec: diff --git a/bindata/crds/network.openstack.org_dnsmasqs.yaml b/bindata/crds/network.openstack.org_dnsmasqs.yaml index 5483784ab..a0e8c2440 100644 --- a/bindata/crds/network.openstack.org_dnsmasqs.yaml +++ b/bindata/crds/network.openstack.org_dnsmasqs.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: dnsmasqs.network.openstack.org spec: @@ -116,7 +116,7 @@ spec: 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 + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ type: object labels: additionalProperties: @@ -125,7 +125,7 @@ spec: 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 + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ type: object type: object spec: diff --git a/bindata/crds/network.openstack.org_ipsets.yaml b/bindata/crds/network.openstack.org_ipsets.yaml index fabe2d87c..a304faa2f 100644 --- a/bindata/crds/network.openstack.org_ipsets.yaml +++ b/bindata/crds/network.openstack.org_ipsets.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: ipsets.network.openstack.org spec: diff --git a/bindata/crds/network.openstack.org_netconfigs.yaml b/bindata/crds/network.openstack.org_netconfigs.yaml index 7fdd6a1a6..154bc5e63 100644 --- a/bindata/crds/network.openstack.org_netconfigs.yaml +++ b/bindata/crds/network.openstack.org_netconfigs.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: netconfigs.network.openstack.org spec: diff --git a/bindata/crds/network.openstack.org_reservations.yaml b/bindata/crds/network.openstack.org_reservations.yaml index 2785c951c..359590a41 100644 --- a/bindata/crds/network.openstack.org_reservations.yaml +++ b/bindata/crds/network.openstack.org_reservations.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: reservations.network.openstack.org spec: @@ -60,7 +60,6 @@ spec: the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. - TODO: this design is not final and this field is subject to change in the future. type: string kind: description: |- diff --git a/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml b/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml index 44aa3544e..48899f015 100644 --- a/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml +++ b/bindata/crds/rabbitmq.openstack.org_rabbitmqs.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: rabbitmqs.rabbitmq.openstack.org spec: @@ -105,11 +105,13 @@ spec: 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. @@ -137,11 +139,13 @@ spec: 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: @@ -154,6 +158,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -198,11 +203,13 @@ spec: 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. @@ -230,14 +237,17 @@ spec: 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 @@ -298,11 +308,13 @@ spec: 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 @@ -317,13 +329,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -332,13 +344,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -378,11 +390,13 @@ spec: 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 @@ -402,6 +416,7 @@ spec: 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 @@ -424,6 +439,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -473,11 +489,13 @@ spec: 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 @@ -492,13 +510,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -507,13 +525,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -552,11 +570,13 @@ spec: 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 @@ -576,6 +596,7 @@ spec: 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 @@ -588,6 +609,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. @@ -645,11 +667,13 @@ spec: 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 @@ -664,13 +688,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -679,13 +703,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -725,11 +749,13 @@ spec: 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 @@ -749,6 +775,7 @@ spec: 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 @@ -771,6 +798,7 @@ spec: - 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 @@ -820,11 +848,13 @@ spec: 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 @@ -839,13 +869,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -854,13 +884,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -899,11 +929,13 @@ spec: 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 @@ -923,6 +955,7 @@ spec: 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 @@ -935,6 +968,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object type: object containerImage: @@ -1046,7 +1080,6 @@ spec: clients must ensure that clusterIPs[0] and clusterIP have the same value. - This field may hold a maximum of two entries (dual-stack IPs, in either order). These IPs must correspond to the values of the ipFamilies field. Both clusterIPs and ipFamilies are governed by the ipFamilyPolicy field. @@ -1065,6 +1098,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic externalName: description: |- externalName is the external reference that discovery mechanisms will @@ -1125,7 +1159,6 @@ spec: NodePort, and LoadBalancer, and does apply to "headless" services. This field will be wiped when updating a Service to type ExternalName. - This field may hold a maximum of two entries (dual-stack families, in either order). These families must correspond to the values of the clusterIPs field, if specified. Both clusterIPs and ipFamilies are @@ -1180,6 +1213,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic ports: description: |- The list of ports that are exposed by this service. @@ -1195,17 +1229,14 @@ spec: This field follows standard Kubernetes label syntax. Valid values are either: - * Un-prefixed protocol names - reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). - * Kubernetes-defined prefixed names: * 'kubernetes.io/h2c' - HTTP/2 prior knowledge over cleartext as described in https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior- * 'kubernetes.io/ws' - WebSocket over cleartext as described in https://www.rfc-editor.org/rfc/rfc6455 * 'kubernetes.io/wss' - WebSocket over TLS as described in https://www.rfc-editor.org/rfc/rfc6455 - * Other protocols should use implementation-defined prefixed names such as mycompany.com/my-custom-protocol. type: string @@ -1311,6 +1342,16 @@ spec: type: integer type: object type: object + trafficDistribution: + description: |- + TrafficDistribution offers a way to express preferences for how traffic is + distributed to Service endpoints. Implementations can use this field as a + hint, but are not required to guarantee strict adherence. If the field is + not set, the implementation will apply its default routing strategy. If set + to "PreferClose", implementations should prioritize endpoints that are + topologically close (e.g., same zone). + This is an alpha field and requires enabling ServiceTrafficDistribution feature. + type: string type: description: |- type determines how the Service is exposed. Defaults to ClusterIP. Valid @@ -1433,11 +1474,9 @@ spec: 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. @@ -1448,6 +1487,12 @@ spec: 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 @@ -1491,10 +1536,13 @@ spec: 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string type: object x-kubernetes-map-type: atomic diff --git a/bindata/crds/rabbitmq.openstack.org_transporturls.yaml b/bindata/crds/rabbitmq.openstack.org_transporturls.yaml index 6314e8701..05a81cd15 100644 --- a/bindata/crds/rabbitmq.openstack.org_transporturls.yaml +++ b/bindata/crds/rabbitmq.openstack.org_transporturls.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: transporturls.rabbitmq.openstack.org spec: diff --git a/bindata/crds/redis.openstack.org_redises.yaml b/bindata/crds/redis.openstack.org_redises.yaml index e4f4c3bf7..b7cf73ced 100644 --- a/bindata/crds/redis.openstack.org_redises.yaml +++ b/bindata/crds/redis.openstack.org_redises.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: redises.redis.openstack.org spec: @@ -71,11 +71,9 @@ spec: 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. @@ -86,6 +84,12 @@ spec: 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 @@ -126,11 +130,9 @@ spec: 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. @@ -141,6 +143,12 @@ spec: 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 diff --git a/bindata/crds/telemetry.openstack.org_autoscalings.yaml b/bindata/crds/telemetry.openstack.org_autoscalings.yaml index dc3d351a4..df2d8ef88 100644 --- a/bindata/crds/telemetry.openstack.org_autoscalings.yaml +++ b/bindata/crds/telemetry.openstack.org_autoscalings.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: autoscalings.telemetry.openstack.org spec: @@ -95,7 +95,6 @@ spec: description: |- ConfigOverwrite - interface to overwrite default config files like e.g. logging.conf or policy.json. But can also be used to add additional files. Those get added to the service config dir in /etc/ . - TODO: -> implement type: object evaluatorImage: type: string @@ -143,7 +142,7 @@ spec: 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 + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ type: object labels: additionalProperties: @@ -152,7 +151,7 @@ spec: 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 + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ type: object type: object spec: @@ -294,6 +293,11 @@ spec: description: CeilometerService - Selector to get the ceilometer service password from the Secret type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string type: object preserveJobs: default: false @@ -395,10 +399,13 @@ spec: valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its key must be defined diff --git a/bindata/crds/telemetry.openstack.org_ceilometers.yaml b/bindata/crds/telemetry.openstack.org_ceilometers.yaml index 439035ca5..26489e9fe 100644 --- a/bindata/crds/telemetry.openstack.org_ceilometers.yaml +++ b/bindata/crds/telemetry.openstack.org_ceilometers.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: ceilometers.telemetry.openstack.org spec: @@ -133,7 +133,6 @@ spec: description: |- ConfigOverwrite - interface to overwrite default config files like e.g. logging.conf or policy.json. But can also be used to add additional files. Those get added to the service config dir in /etc/ . - TODO: -> implement type: object ipmiImage: type: string @@ -210,6 +209,11 @@ spec: description: CeilometerService - Selector to get the ceilometer service password from the Secret type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string type: object proxyImage: type: string diff --git a/bindata/crds/telemetry.openstack.org_cloudkitties.yaml b/bindata/crds/telemetry.openstack.org_cloudkitties.yaml new file mode 100644 index 000000000..9f3dee9b2 --- /dev/null +++ b/bindata/crds/telemetry.openstack.org_cloudkitties.yaml @@ -0,0 +1,799 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + creationTimestamp: null + name: cloudkitties.telemetry.openstack.org +spec: + group: telemetry.openstack.org + names: + kind: CloudKitty + listKind: CloudKittyList + plural: cloudkitties + singular: cloudkitty + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + description: CloudKitty is the Schema for the cloudkitties API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: CloudKittySpec defines the desired state of CloudKitty + properties: + apiTimeout: + default: 60 + description: APITimeout for HAProxy, Apache, and rpc_response_timeout + type: integer + cloudKittyAPI: + description: CloudKittyAPI - Spec definition for the API service of + this CloudKitty deployment + properties: + containerImage: + description: ContainerImage - CloudKitty Container Image URL (will + be set to environmental default if empty) + type: string + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + customServiceConfigSecrets: + description: |- + CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets + that contain sensitive service config data. The content of each Secret gets added to the + /etc//.conf.d directory as a custom config file. + items: + type: string + type: array + x-kubernetes-list-type: atomic + networkAttachments: + description: NetworkAttachments is a list of NetworkAttachment + resource names to expose the services to the given network + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting here overrides + any global NodeSelector settings within the CloudKitty CR. + type: object + override: + description: Override, provides the ability to override the generated + manifest of several child resources. + properties: + service: + additionalProperties: + description: |- + RoutedOverrideSpec - a routed service override configuration for the Service created to serve traffic + to the cluster. Allows for the manifest of the created Service to be overwritten with custom configuration. + properties: + endpointURL: + type: string + 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. + 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: https://kubernetes.io/docs/concepts/overview/working-with-objects/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: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + type: object + type: object + spec: + description: |- + OverrideServiceSpec is a subset of the fields included in https://pkg.go.dev/k8s.io/api@v0.26.6/core/v1#ServiceSpec + Limited to Type, SessionAffinity, LoadBalancerSourceRanges, ExternalName, ExternalTrafficPolicy, SessionAffinityConfig, + IPFamilyPolicy, LoadBalancerClass and InternalTrafficPolicy + properties: + externalName: + description: |- + externalName is the external reference that discovery mechanisms will + return as an alias for this service (e.g. a DNS CNAME record). No + proxying will be involved. Must be a lowercase RFC-1123 hostname + (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName". + type: string + externalTrafficPolicy: + description: |- + externalTrafficPolicy describes how nodes distribute service traffic they + receive on one of the Service's "externally-facing" addresses (NodePorts, + ExternalIPs, and LoadBalancer IPs). If set to "Local", the proxy will configure + the service in a way that assumes that external load balancers will take care + of balancing the service traffic between nodes, and so each node will deliver + traffic only to the node-local endpoints of the service, without masquerading + the client source IP. (Traffic mistakenly sent to a node with no endpoints will + be dropped.) The default value, "Cluster", uses the standard behavior of + routing to all endpoints evenly (possibly modified by topology and other + features). Note that traffic sent to an External IP or LoadBalancer IP from + within the cluster will always get "Cluster" semantics, but clients sending to + a NodePort from within the cluster may need to take traffic policy into account + when picking a node. + type: string + internalTrafficPolicy: + description: |- + InternalTrafficPolicy describes how nodes distribute service traffic they + receive on the ClusterIP. If set to "Local", the proxy will assume that pods + only want to talk to endpoints of the service on the same node as the pod, + dropping the traffic if there are no local endpoints. The default value, + "Cluster", uses the standard behavior of routing to all endpoints evenly + (possibly modified by topology and other features). + type: string + ipFamilyPolicy: + description: |- + IPFamilyPolicy represents the dual-stack-ness requested or required by + this Service. If there is no value provided, then this field will be set + to SingleStack. Services can be "SingleStack" (a single IP family), + "PreferDualStack" (two IP families on dual-stack configured clusters or + a single IP family on single-stack clusters), or "RequireDualStack" + (two IP families on dual-stack configured clusters, otherwise fail). The + ipFamilies and clusterIPs fields depend on the value of this field. This + field will be wiped when updating a service to type ExternalName. + type: string + loadBalancerClass: + description: |- + loadBalancerClass is the class of the load balancer implementation this Service belongs to. + If specified, the value of this field must be a label-style identifier, with an optional prefix, + e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users. + This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load + balancer implementation is used, today this is typically done through the cloud provider integration, + but should apply for any default implementation. If set, it is assumed that a load balancer + implementation is watching for Services with a matching class. Any default load balancer + implementation (e.g. cloud providers) should ignore Services that set this field. + This field can only be set when creating or updating a Service to type 'LoadBalancer'. + Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type. + type: string + loadBalancerSourceRanges: + description: |- + If specified and supported by the platform, this will restrict traffic through the cloud-provider + load-balancer will be restricted to the specified client IPs. This field will be ignored if the + cloud-provider does not support the feature." + More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ + items: + type: string + type: array + x-kubernetes-list-type: atomic + sessionAffinity: + description: |- + Supports "ClientIP" and "None". Used to maintain session affinity. + Enable client IP based session affinity. + Must be ClientIP or None. + Defaults to None. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + type: string + sessionAffinityConfig: + description: sessionAffinityConfig contains the + configurations of session affinity. + properties: + clientIP: + description: clientIP contains the configurations + of Client IP based session affinity. + properties: + timeoutSeconds: + description: |- + timeoutSeconds specifies the seconds of ClientIP type session sticky time. + The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". + Default value is 10800(for 3 hours). + format: int32 + type: integer + type: object + type: object + type: + description: |- + type determines how the Service is exposed. Defaults to ClusterIP. Valid + options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + "ClusterIP" allocates a cluster-internal IP address for load-balancing + to endpoints. Endpoints are determined by the selector or if that is not + specified, by manual construction of an Endpoints object or + EndpointSlice objects. If clusterIP is "None", no virtual IP is + allocated and the endpoints are published as a set of endpoints rather + than a virtual IP. + "NodePort" builds on ClusterIP and allocates a port on every node which + routes to the same endpoints as the clusterIP. + "LoadBalancer" builds on NodePort and creates an external load-balancer + (if supported in the current cloud) which routes to the same endpoints + as the clusterIP. + "ExternalName" aliases this service to the specified externalName. + Several other fields do not apply to ExternalName services. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types + type: string + type: object + type: object + description: |- + Override configuration for the Service created to serve traffic to the cluster. + The key must be the endpoint type (public, internal) + type: object + type: object + replicas: + default: 1 + description: Replicas - CloudKitty API Replicas + format: int32 + minimum: 0 + type: integer + resources: + description: |- + Resources - Compute Resources required by this service (Limits/Requests). + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + 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 + tls: + description: TLS - Parameters related to the TLS + properties: + api: + description: API tls type which encapsulates for API services + properties: + internal: + description: Internal GenericService - holds the secret + for the internal endpoint + properties: + secretName: + description: SecretName - holding the cert, key for + the service + type: string + type: object + public: + description: Public GenericService - holds the secret + for the public endpoint + properties: + secretName: + description: SecretName - holding the cert, key for + the service + type: string + type: object + type: object + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs in + a pre-created bundle file + type: string + type: object + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + type: object + cloudKittyProc: + description: CloudKittyProc - Spec definition for the Scheduler service + of this CloudKitty deployment + properties: + containerImage: + description: ContainerImage - CloudKitty Container Image URL (will + be set to environmental default if empty) + type: string + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + customServiceConfigSecrets: + description: |- + CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets + that contain sensitive service config data. The content of each Secret gets added to the + /etc//.conf.d directory as a custom config file. + items: + type: string + type: array + x-kubernetes-list-type: atomic + networkAttachments: + description: NetworkAttachments is a list of NetworkAttachment + resource names to expose the services to the given network + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting here overrides + any global NodeSelector settings within the CloudKitty CR. + type: object + replicas: + default: 1 + description: Replicas - CloudKitty API Replicas + format: int32 + minimum: 0 + type: integer + resources: + description: |- + Resources - Compute Resources required by this service (Limits/Requests). + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + 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 + tls: + description: TLS - Parameters related to the TLS + properties: + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs in + a pre-created bundle file + type: string + secretName: + description: SecretName - holding the cert, key for the service + type: string + type: object + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + type: object + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config for all CloudKitty services using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + databaseAccount: + default: cloudkitty + description: DatabaseAccount - optional MariaDBAccount used for cloudkitty + DB, defaults to cloudkitty + type: string + databaseInstance: + default: openstack + description: |- + MariaDB instance name + Right now required by the maridb-operator to get the credentials from the instance to create the DB + Might not be required in future + type: string + memcachedInstance: + default: memcached + description: Memcached instance name. + type: string + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting + NodeSelector here acts as a default value and can be overridden by service + specific NodeSelector Settings. + type: object + passwordSelector: + default: + cloudKittyService: CloudKittyPassword + description: PasswordsSelectors - Selectors to identify the ServiceUser + password from the Secret + properties: + aodhService: + default: AodhPassword + description: AodhService - Selector to get the aodh service password + from the Secret + type: string + ceilometerService: + default: CeilometerPassword + description: CeilometerService - Selector to get the ceilometer + service password from the Secret + type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string + type: object + preserveJobs: + default: false + description: PreserveJobs - do not delete jobs after they finished + e.g. to check logs + type: boolean + prometheusHost: + description: Host of user deployed prometheus + type: string + prometheusPort: + description: Port of user deployed prometheus + format: int32 + maximum: 65535 + minimum: 1 + type: integer + prometheusTLSCaCertSecret: + description: If defined, specifies which CA certificate to use for + user deployed prometheus + nullable: true + properties: + key: + description: The key of the secret to select from. Must be a + valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + rabbitMqClusterName: + default: rabbitmq + description: |- + RabbitMQ instance name + Needed to request a transportURL that is created and used in CloudKitty + type: string + s3StorageConfig: + default: + secret: + name: cloudkitty-loki-s3 + type: s3 + description: S3 related configuration passed to Loki + properties: + schemas: + default: + - effectiveDate: "2020-10-11" + version: v11 + description: Schemas for reading and writing logs. + items: + properties: + effectiveDate: + description: |- + EffectiveDate contains a date in YYYY-MM-DD format which is interpreted in the UTC time zone. + + The configuration always needs at least one schema that is currently valid. This means that when creating a new + CloudKitty it is recommended to add a schema with the latest available version and an effective date of "yesterday". + New schema versions added to the configuration always needs to be placed "in the future", so that Loki can start + using it once the day rolls over. + type: string + version: + description: Version for writing and reading logs. + type: string + type: object + minItems: 1 + type: array + secret: + description: |- + Secret for object storage authentication. + Name of a secret in the same namespace as the CloudKitty custom resource. + properties: + credentialMode: + description: |- + CredentialMode can be used to set the desired credential mode for authenticating with the object storage. + If this is not set, then the operator tries to infer the credential mode from the provided secret and its + own configuration. + type: string + name: + description: Name of a secret in the namespace configured + for object storage secrets. + type: string + type: + description: Type of object storage that should be used + type: string + type: object + tls: + description: TLS configuration for reaching the object storage + endpoint. + properties: + caKey: + description: |- + Key is the data key of a ConfigMap containing a CA certificate. + It needs to be in the same namespace as the CloudKitty custom resource. + If empty, it defaults to "service-ca.crt". + type: string + caName: + description: |- + CA is the name of a ConfigMap containing a CA certificate. + It needs to be in the same namespace as the CloudKitty custom resource. + type: string + required: + - caName + type: object + type: object + secret: + default: osp-secret + description: Secret containing OpenStack password information + type: string + serviceUser: + default: cloudkitty + description: ServiceUser - optional username used for this service + to register in cloudkitty + type: string + storageClass: + description: Storage class used for Loki + type: string + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + type: object + status: + description: CloudKittyStatus defines the observed state of CloudKitty + properties: + apiEndpoints: + additionalProperties: + additionalProperties: + type: string + type: object + description: API endpoints + type: object + cloudKittyAPIReadyCount: + default: 0 + description: ReadyCount of CloudKitty API instance + format: int32 + minimum: 0 + type: integer + cloudKittyProcReadyCounts: + default: 0 + description: ReadyCount of CloudKitty Processor instances + format: int32 + minimum: 0 + type: integer + conditions: + description: Conditions + items: + description: Condition defines an observation of a API resource + operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition + in CamelCase. + type: string + severity: + description: |- + Severity provides a classification of Reason code, so the current situation is immediately + understandable and could act accordingly. + It is meant for situations where Status=False and it should be indicated if it is just + informational, warning (next reconciliation might fix it) or an error (e.g. DB create issue + and no actions to automatically resolve the issue can/should be done). + For conditions where Status=Unknown or Status=True the Severity should be SeverityNone. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition in CamelCase. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + databaseHostname: + description: CloudKitty Database Hostname + type: string + hash: + additionalProperties: + type: string + description: Map of hashes to track e.g. job status + type: object + observedGeneration: + description: |- + ObservedGeneration - the most recent generation observed for this service. + If the observed generation is different than the spec generation, then the + controller has not started processing the latest changes, and the status + and its conditions are likely stale. + format: int64 + type: integer + prometheusHostname: + description: PrometheusHost - Hostname for prometheus used for autoscaling + type: string + prometheusPort: + description: PrometheusPort - Port for prometheus used for autoscaling + format: int32 + type: integer + prometheusTLS: + description: PrometheusTLS - Determines if TLS should be used for + accessing prometheus + type: boolean + serviceIDs: + additionalProperties: + type: string + description: ServiceIDs + type: object + transportURLSecret: + description: TransportURLSecret - Secret containing RabbitMQ transportURL + type: string + required: + - cloudKittyAPIReadyCount + - cloudKittyProcReadyCounts + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bindata/crds/telemetry.openstack.org_cloudkittyapis.yaml b/bindata/crds/telemetry.openstack.org_cloudkittyapis.yaml new file mode 100644 index 000000000..5baaefa33 --- /dev/null +++ b/bindata/crds/telemetry.openstack.org_cloudkittyapis.yaml @@ -0,0 +1,506 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + creationTimestamp: null + name: cloudkittyapis.telemetry.openstack.org +spec: + group: telemetry.openstack.org + names: + kind: CloudKittyAPI + listKind: CloudKittyAPIList + plural: cloudkittyapis + singular: cloudkittyapi + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + description: CloudKittyAPI is the Schema for the cloudkittyapis API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: CloudKittyAPISpec defines the desired state of CloudKittyAPI + properties: + containerImage: + description: ContainerImage - CloudKitty Container Image URL (will + be set to environmental default if empty) + type: string + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + customServiceConfigSecrets: + description: |- + CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets + that contain sensitive service config data. The content of each Secret gets added to the + /etc//.conf.d directory as a custom config file. + items: + type: string + type: array + x-kubernetes-list-type: atomic + databaseAccount: + default: cloudkitty + description: DatabaseAccount - optional MariaDBAccount used for cloudkitty + DB, defaults to cloudkitty + type: string + databaseHostname: + description: DatabaseHostname - CloudKitty Database Hostname + type: string + networkAttachments: + description: NetworkAttachments is a list of NetworkAttachment resource + names to expose the services to the given network + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting here overrides + any global NodeSelector settings within the CloudKitty CR. + type: object + override: + description: Override, provides the ability to override the generated + manifest of several child resources. + properties: + service: + additionalProperties: + description: |- + RoutedOverrideSpec - a routed service override configuration for the Service created to serve traffic + to the cluster. Allows for the manifest of the created Service to be overwritten with custom configuration. + properties: + endpointURL: + type: string + 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. + 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: https://kubernetes.io/docs/concepts/overview/working-with-objects/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: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + type: object + type: object + spec: + description: |- + OverrideServiceSpec is a subset of the fields included in https://pkg.go.dev/k8s.io/api@v0.26.6/core/v1#ServiceSpec + Limited to Type, SessionAffinity, LoadBalancerSourceRanges, ExternalName, ExternalTrafficPolicy, SessionAffinityConfig, + IPFamilyPolicy, LoadBalancerClass and InternalTrafficPolicy + properties: + externalName: + description: |- + externalName is the external reference that discovery mechanisms will + return as an alias for this service (e.g. a DNS CNAME record). No + proxying will be involved. Must be a lowercase RFC-1123 hostname + (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName". + type: string + externalTrafficPolicy: + description: |- + externalTrafficPolicy describes how nodes distribute service traffic they + receive on one of the Service's "externally-facing" addresses (NodePorts, + ExternalIPs, and LoadBalancer IPs). If set to "Local", the proxy will configure + the service in a way that assumes that external load balancers will take care + of balancing the service traffic between nodes, and so each node will deliver + traffic only to the node-local endpoints of the service, without masquerading + the client source IP. (Traffic mistakenly sent to a node with no endpoints will + be dropped.) The default value, "Cluster", uses the standard behavior of + routing to all endpoints evenly (possibly modified by topology and other + features). Note that traffic sent to an External IP or LoadBalancer IP from + within the cluster will always get "Cluster" semantics, but clients sending to + a NodePort from within the cluster may need to take traffic policy into account + when picking a node. + type: string + internalTrafficPolicy: + description: |- + InternalTrafficPolicy describes how nodes distribute service traffic they + receive on the ClusterIP. If set to "Local", the proxy will assume that pods + only want to talk to endpoints of the service on the same node as the pod, + dropping the traffic if there are no local endpoints. The default value, + "Cluster", uses the standard behavior of routing to all endpoints evenly + (possibly modified by topology and other features). + type: string + ipFamilyPolicy: + description: |- + IPFamilyPolicy represents the dual-stack-ness requested or required by + this Service. If there is no value provided, then this field will be set + to SingleStack. Services can be "SingleStack" (a single IP family), + "PreferDualStack" (two IP families on dual-stack configured clusters or + a single IP family on single-stack clusters), or "RequireDualStack" + (two IP families on dual-stack configured clusters, otherwise fail). The + ipFamilies and clusterIPs fields depend on the value of this field. This + field will be wiped when updating a service to type ExternalName. + type: string + loadBalancerClass: + description: |- + loadBalancerClass is the class of the load balancer implementation this Service belongs to. + If specified, the value of this field must be a label-style identifier, with an optional prefix, + e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users. + This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load + balancer implementation is used, today this is typically done through the cloud provider integration, + but should apply for any default implementation. If set, it is assumed that a load balancer + implementation is watching for Services with a matching class. Any default load balancer + implementation (e.g. cloud providers) should ignore Services that set this field. + This field can only be set when creating or updating a Service to type 'LoadBalancer'. + Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type. + type: string + loadBalancerSourceRanges: + description: |- + If specified and supported by the platform, this will restrict traffic through the cloud-provider + load-balancer will be restricted to the specified client IPs. This field will be ignored if the + cloud-provider does not support the feature." + More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ + items: + type: string + type: array + x-kubernetes-list-type: atomic + sessionAffinity: + description: |- + Supports "ClientIP" and "None". Used to maintain session affinity. + Enable client IP based session affinity. + Must be ClientIP or None. + Defaults to None. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + type: string + sessionAffinityConfig: + description: sessionAffinityConfig contains the configurations + of session affinity. + properties: + clientIP: + description: clientIP contains the configurations + of Client IP based session affinity. + properties: + timeoutSeconds: + description: |- + timeoutSeconds specifies the seconds of ClientIP type session sticky time. + The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". + Default value is 10800(for 3 hours). + format: int32 + type: integer + type: object + type: object + type: + description: |- + type determines how the Service is exposed. Defaults to ClusterIP. Valid + options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + "ClusterIP" allocates a cluster-internal IP address for load-balancing + to endpoints. Endpoints are determined by the selector or if that is not + specified, by manual construction of an Endpoints object or + EndpointSlice objects. If clusterIP is "None", no virtual IP is + allocated and the endpoints are published as a set of endpoints rather + than a virtual IP. + "NodePort" builds on ClusterIP and allocates a port on every node which + routes to the same endpoints as the clusterIP. + "LoadBalancer" builds on NodePort and creates an external load-balancer + (if supported in the current cloud) which routes to the same endpoints + as the clusterIP. + "ExternalName" aliases this service to the specified externalName. + Several other fields do not apply to ExternalName services. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types + type: string + type: object + type: object + description: |- + Override configuration for the Service created to serve traffic to the cluster. + The key must be the endpoint type (public, internal) + type: object + type: object + passwordSelector: + default: + cloudKittyService: CloudKittyPassword + description: PasswordsSelectors - Selectors to identify the ServiceUser + password from the Secret + properties: + aodhService: + default: AodhPassword + description: AodhService - Selector to get the aodh service password + from the Secret + type: string + ceilometerService: + default: CeilometerPassword + description: CeilometerService - Selector to get the ceilometer + service password from the Secret + type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string + type: object + replicas: + default: 1 + description: Replicas - CloudKitty API Replicas + format: int32 + minimum: 0 + type: integer + resources: + description: |- + Resources - Compute Resources required by this service (Limits/Requests). + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + 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 + secret: + default: osp-secret + description: Secret containing OpenStack password information + type: string + serviceAccount: + description: ServiceAccount - service account name used internally + to provide CloudKitty services the default SA name + type: string + serviceUser: + default: cloudkitty + description: ServiceUser - optional username used for this service + to register in cloudkitty + type: string + tls: + description: TLS - Parameters related to the TLS + properties: + api: + description: API tls type which encapsulates for API services + properties: + internal: + description: Internal GenericService - holds the secret for + the internal endpoint + properties: + secretName: + description: SecretName - holding the cert, key for the + service + type: string + type: object + public: + description: Public GenericService - holds the secret for + the public endpoint + properties: + secretName: + description: SecretName - holding the cert, key for the + service + type: string + type: object + type: object + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs in a pre-created + bundle file + type: string + type: object + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + transportURLSecret: + description: Secret containing RabbitMq transport URL + type: string + type: object + status: + description: CloudKittyAPIStatus defines the observed state of CloudKittyAPI + properties: + apiEndpoints: + additionalProperties: + additionalProperties: + type: string + type: object + description: API endpoints + type: object + conditions: + description: Conditions + items: + description: Condition defines an observation of a API resource + operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition + in CamelCase. + type: string + severity: + description: |- + Severity provides a classification of Reason code, so the current situation is immediately + understandable and could act accordingly. + It is meant for situations where Status=False and it should be indicated if it is just + informational, warning (next reconciliation might fix it) or an error (e.g. DB create issue + and no actions to automatically resolve the issue can/should be done). + For conditions where Status=Unknown or Status=True the Severity should be SeverityNone. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition in CamelCase. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + hash: + additionalProperties: + type: string + description: Map of hashes to track e.g. job status + type: object + lastAppliedTopology: + description: LastAppliedTopology - the last applied Topology + properties: + name: + description: Name - The Topology CR name that the Service references + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + networkAttachments: + additionalProperties: + items: + type: string + type: array + description: NetworkAttachments status of the deployment pods + type: object + observedGeneration: + description: |- + ObservedGeneration - the most recent generation observed for this service. + If the observed generation is different than the spec generation, then the + controller has not started processing the latest changes, and the status + and its conditions are likely stale. + format: int64 + type: integer + readyCount: + default: 0 + description: ReadyCount of CloudKitty API instances + format: int32 + minimum: 0 + type: integer + serviceIDs: + additionalProperties: + type: string + description: ServiceIDs + type: object + required: + - readyCount + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bindata/crds/telemetry.openstack.org_cloudkittyprocs.yaml b/bindata/crds/telemetry.openstack.org_cloudkittyprocs.yaml new file mode 100644 index 000000000..595936501 --- /dev/null +++ b/bindata/crds/telemetry.openstack.org_cloudkittyprocs.yaml @@ -0,0 +1,331 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.18.0 + creationTimestamp: null + name: cloudkittyprocs.telemetry.openstack.org +spec: + group: telemetry.openstack.org + names: + kind: CloudKittyProc + listKind: CloudKittyProcList + plural: cloudkittyprocs + singular: cloudkittyproc + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: NetworkAttachments + jsonPath: .status.networkAttachments + name: NetworkAttachments + type: string + - description: Status + jsonPath: .status.conditions[0].status + name: Status + type: string + - description: Message + jsonPath: .status.conditions[0].message + name: Message + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: CloudKittyProc is the Schema for the cloudkittprocs API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: CloudKittyProcSpec defines the desired state of CloudKitty + Processor + properties: + containerImage: + description: ContainerImage - CloudKitty Container Image URL (will + be set to environmental default if empty) + type: string + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + customServiceConfigSecrets: + description: |- + CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets + that contain sensitive service config data. The content of each Secret gets added to the + /etc//.conf.d directory as a custom config file. + items: + type: string + type: array + x-kubernetes-list-type: atomic + databaseAccount: + default: cloudkitty + description: DatabaseAccount - optional MariaDBAccount used for cloudkitty + DB, defaults to cloudkitty + type: string + databaseHostname: + description: DatabaseHostname - CloudKitty Database Hostname + type: string + networkAttachments: + description: NetworkAttachments is a list of NetworkAttachment resource + names to expose the services to the given network + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting here overrides + any global NodeSelector settings within the CloudKitty CR. + type: object + passwordSelector: + default: + cloudKittyService: CloudKittyPassword + description: PasswordsSelectors - Selectors to identify the ServiceUser + password from the Secret + properties: + aodhService: + default: AodhPassword + description: AodhService - Selector to get the aodh service password + from the Secret + type: string + ceilometerService: + default: CeilometerPassword + description: CeilometerService - Selector to get the ceilometer + service password from the Secret + type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string + type: object + replicas: + default: 1 + description: Replicas - CloudKitty API Replicas + format: int32 + minimum: 0 + type: integer + resources: + description: |- + Resources - Compute Resources required by this service (Limits/Requests). + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + 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 + secret: + default: osp-secret + description: Secret containing OpenStack password information + type: string + serviceAccount: + description: ServiceAccount - service account name used internally + to provide CloudKitty services the default SA name + type: string + serviceUser: + default: cloudkitty + description: ServiceUser - optional username used for this service + to register in cloudkitty + type: string + tls: + description: TLS - Parameters related to the TLS + properties: + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs in a pre-created + bundle file + type: string + secretName: + description: SecretName - holding the cert, key for the service + type: string + type: object + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + transportURLSecret: + description: Secret containing RabbitMq transport URL + type: string + type: object + status: + description: CloudKittyProcStatus defines the observed state of CloudKitty + Processor + properties: + conditions: + description: Conditions + items: + description: Condition defines an observation of a API resource + operational state. + properties: + lastTransitionTime: + description: |- + Last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when + the API field changed is acceptable. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition + in CamelCase. + type: string + severity: + description: |- + Severity provides a classification of Reason code, so the current situation is immediately + understandable and could act accordingly. + It is meant for situations where Status=False and it should be indicated if it is just + informational, warning (next reconciliation might fix it) or an error (e.g. DB create issue + and no actions to automatically resolve the issue can/should be done). + For conditions where Status=Unknown or Status=True the Severity should be SeverityNone. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of condition in CamelCase. + type: string + required: + - lastTransitionTime + - status + - type + type: object + type: array + hash: + additionalProperties: + type: string + description: Map of hashes to track e.g. job status + type: object + lastAppliedTopology: + description: LastAppliedTopology - the last applied Topology + properties: + name: + description: Name - The Topology CR name that the Service references + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + networkAttachments: + additionalProperties: + items: + type: string + type: array + description: NetworkAttachments status of the deployment pods + type: object + observedGeneration: + description: |- + ObservedGeneration - the most recent generation observed for this service. + If the observed generation is different than the spec generation, then the + controller has not started processing the latest changes, and the status + and its conditions are likely stale. + format: int64 + type: integer + readyCount: + default: 0 + description: ReadyCount of CloudKitty Processor instances + format: int32 + minimum: 0 + type: integer + required: + - readyCount + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/bindata/crds/telemetry.openstack.org_loggings.yaml b/bindata/crds/telemetry.openstack.org_loggings.yaml index 36069e134..9d8fd1f2f 100644 --- a/bindata/crds/telemetry.openstack.org_loggings.yaml +++ b/bindata/crds/telemetry.openstack.org_loggings.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: loggings.telemetry.openstack.org spec: diff --git a/bindata/crds/telemetry.openstack.org_metricstorages.yaml b/bindata/crds/telemetry.openstack.org_metricstorages.yaml index 6a4287ae6..06788cd84 100644 --- a/bindata/crds/telemetry.openstack.org_metricstorages.yaml +++ b/bindata/crds/telemetry.openstack.org_metricstorages.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: metricstorages.telemetry.openstack.org spec: @@ -110,11 +110,13 @@ spec: 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 @@ -156,6 +158,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic dataSource: description: |- dataSource field can be used to specify either: @@ -295,11 +298,13 @@ spec: 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 @@ -327,8 +332,8 @@ spec: If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass - (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled. + More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ + (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). type: string volumeMode: description: |- @@ -351,10 +356,8 @@ spec: description: |- Authorization section for the URL. - It requires Prometheus >= v2.26.0. - Cannot be set at the same time as `sigv4`, `basicAuth`, `oauth2`, or `azureAd`. properties: credentials: @@ -366,10 +369,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its @@ -387,10 +393,8 @@ spec: description: |- Defines the authentication type. The value is case-insensitive. - "Basic" is not a supported value. - Default: "Bearer" type: string type: object @@ -398,10 +402,8 @@ spec: description: |- AzureAD for the URL. - It requires Prometheus >= v2.45.0. - Cannot be set at the same time as `authorization`, `basicAuth`, `oauth2`, or `sigv4`. properties: cloud: @@ -428,7 +430,6 @@ spec: OAuth defines the oauth config that is being used to authenticate. Cannot be set at the same time as `managedIdentity`. - It requires Prometheus >= v2.48.0. properties: clientId: @@ -448,10 +449,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -478,7 +482,6 @@ spec: description: |- BasicAuth configuration for the URL. - Cannot be set at the same time as `sigv4`, `authorization`, `oauth2`, or `azureAd`. properties: password: @@ -491,10 +494,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its @@ -514,10 +520,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its @@ -533,14 +542,12 @@ spec: *Warning: this field shouldn't be used because the token value appears in clear-text. Prefer using `authorization`.* - Deprecated: this will be removed in a future release. type: string bearerTokenFile: description: |- File from which to read bearer token for the URL. - Deprecated: this will be removed in a future release. Prefer using `authorization`. type: string enableHTTP2: @@ -553,7 +560,6 @@ spec: Custom HTTP headers to be sent along with each remote write request. Be aware that headers that are set by Prometheus itself can't be overwritten. - It requires Prometheus >= v2.25.0. type: object metadataConfig: @@ -575,17 +581,14 @@ spec: The name of the remote write queue, it must be unique if specified. The name is used in metrics and logging in order to differentiate queues. - It requires Prometheus >= v2.15.0. type: string oauth2: description: |- OAuth2 configuration for the URL. - It requires Prometheus >= v2.27.0. - Cannot be set at the same time as `sigv4`, `authorization`, `basicAuth`, or `azureAd`. properties: clientId: @@ -601,10 +604,13 @@ spec: description: The key to select. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the ConfigMap @@ -623,10 +629,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -647,10 +656,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its @@ -739,7 +751,6 @@ spec: exemplar-storage itself must be enabled using the `spec.enableFeature` option for exemplars to be scraped in the first place. - It requires Prometheus >= v2.27.0. type: boolean sendNativeHistograms: @@ -747,17 +758,14 @@ spec: Enables sending of native histograms, also known as sparse histograms over remote write. - It requires Prometheus >= v2.40.0. type: boolean sigv4: description: |- Sigv4 allows to configures AWS's Signature Verification 4 for the URL. - It requires Prometheus >= v2.26.0. - Cannot be set at the same time as `authorization`, `basicAuth`, `oauth2`, or `azureAd`. properties: accessKey: @@ -770,10 +778,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its @@ -806,10 +817,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its @@ -835,10 +849,13 @@ spec: description: The key to select. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the ConfigMap @@ -857,10 +874,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -887,10 +907,13 @@ spec: description: The key to select. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the ConfigMap @@ -909,10 +932,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -943,10 +969,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its @@ -972,7 +1001,6 @@ spec: RelabelConfig allows dynamic rewriting of the label set for targets, alerts, scraped samples and remote write samples. - More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config properties: action: @@ -980,11 +1008,9 @@ spec: description: |- Action to perform based on the regex matching. - `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0. `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0. - Default: "Replace" enum: - replace @@ -1014,7 +1040,6 @@ spec: description: |- Modulus to take of the hash of the source label values. - Only applicable when the action is `HashMod`. format: int64 type: integer @@ -1027,7 +1052,6 @@ spec: Replacement value against which a Replace action is performed if the regular expression matches. - Regex capture groups are available. type: string separator: @@ -1050,11 +1074,9 @@ spec: description: |- Label to which the resulting string is written in a replacement. - It is mandatory for `Replace`, `HashMod`, `Lowercase`, `Uppercase`, `KeepEqual` and `DropEqual` actions. - Regex capture groups are available. type: string type: object @@ -1108,11 +1130,13 @@ spec: 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 @@ -1139,11 +1163,9 @@ spec: 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. @@ -1154,6 +1176,12 @@ spec: 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 @@ -1272,11 +1300,13 @@ spec: 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 diff --git a/bindata/crds/telemetry.openstack.org_telemetries.yaml b/bindata/crds/telemetry.openstack.org_telemetries.yaml index 30ffd767d..8a9478e46 100644 --- a/bindata/crds/telemetry.openstack.org_telemetries.yaml +++ b/bindata/crds/telemetry.openstack.org_telemetries.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: telemetries.telemetry.openstack.org spec: @@ -98,7 +98,6 @@ spec: description: |- ConfigOverwrite - interface to overwrite default config files like e.g. logging.conf or policy.json. But can also be used to add additional files. Those get added to the service config dir in /etc/ . - TODO: -> implement type: object evaluatorImage: type: string @@ -146,7 +145,7 @@ spec: 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 + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ type: object labels: additionalProperties: @@ -155,7 +154,7 @@ spec: 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 + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ type: object type: object spec: @@ -297,6 +296,11 @@ spec: description: CeilometerService - Selector to get the ceilometer service password from the Secret type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string type: object preserveJobs: default: false @@ -322,32 +326,709 @@ spec: tls: description: TLS - Parameters related to the TLS properties: - api: - description: API tls type which encapsulates for API services - properties: - internal: - description: Internal GenericService - holds the secret - for the internal endpoint - properties: - secretName: - description: SecretName - holding the cert, key - for the service - type: string - type: object - public: - description: Public GenericService - holds the secret - for the public endpoint - properties: - secretName: - description: SecretName - holding the cert, key - for the service - type: string - type: object - type: object + api: + description: API tls type which encapsulates for API services + properties: + internal: + description: Internal GenericService - holds the secret + for the internal endpoint + properties: + secretName: + description: SecretName - holding the cert, key + for the service + type: string + type: object + public: + description: Public GenericService - holds the secret + for the public endpoint + properties: + secretName: + description: SecretName - holding the cert, key + for the service + type: string + type: object + type: object + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs + in a pre-created bundle file + type: string + type: object + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + required: + - apiImage + - databaseInstance + - evaluatorImage + - listenerImage + - notifierImage + - secret + type: object + enabled: + default: false + description: Enabled - Whether OpenStack autoscaling service should + be deployed and managed + type: boolean + heatInstance: + default: heat + description: Heat instance name. + type: string + prometheusHost: + description: Host of user deployed prometheus + type: string + prometheusPort: + description: Port of user deployed prometheus + format: int32 + maximum: 65535 + minimum: 1 + type: integer + prometheusTLSCaCertSecret: + description: If defined, specifies which CA certificate to use + for user deployed prometheus + nullable: true + properties: + key: + description: The key of the secret to select from. Must be + a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must be + defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + required: + - heatInstance + type: object + ceilometer: + description: Ceilometer - Parameters related to the ceilometer service + properties: + apiTimeout: + default: 60 + description: APITimeout for Apache + type: integer + centralImage: + type: string + computeImage: + type: string + customServiceConfig: + default: '# add your customization here' + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as custom.conf file. + type: string + defaultConfigOverwrite: + additionalProperties: + type: string + description: |- + ConfigOverwrite - interface to overwrite default config files like e.g. logging.conf or policy.json. + But can also be used to add additional files. Those get added to the service config dir in /etc/ . + type: object + enabled: + default: true + description: Enabled - Whether OpenStack Ceilometer service should + be deployed and managed + type: boolean + ipmiImage: + type: string + ksmEnabled: + default: true + description: Whether kube-state-metrics should be deployed + type: boolean + ksmImage: + type: string + ksmTls: + description: KSMTLS - Parameters related to the TLS for kube-state-metrics + properties: + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs in + a pre-created bundle file + type: string + secretName: + description: SecretName - holding the cert, key for the service + type: string + type: object + mysqldExporterDatabaseAccountPrefix: + default: mysqld-exporter + description: |- + MysqldExporterDatabaseAccountPrefix - Database account prefix for the mysqld-exporter. + A mariadbaccount CR named "-" for each + galera instance needs to be either created by the user or if it's missing, it'll be + created by the telemetry-operator automatically. + type: string + mysqldExporterEnabled: + description: Whether mysqld_exporter should be deployed + type: boolean + mysqldExporterImage: + type: string + mysqldExporterTLS: + description: MysqldExporterTLS - Parameters related to the TLS + for mysqld_exporter + properties: + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs in + a pre-created bundle file + type: string + secretName: + description: SecretName - holding the cert, key for the service + type: string + type: object + networkAttachmentDefinitions: + description: NetworkAttachmentDefinitions list of network attachment + definitions the service pod gets attached to + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: NodeSelector to target subset of worker nodes running + this service + type: object + notificationImage: + type: string + passwordSelector: + default: + ceilometerService: CeilometerPassword + description: PasswordSelectors - Selectors to identify the service + from the Secret + properties: + aodhService: + default: AodhPassword + description: AodhService - Selector to get the aodh service + password from the Secret + type: string + ceilometerService: + default: CeilometerPassword + description: CeilometerService - Selector to get the ceilometer + service password from the Secret + type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string + type: object + proxyImage: + type: string + rabbitMqClusterName: + default: rabbitmq + description: |- + RabbitMQ instance name + Needed to request a transportURL that is created and used in Telemetry + type: string + secret: + default: osp-secret + description: Secret containing OpenStack password information + for ceilometer + type: string + serviceUser: + default: ceilometer + description: ServiceUser - optional username used for this service + to register in keystone + type: string + sgCoreImage: + type: string + tls: + description: TLS - Parameters related to the TLS + properties: + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs in + a pre-created bundle file + type: string + secretName: + description: SecretName - holding the cert, key for the service + type: string + type: object + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + required: + - centralImage + - computeImage + - ipmiImage + - notificationImage + - proxyImage + - secret + - sgCoreImage + type: object + cloudkitty: + description: CloudKitty - Parameters related to the cloudkitty service + properties: + apiTimeout: + default: 60 + description: APITimeout for HAProxy, Apache, and rpc_response_timeout + type: integer + cloudKittyAPI: + description: CloudKittyAPI - Spec definition for the API service + of this CloudKitty deployment + properties: + containerImage: + description: ContainerImage - CloudKitty Container Image URL + (will be set to environmental default if empty) + type: string + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + customServiceConfigSecrets: + description: |- + CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets + that contain sensitive service config data. The content of each Secret gets added to the + /etc//.conf.d directory as a custom config file. + items: + type: string + type: array + x-kubernetes-list-type: atomic + networkAttachments: + description: NetworkAttachments is a list of NetworkAttachment + resource names to expose the services to the given network + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting here overrides + any global NodeSelector settings within the CloudKitty CR. + type: object + override: + description: Override, provides the ability to override the + generated manifest of several child resources. + properties: + service: + additionalProperties: + description: |- + RoutedOverrideSpec - a routed service override configuration for the Service created to serve traffic + to the cluster. Allows for the manifest of the created Service to be overwritten with custom configuration. + properties: + endpointURL: + type: string + 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. + 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: https://kubernetes.io/docs/concepts/overview/working-with-objects/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: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + type: object + type: object + spec: + description: |- + OverrideServiceSpec is a subset of the fields included in https://pkg.go.dev/k8s.io/api@v0.26.6/core/v1#ServiceSpec + Limited to Type, SessionAffinity, LoadBalancerSourceRanges, ExternalName, ExternalTrafficPolicy, SessionAffinityConfig, + IPFamilyPolicy, LoadBalancerClass and InternalTrafficPolicy + properties: + externalName: + description: |- + externalName is the external reference that discovery mechanisms will + return as an alias for this service (e.g. a DNS CNAME record). No + proxying will be involved. Must be a lowercase RFC-1123 hostname + (https://tools.ietf.org/html/rfc1123) and requires `type` to be "ExternalName". + type: string + externalTrafficPolicy: + description: |- + externalTrafficPolicy describes how nodes distribute service traffic they + receive on one of the Service's "externally-facing" addresses (NodePorts, + ExternalIPs, and LoadBalancer IPs). If set to "Local", the proxy will configure + the service in a way that assumes that external load balancers will take care + of balancing the service traffic between nodes, and so each node will deliver + traffic only to the node-local endpoints of the service, without masquerading + the client source IP. (Traffic mistakenly sent to a node with no endpoints will + be dropped.) The default value, "Cluster", uses the standard behavior of + routing to all endpoints evenly (possibly modified by topology and other + features). Note that traffic sent to an External IP or LoadBalancer IP from + within the cluster will always get "Cluster" semantics, but clients sending to + a NodePort from within the cluster may need to take traffic policy into account + when picking a node. + type: string + internalTrafficPolicy: + description: |- + InternalTrafficPolicy describes how nodes distribute service traffic they + receive on the ClusterIP. If set to "Local", the proxy will assume that pods + only want to talk to endpoints of the service on the same node as the pod, + dropping the traffic if there are no local endpoints. The default value, + "Cluster", uses the standard behavior of routing to all endpoints evenly + (possibly modified by topology and other features). + type: string + ipFamilyPolicy: + description: |- + IPFamilyPolicy represents the dual-stack-ness requested or required by + this Service. If there is no value provided, then this field will be set + to SingleStack. Services can be "SingleStack" (a single IP family), + "PreferDualStack" (two IP families on dual-stack configured clusters or + a single IP family on single-stack clusters), or "RequireDualStack" + (two IP families on dual-stack configured clusters, otherwise fail). The + ipFamilies and clusterIPs fields depend on the value of this field. This + field will be wiped when updating a service to type ExternalName. + type: string + loadBalancerClass: + description: |- + loadBalancerClass is the class of the load balancer implementation this Service belongs to. + If specified, the value of this field must be a label-style identifier, with an optional prefix, + e.g. "internal-vip" or "example.com/internal-vip". Unprefixed names are reserved for end-users. + This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load + balancer implementation is used, today this is typically done through the cloud provider integration, + but should apply for any default implementation. If set, it is assumed that a load balancer + implementation is watching for Services with a matching class. Any default load balancer + implementation (e.g. cloud providers) should ignore Services that set this field. + This field can only be set when creating or updating a Service to type 'LoadBalancer'. + Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type. + type: string + loadBalancerSourceRanges: + description: |- + If specified and supported by the platform, this will restrict traffic through the cloud-provider + load-balancer will be restricted to the specified client IPs. This field will be ignored if the + cloud-provider does not support the feature." + More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/ + items: + type: string + type: array + x-kubernetes-list-type: atomic + sessionAffinity: + description: |- + Supports "ClientIP" and "None". Used to maintain session affinity. + Enable client IP based session affinity. + Must be ClientIP or None. + Defaults to None. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + type: string + sessionAffinityConfig: + description: sessionAffinityConfig contains + the configurations of session affinity. + properties: + clientIP: + description: clientIP contains the configurations + of Client IP based session affinity. + properties: + timeoutSeconds: + description: |- + timeoutSeconds specifies the seconds of ClientIP type session sticky time. + The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". + Default value is 10800(for 3 hours). + format: int32 + type: integer + type: object + type: object + type: + description: |- + type determines how the Service is exposed. Defaults to ClusterIP. Valid + options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + "ClusterIP" allocates a cluster-internal IP address for load-balancing + to endpoints. Endpoints are determined by the selector or if that is not + specified, by manual construction of an Endpoints object or + EndpointSlice objects. If clusterIP is "None", no virtual IP is + allocated and the endpoints are published as a set of endpoints rather + than a virtual IP. + "NodePort" builds on ClusterIP and allocates a port on every node which + routes to the same endpoints as the clusterIP. + "LoadBalancer" builds on NodePort and creates an external load-balancer + (if supported in the current cloud) which routes to the same endpoints + as the clusterIP. + "ExternalName" aliases this service to the specified externalName. + Several other fields do not apply to ExternalName services. + More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types + type: string + type: object + type: object + description: |- + Override configuration for the Service created to serve traffic to the cluster. + The key must be the endpoint type (public, internal) + type: object + type: object + replicas: + default: 1 + description: Replicas - CloudKitty API Replicas + format: int32 + minimum: 0 + type: integer + resources: + description: |- + Resources - Compute Resources required by this service (Limits/Requests). + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + 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 + tls: + description: TLS - Parameters related to the TLS + properties: + api: + description: API tls type which encapsulates for API services + properties: + internal: + description: Internal GenericService - holds the secret + for the internal endpoint + properties: + secretName: + description: SecretName - holding the cert, key + for the service + type: string + type: object + public: + description: Public GenericService - holds the secret + for the public endpoint + properties: + secretName: + description: SecretName - holding the cert, key + for the service + type: string + type: object + type: object + caBundleSecretName: + description: CaBundleSecretName - holding the CA certs + in a pre-created bundle file + type: string + type: object + topologyRef: + 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 + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + type: object + cloudKittyProc: + description: CloudKittyProc - Spec definition for the Scheduler + service of this CloudKitty deployment + properties: + containerImage: + description: ContainerImage - CloudKitty Container Image URL + (will be set to environmental default if empty) + type: string + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + customServiceConfigSecrets: + description: |- + CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets + that contain sensitive service config data. The content of each Secret gets added to the + /etc//.conf.d directory as a custom config file. + items: + type: string + type: array + x-kubernetes-list-type: atomic + networkAttachments: + description: NetworkAttachments is a list of NetworkAttachment + resource names to expose the services to the given network + items: + type: string + type: array + x-kubernetes-list-type: atomic + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting here overrides + any global NodeSelector settings within the CloudKitty CR. + type: object + replicas: + default: 1 + description: Replicas - CloudKitty API Replicas + format: int32 + minimum: 0 + type: integer + resources: + description: |- + Resources - Compute Resources required by this service (Limits/Requests). + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + 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 + tls: + description: TLS - Parameters related to the TLS + properties: caBundleSecretName: description: CaBundleSecretName - holding the CA certs in a pre-created bundle file type: string + secretName: + description: SecretName - holding the cert, key for the + service + type: string type: object topologyRef: description: |- @@ -367,23 +1048,69 @@ spec: current project type: string type: object - required: - - apiImage - - databaseInstance - - evaluatorImage - - listenerImage - - notifierImage - - secret type: object + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config for all CloudKitty services using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + to /etc//.conf.d directory as a custom config file. + type: string + databaseAccount: + default: cloudkitty + description: DatabaseAccount - optional MariaDBAccount used for + cloudkitty DB, defaults to cloudkitty + type: string + databaseInstance: + default: openstack + description: |- + MariaDB instance name + Right now required by the maridb-operator to get the credentials from the instance to create the DB + Might not be required in future + type: string enabled: default: false - description: Enabled - Whether OpenStack autoscaling service should + description: Enabled - Whether OpenStack CloudKitty service should be deployed and managed type: boolean - heatInstance: - default: heat - description: Heat instance name. + memcachedInstance: + default: memcached + description: Memcached instance name. type: string + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting + NodeSelector here acts as a default value and can be overridden by service + specific NodeSelector Settings. + type: object + passwordSelector: + default: + cloudKittyService: CloudKittyPassword + description: PasswordsSelectors - Selectors to identify the ServiceUser + password from the Secret + properties: + aodhService: + default: AodhPassword + description: AodhService - Selector to get the aodh service + password from the Secret + type: string + ceilometerService: + default: CeilometerPassword + description: CeilometerService - Selector to get the ceilometer + service password from the Secret + type: string + cloudKittyService: + default: CloudKittyPassword + description: CloudKittyService - Selector to get the CloudKitty + service password from the Secret + type: string + type: object + preserveJobs: + default: false + description: PreserveJobs - do not delete jobs after they finished + e.g. to check logs + type: boolean prometheusHost: description: Host of user deployed prometheus type: string @@ -403,10 +1130,13 @@ spec: a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret or its key must be @@ -416,147 +1146,91 @@ spec: - key type: object x-kubernetes-map-type: atomic - required: - - heatInstance - type: object - ceilometer: - description: Ceilometer - Parameters related to the ceilometer service - properties: - apiTimeout: - default: 60 - description: APITimeout for Apache - type: integer - centralImage: - type: string - computeImage: - type: string - customServiceConfig: - default: '# add your customization here' - description: |- - CustomServiceConfig - customize the service config using this parameter to change service defaults, - or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as custom.conf file. - type: string - defaultConfigOverwrite: - additionalProperties: - type: string - description: |- - ConfigOverwrite - interface to overwrite default config files like e.g. logging.conf or policy.json. - But can also be used to add additional files. Those get added to the service config dir in /etc/ . - TODO: -> implement - type: object - enabled: - default: true - description: Enabled - Whether OpenStack Ceilometer service should - be deployed and managed - type: boolean - ipmiImage: - type: string - ksmEnabled: - default: true - description: Whether kube-state-metrics should be deployed - type: boolean - ksmImage: - type: string - ksmTls: - description: KSMTLS - Parameters related to the TLS for kube-state-metrics - properties: - caBundleSecretName: - description: CaBundleSecretName - holding the CA certs in - a pre-created bundle file - type: string - secretName: - description: SecretName - holding the cert, key for the service - type: string - type: object - mysqldExporterDatabaseAccountPrefix: - default: mysqld-exporter - description: |- - MysqldExporterDatabaseAccountPrefix - Database account prefix for the mysqld-exporter. - A mariadbaccount CR named "-" for each - galera instance needs to be either created by the user or if it's missing, it'll be - created by the telemetry-operator automatically. - type: string - mysqldExporterEnabled: - description: Whether mysqld_exporter should be deployed - type: boolean - mysqldExporterImage: - type: string - mysqldExporterTLS: - description: MysqldExporterTLS - Parameters related to the TLS - for mysqld_exporter - properties: - caBundleSecretName: - description: CaBundleSecretName - holding the CA certs in - a pre-created bundle file - type: string - secretName: - description: SecretName - holding the cert, key for the service - type: string - type: object - networkAttachmentDefinitions: - description: NetworkAttachmentDefinitions list of network attachment - definitions the service pod gets attached to - items: - type: string - type: array - x-kubernetes-list-type: atomic - nodeSelector: - additionalProperties: - type: string - description: NodeSelector to target subset of worker nodes running - this service - type: object - notificationImage: - type: string - passwordSelector: - default: - ceilometerService: CeilometerPassword - description: PasswordSelectors - Selectors to identify the service - from the Secret - properties: - aodhService: - default: AodhPassword - description: AodhService - Selector to get the aodh service - password from the Secret - type: string - ceilometerService: - default: CeilometerPassword - description: CeilometerService - Selector to get the ceilometer - service password from the Secret - type: string - type: object - proxyImage: - type: string rabbitMqClusterName: default: rabbitmq description: |- RabbitMQ instance name - Needed to request a transportURL that is created and used in Telemetry + Needed to request a transportURL that is created and used in CloudKitty type: string + s3StorageConfig: + default: + secret: + name: cloudkitty-loki-s3 + type: s3 + description: S3 related configuration passed to Loki + properties: + schemas: + default: + - effectiveDate: "2020-10-11" + version: v11 + description: Schemas for reading and writing logs. + items: + properties: + effectiveDate: + description: |- + EffectiveDate contains a date in YYYY-MM-DD format which is interpreted in the UTC time zone. + + The configuration always needs at least one schema that is currently valid. This means that when creating a new + CloudKitty it is recommended to add a schema with the latest available version and an effective date of "yesterday". + New schema versions added to the configuration always needs to be placed "in the future", so that Loki can start + using it once the day rolls over. + type: string + version: + description: Version for writing and reading logs. + type: string + type: object + minItems: 1 + type: array + secret: + description: |- + Secret for object storage authentication. + Name of a secret in the same namespace as the CloudKitty custom resource. + properties: + credentialMode: + description: |- + CredentialMode can be used to set the desired credential mode for authenticating with the object storage. + If this is not set, then the operator tries to infer the credential mode from the provided secret and its + own configuration. + type: string + name: + description: Name of a secret in the namespace configured + for object storage secrets. + type: string + type: + description: Type of object storage that should be used + type: string + type: object + tls: + description: TLS configuration for reaching the object storage + endpoint. + properties: + caKey: + description: |- + Key is the data key of a ConfigMap containing a CA certificate. + It needs to be in the same namespace as the CloudKitty custom resource. + If empty, it defaults to "service-ca.crt". + type: string + caName: + description: |- + CA is the name of a ConfigMap containing a CA certificate. + It needs to be in the same namespace as the CloudKitty custom resource. + type: string + required: + - caName + type: object + type: object secret: default: osp-secret description: Secret containing OpenStack password information - for ceilometer type: string serviceUser: - default: ceilometer + default: cloudkitty description: ServiceUser - optional username used for this service - to register in keystone + to register in cloudkitty type: string - sgCoreImage: + storageClass: + description: Storage class used for Loki type: string - tls: - description: TLS - Parameters related to the TLS - properties: - caBundleSecretName: - description: CaBundleSecretName - holding the CA certs in - a pre-created bundle file - type: string - secretName: - description: SecretName - holding the cert, key for the service - type: string - type: object topologyRef: description: |- TopologyRef to apply the Topology defined by the associated CR referenced @@ -575,14 +1249,6 @@ spec: current project type: string type: object - required: - - centralImage - - computeImage - - ipmiImage - - notificationImage - - proxyImage - - secret - - sgCoreImage type: object logging: description: Logging - Parameters related to the logging @@ -696,11 +1362,13 @@ spec: 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 @@ -742,6 +1410,7 @@ spec: items: type: string type: array + x-kubernetes-list-type: atomic dataSource: description: |- dataSource field can be used to specify either: @@ -886,11 +1555,13 @@ spec: 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 @@ -918,8 +1589,8 @@ spec: If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. - More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#volumeattributesclass - (Alpha) Using this field requires the VolumeAttributesClass feature gate to be enabled. + More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ + (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default). type: string volumeMode: description: |- @@ -942,10 +1613,8 @@ spec: description: |- Authorization section for the URL. - It requires Prometheus >= v2.26.0. - Cannot be set at the same time as `sigv4`, `basicAuth`, `oauth2`, or `azureAd`. properties: credentials: @@ -958,10 +1627,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -979,10 +1651,8 @@ spec: description: |- Defines the authentication type. The value is case-insensitive. - "Basic" is not a supported value. - Default: "Bearer" type: string type: object @@ -990,10 +1660,8 @@ spec: description: |- AzureAD for the URL. - It requires Prometheus >= v2.45.0. - Cannot be set at the same time as `authorization`, `basicAuth`, `oauth2`, or `sigv4`. properties: cloud: @@ -1020,7 +1688,6 @@ spec: OAuth defines the oauth config that is being used to authenticate. Cannot be set at the same time as `managedIdentity`. - It requires Prometheus >= v2.48.0. properties: clientId: @@ -1041,10 +1708,13 @@ spec: key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1071,7 +1741,6 @@ spec: description: |- BasicAuth configuration for the URL. - Cannot be set at the same time as `sigv4`, `authorization`, `oauth2`, or `azureAd`. properties: password: @@ -1084,10 +1753,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1107,10 +1779,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1126,14 +1801,12 @@ spec: *Warning: this field shouldn't be used because the token value appears in clear-text. Prefer using `authorization`.* - Deprecated: this will be removed in a future release. type: string bearerTokenFile: description: |- File from which to read bearer token for the URL. - Deprecated: this will be removed in a future release. Prefer using `authorization`. type: string enableHTTP2: @@ -1146,7 +1819,6 @@ spec: Custom HTTP headers to be sent along with each remote write request. Be aware that headers that are set by Prometheus itself can't be overwritten. - It requires Prometheus >= v2.25.0. type: object metadataConfig: @@ -1168,17 +1840,14 @@ spec: The name of the remote write queue, it must be unique if specified. The name is used in metrics and logging in order to differentiate queues. - It requires Prometheus >= v2.15.0. type: string oauth2: description: |- OAuth2 configuration for the URL. - It requires Prometheus >= v2.27.0. - Cannot be set at the same time as `sigv4`, `authorization`, `basicAuth`, or `azureAd`. properties: clientId: @@ -1194,10 +1863,13 @@ spec: description: The key to select. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the ConfigMap @@ -1217,10 +1889,13 @@ spec: key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1241,10 +1916,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1334,7 +2012,6 @@ spec: exemplar-storage itself must be enabled using the `spec.enableFeature` option for exemplars to be scraped in the first place. - It requires Prometheus >= v2.27.0. type: boolean sendNativeHistograms: @@ -1342,17 +2019,14 @@ spec: Enables sending of native histograms, also known as sparse histograms over remote write. - It requires Prometheus >= v2.40.0. type: boolean sigv4: description: |- Sigv4 allows to configures AWS's Signature Verification 4 for the URL. - It requires Prometheus >= v2.26.0. - Cannot be set at the same time as `authorization`, `basicAuth`, `oauth2`, or `azureAd`. properties: accessKey: @@ -1365,10 +2039,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1401,10 +2078,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1430,10 +2110,13 @@ spec: description: The key to select. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the ConfigMap @@ -1453,10 +2136,13 @@ spec: key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1483,10 +2169,13 @@ spec: description: The key to select. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the ConfigMap @@ -1506,10 +2195,13 @@ spec: key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1540,10 +2232,13 @@ spec: from. Must be a valid secret key. type: string 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 - TODO: Add other useful fields. apiVersion, kind, uid? type: string optional: description: Specify whether the Secret @@ -1569,7 +2264,6 @@ spec: RelabelConfig allows dynamic rewriting of the label set for targets, alerts, scraped samples and remote write samples. - More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config properties: action: @@ -1577,11 +2271,9 @@ spec: description: |- Action to perform based on the regex matching. - `Uppercase` and `Lowercase` actions require Prometheus >= v2.36.0. `DropEqual` and `KeepEqual` actions require Prometheus >= v2.41.0. - Default: "Replace" enum: - replace @@ -1611,7 +2303,6 @@ spec: description: |- Modulus to take of the hash of the source label values. - Only applicable when the action is `HashMod`. format: int64 type: integer @@ -1624,7 +2315,6 @@ spec: Replacement value against which a Replace action is performed if the regular expression matches. - Regex capture groups are available. type: string separator: @@ -1647,11 +2337,9 @@ spec: description: |- Label to which the resulting string is written in a replacement. - It is mandatory for `Replace`, `HashMod`, `Lowercase`, `Uppercase`, `KeepEqual` and `DropEqual` actions. - Regex capture groups are available. type: string type: object @@ -1705,11 +2393,13 @@ spec: 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 @@ -1736,11 +2426,9 @@ spec: 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. @@ -1751,6 +2439,12 @@ spec: 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 @@ -1875,11 +2569,13 @@ spec: 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 diff --git a/bindata/crds/topology.openstack.org_topologies.yaml b/bindata/crds/topology.openstack.org_topologies.yaml index 4316fbff5..9a7ef7d75 100644 --- a/bindata/crds/topology.openstack.org_topologies.yaml +++ b/bindata/crds/topology.openstack.org_topologies.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.14.0 + controller-gen.kubebuilder.io/version: v0.18.0 creationTimestamp: null name: topologies.topology.openstack.org spec: @@ -95,11 +95,13 @@ spec: 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. @@ -127,11 +129,13 @@ spec: 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: @@ -144,6 +148,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -188,11 +193,13 @@ spec: 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. @@ -220,14 +227,17 @@ spec: 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 @@ -288,11 +298,13 @@ spec: 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 @@ -307,13 +319,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -322,13 +334,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -368,11 +380,13 @@ spec: 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 @@ -392,6 +406,7 @@ spec: 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 @@ -414,6 +429,7 @@ spec: - weight type: object type: array + x-kubernetes-list-type: atomic requiredDuringSchedulingIgnoredDuringExecution: description: |- If the affinity requirements specified by this field are not met at @@ -463,11 +479,13 @@ spec: 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 @@ -482,13 +500,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -497,13 +515,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -542,11 +560,13 @@ spec: 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 @@ -566,6 +586,7 @@ spec: 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 @@ -578,6 +599,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object podAntiAffinity: description: Describes pod anti-affinity scheduling rules (e.g. @@ -635,11 +657,13 @@ spec: 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 @@ -654,13 +678,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -669,13 +693,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -715,11 +739,13 @@ spec: 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 @@ -739,6 +765,7 @@ spec: 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 @@ -761,6 +788,7 @@ spec: - 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 @@ -810,11 +838,13 @@ spec: 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 @@ -829,13 +859,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -844,13 +874,13 @@ spec: 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)` + 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 an alpha field and requires enabling MatchLabelKeysInPodAffinity feature gate. + 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 @@ -889,11 +919,13 @@ spec: 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 @@ -913,6 +945,7 @@ spec: 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 @@ -925,6 +958,7 @@ spec: - topologyKey type: object type: array + x-kubernetes-list-type: atomic type: object type: object topologySpreadConstraints: @@ -967,11 +1001,13 @@ spec: 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 @@ -993,7 +1029,6 @@ spec: Keys that don't exist in the incoming pod labels will be ignored. A null or empty list means only match against labelSelector. - This is a beta field and requires the MatchLabelKeysInPodTopologySpread feature gate to be enabled (enabled by default). items: type: string @@ -1033,7 +1068,6 @@ spec: Valid values are integers greater than 0. When value is not nil, WhenUnsatisfiable must be DoNotSchedule. - For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same labelSelector spread as 2/2/2: | zone1 | zone2 | zone3 | @@ -1042,9 +1076,6 @@ spec: In this situation, new pod with the same labelSelector cannot be scheduled, because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones, it will violate MaxSkew. - - - This is a beta field and requires the MinDomainsInPodTopologySpread feature gate to be enabled (enabled by default). format: int32 type: integer nodeAffinityPolicy: @@ -1054,7 +1085,6 @@ spec: - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations. - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations. - If this value is nil, the behavior is equivalent to the Honor policy. This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag. type: string @@ -1066,7 +1096,6 @@ spec: has a toleration, are included. - Ignore: node taints are ignored. All nodes are included. - If this value is nil, the behavior is equivalent to the Ignore policy. This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag. type: string diff --git a/bindata/operator/operator.yaml b/bindata/operator/operator.yaml index 41416586f..5d43029d7 100644 --- a/bindata/operator/operator.yaml +++ b/bindata/operator/operator.yaml @@ -54,7 +54,7 @@ metadata: name: openstack-operator-controller-manager namespace: '{{ .OperatorNamespace }}' spec: - replicas: 1 + replicas: {{ .OpenStackOperator.Deployment.Replicas }} selector: matchLabels: openstack.org/operator-name: openstack @@ -74,7 +74,10 @@ spec: command: - /manager env: - - envCustom: replace_me +{{- range .OpenStackOperator.Deployment.Manager.Env }} + - name: '{{ .Name }}' + value: '{{ .Value }}' +{{- end }} image: '{{ .OpenStackOperator.Deployment.Manager.Image }}' livenessProbe: httpGet: @@ -95,9 +98,11 @@ spec: periodSeconds: 10 resources: limits: - customLimits: replace_me + cpu: {{ .OpenStackOperator.Deployment.Manager.Resources.Limits.CPU }} + memory: {{ .OpenStackOperator.Deployment.Manager.Resources.Limits.Memory }} requests: - customRequests: replace_me + cpu: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.CPU }} + memory: {{ .OpenStackOperator.Deployment.Manager.Resources.Requests.Memory }} securityContext: allowPrivilegeEscalation: false volumeMounts: @@ -109,7 +114,7 @@ spec: - --upstream=http://127.0.0.1:8080/ - --logtostderr=true - --v=0 - image: kube-rbac-proxy:replace_me + image: '{{ .OpenStackOperator.Deployment.KubeRbacProxy.Image }}' name: kube-rbac-proxy ports: - containerPort: 8443 @@ -124,7 +129,22 @@ spec: memory: 64Mi securityContext: allowPrivilegeEscalation: false - customTolerations: replace_me + tolerations: +{{- range .OpenStackOperator.Deployment.Tolerations }} + - key: "{{ .Key }}" +{{- if .Operator }} + operator: "{{ .Operator }}" +{{- end }} +{{- if .Value }} + value: "{{ .Value }}" +{{- end }} +{{- if .Effect }} + effect: "{{ .Effect }}" +{{- end }} +{{- if .TolerationSeconds }} + tolerationSeconds: {{ .TolerationSeconds }} +{{- end }} +{{- end }} securityContext: runAsNonRoot: true serviceAccountName: openstack-operator-controller-manager diff --git a/bindata/rbac/infra-operator-rbac.yaml b/bindata/rbac/infra-operator-rbac.yaml index 03ba6b922..7662b71f4 100644 --- a/bindata/rbac/infra-operator-rbac.yaml +++ b/bindata/rbac/infra-operator-rbac.yaml @@ -53,7 +53,10 @@ rules: - apiGroups: - "" resources: + - configmaps - pods + - secrets + - services verbs: - create - delete @@ -65,21 +68,15 @@ rules: - apiGroups: - "" resources: - - serviceaccounts + - pods/exec verbs: - create - - get - - list - - patch - - update - - watch - apiGroups: - - apps + - "" resources: - - deployments + - serviceaccounts verbs: - create - - delete - get - list - patch @@ -88,6 +85,7 @@ rules: - apiGroups: - apps resources: + - deployments - statefulsets verbs: - create @@ -105,60 +103,6 @@ rules: - get - list - watch -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods/exec - verbs: - - create -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - apiGroups: - frrk8s.metallb.io resources: @@ -238,98 +182,12 @@ rules: - network.openstack.org resources: - bgpconfigurations - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.openstack.org - resources: - - bgpconfigurations/finalizers - verbs: - - update -- apiGroups: - - network.openstack.org - resources: - - bgpconfigurations/status - verbs: - - get - - patch - - update -- apiGroups: - - network.openstack.org - resources: - dnsdata - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.openstack.org - resources: - - dnsdata/finalizers - verbs: - - patch - - update -- apiGroups: - - network.openstack.org - resources: - - dnsdata/status - verbs: - - get - - patch - - update -- apiGroups: - - network.openstack.org - resources: - dnsdatas - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.openstack.org - resources: - dnsmasqs - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.openstack.org - resources: - - dnsmasqs/finalizers - verbs: - - patch - - update -- apiGroups: - - network.openstack.org - resources: - - dnsmasqs/status - verbs: - - get - - patch - - update -- apiGroups: - - network.openstack.org - resources: - ipsets + - reservations + - services verbs: - create - delete @@ -341,14 +199,17 @@ rules: - apiGroups: - network.openstack.org resources: - - ipsets/finalizers + - bgpconfigurations/finalizers verbs: - - patch - update - apiGroups: - network.openstack.org resources: + - bgpconfigurations/status + - dnsdata/status + - dnsmasqs/status - ipsets/status + - services/status verbs: - get - patch @@ -356,57 +217,22 @@ rules: - apiGroups: - network.openstack.org resources: - - netconfigs - verbs: - - get - - list - - watch -- apiGroups: - - network.openstack.org - resources: - - reservations - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.openstack.org - resources: + - dnsdata/finalizers + - dnsmasqs/finalizers + - ipsets/finalizers - reservations/finalizers + - services/finalizers verbs: - patch - update - apiGroups: - network.openstack.org resources: - - services + - netconfigs verbs: - - create - - delete - get - list - - patch - - update - watch -- apiGroups: - - network.openstack.org - resources: - - services/finalizers - verbs: - - patch - - update -- apiGroups: - - network.openstack.org - resources: - - services/status - verbs: - - get - - patch - - update - apiGroups: - policy resources: @@ -435,31 +261,6 @@ rules: - rabbitmq.openstack.org resources: - rabbitmqs - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - rabbitmq.openstack.org - resources: - - rabbitmqs/finalizers - verbs: - - update -- apiGroups: - - rabbitmq.openstack.org - resources: - - rabbitmqs/status - verbs: - - get - - patch - - update -- apiGroups: - - rabbitmq.openstack.org - resources: - transporturls verbs: - create @@ -472,12 +273,14 @@ rules: - apiGroups: - rabbitmq.openstack.org resources: + - rabbitmqs/finalizers - transporturls/finalizers verbs: - update - apiGroups: - rabbitmq.openstack.org resources: + - rabbitmqs/status - transporturls/status verbs: - get @@ -487,16 +290,6 @@ rules: - rbac.authorization.k8s.io resources: - rolebindings - verbs: - - create - - get - - list - - patch - - update - - watch -- apiGroups: - - rbac.authorization.k8s.io - resources: - roles verbs: - create diff --git a/bindata/rbac/telemetry-operator-rbac.yaml b/bindata/rbac/telemetry-operator-rbac.yaml index 0da00486d..e67bb2a9d 100644 --- a/bindata/rbac/telemetry-operator-rbac.yaml +++ b/bindata/rbac/telemetry-operator-rbac.yaml @@ -50,6 +50,21 @@ metadata: creationTimestamp: null name: telemetry-operator-manager-role rules: +- apiGroups: + - "" + resources: + - configmaps + - pods + - secrets + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch - apiGroups: - "" resources: @@ -93,9 +108,9 @@ rules: - update - watch - apiGroups: - - "" + - cert-manager.io resources: - - configmaps + - certificates verbs: - create - delete @@ -105,21 +120,17 @@ rules: - update - watch - apiGroups: - - "" + - cert-manager.io resources: - - pods + - issuers verbs: - - create - - delete - get - list - - patch - - update - watch - apiGroups: - - "" + - cloudkitty.openstack.org resources: - - secrets + - cloudkittyprocs verbs: - create - delete @@ -129,17 +140,20 @@ rules: - update - watch - apiGroups: - - "" + - cloudkitty.openstack.org resources: - - services + - cloudkittyprocs/finalizers + verbs: + - patch + - update +- apiGroups: + - cloudkitty.openstack.org + resources: + - cloudkittyprocs/status verbs: - - create - - delete - get - - list - patch - update - - watch - apiGroups: - heat.openstack.org resources: @@ -168,6 +182,7 @@ rules: - keystone.openstack.org resources: - keystoneendpoints + - keystoneservices verbs: - create - delete @@ -177,9 +192,9 @@ rules: - update - watch - apiGroups: - - keystone.openstack.org + - loki.grafana.com resources: - - keystoneservices + - lokistacks verbs: - create - delete @@ -200,24 +215,6 @@ rules: - mariadb.openstack.org resources: - mariadbaccounts - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - mariadb.openstack.org - resources: - - mariadbaccounts/finalizers - verbs: - - patch - - update -- apiGroups: - - mariadb.openstack.org - resources: - mariadbdatabases verbs: - create @@ -230,6 +227,7 @@ rules: - apiGroups: - mariadb.openstack.org resources: + - mariadbaccounts/finalizers - mariadbdatabases/finalizers verbs: - patch @@ -246,28 +244,6 @@ rules: - monitoring.rhobs resources: - alertmanagers - verbs: - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - monitoring.rhobs - resources: - - monitoringstacks - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - monitoring.rhobs - resources: - prometheuses verbs: - delete @@ -279,18 +255,8 @@ rules: - apiGroups: - monitoring.rhobs resources: + - monitoringstacks - prometheusrules - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - monitoring.rhobs - resources: - scrapeconfigs verbs: - create @@ -358,16 +324,6 @@ rules: - rbac.authorization.k8s.io resources: - rolebindings - verbs: - - create - - get - - list - - patch - - update - - watch -- apiGroups: - - rbac.authorization.k8s.io - resources: - roles verbs: - create @@ -385,93 +341,25 @@ rules: verbs: - use - apiGroups: - - telemetry.openstack.org - resources: - - autoscalings - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - telemetry.openstack.org - resources: - - autoscalings/finalizers - verbs: - - delete - - patch - - update -- apiGroups: - - telemetry.openstack.org + - security.openshift.io + resourceNames: + - anyuid + - privileged resources: - - autoscalings/status + - securitycontextconstraints verbs: - - get - - patch - - update + - use - apiGroups: - telemetry.openstack.org resources: + - autoscalings - ceilometers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - telemetry.openstack.org - resources: - - ceilometers/finalizers - verbs: - - delete - - patch - - update -- apiGroups: - - telemetry.openstack.org - resources: - - ceilometers/status - verbs: - - get - - patch - - update -- apiGroups: - - telemetry.openstack.org - resources: + - cloudkitties + - cloudkittyapis + - cloudkittyprocs - loggings - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - telemetry.openstack.org - resources: - - loggings/finalizers - verbs: - - delete - - patch - - update -- apiGroups: - - telemetry.openstack.org - resources: - - loggings/status - verbs: - - get - - patch - - update -- apiGroups: - - telemetry.openstack.org - resources: - metricstorages + - telemetries verbs: - create - delete @@ -483,6 +371,10 @@ rules: - apiGroups: - telemetry.openstack.org resources: + - autoscalings/finalizers + - ceilometers/finalizers + - cloudkitties/finalizers + - loggings/finalizers - metricstorages/finalizers verbs: - delete @@ -491,7 +383,14 @@ rules: - apiGroups: - telemetry.openstack.org resources: + - autoscalings/status + - ceilometers/status + - cloudkitties/status + - cloudkittyapis/status + - cloudkittyprocs/status + - loggings/status - metricstorages/status + - telemetries/status verbs: - get - patch @@ -499,30 +398,12 @@ rules: - apiGroups: - telemetry.openstack.org resources: - - telemetries - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - telemetry.openstack.org - resources: + - cloudkittyapis/finalizers + - cloudkittyprocs/finalizers - telemetries/finalizers verbs: - patch - update -- apiGroups: - - telemetry.openstack.org - resources: - - telemetries/status - verbs: - - get - - patch - - update - apiGroups: - topology.openstack.org resources: diff --git a/config/operator/manager_operator_images.yaml b/config/operator/manager_operator_images.yaml index ab1665474..f21b505f0 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:ec8da45af60ea67a8813b77a5993de3edf7c331fdbfe11812311528e3196064c - name: RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/infra-operator@sha256:2b3fdfcdbfc8a75c8398a0b7e15f67d08b9e079c437c7f227c2dae59ff1d06a8 + value: quay.io/openstack-k8s-operators/infra-operator@sha256:51636034bc0c8737f4925c7d84afda0c643a00821dbfa9e00929c94df3f9ef23 - name: RELATED_IMAGE_IRONIC_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/ironic-operator@sha256:58f382acedcc19f3673e57f15e0919a9291d42620f358ffdbe257edde7d95a92 - name: RELATED_IMAGE_KEYSTONE_OPERATOR_MANAGER_IMAGE_URL @@ -52,7 +52,7 @@ spec: - name: RELATED_IMAGE_SWIFT_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/swift-operator@sha256:7a461473e981b273217177b299b99ca12174340db0d8e685fb5425df9efbd94f - name: RELATED_IMAGE_TELEMETRY_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/telemetry-operator@sha256:11fee94d3496d7273e26def273bcde553c5c890317b3d779d13341e1c381d8fa + value: quay.io/jlarriba/telemetry-operator@sha256:8d05c0838f50273b8cce3c97d2f01acb7982d4f87afde80ffc80f81ab7024c4a - name: RELATED_IMAGE_TEST_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/test-operator@sha256:74e74488fe28fffd9365595bf06e8b69823251c2f624cad478caf31526d5d645 - name: RELATED_IMAGE_WATCHER_OPERATOR_MANAGER_IMAGE_URL diff --git a/hack/export_operator_related_images.sh b/hack/export_operator_related_images.sh index 704e4d3f0..2aad6888e 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:371a5fcdbb469a55026ea177b2f6fd6402780fb3740248082f5f67025356bd8d export RELATED_IMAGE_HEAT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/heat-operator@sha256:162d58a524ed721c42e46e95fa449c8952798bc06db8b20db0f28c5114389967 export RELATED_IMAGE_HORIZON_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/horizon-operator@sha256:ec8da45af60ea67a8813b77a5993de3edf7c331fdbfe11812311528e3196064c -export RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/infra-operator@sha256:2b3fdfcdbfc8a75c8398a0b7e15f67d08b9e079c437c7f227c2dae59ff1d06a8 +export RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/infra-operator@sha256:51636034bc0c8737f4925c7d84afda0c643a00821dbfa9e00929c94df3f9ef23 export RELATED_IMAGE_IRONIC_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/ironic-operator@sha256:58f382acedcc19f3673e57f15e0919a9291d42620f358ffdbe257edde7d95a92 export RELATED_IMAGE_KEYSTONE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/keystone-operator@sha256:2ff4b7627f11f70cc038fbfe2ebae0cc9b9ce1d6af665a35e70a18f7aa656326 export RELATED_IMAGE_MANILA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/manila-operator@sha256:280699315fa75391e6e4f94248915c035956b1640af3c065fd00e91f84d41436 @@ -19,6 +19,6 @@ export RELATED_IMAGE_OVN_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operat export RELATED_IMAGE_PLACEMENT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/placement-operator@sha256:bd227f00edf8b53aa653270a3d15adbbc8258c3e6bf909c0cca8f4c65070548b export RELATED_IMAGE_RABBITMQ_CLUSTER_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/rabbitmq-cluster-operator@sha256:225524223bf2a7f3a4ce95958fc9ca6fdab02745fb70374e8ff5bf1ddaceda4b export RELATED_IMAGE_SWIFT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/swift-operator@sha256:7a461473e981b273217177b299b99ca12174340db0d8e685fb5425df9efbd94f -export RELATED_IMAGE_TELEMETRY_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/telemetry-operator@sha256:11fee94d3496d7273e26def273bcde553c5c890317b3d779d13341e1c381d8fa +export RELATED_IMAGE_TELEMETRY_OPERATOR_MANAGER_IMAGE_URL=quay.io/jlarriba/telemetry-operator@sha256:8d05c0838f50273b8cce3c97d2f01acb7982d4f87afde80ffc80f81ab7024c4a export RELATED_IMAGE_TEST_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/test-operator@sha256:74e74488fe28fffd9365595bf06e8b69823251c2f624cad478caf31526d5d645 export RELATED_IMAGE_WATCHER_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/watcher-operator@sha256:ff196804fdb7ef75059d023c3fd427ed9875879be01dfee59c6455c5afa402c8 From 52f4f07dce595692ad8aa1ad87b8c587a72a0c07 Mon Sep 17 00:00:00 2001 From: jlarriba Date: Tue, 30 Sep 2025 16:29:30 +0200 Subject: [PATCH 06/10] Fixed go.mod --- apis/go.mod | 2 +- apis/go.sum | 51 -------------------- bindata/rbac/telemetry-operator-rbac.yaml | 15 ------ go.mod | 8 ++- go.sum | 59 ----------------------- pkg/openstack/telemetry.go | 6 +-- pkg/openstack/version.go | 3 +- 7 files changed, 9 insertions(+), 135 deletions(-) diff --git a/apis/go.mod b/apis/go.mod index db7381d83..5736c5293 100644 --- a/apis/go.mod +++ b/apis/go.mod @@ -126,4 +126,4 @@ replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-oper replace k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20250627150254-e9823e99808e //allow-merging // Test CloudKitty -replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 //allow-merging diff --git a/apis/go.sum b/apis/go.sum index 61c5d9058..86366b34c 100644 --- a/apis/go.sum +++ b/apis/go.sum @@ -102,54 +102,6 @@ github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e h1:E1OdwSpqWuDPCedyUt0GEdoAE+r5TXy7YS21yNEo+2U= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e/go.mod h1:Shkl4HanLwDiiBzakv+con/aMGnVE2MAGvoKp5oyYUo= -<<<<<<< HEAD -github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250916162815-94a54170a2be h1:tX0xh1l8nKSlzf29qZ5dd7BrDl1TMFaqo4X7jrMpQrk= -github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250916162815-94a54170a2be/go.mod h1:t1OgOfbkr5e0GnYb/8DVF7ipTBvnkTiaajshsX/lEGc= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250916151837-4aab51f61506 h1:VM1A3GoWpaWut/pJ8ahyqIIrcorA5ifB9LCiJvjmaSU= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250916151837-4aab51f61506/go.mod h1:BO46dGzGssyFxTteYsjW/x+LhP5QE8OQYqWfSCGxmrw= -github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250916093535-a95d6d012ab5 h1:+xyYZbMdO++xTvHccYwKVBknGDzWOX2l7f2dwGbRWg4= -github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250916093535-a95d6d012ab5/go.mod h1:gNLkZ4BQP50FeDAL0praoCRjsB8me4LDf1e9PSIm2ac= -github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250913143437-ca03bf1e106a h1:sKv2lK5LYt1kVK/S8VawMzpzVf2V9gv3sFX8a2tuIEw= -github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250913143437-ca03bf1e106a/go.mod h1:HbXLqb/ud09w9MmDqdoj0DoF3z78FGc0iCP/FPzGRaM= -github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327 h1:Suiu+GI++jNb3mGhggmtUFV0BhWHJAYGVH28caFBMns= -github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327/go.mod h1:FTwd2VQgKqSngqCXVW3uZ9wqm50rIFHyVBBJi/6GFl4= -github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046 h1:RgLAlW1BAxs60piMF+uKRhab6D9u/e0Jb/XvALrwRjY= -github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046/go.mod h1:j9yGw80eA38kEvHEkx/BONqIhLnKFmpjAtyAB8S817E= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 h1:Ea+FZQOW0Eha1jorgSECFeqI9UrKz8TZlGnSM7X8Yf4= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182/go.mod h1:3Im8PFiRKPaOZpOuqYShJRN2O2pfjUuhDTUpW4KMHZw= -github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257 h1:vuPPSXGCKKCOPs3AV5wdViPOSsU6wqSHLGF4JJEEIZI= -github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257/go.mod h1:pnJ/UY5Qvr565W2wKQU8WRyR936VVCkjcieuTXKDHfo= -github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d h1:lSRMftk/MbN4qd8ihHh9ucdX4sfR/HUudEcy2h/BNhQ= -github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d/go.mod h1:7ZuNZNtwRYklS2H5E5YSjsHOI2sYbAl1AD+N0W/G+8A= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250922082314-c83d83092a04 h1:JqJd39rF8rD9KIHmOEFbHP8UyYgttfuouj+kAFNtymU= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:SmKRclrynSSRCXSLOoWlETalJPvt62ObHsfW8iPvtDA= -github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250823121217-7e1cd2e3dd03 h1:tSMLVApQ4j4YJ56TGIYzaNo2Zh/ruDAY0wCcOEVKoIQ= -github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250823121217-7e1cd2e3dd03/go.mod h1:nachFP0Yicw/e8ZlqZzvnBN6w9kjMcnqrhaDw36PGjw= -github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250922082314-c83d83092a04 h1:j5P/ehO4bQ+VqNvqNiX7N/R8wnBweFy7MX685nh4mmY= -github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:WbDAhyvX2UTyK9LzYZKjRvEGdn2fsQJHUo5l2J5q/vg= -github.com/openstack-k8s-operators/manila-operator/api v0.6.1-0.20250919144954-99877452c35b h1:CsmxE47qBRAFve2mCe/SodjO/VrAGbYJ6UPQkcfa1XQ= -github.com/openstack-k8s-operators/manila-operator/api v0.6.1-0.20250919144954-99877452c35b/go.mod h1:YKBaz8jLEGmgUy6FLTm3aCRzlL1wTvdYQiOELvXrtbI= -github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250919091623-97dfb39624e3 h1:jLLHwgEbfglcSfJbqWP4vEqMs0xzu5QoubSpYDKOTIk= -github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250919091623-97dfb39624e3/go.mod h1:2I8YZyKvq2ACOnIBFpdUd9TdIaI2yeDu/9VC0HRDfPo= -github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20250916093251-7cfe04efd126 h1:N2n/iHM9w31XpxHOLU0gzRhYRPjpFN0Vd9F48SplL4E= -github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20250916093251-7cfe04efd126/go.mod h1:j4Dz5KVJbnkHZa2wNp4vvH5vzBGUSd+E8m4WDdyCqd4= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c h1:Mu7f4AagVqeSnn8dktHfSPKeaKOCuhTSc4B0yWMNAZ0= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c/go.mod h1:TMosRCd2EszCD0kugIDUeXFymuZRnw+CicBwLmExYR4= -github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4 h1:FGLm70RGFTHA9jAxf5M8ADDjGyWRl9QSHNLVN3uy+Og= -github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4/go.mod h1:qFLvSjUjUAD5uS8m2yBhYO5X6ViIWxWF0qtYCaj+wo0= -github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52 h1:QuOy7xZzbIfPKDQ940r+z5fsqr3aTAdQFjDOXuFY2Gw= -github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52/go.mod h1:15x01xs3dolD9G/X+V3kW2EsE4a6/Z/hFgJHcN3Yg9Y= -github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5 h1:kjCoac5RqGN2m3Iw0+XmaiEwo/FuGB9MfWAeHT+6caI= -github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5/go.mod h1:gxQk8WOaA2lQ9oy4ZKXK35oKuD6pKo4Ce2XkUkFjkE4= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c h1:thTQEtjo25kEYW+woLiPpvByMmWkI/jhh+sWokJtLN4= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c/go.mod h1:qs5IDS8g5krd05ts6sQ+37nP652K7bduJW90j1HMFcc= -github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d h1:0KCWljk2IEJ+aWNK+RiGpIdu51KPXrYA5RfyUcV4Mb4= -github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d/go.mod h1:6Mq2N/KtNFW20L+PQC5qkeK8R8UGadmGBXL8HDY6lcg= -github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764 h1:uhGPaufK6M4E8GpE/5hQ3dhvcDLfec1StPvUVcRKbY0= -github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764/go.mod h1:ygMZ5eETT8vzs85/u/vkPGFxziRPXcp3G2TRBQnuV/E= -github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250919081639-e7427981ed8c h1:7MP0Nakns0cAV7zCqjbrHxJQ7mnDU0rYuRWAQbU3RwM= -github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250919081639-e7427981ed8c/go.mod h1:d666c/fR+FvqA6f2TgsbxdPSRIM43ooUAO4AvcC+n5E= -======= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250929084617-b8b724a249e9 h1:WbY0iMJE4gk0AfBnt0WdIL6NdrQbuSUvtmEjeup5FEs= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250929084617-b8b724a249e9/go.mod h1:wJxERkmbVx2a0WGBax/fBbrYhAMSRGrP+rfDTNONlUs= github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250926111043-e3436cc7fde8 h1:qzOcj+IpIh2BGoeAJO0wt0sfeD4eUp0fw8WqeiTL3LM= @@ -194,11 +146,8 @@ github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.2025071 github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d/go.mod h1:6Mq2N/KtNFW20L+PQC5qkeK8R8UGadmGBXL8HDY6lcg= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250922191944-7d54e7c80282 h1:wrBO9Xe8CqXlZJNG8yuBOtVqebiJR+02sKPTMtNMi9w= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250922191944-7d54e7c80282/go.mod h1:x47kL081iHPPLBL7AcNuX2ossjJP+xXO6RMgG21ATKM= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250926151751-fb90e2d5d545 h1:cscDXcjLvEwUsV4U6fPdMSB/M4k7CeuejOacINmwPnE= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250926151751-fb90e2d5d545/go.mod h1:nNPrAB/FKxbK8X0nyjSlbH9jNY3V5nWQ6+H5z/OkWuI= github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250925120222-c0b444994d55 h1:Eq8IMNekzmAbe8mlGtsmCejXOSqb6AW9ieUM9KBMV+A= github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250925120222-c0b444994d55/go.mod h1:cIeTQmrUXSxzHuv/W9hxMk02z5BT+4RJl9MdXX20BsA= ->>>>>>> main github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/bindata/rbac/telemetry-operator-rbac.yaml b/bindata/rbac/telemetry-operator-rbac.yaml index 231ac80fd..e67bb2a9d 100644 --- a/bindata/rbac/telemetry-operator-rbac.yaml +++ b/bindata/rbac/telemetry-operator-rbac.yaml @@ -183,7 +183,6 @@ rules: resources: - keystoneendpoints - keystoneservices -<<<<<<< HEAD verbs: - create - delete @@ -196,8 +195,6 @@ rules: - loki.grafana.com resources: - lokistacks -======= ->>>>>>> main verbs: - create - delete @@ -357,12 +354,9 @@ rules: resources: - autoscalings - ceilometers -<<<<<<< HEAD - cloudkitties - cloudkittyapis - cloudkittyprocs -======= ->>>>>>> main - loggings - metricstorages - telemetries @@ -379,10 +373,7 @@ rules: resources: - autoscalings/finalizers - ceilometers/finalizers -<<<<<<< HEAD - cloudkitties/finalizers -======= ->>>>>>> main - loggings/finalizers - metricstorages/finalizers verbs: @@ -394,12 +385,9 @@ rules: resources: - autoscalings/status - ceilometers/status -<<<<<<< HEAD - cloudkitties/status - cloudkittyapis/status - cloudkittyprocs/status -======= ->>>>>>> main - loggings/status - metricstorages/status - telemetries/status @@ -410,11 +398,8 @@ rules: - apiGroups: - telemetry.openstack.org resources: -<<<<<<< HEAD - cloudkittyapis/finalizers - cloudkittyprocs/finalizers -======= ->>>>>>> main - telemetries/finalizers verbs: - patch diff --git a/go.mod b/go.mod index 616943aea..5bc05759a 100644 --- a/go.mod +++ b/go.mod @@ -133,10 +133,8 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202507112000 // custom RabbitmqClusterSpecCore for OpenStackControlplane (v2.9.0_patches_tag_n) replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d //allow-merging -<<<<<<< HEAD -// Test CloudKitty -replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 -======= // pin to support rabbitmq 2.16.1 rebase replace k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20250627150254-e9823e99808e //allow-merging ->>>>>>> main + +// Test CloudKitty +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 //allow-merging diff --git a/go.sum b/go.sum index eff97771d..37e1c8534 100644 --- a/go.sum +++ b/go.sum @@ -106,62 +106,6 @@ github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e h1:E1OdwSpqWuDPCedyUt0GEdoAE+r5TXy7YS21yNEo+2U= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e/go.mod h1:Shkl4HanLwDiiBzakv+con/aMGnVE2MAGvoKp5oyYUo= -<<<<<<< HEAD -github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250916162815-94a54170a2be h1:tX0xh1l8nKSlzf29qZ5dd7BrDl1TMFaqo4X7jrMpQrk= -github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250916162815-94a54170a2be/go.mod h1:t1OgOfbkr5e0GnYb/8DVF7ipTBvnkTiaajshsX/lEGc= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250916151837-4aab51f61506 h1:VM1A3GoWpaWut/pJ8ahyqIIrcorA5ifB9LCiJvjmaSU= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250916151837-4aab51f61506/go.mod h1:BO46dGzGssyFxTteYsjW/x+LhP5QE8OQYqWfSCGxmrw= -github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250916093535-a95d6d012ab5 h1:+xyYZbMdO++xTvHccYwKVBknGDzWOX2l7f2dwGbRWg4= -github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250916093535-a95d6d012ab5/go.mod h1:gNLkZ4BQP50FeDAL0praoCRjsB8me4LDf1e9PSIm2ac= -github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250913143437-ca03bf1e106a h1:sKv2lK5LYt1kVK/S8VawMzpzVf2V9gv3sFX8a2tuIEw= -github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250913143437-ca03bf1e106a/go.mod h1:HbXLqb/ud09w9MmDqdoj0DoF3z78FGc0iCP/FPzGRaM= -github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327 h1:Suiu+GI++jNb3mGhggmtUFV0BhWHJAYGVH28caFBMns= -github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250916093004-20a0505e2327/go.mod h1:FTwd2VQgKqSngqCXVW3uZ9wqm50rIFHyVBBJi/6GFl4= -github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046 h1:RgLAlW1BAxs60piMF+uKRhab6D9u/e0Jb/XvALrwRjY= -github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250911092040-f829125f6046/go.mod h1:j9yGw80eA38kEvHEkx/BONqIhLnKFmpjAtyAB8S817E= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 h1:Ea+FZQOW0Eha1jorgSECFeqI9UrKz8TZlGnSM7X8Yf4= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182/go.mod h1:3Im8PFiRKPaOZpOuqYShJRN2O2pfjUuhDTUpW4KMHZw= -github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257 h1:vuPPSXGCKKCOPs3AV5wdViPOSsU6wqSHLGF4JJEEIZI= -github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20250915220807-7ac28d765257/go.mod h1:pnJ/UY5Qvr565W2wKQU8WRyR936VVCkjcieuTXKDHfo= -github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d h1:lSRMftk/MbN4qd8ihHh9ucdX4sfR/HUudEcy2h/BNhQ= -github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250916093250-82a76386143d/go.mod h1:7ZuNZNtwRYklS2H5E5YSjsHOI2sYbAl1AD+N0W/G+8A= -github.com/openstack-k8s-operators/lib-common/modules/ansible v0.6.1-0.20250922082314-c83d83092a04 h1:LJ8HkJVBvsO5sQSN+2u12wVE97KSrRpdVwc35LHGWJg= -github.com/openstack-k8s-operators/lib-common/modules/ansible v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:/t8UOevAIOdAu7SAkfwfyZj6p2pkuupl3mZJPMNqNOo= -github.com/openstack-k8s-operators/lib-common/modules/certmanager v0.6.1-0.20250922082314-c83d83092a04 h1:EoEo5NzPfaT53cHGm5FvWGk1sml3DW4iJ7cwnMNitYE= -github.com/openstack-k8s-operators/lib-common/modules/certmanager v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:AlyowFlFjybCGaCFSHCA8NHMGxb2ndSejYFJg5l0lXg= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250922082314-c83d83092a04 h1:JqJd39rF8rD9KIHmOEFbHP8UyYgttfuouj+kAFNtymU= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:SmKRclrynSSRCXSLOoWlETalJPvt62ObHsfW8iPvtDA= -github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250823121217-7e1cd2e3dd03 h1:tSMLVApQ4j4YJ56TGIYzaNo2Zh/ruDAY0wCcOEVKoIQ= -github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250823121217-7e1cd2e3dd03/go.mod h1:nachFP0Yicw/e8ZlqZzvnBN6w9kjMcnqrhaDw36PGjw= -github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250922082314-c83d83092a04 h1:j5P/ehO4bQ+VqNvqNiX7N/R8wnBweFy7MX685nh4mmY= -github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:WbDAhyvX2UTyK9LzYZKjRvEGdn2fsQJHUo5l2J5q/vg= -github.com/openstack-k8s-operators/lib-common/modules/test v0.6.1-0.20250922082314-c83d83092a04 h1:kz0qnjGhe72z0nzqD+WEm0TBOUdoKFaJmXJNZ5zxRRk= -github.com/openstack-k8s-operators/lib-common/modules/test v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:rYrAP48GcxkxIN0lZ3AuocBFTE8TRmh6bqvg7B9pGRU= -github.com/openstack-k8s-operators/manila-operator/api v0.6.1-0.20250919144954-99877452c35b h1:CsmxE47qBRAFve2mCe/SodjO/VrAGbYJ6UPQkcfa1XQ= -github.com/openstack-k8s-operators/manila-operator/api v0.6.1-0.20250919144954-99877452c35b/go.mod h1:YKBaz8jLEGmgUy6FLTm3aCRzlL1wTvdYQiOELvXrtbI= -github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250919091623-97dfb39624e3 h1:jLLHwgEbfglcSfJbqWP4vEqMs0xzu5QoubSpYDKOTIk= -github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250919091623-97dfb39624e3/go.mod h1:2I8YZyKvq2ACOnIBFpdUd9TdIaI2yeDu/9VC0HRDfPo= -github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20250916093251-7cfe04efd126 h1:N2n/iHM9w31XpxHOLU0gzRhYRPjpFN0Vd9F48SplL4E= -github.com/openstack-k8s-operators/neutron-operator/api v0.6.1-0.20250916093251-7cfe04efd126/go.mod h1:j4Dz5KVJbnkHZa2wNp4vvH5vzBGUSd+E8m4WDdyCqd4= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c h1:Mu7f4AagVqeSnn8dktHfSPKeaKOCuhTSc4B0yWMNAZ0= -github.com/openstack-k8s-operators/nova-operator/api v0.6.1-0.20250917121202-3d3857d13c4c/go.mod h1:TMosRCd2EszCD0kugIDUeXFymuZRnw+CicBwLmExYR4= -github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4 h1:FGLm70RGFTHA9jAxf5M8ADDjGyWRl9QSHNLVN3uy+Og= -github.com/openstack-k8s-operators/octavia-operator/api v0.6.1-0.20250916093536-0423d6aadfb4/go.mod h1:qFLvSjUjUAD5uS8m2yBhYO5X6ViIWxWF0qtYCaj+wo0= -github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52 h1:QuOy7xZzbIfPKDQ940r+z5fsqr3aTAdQFjDOXuFY2Gw= -github.com/openstack-k8s-operators/openstack-baremetal-operator/api v0.6.1-0.20250912113640-0e6ddd45ee52/go.mod h1:15x01xs3dolD9G/X+V3kW2EsE4a6/Z/hFgJHcN3Yg9Y= -github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5 h1:kjCoac5RqGN2m3Iw0+XmaiEwo/FuGB9MfWAeHT+6caI= -github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5/go.mod h1:gxQk8WOaA2lQ9oy4ZKXK35oKuD6pKo4Ce2XkUkFjkE4= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c h1:thTQEtjo25kEYW+woLiPpvByMmWkI/jhh+sWokJtLN4= -github.com/openstack-k8s-operators/placement-operator/api v0.6.1-0.20250905081434-85ee919b626c/go.mod h1:qs5IDS8g5krd05ts6sQ+37nP652K7bduJW90j1HMFcc= -github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d h1:0KCWljk2IEJ+aWNK+RiGpIdu51KPXrYA5RfyUcV4Mb4= -github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d/go.mod h1:6Mq2N/KtNFW20L+PQC5qkeK8R8UGadmGBXL8HDY6lcg= -github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764 h1:uhGPaufK6M4E8GpE/5hQ3dhvcDLfec1StPvUVcRKbY0= -github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250909184158-7873da060764/go.mod h1:ygMZ5eETT8vzs85/u/vkPGFxziRPXcp3G2TRBQnuV/E= -github.com/openstack-k8s-operators/test-operator/api v0.6.1-0.20250917084400-574547d2fb8e h1:IbD2qDPxOeelICnA4DHMMKxN95gNkx2PLWnr/1CrZtA= -github.com/openstack-k8s-operators/test-operator/api v0.6.1-0.20250917084400-574547d2fb8e/go.mod h1:hxq4jN9hQNJAKewb5oOchF3VrucA4q5msrkx9zln8q8= -github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250919081639-e7427981ed8c h1:7MP0Nakns0cAV7zCqjbrHxJQ7mnDU0rYuRWAQbU3RwM= -github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250919081639-e7427981ed8c/go.mod h1:d666c/fR+FvqA6f2TgsbxdPSRIM43ooUAO4AvcC+n5E= -======= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250929084617-b8b724a249e9 h1:WbY0iMJE4gk0AfBnt0WdIL6NdrQbuSUvtmEjeup5FEs= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250929084617-b8b724a249e9/go.mod h1:wJxERkmbVx2a0WGBax/fBbrYhAMSRGrP+rfDTNONlUs= github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250926111043-e3436cc7fde8 h1:qzOcj+IpIh2BGoeAJO0wt0sfeD4eUp0fw8WqeiTL3LM= @@ -212,13 +156,10 @@ github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.2025071 github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d/go.mod h1:6Mq2N/KtNFW20L+PQC5qkeK8R8UGadmGBXL8HDY6lcg= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250922191944-7d54e7c80282 h1:wrBO9Xe8CqXlZJNG8yuBOtVqebiJR+02sKPTMtNMi9w= github.com/openstack-k8s-operators/swift-operator/api v0.6.1-0.20250922191944-7d54e7c80282/go.mod h1:x47kL081iHPPLBL7AcNuX2ossjJP+xXO6RMgG21ATKM= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250926151751-fb90e2d5d545 h1:cscDXcjLvEwUsV4U6fPdMSB/M4k7CeuejOacINmwPnE= -github.com/openstack-k8s-operators/telemetry-operator/api v0.6.1-0.20250926151751-fb90e2d5d545/go.mod h1:nNPrAB/FKxbK8X0nyjSlbH9jNY3V5nWQ6+H5z/OkWuI= github.com/openstack-k8s-operators/test-operator/api v0.6.1-0.20250925100955-6778a4daa9df h1:uNZ9TxTWU/RTB+cr5K8K0AUAKfFQnqcwGRVXwnsYl2Q= github.com/openstack-k8s-operators/test-operator/api v0.6.1-0.20250925100955-6778a4daa9df/go.mod h1:sDB2pg4eNwFYRqp2u3C9KfXz1DGUW44JfybeDLHfy2c= github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250925120222-c0b444994d55 h1:Eq8IMNekzmAbe8mlGtsmCejXOSqb6AW9ieUM9KBMV+A= github.com/openstack-k8s-operators/watcher-operator/api v0.6.1-0.20250925120222-c0b444994d55/go.mod h1:cIeTQmrUXSxzHuv/W9hxMk02z5BT+4RJl9MdXX20BsA= ->>>>>>> main github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/pkg/openstack/telemetry.go b/pkg/openstack/telemetry.go index e0e391108..2dbba11da 100644 --- a/pkg/openstack/telemetry.go +++ b/pkg/openstack/telemetry.go @@ -394,11 +394,11 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont telemetry.Spec.Autoscaling.Aodh.EvaluatorImage = *version.Status.ContainerImages.AodhEvaluatorImage telemetry.Spec.Autoscaling.Aodh.NotifierImage = *version.Status.ContainerImages.AodhNotifierImage telemetry.Spec.Autoscaling.Aodh.ListenerImage = *version.Status.ContainerImages.AodhListenerImage - telemetry.Spec.CloudKitty.CloudKittyAPI.ContainerImage = *version.Status.ContainerImages.CloudKittyAPIImage - telemetry.Spec.CloudKitty.CloudKittyProc.ContainerImage = *version.Status.ContainerImages.CloudKittyProcImage telemetry.Spec.Ceilometer.KSMImage = *getImg(version.Status.ContainerImages.KsmImage, &missingImageDefault) telemetry.Spec.Ceilometer.MysqldExporterImage = *getImg(version.Status.ContainerImages.CeilometerMysqldExporterImage, &missingImageDefault) + telemetry.Spec.CloudKitty.CloudKittyAPI.ContainerImage = *getImg(version.Status.ContainerImages.CloudKittyAPIImage, &missingImageDefault) + telemetry.Spec.CloudKitty.CloudKittyProc.ContainerImage = *getImg(version.Status.ContainerImages.CloudKittyProcImage, &missingImageDefault) if telemetry.Spec.Ceilometer.Secret == "" { telemetry.Spec.Ceilometer.Secret = instance.Spec.Secret @@ -489,7 +489,7 @@ func TelemetryImageMatch(ctx context.Context, controlPlane *corev1beta1.OpenStac !stringPointersEqual(controlPlane.Status.ContainerImages.AodhAPIImage, version.Status.ContainerImages.AodhAPIImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.AodhEvaluatorImage, version.Status.ContainerImages.AodhEvaluatorImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.AodhNotifierImage, version.Status.ContainerImages.AodhNotifierImage) || - !stringPointersEqual(controlPlane.Status.ContainerImages.AodhListenerImage, version.Status.ContainerImages.AodhListenerImage) || + !stringPointersEqual(controlPlane.Status.ContainerImages.AodhListenerImage, version.Status.ContainerImages.AodhListenerImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.CloudKittyAPIImage, version.Status.ContainerImages.CloudKittyAPIImage) || !stringPointersEqual(controlPlane.Status.ContainerImages.CloudKittyProcImage, version.Status.ContainerImages.CloudKittyProcImage) { Log.Info("Telemetry images do not match") diff --git a/pkg/openstack/version.go b/pkg/openstack/version.go index 2b26e00c6..35e188cdf 100644 --- a/pkg/openstack/version.go +++ b/pkg/openstack/version.go @@ -41,8 +41,9 @@ func InitializeOpenStackVersionImageDefaults(ctx context.Context, envImages map[ fieldName += strings.ToUpper(matches[i])[0:1] fieldName += strings.ToLower(matches[i])[1:] } - // format API so we adhere to go linting standards + // format API and CloudKitty so we adhere to go linting standards fieldName = strings.ReplaceAll(fieldName, "Api", "API") + fieldName = strings.ReplaceAll(fieldName, "Cloudkitty", "CloudKitty") } //Log.Info(fmt.Sprintf("Initialize Field name: %s", fieldName)) field := d.FieldByName(fieldName) From 8c6915fb2d9a31d39b0eec1ded2a6c68549c5bac Mon Sep 17 00:00:00 2001 From: jlarriba Date: Wed, 1 Oct 2025 13:04:15 +0200 Subject: [PATCH 07/10] Fix errors with image names --- config/operator/default_images.yaml | 2 +- pkg/openstack/telemetry.go | 1 + pkg/openstack/version.go | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/config/operator/default_images.yaml b/config/operator/default_images.yaml index 6b06af231..095b0b98a 100644 --- a/config/operator/default_images.yaml +++ b/config/operator/default_images.yaml @@ -55,7 +55,7 @@ spec: value: quay.io/podified-antelope-centos9/openstack-cinder-volume:current-podified - name: RELATED_IMAGE_CLOUDKITTY_API_IMAGE_URL_DEFAULT value: quay.rdoproject.org/podified-master-centos10/openstack-cloudkitty-api:current - - name: RELATED_IMAGE_CLOUDKITTY_PROCESSOR_IMAGE_URL_DEFAULT + - name: RELATED_IMAGE_CLOUDKITTY_PROC_IMAGE_URL_DEFAULT value: quay.rdoproject.org/podified-master-centos10/openstack-cloudkitty-processor:current - name: RELATED_IMAGE_DESIGNATE_API_IMAGE_URL_DEFAULT value: quay.io/podified-antelope-centos9/openstack-designate-api:current-podified diff --git a/pkg/openstack/telemetry.go b/pkg/openstack/telemetry.go index 2dbba11da..878c12268 100644 --- a/pkg/openstack/telemetry.go +++ b/pkg/openstack/telemetry.go @@ -383,6 +383,7 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont telemetry.Spec.Ceilometer.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Ceilometer.Enabled) telemetry.Spec.Autoscaling.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Autoscaling.Enabled) + telemetry.Spec.CloudKitty.Enabled = ptr.To(*instance.Spec.Telemetry.Template.CloudKitty.Enabled) telemetry.Spec.Ceilometer.CentralImage = *version.Status.ContainerImages.CeilometerCentralImage telemetry.Spec.Ceilometer.ComputeImage = *version.Status.ContainerImages.CeilometerComputeImage diff --git a/pkg/openstack/version.go b/pkg/openstack/version.go index 35e188cdf..d178a3d37 100644 --- a/pkg/openstack/version.go +++ b/pkg/openstack/version.go @@ -131,9 +131,9 @@ func GetContainerImages(defaults *corev1beta1.ContainerDefaults, instance corev1 CinderAPIImage: getImg(instance.Spec.CustomContainerImages.CinderAPIImage, defaults.CinderAPIImage), CinderBackupImage: getImg(instance.Spec.CustomContainerImages.CinderBackupImage, defaults.CinderBackupImage), CinderSchedulerImage: getImg(instance.Spec.CustomContainerImages.CinderSchedulerImage, defaults.CinderSchedulerImage), - CloudKittyAPIImage: getImg(instance.Spec.CustomContainerImages.CloudKittyAPIImage, defaults.CloudKittyAPIImage), - CloudKittyProcImage: getImg(instance.Spec.CustomContainerImages.CloudKittyProcImage, defaults.CloudKittyProcImage), - DesignateAPIImage: getImg(instance.Spec.CustomContainerImages.DesignateAPIImage, defaults.DesignateAPIImage), + CloudKittyAPIImage: getImg(instance.Spec.CustomContainerImages.CloudKittyAPIImage, defaults.CloudKittyAPIImage), + CloudKittyProcImage: getImg(instance.Spec.CustomContainerImages.CloudKittyProcImage, defaults.CloudKittyProcImage), + DesignateAPIImage: getImg(instance.Spec.CustomContainerImages.DesignateAPIImage, defaults.DesignateAPIImage), DesignateBackendbind9Image: getImg(instance.Spec.CustomContainerImages.DesignateBackendbind9Image, defaults.DesignateBackendbind9Image), DesignateCentralImage: getImg(instance.Spec.CustomContainerImages.DesignateCentralImage, defaults.DesignateCentralImage), DesignateMdnsImage: getImg(instance.Spec.CustomContainerImages.DesignateMdnsImage, defaults.DesignateMdnsImage), From 28dd3665cc9e8416664bc5515e26ce42a31eef9e Mon Sep 17 00:00:00 2001 From: jlarriba Date: Thu, 2 Oct 2025 10:02:06 +0200 Subject: [PATCH 08/10] Use new version of Telemetry-Operator --- apis/go.mod | 2 +- apis/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apis/go.mod b/apis/go.mod index 5736c5293..079f7b1c7 100644 --- a/apis/go.mod +++ b/apis/go.mod @@ -126,4 +126,4 @@ replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-oper replace k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20250627150254-e9823e99808e //allow-merging // Test CloudKitty -replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 //allow-merging +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20251002075820-bed9eb4c0105 //allow-merging diff --git a/apis/go.sum b/apis/go.sum index 86366b34c..7c444dbab 100644 --- a/apis/go.sum +++ b/apis/go.sum @@ -64,8 +64,8 @@ github.com/gophercloud/gophercloud v1.14.1 h1:DTCNaTVGl8/cFu58O1JwWgis9gtISAFONq github.com/gophercloud/gophercloud v1.14.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 h1:LDZKByr7fpYLZydCGiY3hYUJerC+axk0VvLYKSWEqIg= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872/go.mod h1:v4Stbc6YFVR3r7ofSuErpTJ9Ki2Ka9Fs8S+dgiNqx60= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20251002075820-bed9eb4c0105 h1:bTNbiwut7yXBio/YZQrbE0Xrl7hBWBar76sEWo8H+P4= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20251002075820-bed9eb4c0105/go.mod h1:v4Stbc6YFVR3r7ofSuErpTJ9Ki2Ka9Fs8S+dgiNqx60= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/go.mod b/go.mod index 5bc05759a..dc96d12b5 100644 --- a/go.mod +++ b/go.mod @@ -137,4 +137,4 @@ replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-oper replace k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20250627150254-e9823e99808e //allow-merging // Test CloudKitty -replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 //allow-merging +replace github.com/openstack-k8s-operators/telemetry-operator/api => github.com/jlarriba/telemetry-operator/api v0.1.1-0.20251002075820-bed9eb4c0105 //allow-merging diff --git a/go.sum b/go.sum index 37e1c8534..6fe1ce14f 100644 --- a/go.sum +++ b/go.sum @@ -66,8 +66,8 @@ github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSAS github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872 h1:LDZKByr7fpYLZydCGiY3hYUJerC+axk0VvLYKSWEqIg= -github.com/jlarriba/telemetry-operator/api v0.1.1-0.20250930133019-ac359d938872/go.mod h1:v4Stbc6YFVR3r7ofSuErpTJ9Ki2Ka9Fs8S+dgiNqx60= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20251002075820-bed9eb4c0105 h1:bTNbiwut7yXBio/YZQrbE0Xrl7hBWBar76sEWo8H+P4= +github.com/jlarriba/telemetry-operator/api v0.1.1-0.20251002075820-bed9eb4c0105/go.mod h1:v4Stbc6YFVR3r7ofSuErpTJ9Ki2Ka9Fs8S+dgiNqx60= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= From d56c0587cdb93ac60258a08fdd9f86f05d9767ee Mon Sep 17 00:00:00 2001 From: Jaromir Wysoglad Date: Wed, 22 Oct 2025 09:36:41 -0400 Subject: [PATCH 09/10] Fix potential panic It's possible the cloudkitty enabled field will be nil. Especially after an upgrade. Check the field before dereferencing and use false if it's nil. Use the same check for Autoscaling and Ceilometer enabled field just in case. We might be able to simplify to what's described in the TODO comment, but as noted there, the code wouldn't be 100% equivalent. And I'm not sure if there was a reason to have the code like this. I also don't want to risk destroying a working solution because of an edgecase I didn't think of. --- pkg/openstack/telemetry.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/pkg/openstack/telemetry.go b/pkg/openstack/telemetry.go index 878c12268..13bbd0299 100644 --- a/pkg/openstack/telemetry.go +++ b/pkg/openstack/telemetry.go @@ -381,9 +381,26 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont instance.Spec.Telemetry.Template.CloudKitty.CloudKittyAPI.DeepCopyInto(&telemetry.Spec.CloudKitty.CloudKittyAPI.CloudKittyAPITemplateCore) instance.Spec.Telemetry.Template.CloudKitty.CloudKittyProc.DeepCopyInto(&telemetry.Spec.CloudKitty.CloudKittyProc.CloudKittyProcTemplateCore) - telemetry.Spec.Ceilometer.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Ceilometer.Enabled) - telemetry.Spec.Autoscaling.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Autoscaling.Enabled) - telemetry.Spec.CloudKitty.Enabled = ptr.To(*instance.Spec.Telemetry.Template.CloudKitty.Enabled) + // TODO: investigate if the following could be simplified to + // telemetry.Spec..Enabled = instance.Spec.Telemetry.Template..Enabled + // With current implementation we essentially create a copy of the bools and point to that, so the + // resulting pointers in telemetry and instance objects are different (different addresses) + // but once dereferenced, they point to the same true / false value. Do we need to do that? + if instance.Spec.Telemetry.Template.Ceilometer.Enabled == nil { + telemetry.Spec.Ceilometer.Enabled = ptr.To(false) + } else { + telemetry.Spec.Ceilometer.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Ceilometer.Enabled) + } + if instance.Spec.Telemetry.Template.Autoscaling.Enabled == nil { + telemetry.Spec.Autoscaling.Enabled = ptr.To(false) + } else { + telemetry.Spec.Autoscaling.Enabled = ptr.To(*instance.Spec.Telemetry.Template.Autoscaling.Enabled) + } + if instance.Spec.Telemetry.Template.CloudKitty.Enabled == nil { + telemetry.Spec.CloudKitty.Enabled = ptr.To(false) + } else { + telemetry.Spec.CloudKitty.Enabled = ptr.To(*instance.Spec.Telemetry.Template.CloudKitty.Enabled) + } telemetry.Spec.Ceilometer.CentralImage = *version.Status.ContainerImages.CeilometerCentralImage telemetry.Spec.Ceilometer.ComputeImage = *version.Status.ContainerImages.CeilometerComputeImage From f2d6cc64f58cfb2e8eda7b65c2d44cc4089440db Mon Sep 17 00:00:00 2001 From: Jaromir Wysoglad Date: Thu, 23 Oct 2025 05:34:07 -0400 Subject: [PATCH 10/10] [OSPRH-20258] Propagate storageClass to CK When the StorageClass is empty in the CloudKitty section of the oscp CR, propagate the oscp.spec.storageClass there. --- pkg/openstack/telemetry.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/openstack/telemetry.go b/pkg/openstack/telemetry.go index 878c12268..29a029d1e 100644 --- a/pkg/openstack/telemetry.go +++ b/pkg/openstack/telemetry.go @@ -415,6 +415,9 @@ func ReconcileTelemetry(ctx context.Context, instance *corev1beta1.OpenStackCont if telemetry.Spec.Autoscaling.HeatInstance == "" { telemetry.Spec.Autoscaling.HeatInstance = heatName } + if telemetry.Spec.CloudKitty.StorageClass == "" { + telemetry.Spec.CloudKitty.StorageClass = instance.Spec.StorageClass + } err := controllerutil.SetControllerReference(helper.GetBeforeObject(), telemetry, helper.GetScheme()) if err != nil {