Merge pull request #2670 from skudriavtsev/ib-client-v2

migration to infoblox-go-client/v2
This commit is contained in:
Kubernetes Prow Robot 2022-04-19 01:31:18 -07:00 committed by GitHub
commit bcd6e7f5e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 135 additions and 165 deletions

2
go.mod
View File

@ -27,7 +27,7 @@ require (
github.com/google/go-cmp v0.5.7 github.com/google/go-cmp v0.5.7
github.com/gophercloud/gophercloud v0.22.0 github.com/gophercloud/gophercloud v0.22.0
github.com/hooklift/gowsdl v0.5.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/linki/instrumented_http v0.3.0
github.com/linode/linodego v0.32.2 github.com/linode/linodego v0.32.2
github.com/maxatome/go-testdeep v1.11.0 github.com/maxatome/go-testdeep v1.11.0

8
go.sum
View File

@ -751,8 +751,8 @@ 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/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 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/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/v2 v2.1.1 h1:NYnXOngwW4xMIgUz4bKJ1Ygsmq5K0OOdUEkuLlkR1Ag=
github.com/infobloxopen/infoblox-go-client v1.1.1/go.mod h1:BXiw7S2b9qJoM8MS40vfgCNB2NLHGusk1DtO16BD9zI= 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 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= 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= 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
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= 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-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/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.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1/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= 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+
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= 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.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.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.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.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= 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
github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= 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.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.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.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.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= 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
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= 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.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 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 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=

View File

@ -27,7 +27,7 @@ import (
"strings" "strings"
transform "github.com/StackExchange/dnscontrol/pkg/transform" 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" "github.com/sirupsen/logrus"
"sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/endpoint"
@ -40,6 +40,11 @@ const (
providerSpecificInfobloxPtrRecord = "infoblox-ptr-record-exists" providerSpecificInfobloxPtrRecord = "infoblox-ptr-record-exists"
) )
func isNotFoundError(err error) bool {
_, ok := err.(*ibclient.NotFoundError)
return ok
}
// InfobloxConfig clarifies the method signature // InfobloxConfig clarifies the method signature
type InfobloxConfig struct { type InfobloxConfig struct {
DomainFilter endpoint.DomainFilter DomainFilter endpoint.DomainFilter
@ -95,7 +100,7 @@ func NewExtendedRequestBuilder(maxResults int, fqdnRegEx string) *ExtendedReques
// BuildRequest prepares the api request. it uses BuildRequest of // BuildRequest prepares the api request. it uses BuildRequest of
// WapiRequestBuilder and then add the _max_requests parameter // 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) req, err = mrb.WapiRequestBuilder.BuildRequest(t, obj, ref, queryParams)
if req.Method == "GET" { if req.Method == "GET" {
query := req.URL.Query() query := req.URL.Query()
@ -147,7 +152,7 @@ func NewInfobloxProvider(infobloxConfig InfobloxConfig) (*InfobloxProvider, erro
return nil, err return nil, err
} }
provider := &InfobloxProvider{ providerCfg := &InfobloxProvider{
client: client, client: client,
domainFilter: infobloxConfig.DomainFilter, domainFilter: infobloxConfig.DomainFilter,
zoneIDFilter: infobloxConfig.ZoneIDFilter, zoneIDFilter: infobloxConfig.ZoneIDFilter,
@ -158,7 +163,7 @@ func NewInfobloxProvider(infobloxConfig InfobloxConfig) (*InfobloxProvider, erro
cacheDuration: infobloxConfig.CacheDuration, cacheDuration: infobloxConfig.CacheDuration,
} }
return provider, nil return providerCfg, nil
} }
// Records gets the current records. // Records gets the current records.
@ -171,14 +176,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
for _, zone := range zones { for _, zone := range zones {
logrus.Debugf("fetch records from zone '%s'", zone.Fqdn) logrus.Debugf("fetch records from zone '%s'", zone.Fqdn)
var resA []ibclient.RecordA var resA []ibclient.RecordA
objA := ibclient.NewRecordA( objA := ibclient.NewEmptyRecordA()
ibclient.RecordA{ objA.View = p.view
Zone: zone.Fqdn, objA.Zone = zone.Fqdn
View: p.view, err = p.client.GetObject(objA, "", ibclient.NewQueryParams(false, nil), &resA)
}, if err != nil && !isNotFoundError(err) {
)
err = p.client.GetObject(objA, "", &resA)
if err != nil {
return nil, fmt.Errorf("could not fetch A records from zone '%s': %s", zone.Fqdn, err) return nil, fmt.Errorf("could not fetch A records from zone '%s': %s", zone.Fqdn, err)
} }
for _, res := range resA { for _, res := range resA {
@ -207,14 +209,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
// Include Host records since they should be treated synonymously with A records // Include Host records since they should be treated synonymously with A records
var resH []ibclient.HostRecord var resH []ibclient.HostRecord
objH := ibclient.NewHostRecord( objH := ibclient.NewEmptyHostRecord()
ibclient.HostRecord{ objH.View = p.view
Zone: zone.Fqdn, objH.Zone = zone.Fqdn
View: p.view, err = p.client.GetObject(objH, "", ibclient.NewQueryParams(false, nil), &resH)
}, if err != nil && !isNotFoundError(err) {
)
err = p.client.GetObject(objH, "", &resH)
if err != nil {
return nil, fmt.Errorf("could not fetch host records from zone '%s': %s", zone.Fqdn, err) return nil, fmt.Errorf("could not fetch host records from zone '%s': %s", zone.Fqdn, err)
} }
for _, res := range resH { for _, res := range resH {
@ -232,14 +231,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
} }
var resC []ibclient.RecordCNAME var resC []ibclient.RecordCNAME
objC := ibclient.NewRecordCNAME( objC := ibclient.NewEmptyRecordCNAME()
ibclient.RecordCNAME{ objC.View = p.view
Zone: zone.Fqdn, objC.Zone = zone.Fqdn
View: p.view, err = p.client.GetObject(objC, "", ibclient.NewQueryParams(false, nil), &resC)
}, if err != nil && !isNotFoundError(err) {
)
err = p.client.GetObject(objC, "", &resC)
if err != nil {
return nil, fmt.Errorf("could not fetch CNAME records from zone '%s': %s", zone.Fqdn, err) return nil, fmt.Errorf("could not fetch CNAME records from zone '%s': %s", zone.Fqdn, err)
} }
for _, res := range resC { for _, res := range resC {
@ -254,14 +250,11 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
arpaZone, err := transform.ReverseDomainName(zone.Fqdn) arpaZone, err := transform.ReverseDomainName(zone.Fqdn)
if err == nil { if err == nil {
var resP []ibclient.RecordPTR var resP []ibclient.RecordPTR
objP := ibclient.NewRecordPTR( objP := ibclient.NewEmptyRecordPTR()
ibclient.RecordPTR{ objP.Zone = arpaZone
Zone: arpaZone, objP.View = p.view
View: p.view, err = p.client.GetObject(objP, "", ibclient.NewQueryParams(false, nil), &resP)
}, if err != nil && !isNotFoundError(err) {
)
err = p.client.GetObject(objP, "", &resP)
if err != nil {
return nil, fmt.Errorf("could not fetch PTR records from zone '%s': %s", zone.Fqdn, err) return nil, fmt.Errorf("could not fetch PTR records from zone '%s': %s", zone.Fqdn, err)
} }
for _, res := range resP { for _, res := range resP {
@ -277,8 +270,8 @@ func (p *InfobloxProvider) Records(ctx context.Context) (endpoints []*endpoint.E
View: p.view, View: p.view,
}, },
) )
err = p.client.GetObject(objT, "", &resT) 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) return nil, fmt.Errorf("could not fetch TXT records from zone '%s': %s", zone.Fqdn, err)
} }
for _, res := range resT { for _, res := range resT {
@ -377,9 +370,8 @@ func (p *InfobloxProvider) zones() ([]ibclient.ZoneAuth, error) {
View: p.view, View: p.view,
}, },
) )
err := p.client.GetObject(obj, "", &res) err := p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
if err != nil && !isNotFoundError(err) {
if err != nil {
return nil, err return nil, err
} }
@ -466,12 +458,12 @@ func (p *InfobloxProvider) findReverseZone(zones []ibclient.ZoneAuth, name strin
maxMask := 0 maxMask := 0
for i, zone := range zones { for i, zone := range zones {
_, net, err := net.ParseCIDR(zone.Fqdn) _, rZoneNet, err := net.ParseCIDR(zone.Fqdn)
if err != nil { if err != nil {
logrus.WithError(err).Debugf("fqdn %s is no cidr", zone.Fqdn) logrus.WithError(err).Debugf("fqdn %s is no cidr", zone.Fqdn)
} else { } else {
if net.Contains(ip) { if rZoneNet.Contains(ip) {
_, mask := net.Mask.Size() _, mask := rZoneNet.Mask.Size()
networks[mask] = &zones[i] networks[mask] = &zones[i]
if mask > maxMask { if mask > maxMask {
maxMask = mask maxMask = mask
@ -486,16 +478,13 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
switch ep.RecordType { switch ep.RecordType {
case endpoint.RecordTypeA: case endpoint.RecordTypeA:
var res []ibclient.RecordA var res []ibclient.RecordA
obj := ibclient.NewRecordA( obj := ibclient.NewEmptyRecordA()
ibclient.RecordA{ obj.Name = ep.DNSName
Name: ep.DNSName, obj.Ipv4Addr = ep.Targets[targetIndex]
Ipv4Addr: ep.Targets[targetIndex], obj.View = p.view
View: p.view,
},
)
if getObject { if getObject {
err = p.client.GetObject(obj, "", &res) err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
if err != nil { if err != nil && !isNotFoundError(err) {
return return
} }
} }
@ -505,16 +494,13 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
} }
case endpoint.RecordTypePTR: case endpoint.RecordTypePTR:
var res []ibclient.RecordPTR var res []ibclient.RecordPTR
obj := ibclient.NewRecordPTR( obj := ibclient.NewEmptyRecordPTR()
ibclient.RecordPTR{ obj.PtrdName = ep.DNSName
PtrdName: ep.DNSName, obj.Ipv4Addr = ep.Targets[targetIndex]
Ipv4Addr: ep.Targets[targetIndex], obj.View = p.view
View: p.view,
},
)
if getObject { if getObject {
err = p.client.GetObject(obj, "", &res) err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
if err != nil { if err != nil && !isNotFoundError(err) {
return return
} }
} }
@ -524,16 +510,13 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
} }
case endpoint.RecordTypeCNAME: case endpoint.RecordTypeCNAME:
var res []ibclient.RecordCNAME var res []ibclient.RecordCNAME
obj := ibclient.NewRecordCNAME( obj := ibclient.NewEmptyRecordCNAME()
ibclient.RecordCNAME{ obj.Name = ep.DNSName
Name: ep.DNSName, obj.Canonical = ep.Targets[0]
Canonical: ep.Targets[0], obj.View = p.view
View: p.view,
},
)
if getObject { if getObject {
err = p.client.GetObject(obj, "", &res) err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
if err != nil { if err != nil && !isNotFoundError(err) {
return return
} }
} }
@ -556,8 +539,8 @@ func (p *InfobloxProvider) recordSet(ep *endpoint.Endpoint, getObject bool, targ
}, },
) )
if getObject { if getObject {
err = p.client.GetObject(obj, "", &res) err = p.client.GetObject(obj, "", ibclient.NewQueryParams(false, nil), &res)
if err != nil { if err != nil && !isNotFoundError(err) {
return return
} }
} }

View File

@ -24,7 +24,7 @@ import (
"strings" "strings"
"testing" "testing"
ibclient "github.com/infobloxopen/infoblox-go-client" ibclient "github.com/infobloxopen/infoblox-go-client/v2"
"github.com/miekg/dns" "github.com/miekg/dns"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -113,7 +113,7 @@ func (client *mockIBConnector) CreateObject(obj ibclient.IBObject) (ref string,
return ref, nil 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() { switch obj.ObjectType() {
case "record:a": case "record:a":
var result []ibclient.RecordA var result []ibclient.RecordA
@ -208,12 +208,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro
switch result[1] { switch result[1] {
case "record:a": case "record:a":
var records []ibclient.RecordA var records []ibclient.RecordA
obj := ibclient.NewRecordA( obj := ibclient.NewEmptyRecordA()
ibclient.RecordA{ obj.Name = result[2]
Name: result[2], client.GetObject(obj, ref, nil, &records)
},
)
client.GetObject(obj, ref, &records)
for _, record := range records { for _, record := range records {
client.deletedEndpoints = append( client.deletedEndpoints = append(
client.deletedEndpoints, client.deletedEndpoints,
@ -226,12 +223,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro
} }
case "record:cname": case "record:cname":
var records []ibclient.RecordCNAME var records []ibclient.RecordCNAME
obj := ibclient.NewRecordCNAME( obj := ibclient.NewEmptyRecordCNAME()
ibclient.RecordCNAME{ obj.Name = result[2]
Name: result[2], client.GetObject(obj, ref, nil, &records)
},
)
client.GetObject(obj, ref, &records)
for _, record := range records { for _, record := range records {
client.deletedEndpoints = append( client.deletedEndpoints = append(
client.deletedEndpoints, client.deletedEndpoints,
@ -244,12 +238,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro
} }
case "record:host": case "record:host":
var records []ibclient.HostRecord var records []ibclient.HostRecord
obj := ibclient.NewHostRecord( obj := ibclient.NewEmptyHostRecord()
ibclient.HostRecord{ obj.Name = result[2]
Name: result[2], client.GetObject(obj, ref, nil, &records)
},
)
client.GetObject(obj, ref, &records)
for _, record := range records { for _, record := range records {
client.deletedEndpoints = append( client.deletedEndpoints = append(
client.deletedEndpoints, client.deletedEndpoints,
@ -267,7 +258,7 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro
Name: result[2], Name: result[2],
}, },
) )
client.GetObject(obj, ref, &records) client.GetObject(obj, ref, nil, &records)
for _, record := range records { for _, record := range records {
client.deletedEndpoints = append( client.deletedEndpoints = append(
client.deletedEndpoints, client.deletedEndpoints,
@ -280,12 +271,9 @@ func (client *mockIBConnector) DeleteObject(ref string) (refRes string, err erro
} }
case "record:ptr": case "record:ptr":
var records []ibclient.RecordPTR var records []ibclient.RecordPTR
obj := ibclient.NewRecordPTR( obj := ibclient.NewEmptyRecordPTR()
ibclient.RecordPTR{ obj.Name = result[2]
Name: result[2], client.GetObject(obj, ref, nil, &records)
},
)
client.GetObject(obj, ref, &records)
for _, record := range records { for _, record := range records {
client.deletedEndpoints = append( client.deletedEndpoints = append(
client.deletedEndpoints, 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) ref := fmt.Sprintf("record:%s/%s:%s/default", strings.ToLower(recordType), base64.StdEncoding.EncodeToString([]byte(name)), name)
switch recordType { switch recordType {
case endpoint.RecordTypeA: case endpoint.RecordTypeA:
return ibclient.NewRecordA( obj := ibclient.NewEmptyRecordA()
ibclient.RecordA{ obj.Name = name
Ref: ref, obj.Ref = ref
Name: name, obj.Ipv4Addr = value
Ipv4Addr: value, return obj
},
)
case endpoint.RecordTypeCNAME: case endpoint.RecordTypeCNAME:
return ibclient.NewRecordCNAME( obj := ibclient.NewEmptyRecordCNAME()
ibclient.RecordCNAME{ obj.Name = name
Ref: ref, obj.Ref = ref
Name: name, obj.Canonical = value
Canonical: value, return obj
},
)
case endpoint.RecordTypeTXT: case endpoint.RecordTypeTXT:
return ibclient.NewRecordTXT( return ibclient.NewRecordTXT(
ibclient.RecordTXT{ ibclient.RecordTXT{
@ -378,26 +362,23 @@ func createMockInfobloxObject(name, recordType, value string) ibclient.IBObject
}, },
) )
case "HOST": case "HOST":
return ibclient.NewHostRecord( obj := ibclient.NewEmptyHostRecord()
ibclient.HostRecord{ obj.Name = name
Ref: ref, obj.Ref = ref
Name: name, obj.Ipv4Addrs = []ibclient.HostRecordIpv4Addr{
Ipv4Addrs: []ibclient.HostRecordIpv4Addr{ {
{
Ipv4Addr: value,
},
},
},
)
case endpoint.RecordTypePTR:
return ibclient.NewRecordPTR(
ibclient.RecordPTR{
Ref: ref,
PtrdName: name,
Ipv4Addr: value, Ipv4Addr: value,
}, },
) }
return obj
case endpoint.RecordTypePTR:
obj := ibclient.NewEmptyRecordPTR()
obj.PtrdName = name
obj.Ref = ref
obj.Ipv4Addr = value
return obj
} }
return nil return nil
} }
@ -435,8 +416,8 @@ func TestInfobloxRecords(t *testing.T) {
}, },
} }
provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{""}), true, false, &client)
actual, err := provider.Records(context.Background()) actual, err := providerCfg.Records(context.Background())
if err != nil { if err != nil {
t.Fatal(err) 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) providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{""}), true, true, &client)
actual, err := provider.Records(context.Background()) actual, err := providerCfg.Records(context.Background())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
provider.AdjustEndpoints(actual) providerCfg.AdjustEndpoints(actual)
expected := []*endpoint.Endpoint{ expected := []*endpoint.Endpoint{
endpoint.NewEndpoint("example.com", endpoint.RecordTypeA, "123.123.123.122").WithProviderSpecific(providerSpecificInfobloxPtrRecord, "true"), 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) providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"10.0.0.0/24"}), provider.NewZoneIDFilter([]string{""}), true, true, &client)
actual, err := provider.Records(context.Background()) actual, err := providerCfg.Records(context.Background())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -606,7 +587,7 @@ func testInfobloxApplyChangesInternal(t *testing.T, dryRun, createPTR bool, clie
createMockInfobloxObject("oldcname.example.com", endpoint.RecordTypeCNAME, "other.com"), createMockInfobloxObject("oldcname.example.com", endpoint.RecordTypeCNAME, "other.com"),
} }
provider := newInfobloxProvider( providerCfg := newInfobloxProvider(
endpoint.NewDomainFilter([]string{""}), endpoint.NewDomainFilter([]string{""}),
provider.NewZoneIDFilter([]string{""}), provider.NewZoneIDFilter([]string{""}),
dryRun, dryRun,
@ -658,7 +639,7 @@ func testInfobloxApplyChangesInternal(t *testing.T, dryRun, createPTR bool, clie
Delete: deleteRecords, Delete: deleteRecords,
} }
if err := provider.ApplyChanges(context.Background(), changes); err != nil { if err := providerCfg.ApplyChanges(context.Background(), changes); err != nil {
t.Fatal(err) t.Fatal(err)
} }
} }
@ -674,18 +655,18 @@ func TestInfobloxZones(t *testing.T) {
mockInfobloxObjects: &[]ibclient.IBObject{}, mockInfobloxObjects: &[]ibclient.IBObject{},
} }
provider := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com", "1.2.3.0/24"}), provider.NewZoneIDFilter([]string{""}), true, false, &client) providerCfg := newInfobloxProvider(endpoint.NewDomainFilter([]string{"example.com", "1.2.3.0/24"}), provider.NewZoneIDFilter([]string{""}), true, false, &client)
zones, _ := provider.zones() zones, _ := providerCfg.zones()
var emptyZoneAuth *ibclient.ZoneAuth var emptyZoneAuth *ibclient.ZoneAuth
assert.Equal(t, provider.findZone(zones, "example.com").Fqdn, "example.com") assert.Equal(t, providerCfg.findZone(zones, "example.com").Fqdn, "example.com")
assert.Equal(t, provider.findZone(zones, "nomatch-example.com"), emptyZoneAuth) assert.Equal(t, providerCfg.findZone(zones, "nomatch-example.com"), emptyZoneAuth)
assert.Equal(t, provider.findZone(zones, "nginx.example.com").Fqdn, "example.com") assert.Equal(t, providerCfg.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, providerCfg.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, providerCfg.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, providerCfg.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, providerCfg.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, providerCfg.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, "1.2.3.0/24").Fqdn, "1.2.3.0/24")
} }
func TestInfobloxReverseZones(t *testing.T) { func TestInfobloxReverseZones(t *testing.T) {
@ -698,13 +679,13 @@ func TestInfobloxReverseZones(t *testing.T) {
mockInfobloxObjects: &[]ibclient.IBObject{}, 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) providerCfg := 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() zones, _ := providerCfg.zones()
var emptyZoneAuth *ibclient.ZoneAuth var emptyZoneAuth *ibclient.ZoneAuth
assert.Equal(t, provider.findReverseZone(zones, "nomatch-example.com"), emptyZoneAuth) assert.Equal(t, providerCfg.findReverseZone(zones, "nomatch-example.com"), emptyZoneAuth)
assert.Equal(t, provider.findReverseZone(zones, "192.168.0.1"), emptyZoneAuth) assert.Equal(t, providerCfg.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, providerCfg.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, "10.28.29.30").Fqdn, "10.0.0.0/8")
} }
func TestExtendedRequestFDQDRegExBuilder(t *testing.T) { func TestExtendedRequestFDQDRegExBuilder(t *testing.T) {
@ -721,14 +702,15 @@ func TestExtendedRequestFDQDRegExBuilder(t *testing.T) {
obj := ibclient.NewZoneAuth(ibclient.ZoneAuth{}) 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$") 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~") == "") assert.True(t, req.URL.Query().Get("fqdn~") == "")
} }
func TestExtendedRequestMaxResultsBuilder(t *testing.T) { func TestExtendedRequestMaxResultsBuilder(t *testing.T) {
hostConfig := ibclient.HostConfig{ hostConfig := ibclient.HostConfig{
Host: "localhost", Host: "localhost",
@ -741,13 +723,14 @@ func TestExtendedRequestMaxResultsBuilder(t *testing.T) {
requestBuilder := NewExtendedRequestBuilder(54321, "") requestBuilder := NewExtendedRequestBuilder(54321, "")
requestBuilder.Init(hostConfig) 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") 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") == "") assert.True(t, req.URL.Query().Get("_max_results") == "")
} }