diff --git a/.golangci.yml b/.golangci.yml index 4ecd3a03..f40a8f56 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -6,28 +6,61 @@ linters-settings: statements: 50 gocritic: enabled-tags: - - diagnostic - - experimental - - opinionated - - performance - - style + - diagnostic + - experimental + - opinionated + - performance + - style disabled-checks: - - dupImport # https://github.com/go-critic/go-critic/issues/845 - - ifElseChain - - octalLiteral - - whyNoLint - - wrapperFunc - - hugeParam + - dupImport # https://github.com/go-critic/go-critic/issues/845 + - ifElseChain + - octalLiteral + - whyNoLint + - wrapperFunc + - hugeParam gocyclo: min-complexity: 30 - gomnd: - settings: - mnd: - # don't include the "operation" and "assign" - checks: [argument, case, condition, return] + mnd: + # don't include the "operation" and "assign" + checks: [argument, case, condition, return] + + revive: + enable-all-rules: false + rules: + # enable (taken from https://github.com/mgechev/revive/blob/master/defaults.toml) + - name: blank-imports + - name: context-as-argument + - name: context-keys-type + - name: dot-imports + - name: empty-block + - name: error-naming + - name: error-return + - name: error-strings + - name: errorf + - name: exported + - name: increment-decrement + - name: indent-error-flow + - name: package-comments + - name: range + - name: receiver-naming + - name: redefines-builtin-id + - name: superfluous-else + - name: time-naming + - name: unexported-return + - name: unreachable-code + - name: unused-parameter + - name: var-declaration + - name: var-naming + # tweaks + - name: dot-imports + exclude: [TEST] + - name: unused-parameter + exclude: [TEST] + govet: - check-shadowing: false + disable: + - shadow lll: line-length: 140 misspell: @@ -45,31 +78,31 @@ linters: # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint disable-all: true enable: - - bodyclose - - dogsled - - gocritic - - gofmt - - goimports - - goprintffuncname - - gosimple - - govet - - ineffassign - - lll - - misspell - - nakedret - - rowserrcheck - - staticcheck - - stylecheck - - typecheck - - unconvert - - unparam - - unused - - whitespace - - revive - - dupl - - gocyclo - - gosec - - nolintlint + - bodyclose + - dogsled + - gocritic + - gofmt + - goimports + - goprintffuncname + - gosimple + - govet + - ineffassign + - lll + - misspell + - nakedret + - rowserrcheck + - staticcheck + - stylecheck + - typecheck + - unconvert + - unparam + - unused + - whitespace + - revive + - dupl + - gocyclo + - gosec + - nolintlint # don't enable: # - noctx @@ -98,28 +131,27 @@ linters: issues: # Excluding configuration per-path, per-linter, per-text and per-source exclude-rules: - - path: _test\.go - linters: - - gomnd - - gochecknoglobals - - gosec - - noctx - - goerr113 - - goconst - - dupl - - unparam + - path: _test\.go + linters: + - gomnd + - gochecknoglobals + - gosec + - noctx + - goerr113 + - goconst + - dupl + - unparam - # https://github.com/go-critic/go-critic/issues/926 - - linters: - - gocritic - text: "unnecessaryDefer:" + # https://github.com/go-critic/go-critic/issues/926 + - linters: + - gocritic + text: "unnecessaryDefer:" - - text: "should not use dot imports" - path: _test\.go + - text: "should not use dot imports" + path: _test\.go - # silence stupid linter errors exclude: - - directive `// nolint.*` should be written without leading space + - directive `// nolint.*` should be written without leading space run: timeout: 15m diff --git a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go index 2abd6999..f14ded5d 100644 --- a/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go +++ b/controllers/yawol-controller/loadbalancer/loadbalancer_controller.go @@ -17,11 +17,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/predicate" "github.com/go-logr/logr" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servergroups" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/groups" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" errors2 "k8s.io/apimachinery/pkg/api/errors" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" ctrl "sigs.k8s.io/controller-runtime" @@ -422,7 +422,7 @@ func (r *Reconciler) reconcileFIP( var fip *floatingips.FloatingIP if fip, err = openstackhelper.GetFIPByID(ctx, fipClient, *lb.Status.FloatingID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("fip not found in openstack", "fip", *lb.Status.FloatingID) // fip not found by ID, remove it from status and trigger reconcile if err := helper.RemoveFromLBStatus(ctx, r.Status(), lb, "floatingID"); err != nil { @@ -477,7 +477,7 @@ func (r *Reconciler) assignOrCreateFIP( r.Log.Info("Use ExistingFloatingIP", "lb", lb.Name) if fip, err = openstackhelper.GetFIPByIP(ctx, fipClient, *lb.Spec.ExistingFloatingIP); err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("configured fip not found in openstack", "fip", *lb.Spec.ExistingFloatingIP) return kubernetes.SendErrorAsEvent(r.RecorderLB, err, lb) default: @@ -613,7 +613,7 @@ func (r *Reconciler) reconcilePort( //nolint: gocyclo // TODO reduce complexity if lb.Status.PortID != nil { if port, err = openstackhelper.GetPortByID(ctx, portClient, *lb.Status.PortID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("port not found in openstack", "portID", *lb.Status.PortID) if err := helper.RemoveFromLBStatus(ctx, r.Status(), lb, "portID"); err != nil { return false, err @@ -755,7 +755,7 @@ func (r *Reconciler) reconcileSecGroup( if lb.Status.SecurityGroupID != nil { if secGroup, err = openstackhelper.GetSecGroupByID(ctx, groupClient, *lb.Status.SecurityGroupID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("SecurityGroupID not found in openstack", "SecurityGroupID", *lb.Status.SecurityGroupID) if err := helper.RemoveFromLBStatus(ctx, r.Status(), lb, "securityGroupID"); err != nil { return false, err @@ -863,7 +863,7 @@ func (r *Reconciler) reconcileServerGroup( if lb.Status.ServerGroupID != nil { if serverGroup, err = openstackhelper.GetServerGroupByID(ctx, serverGroupClient, *lb.Status.ServerGroupID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("server group not found in openstack", "serverGroupID", *lb.Status.ServerGroupID) if err := helper.RemoveFromLBStatus(ctx, r.Status(), lb, "serverGroupID"); err != nil { return false, err @@ -1189,7 +1189,7 @@ func (r *Reconciler) deleteFips( // if error is openstack error switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("error getting fip, already deleted", "lb", lb.Namespace+"/"+lb.Name, "fipId", *lb.Status.FloatingID) // requeue true to delete fips by floatingName in the next run return true, helper.RemoveFromLBStatus(ctx, r.Status(), lb, "floatingID") @@ -1284,7 +1284,7 @@ func (r *Reconciler) deletePorts( port, err := openstackhelper.GetPortByID(ctx, portClient, *lb.Status.PortID) if err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("port has already been deleted", "lb", lb.Namespace+"/"+lb.Name, "portID", *lb.Status.PortID) // requeue true to clean orphan ports in the next run _ = helper.RemoveFromLBStatus(ctx, r.Status(), lb, "portIP") @@ -1385,7 +1385,7 @@ func (r *Reconciler) deleteSecGroups( secGroup, err := openstackhelper.GetSecGroupByID(ctx, groupClient, *lb.Status.SecurityGroupID) if err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("secGroup has already been deleted", "lb", lb.Namespace+"/"+lb.Name, "secGroup", *lb.Status.SecurityGroupID) // requeue to clean orphan secgroups err := helper.RemoveFromLBStatus(ctx, r.Status(), lb, "securityGroupID") @@ -1472,7 +1472,7 @@ func (r *Reconciler) deleteServerGroups( serverGroup, err := openstackhelper.GetServerGroupByID(ctx, serverGroupClient, *lb.Status.ServerGroupID) if err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("server group has already been deleted", "lb", lb.Namespace+"/"+lb.Name, "serverGroupID", *lb.Status.ServerGroupID) // requeue to clean orphan server groups @@ -1500,7 +1500,7 @@ func (r *Reconciler) deleteServerGroups( serverGroup, err := openstackhelper.GetServerGroupByName(ctx, serverGroupClient, *lb.Status.ServerGroupName) if err != nil { switch err.(type) { - case gophercloud.ErrDefault404, gophercloud.ErrResourceNotFound: + case gophercloud.ErrUnexpectedResponseCode, gophercloud.ErrResourceNotFound: r.Log.Info("server group has already been deleted", "lb", lb.Namespace+"/"+lb.Name, "serverGroup", *lb.Status.ServerGroupName) // requeue to clean orphan secgroups return true, helper.RemoveFromLBStatus(ctx, r.Status(), lb, "serverGroupName") diff --git a/controllers/yawol-controller/loadbalancer/loadbalancer_controller_test.go b/controllers/yawol-controller/loadbalancer/loadbalancer_controller_test.go index d09212e5..18fbcbf7 100644 --- a/controllers/yawol-controller/loadbalancer/loadbalancer_controller_test.go +++ b/controllers/yawol-controller/loadbalancer/loadbalancer_controller_test.go @@ -12,11 +12,11 @@ import ( . "github.com/onsi/gomega" . "github.com/onsi/gomega/gstruct" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/groups" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/rules" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" yawolv1beta1 "github.com/stackitcloud/yawol/api/v1beta1" "github.com/stackitcloud/yawol/internal/helper" @@ -704,29 +704,26 @@ var _ = Describe("loadbalancer controller", Serial, Ordered, func() { BeforeEach(func() { mockClient.GroupClientObj = &testing.CallbackGroupClient{ ListFunc: func(_ context.Context, _ groups.ListOpts) ([]groups.SecGroup, error) { - return []groups.SecGroup{}, gophercloud.ErrDefault401{ - ErrUnexpectedResponseCode: gophercloud.ErrUnexpectedResponseCode{ - Body: []byte("Auth failed"), - }, + return []groups.SecGroup{}, gophercloud.ErrUnexpectedResponseCode{ + // Actual: 401, + Body: []byte("Auth failed"), } }, GetFunc: func(_ context.Context, _ string) (*groups.SecGroup, error) { - return nil, gophercloud.ErrDefault401{ - ErrUnexpectedResponseCode: gophercloud.ErrUnexpectedResponseCode{ - Body: []byte("Auth failed"), - }, + return nil, gophercloud.ErrUnexpectedResponseCode{ + Body: []byte("Auth failed"), } }, CreateFunc: func(_ context.Context, _ groups.CreateOptsBuilder) (*groups.SecGroup, error) { - return nil, gophercloud.ErrDefault401{} + return nil, gophercloud.ErrUnexpectedResponseCode{} }, DeleteFunc: func(_ context.Context, _ string) error { - return gophercloud.ErrDefault401{} + return gophercloud.ErrUnexpectedResponseCode{} }, } mockClient.FipClientObj = &testing.CallbackFipClient{ GetFunc: func(_ context.Context, _ string) (*floatingips.FloatingIP, error) { - return nil, gophercloud.ErrDefault403{} + return nil, gophercloud.ErrUnexpectedResponseCode{} }, } }) diff --git a/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller.go b/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller.go index 1e1a1b86..e3ce65ab 100644 --- a/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller.go +++ b/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller.go @@ -15,11 +15,10 @@ import ( os "github.com/stackitcloud/yawol/internal/openstack" "github.com/go-logr/logr" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/schedulerhints" - "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/keypairs" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" v1 "k8s.io/api/core/v1" rbac "k8s.io/api/rbac/v1" @@ -558,7 +557,7 @@ func (r *LoadBalancerMachineReconciler) reconcilePort( // nolint: gocyclo // TOD if lbm.Status.DefaultPortID != nil { if port, err = openstackhelper.GetPortByID(ctx, portClient, *lbm.Status.DefaultPortID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404: + case gophercloud.ErrUnexpectedResponseCode: r.Log.Info("lbm port not found in openstack", "defaultPortID", *lbm.Status.DefaultPortID) // remove port from LB status so a new one gets created next reconcile if err := helper.RemoveFromLBMStatus(ctx, r.Client.Status(), lbm, "defaultPortID"); err != nil { @@ -803,6 +802,8 @@ func (r *LoadBalancerMachineReconciler) createServer( Metadata: nil, } + var hintOpts servers.SchedulerHintOptsBuilder + if loadBalancer.Spec.DebugSettings.Enabled { createOpts = &keypairs.CreateOptsExt{ CreateOptsBuilder: createOpts, @@ -811,16 +812,13 @@ func (r *LoadBalancerMachineReconciler) createServer( } if loadBalancerMachine.Spec.ServerGroupID != "" { - createOpts = &schedulerhints.CreateOptsExt{ - CreateOptsBuilder: createOpts, - SchedulerHints: schedulerhints.SchedulerHints{ - Group: loadBalancerMachine.Spec.ServerGroupID, - }, + hintOpts = &servers.SchedulerHintOpts{ + Group: loadBalancerMachine.Spec.ServerGroupID, } } var server *servers.Server - server, err = openstackhelper.CreateServer(ctx, serverClient, createOpts) + server, err = openstackhelper.CreateServer(ctx, serverClient, createOpts, hintOpts) if err != nil { return nil, err } @@ -837,7 +835,7 @@ func (r *LoadBalancerMachineReconciler) deleteServerAndWait( ) error { if err := openstackhelper.DeleteServer(ctx, serverClient, serverID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404: + case gophercloud.ErrUnexpectedResponseCode: r.Log.Info("error deleting server, already deleted", "lbm", lbm.Name) default: r.Log.Info("an unexpected error occurred deleting server", "lbm", lbm.Name) @@ -914,7 +912,7 @@ func (r *LoadBalancerMachineReconciler) deletePort( if lbm.Status.DefaultPortID != nil { if err = openstackhelper.DeletePort(ctx, portClient, *lbm.Status.DefaultPortID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404: + case gophercloud.ErrUnexpectedResponseCode: _ = helper.RemoveFromLBMStatus(ctx, r.Client.Status(), lbm, "defaultPortIP") if err := helper.RemoveFromLBMStatus(ctx, r.Client.Status(), lbm, "defaultPortID"); err != nil { return false, err @@ -932,7 +930,7 @@ func (r *LoadBalancerMachineReconciler) deletePort( // nolint: staticcheck // needed to be backwards compatible if err = openstackhelper.DeletePort(ctx, portClient, *lbm.Status.PortID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404: + case gophercloud.ErrUnexpectedResponseCode: if err := helper.RemoveFromLBMStatus(ctx, r.Client.Status(), lbm, "portID"); err != nil { return false, err } @@ -956,7 +954,7 @@ func (r *LoadBalancerMachineReconciler) deletePort( if port != nil && port.ID != "" { if err = openstackhelper.DeletePort(ctx, portClient, port.ID); err != nil { switch err.(type) { - case gophercloud.ErrDefault404: + case gophercloud.ErrUnexpectedResponseCode: default: r.Log.Info("an unexpected error occurred deleting port", "lbm", lbm.Name) return false, kubernetes.SendErrorAsEvent(r.Recorder, err, lbm) @@ -1032,10 +1030,13 @@ func (r *LoadBalancerMachineReconciler) waitForServerStatus( target []string, secs int, ) error { - return gophercloud.WaitFor(secs, func() (bool, error) { + timeoutContext, cancel := context.WithTimeout(ctx, time.Duration(secs)*time.Second) + defer cancel() + + return gophercloud.WaitFor(timeoutContext, func(context.Context) (bool, error) { current, err := openstackhelper.GetServerByID(ctx, serverClient, id) if err != nil { - if _, ok := err.(gophercloud.ErrDefault404); ok && slices.Contains(target, "DELETED") { + if _, ok := err.(gophercloud.ErrUnexpectedResponseCode); ok && slices.Contains(target, "DELETED") { return true, nil } return false, err diff --git a/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller_test.go b/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller_test.go index 3ec1e2b7..acb41cd8 100644 --- a/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller_test.go +++ b/controllers/yawol-controller/loadbalancermachine/loadbalancermachine_controller_test.go @@ -6,10 +6,10 @@ import ( "fmt" "time" - "github.com/gophercloud/gophercloud" + "github.com/gophercloud/gophercloud/v2" - "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -194,17 +194,16 @@ var _ = Describe("load balancer machine", Serial, Ordered, func() { When("openstack is not working", func() { BeforeEach(func() { client.ServerClientObj = &testing.CallbackServerClient{ - CreateFunc: func(_ context.Context, _ servers.CreateOptsBuilder) (*servers.Server, error) { - return &servers.Server{}, gophercloud.ErrDefault403{ - ErrUnexpectedResponseCode: gophercloud.ErrUnexpectedResponseCode{ - BaseError: gophercloud.BaseError{}, - URL: "", - Method: "", - Expected: nil, - Actual: 0, - Body: []byte("Quota exceeded"), - ResponseHeader: nil, - }, + CreateFunc: func(_ context.Context, _ servers.CreateOptsBuilder, _ servers.SchedulerHintOptsBuilder, + ) (*servers.Server, error) { + return &servers.Server{}, gophercloud.ErrUnexpectedResponseCode{ + BaseError: gophercloud.BaseError{}, + URL: "", + Method: "", + Expected: nil, + Actual: 0, + Body: []byte("Quota exceeded"), + ResponseHeader: nil, } }, ListFunc: func(_ context.Context, _ servers.ListOptsBuilder) ([]servers.Server, error) { @@ -410,7 +409,7 @@ var _ = Describe("load balancer machine", Serial, Ordered, func() { lbmNN := runtimeClient.ObjectKeyFromObject(lbm) c, _ := client.ServerClient(ctx) for i := 0; i < count; i++ { - _, err := c.Create(ctx, &servers.CreateOpts{Name: lbmNN.Name}) + _, err := c.Create(ctx, &servers.CreateOpts{Name: lbmNN.Name}, &servers.SchedulerHintOpts{}) Expect(err).To(Not(HaveOccurred())) } diff --git a/go.mod b/go.mod index 80c4ecd3..40b60d57 100644 --- a/go.mod +++ b/go.mod @@ -8,8 +8,8 @@ require ( github.com/go-logr/logr v1.4.2 github.com/go-task/slim-sprig/v3 v3.0.0 github.com/golang/protobuf v1.5.4 - github.com/gophercloud/gophercloud v1.14.1 - github.com/gophercloud/utils v0.0.0-20231010081019-80377eca5d56 + github.com/gophercloud/gophercloud/v2 v2.2.0 + github.com/gophercloud/utils/v2 v2.0.0-20241021065553-b46d0737ee98 github.com/onsi/ginkgo/v2 v2.21.0 github.com/onsi/gomega v1.35.0 github.com/prometheus/client_golang v1.20.5 @@ -50,6 +50,7 @@ require ( github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect github.com/gobuffalo/flect v1.0.3 // indirect + github.com/gofrs/uuid/v5 v5.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/gnostic-models v0.6.8 // indirect @@ -57,7 +58,6 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect github.com/google/uuid v1.6.0 // indirect - github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect diff --git a/go.sum b/go.sum index 17190de7..7fca834b 100644 --- a/go.sum +++ b/go.sum @@ -47,6 +47,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4= github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= +github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk= +github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= 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= @@ -66,13 +68,10 @@ github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgY github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gophercloud/gophercloud v1.3.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= -github.com/gophercloud/gophercloud v1.14.1 h1:DTCNaTVGl8/cFu58O1JwWgis9gtISAFONqpMKNg/Vpw= -github.com/gophercloud/gophercloud v1.14.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= -github.com/gophercloud/utils v0.0.0-20231010081019-80377eca5d56 h1:sH7xkTfYzxIEgzq1tDHIMKRh1vThOEOGNsettdEeLbE= -github.com/gophercloud/utils v0.0.0-20231010081019-80377eca5d56/go.mod h1:VSalo4adEk+3sNkmVJLnhHoOyOYYS8sTWLG4mv5BKto= -github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= -github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/gophercloud/gophercloud/v2 v2.2.0 h1:STqqnSXuhcg1OPBOZ14z6JDm8fKIN13H2bJg6bBuHp8= +github.com/gophercloud/gophercloud/v2 v2.2.0/go.mod h1:f2hMRC7Kakbv5vM7wSGHrIPZh6JZR60GVHryJlF/K44= +github.com/gophercloud/utils/v2 v2.0.0-20241021065553-b46d0737ee98 h1:4/3x+yL9lcaV1lzwolxOSp/tHVSjn9S+yXh0NiX/vFQ= +github.com/gophercloud/utils/v2 v2.0.0-20241021065553-b46d0737ee98/go.mod h1:9KHhEdDkA/4hTdwxS0sALJIp2hFSjrODlKMQcFU2GFw= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -162,7 +161,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.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -174,22 +172,16 @@ 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/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/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.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-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.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= @@ -197,35 +189,23 @@ golang.org/x/oauth2 v0.23.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-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.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-20190916202348-b4ddaad3f8a3/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-20201204225414-ed752295db88/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.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= golang.org/x/sys v0.26.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.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= 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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= @@ -234,7 +214,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.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/envoystatus/envoystatus_test.go b/internal/envoystatus/envoystatus_test.go index 6a8a6998..2e8680b2 100644 --- a/internal/envoystatus/envoystatus_test.go +++ b/internal/envoystatus/envoystatus_test.go @@ -1,7 +1,6 @@ package envoystatus import ( - "fmt" "testing" . "github.com/onsi/ginkgo/v2" @@ -63,9 +62,7 @@ var _ = Describe("check envoy status", func() { When("Envoy stats to LoadBalancerMachine Metrics", func() { It("should set the correct metrics", func() { got := parseEnvoyMetricsToLoadBalancerMachineMetrics(envoyMetrics) - fmt.Println(got) Expect(compareMetrics(got, wanted)).To(BeTrue()) - }) }) }) diff --git a/internal/helper/kubernetes/event.go b/internal/helper/kubernetes/event.go index 482629b3..8854214a 100644 --- a/internal/helper/kubernetes/event.go +++ b/internal/helper/kubernetes/event.go @@ -1,7 +1,7 @@ package kubernetes import ( - "github.com/gophercloud/gophercloud" + "github.com/gophercloud/gophercloud/v2" coreV1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/tools/record" @@ -15,13 +15,7 @@ func SendErrorAsEvent(r record.EventRecorder, err error, objects ...runtime.Obje } var body []byte switch casted := err.(type) { - case gophercloud.ErrDefault401: - body = casted.Body - case gophercloud.ErrDefault403: - body = casted.Body - case gophercloud.ErrDefault404: - body = casted.Body - case gophercloud.ErrDefault409: + case gophercloud.ErrUnexpectedResponseCode: body = casted.Body default: body = []byte(err.Error()) diff --git a/internal/helper/loadbalancer.go b/internal/helper/loadbalancer.go index 8c132e9f..929f108f 100644 --- a/internal/helper/loadbalancer.go +++ b/internal/helper/loadbalancer.go @@ -12,7 +12,7 @@ import ( yawolv1beta1 "github.com/stackitcloud/yawol/api/v1beta1" helpermetrics "github.com/stackitcloud/yawol/internal/metrics" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/rules" "github.com/prometheus/client_golang/prometheus" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" diff --git a/internal/helper/openstack/floatingip.go b/internal/helper/openstack/floatingip.go index b5b73cbc..af1a5445 100644 --- a/internal/helper/openstack/floatingip.go +++ b/internal/helper/openstack/floatingip.go @@ -7,7 +7,7 @@ import ( "github.com/stackitcloud/yawol/internal/helper" "github.com/stackitcloud/yawol/internal/openstack" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" ) // CreateFIP creates a FIP and returns it. diff --git a/internal/helper/openstack/port.go b/internal/helper/openstack/port.go index 33f89618..45a48d77 100644 --- a/internal/helper/openstack/port.go +++ b/internal/helper/openstack/port.go @@ -5,7 +5,7 @@ import ( "github.com/stackitcloud/yawol/internal/openstack" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" ) // GetPortByName returns a Port filtered By Name. diff --git a/internal/helper/openstack/secgroup.go b/internal/helper/openstack/secgroup.go index 77a3db03..b7dded1c 100644 --- a/internal/helper/openstack/secgroup.go +++ b/internal/helper/openstack/secgroup.go @@ -4,8 +4,8 @@ import ( "context" "strings" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/groups" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/rules" "github.com/stackitcloud/yawol/internal/openstack" ) diff --git a/internal/helper/openstack/server.go b/internal/helper/openstack/server.go index 0d192c77..4b1a3664 100644 --- a/internal/helper/openstack/server.go +++ b/internal/helper/openstack/server.go @@ -3,7 +3,7 @@ package openstack import ( "context" - "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers" "github.com/stackitcloud/yawol/internal/openstack" ) @@ -55,6 +55,7 @@ func CreateServer( ctx context.Context, serverClient openstack.ServerClient, opts servers.CreateOptsBuilder, + hintOpts servers.SchedulerHintOptsBuilder, ) (*servers.Server, error) { - return serverClient.Create(ctx, opts) + return serverClient.Create(ctx, opts, hintOpts) } diff --git a/internal/helper/openstack/servergroup.go b/internal/helper/openstack/servergroup.go index b4a3d455..6d1f58a8 100644 --- a/internal/helper/openstack/servergroup.go +++ b/internal/helper/openstack/servergroup.go @@ -3,7 +3,7 @@ package openstack import ( "context" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servergroups" "github.com/stackitcloud/yawol/internal/openstack" ) diff --git a/internal/openstack/client.go b/internal/openstack/client.go index 2285bbaa..1acf0e42 100644 --- a/internal/openstack/client.go +++ b/internal/openstack/client.go @@ -12,9 +12,9 @@ import ( netutil "k8s.io/apimachinery/pkg/util/net" certutil "k8s.io/client-go/util/cert" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack" - "github.com/gophercloud/utils/openstack/clientconfig" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack" + "github.com/gophercloud/utils/v2/openstack/clientconfig" "github.com/prometheus/client_golang/prometheus" "gopkg.in/ini.v1" ) @@ -298,9 +298,7 @@ func getProvider( actx, acancel := context.WithTimeout(ctx, timeout) defer acancel() - provider.Context = actx - err = openstack.Authenticate(provider, *ao) - provider.Context = nil + err = openstack.Authenticate(actx, provider, *ao) if err != nil { return nil, nil, err } @@ -313,20 +311,17 @@ func getProvider( authOpts := *ao authOpts.AllowReauth = false - provider.ReauthFunc = func() error { + provider.ReauthFunc = func(context.Context) error { pctx, pcancel := context.WithTimeout(ctx, timeout) defer pcancel() - // does not have to be reset since this client is only used in this function - authProvider.Context = pctx - eo := gophercloud.EndpointOpts{} if strings.Contains(authURL, "v2") { - if err := openstack.AuthenticateV2(&authProvider, authOpts, eo); err != nil { + if err := openstack.AuthenticateV2(pctx, &authProvider, authOpts, eo); err != nil { return err } } else { - if err := openstack.AuthenticateV3(&authProvider, &authOpts, eo); err != nil { + if err := openstack.AuthenticateV3(pctx, &authProvider, &authOpts, eo); err != nil { return err } } diff --git a/internal/openstack/fip.go b/internal/openstack/fip.go index 63220ede..18199f90 100644 --- a/internal/openstack/fip.go +++ b/internal/openstack/fip.go @@ -5,8 +5,8 @@ import ( "context" "time" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" "github.com/prometheus/client_golang/prometheus" ) @@ -39,12 +39,8 @@ func (r *OSFloatingIPClient) List(ctx context.Context, opts floatingips.ListOpts increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectFloatingIP, MetricOperationList) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - pages, err := floatingips.List(r.networkV2, opts).AllPages() + pages, err := floatingips.List(r.networkV2, opts).AllPages(tctx) if err != nil { return nil, err } @@ -56,12 +52,8 @@ func (r *OSFloatingIPClient) Create(ctx context.Context, opts floatingips.Create increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectFloatingIP, MetricOperationCreate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - fip, err := floatingips.Create(r.networkV2, opts).Extract() + fip, err := floatingips.Create(tctx, r.networkV2, opts).Extract() return fip, err } @@ -70,12 +62,8 @@ func (r *OSFloatingIPClient) Update(ctx context.Context, id string, opts floatin increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectFloatingIP, MetricOperationUpdate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - fip, err := floatingips.Update(r.networkV2, id, opts).Extract() + fip, err := floatingips.Update(tctx, r.networkV2, id, opts).Extract() return fip, err } @@ -84,12 +72,8 @@ func (r *OSFloatingIPClient) Get(ctx context.Context, id string) (*floatingips.F increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectFloatingIP, MetricOperationGet) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - fip, err := floatingips.Get(r.networkV2, id).Extract() + fip, err := floatingips.Get(tctx, r.networkV2, id).Extract() return fip, err } @@ -98,11 +82,7 @@ func (r *OSFloatingIPClient) Delete(ctx context.Context, id string) error { increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectFloatingIP, MetricOperationDelete) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - err := floatingips.Delete(r.networkV2, id).ExtractErr() + err := floatingips.Delete(tctx, r.networkV2, id).ExtractErr() return err } diff --git a/internal/openstack/group.go b/internal/openstack/group.go index 8283ff94..38978130 100644 --- a/internal/openstack/group.go +++ b/internal/openstack/group.go @@ -7,8 +7,8 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/groups" ) // The OSGroupClient is a implementation for GroupClient. When you want to use this struct be sure to call @@ -40,12 +40,8 @@ func (r *OSGroupClient) List(ctx context.Context, opts groups.ListOpts) ([]group increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectGroup, MetricOperationList) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - pages, err := groups.List(r.networkV2, opts).AllPages() + pages, err := groups.List(r.networkV2, opts).AllPages(tctx) if err != nil { return nil, err } @@ -57,12 +53,8 @@ func (r *OSGroupClient) Create(ctx context.Context, opts groups.CreateOptsBuilde increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectGroup, MetricOperationCreate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - group, err := groups.Create(r.networkV2, opts).Extract() + group, err := groups.Create(tctx, r.networkV2, opts).Extract() return group, err } @@ -71,12 +63,8 @@ func (r *OSGroupClient) Update(ctx context.Context, id string, opts groups.Updat increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectGroup, MetricOperationUpdate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - group, err := groups.Update(r.networkV2, id, opts).Extract() + group, err := groups.Update(tctx, r.networkV2, id, opts).Extract() return group, err } @@ -85,12 +73,8 @@ func (r *OSGroupClient) Get(ctx context.Context, id string) (*groups.SecGroup, e increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectGroup, MetricOperationGet) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - group, err := groups.Get(r.networkV2, id).Extract() + group, err := groups.Get(tctx, r.networkV2, id).Extract() return group, err } @@ -99,11 +83,7 @@ func (r *OSGroupClient) Delete(ctx context.Context, id string) error { increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectGroup, MetricOperationDelete) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - err := groups.Delete(r.networkV2, id).ExtractErr() + err := groups.Delete(tctx, r.networkV2, id).ExtractErr() return err } diff --git a/internal/openstack/interface.go b/internal/openstack/interface.go index 1d355cc8..bcd9c251 100644 --- a/internal/openstack/interface.go +++ b/internal/openstack/interface.go @@ -32,13 +32,13 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups" - "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/keypairs" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servergroups" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/groups" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/rules" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" ) // Client provides a interface to configure and use different OpenStack clients. @@ -105,7 +105,7 @@ type RuleClient interface { // It provides methods with CRUD functionalities. type ServerClient interface { List(ctx context.Context, opts servers.ListOptsBuilder) ([]servers.Server, error) - Create(ctx context.Context, opts servers.CreateOptsBuilder) (*servers.Server, error) + Create(ctx context.Context, opts servers.CreateOptsBuilder, hintOpts servers.SchedulerHintOptsBuilder) (*servers.Server, error) Get(ctx context.Context, id string) (*servers.Server, error) Update(ctx context.Context, id string, opts servers.UpdateOptsBuilder) (*servers.Server, error) Delete(ctx context.Context, id string) error diff --git a/internal/openstack/keypair.go b/internal/openstack/keypair.go index 07103539..44723df4 100644 --- a/internal/openstack/keypair.go +++ b/internal/openstack/keypair.go @@ -6,8 +6,8 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/keypairs" ) // The OSKeypairClient is a implementation for KeyPairClient. When you want to use this struct be sure to call @@ -38,12 +38,8 @@ func (r *OSKeypairClient) List(ctx context.Context) ([]keypairs.KeyPair, error) increasePromCounter(r.promCounter, MetricAPINova, MetricObjectKeyPair, MetricOperationList) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - page, err := keypairs.List(r.computeV2, keypairs.ListOpts{}).AllPages() + page, err := keypairs.List(r.computeV2, keypairs.ListOpts{}).AllPages(tctx) if err != nil { return nil, err } @@ -55,12 +51,8 @@ func (r *OSKeypairClient) Create(ctx context.Context, opts keypairs.CreateOptsBu increasePromCounter(r.promCounter, MetricAPINova, MetricObjectKeyPair, MetricOperationCreate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - kp, err := keypairs.Create(r.computeV2, opts).Extract() + kp, err := keypairs.Create(tctx, r.computeV2, opts).Extract() return kp, err } @@ -69,12 +61,8 @@ func (r *OSKeypairClient) Get(ctx context.Context, name string) (*keypairs.KeyPa increasePromCounter(r.promCounter, MetricAPINova, MetricObjectKeyPair, MetricOperationGet) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - kp, err := keypairs.Get(r.computeV2, name, keypairs.GetOpts{}).Extract() + kp, err := keypairs.Get(tctx, r.computeV2, name, keypairs.GetOpts{}).Extract() return kp, err } @@ -83,11 +71,7 @@ func (r *OSKeypairClient) Delete(ctx context.Context, name string) error { increasePromCounter(r.promCounter, MetricAPINova, MetricObjectKeyPair, MetricOperationDelete) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - err := keypairs.Delete(r.computeV2, name, keypairs.DeleteOpts{}).ExtractErr() + err := keypairs.Delete(tctx, r.computeV2, name, keypairs.DeleteOpts{}).ExtractErr() return err } diff --git a/internal/openstack/port.go b/internal/openstack/port.go index af6e7ebf..52a19d28 100644 --- a/internal/openstack/port.go +++ b/internal/openstack/port.go @@ -6,8 +6,8 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" ) // The OSPortClient is a implementation for PortClient. When you want to use this struct be sure to call @@ -39,12 +39,8 @@ func (r *OSPortClient) List(ctx context.Context, opts ports.ListOptsBuilder) ([] increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectPort, MetricOperationList) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - page, err := ports.List(r.networkV2, opts).AllPages() + page, err := ports.List(r.networkV2, opts).AllPages(tctx) if err != nil { return nil, err } @@ -56,12 +52,8 @@ func (r *OSPortClient) Get(ctx context.Context, id string) (*ports.Port, error) increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectPort, MetricOperationGet) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - port, err := ports.Get(r.networkV2, id).Extract() + port, err := ports.Get(tctx, r.networkV2, id).Extract() return port, err } @@ -70,12 +62,8 @@ func (r *OSPortClient) Create(ctx context.Context, opts ports.CreateOptsBuilder) increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectPort, MetricOperationCreate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - port, err := ports.Create(r.networkV2, opts).Extract() + port, err := ports.Create(tctx, r.networkV2, opts).Extract() return port, err } @@ -84,12 +72,8 @@ func (r *OSPortClient) Update(ctx context.Context, id string, opts ports.UpdateO increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectPort, MetricOperationUpdate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - port, err := ports.Update(r.networkV2, id, opts).Extract() + port, err := ports.Update(tctx, r.networkV2, id, opts).Extract() return port, err } @@ -98,11 +82,7 @@ func (r *OSPortClient) Delete(ctx context.Context, id string) error { increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectPort, MetricOperationDelete) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - err := ports.Delete(r.networkV2, id).ExtractErr() + err := ports.Delete(tctx, r.networkV2, id).ExtractErr() return err } diff --git a/internal/openstack/rule.go b/internal/openstack/rule.go index b1d18452..fd76cee3 100644 --- a/internal/openstack/rule.go +++ b/internal/openstack/rule.go @@ -6,8 +6,8 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/rules" ) // The OSRuleClient is a implementation for RuleClient. When you want to use this struct be sure to call @@ -39,12 +39,8 @@ func (r *OSRuleClient) List(ctx context.Context, opts rules.ListOpts) ([]rules.S increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectRule, MetricOperationList) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - page, err := rules.List(r.networkV2, opts).AllPages() + page, err := rules.List(r.networkV2, opts).AllPages(tctx) if err != nil { return nil, err } @@ -57,12 +53,8 @@ func (r *OSRuleClient) Create(ctx context.Context, opts rules.CreateOptsBuilder) increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectRule, MetricOperationCreate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - rule, err := rules.Create(r.networkV2, opts).Extract() + rule, err := rules.Create(tctx, r.networkV2, opts).Extract() return rule, err } @@ -72,12 +64,8 @@ func (r *OSRuleClient) Get(ctx context.Context, id string) (*rules.SecGroupRule, increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectRule, MetricOperationGet) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - rule, err := rules.Get(r.networkV2, id).Extract() + rule, err := rules.Get(tctx, r.networkV2, id).Extract() return rule, err } @@ -87,11 +75,7 @@ func (r *OSRuleClient) Delete(ctx context.Context, id string) error { increasePromCounter(r.promCounter, MetricAPINeutron, MetricObjectRule, MetricOperationDelete) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.networkV2.Context = tctx - defer func() { - r.networkV2.Context = nil - }() - err := rules.Delete(r.networkV2, id).ExtractErr() + err := rules.Delete(tctx, r.networkV2, id).ExtractErr() return err } diff --git a/internal/openstack/server.go b/internal/openstack/server.go index 13e8a75f..a98debe6 100644 --- a/internal/openstack/server.go +++ b/internal/openstack/server.go @@ -6,8 +6,8 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers" ) // The OSServerClient is a implementation for ServerClient. When you want to use this struct be sure to call @@ -38,12 +38,8 @@ func (r *OSServerClient) List(ctx context.Context, opts servers.ListOptsBuilder) increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServer, MetricOperationList) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - page, err := servers.List(r.computeV2, opts).AllPages() + page, err := servers.List(r.computeV2, opts).AllPages(tctx) if err != nil { return nil, err } @@ -51,16 +47,13 @@ func (r *OSServerClient) List(ctx context.Context, opts servers.ListOptsBuilder) } // Invokes servers.Create() in gophercloud's servers package. Uses the computeV2 client provided in Configure(). -func (r *OSServerClient) Create(ctx context.Context, opts servers.CreateOptsBuilder) (*servers.Server, error) { +func (r *OSServerClient) Create(ctx context.Context, opts servers.CreateOptsBuilder, hintOpts servers.SchedulerHintOptsBuilder, +) (*servers.Server, error) { increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServer, MetricOperationCreate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - srv, err := servers.Create(r.computeV2, opts).Extract() + srv, err := servers.Create(tctx, r.computeV2, opts, hintOpts).Extract() return srv, err } @@ -69,12 +62,8 @@ func (r *OSServerClient) Get(ctx context.Context, id string) (*servers.Server, e increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServer, MetricOperationGet) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - srv, err := servers.Get(r.computeV2, id).Extract() + srv, err := servers.Get(tctx, r.computeV2, id).Extract() return srv, err } @@ -83,12 +72,8 @@ func (r *OSServerClient) Update(ctx context.Context, id string, opts servers.Upd increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServer, MetricOperationUpdate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - srv, err := servers.Update(r.computeV2, id, opts).Extract() + srv, err := servers.Update(tctx, r.computeV2, id, opts).Extract() return srv, err } @@ -97,11 +82,7 @@ func (r *OSServerClient) Delete(ctx context.Context, id string) error { increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServer, MetricOperationDelete) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - err := servers.Delete(r.computeV2, id).ExtractErr() + err := servers.Delete(tctx, r.computeV2, id).ExtractErr() return err } diff --git a/internal/openstack/servergroup.go b/internal/openstack/servergroup.go index c827081c..8ca173d2 100644 --- a/internal/openstack/servergroup.go +++ b/internal/openstack/servergroup.go @@ -6,8 +6,8 @@ import ( "github.com/prometheus/client_golang/prometheus" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servergroups" ) // The OSServerGroupClient is a implementation for ServerGroupClient. When you want to use this struct be sure to call @@ -38,11 +38,8 @@ func (r *OSServerGroupClient) List(ctx context.Context, opts servergroups.ListOp increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServerGroup, MetricOperationList) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - page, err := servergroups.List(r.computeV2, opts).AllPages() + + page, err := servergroups.List(r.computeV2, opts).AllPages(tctx) if err != nil { return nil, err } @@ -54,12 +51,8 @@ func (r *OSServerGroupClient) Create(ctx context.Context, opts servergroups.Crea increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServerGroup, MetricOperationCreate) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - srv, err := servergroups.Create(r.computeV2, opts).Extract() + srv, err := servergroups.Create(tctx, r.computeV2, opts).Extract() return srv, err } @@ -68,12 +61,8 @@ func (r *OSServerGroupClient) Get(ctx context.Context, id string) (*servergroups increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServerGroup, MetricOperationGet) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - srv, err := servergroups.Get(r.computeV2, id).Extract() + srv, err := servergroups.Get(tctx, r.computeV2, id).Extract() return srv, err } @@ -82,10 +71,6 @@ func (r *OSServerGroupClient) Delete(ctx context.Context, id string) error { increasePromCounter(r.promCounter, MetricAPINova, MetricObjectServerGroup, MetricOperationDelete) tctx, cancel := context.WithTimeout(ctx, r.timeout) defer cancel() - r.computeV2.Context = tctx - defer func() { - r.computeV2.Context = nil - }() - return servergroups.Delete(r.computeV2, id).ExtractErr() + return servergroups.Delete(tctx, r.computeV2, id).ExtractErr() } diff --git a/internal/openstack/testing/callbackclients.go b/internal/openstack/testing/callbackclients.go index c4d99c5b..8dae2f61 100644 --- a/internal/openstack/testing/callbackclients.go +++ b/internal/openstack/testing/callbackclients.go @@ -3,16 +3,16 @@ package testing import ( "context" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups" - "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/keypairs" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servergroups" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/groups" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/rules" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" ) -type CallbackGroupClient struct { //nolint:dupl // no dupl +type CallbackGroupClient struct { ListFunc func(ctx context.Context, opts groups.ListOpts) ([]groups.SecGroup, error) CreateFunc func(ctx context.Context, opts groups.CreateOptsBuilder) (*groups.SecGroup, error) GetFunc func(ctx context.Context, id string) (*groups.SecGroup, error) @@ -104,9 +104,9 @@ func (r *CallbackPortClient) Delete(ctx context.Context, id string) error { return r.DeleteFunc(ctx, id) } -type CallbackServerClient struct { //nolint:dupl // no dupl +type CallbackServerClient struct { ListFunc func(ctx context.Context, opts servers.ListOptsBuilder) ([]servers.Server, error) - CreateFunc func(ctx context.Context, opts servers.CreateOptsBuilder) (*servers.Server, error) + CreateFunc func(ctx context.Context, opts servers.CreateOptsBuilder, hintOpts servers.SchedulerHintOptsBuilder) (*servers.Server, error) GetFunc func(ctx context.Context, id string) (*servers.Server, error) UpdateFunc func(ctx context.Context, id string, opts servers.UpdateOptsBuilder) (*servers.Server, error) DeleteFunc func(ctx context.Context, id string) error @@ -115,8 +115,9 @@ type CallbackServerClient struct { //nolint:dupl // no dupl func (r *CallbackServerClient) List(ctx context.Context, opts servers.ListOptsBuilder) ([]servers.Server, error) { return r.ListFunc(ctx, opts) } -func (r *CallbackServerClient) Create(ctx context.Context, opts servers.CreateOptsBuilder) (*servers.Server, error) { - return r.CreateFunc(ctx, opts) +func (r *CallbackServerClient) Create(ctx context.Context, opts servers.CreateOptsBuilder, hintOpts servers.SchedulerHintOptsBuilder, +) (*servers.Server, error) { + return r.CreateFunc(ctx, opts, hintOpts) } func (r *CallbackServerClient) Get(ctx context.Context, id string) (*servers.Server, error) { return r.GetFunc(ctx, id) diff --git a/internal/openstack/testing/fake.go b/internal/openstack/testing/fake.go index a53b06cd..e994dc7e 100644 --- a/internal/openstack/testing/fake.go +++ b/internal/openstack/testing/fake.go @@ -8,13 +8,13 @@ import ( "strings" "time" - "github.com/gophercloud/gophercloud" - "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups" - "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups" - "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules" - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" + "github.com/gophercloud/gophercloud/v2" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servergroups" + "github.com/gophercloud/gophercloud/v2/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/floatingips" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/groups" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/security/rules" + "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/ports" ) //nolint:gocyclo // complicated test function @@ -62,7 +62,7 @@ func GetFakeClient() *MockClient { group, found := grps.(map[string]*groups.SecGroup)[id] if !found { - return nil, gophercloud.ErrDefault404{} + return nil, gophercloud.ErrUnexpectedResponseCode{} } return group, nil @@ -136,7 +136,7 @@ func GetFakeClient() *MockClient { rls := client.StoredValues["rules"] rule, found := rls.(map[string]*rules.SecGroupRule)[id] if !found { - return nil, gophercloud.ErrDefault404{} + return nil, gophercloud.ErrUnexpectedResponseCode{} } return rule, nil @@ -194,7 +194,7 @@ func GetFakeClient() *MockClient { fips := client.StoredValues["fips"] fip, found := fips.(map[string]*floatingips.FloatingIP)[id] if !found { - return nil, gophercloud.ErrDefault404{} + return nil, gophercloud.ErrUnexpectedResponseCode{} } return fip, nil @@ -266,7 +266,7 @@ func GetFakeClient() *MockClient { prts := client.StoredValues["ports"] port, found := prts.(map[string]*ports.Port)[id] if !found { - return nil, gophercloud.ErrDefault404{} + return nil, gophercloud.ErrUnexpectedResponseCode{} } return port, nil @@ -275,7 +275,7 @@ func GetFakeClient() *MockClient { prts := client.StoredValues["ports"] _, found := prts.(map[string]*ports.Port)[id] if !found { - return gophercloud.ErrDefault404{} + return gophercloud.ErrUnexpectedResponseCode{} } delete(prts.(map[string]*ports.Port), id) return nil @@ -315,7 +315,7 @@ func GetFakeClient() *MockClient { return items, nil }, - CreateFunc: func(_ context.Context, optsBuilder servers.CreateOptsBuilder) (*servers.Server, error) { + CreateFunc: func(_ context.Context, optsBuilder servers.CreateOptsBuilder, _ servers.SchedulerHintOptsBuilder) (*servers.Server, error) { opts := optsBuilder.(*servers.CreateOpts) addresses := make(map[string]interface{}) @@ -342,7 +342,7 @@ func GetFakeClient() *MockClient { srvs := client.StoredValues["servers"] server, found := srvs.(map[string]*servers.Server)[id] if !found { - return nil, gophercloud.ErrDefault404{} + return nil, gophercloud.ErrUnexpectedResponseCode{} } return server, nil @@ -389,7 +389,7 @@ func GetFakeClient() *MockClient { srvs := client.StoredValues["servergroup"] server, found := srvs.(map[string]*servergroups.ServerGroup)[id] if !found { - return nil, gophercloud.ErrDefault404{} + return nil, gophercloud.ErrUnexpectedResponseCode{} } return server, nil