Skip to content

Commit bcd6e7f

Browse files
authored
Merge pull request #2670 from skudriavtsev/ib-client-v2
migration to infoblox-go-client/v2
2 parents bb635fb + 35ee85b commit bcd6e7f

File tree

4 files changed

+135
-165
lines changed

4 files changed

+135
-165
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ require (
2727
github.com/google/go-cmp v0.5.7
2828
github.com/gophercloud/gophercloud v0.22.0
2929
github.com/hooklift/gowsdl v0.5.0
30-
github.com/infobloxopen/infoblox-go-client v1.1.1
30+
github.com/infobloxopen/infoblox-go-client/v2 v2.1.1
3131
github.com/linki/instrumented_http v0.3.0
3232
github.com/linode/linodego v0.32.2
3333
github.com/maxatome/go-testdeep v1.11.0

go.sum

+6-2
Original file line numberDiff line numberDiff line change
@@ -751,8 +751,8 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
751751
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
752752
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
753753
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
754-
github.com/infobloxopen/infoblox-go-client v1.1.1 h1:728A6LbLjptj/7kZjHyIxQnm768PWHfGFm0HH8FnbtU=
755-
github.com/infobloxopen/infoblox-go-client v1.1.1/go.mod h1:BXiw7S2b9qJoM8MS40vfgCNB2NLHGusk1DtO16BD9zI=
754+
github.com/infobloxopen/infoblox-go-client/v2 v2.1.1 h1:NYnXOngwW4xMIgUz4bKJ1Ygsmq5K0OOdUEkuLlkR1Ag=
755+
github.com/infobloxopen/infoblox-go-client/v2 v2.1.1/go.mod h1:+lznx4ASBSUZ2i6qwlgyn0v3eKDxBHNU5aRJzghAFbw=
756756
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
757757
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
758758
github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=
@@ -841,6 +841,7 @@ github.com/linode/linodego v0.32.2/go.mod h1:BR0gVkCJffEdIGJSl6bHR80Ty+Uvg/2jkjm
841841
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
842842
github.com/lyft/protoc-gen-star v0.4.10/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94=
843843
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
844+
github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
844845
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
845846
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
846847
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
@@ -964,6 +965,7 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
964965
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
965966
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
966967
github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
968+
github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
967969
github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
968970
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
969971
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
@@ -976,6 +978,7 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
976978
github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
977979
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
978980
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
981+
github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
979982
github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
980983
github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
981984
github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE=
@@ -1125,6 +1128,7 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB
11251128
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
11261129
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
11271130
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
1131+
github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A=
11281132
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
11291133
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
11301134
github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=

provider/infoblox/infoblox.go

+56-73
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727
"strings"
2828

2929
transform "github.com/StackExchange/dnscontrol/pkg/transform"
30-
ibclient "github.com/infobloxopen/infoblox-go-client"
30+
ibclient "github.com/infobloxopen/infoblox-go-client/v2"
3131
"github.com/sirupsen/logrus"
3232

3333
"sigs.k8s.io/external-dns/endpoint"
@@ -40,6 +40,11 @@ const (
4040
providerSpecificInfobloxPtrRecord = "infoblox-ptr-record-exists"
4141
)
4242

43+
func isNotFoundError(err error) bool {
44+
_, ok := err.(*ibclient.NotFoundError)
45+
return ok
46+
}
47+
4348
// InfobloxConfig clarifies the method signature
4449
type InfobloxConfig struct {
4550
DomainFilter endpoint.DomainFilter
@@ -95,7 +100,7 @@ func NewExtendedRequestBuilder(maxResults int, fqdnRegEx string) *ExtendedReques
95100

96101
// BuildRequest prepares the api request. it uses BuildRequest of
97102
// WapiRequestBuilder and then add the _max_requests parameter
98-
func (mrb *ExtendedRequestBuilder) BuildRequest(t ibclient.RequestType, obj ibclient.IBObject, ref string, queryParams ibclient.QueryParams) (req *http.Request, err error) {
103+
func (mrb *ExtendedRequestBuilder) BuildRequest(t ibclient.RequestType, obj ibclient.IBObject, ref string, queryParams *ibclient.QueryParams) (req *http.Request, err error) {
99104
req, err = mrb.WapiRequestBuilder.BuildRequest(t, obj, ref, queryParams)
100105
if req.Method == "GET" {
101106
query := req.URL.Query()
@@ -147,7 +152,7 @@ func NewInfobloxProvider(infobloxConfig InfobloxConfig) (*InfobloxProvider, erro
147152
return nil, err
148153
}
149154

150-
provider := &InfobloxProvider{
155+
providerCfg := &InfobloxProvider{
151156
client: client,
152157
domainFilter: infobloxConfig.DomainFilter,
153158
zoneIDFilter: infobloxConfig.ZoneIDFilter,
@@ -158,7 +163,7 @@ func NewInfobloxProvider(infobloxConfig InfobloxConfig) (*InfobloxProvider, erro
158163
cacheDuration: infobloxConfig.CacheDuration,
159164
}
160165

161-
return provider, nil
166+
return providerCfg, nil
162167
}
163168

164169
// Records gets the current records.
@@ -171,14 +176,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
171176
for _, zone := range zones {
172177
logrus.Debugf("fetch records from zone '%s'", zone.Fqdn)
173178
var resA []ibclient.RecordA
174-
objA := ibclient.NewRecordA(
175-
ibclient.RecordA{
176-
Zone: zone.Fqdn,
177-
View: p.view,
178-
},
179-
)
180-
err = p.client.GetObject(objA, "", &resA)
181-
if err != nil {
179+
objA := ibclient.NewEmptyRecordA()
180+
objA.View = p.view
181+
objA.Zone = zone.Fqdn
182+
err = p.client.GetObject(objA, "", ibclient.NewQueryParams(false, nil), &resA)
183+
if err != nil && !isNotFoundError(err) {
182184
return nil, fmt.Errorf("could not fetch A records from zone '%s': %s", zone.Fqdn, err)
183185
}
184186
for _, res := range resA {
@@ -207,14 +209,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
207209

208210
// Include Host records since they should be treated synonymously with A records
209211
var resH []ibclient.HostRecord
210-
objH := ibclient.NewHostRecord(
211-
ibclient.HostRecord{
212-
Zone: zone.Fqdn,
213-
View: p.view,
214-
},
215-
)
216-
err = p.client.GetObject(objH, "", &resH)
217-
if err != nil {
212+
objH := ibclient.NewEmptyHostRecord()
213+
objH.View = p.view
214+
objH.Zone = zone.Fqdn
215+
err = p.client.GetObject(objH, "", ibclient.NewQueryParams(false, nil), &resH)
216+
if err != nil && !isNotFoundError(err) {
218217
return nil, fmt.Errorf("could not fetch host records from zone '%s': %s", zone.Fqdn, err)
219218
}
220219
for _, res := range resH {
@@ -232,14 +231,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
232231
}
233232

234233
var resC []ibclient.RecordCNAME
235-
objC := ibclient.NewRecordCNAME(
236-
ibclient.RecordCNAME{
237-
Zone: zone.Fqdn,
238-
View: p.view,
239-
},
240-
)
241-
err = p.client.GetObject(objC, "", &resC)
242-
if err != nil {
234+
objC := ibclient.NewEmptyRecordCNAME()
235+
objC.View = p.view
236+
objC.Zone = zone.Fqdn
237+
err = p.client.GetObject(objC, "", ibclient.NewQueryParams(false, nil), &resC)
238+
if err != nil && !isNotFoundError(err) {
243239
return nil, fmt.Errorf("could not fetch CNAME records from zone '%s': %s", zone.Fqdn, err)
244240
}
245241
for _, res := range resC {
@@ -254,14 +250,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
254250
arpaZone, err := transform.ReverseDomainName(zone.Fqdn)
255251
if err == nil {
256252
var resP []ibclient.RecordPTR
257-
objP := ibclient.NewRecordPTR(
258-
ibclient.RecordPTR{
259-
Zone: arpaZone,
260-
View: p.view,
261-
},
262-
)
263-
err = p.client.GetObject(objP, "", &resP)
264-
if err != nil {
253+
objP := ibclient.NewEmptyRecordPTR()
254+
objP.Zone = arpaZone
255+
objP.View = p.view
256+
err = p.client.GetObject(objP, "", ibclient.NewQueryParams(false, nil), &resP)
257+
if err != nil && !isNotFoundError(err) {
265258
return nil, fmt.Errorf("could not fetch PTR records from zone '%s': %s", zone.Fqdn, err)
266259
}
267260
for _, res := range resP {
@@ -277,8 +270,8 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
277270
View: p.view,
278271
},
279272
)
280-
err = p.client.GetObject(objT, "", &resT)
281-
if err != nil {
273+
err = p.client.GetObject(objT, "", ibclient.NewQueryParams(false, nil), &resT)
274+
if err != nil && !isNotFoundError(err) {
282275
return nil, fmt.Errorf("could not fetch TXT records from zone '%s': %s", zone.Fqdn, err)
283276
}
284277
for _, res := range resT {
@@ -377,9 +370,8 @@ func (p *InfobloxProvider) zones() ([]ibclient.ZoneAuth, error) {
377370
View: p.view,
378371
},
379372
)
380-
err := p.client.GetObject(obj, "", &res)
381-
382-
if err != nil {
373+
err := p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
374+
if err != nil && !isNotFoundError(err) {
383375
return nil, err
384376
}
385377

@@ -466,12 +458,12 @@ func (p *InfobloxProvider) findReverseZone(zones []ibclient.ZoneAuth, name strin
466458
maxMask := 0
467459

468460
for i, zone := range zones {
469-
_, net, err := net.ParseCIDR(zone.Fqdn)
461+
_, rZoneNet, err := net.ParseCIDR(zone.Fqdn)
470462
if err != nil {
471463
logrus.WithError(err).Debugf("fqdn %s is no cidr", zone.Fqdn)
472464
} else {
473-
if net.Contains(ip) {
474-
_, mask := net.Mask.Size()
465+
if rZoneNet.Contains(ip) {
466+
_, mask := rZoneNet.Mask.Size()
475467
networks[mask] = &zones[i]
476468
if mask > maxMask {
477469
maxMask = mask
@@ -486,16 +478,13 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
486478
switch ep.RecordType {
487479
case endpoint.RecordTypeA:
488480
var res []ibclient.RecordA
489-
obj := ibclient.NewRecordA(
490-
ibclient.RecordA{
491-
Name: ep.DNSName,
492-
Ipv4Addr: ep.Targets[targetIndex],
493-
View: p.view,
494-
},
495-
)
481+
obj := ibclient.NewEmptyRecordA()
482+
obj.Name = ep.DNSName
483+
obj.Ipv4Addr = ep.Targets[targetIndex]
484+
obj.View = p.view
496485
if getObject {
497-
err = p.client.GetObject(obj, "", &res)
498-
if err != nil {
486+
err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
487+
if err != nil && !isNotFoundError(err) {
499488
return
500489
}
501490
}
@@ -505,16 +494,13 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
505494
}
506495
case endpoint.RecordTypePTR:
507496
var res []ibclient.RecordPTR
508-
obj := ibclient.NewRecordPTR(
509-
ibclient.RecordPTR{
510-
PtrdName: ep.DNSName,
511-
Ipv4Addr: ep.Targets[targetIndex],
512-
View: p.view,
513-
},
514-
)
497+
obj := ibclient.NewEmptyRecordPTR()
498+
obj.PtrdName = ep.DNSName
499+
obj.Ipv4Addr = ep.Targets[targetIndex]
500+
obj.View = p.view
515501
if getObject {
516-
err = p.client.GetObject(obj, "", &res)
517-
if err != nil {
502+
err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
503+
if err != nil && !isNotFoundError(err) {
518504
return
519505
}
520506
}
@@ -524,16 +510,13 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
524510
}
525511
case endpoint.RecordTypeCNAME:
526512
var res []ibclient.RecordCNAME
527-
obj := ibclient.NewRecordCNAME(
528-
ibclient.RecordCNAME{
529-
Name: ep.DNSName,
530-
Canonical: ep.Targets[0],
531-
View: p.view,
532-
},
533-
)
513+
obj := ibclient.NewEmptyRecordCNAME()
514+
obj.Name = ep.DNSName
515+
obj.Canonical = ep.Targets[0]
516+
obj.View = p.view
534517
if getObject {
535-
err = p.client.GetObject(obj, "", &res)
536-
if err != nil {
518+
err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
519+
if err != nil && !isNotFoundError(err) {
537520
return
538521
}
539522
}
@@ -556,8 +539,8 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
556539
},
557540
)
558541
if getObject {
559-
err = p.client.GetObject(obj, "", &res)
560-
if err != nil {
542+
err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
543+
if err != nil && !isNotFoundError(err) {
561544
return
562545
}
563546
}

0 commit comments

Comments
 (0)