diff --git a/.github/workflows/go-coverage.yml b/.github/workflows/go-coverage.yml index 81bfdcc3..3cdaf605 100644 --- a/.github/workflows/go-coverage.yml +++ b/.github/workflows/go-coverage.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: 1.22 + go-version: 1.23 - name: Run go test with coverage run: COVER_PROFILE=coverage.txt make test - name: Codecov upload diff --git a/Makefile b/Makefile index 4874cb9f..8c8adb17 100644 --- a/Makefile +++ b/Makefile @@ -129,8 +129,8 @@ lint: $(GOLANGCI_LINT) $(STATIC_CHECK) generate-mocks ## Run linting for the pro .PHONY: modules modules: ## Runs go mod to ensure proper vendoring. - go mod tidy -compat=1.22 - cd $(TOOLS_DIR); go mod tidy -compat=1.22 + go mod tidy -compat=1.23 + cd $(TOOLS_DIR); go mod tidy -compat=1.23 .PHONY: generate-all generate-all: generate-mocks generate-deepcopy generate-manifests diff --git a/api/v1beta1/conversion.go b/api/v1beta1/conversion.go index 05086cc0..e4ef38f6 100644 --- a/api/v1beta1/conversion.go +++ b/api/v1beta1/conversion.go @@ -185,3 +185,14 @@ func Convert_v1beta3_Network_To_v1beta1_Network(in *v1beta3.Network, out *Networ // Skip Gateway, Netmask, and VPC fields as they do not exist in v1beta1.Network return nil } + +// Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus handles manual conversion of CloudStackIsolatedNetworkStatus from v1beta3 to v1beta1 +// +//nolint:golint,revive,stylecheck +func Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus(in *v1beta3.CloudStackIsolatedNetworkStatus, out *CloudStackIsolatedNetworkStatus, _ conv.Scope) error { + out.PublicIPID = in.PublicIPID + out.LBRuleID = in.LBRuleID + out.Ready = in.Ready + // RoutingMode field doesn't exist in v1beta1, so we ignore it during conversion + return nil +} diff --git a/api/v1beta1/zz_generated.conversion.go b/api/v1beta1/zz_generated.conversion.go index 8a52cde5..51eb2885 100644 --- a/api/v1beta1/zz_generated.conversion.go +++ b/api/v1beta1/zz_generated.conversion.go @@ -103,11 +103,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta3.CloudStackIsolatedNetworkStatus)(nil), (*CloudStackIsolatedNetworkStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus(a.(*v1beta3.CloudStackIsolatedNetworkStatus), b.(*CloudStackIsolatedNetworkStatus), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*CloudStackMachine)(nil), (*v1beta3.CloudStackMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_CloudStackMachine_To_v1beta3_CloudStackMachine(a.(*CloudStackMachine), b.(*v1beta3.CloudStackMachine), scope) }); err != nil { @@ -278,6 +273,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta3.CloudStackIsolatedNetworkStatus)(nil), (*CloudStackIsolatedNetworkStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus(a.(*v1beta3.CloudStackIsolatedNetworkStatus), b.(*CloudStackIsolatedNetworkStatus), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta3.CloudStackMachineSpec)(nil), (*CloudStackMachineSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta3_CloudStackMachineSpec_To_v1beta1_CloudStackMachineSpec(a.(*v1beta3.CloudStackMachineSpec), b.(*CloudStackMachineSpec), scope) }); err != nil { @@ -508,6 +508,7 @@ func autoConvert_v1beta3_CloudStackIsolatedNetworkSpec_To_v1beta1_CloudStackIsol // WARNING: in.FailureDomainName requires manual conversion: does not exist in peer-type // WARNING: in.Gateway requires manual conversion: does not exist in peer-type // WARNING: in.Netmask requires manual conversion: does not exist in peer-type + // WARNING: in.Offering requires manual conversion: does not exist in peer-type // WARNING: in.VPC requires manual conversion: does not exist in peer-type return nil } @@ -527,15 +528,11 @@ func Convert_v1beta1_CloudStackIsolatedNetworkStatus_To_v1beta3_CloudStackIsolat func autoConvert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus(in *v1beta3.CloudStackIsolatedNetworkStatus, out *CloudStackIsolatedNetworkStatus, s conversion.Scope) error { out.PublicIPID = in.PublicIPID out.LBRuleID = in.LBRuleID + // WARNING: in.RoutingMode requires manual conversion: does not exist in peer-type out.Ready = in.Ready return nil } -// Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus is an autogenerated conversion function. -func Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus(in *v1beta3.CloudStackIsolatedNetworkStatus, out *CloudStackIsolatedNetworkStatus, s conversion.Scope) error { - return autoConvert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta1_CloudStackIsolatedNetworkStatus(in, out, s) -} - func autoConvert_v1beta1_CloudStackMachine_To_v1beta3_CloudStackMachine(in *CloudStackMachine, out *v1beta3.CloudStackMachine, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1beta1_CloudStackMachineSpec_To_v1beta3_CloudStackMachineSpec(&in.Spec, &out.Spec, s); err != nil { @@ -992,6 +989,8 @@ func autoConvert_v1beta3_Network_To_v1beta1_Network(in *v1beta3.Network, out *Ne out.Name = in.Name // WARNING: in.Gateway requires manual conversion: does not exist in peer-type // WARNING: in.Netmask requires manual conversion: does not exist in peer-type + // WARNING: in.Offering requires manual conversion: does not exist in peer-type // WARNING: in.VPC requires manual conversion: does not exist in peer-type + // WARNING: in.RoutingMode requires manual conversion: does not exist in peer-type return nil } diff --git a/api/v1beta2/conversion.go b/api/v1beta2/conversion.go index 47cc758c..7f810154 100644 --- a/api/v1beta2/conversion.go +++ b/api/v1beta2/conversion.go @@ -43,3 +43,14 @@ func Convert_v1beta3_CloudStackIsolatedNetworkSpec_To_v1beta2_CloudStackIsolated // Skip Gateway, Netmask, and VPC fields as they do not exist in v1beta2.CloudStackIsolatedNetworkSpec return nil } + +// Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus handles manual conversion of CloudStackIsolatedNetworkStatus from v1beta3 to v1beta2 +// +//nolint:golint,revive,stylecheck +func Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus(in *v1beta3.CloudStackIsolatedNetworkStatus, out *CloudStackIsolatedNetworkStatus, _ conv.Scope) error { + out.PublicIPID = in.PublicIPID + out.LBRuleID = in.LBRuleID + out.Ready = in.Ready + // RoutingMode field doesn't exist in v1beta2, so we ignore it during conversion + return nil +} diff --git a/api/v1beta2/zz_generated.conversion.go b/api/v1beta2/zz_generated.conversion.go index 0619f467..38e70b6d 100644 --- a/api/v1beta2/zz_generated.conversion.go +++ b/api/v1beta2/zz_generated.conversion.go @@ -173,11 +173,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1beta3.CloudStackIsolatedNetworkStatus)(nil), (*CloudStackIsolatedNetworkStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus(a.(*v1beta3.CloudStackIsolatedNetworkStatus), b.(*CloudStackIsolatedNetworkStatus), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*CloudStackMachine)(nil), (*v1beta3.CloudStackMachine)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_CloudStackMachine_To_v1beta3_CloudStackMachine(a.(*CloudStackMachine), b.(*v1beta3.CloudStackMachine), scope) }); err != nil { @@ -358,6 +353,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta3.CloudStackIsolatedNetworkStatus)(nil), (*CloudStackIsolatedNetworkStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus(a.(*v1beta3.CloudStackIsolatedNetworkStatus), b.(*CloudStackIsolatedNetworkStatus), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta3.CloudStackMachineTemplateSpec)(nil), (*CloudStackMachineTemplateSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta3_CloudStackMachineTemplateSpec_To_v1beta2_CloudStackMachineTemplateSpec(a.(*v1beta3.CloudStackMachineTemplateSpec), b.(*CloudStackMachineTemplateSpec), scope) }); err != nil { @@ -817,6 +817,7 @@ func autoConvert_v1beta3_CloudStackIsolatedNetworkSpec_To_v1beta2_CloudStackIsol out.FailureDomainName = in.FailureDomainName // WARNING: in.Gateway requires manual conversion: does not exist in peer-type // WARNING: in.Netmask requires manual conversion: does not exist in peer-type + // WARNING: in.Offering requires manual conversion: does not exist in peer-type // WARNING: in.VPC requires manual conversion: does not exist in peer-type return nil } @@ -836,15 +837,11 @@ func Convert_v1beta2_CloudStackIsolatedNetworkStatus_To_v1beta3_CloudStackIsolat func autoConvert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus(in *v1beta3.CloudStackIsolatedNetworkStatus, out *CloudStackIsolatedNetworkStatus, s conversion.Scope) error { out.PublicIPID = in.PublicIPID out.LBRuleID = in.LBRuleID + // WARNING: in.RoutingMode requires manual conversion: does not exist in peer-type out.Ready = in.Ready return nil } -// Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus is an autogenerated conversion function. -func Convert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus(in *v1beta3.CloudStackIsolatedNetworkStatus, out *CloudStackIsolatedNetworkStatus, s conversion.Scope) error { - return autoConvert_v1beta3_CloudStackIsolatedNetworkStatus_To_v1beta2_CloudStackIsolatedNetworkStatus(in, out, s) -} - func autoConvert_v1beta2_CloudStackMachine_To_v1beta3_CloudStackMachine(in *CloudStackMachine, out *v1beta3.CloudStackMachine, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1beta2_CloudStackMachineSpec_To_v1beta3_CloudStackMachineSpec(&in.Spec, &out.Spec, s); err != nil { @@ -1291,6 +1288,8 @@ func autoConvert_v1beta3_Network_To_v1beta2_Network(in *v1beta3.Network, out *Ne out.Name = in.Name // WARNING: in.Gateway requires manual conversion: does not exist in peer-type // WARNING: in.Netmask requires manual conversion: does not exist in peer-type + // WARNING: in.Offering requires manual conversion: does not exist in peer-type // WARNING: in.VPC requires manual conversion: does not exist in peer-type + // WARNING: in.RoutingMode requires manual conversion: does not exist in peer-type return nil } diff --git a/api/v1beta3/cloudstackfailuredomain_types.go b/api/v1beta3/cloudstackfailuredomain_types.go index a53f47eb..02a6cd00 100644 --- a/api/v1beta3/cloudstackfailuredomain_types.go +++ b/api/v1beta3/cloudstackfailuredomain_types.go @@ -72,6 +72,12 @@ type Network struct { // Cloudstack VPC the network belongs to. // +optional VPC *VPC `json:"vpc,omitempty"` + + // Cloudstack Network's routing mode. + // Routing mode can be Dynamic, or Static. + // Empty value means the network mode is NATTED, not ROUTED. + // +optional + RoutingMode string `json:"routingMode,omitempty"` } type VPC struct { diff --git a/api/v1beta3/cloudstackisolatednetwork_types.go b/api/v1beta3/cloudstackisolatednetwork_types.go index cccf9135..fc868f1d 100644 --- a/api/v1beta3/cloudstackisolatednetwork_types.go +++ b/api/v1beta3/cloudstackisolatednetwork_types.go @@ -68,19 +68,25 @@ type CloudStackIsolatedNetworkStatus struct { // The ID of the lb rule used to assign VMs to the lb. LBRuleID string `json:"loadBalancerRuleID,omitempty"` + // Routing mode of the network. + // Routing mode can be Dynamic, or Static. + // Empty value means the network mode is NATTED, not ROUTED. + RoutingMode string `json:"routingMode,omitempty"` + // Ready indicates the readiness of this provider resource. Ready bool `json:"ready"` } func (n *CloudStackIsolatedNetwork) Network() *Network { return &Network{ - Name: n.Spec.Name, - Type: "IsolatedNetwork", - ID: n.Spec.ID, - Gateway: n.Spec.Gateway, - Netmask: n.Spec.Netmask, - VPC: n.Spec.VPC, - Offering: n.Spec.Offering, + Name: n.Spec.Name, + Type: "IsolatedNetwork", + ID: n.Spec.ID, + Gateway: n.Spec.Gateway, + Netmask: n.Spec.Netmask, + VPC: n.Spec.VPC, + Offering: n.Spec.Offering, + RoutingMode: n.Status.RoutingMode, } } diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackclusters.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackclusters.yaml index c047798c..97b8df7b 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackclusters.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackclusters.yaml @@ -432,6 +432,12 @@ spec: isolated networks and "DefaultIsolatedNetworkOfferingForVpcNetworks" for VPC networks. type: string + routingMode: + description: |- + Cloudstack Network's routing mode. + Routing mode can be Dynamic, or Static. + Empty value means the network mode is NATTED, not ROUTED. + type: string type: description: Cloudstack Network Type the cluster is built in. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackfailuredomains.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackfailuredomains.yaml index 6d0eae81..51b7123f 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackfailuredomains.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackfailuredomains.yaml @@ -200,6 +200,12 @@ spec: isolated networks and "DefaultIsolatedNetworkOfferingForVpcNetworks" for VPC networks. type: string + routingMode: + description: |- + Cloudstack Network's routing mode. + Routing mode can be Dynamic, or Static. + Empty value means the network mode is NATTED, not ROUTED. + type: string type: description: Cloudstack Network Type the cluster is built in. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackisolatednetworks.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackisolatednetworks.yaml index 373036f6..b12fa680 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackisolatednetworks.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_cloudstackisolatednetworks.yaml @@ -260,6 +260,12 @@ spec: ready: description: Ready indicates the readiness of this provider resource. type: boolean + routingMode: + description: |- + Routing mode of the network. + Routing mode can be Dynamic, or Static. + Empty value means the network mode is NATTED, not ROUTED. + type: string required: - ready type: object diff --git a/controllers/cks_cluster_controller_test.go b/controllers/cks_cluster_controller_test.go index 4b1ac978..b50835ff 100644 --- a/controllers/cks_cluster_controller_test.go +++ b/controllers/cks_cluster_controller_test.go @@ -17,9 +17,9 @@ limitations under the License. package controllers_test import ( - "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + "go.uber.org/mock/gomock" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/utils/ptr" infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3" diff --git a/controllers/cks_machine_controller_test.go b/controllers/cks_machine_controller_test.go index 4b871c1e..d575a55a 100644 --- a/controllers/cks_machine_controller_test.go +++ b/controllers/cks_machine_controller_test.go @@ -17,9 +17,9 @@ limitations under the License. package controllers_test import ( - "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + "go.uber.org/mock/gomock" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/utils/ptr" diff --git a/controllers/cloudstackaffinitygroup_controller_test.go b/controllers/cloudstackaffinitygroup_controller_test.go index de8e5c8a..ded23512 100644 --- a/controllers/cloudstackaffinitygroup_controller_test.go +++ b/controllers/cloudstackaffinitygroup_controller_test.go @@ -17,9 +17,9 @@ limitations under the License. package controllers_test import ( - "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/utils/ptr" infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3" diff --git a/controllers/cloudstackcluster_controller_test.go b/controllers/cloudstackcluster_controller_test.go index 3b02f41f..259504b7 100644 --- a/controllers/cloudstackcluster_controller_test.go +++ b/controllers/cloudstackcluster_controller_test.go @@ -17,9 +17,9 @@ limitations under the License. package controllers_test import ( - "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" "k8s.io/utils/ptr" infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3" "sigs.k8s.io/cluster-api-provider-cloudstack/controllers" diff --git a/controllers/cloudstackfailuredomain_controller_test.go b/controllers/cloudstackfailuredomain_controller_test.go index e98a6919..572d8148 100644 --- a/controllers/cloudstackfailuredomain_controller_test.go +++ b/controllers/cloudstackfailuredomain_controller_test.go @@ -17,9 +17,9 @@ limitations under the License. package controllers_test import ( - "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/utils/ptr" infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3" diff --git a/controllers/cloudstackisolatednetwork_controller_test.go b/controllers/cloudstackisolatednetwork_controller_test.go index 40cb5521..f4cfed2d 100644 --- a/controllers/cloudstackisolatednetwork_controller_test.go +++ b/controllers/cloudstackisolatednetwork_controller_test.go @@ -17,9 +17,9 @@ limitations under the License. package controllers_test import ( - g "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + g "go.uber.org/mock/gomock" "k8s.io/apimachinery/pkg/types" "k8s.io/utils/ptr" infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3" diff --git a/controllers/cloudstackmachine_controller.go b/controllers/cloudstackmachine_controller.go index b7f14f3d..9c0a1aab 100644 --- a/controllers/cloudstackmachine_controller.go +++ b/controllers/cloudstackmachine_controller.go @@ -295,13 +295,17 @@ func (r *CloudStackMachineReconciliationRunner) RequeueIfInstanceNotRunning() (r // AddToLBIfNeeded adds instance to load balancer if it is a control plane in an isolated network. func (r *CloudStackMachineReconciliationRunner) AddToLBIfNeeded() (retRes ctrl.Result, reterr error) { if util.IsControlPlaneMachine(r.CAPIMachine) && r.FailureDomain.Spec.Zone.Network.Type == cloud.NetworkTypeIsolated { - r.Log.Info("Assigning VM to load balancer rule.") if r.IsoNet.Spec.Name == "" { return r.RequeueWithMessage("Could not get required Isolated Network for VM, requeueing.") } - err := r.CSUser.AssignVMToLoadBalancerRule(r.IsoNet, *r.ReconciliationSubject.Spec.InstanceID) - if err != nil { - return ctrl.Result{}, err + + if r.IsoNet.Status.RoutingMode == "" { + // For non-routed networks, use load balancer + r.Log.Info("Assigning VM to load balancer rule.") + err := r.CSUser.AssignVMToLoadBalancerRule(r.IsoNet, *r.ReconciliationSubject.Spec.InstanceID) + if err != nil { + return ctrl.Result{}, err + } } } return ctrl.Result{}, nil diff --git a/controllers/cloudstackmachine_controller_test.go b/controllers/cloudstackmachine_controller_test.go index f98d39f6..b8a1e34a 100644 --- a/controllers/cloudstackmachine_controller_test.go +++ b/controllers/cloudstackmachine_controller_test.go @@ -20,9 +20,9 @@ import ( "fmt" "strings" - "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" diff --git a/controllers/controllers_suite_test.go b/controllers/controllers_suite_test.go index d8da0f30..4082c0d9 100644 --- a/controllers/controllers_suite_test.go +++ b/controllers/controllers_suite_test.go @@ -37,10 +37,10 @@ import ( "github.com/apache/cloudstack-go/v2/cloudstack" "github.com/go-logr/logr" - "github.com/golang/mock/gomock" ginkgo "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" "github.com/pkg/errors" + gomock "go.uber.org/mock/gomock" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" diff --git a/controllers/utils/base_reconciler_test.go b/controllers/utils/base_reconciler_test.go index aa8de28d..3eb0cf52 100644 --- a/controllers/utils/base_reconciler_test.go +++ b/controllers/utils/base_reconciler_test.go @@ -20,9 +20,9 @@ import ( "context" "github.com/go-logr/logr" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/tools/record" diff --git a/go.mod b/go.mod index 8ef63352..651f2784 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,12 @@ module sigs.k8s.io/cluster-api-provider-cloudstack -go 1.22.0 +go 1.23 -toolchain go1.22.12 +toolchain go1.23.2 require ( - github.com/apache/cloudstack-go/v2 v2.16.1 + github.com/apache/cloudstack-go/v2 v2.17.0 github.com/go-logr/logr v1.4.2 - github.com/golang/mock v1.6.0 github.com/hashicorp/go-multierror v1.1.1 github.com/jellydator/ttlcache/v3 v3.2.0 github.com/onsi/ginkgo/v2 v2.22.2 @@ -16,6 +15,7 @@ require ( github.com/prometheus/client_golang v1.19.1 github.com/smallfish/simpleyaml v0.1.0 github.com/spf13/pflag v1.0.5 + go.uber.org/mock v0.5.1 golang.org/x/text v0.21.0 gopkg.in/yaml.v3 v3.0.1 k8s.io/api v0.31.3 diff --git a/go.sum b/go.sum index 723c83cc..73fa5ef5 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,8 @@ github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cq github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= -github.com/apache/cloudstack-go/v2 v2.16.1 h1:2wOE4RKEjWPRZNO7ZNnZYmR3JJ+JJPQwhoc7W1fkiK4= -github.com/apache/cloudstack-go/v2 v2.16.1/go.mod h1:cZsgFe+VmrgLBm7QjeHTJBXYe8E5+yGYkdfwGb+Pu9c= +github.com/apache/cloudstack-go/v2 v2.17.0 h1:jueNPcm8g7ReY34xoTVubMyRcVrpuPO/tZbzN68DCLA= +github.com/apache/cloudstack-go/v2 v2.17.0/go.mod h1:E11d4GJG/ZG1R+i1/q7p5/D5S+XVqCluFVd3sjcp8U0= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -79,8 +79,6 @@ github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOW github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= 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/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= @@ -206,7 +204,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= 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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI= go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE= go.etcd.io/etcd/api/v3 v3.5.17 h1:cQB8eb8bxwuxOilBpMJAEo8fAONyrdXTHUNcMd8yT1w= @@ -243,6 +240,8 @@ go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeX go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 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/mock v0.5.1 h1:ASgazW/qBmR+A32MYFDB6E2POoTgOwT509VP0CT/fjs= +go.uber.org/mock v0.5.1/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -256,12 +255,10 @@ 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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= @@ -269,18 +266,13 @@ golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbht 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-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.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.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -293,7 +285,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.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/hack/tools/Makefile b/hack/tools/Makefile index 9c32ef44..a0d35511 100644 --- a/hack/tools/Makefile +++ b/hack/tools/Makefile @@ -44,7 +44,7 @@ ifeq ($(OS), windows) MDBOOK_EXTRACT_COMMAND := unzip -d /tmp endif -GOLANGCI_LINT_VERSION := v1.59.1 +GOLANGCI_LINT_VERSION := v1.60.2 GOLANGCI_LINT_BIN := golangci-lint GOLANGCI_LINT := $(abspath $(BIN_DIR)/$(GOLANGCI_LINT_BIN)) GOLANGCI_LINT_PKG := github.com/golangci/golangci-lint/cmd/golangci-lint @@ -137,7 +137,7 @@ $(MDBOOK_TABULATE): $(BIN_DIR) go.mod go.sum MOCKGEN := $(BIN_DIR)/mockgen $(MOCKGEN): $(BIN_DIR) go.mod go.sum # Build mockgen from tools folder. - go build -tags=tools -o $@ github.com/golang/mock/mockgen + go build -tags=tools -o $@ go.uber.org/mock/mockgen RELEASE_NOTES := $(BIN_DIR)/release-notes $(RELEASE_NOTES): $(BIN_DIR) go.mod go.sum diff --git a/hack/tools/go.mod b/hack/tools/go.mod index ccbd1964..122ec18d 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -1,14 +1,14 @@ module sigs.k8s.io/cluster-api-provider-cloudstack/hack/tools -go 1.22.0 +go 1.23 -toolchain go1.22.12 +toolchain go1.23.2 require ( github.com/a8m/envsubst v1.4.2 - github.com/golang/mock v1.6.0 github.com/onsi/ginkgo/v2 v2.22.2 - honnef.co/go/tools v0.4.7 + go.uber.org/mock v0.5.1 + honnef.co/go/tools v0.5.1 k8s.io/code-generator v0.31.7 sigs.k8s.io/cluster-api/hack/tools v0.0.0-20220329062511-822f046dac13 sigs.k8s.io/controller-tools v0.16.5 @@ -17,7 +17,7 @@ require ( ) require ( - github.com/BurntSushi/toml v1.2.1 // indirect + github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect github.com/alessio/shellescape v1.4.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/blang/semver/v4 v4.0.0 // indirect @@ -56,7 +56,7 @@ require ( github.com/x448/float16 v0.8.4 // indirect github.com/xlab/treeprint v1.2.0 // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a // indirect + golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 // indirect golang.org/x/mod v0.22.0 // indirect golang.org/x/net v0.33.0 // indirect golang.org/x/sync v0.10.0 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index a9bdedad..9116ea42 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -1,6 +1,6 @@ github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/a8m/envsubst v1.4.2 h1:4yWIHXOLEJHQEFd4UjrWDrYeYlV7ncFWJOCBRLOZHQg= github.com/a8m/envsubst v1.4.2/go.mod h1:MVUTQNGQ3tsjOOtKCNd+fl8RzhsXcDvvAEzkhGtlsbY= github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= @@ -44,8 +44,6 @@ github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4 github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= 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= @@ -141,47 +139,41 @@ github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= 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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= 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/mock v0.5.1 h1:ASgazW/qBmR+A32MYFDB6E2POoTgOwT509VP0CT/fjs= +go.uber.org/mock v0.5.1/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= 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/exp/typeparams v0.0.0-20221208152030-732eee02a75a h1:Jw5wfR+h9mnIYH+OtGT2im5wV1YGGDora5vTv/aa5bE= -golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 h1:1P7xPZEwZMoBoz0Yze5Nx2/4pxj6nw9ZqHWXqP0iRgQ= +golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= 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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= 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-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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-20191002063906-3421d5a6bb1c/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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= @@ -190,7 +182,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.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/tools/go/vcs v0.1.0-deprecated h1:cOIJqWBl99H1dH5LWizPa+0ImeeJq3t3cJjaeOWUAL4= @@ -220,8 +211,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs= -honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= +honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= +honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= k8s.io/apiextensions-apiserver v0.31.2 h1:W8EwUb8+WXBLu56ser5IudT2cOho0gAKeTOnywBLxd0= diff --git a/hack/tools/tools.go b/hack/tools/tools.go index 1ce6c9f5..efca4e8d 100644 --- a/hack/tools/tools.go +++ b/hack/tools/tools.go @@ -20,8 +20,8 @@ package tools import ( _ "github.com/a8m/envsubst" - _ "github.com/golang/mock/mockgen" _ "github.com/onsi/ginkgo/v2/ginkgo" + _ "go.uber.org/mock/mockgen" _ "honnef.co/go/tools/cmd/staticcheck" _ "k8s.io/code-generator/cmd/conversion-gen" _ "sigs.k8s.io/cluster-api/hack/tools/mdbook/embed" diff --git a/pkg/cloud/affinity_groups_test.go b/pkg/cloud/affinity_groups_test.go index 91705d73..1d8d2223 100644 --- a/pkg/cloud/affinity_groups_test.go +++ b/pkg/cloud/affinity_groups_test.go @@ -20,9 +20,9 @@ import ( "errors" "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3" ) diff --git a/pkg/cloud/client_test.go b/pkg/cloud/client_test.go index 35e38e8d..3c4fbfc7 100644 --- a/pkg/cloud/client_test.go +++ b/pkg/cloud/client_test.go @@ -23,9 +23,9 @@ import ( corev1 "k8s.io/api/core/v1" "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta1" "sigs.k8s.io/cluster-api-provider-cloudstack/test/helpers" diff --git a/pkg/cloud/helpers_test.go b/pkg/cloud/helpers_test.go index 091dd74e..2d8de10c 100644 --- a/pkg/cloud/helpers_test.go +++ b/pkg/cloud/helpers_test.go @@ -23,9 +23,9 @@ import ( "io" "reflect" - "github.com/golang/mock/gomock" gomega "github.com/onsi/gomega" "github.com/onsi/gomega/types" + "go.uber.org/mock/gomock" ) // This matcher is used to make gomega matching compatible with gomock parameter matching. diff --git a/pkg/cloud/instance_test.go b/pkg/cloud/instance_test.go index e0504c9d..52d42b85 100644 --- a/pkg/cloud/instance_test.go +++ b/pkg/cloud/instance_test.go @@ -21,7 +21,7 @@ import ( "fmt" "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" + gomock "go.uber.org/mock/gomock" "k8s.io/utils/ptr" infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3" @@ -446,7 +446,7 @@ var _ = ginkgo.Describe("Instance", func() { }, CPUAvailable: "20", MemoryAvailable: "2048", - VMAvailable: "20", + VMAvailable: "512", }, Project: cloud.Project{ ID: "123", diff --git a/pkg/cloud/isolated_network.go b/pkg/cloud/isolated_network.go index b7cdc16d..b761a7c7 100644 --- a/pkg/cloud/isolated_network.go +++ b/pkg/cloud/isolated_network.go @@ -148,6 +148,7 @@ func (c *client) CreateIsolatedNetwork(fd *infrav1.CloudStackFailureDomain, isoN isoNet.Spec.ID = resp.Id isoNet.Spec.Gateway = resp.Gateway isoNet.Spec.Netmask = resp.Netmask + isoNet.Status.RoutingMode = resp.Ip4routing return c.AddCreatedByCAPCTag(ResourceTypeNetwork, isoNet.Spec.ID) } @@ -171,17 +172,28 @@ func (c *client) OpenFirewallRules(isoNet *infrav1.CloudStackIsolatedNetwork) (r protocols := []string{NetworkProtocolTCP, NetworkProtocolUDP, NetworkProtocolICMP} for _, proto := range protocols { - p := c.cs.Firewall.NewCreateEgressFirewallRuleParams(isoNet.Spec.ID, proto) + var err error + if isoNet.Status.RoutingMode != "" { + p := c.cs.Firewall.NewCreateRoutingFirewallRuleParams(isoNet.Spec.ID, proto) + if proto == "icmp" { + p.SetIcmptype(-1) + p.SetIcmpcode(-1) + } + _, err = c.cs.Firewall.CreateRoutingFirewallRule(p) + } else { + p := c.cs.Firewall.NewCreateEgressFirewallRuleParams(isoNet.Spec.ID, proto) - if proto == "icmp" { - p.SetIcmptype(-1) - p.SetIcmpcode(-1) - } + if proto == "icmp" { + p.SetIcmptype(-1) + p.SetIcmpcode(-1) + } - _, err := c.cs.Firewall.CreateEgressFirewallRule(p) + _, err = c.cs.Firewall.CreateEgressFirewallRule(p) + } if err != nil && - // Ignore errors regarding already existing fw rules for TCP/UDP + // Ignore errors regarding already existing fw rules for TCP/UDP for non-dynamic routing mode !strings.Contains(strings.ToLower(err.Error()), "there is already") && + !strings.Contains(strings.ToLower(err.Error()), "conflicts with rule") && // Ignore errors regarding already existing fw rule for ICMP !strings.Contains(strings.ToLower(err.Error()), "new rule conflicts with existing rule") { retErr = errors.Wrapf( @@ -298,6 +310,7 @@ func (c *client) GetOrCreateIsolatedNetwork( isoNet.Spec.ID = net.ID isoNet.Spec.Gateway = net.Gateway isoNet.Spec.Netmask = net.Netmask + isoNet.Status.RoutingMode = net.RoutingMode if net.VPC != nil && net.VPC.ID != "" { isoNet.Spec.VPC = net.VPC } @@ -316,14 +329,17 @@ func (c *client) GetOrCreateIsolatedNetwork( } } - // Associate Public IP with CloudStackIsolatedNetwork - if err := c.AssociatePublicIPAddress(fd, isoNet, csCluster); err != nil { - return errors.Wrapf(err, "associating public IP address to csCluster") - } + // Handle control plane endpoint based on network type + if isoNet.Status.RoutingMode == "" { + // For non-routed networks, use public IP and load balancer + if err := c.AssociatePublicIPAddress(fd, isoNet, csCluster); err != nil { + return errors.Wrapf(err, "associating public IP address to csCluster") + } - // Setup a load balancing rule to map VMs to Public IP. - if err := c.GetOrCreateLoadBalancerRule(isoNet, csCluster); err != nil { - return errors.Wrap(err, "getting or creating load balancing rule") + // Setup a load balancing rule to map VMs to Public IP. + if err := c.GetOrCreateLoadBalancerRule(isoNet, csCluster); err != nil { + return errors.Wrap(err, "getting or creating load balancing rule") + } } // Open the Isolated Network on endopint port. diff --git a/pkg/cloud/isolated_network_test.go b/pkg/cloud/isolated_network_test.go index 41ffd10a..8db967d7 100644 --- a/pkg/cloud/isolated_network_test.go +++ b/pkg/cloud/isolated_network_test.go @@ -20,10 +20,10 @@ import ( "strconv" csapi "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" "github.com/pkg/errors" + gomock "go.uber.org/mock/gomock" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3" ) diff --git a/pkg/cloud/network.go b/pkg/cloud/network.go index 347b3efc..7adce7da 100644 --- a/pkg/cloud/network.go +++ b/pkg/cloud/network.go @@ -66,6 +66,7 @@ func (c *client) ResolveNetwork(net *infrav1.Network) (retErr error) { net.Gateway = netDetails.Gateway net.Netmask = netDetails.Netmask net.Offering = netDetails.Networkofferingname + net.RoutingMode = netDetails.Ip4routing if netDetails.Vpcid != "" { if net.VPC == nil { net.VPC = &infrav1.VPC{} @@ -90,6 +91,7 @@ func (c *client) ResolveNetwork(net *infrav1.Network) (retErr error) { net.Gateway = netDetails.Gateway net.Netmask = netDetails.Netmask net.Offering = netDetails.Networkofferingname + net.RoutingMode = netDetails.Ip4routing if netDetails.Vpcid != "" { if net.VPC == nil { net.VPC = &infrav1.VPC{} diff --git a/pkg/cloud/network_test.go b/pkg/cloud/network_test.go index beb42dce..d149abac 100644 --- a/pkg/cloud/network_test.go +++ b/pkg/cloud/network_test.go @@ -21,9 +21,9 @@ import ( "fmt" csapi "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3" ) diff --git a/pkg/cloud/tags_test.go b/pkg/cloud/tags_test.go index 0ac73b63..4c92343a 100644 --- a/pkg/cloud/tags_test.go +++ b/pkg/cloud/tags_test.go @@ -18,10 +18,10 @@ package cloud_test import ( csapi "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" "github.com/pkg/errors" + gomock "go.uber.org/mock/gomock" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3" ) diff --git a/pkg/cloud/user_credentials_test.go b/pkg/cloud/user_credentials_test.go index db2bd554..eff18590 100644 --- a/pkg/cloud/user_credentials_test.go +++ b/pkg/cloud/user_credentials_test.go @@ -21,7 +21,7 @@ import ( "fmt" csapi "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" + gomock "go.uber.org/mock/gomock" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3" "sigs.k8s.io/cluster-api-provider-cloudstack/test/helpers" diff --git a/pkg/cloud/vpc.go b/pkg/cloud/vpc.go index b9946c7a..4785e1cc 100644 --- a/pkg/cloud/vpc.go +++ b/pkg/cloud/vpc.go @@ -105,7 +105,8 @@ func (c *client) CreateVPC(fd *infrav1.CloudStackFailureDomain, vpc *infrav1.VPC return err } - p := c.cs.VPC.NewCreateVPCParams(vpc.CIDR, vpc.Name, vpc.Name, offeringID, fd.Spec.Zone.ID) + p := c.cs.VPC.NewCreateVPCParams(vpc.Name, vpc.Name, offeringID, fd.Spec.Zone.ID) + p.SetCidr(vpc.CIDR) setIfNotEmpty(c.user.Project.ID, p.SetProjectid) p.SetStart(true) resp, err := c.cs.VPC.CreateVPC(p) diff --git a/pkg/cloud/vpc_test.go b/pkg/cloud/vpc_test.go index 6ede0cc5..ca966d07 100644 --- a/pkg/cloud/vpc_test.go +++ b/pkg/cloud/vpc_test.go @@ -21,9 +21,9 @@ import ( "fmt" csapi "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" + gomock "go.uber.org/mock/gomock" infrav1 "sigs.k8s.io/cluster-api-provider-cloudstack/api/v1beta3" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3" @@ -166,7 +166,7 @@ var _ = ginkgo.Describe("VPC", func() { } vs.EXPECT().GetVPCOfferingID(cloud.VPCOffering).Return(offeringID, 1, nil) - vs.EXPECT().NewCreateVPCParams(dummyVPC.CIDR, dummyVPC.Name, dummyVPC.Name, offeringID, dummyFD.Spec.Zone.ID).Return(createVPCParams) + vs.EXPECT().NewCreateVPCParams(dummyVPC.Name, dummyVPC.Name, offeringID, dummyFD.Spec.Zone.ID).Return(createVPCParams) vs.EXPECT().CreateVPC(createVPCParams).Return(createVPCResponse, nil) rs.EXPECT().NewCreateTagsParams(gomock.Any(), gomock.Any(), gomock.Any()).Return(&csapi.CreateTagsParams{}) rs.EXPECT().CreateTags(gomock.Any()).Return(&csapi.CreateTagsResponse{}, nil) @@ -198,7 +198,7 @@ var _ = ginkgo.Describe("VPC", func() { expectedErr := errors.New("API error") vs.EXPECT().GetVPCOfferingID(cloud.VPCOffering).Return(offeringID, 1, nil) - vs.EXPECT().NewCreateVPCParams(dummyVPC.CIDR, dummyVPC.Name, dummyVPC.Name, offeringID, dummyFD.Spec.Zone.ID).Return(createVPCParams) + vs.EXPECT().NewCreateVPCParams(dummyVPC.Name, dummyVPC.Name, offeringID, dummyFD.Spec.Zone.ID).Return(createVPCParams) vs.EXPECT().CreateVPC(createVPCParams).Return(nil, expectedErr) err := client.CreateVPC(&dummyFD, &dummyVPC) diff --git a/pkg/cloud/zone_test.go b/pkg/cloud/zone_test.go index 78986090..51bdfcfc 100644 --- a/pkg/cloud/zone_test.go +++ b/pkg/cloud/zone_test.go @@ -20,10 +20,10 @@ import ( "fmt" csapi "github.com/apache/cloudstack-go/v2/cloudstack" - "github.com/golang/mock/gomock" "github.com/onsi/ginkgo/v2" gomega "github.com/onsi/gomega" "github.com/pkg/errors" + gomock "go.uber.org/mock/gomock" "sigs.k8s.io/cluster-api-provider-cloudstack/pkg/cloud" dummies "sigs.k8s.io/cluster-api-provider-cloudstack/test/dummies/v1beta3" ) diff --git a/templates/cluster-template-with-kube-vip.yaml b/templates/cluster-template-with-kube-vip.yaml index 47e23652..c85e0d23 100644 --- a/templates/cluster-template-with-kube-vip.yaml +++ b/templates/cluster-template-with-kube-vip.yaml @@ -68,23 +68,29 @@ spec: spec: containers: - args: - - start + - manager env: - name: vip_arp value: "true" - name: vip_leaderelection value: "true" - - name: vip_address - value: ${CLUSTER_ENDPOINT_IP} - name: vip_interface value: ens3 + - name: address + value: ${CLUSTER_ENDPOINT_IP} + - name: vip_cidr + value: "32" + - name: cp_enable + value: "true" + - name: cp_namespace + value: kube-system - name: vip_leaseduration value: "15" - name: vip_renewdeadline value: "10" - name: vip_retryperiod value: "2" - image: public.ecr.aws/i3w0y7q3/plunder-app/kube-vip:v0.3.7-eks-a-v0.0.0-dev-build.0 + image: ghcr.io/kube-vip/kube-vip:v0.4.0 imagePullPolicy: IfNotPresent name: kube-vip resources: {} @@ -96,10 +102,14 @@ spec: volumeMounts: - mountPath: /etc/kubernetes/admin.conf name: kubeconfig + hostAliases: + - hostnames: + - kubernetes + ip: 127.0.0.1 hostNetwork: true volumes: - hostPath: - path: /etc/kubernetes/admin.conf + path: /etc/kubernetes/super-admin.conf type: FileOrCreate name: kubeconfig status: {} diff --git a/test/e2e/common.go b/test/e2e/common.go index 63f01179..2234b5b3 100644 --- a/test/e2e/common.go +++ b/test/e2e/common.go @@ -265,7 +265,7 @@ func DownloadMetricsFromCAPCManager(ctx context.Context, bootstrapKubeconfigPath } func GetACSVersion(client *cloudstack.CloudStackClient) (string, error) { - msServersResp, err := client.InfrastructureUsage.ListManagementServersMetrics(client.InfrastructureUsage.NewListManagementServersMetricsParams()) + msServersResp, err := client.Management.ListManagementServersMetrics(client.Management.NewListManagementServersMetricsParams()) if err != nil { return "", err } diff --git a/test/e2e/go.mod b/test/e2e/go.mod index de747783..46af34b7 100644 --- a/test/e2e/go.mod +++ b/test/e2e/go.mod @@ -1,12 +1,12 @@ module sigs.k8s.io/cluster-api-provider-cloudstack-staging/test/e2e -go 1.22.0 +go 1.23 -toolchain go1.22.12 +toolchain go1.23.2 require ( github.com/Shopify/toxiproxy/v2 v2.5.0 - github.com/apache/cloudstack-go/v2 v2.16.1 + github.com/apache/cloudstack-go/v2 v2.17.0 github.com/blang/semver v3.5.1+incompatible github.com/onsi/ginkgo/v2 v2.22.2 github.com/onsi/gomega v1.36.2 @@ -58,7 +58,6 @@ require ( github.com/gobuffalo/flect v1.0.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/cel-go v0.20.1 // indirect github.com/google/gnostic-models v0.6.8 // indirect @@ -116,6 +115,7 @@ require ( go.opentelemetry.io/otel/sdk v1.28.0 // indirect go.opentelemetry.io/otel/trace v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect + go.uber.org/mock v0.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect diff --git a/test/e2e/go.sum b/test/e2e/go.sum index 0f874e08..fc0015ee 100644 --- a/test/e2e/go.sum +++ b/test/e2e/go.sum @@ -24,8 +24,8 @@ github.com/alessio/shellescape v1.4.2 h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4u github.com/alessio/shellescape v1.4.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= -github.com/apache/cloudstack-go/v2 v2.16.1 h1:2wOE4RKEjWPRZNO7ZNnZYmR3JJ+JJPQwhoc7W1fkiK4= -github.com/apache/cloudstack-go/v2 v2.16.1/go.mod h1:cZsgFe+VmrgLBm7QjeHTJBXYe8E5+yGYkdfwGb+Pu9c= +github.com/apache/cloudstack-go/v2 v2.17.0 h1:jueNPcm8g7ReY34xoTVubMyRcVrpuPO/tZbzN68DCLA= +github.com/apache/cloudstack-go/v2 v2.17.0/go.mod h1:E11d4GJG/ZG1R+i1/q7p5/D5S+XVqCluFVd3sjcp8U0= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -105,8 +105,6 @@ 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/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84= @@ -253,7 +251,6 @@ 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.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/etcd/api/v3 v3.5.17 h1:cQB8eb8bxwuxOilBpMJAEo8fAONyrdXTHUNcMd8yT1w= go.etcd.io/etcd/api/v3 v3.5.17/go.mod h1:d1hvkRuXkts6PmaYk2Vrgqbv7H4ADfAKhyJqHNLJCB4= go.etcd.io/etcd/client/pkg/v3 v3.5.17 h1:XxnDXAWq2pnxqx76ljWwiQ9jylbpC4rvkAeRVOUKKVw= @@ -282,6 +279,8 @@ go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeX go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= 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/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= @@ -296,13 +295,11 @@ 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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= @@ -310,7 +307,6 @@ golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbht 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-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -319,8 +315,6 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -339,7 +333,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.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/versions.mk b/versions.mk index cc561bdf..e2f88928 100644 --- a/versions.mk +++ b/versions.mk @@ -13,6 +13,6 @@ # limitations under the License. MDBOOK_VERSION := v0.4.5 -GOLANG_VERSION := 1.22.12 +GOLANG_VERSION := 1.23.2 PLANTUML_VERSION := 1.2020.16 GH_VERSION := 1.2.0 \ No newline at end of file