From bcbc8fa656b6cfa55a64e3444ffd4a4de0dc3dac Mon Sep 17 00:00:00 2001 From: Jirka Kremser Date: Tue, 2 Aug 2022 14:53:39 +0200 Subject: [PATCH 1/2] Bump Infoblox go client to v2 (2.1.2-0.20220727224704-88a5ba602dbf) The latest released version of this go client doesn't have the full support for CRUDING the TXT records (get is missing) so we need to depend on a git sha. It was a major version upgrade so some API was changed and some method signatures were modified. Namely: - inicialization of the client is different, it now requires the auth config to be passed as a separate struct - creating TXT record requires a view argument - `uint -> uint32` for ttl in method signatures - `*ibcl.ObjectManager -> ibcl.IBObjectManager` Signed-off-by: Jirka Kremser --- Makefile | 2 +- controllers/depresolver/resolver_mock.go | 34 +++++++++---------- controllers/providers/dns/infoblox-client.go | 19 +++++------ .../providers/dns/infoblox-client_mock.go | 6 ++-- .../providers/dns/infoblox-connection_mock.go | 12 +++---- controllers/providers/dns/infoblox-sort.go | 2 +- controllers/providers/dns/infoblox.go | 30 ++++++++-------- controllers/providers/dns/infoblox_test.go | 16 ++++----- controllers/weight_test.go | 2 +- go.mod | 1 + go.sum | 3 ++ 11 files changed, 65 insertions(+), 62 deletions(-) diff --git a/Makefile b/Makefile index 8847c1b74e..3e02e926fa 100644 --- a/Makefile +++ b/Makefile @@ -383,7 +383,7 @@ mocks: mockgen -source=controllers/providers/dns/dns.go -destination=controllers/providers/dns/dns_mock.go -package=dns mockgen -source=controllers/providers/dns/infoblox-client.go -destination=controllers/providers/dns/infoblox-client_mock.go -package=dns mockgen -source=controllers/depresolver/resolver.go -destination=controllers/depresolver/resolver_mock.go -package=depresolver - mockgen -destination=controllers/providers/dns/infoblox-connection_mock.go -package=dns github.com/infobloxopen/infoblox-go-client IBConnector + mockgen -destination=controllers/providers/dns/infoblox-connection_mock.go -package=dns github.com/infobloxopen/infoblox-go-client/v2 IBConnector $(call golic) # remove clusters and redeploy diff --git a/controllers/depresolver/resolver_mock.go b/controllers/depresolver/resolver_mock.go index b83067b951..e811483039 100644 --- a/controllers/depresolver/resolver_mock.go +++ b/controllers/depresolver/resolver_mock.go @@ -31,31 +31,31 @@ import ( client "sigs.k8s.io/controller-runtime/pkg/client" ) -// MockResolver is a mock of GslbResolver interface. -type MockResolver struct { +// MockGslbResolver is a mock of GslbResolver interface. +type MockGslbResolver struct { ctrl *gomock.Controller - recorder *MockResolverMockRecorder + recorder *MockGslbResolverMockRecorder } -// MockResolverMockRecorder is the mock recorder for MockResolver. -type MockResolverMockRecorder struct { - mock *MockResolver +// MockGslbResolverMockRecorder is the mock recorder for MockGslbResolver. +type MockGslbResolverMockRecorder struct { + mock *MockGslbResolver } -// NewMockResolver creates a new mock instance. -func NewMockResolver(ctrl *gomock.Controller) *MockResolver { - mock := &MockResolver{ctrl: ctrl} - mock.recorder = &MockResolverMockRecorder{mock} +// NewMockGslbResolver creates a new mock instance. +func NewMockGslbResolver(ctrl *gomock.Controller) *MockGslbResolver { + mock := &MockGslbResolver{ctrl: ctrl} + mock.recorder = &MockGslbResolverMockRecorder{mock} return mock } // EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockResolver) EXPECT() *MockResolverMockRecorder { +func (m *MockGslbResolver) EXPECT() *MockGslbResolverMockRecorder { return m.recorder } // ResolveGslbSpec mocks base method. -func (m *MockResolver) ResolveGslbSpec(ctx context.Context, gslb *v1beta1.Gslb, client client.Client) error { +func (m *MockGslbResolver) ResolveGslbSpec(ctx context.Context, gslb *v1beta1.Gslb, client client.Client) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ResolveGslbSpec", ctx, gslb, client) ret0, _ := ret[0].(error) @@ -63,13 +63,13 @@ func (m *MockResolver) ResolveGslbSpec(ctx context.Context, gslb *v1beta1.Gslb, } // ResolveGslbSpec indicates an expected call of ResolveGslbSpec. -func (mr *MockResolverMockRecorder) ResolveGslbSpec(ctx, gslb, client interface{}) *gomock.Call { +func (mr *MockGslbResolverMockRecorder) ResolveGslbSpec(ctx, gslb, client interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveGslbSpec", reflect.TypeOf((*MockResolver)(nil).ResolveGslbSpec), ctx, gslb, client) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveGslbSpec", reflect.TypeOf((*MockGslbResolver)(nil).ResolveGslbSpec), ctx, gslb, client) } // ResolveOperatorConfig mocks base method. -func (m *MockResolver) ResolveOperatorConfig() (*Config, error) { +func (m *MockGslbResolver) ResolveOperatorConfig() (*Config, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ResolveOperatorConfig") ret0, _ := ret[0].(*Config) @@ -78,7 +78,7 @@ func (m *MockResolver) ResolveOperatorConfig() (*Config, error) { } // ResolveOperatorConfig indicates an expected call of ResolveOperatorConfig. -func (mr *MockResolverMockRecorder) ResolveOperatorConfig() *gomock.Call { +func (mr *MockGslbResolverMockRecorder) ResolveOperatorConfig() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveOperatorConfig", reflect.TypeOf((*MockResolver)(nil).ResolveOperatorConfig)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveOperatorConfig", reflect.TypeOf((*MockGslbResolver)(nil).ResolveOperatorConfig)) } diff --git a/controllers/providers/dns/infoblox-client.go b/controllers/providers/dns/infoblox-client.go index fb57b479cf..8e38b02484 100644 --- a/controllers/providers/dns/infoblox-client.go +++ b/controllers/providers/dns/infoblox-client.go @@ -21,16 +21,16 @@ Generated by GoLic, for more details see: https://github.com/AbsaOSS/golic import ( "strconv" - ibclient "github.com/infobloxopen/infoblox-go-client" + ibclient "github.com/infobloxopen/infoblox-go-client/v2" "github.com/k8gb-io/k8gb/controllers/depresolver" ) type InfobloxClient interface { - GetObjectManager() (objMgr *ibclient.ObjectManager, err error) + GetObjectManager() (objMgr ibclient.IBObjectManager, err error) } type Client struct { - objMgr *ibclient.ObjectManager + objMgr ibclient.IBObjectManager config depresolver.Config } @@ -40,18 +40,17 @@ func NewInfobloxClient(config depresolver.Config) *Client { } } -func (c *Client) GetObjectManager() (objMgr *ibclient.ObjectManager, err error) { +func (c *Client) GetObjectManager() (objMgr ibclient.IBObjectManager, err error) { hostConfig := ibclient.HostConfig{ - Host: c.config.Infoblox.Host, - Version: c.config.Infoblox.Version, - Port: strconv.Itoa(c.config.Infoblox.Port), - Username: c.config.Infoblox.Username, - Password: c.config.Infoblox.Password, + Host: c.config.Infoblox.Host, + Version: c.config.Infoblox.Version, + Port: strconv.Itoa(c.config.Infoblox.Port), } + authConfig := ibclient.AuthConfig{Username: c.config.Infoblox.Username, Password: c.config.Infoblox.Password} transportConfig := ibclient.NewTransportConfig("false", c.config.Infoblox.HTTPRequestTimeout, c.config.Infoblox.HTTPPoolConnections) requestBuilder := &ibclient.WapiRequestBuilder{} requestor := &ibclient.WapiHttpRequestor{} - conn, err := ibclient.NewConnector(hostConfig, transportConfig, requestBuilder, requestor) + conn, err := ibclient.NewConnector(hostConfig, authConfig, transportConfig, requestBuilder, requestor) if err != nil { return } diff --git a/controllers/providers/dns/infoblox-client_mock.go b/controllers/providers/dns/infoblox-client_mock.go index b446eef754..f870094470 100644 --- a/controllers/providers/dns/infoblox-client_mock.go +++ b/controllers/providers/dns/infoblox-client_mock.go @@ -26,7 +26,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - ibclient "github.com/infobloxopen/infoblox-go-client" + ibclient "github.com/infobloxopen/infoblox-go-client/v2" ) // MockInfobloxClient is a mock of InfobloxClient interface. @@ -53,10 +53,10 @@ func (m *MockInfobloxClient) EXPECT() *MockInfobloxClientMockRecorder { } // GetObjectManager mocks base method. -func (m *MockInfobloxClient) GetObjectManager() (*ibclient.ObjectManager, error) { +func (m *MockInfobloxClient) GetObjectManager() (ibclient.IBObjectManager, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetObjectManager") - ret0, _ := ret[0].(*ibclient.ObjectManager) + ret0, _ := ret[0].(ibclient.IBObjectManager) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/controllers/providers/dns/infoblox-connection_mock.go b/controllers/providers/dns/infoblox-connection_mock.go index 5818362119..7dd6315710 100644 --- a/controllers/providers/dns/infoblox-connection_mock.go +++ b/controllers/providers/dns/infoblox-connection_mock.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/infobloxopen/infoblox-go-client (interfaces: IBConnector) +// Source: github.com/infobloxopen/infoblox-go-client/v2 (interfaces: IBConnector) // Package dns is a generated GoMock package. package dns @@ -26,7 +26,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - ibclient "github.com/infobloxopen/infoblox-go-client" + ibclient "github.com/infobloxopen/infoblox-go-client/v2" ) // MockIBConnector is a mock of IBConnector interface. @@ -83,17 +83,17 @@ func (mr *MockIBConnectorMockRecorder) DeleteObject(arg0 interface{}) *gomock.Ca } // GetObject mocks base method. -func (m *MockIBConnector) GetObject(arg0 ibclient.IBObject, arg1 string, arg2 interface{}) error { +func (m *MockIBConnector) GetObject(arg0 ibclient.IBObject, arg1 string, arg2 *ibclient.QueryParams, arg3 interface{}) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetObject", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "GetObject", arg0, arg1, arg2, arg3) ret0, _ := ret[0].(error) return ret0 } // GetObject indicates an expected call of GetObject. -func (mr *MockIBConnectorMockRecorder) GetObject(arg0, arg1, arg2 interface{}) *gomock.Call { +func (mr *MockIBConnectorMockRecorder) GetObject(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetObject", reflect.TypeOf((*MockIBConnector)(nil).GetObject), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetObject", reflect.TypeOf((*MockIBConnector)(nil).GetObject), arg0, arg1, arg2, arg3) } // UpdateObject mocks base method. diff --git a/controllers/providers/dns/infoblox-sort.go b/controllers/providers/dns/infoblox-sort.go index fc36dfbea9..9fea43e1fa 100644 --- a/controllers/providers/dns/infoblox-sort.go +++ b/controllers/providers/dns/infoblox-sort.go @@ -21,7 +21,7 @@ Generated by GoLic, for more details see: https://github.com/AbsaOSS/golic import ( "sort" - ibclient "github.com/infobloxopen/infoblox-go-client" + ibclient "github.com/infobloxopen/infoblox-go-client/v2" ) type byAddress []ibclient.NameServer diff --git a/controllers/providers/dns/infoblox.go b/controllers/providers/dns/infoblox.go index 64b884f253..81245773ec 100644 --- a/controllers/providers/dns/infoblox.go +++ b/controllers/providers/dns/infoblox.go @@ -25,7 +25,7 @@ import ( externaldns "sigs.k8s.io/external-dns/endpoint" - ibcl "github.com/infobloxopen/infoblox-go-client" + ibcl "github.com/infobloxopen/infoblox-go-client/v2" k8gbv1beta1 "github.com/k8gb-io/k8gb/api/v1beta1" "github.com/k8gb-io/k8gb/controllers/depresolver" "github.com/k8gb-io/k8gb/controllers/providers/assistant" @@ -212,7 +212,7 @@ func (p *InfobloxProvider) String() string { return "Infoblox" } -func (p *InfobloxProvider) saveHeartbeatTXTRecord(objMgr *ibcl.ObjectManager, gslb *k8gbv1beta1.Gslb) (err error) { +func (p *InfobloxProvider) saveHeartbeatTXTRecord(objMgr ibcl.IBObjectManager, gslb *k8gbv1beta1.Gslb) (err error) { var heartbeatTXTRecord *ibcl.RecordTXT edgeTimestamp := fmt.Sprint(time.Now().UTC().Format("2006-01-02T15:04:05")) heartbeatTXTName := p.config.GetClusterHeartbeatFQDN(gslb.Name) @@ -224,7 +224,7 @@ func (p *InfobloxProvider) saveHeartbeatTXTRecord(objMgr *ibcl.ObjectManager, gs log.Info(). Str("HeartbeatTXTName", heartbeatTXTName). Msg("Creating split brain TXT record") - _, err = p.createTXTRecord(objMgr, heartbeatTXTName, edgeTimestamp, uint(gslb.Spec.Strategy.DNSTtlSeconds)) + _, err = p.createTXTRecord(objMgr, heartbeatTXTName, edgeTimestamp, uint32(gslb.Spec.Strategy.DNSTtlSeconds)) if err != nil { m.InfobloxIncrementHeartbeatError(gslb) return @@ -233,7 +233,7 @@ func (p *InfobloxProvider) saveHeartbeatTXTRecord(objMgr *ibcl.ObjectManager, gs log.Info(). Str("HeartbeatTXTName", heartbeatTXTName). Msg("Updating split brain TXT record") - _, err = p.updateTXTRecord(objMgr, heartbeatTXTName, edgeTimestamp) + _, err = p.updateTXTRecord(objMgr, heartbeatTXTName, edgeTimestamp, uint32(gslb.Spec.Strategy.DNSTtlSeconds)) if err != nil { m.InfobloxIncrementHeartbeatError(gslb) return @@ -262,56 +262,56 @@ func (p *InfobloxProvider) filterOutDelegateTo(delegateTo []ibcl.NameServer, fqd return } -func (p *InfobloxProvider) createZoneDelegated(o *ibcl.ObjectManager, fqdn string, d []ibcl.NameServer) (res *ibcl.ZoneDelegated, err error) { +func (p *InfobloxProvider) createZoneDelegated(o ibcl.IBObjectManager, fqdn string, d []ibcl.NameServer) (res *ibcl.ZoneDelegated, err error) { start := time.Now() res, err = o.CreateZoneDelegated(fqdn, d) m.InfobloxObserveRequestDuration(start, metrics.CreateZoneDelegated, err == nil) return } -func (p *InfobloxProvider) getZoneDelegated(o *ibcl.ObjectManager, fqdn string) (res *ibcl.ZoneDelegated, err error) { +func (p *InfobloxProvider) getZoneDelegated(o ibcl.IBObjectManager, fqdn string) (res *ibcl.ZoneDelegated, err error) { start := time.Now() res, err = o.GetZoneDelegated(fqdn) m.InfobloxObserveRequestDuration(start, metrics.GetZoneDelegated, err == nil) return } -func (p *InfobloxProvider) updateZoneDelegated(o *ibcl.ObjectManager, fqdn string, d []ibcl.NameServer) (res *ibcl.ZoneDelegated, err error) { +func (p *InfobloxProvider) updateZoneDelegated(o ibcl.IBObjectManager, fqdn string, d []ibcl.NameServer) (res *ibcl.ZoneDelegated, err error) { start := time.Now() res, err = o.UpdateZoneDelegated(fqdn, d) m.InfobloxObserveRequestDuration(start, metrics.UpdateZoneDelegated, err == nil) return } -func (p *InfobloxProvider) deleteZoneDelegated(o *ibcl.ObjectManager, fqdn string) (res string, err error) { +func (p *InfobloxProvider) deleteZoneDelegated(o ibcl.IBObjectManager, fqdn string) (res string, err error) { start := time.Now() res, err = o.DeleteZoneDelegated(fqdn) m.InfobloxObserveRequestDuration(start, metrics.DeleteZoneDelegated, err == nil) return } -func (p *InfobloxProvider) createTXTRecord(o *ibcl.ObjectManager, name string, text string, ttl uint) (res *ibcl.RecordTXT, err error) { +func (p *InfobloxProvider) createTXTRecord(o ibcl.IBObjectManager, name string, text string, ttl uint32) (res *ibcl.RecordTXT, err error) { start := time.Now() - res, err = o.CreateTXTRecord(name, text, ttl, "default") + res, err = o.CreateTXTRecord("", name, text, ttl, true, "default", nil) m.InfobloxObserveRequestDuration(start, metrics.CreateTXTRecord, err == nil) return } -func (p *InfobloxProvider) getTXTRecord(o *ibcl.ObjectManager, name string) (res *ibcl.RecordTXT, err error) { +func (p *InfobloxProvider) getTXTRecord(o ibcl.IBObjectManager, name string) (res *ibcl.RecordTXT, err error) { start := time.Now() - res, err = o.GetTXTRecord(name) + res, err = o.GetTXTRecord("", name) m.InfobloxObserveRequestDuration(start, metrics.GetTXTRecord, err == nil) return } -func (p *InfobloxProvider) updateTXTRecord(o *ibcl.ObjectManager, name string, text string) (res *ibcl.RecordTXT, err error) { +func (p *InfobloxProvider) updateTXTRecord(o ibcl.IBObjectManager, name string, text string, ttl uint32) (res *ibcl.RecordTXT, err error) { start := time.Now() - res, err = o.UpdateTXTRecord(name, text) + res, err = o.UpdateTXTRecord("", name, text, ttl, true, "default", nil) m.InfobloxObserveRequestDuration(start, metrics.UpdateTXTRecord, err == nil) return } -func (p *InfobloxProvider) deleteTXTRecord(o *ibcl.ObjectManager, name string) (res string, err error) { +func (p *InfobloxProvider) deleteTXTRecord(o ibcl.IBObjectManager, name string) (res string, err error) { start := time.Now() res, err = o.DeleteTXTRecord(name) m.InfobloxObserveRequestDuration(start, metrics.DeleteTXTRecord, err == nil) diff --git a/controllers/providers/dns/infoblox_test.go b/controllers/providers/dns/infoblox_test.go index 6810796ee9..48f54e7adb 100644 --- a/controllers/providers/dns/infoblox_test.go +++ b/controllers/providers/dns/infoblox_test.go @@ -23,7 +23,7 @@ import ( "testing" "github.com/golang/mock/gomock" - ibclient "github.com/infobloxopen/infoblox-go-client" + ibclient "github.com/infobloxopen/infoblox-go-client/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -170,7 +170,7 @@ func TestInfobloxCreateZoneDelegationForExternalDNS(t *testing.T) { a.EXPECT().GslbIngressExposedIPs(gomock.Any()).Return(ipRange, nil).Times(1) con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) config := defaultConfig provider := NewInfobloxDNS(config, a, cl) @@ -194,9 +194,9 @@ func TestInfobloxCreateZoneDelegationForExternalDNSWithSplitBrainEnabled(t *test }).Return(nil).Times(1) con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(2) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). Return(nil).Do(func(arg0 *ibclient.RecordTXT, arg1, arg2 interface{}) { require.Equal(t, "test-gslb-heartbeat-us-west-1.example.com", arg0.Name) }).AnyTimes() @@ -221,9 +221,9 @@ func TestInfobloxCreateZoneDelegationForExternalDNSWithSplitBrainEnabledCreating a.EXPECT().InspectTXTThreshold(gomock.Any(), gomock.Any()).Return(nil).Times(1) con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{}).Return(nil).AnyTimes() + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{}).Return(nil).AnyTimes() config := defaultConfig config.SplitBrainCheck = true provider := NewInfobloxDNS(config, a, cl) @@ -244,9 +244,9 @@ func TestInfobloxFinalize(t *testing.T) { con.EXPECT().DeleteObject(gomock.Any()).Return(ref, nil).Do(func(arg0 string) { require.Equal(t, arg0, ref) }).AnyTimes() - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}). + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}). Return(nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). Return(nil).Do(func(arg0 *ibclient.RecordTXT, arg1, arg2 interface{}) { require.Equal(t, "test-gslb-heartbeat-us-west-1.example.com", arg0.Name) }).Times(1) diff --git a/controllers/weight_test.go b/controllers/weight_test.go index 7af62d030a..ae210ddba6 100644 --- a/controllers/weight_test.go +++ b/controllers/weight_test.go @@ -170,7 +170,7 @@ func TestWeight(t *testing.T) { defer ctrl.Finish() // settings := provideSettings(t, predefinedConfig) m := dns.NewMockProvider(ctrl) - r := depresolver.NewMockResolver(ctrl) + r := depresolver.NewMockGslbResolver(ctrl) m.EXPECT().GslbIngressExposedIPs(gomock.Any()).Return([]string{}, nil).Times(1) m.EXPECT().SaveDNSEndpoint(gomock.Any(), gomock.Any()).Do(assertAnnotation).Return(fmt.Errorf("save DNS error")).Times(1) m.EXPECT().CreateZoneDelegationForExternalDNS(gomock.Any()).Return(nil).AnyTimes() diff --git a/go.mod b/go.mod index 9d1ded9e3d..e4d5a38099 100644 --- a/go.mod +++ b/go.mod @@ -35,6 +35,7 @@ require ( github.com/google/uuid v1.1.2 // indirect github.com/googleapis/gnostic v0.5.5 // indirect github.com/imdario/mergo v0.3.12 // indirect + github.com/infobloxopen/infoblox-go-client/v2 v2.1.2-0.20220727224704-88a5ba602dbf // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kr/pretty v0.3.0 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect diff --git a/go.sum b/go.sum index 4a954f961e..5b02bffbaa 100644 --- a/go.sum +++ b/go.sum @@ -727,7 +727,10 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/infobloxopen/infoblox-go-client v1.1.1 h1:728A6LbLjptj/7kZjHyIxQnm768PWHfGFm0HH8FnbtU= github.com/infobloxopen/infoblox-go-client v1.1.1/go.mod h1:BXiw7S2b9qJoM8MS40vfgCNB2NLHGusk1DtO16BD9zI= +github.com/infobloxopen/infoblox-go-client/v2 v2.1.2-0.20220407114022-6f4c71443168 h1:EXKtVoP/44ckXpw3v2/vrtMEdKx/PA+YBl+REoV27XQ= github.com/infobloxopen/infoblox-go-client/v2 v2.1.2-0.20220407114022-6f4c71443168/go.mod h1:+lznx4ASBSUZ2i6qwlgyn0v3eKDxBHNU5aRJzghAFbw= +github.com/infobloxopen/infoblox-go-client/v2 v2.1.2-0.20220727224704-88a5ba602dbf h1:/4CHlCAQbzdED7T6YZ1ht7uQ8HNBR+eeR5hW44+du54= +github.com/infobloxopen/infoblox-go-client/v2 v2.1.2-0.20220727224704-88a5ba602dbf/go.mod h1:+lznx4ASBSUZ2i6qwlgyn0v3eKDxBHNU5aRJzghAFbw= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= From 0be653c316a29107592b68afe0d9c36b36e7c6e4 Mon Sep 17 00:00:00 2001 From: Jirka Kremser Date: Wed, 3 Aug 2022 18:35:32 +0200 Subject: [PATCH 2/2] align tests w/ infoblox-client@v2 Signed-off-by: Jirka Kremser --- controllers/providers/dns/infoblox.go | 12 ++++++++++-- controllers/providers/dns/infoblox_test.go | 22 +++++++++------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/controllers/providers/dns/infoblox.go b/controllers/providers/dns/infoblox.go index 81245773ec..a2b6906613 100644 --- a/controllers/providers/dns/infoblox.go +++ b/controllers/providers/dns/infoblox.go @@ -19,6 +19,7 @@ Generated by GoLic, for more details see: https://github.com/AbsaOSS/golic */ import ( + "errors" "fmt" "reflect" "time" @@ -40,6 +41,8 @@ type InfobloxProvider struct { var m = metrics.Metrics() +const infobloxView = "default" + func NewInfobloxDNS(config depresolver.Config, assistant assistant.Assistant, client InfobloxClient) *InfobloxProvider { return &InfobloxProvider{ client: client, @@ -292,14 +295,19 @@ func (p *InfobloxProvider) deleteZoneDelegated(o ibcl.IBObjectManager, fqdn stri func (p *InfobloxProvider) createTXTRecord(o ibcl.IBObjectManager, name string, text string, ttl uint32) (res *ibcl.RecordTXT, err error) { start := time.Now() - res, err = o.CreateTXTRecord("", name, text, ttl, true, "default", nil) + res, err = o.CreateTXTRecord(infobloxView, name, text, ttl, true, "default", nil) m.InfobloxObserveRequestDuration(start, metrics.CreateTXTRecord, err == nil) return } func (p *InfobloxProvider) getTXTRecord(o ibcl.IBObjectManager, name string) (res *ibcl.RecordTXT, err error) { start := time.Now() - res, err = o.GetTXTRecord("", name) + res, err = o.GetTXTRecord(infobloxView, name) + e := &ibcl.NotFoundError{} + if errors.As(err, &e) { + // infoblox-client@v1 wasn't returning the error in case the record was not found, so preserving the contract from v1 here + err = nil + } m.InfobloxObserveRequestDuration(start, metrics.GetTXTRecord, err == nil) return } diff --git a/controllers/providers/dns/infoblox_test.go b/controllers/providers/dns/infoblox_test.go index 48f54e7adb..684b05b98a 100644 --- a/controllers/providers/dns/infoblox_test.go +++ b/controllers/providers/dns/infoblox_test.go @@ -170,7 +170,7 @@ func TestInfobloxCreateZoneDelegationForExternalDNS(t *testing.T) { a.EXPECT().GslbIngressExposedIPs(gomock.Any()).Return(ipRange, nil).Times(1) con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) config := defaultConfig provider := NewInfobloxDNS(config, a, cl) @@ -194,12 +194,10 @@ func TestInfobloxCreateZoneDelegationForExternalDNSWithSplitBrainEnabled(t *test }).Return(nil).Times(1) con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(2) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). - Return(nil).Do(func(arg0 *ibclient.RecordTXT, arg1, arg2 interface{}) { - require.Equal(t, "test-gslb-heartbeat-us-west-1.example.com", arg0.Name) - }).AnyTimes() + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, []ibclient.RecordTXT{{Ref: ref}}).Times(1) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, &ibclient.RecordTXT{Ref: ref}).AnyTimes() config := defaultConfig config.SplitBrainCheck = true provider := NewInfobloxDNS(config, a, cl) @@ -221,9 +219,10 @@ func TestInfobloxCreateZoneDelegationForExternalDNSWithSplitBrainEnabledCreating a.EXPECT().InspectTXTThreshold(gomock.Any(), gomock.Any()).Return(nil).Times(1) con.EXPECT().CreateObject(gomock.Any()).Return(ref, nil).AnyTimes() con.EXPECT().UpdateObject(gomock.Any(), gomock.Any()).Return(ref, nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, []ibclient.ZoneDelegated{defaultDelegatedZone}).Return(nil) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{}).Return(nil).AnyTimes() + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, []ibclient.RecordTXT{}).Return(nil).Times(1) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, &ibclient.RecordTXT{}).Return(nil).Times(1) config := defaultConfig config.SplitBrainCheck = true provider := NewInfobloxDNS(config, a, cl) @@ -244,12 +243,9 @@ func TestInfobloxFinalize(t *testing.T) { con.EXPECT().DeleteObject(gomock.Any()).Return(ref, nil).Do(func(arg0 string) { require.Equal(t, arg0, ref) }).AnyTimes() - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.ZoneDelegated{defaultDelegatedZone}). + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, []ibclient.ZoneDelegated{defaultDelegatedZone}). Return(nil).Times(1) - con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(2, []ibclient.RecordTXT{{Ref: ref}}). - Return(nil).Do(func(arg0 *ibclient.RecordTXT, arg1, arg2 interface{}) { - require.Equal(t, "test-gslb-heartbeat-us-west-1.example.com", arg0.Name) - }).Times(1) + con.EXPECT().GetObject(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).SetArg(3, []ibclient.RecordTXT{{Ref: ref}}).Times(1) cl.EXPECT().GetObjectManager().Return(ibclient.NewObjectManager(con, "k8gbclient", ""), nil).Times(1) config := defaultConfig provider := NewInfobloxDNS(config, a, cl)