From 18a90e20c9fa1ad6f64bc3e1d73a7f52774d8fc6 Mon Sep 17 00:00:00 2001 From: Martin Schuppert Date: Wed, 16 Apr 2025 15:56:37 +0200 Subject: [PATCH 1/3] bump to golang 1.24 * bump in go.mod (base and api) * bump go-toolset in Dockerfile * bump in github jobs ('.github/workflows') * Bump the golangci-lint version in the .pre-commit-config.yaml to v2.4.0 * Bump build_root_image in .ci-operator.yaml to ci-build-root-golang-1.24-sdk-1.31 Also fixes golangci-lint reported issues for new v2.4.0 version. Jira: OSPRH-12935 Signed-off-by: Martin Schuppert Co-authored-by: Claude (Anthropic) claude@anthropic.com --- .ci-operator.yaml | 2 +- .github/workflows/build-octavia-operator.yaml | 2 +- .github/workflows/force-bump-pr-manual.yaml | 1 + .../workflows/force-bump-pr-scheduled.yaml | 1 + .golangci.yaml | 11 +++- .pre-commit-config.yaml | 2 +- Dockerfile | 2 +- Makefile | 5 +- api/go.mod | 2 +- controllers/amphoracontroller_controller.go | 22 ++++---- controllers/octavia_controller.go | 26 +++++----- controllers/octaviaapi_controller.go | 12 ++--- controllers/octaviarsyslog_controller.go | 13 ++--- go.mod | 2 +- main.go | 1 + pkg/amphoracontrollers/daemonset.go | 1 + pkg/amphoracontrollers/flavors.go | 2 +- pkg/amphoracontrollers/volumes.go | 2 + pkg/octavia/amphora_certs.go | 25 +++++----- pkg/octavia/amphora_ssh.go | 22 ++++---- pkg/octavia/client.go | 31 +++++++----- pkg/octavia/const.go | 2 +- pkg/octavia/errors.go | 50 +++++++++++++++++++ pkg/octavia/image_upload_deployment.go | 3 +- pkg/octavia/images.go | 7 ++- pkg/octavia/lb_mgmt_network.go | 9 ++-- pkg/octavia/network_consts.go | 17 +++---- pkg/octavia/network_parameters.go | 8 +-- pkg/octavia/securitycontext.go | 3 ++ pkg/octaviaapi/deployment.go | 1 + pkg/octaviarsyslog/daemonset.go | 1 + pkg/octaviarsyslog/volumes.go | 2 + tests/functional/api_fixture.go | 12 +++-- tests/functional/base_test.go | 8 +-- tests/functional/neutron_api_fixture.go | 41 ++++++++------- tests/functional/nova_api_fixture.go | 14 ++++-- tests/functional/suite_test.go | 4 +- 37 files changed, 234 insertions(+), 135 deletions(-) create mode 100644 pkg/octavia/errors.go diff --git a/.ci-operator.yaml b/.ci-operator.yaml index 810dbb51..1a05e606 100644 --- a/.ci-operator.yaml +++ b/.ci-operator.yaml @@ -1,4 +1,4 @@ build_root_image: name: tools namespace: openstack-k8s-operators - tag: ci-build-root-golang-1.21-sdk-1.31 + tag: ci-build-root-golang-1.24-sdk-1.31 diff --git a/.github/workflows/build-octavia-operator.yaml b/.github/workflows/build-octavia-operator.yaml index 739388bf..7fb110ca 100644 --- a/.github/workflows/build-octavia-operator.yaml +++ b/.github/workflows/build-octavia-operator.yaml @@ -15,7 +15,7 @@ jobs: uses: openstack-k8s-operators/openstack-k8s-operators-ci/.github/workflows/reusable-build-operator.yaml@main with: operator_name: octavia - go_version: 1.21.x + go_version: 1.24.x operator_sdk_version: 1.31.0 secrets: IMAGENAMESPACE: ${{ secrets.IMAGENAMESPACE }} diff --git a/.github/workflows/force-bump-pr-manual.yaml b/.github/workflows/force-bump-pr-manual.yaml index 1c3fc63d..d35153ab 100644 --- a/.github/workflows/force-bump-pr-manual.yaml +++ b/.github/workflows/force-bump-pr-manual.yaml @@ -9,5 +9,6 @@ jobs: with: operator_name: octavia branch_name: ${{ github.ref_name }} + custom_image: quay.io/openstack-k8s-operators/openstack-k8s-operators-ci-build-tools:golang-1.24-sdk-1.31 secrets: FORCE_BUMP_PULL_REQUEST_PAT: ${{ secrets.FORCE_BUMP_PULL_REQUEST_PAT }} diff --git a/.github/workflows/force-bump-pr-scheduled.yaml b/.github/workflows/force-bump-pr-scheduled.yaml index b3a11bbb..3e524ba1 100644 --- a/.github/workflows/force-bump-pr-scheduled.yaml +++ b/.github/workflows/force-bump-pr-scheduled.yaml @@ -10,5 +10,6 @@ jobs: uses: openstack-k8s-operators/openstack-k8s-operators-ci/.github/workflows/force-bump-branches.yaml@main with: operator_name: octavia + custom_image: quay.io/openstack-k8s-operators/openstack-k8s-operators-ci-build-tools:golang-1.24-sdk-1.31 secrets: FORCE_BUMP_PULL_REQUEST_PAT: ${{ secrets.FORCE_BUMP_PULL_REQUEST_PAT }} diff --git a/.golangci.yaml b/.golangci.yaml index 937a37ea..bfdf6541 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,3 +1,5 @@ +version: 2 + linters: # Enable specific linter # https://golangci-lint.run/usage/linters/#enabled-by-default @@ -5,7 +7,14 @@ linters: - errorlint - revive - ginkgolinter - - gofmt - govet + - gosec + - errname + - err113 + +formatters: + enable: + - gofmt + run: timeout: 5m diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 52865f37..7ec53e60 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -73,7 +73,7 @@ repos: # E012: here doc didn't end before EOF - repo: https://github.com/golangci/golangci-lint - rev: v1.59.1 + rev: v2.4.0 hooks: - id: golangci-lint-full args: ["-v"] diff --git a/Dockerfile b/Dockerfile index 625b0d9d..8351ad9d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG GOLANG_BUILDER=registry.access.redhat.com/ubi9/go-toolset:1.21 +ARG GOLANG_BUILDER=registry.access.redhat.com/ubi9/go-toolset:1.24 ARG OPERATOR_BASE_IMAGE=registry.access.redhat.com/ubi9/ubi-minimal:latest # Build the manager binary diff --git a/Makefile b/Makefile index 3b88ddee..6b0e7a28 100644 --- a/Makefile +++ b/Makefile @@ -68,7 +68,7 @@ endif SHELL = /usr/bin/env bash -o pipefail .SHELLFLAGS = -ec -GOTOOLCHAIN_VERSION ?= go1.21.0 +GOTOOLCHAIN_VERSION ?= go1.24.0 .PHONY: all all: build @@ -115,9 +115,10 @@ tidy: ## Run go mod tidy on every mod file in the repo go mod tidy cd ./api && go mod tidy +GOLANGCI_LINT_VERSION ?= v2.4.0 .PHONY: golangci-lint golangci-lint: vet - test -s $(LOCALBIN)/golangci-lint || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.59.1 + test -s $(LOCALBIN)/golangci-lint || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s $(GOLANGCI_LINT_VERSION) $(LOCALBIN)/golangci-lint run --fix .PHONY: test diff --git a/api/go.mod b/api/go.mod index b9f1a275..d73095ec 100644 --- a/api/go.mod +++ b/api/go.mod @@ -1,6 +1,6 @@ module github.com/openstack-k8s-operators/octavia-operator/api -go 1.21 +go 1.24 require ( github.com/onsi/ginkgo/v2 v2.20.1 diff --git a/controllers/amphoracontroller_controller.go b/controllers/amphoracontroller_controller.go index 381d265a..9d48e850 100644 --- a/controllers/amphoracontroller_controller.go +++ b/controllers/amphoracontroller_controller.go @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package controllers contains the Kubernetes controllers for managing Octavia operator resources package controllers import ( @@ -99,7 +100,7 @@ func (r *OctaviaAmphoraControllerReconciler) Reconcile(ctx context.Context, req Log := r.GetLogger(ctx) instance := &octaviav1.OctaviaAmphoraController{} - err := r.Client.Get(ctx, req.NamespacedName, instance) + err := r.Get(ctx, req.NamespacedName, instance) if err != nil { if k8s_errors.IsNotFound(err) { // Request object not found, could have been deleted after reconcile request. @@ -244,7 +245,7 @@ func (r *OctaviaAmphoraControllerReconciler) reconcileNormal(ctx context.Context // Prepare NetworkAttachments first, it must be done before generating the // configuration as the config uses IP addresses of the attachments. if len(instance.Spec.NetworkAttachments) == 0 { - err := fmt.Errorf("NetworkAttachments list is empty") + err := octavia.ErrNetworkAttachmentsEmpty instance.Status.Conditions.Set(condition.FalseCondition( condition.NetworkAttachmentsReadyCondition, condition.ErrorReason, @@ -289,7 +290,7 @@ func (r *OctaviaAmphoraControllerReconciler) reconcileNormal(ctx context.Context } serviceLabels := map[string]string{ - common.AppSelector: instance.ObjectMeta.Name, + common.AppSelector: instance.Name, } // Handle secrets @@ -323,7 +324,7 @@ func (r *OctaviaAmphoraControllerReconciler) reconcileNormal(ctx context.Context condition.TLSInputReadyCondition, condition.RequestedReason, condition.SeverityInfo, - fmt.Sprintf(condition.TLSInputReadyWaitingMessage, instance.Spec.TLS.CaBundleSecretName))) + condition.TLSInputReadyWaitingMessage, instance.Spec.TLS.CaBundleSecretName)) return ctrl.Result{}, nil } instance.Status.Conditions.Set(condition.FalseCondition( @@ -407,7 +408,7 @@ func (r *OctaviaAmphoraControllerReconciler) reconcileNormal(ctx context.Context instance.Name, // finalizer &instance.Status.Conditions, labels.GetAppLabelSelector( - instance.ObjectMeta.Name, + instance.Name, ), ) if err != nil { @@ -475,7 +476,7 @@ func (r *OctaviaAmphoraControllerReconciler) reconcileNormal(ctx context.Context if networkReady { instance.Status.Conditions.MarkTrue(condition.NetworkAttachmentsReadyCondition, condition.NetworkAttachmentsReadyMessage) } else { - err := fmt.Errorf("not all pods have interfaces with ips as configured in NetworkAttachments: %s", instance.Spec.NetworkAttachments) + err := fmt.Errorf("%w: %s", octavia.ErrNetworkAttachmentConfig, instance.Spec.NetworkAttachments) instance.Status.Conditions.Set(condition.FalseCondition( condition.NetworkAttachmentsReadyCondition, condition.ErrorReason, @@ -512,7 +513,7 @@ func (r *OctaviaAmphoraControllerReconciler) generateServiceSecrets( ) error { Log := r.GetLogger(ctx) Log.Info(fmt.Sprintf("generating service secret for %s (%s)", instance.Name, instance.Kind)) - cmLabels := labels.GetLabels(instance, labels.GetGroupLabel(instance.ObjectMeta.Name), map[string]string{}) + cmLabels := labels.GetLabels(instance, labels.GetGroupLabel(instance.Name), map[string]string{}) ospSecret, _, err := oko_secret.GetSecret(ctx, helper, instance.Spec.Secret, instance.Namespace) if err != nil { @@ -647,8 +648,7 @@ func (r *OctaviaAmphoraControllerReconciler) generateServiceSecrets( condition.RequestedReason, condition.SeverityInfo, condition.InputReadyWaitingMessage)) - return fmt.Errorf("OpenStack server CA passphrase secret %s not found", - serverCAPassSecretName) + return fmt.Errorf("%w: %s", octavia.ErrOpenstackServerCAPassphraseNotFound, serverCAPassSecretName) } instance.Status.Conditions.Set(condition.FalseCondition( condition.InputReadyCondition, @@ -887,7 +887,7 @@ func (r *OctaviaAmphoraControllerReconciler) findObjectsForSrc(ctx context.Conte FieldSelector: fields.OneTermEqualSelector(field, src.GetName()), Namespace: src.GetNamespace(), } - err := r.Client.List(ctx, crList, listOps) + err := r.List(ctx, crList, listOps) if err != nil { Log.Error(err, fmt.Sprintf("listing %s for field: %s - %s", crList.GroupVersionKind().Kind, field, src.GetNamespace())) return requests @@ -919,7 +919,7 @@ func (r *OctaviaAmphoraControllerReconciler) findObjectForSrc(ctx context.Contex listOps := &client.ListOptions{ Namespace: src.GetNamespace(), } - err := r.Client.List(ctx, crList, listOps) + err := r.List(ctx, crList, listOps) if err != nil { Log.Error(err, fmt.Sprintf("listing %s for namespace: %s", crList.GroupVersionKind().Kind, src.GetNamespace())) return requests diff --git a/controllers/octavia_controller.go b/controllers/octavia_controller.go index 58b283e6..58da508c 100644 --- a/controllers/octavia_controller.go +++ b/controllers/octavia_controller.go @@ -123,7 +123,7 @@ func (r *OctaviaReconciler) Reconcile(ctx context.Context, req ctrl.Request) (re // Fetch the Octavia instance instance := &octaviav1.Octavia{} - err := r.Client.Get(ctx, req.NamespacedName, instance) + err := r.Get(ctx, req.NamespacedName, instance) if err != nil { if k8s_errors.IsNotFound(err) { // Request object not found, could have been deleted after reconcile request. @@ -236,7 +236,7 @@ func (r *OctaviaReconciler) Reconcile(ctx context.Context, req ctrl.Request) (re // fields to index to reconcile when change const ( passwordSecretField = ".spec.secret" - caBundleSecretNameField = ".spec.tls.caBundleSecretName" + caBundleSecretNameField = ".spec.tls.caBundleSecretName" // #nosec G101 -- Field path, not a credential tlsAPIInternalField = ".spec.tls.api.internal.secretName" tlsAPIPublicField = ".spec.tls.api.public.secretName" tlsOvnField = ".spec.tls.ovn.secretName" @@ -789,7 +789,7 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav ObjectMeta: metav1.ObjectMeta{ Name: octavia.HmConfigMap, Namespace: instance.GetNamespace(), - Labels: labels.GetLabels(instance, labels.GetGroupLabel(instance.ObjectMeta.Name), map[string]string{}), + Labels: labels.GetLabels(instance, labels.GetGroupLabel(instance.Name), map[string]string{}), }, Data: make(map[string]string), } @@ -879,7 +879,7 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav updatedMap[portName] = hmPort } - mapLabels := labels.GetLabels(instance, labels.GetGroupLabel(instance.ObjectMeta.Name), map[string]string{}) + mapLabels := labels.GetLabels(instance, labels.GetGroupLabel(instance.Name), map[string]string{}) _, err = controllerutil.CreateOrPatch(ctx, helper.GetClient(), nodeConfigMap, func() error { nodeConfigMap.Labels = util.MergeStringMaps(nodeConfigMap.Labels, mapLabels) nodeConfigMap.Data = updatedMap @@ -922,7 +922,7 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav instance.Status.Conditions.Set(condition.UnknownCondition( amphoraControllerReadyCondition(octaviav1.HealthManager), condition.InitReason, - amphoraControllerErrorMessage(octaviav1.HealthManager), + "%s", amphoraControllerErrorMessage(octaviav1.HealthManager), )) } else { instance.Status.OctaviaHealthManagerReadyCount = octaviaHealthManager.Status.ReadyCount @@ -958,7 +958,7 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav instance.Status.Conditions.Set(condition.UnknownCondition( amphoraControllerReadyCondition(octaviav1.Worker), condition.InitReason, - amphoraControllerErrorMessage(octaviav1.Worker), + "%s", amphoraControllerErrorMessage(octaviav1.Worker), )) } else { instance.Status.OctaviaRsyslogReadyCount = octaviaRsyslog.Status.ReadyCount @@ -987,7 +987,7 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav instance.Status.Conditions.Set(condition.UnknownCondition( amphoraControllerReadyCondition(octaviav1.Housekeeping), condition.InitReason, - amphoraControllerErrorMessage(octaviav1.Housekeeping), + "%s", amphoraControllerErrorMessage(octaviav1.Housekeeping), )) } else { instance.Status.OctaviaHousekeepingReadyCount = octaviaHousekeeping.Status.ReadyCount @@ -1016,7 +1016,7 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav instance.Status.Conditions.Set(condition.UnknownCondition( amphoraControllerReadyCondition(octaviav1.Worker), condition.InitReason, - amphoraControllerErrorMessage(octaviav1.Worker), + "%s", amphoraControllerErrorMessage(octaviav1.Worker), )) } else { instance.Status.OctaviaWorkerReadyCount = octaviaWorker.Status.ReadyCount @@ -1382,11 +1382,11 @@ func (r *OctaviaReconciler) getLocalImageURLs( // Get the list of images and their hashes listURL := fmt.Sprintf("%s/octavia-amphora-image.sha256sum", endpoint) - resp, err := http.Get(listURL) + resp, err := http.Get(listURL) // #nosec G107 -- URL is constructed from trusted configuration parameter if err != nil { return nil, err } - defer resp.Body.Close() + defer func() { _ = resp.Body.Close() }() scanner := bufio.NewScanner(resp.Body) ret := []octavia.AmphoraImage{} for scanner.Scan() { @@ -1423,7 +1423,7 @@ func (r *OctaviaReconciler) generateServiceSecrets( cmLabels := labels.GetLabels(instance, labels.GetGroupLabel(octavia.ServiceName), map[string]string{}) var tlsCfg *tls.Service - if instance.Spec.OctaviaAPI.TLS.Ca.CaBundleSecretName != "" { + if instance.Spec.OctaviaAPI.TLS.CaBundleSecretName != "" { tlsCfg = &tls.Service{} } @@ -1745,7 +1745,7 @@ func (r *OctaviaReconciler) checkOctaviaAPIGeneration( listOpts := []client.ListOption{ client.InNamespace(instance.Namespace), } - if err := r.Client.List(context.Background(), api, listOpts...); err != nil { + if err := r.List(context.Background(), api, listOpts...); err != nil { Log.Error(err, "Unable to retrieve OctaviaAPI %w") return false, err } @@ -1767,7 +1767,7 @@ func (r *OctaviaReconciler) checkAmphoraGeneration( listOpts := []client.ListOption{ client.InNamespace(instance.Namespace), } - if err := r.Client.List(context.Background(), amph, listOpts...); err != nil { + if err := r.List(context.Background(), amph, listOpts...); err != nil { Log.Error(err, "Unable to retrieve OctaviaAPI %w") return false, err } diff --git a/controllers/octaviaapi_controller.go b/controllers/octaviaapi_controller.go index 843de296..170404d4 100644 --- a/controllers/octaviaapi_controller.go +++ b/controllers/octaviaapi_controller.go @@ -108,7 +108,7 @@ func (r *OctaviaAPIReconciler) Reconcile(ctx context.Context, req ctrl.Request) // Fetch the OctaviaAPI instance instance := &octaviav1.OctaviaAPI{} - err := r.Client.Get(ctx, req.NamespacedName, instance) + err := r.Get(ctx, req.NamespacedName, instance) if err != nil { if k8s_errors.IsNotFound(err) { // Request object not found, could have been deleted after reconcile request. @@ -335,7 +335,7 @@ func (r *OctaviaAPIReconciler) findObjectsForSrc(ctx context.Context, src client FieldSelector: fields.OneTermEqualSelector(field, src.GetName()), Namespace: src.GetNamespace(), } - err := r.Client.List(ctx, crList, listOps) + err := r.List(ctx, crList, listOps) if err != nil { Log.Error(err, fmt.Sprintf("listing %s for field: %s - %s", crList.GroupVersionKind().Kind, field, src.GetNamespace())) return requests @@ -367,7 +367,7 @@ func (r *OctaviaAPIReconciler) findObjectForSrc(ctx context.Context, src client. listOps := &client.ListOptions{ Namespace: src.GetNamespace(), } - err := r.Client.List(ctx, crList, listOps) + err := r.List(ctx, crList, listOps) if err != nil { Log.Error(err, fmt.Sprintf("listing %s for namespace: %s", crList.GroupVersionKind().Kind, src.GetNamespace())) return requests @@ -668,7 +668,7 @@ func (r *OctaviaAPIReconciler) reconcileNormal(ctx context.Context, instance *oc condition.TLSInputReadyCondition, condition.RequestedReason, condition.SeverityInfo, - fmt.Sprintf(condition.TLSInputReadyWaitingMessage, instance.Spec.TLS.CaBundleSecretName))) + condition.TLSInputReadyWaitingMessage, instance.Spec.TLS.CaBundleSecretName)) return ctrl.Result{}, nil } instance.Status.Conditions.Set(condition.FalseCondition( @@ -692,7 +692,7 @@ func (r *OctaviaAPIReconciler) reconcileNormal(ctx context.Context, instance *oc condition.TLSInputReadyCondition, condition.RequestedReason, condition.SeverityInfo, - fmt.Sprintf(condition.TLSInputReadyWaitingMessage, err.Error()))) + condition.TLSInputReadyWaitingMessage, err.Error())) return ctrl.Result{}, nil } instance.Status.Conditions.Set(condition.FalseCondition( @@ -895,7 +895,7 @@ func (r *OctaviaAPIReconciler) reconcileNormal(ctx context.Context, instance *oc if networkReady { instance.Status.Conditions.MarkTrue(condition.NetworkAttachmentsReadyCondition, condition.NetworkAttachmentsReadyMessage) } else { - err := fmt.Errorf("not all pods have interfaces with ips as configured in NetworkAttachments: %s", instance.Spec.NetworkAttachments) + err := fmt.Errorf("%w: %s", octavia.ErrNetworkAttachmentConfig, instance.Spec.NetworkAttachments) instance.Status.Conditions.Set(condition.FalseCondition( condition.NetworkAttachmentsReadyCondition, condition.ErrorReason, diff --git a/controllers/octaviarsyslog_controller.go b/controllers/octaviarsyslog_controller.go index 0f6fb3d5..534a8cfe 100644 --- a/controllers/octaviarsyslog_controller.go +++ b/controllers/octaviarsyslog_controller.go @@ -39,6 +39,7 @@ import ( topologyv1 "github.com/openstack-k8s-operators/infra-operator/apis/topology/v1beta1" oko_secret "github.com/openstack-k8s-operators/lib-common/modules/common/secret" octaviav1 "github.com/openstack-k8s-operators/octavia-operator/api/v1beta1" + "github.com/openstack-k8s-operators/octavia-operator/pkg/octavia" "github.com/openstack-k8s-operators/octavia-operator/pkg/octaviarsyslog" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" @@ -82,7 +83,7 @@ func (r *OctaviaRsyslogReconciler) Reconcile(ctx context.Context, req ctrl.Reque Log := r.GetLogger(ctx) instance := &octaviav1.OctaviaRsyslog{} - err := r.Client.Get(ctx, req.NamespacedName, instance) + err := r.Get(ctx, req.NamespacedName, instance) if err != nil { if k8s_errors.IsNotFound(err) { // Request object not found, could have been deleted after reconcile request. @@ -221,7 +222,7 @@ func (r *OctaviaRsyslogReconciler) reconcileNormal(ctx context.Context, instance // Prepare NetworkAttachments first, it must be done before generating the // configuration as the config uses IP addresses of the attachments. if len(instance.Spec.NetworkAttachments) == 0 { - err := fmt.Errorf("NetworkAttachments list is empty") + err := octavia.ErrNetworkAttachmentsEmpty instance.Status.Conditions.Set(condition.FalseCondition( condition.NetworkAttachmentsReadyCondition, condition.ErrorReason, @@ -266,7 +267,7 @@ func (r *OctaviaRsyslogReconciler) reconcileNormal(ctx context.Context, instance } serviceLabels := map[string]string{ - common.AppSelector: instance.ObjectMeta.Name, + common.AppSelector: instance.Name, } // Handle secrets @@ -388,7 +389,7 @@ func (r *OctaviaRsyslogReconciler) reconcileNormal(ctx context.Context, instance if networkReady { instance.Status.Conditions.MarkTrue(condition.NetworkAttachmentsReadyCondition, condition.NetworkAttachmentsReadyMessage) } else { - err := fmt.Errorf("not all pods have interfaces with ips as configured in NetworkAttachments: %s", instance.Spec.NetworkAttachments) + err := fmt.Errorf("%w: %s", octavia.ErrNetworkAttachmentConfig, instance.Spec.NetworkAttachments) instance.Status.Conditions.Set(condition.FalseCondition( condition.NetworkAttachmentsReadyCondition, condition.ErrorReason, @@ -424,7 +425,7 @@ func (r *OctaviaRsyslogReconciler) generateServiceSecrets( ) error { Log := r.GetLogger(ctx) Log.Info(fmt.Sprintf("generating service config map for %s (%s)", instance.Name, instance.Kind)) - cmLabels := labels.GetLabels(instance, labels.GetGroupLabel(instance.ObjectMeta.Name), map[string]string{}) + cmLabels := labels.GetLabels(instance, labels.GetGroupLabel(instance.Name), map[string]string{}) customData := map[string]string{} for key, data := range instance.Spec.DefaultConfigOverwrite { @@ -527,7 +528,7 @@ func (r *OctaviaRsyslogReconciler) findObjectsForSrc(ctx context.Context, src cl FieldSelector: fields.OneTermEqualSelector(field, src.GetName()), Namespace: src.GetNamespace(), } - err := r.Client.List(ctx, crList, listOps) + err := r.List(ctx, crList, listOps) if err != nil { Log.Error(err, fmt.Sprintf("listing %s for field: %s - %s", crList.GroupVersionKind().Kind, field, src.GetNamespace())) return requests diff --git a/go.mod b/go.mod index a22297ba..7f8dc719 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/openstack-k8s-operators/octavia-operator -go 1.21 +go 1.24 require ( github.com/go-logr/logr v1.4.3 diff --git a/main.go b/main.go index 98538464..fd70a3a7 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package main provides the entry point for the Octavia operator package main import ( diff --git a/pkg/amphoracontrollers/daemonset.go b/pkg/amphoracontrollers/daemonset.go index 408f02b6..1af69a43 100644 --- a/pkg/amphoracontrollers/daemonset.go +++ b/pkg/amphoracontrollers/daemonset.go @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package amphoracontrollers provides controllers for managing Octavia amphora instances and resources package amphoracontrollers import ( diff --git a/pkg/amphoracontrollers/flavors.go b/pkg/amphoracontrollers/flavors.go index db626992..858d9caa 100644 --- a/pkg/amphoracontrollers/flavors.go +++ b/pkg/amphoracontrollers/flavors.go @@ -290,7 +290,7 @@ func ensureFlavors(osclient *openstack.OpenStack, log *logr.Logger, instance *oc flavorSuccess = true } if !flavorSuccess { - return "", fmt.Errorf("none of the Octavia flavors could be configured") + return "", octavia.ErrOctaviaFlavorsConfig } return defaultFlavorID, nil } diff --git a/pkg/amphoracontrollers/volumes.go b/pkg/amphoracontrollers/volumes.go index 176441c1..50221b12 100644 --- a/pkg/amphoracontrollers/volumes.go +++ b/pkg/amphoracontrollers/volumes.go @@ -30,6 +30,7 @@ var ( configMode int32 = 0644 ) +// GetVolumes returns the volumes required for amphora controller pods func GetVolumes(name string) []corev1.Volume { var config0640AccessMode int32 = 0640 return append( @@ -48,6 +49,7 @@ func GetVolumes(name string) []corev1.Volume { ) } +// GetInitVolumeMounts returns the volume mounts for init containers in amphora controller pods func GetInitVolumeMounts() []corev1.VolumeMount { return append( octavia.GetInitVolumeMounts(), diff --git a/pkg/octavia/amphora_certs.go b/pkg/octavia/amphora_certs.go index 31a246e2..b13ea4f0 100644 --- a/pkg/octavia/amphora_certs.go +++ b/pkg/octavia/amphora_certs.go @@ -47,6 +47,7 @@ var ( ) const ( + // OctaviaCertSecretVersion defines the version of the certificate secret format OctaviaCertSecretVersion int = 2 ) @@ -59,7 +60,7 @@ func generateKey(passphrase []byte) (*rsa.PrivateKey, []byte, error) { } pkcs8Key, err := x509.MarshalPKCS8PrivateKey(priv) if err != nil { - err = fmt.Errorf("Error private key to PKCS #8 form: %w", err) + err = fmt.Errorf("error private key to PKCS #8 form: %w", err) return priv, nil, err } @@ -67,7 +68,7 @@ func generateKey(passphrase []byte) (*rsa.PrivateKey, []byte, error) { if passphrase != nil { pemBlock, err = EncryptPrivateKey(pkcs8Key, passphrase) if err != nil { - err = fmt.Errorf("Error encrypting private key: %w", err) + err = fmt.Errorf("error encrypting private key: %w", err) return priv, nil, err } } else { @@ -147,7 +148,7 @@ func generateClientCert(caTemplate *x509.Certificate, certPrivKey *rsa.PrivateKe func validatePassphrase(passphrase []byte) error { for _, c := range string(passphrase) { if !unicode.IsPrint(c) { - return fmt.Errorf("Error: CA Passphrase contains invalid characters") + return ErrCAPassphraseInvalidChars } } return nil @@ -165,14 +166,14 @@ func EnsureAmphoraCerts( _, _, err := secret.GetSecret(ctx, h, certsSecretName, instance.Namespace) if err != nil { if !k8serrors.IsNotFound(err) { - return fmt.Errorf("Error retrieving secret %s - %w", certsSecretName, err) + return fmt.Errorf("error retrieving secret %s - %w", certsSecretName, err) } serverCAPassSecretName := fmt.Sprintf("%s-ca-passphrase", instance.Name) cAPassSecret, _, err := secret.GetSecret( ctx, h, serverCAPassSecretName, instance.Namespace) if err != nil { - return fmt.Errorf("Error retrieving secret %s needed to encrypt the generated key - %w", serverCAPassSecretName, err) + return fmt.Errorf("error retrieving secret %s needed to encrypt the generated key - %w", serverCAPassSecretName, err) } serverCAPass = cAPassSecret.Data["server-ca-passphrase"] @@ -182,29 +183,29 @@ func EnsureAmphoraCerts( serverCAKey, serverCAKeyPEM, err := generateKey(serverCAPass) if err != nil { - return fmt.Errorf("Error while generating server CA key: %w", err) + return fmt.Errorf("error while generating server CA key: %w", err) } serverCACert, _, err := generateCACert(serverCAKey, "Octavia server CA") if err != nil { - return fmt.Errorf("Error while generating server CA certificate: %w", err) + return fmt.Errorf("error while generating server CA certificate: %w", err) } clientCAKey, clientCAKeyPEM, err := generateKey(nil) if err != nil { - return fmt.Errorf("Error while generating client CA key: %w", err) + return fmt.Errorf("error while generating client CA key: %w", err) } clientCACert, clientCATemplate, err := generateCACert(clientCAKey, "Octavia client CA") if err != nil { - return fmt.Errorf("Error while generating amphora client CA certificate: %w", err) + return fmt.Errorf("error while generating amphora client CA certificate: %w", err) } clientKey, clientKeyPEM, err := generateKey(nil) if err != nil { - return fmt.Errorf("Error while generating amphora client key: %w", err) + return fmt.Errorf("error while generating amphora client key: %w", err) } clientCert, err := generateClientCert(clientCATemplate, clientKey, clientCAKey, "Octavia controller") if err != nil { - return fmt.Errorf("Error while generating amphora client certificate: %w", err) + return fmt.Errorf("error while generating amphora client certificate: %w", err) } clientKeyAndCert := append(clientKeyPEM, clientCert...) @@ -229,7 +230,7 @@ func EnsureAmphoraCerts( _, _, err = secret.CreateOrPatchSecret(ctx, h, instance, oAmpSecret) if err != nil { - return fmt.Errorf("Error creating certs secret %s - %w", + return fmt.Errorf("error creating certs secret %s - %w", certsSecretName, err) } } diff --git a/pkg/octavia/amphora_ssh.go b/pkg/octavia/amphora_ssh.go index 649b4312..0184b5ba 100644 --- a/pkg/octavia/amphora_ssh.go +++ b/pkg/octavia/amphora_ssh.go @@ -114,17 +114,17 @@ func uploadKeypair( pubKey string) error { osClient, err := GetOpenstackClient(ctx, instance.Namespace, h) if err != nil { - return fmt.Errorf("Error getting openstack client: %w", err) + return fmt.Errorf("error getting openstack client: %w", err) } computeClient, err := GetComputeClient(osClient) if err != nil { - return fmt.Errorf("Error getting compute client: %w", err) + return fmt.Errorf("error getting compute client: %w", err) } octaviaUser, err := GetUser(osClient, instance.Spec.ServiceUser) if err != nil { - return fmt.Errorf("Error getting user details from openstack client: %w", err) + return fmt.Errorf("error getting user details from openstack client: %w", err) } getOpts := keypairs.GetOpts{ @@ -139,7 +139,7 @@ func uploadKeypair( } err := keypairs.Delete(computeClient, NovaKeyPairName, deleteOpts).ExtractErr() if err != nil { - return fmt.Errorf("Error deleting the existing SSH keypair for amphorae: %w", err) + return fmt.Errorf("error deleting the existing SSH keypair for amphorae: %w", err) } } @@ -153,7 +153,7 @@ func uploadKeypair( } _, err = keypairs.Create(computeClient, createOpts).Extract() if err != nil { - return fmt.Errorf("Error uploading public key for SSH authentication with amphora: %w", err) + return fmt.Errorf("error uploading public key for SSH authentication with amphora: %w", err) } } return nil @@ -170,9 +170,7 @@ func EnsureAmpSSHConfig( if err == nil && cmap.Data != nil { // Fail if config map has no data if len(cmap.Data) == 0 || cmap.Data["key"] == "" { - return fmt.Errorf( - "ConfigMap %s exists but has no key data", - instance.Spec.LoadBalancerSSHPubKey) + return fmt.Errorf("%w: %s", ErrConfigMapMissingKeyData, instance.Spec.LoadBalancerSSHPubKey) } err = uploadKeypair(ctx, instance, h, cmap.Data["key"]) @@ -181,23 +179,23 @@ func EnsureAmpSSHConfig( } } else { if err != nil && !k8serrors.IsNotFound(err) { - return fmt.Errorf("Error retrieving config map %s - %w", instance.Spec.LoadBalancerSSHPubKey, err) + return fmt.Errorf("error retrieving config map %s - %w", instance.Spec.LoadBalancerSSHPubKey, err) } pubKey, privKey, err := generateECDSAKeys() if err != nil { - return fmt.Errorf("Error while generating SSH keys for amphorae: %w", err) + return fmt.Errorf("error while generating SSH keys for amphorae: %w", err) } err = storePrivateKeyAsSecret(ctx, instance, h, privKey) if err != nil { - return fmt.Errorf("Error creating ssh key secret %s - %w", + return fmt.Errorf("error creating ssh key secret %s - %w", instance.Spec.LoadBalancerSSHPrivKey, err) } err = storePublicKeyAsConfigMap(ctx, instance, h, pubKey) if err != nil { - return fmt.Errorf("Error creating ssh key config map %s - %w", + return fmt.Errorf("error creating ssh key config map %s - %w", instance.Spec.LoadBalancerSSHPubKey, err) } err = uploadKeypair(ctx, instance, h, pubKey) diff --git a/pkg/octavia/client.go b/pkg/octavia/client.go index c5cae3dd..4e6c3ae4 100644 --- a/pkg/octavia/client.go +++ b/pkg/octavia/client.go @@ -36,13 +36,17 @@ import ( ctrl "sigs.k8s.io/controller-runtime" ) +// ClientType defines the type of OpenStack client configuration type ClientType int const ( - AdminClient ClientType = iota + // AdminClient represents an administrative OpenStack client configuration + AdminClient ClientType = iota + // ServiceClient represents a service-level OpenStack client configuration ServiceClient ClientType = iota ) +// ClientConfig holds the configuration parameters for OpenStack client connections type ClientConfig struct { User string TenantName string @@ -69,7 +73,7 @@ func getClientConfig( }, nil case ServiceClient: if octavia == nil { - return ClientConfig{}, fmt.Errorf("cannot get service client config with nil instance") + return ClientConfig{}, ErrServiceClientConfigNilInstance } return ClientConfig{ User: octavia.Spec.ServiceUser, @@ -81,7 +85,7 @@ func getClientConfig( }, nil } - return ClientConfig{}, fmt.Errorf("invalid client type %+v", clientType) + return ClientConfig{}, fmt.Errorf("%w: %+v", ErrInvalidClientType, clientType) } func getClient( @@ -113,7 +117,7 @@ func getClient( return nil, ctrl.Result{}, err } if (ctrlResult != ctrl.Result{}) { - return nil, ctrl.Result{}, fmt.Errorf("the CABundleSecret %s not found", keystoneAPI.Spec.TLS.CaBundleSecretName) + return nil, ctrl.Result{}, fmt.Errorf("%w: %s", ErrCABundleSecretNotFound, keystoneAPI.Spec.TLS.CaBundleSecretName) } tlsConfig = &openstack.TLSConfig{ @@ -224,7 +228,7 @@ func getDomain( return nil, err } if len(allDomains) == 0 { - return nil, fmt.Errorf("cannot find \"%s\"", domainName) + return nil, fmt.Errorf("%w: \"%s\"", ErrCannotFindDomain, domainName) } return &allDomains[0], nil @@ -253,7 +257,7 @@ func getProjectWithDomain( return nil, err } if len(allProjects) == 0 { - return nil, fmt.Errorf("cannot find project \"%s\" in domain \"%s\"", projectName, domainName) + return nil, fmt.Errorf("%w: \"%s\" in domain \"%s\"", ErrCannotFindProjectInDomain, projectName, domainName) } return &allProjects[0], nil } @@ -269,7 +273,7 @@ func GetProject(openstack *openstack.OpenStack, projectName string) (*projects.P return nil, err } if len(allProjects) == 0 { - return nil, fmt.Errorf("Cannot find project \"%s\"", projectName) + return nil, fmt.Errorf("%w: \"%s\"", ErrCannotFindProject, projectName) } return &allProjects[0], nil } @@ -285,7 +289,7 @@ func GetUser(openstack *openstack.OpenStack, userName string) (*users.User, erro return nil, err } if len(allUsers) == 0 { - return nil, fmt.Errorf("Cannot find user \"%s\"", userName) + return nil, fmt.Errorf("%w: \"%s\"", ErrCannotFindUser, userName) } return &allUsers[0], nil } @@ -332,6 +336,7 @@ func GetImageClient(o *openstack.OpenStack) (*gophercloud.ServiceClient, error) return gophercloudopenstack.NewImageServiceV2(o.GetOSClient().ProviderClient, endpointOpts) } +// EnsureUserRoles ensures that the service user has the required roles assigned in the project func EnsureUserRoles( ctx context.Context, instance *octaviav1.Octavia, @@ -346,30 +351,30 @@ func EnsureUserRoles( osclient, err := GetOpenstackClient(ctx, instance.Namespace, helper) if err != nil { - return fmt.Errorf("error while getting a client for setting user roles") + return ErrGettingClientForUserRoles } project, err := getProjectWithDomain(osclient, instance.Spec.TenantName, instance.Spec.TenantDomainName) if err != nil { - return fmt.Errorf("error while getting project \"%s\" in domain \"%s\"", instance.Spec.TenantName, instance.Spec.TenantDomainName) + return fmt.Errorf("%w: \"%s\" in domain \"%s\"", ErrGettingProjectInDomain, instance.Spec.TenantName, instance.Spec.TenantDomainName) } userDomain := "Default" domain, err := getDomain(osclient, userDomain) if err != nil { - return fmt.Errorf("error while getting domain \"%s\"", userDomain) + return fmt.Errorf("%w: \"%s\"", ErrGettingDomain, userDomain) } user, err := osclient.GetUser(log, instance.Spec.ServiceUser, domain.ID) if err != nil { - return fmt.Errorf("error while getting user \"%s\" in domain \"%s\"", instance.Spec.ServiceUser, userDomain) + return fmt.Errorf("%w: \"%s\" in domain \"%s\"", ErrGettingUserInDomain, instance.Spec.ServiceUser, userDomain) } roles := []string{"admin", "service"} for _, role := range roles { err = osclient.AssignUserRole(log, role, user.ID, project.ID) if err != nil { - return fmt.Errorf("error when setting role \"%s\" to user \"%s\" in project \"%s\"", role, user.Name, project.Name) + return fmt.Errorf("%w: \"%s\" to user \"%s\" in project \"%s\"", ErrSettingUserRole, role, user.Name, project.Name) } } diff --git a/pkg/octavia/const.go b/pkg/octavia/const.go index c0c8c98c..162f41ed 100644 --- a/pkg/octavia/const.go +++ b/pkg/octavia/const.go @@ -47,7 +47,7 @@ const ( // ApacheInternalPort - ApacheInternalPort int32 = 80 - // AdminTenantName + // AdminTenant is the default admin tenant name for OpenStack AdminTenant = "admin" // HmConfigMap ... diff --git a/pkg/octavia/errors.go b/pkg/octavia/errors.go new file mode 100644 index 00000000..4c69134f --- /dev/null +++ b/pkg/octavia/errors.go @@ -0,0 +1,50 @@ +/* +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package octavia provides core functionality for managing Octavia load balancer components +package octavia + +import "errors" + +// Common static errors for octavia components +var ( + ErrNetworkAttachmentsEmpty = errors.New("networkAttachments list is empty") + ErrNetworkAttachmentConfig = errors.New("not all pods have interfaces with ips as configured in NetworkAttachments") + ErrOpenstackServerCAPassphraseNotFound = errors.New("OpenStack server CA passphrase secret not found") + ErrOctaviaFlavorsConfig = errors.New("none of the Octavia flavors could be configured") + ErrCAPassphraseInvalidChars = errors.New("error: CA Passphrase contains invalid characters") + ErrConfigMapMissingKeyData = errors.New("ConfigMap exists but has no key data") + + // Client-related errors + ErrServiceClientConfigNilInstance = errors.New("cannot get service client config with nil instance") + ErrInvalidClientType = errors.New("invalid client type") + ErrCABundleSecretNotFound = errors.New("the CABundleSecret not found") + ErrCannotFindDomain = errors.New("cannot find domain") + ErrCannotFindProjectInDomain = errors.New("cannot find project in domain") + ErrCannotFindProject = errors.New("cannot find project") + ErrCannotFindUser = errors.New("cannot find user") + ErrGettingClientForUserRoles = errors.New("error while getting a client for setting user roles") + ErrGettingProjectInDomain = errors.New("error while getting project in domain") + ErrGettingDomain = errors.New("error while getting domain") + ErrGettingUserInDomain = errors.New("error while getting user in domain") + ErrSettingUserRole = errors.New("error when setting role to user in project") + + // Network-related errors + ErrCannotFindNetwork = errors.New("cannot find network") + ErrRouterNotUp = errors.New("router is not up") + ErrPredictableIPAllocation = errors.New("predictable IPs: cannot allocate IP addresses") + ErrPredictableIPOutOfAddresses = errors.New("predictable IPs: out of available addresses") + ErrCannotAllocateIPAddresses = errors.New("cannot allocate IP addresses") + ErrCannotFindGatewayInfo = errors.New("cannot find gateway information in network attachment") +) diff --git a/pkg/octavia/image_upload_deployment.go b/pkg/octavia/image_upload_deployment.go index 785ca96a..d1ba1f08 100644 --- a/pkg/octavia/image_upload_deployment.go +++ b/pkg/octavia/image_upload_deployment.go @@ -26,6 +26,7 @@ import ( "k8s.io/utils/ptr" ) +// ImageUploadDetails contains the configuration details for image upload operations type ImageUploadDetails struct { ContainerImage string VolumeMounts []corev1.VolumeMount @@ -83,7 +84,7 @@ func getVolumeMounts() []corev1.VolumeMount { } } -// Deployment func +// ImageUploadDeployment creates a deployment for uploading Octavia amphora images func ImageUploadDeployment( instance *octaviav1.Octavia, labels map[string]string, diff --git a/pkg/octavia/images.go b/pkg/octavia/images.go index d0d7b77b..459efbb8 100644 --- a/pkg/octavia/images.go +++ b/pkg/octavia/images.go @@ -28,10 +28,13 @@ import ( ) const ( - AmphoraImageTag = "amphora-image" + // AmphoraImageTag is the tag used for Octavia amphora images + AmphoraImageTag = "amphora-image" + // AmphoraImageVertTag is the tag used for Octavia amphora vertical images AmphoraImageVertTag = "amphora-image-vert" ) +// AmphoraImage represents an Octavia amphora image with its metadata type AmphoraImage struct { ID string URL string @@ -172,6 +175,7 @@ func amphoraImageList( return amphoraImages, nil } +// EnsureAmphoraImages ensures that required Octavia amphora images are available in OpenStack func EnsureAmphoraImages( ctx context.Context, instance *octaviav1.Octavia, @@ -220,6 +224,7 @@ func EnsureAmphoraImages( return true, nil } +// GetImageOwnerID retrieves the owner ID for images in the OpenStack service func GetImageOwnerID( ctx context.Context, instance *octaviav1.Octavia, diff --git a/pkg/octavia/lb_mgmt_network.go b/pkg/octavia/lb_mgmt_network.go index 59f48a4f..93fe3acd 100644 --- a/pkg/octavia/lb_mgmt_network.go +++ b/pkg/octavia/lb_mgmt_network.go @@ -508,7 +508,7 @@ func ensureLbMgmtNetwork( } if networkDetails == nil && mgmtNetwork == nil { - return nil, fmt.Errorf("Cannot find network \"%s\"", networkName) + return nil, fmt.Errorf("%w: \"%s\"", ErrCannotFindNetwork, networkName) } asu := true @@ -561,7 +561,7 @@ func reconcileRouter(client *gophercloud.ServiceClient, router *routers.Router, log *logr.Logger) (*routers.Router, error) { if !router.AdminStateUp { - return router, fmt.Errorf("Router %s is not up", router.Name) + return router, fmt.Errorf("%w: %s", ErrRouterNotUp, router.Name) } // TODO(beagles) check the status string. @@ -851,6 +851,7 @@ func ensureSecurityGroup( return secGroup.ID, nil } +// HandleUnmanagedAmphoraManagementNetwork manages unmanaged amphora management network configurations func HandleUnmanagedAmphoraManagementNetwork( ctx context.Context, ns string, @@ -1124,7 +1125,7 @@ func GetPredictableIPAM(networkParameters *NetworkParameters) (*NADIpam, error) endRange := predParams.RangeStart for i := 0; i < LbProvPredictablePoolSize; i++ { if !predParams.CIDR.Contains(endRange) { - return nil, fmt.Errorf("predictable IPs: cannot allocate %d IP addresses in %s", LbProvPredictablePoolSize, predParams.CIDR) + return nil, fmt.Errorf("%w: %d in %s", ErrPredictableIPAllocation, LbProvPredictablePoolSize, predParams.CIDR) } endRange = endRange.Next() } @@ -1140,7 +1141,7 @@ func GetNextIP(predParams *NADIpam, currentValues map[string]bool) (string, erro if _, ok := currentValues[candidateAddress.String()]; ok { if candidateAddress == predParams.RangeEnd { - return "", fmt.Errorf("predictable IPs: out of available addresses") + return "", ErrPredictableIPOutOfAddresses } candidateAddress = candidateAddress.Next() } else { diff --git a/pkg/octavia/network_consts.go b/pkg/octavia/network_consts.go index 33484803..e73d645a 100644 --- a/pkg/octavia/network_consts.go +++ b/pkg/octavia/network_consts.go @@ -81,36 +81,35 @@ const ( // IPv4 consts + // LbRouterName is the name of the octavia link router // TODO(beagles): support IPv6 for the provider network. - // LbRouterName - LbRouterName = "octavia-link-router" // LbProvPhysicalNet - LbProvPhysicalNet = "octavia" - // LbMgmtRouterPortName + // LbMgmtRouterPortName is the name of the load balancer management router port LbMgmtRouterPortName = "lb-mgmt-router-port" - // LbMgmtRouterPortNameAZ + // LbMgmtRouterPortNameAZ is the availability zone specific router port name template LbMgmtRouterPortNameAZ = "lb-mgmt-%s-router-port" - // Network attachment details - // LbNetworkAttachmentName + // LbNetworkAttachmentName is the name for octavia network attachment details LbNetworkAttachmentName = "octavia" // // Security group constants. // - // LbMgmtNetworkSecurityGroup + // LbMgmtNetworkSecurityGroupName is the name of the load balancer management network security group LbMgmtNetworkSecurityGroupName = "lb-mgmt-sec-grp" - // LbMgmtHealthManagerSecurityGroup + // LbMgmtHealthManagerSecurityGroupName is the name of the load balancer management health manager security group LbMgmtHealthManagerSecurityGroupName = "lb-health-mgr-sec-grp" - // LbMgmtNetworkSecurityGroup + // LbProvNetworkSecurityGroupName is the name of the load balancer provider network security group LbProvNetworkSecurityGroupName = "lb-prov-sec-grp" - // LbMgmtHealthManagerSecurityGroup + // LbProvHealthManagerSecurityGroupName is the name of the load balancer provider health manager security group LbProvHealthManagerSecurityGroupName = "lb-health-prov-sec-grp" ) diff --git a/pkg/octavia/network_parameters.go b/pkg/octavia/network_parameters.go index 51a2377e..51f5f113 100644 --- a/pkg/octavia/network_parameters.go +++ b/pkg/octavia/network_parameters.go @@ -25,6 +25,7 @@ type NADConfig struct { IPAM NADIpam `json:"ipam"` } +// NADIpam represents the IPAM configuration for Network Attachment Definitions type NADIpam struct { CIDR netip.Prefix `json:"range"` RangeStart netip.Addr `json:"range_start"` @@ -33,6 +34,7 @@ type NADIpam struct { Routes []NADRoute `json:"routes"` } +// NADRoute represents a network route configuration in Network Attachment Definitions type NADRoute struct { Gateway netip.Addr `json:"gw"` Destination netip.Prefix `json:"dst"` @@ -69,7 +71,7 @@ func GetRangeFromCIDR( // convert it to a [16]bytes table, set the remaining bits to 1 addrBytes := start.As16() for b := bits; b < 128; b++ { - addrBytes[b/8] |= 1 << uint(7-(b%8)) + addrBytes[b/8] |= 1 << uint(7-(b%8)) // #nosec G115 -- Controlled bit manipulation with small integer values } // convert the table to an ip address to get the last IP // in case of IPv4, the address should be unmapped @@ -108,7 +110,7 @@ func GetNetworkParametersFromNAD( end := networkParameters.ProviderAllocationStart for i := 0; i < LbProvSubnetPoolSize; i++ { if !networkParameters.ProviderCIDR.Contains(end) { - return nil, fmt.Errorf("cannot allocate %d IP addresses in %s", LbProvSubnetPoolSize, networkParameters.ProviderCIDR) + return nil, fmt.Errorf("%w: %d in %s", ErrCannotAllocateIPAddresses, LbProvSubnetPoolSize, networkParameters.ProviderCIDR) } end = end.Next() } @@ -125,7 +127,7 @@ func GetNetworkParametersFromNAD( } else if !instance.Spec.LbMgmtNetworks.ManageLbMgmtNetworks { return networkParameters, nil } else { - return nil, fmt.Errorf("cannot find gateway information in network attachment") + return nil, ErrCannotFindGatewayInfo } // Tenant subnet parameters - parameters for lb-mgmt-net/subnet diff --git a/pkg/octavia/securitycontext.go b/pkg/octavia/securitycontext.go index bc09c51e..6e429194 100644 --- a/pkg/octavia/securitycontext.go +++ b/pkg/octavia/securitycontext.go @@ -21,10 +21,13 @@ import ( ) const ( + // OctaviaUID is the user ID for running Octavia services OctaviaUID int64 = 42437 + // OctaviaGID is the group ID for running Octavia services OctaviaGID int64 = 42437 ) +// GetOctaviaSecurityContext returns the security context for octavia containers func GetOctaviaSecurityContext() *corev1.SecurityContext { return &corev1.SecurityContext{ RunAsUser: ptr.To(OctaviaUID), diff --git a/pkg/octaviaapi/deployment.go b/pkg/octaviaapi/deployment.go index 563c5461..e0a9c84f 100644 --- a/pkg/octaviaapi/deployment.go +++ b/pkg/octaviaapi/deployment.go @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package octaviaapi contains functionality for managing Octavia API deployments package octaviaapi import ( diff --git a/pkg/octaviarsyslog/daemonset.go b/pkg/octaviarsyslog/daemonset.go index c8a707f1..d329cffd 100644 --- a/pkg/octaviarsyslog/daemonset.go +++ b/pkg/octaviarsyslog/daemonset.go @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package octaviarsyslog contains functionality for managing Octavia rsyslog daemon sets package octaviarsyslog import ( diff --git a/pkg/octaviarsyslog/volumes.go b/pkg/octaviarsyslog/volumes.go index ffa64833..d491b059 100644 --- a/pkg/octaviarsyslog/volumes.go +++ b/pkg/octaviarsyslog/volumes.go @@ -29,6 +29,7 @@ var ( configMode int32 = 0644 ) +// GetVolumes returns the volumes for octavia rsyslog including health monitor ports config func GetVolumes(name string) []corev1.Volume { var config0640AccessMode int32 = 0640 return append( @@ -47,6 +48,7 @@ func GetVolumes(name string) []corev1.Volume { ) } +// GetInitVolumeMounts returns the volume mounts for init containers in octavia rsyslog func GetInitVolumeMounts() []corev1.VolumeMount { return append( octavia.GetInitVolumeMounts(), diff --git a/tests/functional/api_fixture.go b/tests/functional/api_fixture.go index fb6a4c08..530b154d 100644 --- a/tests/functional/api_fixture.go +++ b/tests/functional/api_fixture.go @@ -14,6 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// Package functional_test provides functional testing utilities and fixtures for Octavia operator package functional_test import ( @@ -24,7 +25,7 @@ import ( "github.com/go-logr/logr" "github.com/google/uuid" - . "github.com/onsi/ginkgo/v2" //revive:disable:dot-imports + . "github.com/onsi/ginkgo/v2" //nolint:staticcheck,revive // ST1001,dot-imports: dot imports are standard practice for Ginkgo tests "github.com/gophercloud/gophercloud/openstack/identity/v3/projects" "github.com/gophercloud/gophercloud/openstack/identity/v3/users" @@ -145,6 +146,7 @@ func keystoneHandleProjects( } } +// GetProject returns a project by name from the keystoneProjects list func GetProject(name string) *projects.Project { for _, p := range keystoneProjects { if p.Name == name { @@ -173,16 +175,18 @@ func keystoneGetProject( } w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) - f.APIFixture.Log.Info(fmt.Sprintf("GetProject returns %s", string(bytes))) + _, _ = fmt.Fprint(w, string(bytes)) + f.Log.Info(fmt.Sprintf("GetProject returns %s", string(bytes))) } +// APIFixtures aggregates all API test fixtures for functional testing type APIFixtures struct { Keystone *keystone_helpers.KeystoneAPIFixture Nova *NovaAPIFixture Neutron *NeutronAPIFixture } +// SetupAPIFixtures initializes and configures all API fixtures for testing func SetupAPIFixtures(logger logr.Logger) APIFixtures { nova := NewNovaAPIFixtureWithServer(logger) nova.Setup() @@ -214,7 +218,7 @@ func SetupAPIFixtures(logger logr.Logger) APIFixtures { w.Header().Add("Content-Type", "application/json") w.WriteHeader(202) // ensure keystone returns the simulator endpoints in its catalog - fmt.Fprint(w, ResponseHandleToken(keystone.Endpoint(), novaURL, neutronURL)) + _, _ = fmt.Fprint(w, ResponseHandleToken(keystone.Endpoint(), novaURL, neutronURL)) } }}) DeferCleanup(keystone.Cleanup) diff --git a/tests/functional/base_test.go b/tests/functional/base_test.go index af6cd5ad..ade0df03 100644 --- a/tests/functional/base_test.go +++ b/tests/functional/base_test.go @@ -39,12 +39,12 @@ import ( const ( SecretName = "test-secret" - KeystoneSecretName = "%s-keystone-secret" + KeystoneSecretName = "%s-keystone-secret" // #nosec G101 -- Test constant, not a credential RabbitmqSecretName = "rabbitmq-secret" - PublicCertSecretName = "public-tls-certs" - InternalCertSecretName = "internal-tls-certs" - CABundleSecretName = "combined-ca-bundle" + PublicCertSecretName = "public-tls-certs" // #nosec G101 -- Test constant, not a credential + InternalCertSecretName = "internal-tls-certs" // #nosec G101 -- Test constant, not a credential + CABundleSecretName = "combined-ca-bundle" // #nosec G101 -- Test constant, not a credential OVNNBDBEndpoint = "ovnnbdbendpoint:1234" OVNSBDBEndpoint = "ovnsbdbendpoint:1234" diff --git a/tests/functional/neutron_api_fixture.go b/tests/functional/neutron_api_fixture.go index d357a2ae..3114111b 100644 --- a/tests/functional/neutron_api_fixture.go +++ b/tests/functional/neutron_api_fixture.go @@ -38,11 +38,13 @@ import ( "github.com/openstack-k8s-operators/octavia-operator/pkg/octavia" ) +// Network represents a neutron network with external extension for testing type Network struct { networks.Network external.NetworkExternalExt } +// NeutronAPIFixture provides a test fixture for mocking Neutron API responses type NeutronAPIFixture struct { api.APIFixture Quotas map[string]quotas.Quota @@ -60,6 +62,7 @@ func (f *NeutronAPIFixture) registerHandler(handler api.Handler) { f.Server.AddHandler(f.URLBase+handler.Pattern, handler.Func) } +// Setup initializes the NeutronAPIFixture with API handlers and test data func (f *NeutronAPIFixture) Setup() { f.registerHandler(api.Handler{Pattern: "/v2.0/networks/", Func: f.networkHandler}) f.registerHandler(api.Handler{Pattern: "/v2.0/networks", Func: f.networkHandler}) @@ -117,7 +120,7 @@ func (f *NeutronAPIFixture) getNetwork(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -163,7 +166,7 @@ func (f *NeutronAPIFixture) postNetwork(w http.ResponseWriter, r *http.Request) w.Header().Add("Content-Type", "application/json") w.WriteHeader(201) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } // Subnet @@ -217,7 +220,7 @@ func (f *NeutronAPIFixture) getSubnet(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -255,7 +258,7 @@ func (f *NeutronAPIFixture) postSubnet(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(201) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } func (f *NeutronAPIFixture) putSubnet(w http.ResponseWriter, r *http.Request) { @@ -292,7 +295,7 @@ func (f *NeutronAPIFixture) putSubnet(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(201) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } // SecGroup @@ -336,7 +339,7 @@ func (f *NeutronAPIFixture) getSecurityGroup(w http.ResponseWriter, r *http.Requ w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -369,7 +372,7 @@ func (f *NeutronAPIFixture) postSecurityGroup(w http.ResponseWriter, r *http.Req w.Header().Add("Content-Type", "application/json") w.WriteHeader(201) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } // Port @@ -417,7 +420,7 @@ func (f *NeutronAPIFixture) getPort(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -458,7 +461,7 @@ func (f *NeutronAPIFixture) postPort(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(201) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } // Router @@ -504,7 +507,7 @@ func (f *NeutronAPIFixture) getRouter(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -537,7 +540,7 @@ func (f *NeutronAPIFixture) postRouter(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(201) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } func (f *NeutronAPIFixture) putRouter(w http.ResponseWriter, r *http.Request) { @@ -582,7 +585,7 @@ func (f *NeutronAPIFixture) putRouter(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -620,7 +623,7 @@ func (f *NeutronAPIFixture) getQuotas(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } func (f *NeutronAPIFixture) putQuotas(w http.ResponseWriter, r *http.Request) { @@ -640,12 +643,12 @@ func (f *NeutronAPIFixture) putQuotas(w http.ResponseWriter, r *http.Request) { f.InternalError(err, "Error during unmarshalling request", w, r) return } - f.APIFixture.Log.Info(fmt.Sprintf("Set quotas for %s to %+v\n", tenantID, q.Quota)) + f.Log.Info(fmt.Sprintf("Set quotas for %s to %+v\n", tenantID, q.Quota)) f.Quotas[tenantID] = q.Quota w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } func (f *NeutronAPIFixture) rbacHandler(w http.ResponseWriter, r *http.Request) { @@ -687,7 +690,7 @@ func (f *NeutronAPIFixture) getRBAC(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -712,14 +715,15 @@ func (f *NeutronAPIFixture) putRBAC(w http.ResponseWriter, r *http.Request) { if rbac.RBAC.TargetTenant != "" { updatedRBAC.TargetTenant = rbac.RBAC.TargetTenant } - f.APIFixture.Log.Info(fmt.Sprintf("Set RBAC %s to %+v\n", rbacID, updatedRBAC)) + f.Log.Info(fmt.Sprintf("Set RBAC %s to %+v\n", rbacID, updatedRBAC)) f.RBACs[rbacID] = updatedRBAC w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } +// NewNeutronAPIFixtureWithServer creates a new NeutronAPIFixture with its own test server func NewNeutronAPIFixtureWithServer(log logr.Logger) *NeutronAPIFixture { server := &api.FakeAPIServer{} server.Setup(log) @@ -728,6 +732,7 @@ func NewNeutronAPIFixtureWithServer(log logr.Logger) *NeutronAPIFixture { return fixture } +// AddNeutronAPIFixture adds a NeutronAPIFixture to an existing test server func AddNeutronAPIFixture(log logr.Logger, server *api.FakeAPIServer) *NeutronAPIFixture { fixture := &NeutronAPIFixture{ APIFixture: api.APIFixture{ diff --git a/tests/functional/nova_api_fixture.go b/tests/functional/nova_api_fixture.go index f426efcc..baf61cd4 100644 --- a/tests/functional/nova_api_fixture.go +++ b/tests/functional/nova_api_fixture.go @@ -31,6 +31,7 @@ import ( api "github.com/openstack-k8s-operators/lib-common/modules/test/apis" ) +// NovaAPIFixture provides a test fixture for mocking Nova API responses type NovaAPIFixture struct { api.APIFixture QuotaSets map[string]quotasets.QuotaSet @@ -42,6 +43,7 @@ func (f *NovaAPIFixture) registerHandler(handler api.Handler) { f.Server.AddHandler(f.URLBase+handler.Pattern, handler.Func) } +// Setup initializes the NovaAPIFixture with API handlers and test data func (f *NovaAPIFixture) Setup() { f.registerHandler(api.Handler{Pattern: "/os-keypairs", Func: f.keyPairHandler}) f.registerHandler(api.Handler{Pattern: "/os-keypairs/", Func: f.keyPairHandler}) @@ -86,7 +88,7 @@ func (f *NovaAPIFixture) getKeyPair(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } else if len(items) == 3 { type pair struct { KeyPair keypairs.KeyPair `json:"keypair"` @@ -111,7 +113,7 @@ func (f *NovaAPIFixture) getKeyPair(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } } @@ -142,7 +144,7 @@ func (f *NovaAPIFixture) postKeyPair(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(201) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } func (f *NovaAPIFixture) deleteKeyPair(w http.ResponseWriter, r *http.Request) { @@ -188,7 +190,7 @@ func (f *NovaAPIFixture) getQuotaSets(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } func (f *NovaAPIFixture) putQuotaSets(w http.ResponseWriter, r *http.Request) { @@ -212,9 +214,10 @@ func (f *NovaAPIFixture) putQuotaSets(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") w.WriteHeader(200) - fmt.Fprint(w, string(bytes)) + _, _ = fmt.Fprint(w, string(bytes)) } +// NewNovaAPIFixtureWithServer creates a new NovaAPIFixture with its own test server func NewNovaAPIFixtureWithServer(log logr.Logger) *NovaAPIFixture { server := &api.FakeAPIServer{} server.Setup(log) @@ -223,6 +226,7 @@ func NewNovaAPIFixtureWithServer(log logr.Logger) *NovaAPIFixture { return fixture } +// AddNovaAPIFixture adds a NovaAPIFixture to an existing test server func AddNovaAPIFixture(log logr.Logger, server *api.FakeAPIServer) *NovaAPIFixture { fixture := &NovaAPIFixture{ APIFixture: api.APIFixture{ diff --git a/tests/functional/suite_test.go b/tests/functional/suite_test.go index 43282909..9646d878 100644 --- a/tests/functional/suite_test.go +++ b/tests/functional/suite_test.go @@ -231,11 +231,11 @@ var _ = BeforeSuite(func() { dialer := &net.Dialer{Timeout: time.Second} addrPort := fmt.Sprintf("%s:%d", webhookInstallOptions.LocalServingHost, webhookInstallOptions.LocalServingPort) Eventually(func() error { - conn, err := tls.DialWithDialer(dialer, "tcp", addrPort, &tls.Config{InsecureSkipVerify: true}) + conn, err := tls.DialWithDialer(dialer, "tcp", addrPort, &tls.Config{InsecureSkipVerify: true}) // #nosec G402 -- Test environment, TLS verification not required if err != nil { return err } - conn.Close() + _ = conn.Close() return nil }).Should(Succeed()) }) From d04872684fe74858750c8960b1844bd639a4ba51 Mon Sep 17 00:00:00 2001 From: Martin Schuppert Date: Fri, 22 Aug 2025 11:20:45 +0200 Subject: [PATCH 2/3] Bump dependencies for OpenShift 4.18 compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update controller-runtime, Kubernetes dependencies, and testing tools to support OpenShift Container Platform 4.18 (Kubernetes 1.31). Changes: - controller-runtime: v0.17.6 → v0.19.7 - Kubernetes core dependencies: v0.29.15 → v0.31.12 * k8s.io/api: v0.31.12 * k8s.io/apimachinery: v0.31.12 * k8s.io/client-go: v0.31.12 * k8s.io/apiextensions-apiserver: v0.31.12 - k8s.io/utils: v0.0.0-20240711033017 → v0.0.0-20250820121507 - controller-gen: v0.14.0 → v0.18.0 - envtest: 1.29 → 1.31, setup-envtest@latest Signed-off-by: Martin Schuppert --- Makefile | 6 +- ...enstack.org_octaviaamphoracontrollers.yaml | 16 +- .../octavia.openstack.org_octaviaapis.yaml | 16 +- ...octavia.openstack.org_octaviarsyslogs.yaml | 11 +- api/bases/octavia.openstack.org_octavias.yaml | 81 ++++---- api/go.mod | 36 ++-- api/go.sum | 93 ++++----- ...enstack.org_octaviaamphoracontrollers.yaml | 16 +- .../octavia.openstack.org_octaviaapis.yaml | 16 +- ...octavia.openstack.org_octaviarsyslogs.yaml | 11 +- .../bases/octavia.openstack.org_octavias.yaml | 81 ++++---- config/rbac/role.yaml | 178 ++---------------- go.mod | 36 ++-- go.sum | 94 ++++----- tests/functional/api_fixture.go | 30 ++- 15 files changed, 290 insertions(+), 431 deletions(-) diff --git a/Makefile b/Makefile index 6b0e7a28..769f1959 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ OPERATOR_SDK_VERSION ?= v1.31.0 DEFAULT_IMG ?= quay.io/openstack-k8s-operators/octavia-operator:latest IMG ?= $(DEFAULT_IMG) # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. -ENVTEST_K8S_VERSION = 1.29 +ENVTEST_K8S_VERSION = 1.31 # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) @@ -189,7 +189,7 @@ GINKGO ?= $(LOCALBIN)/ginkgo ## Tool Versions KUSTOMIZE_VERSION ?= v3.8.7 -CONTROLLER_TOOLS_VERSION ?= v0.14.0 +CONTROLLER_TOOLS_VERSION ?= v0.18.0 KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" .PHONY: kustomize @@ -210,7 +210,7 @@ $(CONTROLLER_GEN): $(LOCALBIN) .PHONY: envtest envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. $(ENVTEST): $(LOCALBIN) - test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@c7e1dc9b + test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest .PHONY: operator-sdk OPERATOR_SDK ?= $(LOCALBIN)/operator-sdk diff --git a/api/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml b/api/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml index a1a92681..4c910ef9 100644 --- a/api/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml +++ b/api/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml @@ -3,7 +3,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 name: octaviaamphoracontrollers.octavia.openstack.org spec: group: octavia.openstack.org @@ -113,7 +113,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 lbMgmtNetworkID: default: "" @@ -152,9 +151,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database user + password from the Secret type: string service: default: OctaviaPassword @@ -185,11 +183,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. @@ -200,6 +196,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/api/bases/octavia.openstack.org_octaviaapis.yaml b/api/bases/octavia.openstack.org_octaviaapis.yaml index 54f6c9cd..b3c11506 100644 --- a/api/bases/octavia.openstack.org_octaviaapis.yaml +++ b/api/bases/octavia.openstack.org_octaviaapis.yaml @@ -3,7 +3,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 name: octaviaapis.octavia.openstack.org spec: group: octavia.openstack.org @@ -87,7 +87,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 networkAttachments: description: NetworkAttachments is a list of NetworkAttachment resource @@ -268,9 +267,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database user + password from the Secret type: string service: default: OctaviaPassword @@ -306,11 +304,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. @@ -321,6 +317,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/api/bases/octavia.openstack.org_octaviarsyslogs.yaml b/api/bases/octavia.openstack.org_octaviarsyslogs.yaml index d214125a..ad64fbe2 100644 --- a/api/bases/octavia.openstack.org_octaviarsyslogs.yaml +++ b/api/bases/octavia.openstack.org_octaviarsyslogs.yaml @@ -3,7 +3,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 name: octaviarsyslogs.octavia.openstack.org spec: group: octavia.openstack.org @@ -80,7 +80,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 initContainerImage: description: InitContainerImage - Rsyslog init Container Image URL @@ -122,11 +121,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. @@ -137,6 +134,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/api/bases/octavia.openstack.org_octavias.yaml b/api/bases/octavia.openstack.org_octavias.yaml index 8c75b046..1253eeb1 100644 --- a/api/bases/octavia.openstack.org_octavias.yaml +++ b/api/bases/octavia.openstack.org_octavias.yaml @@ -3,7 +3,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 name: octavias.octavia.openstack.org spec: group: octavia.openstack.org @@ -108,7 +108,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 lbMgmtNetwork: default: @@ -194,7 +193,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 networkAttachments: description: NetworkAttachments is a list of NetworkAttachment @@ -375,9 +373,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -413,11 +410,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. @@ -428,6 +423,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 @@ -613,7 +614,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 lbMgmtNetworkID: default: "" @@ -652,9 +652,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -685,11 +684,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. @@ -700,6 +697,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 @@ -859,7 +862,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 lbMgmtNetworkID: default: "" @@ -898,9 +900,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -931,11 +932,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. @@ -946,6 +945,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 @@ -1076,7 +1081,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 initContainerImage: description: InitContainerImage - Rsyslog init Container Image @@ -1118,11 +1122,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. @@ -1133,6 +1135,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 @@ -1278,7 +1286,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 lbMgmtNetworkID: default: "" @@ -1317,9 +1324,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -1350,11 +1356,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. @@ -1365,6 +1369,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 @@ -1467,9 +1477,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database user + password from the Secret type: string service: default: OctaviaPassword @@ -1508,11 +1517,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. @@ -1523,6 +1530,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/api/go.mod b/api/go.mod index d73095ec..16aa724a 100644 --- a/api/go.mod +++ b/api/go.mod @@ -7,19 +7,20 @@ require ( github.com/onsi/gomega v1.34.1 github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f - k8s.io/api v0.29.15 - k8s.io/apimachinery v0.29.15 - k8s.io/client-go v0.29.15 - sigs.k8s.io/controller-runtime v0.17.6 + k8s.io/api v0.31.12 + k8s.io/apimachinery v0.31.12 + k8s.io/client-go v0.31.12 + sigs.k8s.io/controller-runtime v0.19.7 ) require ( github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.12.0 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/zapr v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect @@ -42,37 +43,36 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.19.0 // indirect - github.com/prometheus/client_model v0.6.0 // indirect - github.com/prometheus/common v0.51.1 // indirect - github.com/prometheus/procfs v0.13.0 // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/x448/float16 v0.8.4 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/net v0.28.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sys v0.30.0 // indirect golang.org/x/term v0.29.0 // indirect golang.org/x/text v0.22.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.24.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/protobuf v1.34.1 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.29.15 // indirect - k8s.io/component-base v0.29.15 // indirect - k8s.io/klog/v2 v2.120.1 // indirect + k8s.io/apiextensions-apiserver v0.31.0 // indirect + k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 // indirect - k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect + k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect ) -// mschuppert: map to latest commit from release-4.16 tag +// mschuppert: map to latest commit from release-4.18 tag // must consistent within modules and service operators -replace github.com/openshift/api => github.com/openshift/api v0.0.0-20240830023148-b7d0481c9094 //allow-merging +replace github.com/openshift/api => github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e //allow-merging diff --git a/api/go.sum b/api/go.sum index 6c10db3d..3a744ee9 100644 --- a/api/go.sum +++ b/api/go.sum @@ -1,7 +1,7 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -14,6 +14,8 @@ github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0 github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= @@ -30,13 +32,10 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -78,27 +77,29 @@ github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.2025073007 github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f/go.mod h1:P+7F1wiwZUxOy4myYXFyc/uBtGATDFpk3yAllXe1Vzk= 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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= -github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= -github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= -github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= -github.com/prometheus/common v0.51.1 h1:eIjN50Bwglz6a/c3hAgSMcofL3nD+nFQkV6Dd4DsQCw= -github.com/prometheus/common v0.51.1/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= -github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= -github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -108,43 +109,30 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -153,7 +141,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -162,15 +149,13 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -178,24 +163,22 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.29.15 h1:QxPcAheYujeBwkdiE0vMyKkAtqUq5YNyXVqimT+me44= -k8s.io/api v0.29.15/go.mod h1:16duIp2ez6GiLPq1g8XtZNIkw6hJpIitpxZSvv0dZ6E= -k8s.io/apiextensions-apiserver v0.29.15 h1:XI5axgsWqMlIIgpHbcz5vPjk06i3ibHv5FUdSfdtQLU= -k8s.io/apiextensions-apiserver v0.29.15/go.mod h1:6ZU61z32I8WUwbBTPIANUesTj5G40sZek0ojmeoMJI8= -k8s.io/apimachinery v0.29.15 h1:aLc0wghElkdnTO7TMVTxTrifoXah1lqRL8s6szDHGbg= -k8s.io/apimachinery v0.29.15/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y= -k8s.io/client-go v0.29.15 h1:zCBOXKCtz9Hl8boKUGs8zbtZEP6pc7O8Ov3ma+gnS6o= -k8s.io/client-go v0.29.15/go.mod h1:xPy0D3p4sonPhZhI3QoYo4m7oLKoPjFf4vYF9oxoxNM= -k8s.io/component-base v0.29.15 h1:CvmXXTDyk43FDaiJ/Rp+yWFjw6hkUI2t7mIJUrK5j00= -k8s.io/component-base v0.29.15/go.mod h1:jH/sbuvmXew2Fz2iIKNMeNw8o/d1KR9tAg6uekQKnVk= -k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/api v0.31.12 h1:yysm83xHIoKAwfm2w0dT6Yz7vfWzl841AEMI7Y8wDa8= +k8s.io/api v0.31.12/go.mod h1:f/srhhI7aDs9K4s0W1GX4/zb+cIf5uWrBjGyoO/XgJc= +k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk= +k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk= +k8s.io/apimachinery v0.31.12 h1:y34W8rNKc+jDxUvEXarjahqM6vOV5iqgZPuRqRuyEh8= +k8s.io/apimachinery v0.31.12/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.12 h1:JJhouOoU1bKdPWplkZ2CpYA74+lxj3Zsn15aoGLX6Hk= +k8s.io/client-go v0.31.12/go.mod h1:kjQ5WSec9ShP3T1auTDFW4bTqgmJdBuZPsjq5FqeuYE= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 h1:qVoMaQV5t62UUvHe16Q3eb2c5HPzLHYzsi0Tu/xLndo= k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.17.6 h1:12IXsozEsIXWAMRpgRlYS1jjAHQXHtWEOMdULh3DbEw= -sigs.k8s.io/controller-runtime v0.17.6/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.19.7 h1:DLABZfMr20A+AwCZOHhcbcu+TqBXnJZaVBri9K3EO48= +sigs.k8s.io/controller-runtime v0.19.7/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= diff --git a/config/crd/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml b/config/crd/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml index a1a92681..4c910ef9 100644 --- a/config/crd/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml +++ b/config/crd/bases/octavia.openstack.org_octaviaamphoracontrollers.yaml @@ -3,7 +3,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 name: octaviaamphoracontrollers.octavia.openstack.org spec: group: octavia.openstack.org @@ -113,7 +113,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 lbMgmtNetworkID: default: "" @@ -152,9 +151,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database user + password from the Secret type: string service: default: OctaviaPassword @@ -185,11 +183,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. @@ -200,6 +196,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/config/crd/bases/octavia.openstack.org_octaviaapis.yaml b/config/crd/bases/octavia.openstack.org_octaviaapis.yaml index 54f6c9cd..b3c11506 100644 --- a/config/crd/bases/octavia.openstack.org_octaviaapis.yaml +++ b/config/crd/bases/octavia.openstack.org_octaviaapis.yaml @@ -3,7 +3,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 name: octaviaapis.octavia.openstack.org spec: group: octavia.openstack.org @@ -87,7 +87,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 networkAttachments: description: NetworkAttachments is a list of NetworkAttachment resource @@ -268,9 +267,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database user + password from the Secret type: string service: default: OctaviaPassword @@ -306,11 +304,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. @@ -321,6 +317,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/config/crd/bases/octavia.openstack.org_octaviarsyslogs.yaml b/config/crd/bases/octavia.openstack.org_octaviarsyslogs.yaml index d214125a..ad64fbe2 100644 --- a/config/crd/bases/octavia.openstack.org_octaviarsyslogs.yaml +++ b/config/crd/bases/octavia.openstack.org_octaviarsyslogs.yaml @@ -3,7 +3,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 name: octaviarsyslogs.octavia.openstack.org spec: group: octavia.openstack.org @@ -80,7 +80,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 initContainerImage: description: InitContainerImage - Rsyslog init Container Image URL @@ -122,11 +121,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. @@ -137,6 +134,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/config/crd/bases/octavia.openstack.org_octavias.yaml b/config/crd/bases/octavia.openstack.org_octavias.yaml index 8c75b046..1253eeb1 100644 --- a/config/crd/bases/octavia.openstack.org_octavias.yaml +++ b/config/crd/bases/octavia.openstack.org_octavias.yaml @@ -3,7 +3,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 name: octavias.octavia.openstack.org spec: group: octavia.openstack.org @@ -108,7 +108,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 lbMgmtNetwork: default: @@ -194,7 +193,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 networkAttachments: description: NetworkAttachments is a list of NetworkAttachment @@ -375,9 +373,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -413,11 +410,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. @@ -428,6 +423,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 @@ -613,7 +614,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 lbMgmtNetworkID: default: "" @@ -652,9 +652,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -685,11 +684,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. @@ -700,6 +697,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 @@ -859,7 +862,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 lbMgmtNetworkID: default: "" @@ -898,9 +900,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -931,11 +932,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. @@ -946,6 +945,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 @@ -1076,7 +1081,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 initContainerImage: description: InitContainerImage - Rsyslog init Container Image @@ -1118,11 +1122,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. @@ -1133,6 +1135,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 @@ -1278,7 +1286,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 lbMgmtNetworkID: default: "" @@ -1317,9 +1324,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database + user password from the Secret type: string service: default: OctaviaPassword @@ -1350,11 +1356,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. @@ -1365,6 +1369,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 @@ -1467,9 +1477,8 @@ spec: properties: database: default: OctaviaDatabasePassword - description: |- - Database - Selector to get the octavia Database user password from the Secret - TODO: not used, need change in mariadb-operator + description: Database - Selector to get the octavia Database user + password from the Secret type: string service: default: OctaviaPassword @@ -1508,11 +1517,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. @@ -1523,6 +1530,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/config/rbac/role.yaml b/config/rbac/role.yaml index 734c5a4e..83221e96 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -7,14 +7,10 @@ rules: - apiGroups: - "" resources: - - nodes - verbs: - - get - - list -- apiGroups: - - "" - resources: + - configmaps - pods + - secrets + - services verbs: - create - delete @@ -26,21 +22,16 @@ rules: - apiGroups: - "" resources: - - serviceaccounts + - nodes verbs: - - create - get - list - - patch - - update - - watch - apiGroups: - - apps + - "" resources: - - daemonsets + - serviceaccounts verbs: - create - - delete - get - list - patch @@ -49,6 +40,7 @@ rules: - apiGroups: - apps resources: + - daemonsets - deployments verbs: - create @@ -70,42 +62,6 @@ rules: - patch - update - watch -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - apiGroups: - k8s.cni.cncf.io resources: @@ -126,17 +82,6 @@ rules: - keystone.openstack.org resources: - keystoneendpoints - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - keystone.openstack.org - resources: - keystoneservices verbs: - create @@ -150,24 +95,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 @@ -180,6 +107,7 @@ rules: - apiGroups: - mariadb.openstack.org resources: + - mariadbaccounts/finalizers - mariadbdatabases/finalizers verbs: - patch @@ -188,33 +116,9 @@ rules: - octavia.openstack.org resources: - octaviaamphoracontrollers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - octavia.openstack.org - resources: - - octaviaamphoracontrollers/finalizers - verbs: - - patch - - update -- apiGroups: - - octavia.openstack.org - resources: - - octaviaamphoracontrollers/status - verbs: - - get - - patch - - update -- apiGroups: - - octavia.openstack.org - resources: - octaviaapis + - octaviarsyslogs + - octavias verbs: - create - delete @@ -226,40 +130,19 @@ rules: - apiGroups: - octavia.openstack.org resources: + - octaviaamphoracontrollers/finalizers - octaviaapis/finalizers + - octavias/finalizers verbs: - patch - update - apiGroups: - octavia.openstack.org resources: + - octaviaamphoracontrollers/status - octaviaapis/status - verbs: - - get - - patch - - update -- apiGroups: - - octavia.openstack.org - resources: - - octaviarsyslogs - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - octavia.openstack.org - resources: - - octaviarsyslogs/finalizers - verbs: - - update -- apiGroups: - - octavia.openstack.org - resources: - octaviarsyslogs/status + - octavias/status verbs: - get - patch @@ -267,29 +150,8 @@ rules: - apiGroups: - octavia.openstack.org resources: - - octavias - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - octavia.openstack.org - resources: - - octavias/finalizers - verbs: - - patch - - update -- apiGroups: - - octavia.openstack.org - resources: - - octavias/status + - octaviarsyslogs/finalizers verbs: - - get - - patch - update - apiGroups: - ovn.openstack.org @@ -315,16 +177,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/go.mod b/go.mod index 7f8dc719..88d501e4 100644 --- a/go.mod +++ b/go.mod @@ -16,26 +16,27 @@ require ( github.com/openstack-k8s-operators/octavia-operator/api v0.0.0-00010101000000-000000000000 github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250819145131-887afcd1475b go.uber.org/zap v1.27.0 - k8s.io/api v0.29.15 - k8s.io/apimachinery v0.29.15 - k8s.io/client-go v0.29.15 - sigs.k8s.io/controller-runtime v0.17.6 + k8s.io/api v0.31.12 + k8s.io/apimachinery v0.31.12 + k8s.io/client-go v0.31.12 + sigs.k8s.io/controller-runtime v0.19.7 ) require ( github.com/google/uuid v1.6.0 github.com/openstack-k8s-operators/lib-common/modules/test v0.6.1-0.20250730071847-837b07f8d72f golang.org/x/crypto v0.33.0 - k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 + k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d ) require ( github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.12.0 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-logr/zapr v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect @@ -58,31 +59,30 @@ require ( github.com/openshift/api v3.9.0+incompatible // indirect github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250730071847-837b07f8d72f // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.19.0 // indirect - github.com/prometheus/client_model v0.6.0 // indirect - github.com/prometheus/common v0.51.1 // indirect - github.com/prometheus/procfs v0.13.0 // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/rabbitmq/cluster-operator/v2 v2.9.0 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/x448/float16 v0.8.4 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.28.0 // indirect - golang.org/x/oauth2 v0.18.0 // indirect + golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sys v0.30.0 // indirect golang.org/x/term v0.29.0 // indirect golang.org/x/text v0.22.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.24.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/protobuf v1.34.1 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.29.15 // indirect - k8s.io/component-base v0.29.15 // indirect - k8s.io/klog/v2 v2.120.1 // indirect + k8s.io/apiextensions-apiserver v0.31.0 // indirect + k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect @@ -91,9 +91,9 @@ require ( replace github.com/openstack-k8s-operators/octavia-operator/api => ./api -// mschuppert: map to latest commit from release-4.16 tag +// mschuppert: map to latest commit from release-4.18 tag // must consistent within modules and service operators -replace github.com/openshift/api => github.com/openshift/api v0.0.0-20240830023148-b7d0481c9094 //allow-merging +replace github.com/openshift/api => github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e //allow-merging // custom RabbitmqClusterSpecCore for OpenStackControlplane (v2.6.0_patches_tag) replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20250717122149-12f70b7f3d8d //allow-merging diff --git a/go.sum b/go.sum index 25beb614..59682e64 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -14,6 +14,8 @@ github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0 github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= @@ -30,13 +32,10 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -76,8 +75,8 @@ github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/openshift/api v0.0.0-20240830023148-b7d0481c9094 h1:J1wuGhVxpsHykZBa6Beb1gQ96Ptej9AE/BvwCBiRj1E= -github.com/openshift/api v0.0.0-20240830023148-b7d0481c9094/go.mod h1:CxgbWAlvu2iQB0UmKTtRu1YfepRg1/vJ64n2DlIEVz4= +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= github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f h1:chuu4iBT5sXHYw8aPeP/pWC+S3yGo6hdy39foP7c5vs= github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f/go.mod h1:Dv8qpmBIQy3Jv/EyQnOyc0w61X8vyfxpjcIQONP5CwY= github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250818180001-057253e3d233 h1:1Kuny36wIpijE4RsFu8e+b0uUK8Gh0PgvlEVOOhG+uo= @@ -98,27 +97,29 @@ 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/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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= -github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= -github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= -github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= -github.com/prometheus/common v0.51.1 h1:eIjN50Bwglz6a/c3hAgSMcofL3nD+nFQkV6Dd4DsQCw= -github.com/prometheus/common v0.51.1/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= -github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= -github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -128,7 +129,6 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= @@ -136,43 +136,34 @@ golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= -golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= -golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -181,7 +172,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -190,15 +180,13 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -206,24 +194,22 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.29.15 h1:QxPcAheYujeBwkdiE0vMyKkAtqUq5YNyXVqimT+me44= -k8s.io/api v0.29.15/go.mod h1:16duIp2ez6GiLPq1g8XtZNIkw6hJpIitpxZSvv0dZ6E= -k8s.io/apiextensions-apiserver v0.29.15 h1:XI5axgsWqMlIIgpHbcz5vPjk06i3ibHv5FUdSfdtQLU= -k8s.io/apiextensions-apiserver v0.29.15/go.mod h1:6ZU61z32I8WUwbBTPIANUesTj5G40sZek0ojmeoMJI8= -k8s.io/apimachinery v0.29.15 h1:aLc0wghElkdnTO7TMVTxTrifoXah1lqRL8s6szDHGbg= -k8s.io/apimachinery v0.29.15/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y= -k8s.io/client-go v0.29.15 h1:zCBOXKCtz9Hl8boKUGs8zbtZEP6pc7O8Ov3ma+gnS6o= -k8s.io/client-go v0.29.15/go.mod h1:xPy0D3p4sonPhZhI3QoYo4m7oLKoPjFf4vYF9oxoxNM= -k8s.io/component-base v0.29.15 h1:CvmXXTDyk43FDaiJ/Rp+yWFjw6hkUI2t7mIJUrK5j00= -k8s.io/component-base v0.29.15/go.mod h1:jH/sbuvmXew2Fz2iIKNMeNw8o/d1KR9tAg6uekQKnVk= -k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/api v0.31.12 h1:yysm83xHIoKAwfm2w0dT6Yz7vfWzl841AEMI7Y8wDa8= +k8s.io/api v0.31.12/go.mod h1:f/srhhI7aDs9K4s0W1GX4/zb+cIf5uWrBjGyoO/XgJc= +k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk= +k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk= +k8s.io/apimachinery v0.31.12 h1:y34W8rNKc+jDxUvEXarjahqM6vOV5iqgZPuRqRuyEh8= +k8s.io/apimachinery v0.31.12/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.12 h1:JJhouOoU1bKdPWplkZ2CpYA74+lxj3Zsn15aoGLX6Hk= +k8s.io/client-go v0.31.12/go.mod h1:kjQ5WSec9ShP3T1auTDFW4bTqgmJdBuZPsjq5FqeuYE= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 h1:qVoMaQV5t62UUvHe16Q3eb2c5HPzLHYzsi0Tu/xLndo= k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/controller-runtime v0.17.6 h1:12IXsozEsIXWAMRpgRlYS1jjAHQXHtWEOMdULh3DbEw= -sigs.k8s.io/controller-runtime v0.17.6/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.19.7 h1:DLABZfMr20A+AwCZOHhcbcu+TqBXnJZaVBri9K3EO48= +sigs.k8s.io/controller-runtime v0.19.7/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= diff --git a/tests/functional/api_fixture.go b/tests/functional/api_fixture.go index 530b154d..042e2f7f 100644 --- a/tests/functional/api_fixture.go +++ b/tests/functional/api_fixture.go @@ -34,22 +34,20 @@ import ( api "github.com/openstack-k8s-operators/lib-common/modules/test/apis" ) -var ( - keystoneProjects = []projects.Project{ - { - Name: "admin", - ID: uuid.New().String(), - }, - { - Name: "service", - ID: uuid.New().String(), - }, - { - Name: "project1234", - ID: uuid.New().String(), - }, - } -) +var keystoneProjects = []projects.Project{ + { + Name: "admin", + ID: uuid.New().String(), + }, + { + Name: "service", + ID: uuid.New().String(), + }, + { + Name: "project1234", + ID: uuid.New().String(), + }, +} // ResponseHandleToken responds with a valid keystone token and the computeURL in the catalog func ResponseHandleToken( From 4d635cf7a47d78f2d8a3f7ca19f948e6913d73cb Mon Sep 17 00:00:00 2001 From: Martin Schuppert Date: Wed, 17 Sep 2025 08:59:15 +0200 Subject: [PATCH 3/3] bump openstack-k8s-operator dependencies Signed-off-by: Martin Schuppert --- .../octavia.openstack.org_octaviaapis.yaml | 4 +-- api/bases/octavia.openstack.org_octavias.yaml | 4 +-- api/go.mod | 6 ++-- api/go.sum | 12 +++---- .../octavia.openstack.org_octaviaapis.yaml | 4 +-- .../bases/octavia.openstack.org_octavias.yaml | 4 +-- go.mod | 18 +++++----- go.sum | 36 +++++++++---------- 8 files changed, 44 insertions(+), 44 deletions(-) diff --git a/api/bases/octavia.openstack.org_octaviaapis.yaml b/api/bases/octavia.openstack.org_octaviaapis.yaml index b3c11506..f91bc11e 100644 --- a/api/bases/octavia.openstack.org_octaviaapis.yaml +++ b/api/bases/octavia.openstack.org_octaviaapis.yaml @@ -124,7 +124,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: @@ -133,7 +133,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/api/bases/octavia.openstack.org_octavias.yaml b/api/bases/octavia.openstack.org_octavias.yaml index 1253eeb1..5126d071 100644 --- a/api/bases/octavia.openstack.org_octavias.yaml +++ b/api/bases/octavia.openstack.org_octavias.yaml @@ -230,7 +230,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: @@ -239,7 +239,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/api/go.mod b/api/go.mod index 16aa724a..12eac31d 100644 --- a/api/go.mod +++ b/api/go.mod @@ -5,8 +5,8 @@ go 1.24 require ( github.com/onsi/ginkgo/v2 v2.20.1 github.com/onsi/gomega v1.34.1 - github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f - github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f + github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 + github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250922082314-c83d83092a04 k8s.io/api v0.31.12 k8s.io/apimachinery v0.31.12 k8s.io/client-go v0.31.12 @@ -64,7 +64,7 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.31.0 // indirect + k8s.io/apiextensions-apiserver v0.31.12 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 // indirect k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d // indirect diff --git a/api/go.sum b/api/go.sum index 3a744ee9..56c39f33 100644 --- a/api/go.sum +++ b/api/go.sum @@ -71,10 +71,10 @@ github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f h1:chuu4iBT5sXHYw8aPeP/pWC+S3yGo6hdy39foP7c5vs= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f/go.mod h1:Dv8qpmBIQy3Jv/EyQnOyc0w61X8vyfxpjcIQONP5CwY= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f h1:DW8aNjEtDFrWiZ6vWuOXwdRB4eBD0n+bA9foQkOEx6U= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f/go.mod h1:P+7F1wiwZUxOy4myYXFyc/uBtGATDFpk3yAllXe1Vzk= +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/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/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= @@ -165,8 +165,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= k8s.io/api v0.31.12 h1:yysm83xHIoKAwfm2w0dT6Yz7vfWzl841AEMI7Y8wDa8= k8s.io/api v0.31.12/go.mod h1:f/srhhI7aDs9K4s0W1GX4/zb+cIf5uWrBjGyoO/XgJc= -k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk= -k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk= +k8s.io/apiextensions-apiserver v0.31.12 h1:d32I3VReAly5Qoc9ZXhO4/iObYmm7Jk6VvAeRAbg/MA= +k8s.io/apiextensions-apiserver v0.31.12/go.mod h1:KcBI/Z/WQmbffBwfqQmqHhALhvun5JNJJh8Y29CJwUo= k8s.io/apimachinery v0.31.12 h1:y34W8rNKc+jDxUvEXarjahqM6vOV5iqgZPuRqRuyEh8= k8s.io/apimachinery v0.31.12/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/client-go v0.31.12 h1:JJhouOoU1bKdPWplkZ2CpYA74+lxj3Zsn15aoGLX6Hk= diff --git a/config/crd/bases/octavia.openstack.org_octaviaapis.yaml b/config/crd/bases/octavia.openstack.org_octaviaapis.yaml index b3c11506..f91bc11e 100644 --- a/config/crd/bases/octavia.openstack.org_octaviaapis.yaml +++ b/config/crd/bases/octavia.openstack.org_octaviaapis.yaml @@ -124,7 +124,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: @@ -133,7 +133,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/config/crd/bases/octavia.openstack.org_octavias.yaml b/config/crd/bases/octavia.openstack.org_octavias.yaml index 1253eeb1..5126d071 100644 --- a/config/crd/bases/octavia.openstack.org_octavias.yaml +++ b/config/crd/bases/octavia.openstack.org_octavias.yaml @@ -230,7 +230,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: @@ -239,7 +239,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/go.mod b/go.mod index 88d501e4..6acec2de 100644 --- a/go.mod +++ b/go.mod @@ -8,13 +8,13 @@ require ( github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.7.7 github.com/onsi/ginkgo/v2 v2.20.1 github.com/onsi/gomega v1.34.1 - github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f - github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250818180001-057253e3d233 - github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f - github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250730071847-837b07f8d72f - github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250819151523-e1c898c710cb + github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250922155301-057562fb7182 + 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 + github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250922082314-c83d83092a04 + github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250922154138-e032ee393bab github.com/openstack-k8s-operators/octavia-operator/api v0.0.0-00010101000000-000000000000 - github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250819145131-887afcd1475b + github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250918124008-71fb50adbeb5 go.uber.org/zap v1.27.0 k8s.io/api v0.31.12 k8s.io/apimachinery v0.31.12 @@ -24,7 +24,7 @@ require ( require ( github.com/google/uuid v1.6.0 - github.com/openstack-k8s-operators/lib-common/modules/test v0.6.1-0.20250730071847-837b07f8d72f + github.com/openstack-k8s-operators/lib-common/modules/test v0.6.1-0.20250922082314-c83d83092a04 golang.org/x/crypto v0.33.0 k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d ) @@ -57,7 +57,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/openshift/api v3.9.0+incompatible // indirect - github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250730071847-837b07f8d72f // indirect + github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250922082314-c83d83092a04 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.19.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect @@ -81,7 +81,7 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.31.0 // indirect + k8s.io/apiextensions-apiserver v0.31.12 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/go.sum b/go.sum index 59682e64..9832f4de 100644 --- a/go.sum +++ b/go.sum @@ -77,22 +77,22 @@ github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= 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= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f h1:chuu4iBT5sXHYw8aPeP/pWC+S3yGo6hdy39foP7c5vs= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250909143828-e33d35ffd64f/go.mod h1:Dv8qpmBIQy3Jv/EyQnOyc0w61X8vyfxpjcIQONP5CwY= -github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250818180001-057253e3d233 h1:1Kuny36wIpijE4RsFu8e+b0uUK8Gh0PgvlEVOOhG+uo= -github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20250818180001-057253e3d233/go.mod h1:qevkmDP/Yr7FTM0ZVe2fABjSjrfkkdZkYeMho71OVG0= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f h1:DW8aNjEtDFrWiZ6vWuOXwdRB4eBD0n+bA9foQkOEx6U= -github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20250730071847-837b07f8d72f/go.mod h1:P+7F1wiwZUxOy4myYXFyc/uBtGATDFpk3yAllXe1Vzk= -github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250730071847-837b07f8d72f h1:nGYLHcpM7EjiSzN4bmiLZbxty9u0k0Qzvkqn+1s1TF0= -github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250730071847-837b07f8d72f/go.mod h1:nachFP0Yicw/e8ZlqZzvnBN6w9kjMcnqrhaDw36PGjw= -github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250730071847-837b07f8d72f h1:/e/jQu3GThcystmZFyzlQq6nOKpORQq84HhcbkKxAq4= -github.com/openstack-k8s-operators/lib-common/modules/storage v0.6.1-0.20250730071847-837b07f8d72f/go.mod h1:U3LQ4Nz2+syTPfW66bSLv6OzefLpsqxWLdX9AFotRPA= -github.com/openstack-k8s-operators/lib-common/modules/test v0.6.1-0.20250730071847-837b07f8d72f h1:r4WiIm2JdcSY7RTWsv008d45bwQl3qTfjd4B2k2fpL0= -github.com/openstack-k8s-operators/lib-common/modules/test v0.6.1-0.20250730071847-837b07f8d72f/go.mod h1:L3t8ty8BYur+yQC4EbxolVOU85A62oxODM5rMApOwfc= -github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250819151523-e1c898c710cb h1:10W54mDBhON+L5PItSHV3ahOAmZH3Xi4dvEK5yhNLRE= -github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250819151523-e1c898c710cb/go.mod h1:0dWVKC1svlk2h+vyJGlKDcwgq4yJaovKXBhGZNi5tQ0= -github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250819145131-887afcd1475b h1:2KZzYrk8ll3MxB04R9ygKnUsbaQxUu1dYs9nWC434tU= -github.com/openstack-k8s-operators/ovn-operator/api v0.6.1-0.20250819145131-887afcd1475b/go.mod h1:mqVWiOwCE5prMK5F2eFl9RU/z8U7wTyaXblg6PKr+oU= +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/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.20250922082314-c83d83092a04 h1:1t4qZshLvaTzytFb9foCBtTtKT4uXzYtVaYTlgYbt+4= +github.com/openstack-k8s-operators/lib-common/modules/openstack v0.6.1-0.20250922082314-c83d83092a04/go.mod h1:IO6+EHBk1Ttd4L8mfnMtG58cc36tDyvdxzCytn+hKeE= +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/mariadb-operator/api v0.6.1-0.20250922154138-e032ee393bab h1:CE1/GgLlgxcOBG9euwGU5VF+8Rdj1SmGoAO2++ibDYY= +github.com/openstack-k8s-operators/mariadb-operator/api v0.6.1-0.20250922154138-e032ee393bab/go.mod h1:x3xIYBq+TbbXgxH/Xf159P8Dil+pxck4C2GwrYMm+d0= +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/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/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -196,8 +196,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= k8s.io/api v0.31.12 h1:yysm83xHIoKAwfm2w0dT6Yz7vfWzl841AEMI7Y8wDa8= k8s.io/api v0.31.12/go.mod h1:f/srhhI7aDs9K4s0W1GX4/zb+cIf5uWrBjGyoO/XgJc= -k8s.io/apiextensions-apiserver v0.31.0 h1:fZgCVhGwsclj3qCw1buVXCV6khjRzKC5eCFt24kyLSk= -k8s.io/apiextensions-apiserver v0.31.0/go.mod h1:b9aMDEYaEe5sdK+1T0KU78ApR/5ZVp4i56VacZYEHxk= +k8s.io/apiextensions-apiserver v0.31.12 h1:d32I3VReAly5Qoc9ZXhO4/iObYmm7Jk6VvAeRAbg/MA= +k8s.io/apiextensions-apiserver v0.31.12/go.mod h1:KcBI/Z/WQmbffBwfqQmqHhALhvun5JNJJh8Y29CJwUo= k8s.io/apimachinery v0.31.12 h1:y34W8rNKc+jDxUvEXarjahqM6vOV5iqgZPuRqRuyEh8= k8s.io/apimachinery v0.31.12/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/client-go v0.31.12 h1:JJhouOoU1bKdPWplkZ2CpYA74+lxj3Zsn15aoGLX6Hk=