From f890d882e206240bdf34700a6c77775c424b5c11 Mon Sep 17 00:00:00 2001 From: Sergey Kudriavtsev Date: Thu, 24 Mar 2022 22:51:55 +0300 Subject: [PATCH 1/4] migration to infoblox-go-client/v2 --- go.mod | 1 + go.sum | 6 ++ provider/infoblox/infoblox.go | 103 ++++++++---------- provider/infoblox/infoblox_test.go | 161 +++++++++++++---------------- 4 files changed, 120 insertions(+), 151 deletions(-) diff --git a/go.mod b/go.mod index aefd07cd7..9e3f5d9dc 100644 --- a/go.mod +++ b/go.mod @@ -28,6 +28,7 @@ require ( github.com/gophercloud/gophercloud v0.22.0 github.com/hooklift/gowsdl v0.5.0 github.com/infobloxopen/infoblox-go-client v1.1.1 + github.com/infobloxopen/infoblox-go-client/v2 v2.1.1 github.com/linki/instrumented_http v0.3.0 github.com/linode/linodego v0.32.2 github.com/maxatome/go-testdeep v1.11.0 diff --git a/go.sum b/go.sum index ebc30518e..8dde9586a 100644 --- a/go.sum +++ b/go.sum @@ -751,6 +751,8 @@ 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.1 h1:NYnXOngwW4xMIgUz4bKJ1Ygsmq5K0OOdUEkuLlkR1Ag= +github.com/infobloxopen/infoblox-go-client/v2 v2.1.1/go.mod h1:+lznx4ASBSUZ2i6qwlgyn0v3eKDxBHNU5aRJzghAFbw= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= @@ -839,6 +841,7 @@ github.com/linode/linodego v0.32.2/go.mod h1:BR0gVkCJffEdIGJSl6bHR80Ty+Uvg/2jkjm github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/lyft/protoc-gen-star v0.4.10/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -962,6 +965,7 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= @@ -974,6 +978,7 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= @@ -1123,6 +1128,7 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/provider/infoblox/infoblox.go b/provider/infoblox/infoblox.go index 5119bb09c..04058fc8f 100644 --- a/provider/infoblox/infoblox.go +++ b/provider/infoblox/infoblox.go @@ -27,7 +27,7 @@ import ( "strings" transform "github.com/StackExchange/dnscontrol/pkg/transform" - ibclient "github.com/infobloxopen/infoblox-go-client" + ibclient "github.com/infobloxopen/infoblox-go-client/v2" "github.com/sirupsen/logrus" "sigs.k8s.io/external-dns/endpoint" @@ -95,7 +95,7 @@ func NewExtendedRequestBuilder(maxResults int, fqdnRegEx string) *ExtendedReques // BuildRequest prepares the api request. it uses BuildRequest of // WapiRequestBuilder and then add the _max_requests parameter -func (mrb *ExtendedRequestBuilder) BuildRequest(t ibclient.RequestType, obj ibclient.IBObject, ref string, queryParams ibclient.QueryParams) (req *http.Request, err error) { +func (mrb *ExtendedRequestBuilder) BuildRequest(t ibclient.RequestType, obj ibclient.IBObject, ref string, queryParams *ibclient.QueryParams) (req *http.Request, err error) { req, err = mrb.WapiRequestBuilder.BuildRequest(t, obj, ref, queryParams) if req.Method == "GET" { query := req.URL.Query() @@ -147,7 +147,7 @@ func NewInfobloxProvider(infobloxConfig InfobloxConfig) (*InfobloxProvider, erro return nil, err } - provider := &InfobloxProvider{ + providerCfg := &InfobloxProvider{ client: client, domainFilter: infobloxConfig.DomainFilter, zoneIDFilter: infobloxConfig.ZoneIDFilter, @@ -158,7 +158,7 @@ func NewInfobloxProvider(infobloxConfig InfobloxConfig) (*InfobloxProvider, erro cacheDuration: infobloxConfig.CacheDuration, } - return provider, nil + return providerCfg, nil } // Records gets the current records. @@ -171,13 +171,10 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E for _, zone := range zones { logrus.Debugf("fetch records from zone '%s'", zone.Fqdn) var resA []ibclient.RecordA - objA := ibclient.NewRecordA( - ibclient.RecordA{ - Zone: zone.Fqdn, - View: p.view, - }, - ) - err = p.client.GetObject(objA, "", &resA) + objA := ibclient.NewEmptyRecordA() + objA.View = p.view + objA.Zone = zone.Fqdn + err = p.client.GetObject(objA, "", nil, &resA) if err != nil { return nil, fmt.Errorf("could not fetch A records from zone '%s': %s", zone.Fqdn, err) } @@ -207,13 +204,10 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E // Include Host records since they should be treated synonymously with A records var resH []ibclient.HostRecord - objH := ibclient.NewHostRecord( - ibclient.HostRecord{ - Zone: zone.Fqdn, - View: p.view, - }, - ) - err = p.client.GetObject(objH, "", &resH) + objH := ibclient.NewEmptyHostRecord() + objH.View = p.view + objH.Zone = zone.Fqdn + err = p.client.GetObject(objH, "", nil, &resH) if err != nil { return nil, fmt.Errorf("could not fetch host records from zone '%s': %s", zone.Fqdn, err) } @@ -232,13 +226,10 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E } var resC []ibclient.RecordCNAME - objC := ibclient.NewRecordCNAME( - ibclient.RecordCNAME{ - Zone: zone.Fqdn, - View: p.view, - }, - ) - err = p.client.GetObject(objC, "", &resC) + objC := ibclient.NewEmptyRecordCNAME() + objC.View = p.view + objC.Zone = zone.Fqdn + err = p.client.GetObject(objC, "", nil, &resC) if err != nil { return nil, fmt.Errorf("could not fetch CNAME records from zone '%s': %s", zone.Fqdn, err) } @@ -254,13 +245,10 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E arpaZone, err := transform.ReverseDomainName(zone.Fqdn) if err == nil { var resP []ibclient.RecordPTR - objP := ibclient.NewRecordPTR( - ibclient.RecordPTR{ - Zone: arpaZone, - View: p.view, - }, - ) - err = p.client.GetObject(objP, "", &resP) + objP := ibclient.NewEmptyRecordPTR() + objP.Zone = arpaZone + objP.View = p.view + err = p.client.GetObject(objP, "", nil, &resP) if err != nil { return nil, fmt.Errorf("could not fetch PTR records from zone '%s': %s", zone.Fqdn, err) } @@ -277,7 +265,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E View: p.view, }, ) - err = p.client.GetObject(objT, "", &resT) + err = p.client.GetObject(objT, "", nil, &resT) if err != nil { return nil, fmt.Errorf("could not fetch TXT records from zone '%s': %s", zone.Fqdn, err) } @@ -377,7 +365,7 @@ func (p *InfobloxProvider) zones() ([]ibclient.ZoneAuth, error) { View: p.view, }, ) - err := p.client.GetObject(obj, "", &res) + err := p.client.GetObject(obj, "", nil, &res) if err != nil { return nil, err @@ -466,12 +454,12 @@ func (p *InfobloxProvider) findReverseZone(zones []ibclient.ZoneAuth, name strin maxMask := 0 for i, zone := range zones { - _, net, err := net.ParseCIDR(zone.Fqdn) + _, rZoneNet, err := net.ParseCIDR(zone.Fqdn) if err != nil { logrus.WithError(err).Debugf("fqdn %s is no cidr", zone.Fqdn) } else { - if net.Contains(ip) { - _, mask := net.Mask.Size() + if rZoneNet.Contains(ip) { + _, mask := rZoneNet.Mask.Size() networks[mask] = &zones[i] if mask > maxMask { maxMask = mask @@ -486,15 +474,12 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ switch ep.RecordType { case endpoint.RecordTypeA: var res []ibclient.RecordA - obj := ibclient.NewRecordA( - ibclient.RecordA{ - Name: ep.DNSName, - Ipv4Addr: ep.Targets[targetIndex], - View: p.view, - }, - ) + obj := ibclient.NewEmptyRecordA() + obj.Name = ep.DNSName + obj.Ipv4Addr = ep.Targets[targetIndex] + obj.View = p.view if getObject { - err = p.client.GetObject(obj, "", &res) + err = p.client.GetObject(obj, "", nil, &res) if err != nil { return } @@ -505,15 +490,12 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ } case endpoint.RecordTypePTR: var res []ibclient.RecordPTR - obj := ibclient.NewRecordPTR( - ibclient.RecordPTR{ - PtrdName: ep.DNSName, - Ipv4Addr: ep.Targets[targetIndex], - View: p.view, - }, - ) + obj := ibclient.NewEmptyRecordPTR() + obj.PtrdName = ep.DNSName + obj.Ipv4Addr = ep.Targets[targetIndex] + obj.View = p.view if getObject { - err = p.client.GetObject(obj, "", &res) + err = p.client.GetObject(obj, "", nil, &res) if err != nil { return } @@ -524,15 +506,12 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ } case endpoint.RecordTypeCNAME: var res []ibclient.RecordCNAME - obj := ibclient.NewRecordCNAME( - ibclient.RecordCNAME{ - Name: ep.DNSName, - Canonical: ep.Targets[0], - View: p.view, - }, - ) + obj := ibclient.NewEmptyRecordCNAME() + obj.Name = ep.DNSName + obj.Canonical = ep.Targets[0] + obj.View = p.view if getObject { - err = p.client.GetObject(obj, "", &res) + err = p.client.GetObject(obj, "", nil, &res) if err != nil { return } @@ -556,7 +535,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ }, ) if getObject { - err = p.client.GetObject(obj, "", &res) + err = p.client.GetObject(obj, "", nil, &res) if err != nil { return } diff --git a/provider/infoblox/infoblox_test.go b/provider/infoblox/infoblox_test.go index 9a9a57d3d..9f8e08a51 100644 --- a/provider/infoblox/infoblox_test.go +++ b/provider/infoblox/infoblox_test.go @@ -24,7 +24,7 @@ import ( "strings" "testing" - ibclient "github.com/infobloxopen/infoblox-go-client" + ibclient "github.com/infobloxopen/infoblox-go-client/v2" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -113,7 +113,7 @@ func (client *mockIBConnector) CreateObject(obj ibclient.IBObject) (ref string, return ref, nil } -func (client *mockIBConnector) GetObject(obj ibclient.IBObject, ref string, res interface{}) (err error) { +func (client *mockIBConnector) GetObject(obj ibclient.IBObject, ref string, queryParams *ibclient.QueryParams, res interface{}) (err error) { switch obj.ObjectType() { case "record:a": var result []ibclient.RecordA @@ -208,12 +208,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro switch result[1] { case "record:a": var records []ibclient.RecordA - obj := ibclient.NewRecordA( - ibclient.RecordA{ - Name: result[2], - }, - ) - client.GetObject(obj, ref, &records) + obj := ibclient.NewEmptyRecordA() + obj.Name = result[2] + client.GetObject(obj, ref, nil, &records) for _, record := range records { client.deletedEndpoints = append( client.deletedEndpoints, @@ -226,12 +223,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro } case "record:cname": var records []ibclient.RecordCNAME - obj := ibclient.NewRecordCNAME( - ibclient.RecordCNAME{ - Name: result[2], - }, - ) - client.GetObject(obj, ref, &records) + obj := ibclient.NewEmptyRecordCNAME() + obj.Name = result[2] + client.GetObject(obj, ref, nil, &records) for _, record := range records { client.deletedEndpoints = append( client.deletedEndpoints, @@ -244,12 +238,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro } case "record:host": var records []ibclient.HostRecord - obj := ibclient.NewHostRecord( - ibclient.HostRecord{ - Name: result[2], - }, - ) - client.GetObject(obj, ref, &records) + obj := ibclient.NewEmptyHostRecord() + obj.Name = result[2] + client.GetObject(obj, ref, nil, &records) for _, record := range records { client.deletedEndpoints = append( client.deletedEndpoints, @@ -267,7 +258,7 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro Name: result[2], }, ) - client.GetObject(obj, ref, &records) + client.GetObject(obj, ref, nil, &records) for _, record := range records { client.deletedEndpoints = append( client.deletedEndpoints, @@ -280,12 +271,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro } case "record:ptr": var records []ibclient.RecordPTR - obj := ibclient.NewRecordPTR( - ibclient.RecordPTR{ - Name: result[2], - }, - ) - client.GetObject(obj, ref, &records) + obj := ibclient.NewEmptyRecordPTR() + obj.Name = result[2] + client.GetObject(obj, ref, nil, &records) for _, record := range records { client.deletedEndpoints = append( client.deletedEndpoints, @@ -354,21 +342,17 @@ func createMockInfobloxObject(name, recordType, value string) ibclient.IBObject ref := fmt.Sprintf("record:%s/%s:%s/default", strings.ToLower(recordType), base64.StdEncoding.EncodeToString([]byte(name)), name) switch recordType { case endpoint.RecordTypeA: - return ibclient.NewRecordA( - ibclient.RecordA{ - Ref: ref, - Name: name, - Ipv4Addr: value, - }, - ) + obj := ibclient.NewEmptyRecordA() + obj.Name = name + obj.Ref = ref + obj.Ipv4Addr = value + return obj case endpoint.RecordTypeCNAME: - return ibclient.NewRecordCNAME( - ibclient.RecordCNAME{ - Ref: ref, - Name: name, - Canonical: value, - }, - ) + obj := ibclient.NewEmptyRecordCNAME() + obj.Name = name + obj.Ref = ref + obj.Canonical = value + return obj case endpoint.RecordTypeTXT: return ibclient.NewRecordTXT( ibclient.RecordTXT{ @@ -378,26 +362,23 @@ func createMockInfobloxObject(name, recordType, value string) ibclient.IBObject }, ) case "HOST": - return ibclient.NewHostRecord( - ibclient.HostRecord{ - Ref: ref, - Name: name, - Ipv4Addrs: []ibclient.HostRecordIpv4Addr{ - { - Ipv4Addr: value, - }, - }, - }, - ) - case endpoint.RecordTypePTR: - return ibclient.NewRecordPTR( - ibclient.RecordPTR{ - Ref: ref, - PtrdName: name, + obj := ibclient.NewEmptyHostRecord() + obj.Name = name + obj.Ref = ref + obj.Ipv4Addrs = []ibclient.HostRecordIpv4Addr{ + { Ipv4Addr: value, }, - ) + } + return obj + case endpoint.RecordTypePTR: + obj := ibclient.NewEmptyRecordPTR() + obj.PtrdName = name + obj.Ref = ref + obj.Ipv4Addr = value + return obj } + return nil } @@ -435,8 +416,8 @@ func TestInfobloxRecords(t *testing.T) { }, } - provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) - actual, err := provider.Records(context.Background()) + providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) + actual, err := providerCfg.Records(context.Background()) if err != nil { t.Fatal(err) @@ -472,12 +453,12 @@ func TestInfobloxAdjustEndpoints(t *testing.T) { }, } - provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{""}), true, true, &client) - actual, err := provider.Records(context.Background()) + providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{""}), true, true, &client) + actual, err := providerCfg.Records(context.Background()) if err != nil { t.Fatal(err) } - provider.AdjustEndpoints(actual) + providerCfg.AdjustEndpoints(actual) expected := []*endpoint.Endpoint{ endpoint.NewEndpoint("example.com", endpoint.RecordTypeA, "123.123.123.122").WithProviderSpecific(providerSpecificInfobloxPtrRecord, "true"), @@ -501,8 +482,8 @@ func TestInfobloxRecordsReverse(t *testing.T) { }, } - provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"10.0.0.0/24"}), provider.NewZoneIDFilter([]string{""}), true, true, &client) - actual, err := provider.Records(context.Background()) + providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"10.0.0.0/24"}), provider.NewZoneIDFilter([]string{""}), true, true, &client) + actual, err := providerCfg.Records(context.Background()) if err != nil { t.Fatal(err) @@ -606,7 +587,7 @@ func testInfobloxApplyChangesInternal(t *testing.T, dryRun, createPTR bool, clie createMockInfobloxObject("oldcname.example.com", endpoint.RecordTypeCNAME, "other.com"), } - provider := newInfobloxProvider( + providerCfg := newInfobloxProvider( endpoint.NewDomainFilter([]string{""}), provider.NewZoneIDFilter([]string{""}), dryRun, @@ -658,7 +639,7 @@ func testInfobloxApplyChangesInternal(t *testing.T, dryRun, createPTR bool, clie Delete: deleteRecords, } - if err := provider.ApplyChanges(context.Background(), changes); err != nil { + if err := providerCfg.ApplyChanges(context.Background(), changes); err != nil { t.Fatal(err) } } @@ -674,18 +655,18 @@ func TestInfobloxZones(t *testing.T) { mockInfobloxObjects: &[]ibclient.IBObject{}, } - provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com", "1.2.3.0/24"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) - zones, _ := provider.zones() + providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com", "1.2.3.0/24"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) + zones, _ := providerCfg.zones() var emptyZoneAuth *ibclient.ZoneAuth - assert.Equal(t, provider.findZone(zones, "example.com").Fqdn, "example.com") - assert.Equal(t, provider.findZone(zones, "nomatch-example.com"), emptyZoneAuth) - assert.Equal(t, provider.findZone(zones, "nginx.example.com").Fqdn, "example.com") - assert.Equal(t, provider.findZone(zones, "lvl1-1.example.com").Fqdn, "lvl1-1.example.com") - assert.Equal(t, provider.findZone(zones, "lvl1-2.example.com").Fqdn, "example.com") - assert.Equal(t, provider.findZone(zones, "lvl2-1.lvl1-1.example.com").Fqdn, "lvl2-1.lvl1-1.example.com") - assert.Equal(t, provider.findZone(zones, "lvl2-2.lvl1-1.example.com").Fqdn, "lvl1-1.example.com") - assert.Equal(t, provider.findZone(zones, "lvl2-2.lvl1-2.example.com").Fqdn, "example.com") - assert.Equal(t, provider.findZone(zones, "1.2.3.0/24").Fqdn, "1.2.3.0/24") + assert.Equal(t, providerCfg.findZone(zones, "example.com").Fqdn, "example.com") + assert.Equal(t, providerCfg.findZone(zones, "nomatch-example.com"), emptyZoneAuth) + assert.Equal(t, providerCfg.findZone(zones, "nginx.example.com").Fqdn, "example.com") + assert.Equal(t, providerCfg.findZone(zones, "lvl1-1.example.com").Fqdn, "lvl1-1.example.com") + assert.Equal(t, providerCfg.findZone(zones, "lvl1-2.example.com").Fqdn, "example.com") + assert.Equal(t, providerCfg.findZone(zones, "lvl2-1.lvl1-1.example.com").Fqdn, "lvl2-1.lvl1-1.example.com") + assert.Equal(t, providerCfg.findZone(zones, "lvl2-2.lvl1-1.example.com").Fqdn, "lvl1-1.example.com") + assert.Equal(t, providerCfg.findZone(zones, "lvl2-2.lvl1-2.example.com").Fqdn, "example.com") + assert.Equal(t, providerCfg.findZone(zones, "1.2.3.0/24").Fqdn, "1.2.3.0/24") } func TestInfobloxReverseZones(t *testing.T) { @@ -698,13 +679,13 @@ func TestInfobloxReverseZones(t *testing.T) { mockInfobloxObjects: &[]ibclient.IBObject{}, } - provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com", "1.2.3.0/24", "10.0.0.0/8"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) - zones, _ := provider.zones() + providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com", "1.2.3.0/24", "10.0.0.0/8"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) + zones, _ := providerCfg.zones() var emptyZoneAuth *ibclient.ZoneAuth - assert.Equal(t, provider.findReverseZone(zones, "nomatch-example.com"), emptyZoneAuth) - assert.Equal(t, provider.findReverseZone(zones, "192.168.0.1"), emptyZoneAuth) - assert.Equal(t, provider.findReverseZone(zones, "1.2.3.4").Fqdn, "1.2.3.0/24") - assert.Equal(t, provider.findReverseZone(zones, "10.28.29.30").Fqdn, "10.0.0.0/8") + assert.Equal(t, providerCfg.findReverseZone(zones, "nomatch-example.com"), emptyZoneAuth) + assert.Equal(t, providerCfg.findReverseZone(zones, "192.168.0.1"), emptyZoneAuth) + assert.Equal(t, providerCfg.findReverseZone(zones, "1.2.3.4").Fqdn, "1.2.3.0/24") + assert.Equal(t, providerCfg.findReverseZone(zones, "10.28.29.30").Fqdn, "10.0.0.0/8") } func TestExtendedRequestFDQDRegExBuilder(t *testing.T) { @@ -721,14 +702,15 @@ func TestExtendedRequestFDQDRegExBuilder(t *testing.T) { obj := ibclient.NewZoneAuth(ibclient.ZoneAuth{}) - req, _ := requestBuilder.BuildRequest(ibclient.GET, obj, "", ibclient.QueryParams{}) + req, _ := requestBuilder.BuildRequest(ibclient.GET, obj, "", &ibclient.QueryParams{}) assert.True(t, req.URL.Query().Get("fqdn~") == "^staging.*test.com$") - req, _ = requestBuilder.BuildRequest(ibclient.CREATE, obj, "", ibclient.QueryParams{}) + req, _ = requestBuilder.BuildRequest(ibclient.CREATE, obj, "", &ibclient.QueryParams{}) assert.True(t, req.URL.Query().Get("fqdn~") == "") } + func TestExtendedRequestMaxResultsBuilder(t *testing.T) { hostConfig := ibclient.HostConfig{ Host: "localhost", @@ -741,13 +723,14 @@ func TestExtendedRequestMaxResultsBuilder(t *testing.T) { requestBuilder := NewExtendedRequestBuilder(54321, "") requestBuilder.Init(hostConfig) - obj := ibclient.NewRecordCNAME(ibclient.RecordCNAME{Zone: "foo.bar.com"}) + obj := ibclient.NewEmptyRecordCNAME() + obj.Zone = "foo.bar.com" - req, _ := requestBuilder.BuildRequest(ibclient.GET, obj, "", ibclient.QueryParams{}) + req, _ := requestBuilder.BuildRequest(ibclient.GET, obj, "", &ibclient.QueryParams{}) assert.True(t, req.URL.Query().Get("_max_results") == "54321") - req, _ = requestBuilder.BuildRequest(ibclient.CREATE, obj, "", ibclient.QueryParams{}) + req, _ = requestBuilder.BuildRequest(ibclient.CREATE, obj, "", &ibclient.QueryParams{}) assert.True(t, req.URL.Query().Get("_max_results") == "") } From cc28f95e4a15b6fa1df405312f8d3d01755379b2 Mon Sep 17 00:00:00 2001 From: Sergey Kudriavtsev Date: Thu, 31 Mar 2022 00:35:11 +0300 Subject: [PATCH 2/4] removing redundant dependency from go.mod --- go.mod | 1 - go.sum | 2 -- 2 files changed, 3 deletions(-) diff --git a/go.mod b/go.mod index 9e3f5d9dc..67261d09b 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,6 @@ require ( github.com/google/go-cmp v0.5.7 github.com/gophercloud/gophercloud v0.22.0 github.com/hooklift/gowsdl v0.5.0 - github.com/infobloxopen/infoblox-go-client v1.1.1 github.com/infobloxopen/infoblox-go-client/v2 v2.1.1 github.com/linki/instrumented_http v0.3.0 github.com/linode/linodego v0.32.2 diff --git a/go.sum b/go.sum index 8dde9586a..8497f839b 100644 --- a/go.sum +++ b/go.sum @@ -749,8 +749,6 @@ 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.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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.1 h1:NYnXOngwW4xMIgUz4bKJ1Ygsmq5K0OOdUEkuLlkR1Ag= github.com/infobloxopen/infoblox-go-client/v2 v2.1.1/go.mod h1:+lznx4ASBSUZ2i6qwlgyn0v3eKDxBHNU5aRJzghAFbw= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= From 63b7a0eeadaf4cae2db6825e88d83ca813a0790b Mon Sep 17 00:00:00 2001 From: Sergey Kudriavtsev Date: Thu, 14 Apr 2022 03:04:22 +0300 Subject: [PATCH 3/4] fix: avoiding to pass a nil instead of an empty QueryParams struct. --- provider/infoblox/infoblox.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/provider/infoblox/infoblox.go b/provider/infoblox/infoblox.go index 04058fc8f..d13739767 100644 --- a/provider/infoblox/infoblox.go +++ b/provider/infoblox/infoblox.go @@ -174,7 +174,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objA := ibclient.NewEmptyRecordA() objA.View = p.view objA.Zone = zone.Fqdn - err = p.client.GetObject(objA, "", nil, &resA) + err = p.client.GetObject(objA, "", ibclient.NewQueryParams(false, nil), &resA) if err != nil { return nil, fmt.Errorf("could not fetch A records from zone '%s': %s", zone.Fqdn, err) } @@ -207,7 +207,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objH := ibclient.NewEmptyHostRecord() objH.View = p.view objH.Zone = zone.Fqdn - err = p.client.GetObject(objH, "", nil, &resH) + err = p.client.GetObject(objH, "", ibclient.NewQueryParams(false, nil), &resH) if err != nil { return nil, fmt.Errorf("could not fetch host records from zone '%s': %s", zone.Fqdn, err) } @@ -229,7 +229,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objC := ibclient.NewEmptyRecordCNAME() objC.View = p.view objC.Zone = zone.Fqdn - err = p.client.GetObject(objC, "", nil, &resC) + err = p.client.GetObject(objC, "", ibclient.NewQueryParams(false, nil), &resC) if err != nil { return nil, fmt.Errorf("could not fetch CNAME records from zone '%s': %s", zone.Fqdn, err) } @@ -248,7 +248,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objP := ibclient.NewEmptyRecordPTR() objP.Zone = arpaZone objP.View = p.view - err = p.client.GetObject(objP, "", nil, &resP) + err = p.client.GetObject(objP, "", ibclient.NewQueryParams(false, nil), &resP) if err != nil { return nil, fmt.Errorf("could not fetch PTR records from zone '%s': %s", zone.Fqdn, err) } @@ -265,7 +265,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E View: p.view, }, ) - err = p.client.GetObject(objT, "", nil, &resT) + err = p.client.GetObject(objT, "", ibclient.NewQueryParams(false, nil), &resT) if err != nil { return nil, fmt.Errorf("could not fetch TXT records from zone '%s': %s", zone.Fqdn, err) } @@ -365,7 +365,7 @@ func (p *InfobloxProvider) zones() ([]ibclient.ZoneAuth, error) { View: p.view, }, ) - err := p.client.GetObject(obj, "", nil, &res) + err := p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) if err != nil { return nil, err @@ -479,7 +479,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ obj.Ipv4Addr = ep.Targets[targetIndex] obj.View = p.view if getObject { - err = p.client.GetObject(obj, "", nil, &res) + err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) if err != nil { return } @@ -495,7 +495,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ obj.Ipv4Addr = ep.Targets[targetIndex] obj.View = p.view if getObject { - err = p.client.GetObject(obj, "", nil, &res) + err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) if err != nil { return } @@ -511,7 +511,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ obj.Canonical = ep.Targets[0] obj.View = p.view if getObject { - err = p.client.GetObject(obj, "", nil, &res) + err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) if err != nil { return } @@ -535,7 +535,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ }, ) if getObject { - err = p.client.GetObject(obj, "", nil, &res) + err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) if err != nil { return } From 35ee85b213f8effbb85b90b4d95c9868f3b67daa Mon Sep 17 00:00:00 2001 From: Sergey Kudriavtsev Date: Thu, 14 Apr 2022 03:17:04 +0300 Subject: [PATCH 4/4] fixing 'not found' error problem when there is no records in an existing zone --- provider/infoblox/infoblox.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/provider/infoblox/infoblox.go b/provider/infoblox/infoblox.go index d13739767..7bc9192e4 100644 --- a/provider/infoblox/infoblox.go +++ b/provider/infoblox/infoblox.go @@ -40,6 +40,11 @@ const ( providerSpecificInfobloxPtrRecord = "infoblox-ptr-record-exists" ) +func isNotFoundError(err error) bool { + _, ok := err.(*ibclient.NotFoundError) + return ok +} + // InfobloxConfig clarifies the method signature type InfobloxConfig struct { DomainFilter endpoint.DomainFilter @@ -175,7 +180,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objA.View = p.view objA.Zone = zone.Fqdn err = p.client.GetObject(objA, "", ibclient.NewQueryParams(false, nil), &resA) - if err != nil { + if err != nil && !isNotFoundError(err) { return nil, fmt.Errorf("could not fetch A records from zone '%s': %s", zone.Fqdn, err) } for _, res := range resA { @@ -208,7 +213,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objH.View = p.view objH.Zone = zone.Fqdn err = p.client.GetObject(objH, "", ibclient.NewQueryParams(false, nil), &resH) - if err != nil { + if err != nil && !isNotFoundError(err) { return nil, fmt.Errorf("could not fetch host records from zone '%s': %s", zone.Fqdn, err) } for _, res := range resH { @@ -230,7 +235,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objC.View = p.view objC.Zone = zone.Fqdn err = p.client.GetObject(objC, "", ibclient.NewQueryParams(false, nil), &resC) - if err != nil { + if err != nil && !isNotFoundError(err) { return nil, fmt.Errorf("could not fetch CNAME records from zone '%s': %s", zone.Fqdn, err) } for _, res := range resC { @@ -249,7 +254,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E objP.Zone = arpaZone objP.View = p.view err = p.client.GetObject(objP, "", ibclient.NewQueryParams(false, nil), &resP) - if err != nil { + if err != nil && !isNotFoundError(err) { return nil, fmt.Errorf("could not fetch PTR records from zone '%s': %s", zone.Fqdn, err) } for _, res := range resP { @@ -266,7 +271,7 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E }, ) err = p.client.GetObject(objT, "", ibclient.NewQueryParams(false, nil), &resT) - if err != nil { + if err != nil && !isNotFoundError(err) { return nil, fmt.Errorf("could not fetch TXT records from zone '%s': %s", zone.Fqdn, err) } for _, res := range resT { @@ -366,8 +371,7 @@ func (p *InfobloxProvider) zones() ([]ibclient.ZoneAuth, error) { }, ) err := p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) - - if err != nil { + if err != nil && !isNotFoundError(err) { return nil, err } @@ -480,7 +484,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ obj.View = p.view if getObject { err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) - if err != nil { + if err != nil && !isNotFoundError(err) { return } } @@ -496,7 +500,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ obj.View = p.view if getObject { err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) - if err != nil { + if err != nil && !isNotFoundError(err) { return } } @@ -512,7 +516,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ obj.View = p.view if getObject { err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) - if err != nil { + if err != nil && !isNotFoundError(err) { return } } @@ -536,7 +540,7 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ ) if getObject { err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res) - if err != nil { + if err != nil && !isNotFoundError(err) { return } }