mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-05 17:16:59 +02:00
gofumpt
This commit is contained in:
parent
480e7c0041
commit
f6392be41e
@ -31,7 +31,7 @@ func removeLinkPrefixInIndex() {
|
|||||||
updatedContent := strings.ReplaceAll(string(content), "](./docs/", "](")
|
updatedContent := strings.ReplaceAll(string(content), "](./docs/", "](")
|
||||||
updatedContent = strings.ReplaceAll(updatedContent, "](docs/", "](")
|
updatedContent = strings.ReplaceAll(updatedContent, "](docs/", "](")
|
||||||
|
|
||||||
f, err := os.OpenFile("./docs/index.md", os.O_RDWR, 0644)
|
f, err := os.OpenFile("./docs/index.md", os.O_RDWR, 0o644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Could not open index.md file to update content. Original error: %s", err)
|
log.Fatalf("Could not open index.md file to update content. Original error: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
// ErrInvalidHeritage is returned when heritage was not found, or different heritage is found
|
||||||
// ErrInvalidHeritage is returned when heritage was not found, or different heritage is found
|
var ErrInvalidHeritage = errors.New("heritage is unknown or not found")
|
||||||
ErrInvalidHeritage = errors.New("heritage is unknown or not found")
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
heritage = "external-dns"
|
heritage = "external-dns"
|
||||||
|
@ -32,7 +32,7 @@ type LabelsSuite struct {
|
|||||||
barTextAsMap Labels
|
barTextAsMap Labels
|
||||||
noHeritageText string
|
noHeritageText string
|
||||||
wrongHeritageText string
|
wrongHeritageText string
|
||||||
multipleHeritageText string //considered invalid
|
multipleHeritageText string // considered invalid
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *LabelsSuite) SetupTest() {
|
func (suite *LabelsSuite) SetupTest() {
|
||||||
@ -48,7 +48,7 @@ func (suite *LabelsSuite) SetupTest() {
|
|||||||
"resource": "bar-resource",
|
"resource": "bar-resource",
|
||||||
"new-key": "bar-new-key",
|
"new-key": "bar-new-key",
|
||||||
}
|
}
|
||||||
suite.barText = "heritage=external-dns,,external-dns/owner=bar-owner,external-dns/resource=bar-resource,external-dns/new-key=bar-new-key,random=stuff,no-equal-sign,," //also has some random gibberish
|
suite.barText = "heritage=external-dns,,external-dns/owner=bar-owner,external-dns/resource=bar-resource,external-dns/new-key=bar-new-key,random=stuff,no-equal-sign,," // also has some random gibberish
|
||||||
|
|
||||||
suite.noHeritageText = "external-dns/owner=random-owner"
|
suite.noHeritageText = "external-dns/owner=random-owner"
|
||||||
suite.wrongHeritageText = "heritage=mate,external-dns/owner=random-owner"
|
suite.wrongHeritageText = "heritage=mate,external-dns/owner=random-owner"
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
//go:build !ignore_autogenerated
|
||||||
// +build !ignore_autogenerated
|
// +build !ignore_autogenerated
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -37,10 +37,8 @@ const (
|
|||||||
passwordMask = "******"
|
passwordMask = "******"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
// Version is the current version of the app, generated at build time
|
||||||
// Version is the current version of the app, generated at build time
|
var Version = "unknown"
|
||||||
Version = "unknown"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Config is a project-wide configuration
|
// Config is a project-wide configuration
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
@ -168,7 +168,7 @@ func TestValidateGoodRfc2136Config(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateBadRfc2136GssTsigConfig(t *testing.T) {
|
func TestValidateBadRfc2136GssTsigConfig(t *testing.T) {
|
||||||
var invalidRfc2136GssTsigConfigs = []*externaldns.Config{
|
invalidRfc2136GssTsigConfigs := []*externaldns.Config{
|
||||||
{
|
{
|
||||||
LogFormat: "json",
|
LogFormat: "json",
|
||||||
Sources: []string{"test-source"},
|
Sources: []string{"test-source"},
|
||||||
@ -258,7 +258,7 @@ func TestValidateBadRfc2136GssTsigConfig(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateGoodRfc2136GssTsigConfig(t *testing.T) {
|
func TestValidateGoodRfc2136GssTsigConfig(t *testing.T) {
|
||||||
var validRfc2136GssTsigConfigs = []*externaldns.Config{
|
validRfc2136GssTsigConfigs := []*externaldns.Config{
|
||||||
{
|
{
|
||||||
LogFormat: "json",
|
LogFormat: "json",
|
||||||
Sources: []string{"test-source"},
|
Sources: []string{"test-source"},
|
||||||
|
@ -84,7 +84,7 @@ func (suite *ResolverSuite) SetupTest() {
|
|||||||
endpoint.ResourceLabelKey: "ingress/default/bar-127",
|
endpoint.ResourceLabelKey: "ingress/default/bar-127",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
suite.bar127AAnother = &endpoint.Endpoint{ //TODO: remove this once we move to multiple targets under same endpoint
|
suite.bar127AAnother = &endpoint.Endpoint{ // TODO: remove this once we move to multiple targets under same endpoint
|
||||||
DNSName: "bar",
|
DNSName: "bar",
|
||||||
Targets: endpoint.Targets{"8.8.8.8"},
|
Targets: endpoint.Targets{"8.8.8.8"},
|
||||||
RecordType: "A",
|
RecordType: "A",
|
||||||
@ -113,7 +113,7 @@ func (suite *ResolverSuite) TestStrictResolver() {
|
|||||||
suite.Equal(suite.fooA5, suite.perResource.ResolveCreate([]*endpoint.Endpoint{suite.fooA5, suite.fooV1Cname}), "should pick min one")
|
suite.Equal(suite.fooA5, suite.perResource.ResolveCreate([]*endpoint.Endpoint{suite.fooA5, suite.fooV1Cname}), "should pick min one")
|
||||||
suite.Equal(suite.fooV1Cname, suite.perResource.ResolveCreate([]*endpoint.Endpoint{suite.fooV2Cname, suite.fooV1Cname}), "should pick min one")
|
suite.Equal(suite.fooV1Cname, suite.perResource.ResolveCreate([]*endpoint.Endpoint{suite.fooV2Cname, suite.fooV1Cname}), "should pick min one")
|
||||||
|
|
||||||
//test that perResource resolver preserves resource if it still exists
|
// test that perResource resolver preserves resource if it still exists
|
||||||
suite.Equal(suite.bar127AAnother, suite.perResource.ResolveUpdate(suite.bar127A, []*endpoint.Endpoint{suite.bar127AAnother, suite.bar127A}), "should pick min for update when same resource endpoint occurs multiple times (remove after multiple-target support") // TODO:remove this test
|
suite.Equal(suite.bar127AAnother, suite.perResource.ResolveUpdate(suite.bar127A, []*endpoint.Endpoint{suite.bar127AAnother, suite.bar127A}), "should pick min for update when same resource endpoint occurs multiple times (remove after multiple-target support") // TODO:remove this test
|
||||||
suite.Equal(suite.bar127A, suite.perResource.ResolveUpdate(suite.bar127A, []*endpoint.Endpoint{suite.bar192A, suite.bar127A}), "should pick existing resource")
|
suite.Equal(suite.bar127A, suite.perResource.ResolveUpdate(suite.bar127A, []*endpoint.Endpoint{suite.bar192A, suite.bar127A}), "should pick existing resource")
|
||||||
suite.Equal(suite.fooV2Cname, suite.perResource.ResolveUpdate(suite.fooV2Cname, []*endpoint.Endpoint{suite.fooV2Cname, suite.fooV2CnameDuplicate}), "should pick existing resource even if targets are same")
|
suite.Equal(suite.fooV2Cname, suite.perResource.ResolveUpdate(suite.fooV2Cname, []*endpoint.Endpoint{suite.fooV2Cname, suite.fooV2CnameDuplicate}), "should pick existing resource even if targets are same")
|
||||||
|
@ -82,7 +82,7 @@ type planTable struct {
|
|||||||
resolver ConflictResolver
|
resolver ConflictResolver
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPlanTable() planTable { //TODO: make resolver configurable
|
func newPlanTable() planTable { // TODO: make resolver configurable
|
||||||
return planTable{map[string]map[string]*planTableRow{}, PerResource{}}
|
return planTable{map[string]map[string]*planTableRow{}, PerResource{}}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,7 +148,7 @@ func (p *Plan) Calculate() *Plan {
|
|||||||
|
|
||||||
for _, topRow := range t.rows {
|
for _, topRow := range t.rows {
|
||||||
for _, row := range topRow {
|
for _, row := range topRow {
|
||||||
if row.current == nil { //dns name not taken
|
if row.current == nil { // dns name not taken
|
||||||
changes.Create = append(changes.Create, t.resolver.ResolveCreate(row.candidates))
|
changes.Create = append(changes.Create, t.resolver.ResolveCreate(row.candidates))
|
||||||
}
|
}
|
||||||
if row.current != nil && len(row.candidates) == 0 {
|
if row.current != nil && len(row.candidates) == 0 {
|
||||||
@ -156,7 +156,7 @@ func (p *Plan) Calculate() *Plan {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: allows record type change, which might not be supported by all dns providers
|
// TODO: allows record type change, which might not be supported by all dns providers
|
||||||
if row.current != nil && len(row.candidates) > 0 { //dns name is taken
|
if row.current != nil && len(row.candidates) > 0 { // dns name is taken
|
||||||
update := t.resolver.ResolveUpdate(row.current, row.candidates)
|
update := t.resolver.ResolveUpdate(row.current, row.candidates)
|
||||||
// compare "update" to "current" to figure out if actual update is required
|
// compare "update" to "current" to figure out if actual update is required
|
||||||
if shouldUpdateTTL(update, row.current) || targetChanged(update, row.current) || p.shouldUpdateProviderSpecific(update, row.current) {
|
if shouldUpdateTTL(update, row.current) || targetChanged(update, row.current) || p.shouldUpdateProviderSpecific(update, row.current) {
|
||||||
|
@ -226,7 +226,7 @@ func (suite *PlanTestSuite) SetupTest() {
|
|||||||
func (suite *PlanTestSuite) TestSyncFirstRound() {
|
func (suite *PlanTestSuite) TestSyncFirstRound() {
|
||||||
current := []*endpoint.Endpoint{}
|
current := []*endpoint.Endpoint{}
|
||||||
desired := []*endpoint.Endpoint{suite.fooV1Cname, suite.fooV2Cname, suite.bar127A}
|
desired := []*endpoint.Endpoint{suite.fooV1Cname, suite.fooV2Cname, suite.bar127A}
|
||||||
expectedCreate := []*endpoint.Endpoint{suite.fooV1Cname, suite.bar127A} //v1 is chosen because of resolver taking "min"
|
expectedCreate := []*endpoint.Endpoint{suite.fooV1Cname, suite.bar127A} // v1 is chosen because of resolver taking "min"
|
||||||
expectedUpdateOld := []*endpoint.Endpoint{}
|
expectedUpdateOld := []*endpoint.Endpoint{}
|
||||||
expectedUpdateNew := []*endpoint.Endpoint{}
|
expectedUpdateNew := []*endpoint.Endpoint{}
|
||||||
expectedDelete := []*endpoint.Endpoint{}
|
expectedDelete := []*endpoint.Endpoint{}
|
||||||
@ -544,7 +544,7 @@ func (suite *PlanTestSuite) TestRemoveEndpointWithUpsert() {
|
|||||||
validateEntries(suite.T(), changes.Delete, expectedDelete)
|
validateEntries(suite.T(), changes.Delete, expectedDelete)
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: remove once multiple-target per endpoint is supported
|
// TODO: remove once multiple-target per endpoint is supported
|
||||||
func (suite *PlanTestSuite) TestDuplicatedEndpointsForSameResourceReplace() {
|
func (suite *PlanTestSuite) TestDuplicatedEndpointsForSameResourceReplace() {
|
||||||
current := []*endpoint.Endpoint{suite.fooV3CnameSameResource, suite.bar192A}
|
current := []*endpoint.Endpoint{suite.fooV3CnameSameResource, suite.bar192A}
|
||||||
desired := []*endpoint.Endpoint{suite.fooV1Cname, suite.fooV3CnameSameResource}
|
desired := []*endpoint.Endpoint{suite.fooV1Cname, suite.fooV3CnameSameResource}
|
||||||
@ -567,9 +567,8 @@ func (suite *PlanTestSuite) TestDuplicatedEndpointsForSameResourceReplace() {
|
|||||||
validateEntries(suite.T(), changes.Delete, expectedDelete)
|
validateEntries(suite.T(), changes.Delete, expectedDelete)
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: remove once multiple-target per endpoint is supported
|
// TODO: remove once multiple-target per endpoint is supported
|
||||||
func (suite *PlanTestSuite) TestDuplicatedEndpointsForSameResourceRetain() {
|
func (suite *PlanTestSuite) TestDuplicatedEndpointsForSameResourceRetain() {
|
||||||
|
|
||||||
current := []*endpoint.Endpoint{suite.fooV1Cname, suite.bar192A}
|
current := []*endpoint.Endpoint{suite.fooV1Cname, suite.bar192A}
|
||||||
desired := []*endpoint.Endpoint{suite.fooV1Cname, suite.fooV3CnameSameResource}
|
desired := []*endpoint.Endpoint{suite.fooV1Cname, suite.fooV3CnameSameResource}
|
||||||
expectedCreate := []*endpoint.Endpoint{}
|
expectedCreate := []*endpoint.Endpoint{}
|
||||||
@ -592,7 +591,6 @@ func (suite *PlanTestSuite) TestDuplicatedEndpointsForSameResourceRetain() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *PlanTestSuite) TestMultipleRecordsSameNameDifferentSetIdentifier() {
|
func (suite *PlanTestSuite) TestMultipleRecordsSameNameDifferentSetIdentifier() {
|
||||||
|
|
||||||
current := []*endpoint.Endpoint{suite.multiple1}
|
current := []*endpoint.Endpoint{suite.multiple1}
|
||||||
desired := []*endpoint.Endpoint{suite.multiple2, suite.multiple3}
|
desired := []*endpoint.Endpoint{suite.multiple2, suite.multiple3}
|
||||||
expectedCreate := []*endpoint.Endpoint{suite.multiple3}
|
expectedCreate := []*endpoint.Endpoint{suite.multiple3}
|
||||||
@ -615,7 +613,6 @@ func (suite *PlanTestSuite) TestMultipleRecordsSameNameDifferentSetIdentifier()
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *PlanTestSuite) TestSetIdentifierUpdateCreatesAndDeletes() {
|
func (suite *PlanTestSuite) TestSetIdentifierUpdateCreatesAndDeletes() {
|
||||||
|
|
||||||
current := []*endpoint.Endpoint{suite.multiple2}
|
current := []*endpoint.Endpoint{suite.multiple2}
|
||||||
desired := []*endpoint.Endpoint{suite.multiple3}
|
desired := []*endpoint.Endpoint{suite.multiple3}
|
||||||
expectedCreate := []*endpoint.Endpoint{suite.multiple3}
|
expectedCreate := []*endpoint.Endpoint{suite.multiple3}
|
||||||
@ -638,7 +635,6 @@ func (suite *PlanTestSuite) TestSetIdentifierUpdateCreatesAndDeletes() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *PlanTestSuite) TestDomainFiltersInitial() {
|
func (suite *PlanTestSuite) TestDomainFiltersInitial() {
|
||||||
|
|
||||||
current := []*endpoint.Endpoint{suite.domainFilterExcluded}
|
current := []*endpoint.Endpoint{suite.domainFilterExcluded}
|
||||||
desired := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
|
desired := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
|
||||||
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
|
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
|
||||||
@ -662,7 +658,6 @@ func (suite *PlanTestSuite) TestDomainFiltersInitial() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *PlanTestSuite) TestDomainFiltersUpdate() {
|
func (suite *PlanTestSuite) TestDomainFiltersUpdate() {
|
||||||
|
|
||||||
current := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2}
|
current := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2}
|
||||||
desired := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
|
desired := []*endpoint.Endpoint{suite.domainFilterExcluded, suite.domainFilterFiltered1, suite.domainFilterFiltered2, suite.domainFilterFiltered3}
|
||||||
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFiltered3}
|
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFiltered3}
|
||||||
@ -686,7 +681,6 @@ func (suite *PlanTestSuite) TestDomainFiltersUpdate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *PlanTestSuite) TestMissing() {
|
func (suite *PlanTestSuite) TestMissing() {
|
||||||
|
|
||||||
missing := []*endpoint.Endpoint{suite.domainFilterFilteredTXT1, suite.domainFilterFilteredTXT2, suite.domainFilterExcludedTXT}
|
missing := []*endpoint.Endpoint{suite.domainFilterFilteredTXT1, suite.domainFilterFilteredTXT2, suite.domainFilterExcludedTXT}
|
||||||
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFilteredTXT1, suite.domainFilterFilteredTXT2}
|
expectedCreate := []*endpoint.Endpoint{suite.domainFilterFilteredTXT1, suite.domainFilterFilteredTXT2}
|
||||||
|
|
||||||
@ -893,7 +887,6 @@ func TestShouldUpdateProviderSpecific(tt *testing.T) {
|
|||||||
}
|
}
|
||||||
b := plan.shouldUpdateProviderSpecific(test.desired, test.current)
|
b := plan.shouldUpdateProviderSpecific(test.desired, test.current)
|
||||||
assert.Equal(t, test.shouldUpdate, b)
|
assert.Equal(t, test.shouldUpdate, b)
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -193,7 +193,6 @@ func (p AkamaiProvider) fetchZones() (akamaiZones, error) {
|
|||||||
queryArgs.ContractIds = strings.Join(p.zoneIDFilter.ZoneIDs, ",")
|
queryArgs.ContractIds = strings.Join(p.zoneIDFilter.ZoneIDs, ",")
|
||||||
}
|
}
|
||||||
resp, err := p.client.ListZones(queryArgs) // retrieve all primary zones filtered by contract ids
|
resp, err := p.client.ListZones(queryArgs) // retrieve all primary zones filtered by contract ids
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to fetch zones from Akamai")
|
log.Errorf("Failed to fetch zones from Akamai")
|
||||||
return filteredZones, err
|
return filteredZones, err
|
||||||
@ -215,7 +214,7 @@ func (p AkamaiProvider) fetchZones() (akamaiZones, error) {
|
|||||||
return filteredZones, nil
|
return filteredZones, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//Records returns the list of records in a given zone.
|
// Records returns the list of records in a given zone.
|
||||||
func (p AkamaiProvider) Records(context.Context) (endpoints []*endpoint.Endpoint, err error) {
|
func (p AkamaiProvider) Records(context.Context) (endpoints []*endpoint.Endpoint, err error) {
|
||||||
zones, err := p.fetchZones() // returns a filtered set of zones
|
zones, err := p.fetchZones() // returns a filtered set of zones
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -242,7 +241,7 @@ func (p AkamaiProvider) Records(context.Context) (endpoints []*endpoint.Endpoint
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
var temp interface{} = int64(recordset.TTL)
|
var temp interface{} = int64(recordset.TTL)
|
||||||
var ttl = endpoint.TTL(temp.(int64))
|
ttl := endpoint.TTL(temp.(int64))
|
||||||
endpoints = append(endpoints, endpoint.NewEndpointWithTTL(recordset.Name,
|
endpoints = append(endpoints, endpoint.NewEndpointWithTTL(recordset.Name,
|
||||||
recordset.Type,
|
recordset.Type,
|
||||||
ttl,
|
ttl,
|
||||||
@ -359,7 +358,7 @@ func trimTxtRdata(rdata []string, rtype string) []string {
|
|||||||
|
|
||||||
func ttlAsInt(src endpoint.TTL) int {
|
func ttlAsInt(src endpoint.TTL) int {
|
||||||
var temp interface{} = int64(src)
|
var temp interface{} = int64(src)
|
||||||
var temp64 = temp.(int64)
|
temp64 := temp.(int64)
|
||||||
var ttl int = edgeDNSRecordTTL
|
var ttl int = edgeDNSRecordTTL
|
||||||
if temp64 > 0 && temp64 <= int64(maxInt) {
|
if temp64 > 0 && temp64 <= int64(maxInt) {
|
||||||
ttl = int(temp64)
|
ttl = int(temp64)
|
||||||
|
@ -19,9 +19,10 @@ package akamai
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
log "github.com/sirupsen/logrus"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
dns "github.com/akamai/AkamaiOPEN-edgegrid-golang/configdns-v2"
|
dns "github.com/akamai/AkamaiOPEN-edgegrid-golang/configdns-v2"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"sigs.k8s.io/external-dns/endpoint"
|
"sigs.k8s.io/external-dns/endpoint"
|
||||||
@ -47,7 +48,6 @@ func newStub() *edgednsStub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func createAkamaiStubProvider(stub *edgednsStub, domfilter endpoint.DomainFilter, idfilter provider.ZoneIDFilter) (*AkamaiProvider, error) {
|
func createAkamaiStubProvider(stub *edgednsStub, domfilter endpoint.DomainFilter, idfilter provider.ZoneIDFilter) (*AkamaiProvider, error) {
|
||||||
|
|
||||||
akamaiConfig := AkamaiConfig{
|
akamaiConfig := AkamaiConfig{
|
||||||
DomainFilter: domfilter,
|
DomainFilter: domfilter,
|
||||||
ZoneIDFilter: idfilter,
|
ZoneIDFilter: idfilter,
|
||||||
@ -63,7 +63,6 @@ func createAkamaiStubProvider(stub *edgednsStub, domfilter endpoint.DomainFilter
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) createStubDataEntry(objtype string) {
|
func (r *edgednsStub) createStubDataEntry(objtype string) {
|
||||||
|
|
||||||
log.Debugf("Creating stub data entry")
|
log.Debugf("Creating stub data entry")
|
||||||
if _, exists := r.stubData[objtype]; !exists {
|
if _, exists := r.stubData[objtype]; !exists {
|
||||||
r.stubData[objtype] = edgednsStubData{objType: objtype}
|
r.stubData[objtype] = edgednsStubData{objType: objtype}
|
||||||
@ -73,7 +72,6 @@ func (r *edgednsStub) createStubDataEntry(objtype string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) setOutput(objtype string, output []interface{}) {
|
func (r *edgednsStub) setOutput(objtype string, output []interface{}) {
|
||||||
|
|
||||||
log.Debugf("Setting output to %v", output)
|
log.Debugf("Setting output to %v", output)
|
||||||
r.createStubDataEntry(objtype)
|
r.createStubDataEntry(objtype)
|
||||||
stubdata := r.stubData[objtype]
|
stubdata := r.stubData[objtype]
|
||||||
@ -84,7 +82,6 @@ func (r *edgednsStub) setOutput(objtype string, output []interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) setUpdateRecords(objtype string, records []interface{}) {
|
func (r *edgednsStub) setUpdateRecords(objtype string, records []interface{}) {
|
||||||
|
|
||||||
log.Debugf("Setting updaterecords to %v", records)
|
log.Debugf("Setting updaterecords to %v", records)
|
||||||
r.createStubDataEntry(objtype)
|
r.createStubDataEntry(objtype)
|
||||||
stubdata := r.stubData[objtype]
|
stubdata := r.stubData[objtype]
|
||||||
@ -95,7 +92,6 @@ func (r *edgednsStub) setUpdateRecords(objtype string, records []interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) setCreateRecords(objtype string, records []interface{}) {
|
func (r *edgednsStub) setCreateRecords(objtype string, records []interface{}) {
|
||||||
|
|
||||||
log.Debugf("Setting createrecords to %v", records)
|
log.Debugf("Setting createrecords to %v", records)
|
||||||
r.createStubDataEntry(objtype)
|
r.createStubDataEntry(objtype)
|
||||||
stubdata := r.stubData[objtype]
|
stubdata := r.stubData[objtype]
|
||||||
@ -106,7 +102,6 @@ func (r *edgednsStub) setCreateRecords(objtype string, records []interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) ListZones(queryArgs dns.ZoneListQueryArgs) (*dns.ZoneListResponse, error) {
|
func (r *edgednsStub) ListZones(queryArgs dns.ZoneListQueryArgs) (*dns.ZoneListResponse, error) {
|
||||||
|
|
||||||
log.Debugf("Entering ListZones")
|
log.Debugf("Entering ListZones")
|
||||||
// Ignore Metadata`
|
// Ignore Metadata`
|
||||||
resp := &dns.ZoneListResponse{}
|
resp := &dns.ZoneListResponse{}
|
||||||
@ -122,7 +117,6 @@ func (r *edgednsStub) ListZones(queryArgs dns.ZoneListQueryArgs) (*dns.ZoneListR
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) GetRecordsets(zone string, queryArgs dns.RecordsetQueryArgs) (*dns.RecordSetResponse, error) {
|
func (r *edgednsStub) GetRecordsets(zone string, queryArgs dns.RecordsetQueryArgs) (*dns.RecordSetResponse, error) {
|
||||||
|
|
||||||
log.Debugf("Entering GetRecordsets")
|
log.Debugf("Entering GetRecordsets")
|
||||||
// Ignore Metadata`
|
// Ignore Metadata`
|
||||||
resp := &dns.RecordSetResponse{}
|
resp := &dns.RecordSetResponse{}
|
||||||
@ -137,30 +131,25 @@ func (r *edgednsStub) GetRecordsets(zone string, queryArgs dns.RecordsetQueryArg
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) CreateRecordsets(recordsets *dns.Recordsets, zone string, reclock bool) error {
|
func (r *edgednsStub) CreateRecordsets(recordsets *dns.Recordsets, zone string, reclock bool) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) GetRecord(zone string, name string, record_type string) (*dns.RecordBody, error) {
|
func (r *edgednsStub) GetRecord(zone string, name string, record_type string) (*dns.RecordBody, error) {
|
||||||
|
|
||||||
resp := &dns.RecordBody{}
|
resp := &dns.RecordBody{}
|
||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) DeleteRecord(record *dns.RecordBody, zone string, recLock bool) error {
|
func (r *edgednsStub) DeleteRecord(record *dns.RecordBody, zone string, recLock bool) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *edgednsStub) UpdateRecord(record *dns.RecordBody, zone string, recLock bool) error {
|
func (r *edgednsStub) UpdateRecord(record *dns.RecordBody, zone string, recLock bool) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test FetchZones
|
// Test FetchZones
|
||||||
func TestFetchZonesZoneIDFilter(t *testing.T) {
|
func TestFetchZonesZoneIDFilter(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.DomainFilter{}
|
domfilter := endpoint.DomainFilter{}
|
||||||
idfilter := provider.NewZoneIDFilter([]string{"Test"})
|
idfilter := provider.NewZoneIDFilter([]string{"Test"})
|
||||||
@ -176,7 +165,6 @@ func TestFetchZonesZoneIDFilter(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestFetchZonesEmpty(t *testing.T) {
|
func TestFetchZonesEmpty(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.NewDomainFilter([]string{"Nonexistent"})
|
domfilter := endpoint.NewDomainFilter([]string{"Nonexistent"})
|
||||||
idfilter := provider.NewZoneIDFilter([]string{"Nonexistent"})
|
idfilter := provider.NewZoneIDFilter([]string{"Nonexistent"})
|
||||||
@ -193,7 +181,6 @@ func TestFetchZonesEmpty(t *testing.T) {
|
|||||||
|
|
||||||
// TestAkamaiRecords tests record endpoint
|
// TestAkamaiRecords tests record endpoint
|
||||||
func TestAkamaiRecords(t *testing.T) {
|
func TestAkamaiRecords(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.DomainFilter{}
|
domfilter := endpoint.DomainFilter{}
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -229,7 +216,6 @@ func TestAkamaiRecords(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAkamaiRecordsEmpty(t *testing.T) {
|
func TestAkamaiRecordsEmpty(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.DomainFilter{}
|
domfilter := endpoint.DomainFilter{}
|
||||||
idfilter := provider.NewZoneIDFilter([]string{"Nonexistent"})
|
idfilter := provider.NewZoneIDFilter([]string{"Nonexistent"})
|
||||||
@ -244,7 +230,6 @@ func TestAkamaiRecordsEmpty(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAkamaiRecordsFilters(t *testing.T) {
|
func TestAkamaiRecordsFilters(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.NewDomainFilter([]string{"www.exclude.me"})
|
domfilter := endpoint.NewDomainFilter([]string{"www.exclude.me"})
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -275,7 +260,6 @@ func TestAkamaiRecordsFilters(t *testing.T) {
|
|||||||
// TestCreateRecords tests create function
|
// TestCreateRecords tests create function
|
||||||
// (p AkamaiProvider) createRecordsets(zoneNameIDMapper provider.ZoneIDName, endpoints []*endpoint.Endpoint) error
|
// (p AkamaiProvider) createRecordsets(zoneNameIDMapper provider.ZoneIDName, endpoints []*endpoint.Endpoint) error
|
||||||
func TestCreateRecords(t *testing.T) {
|
func TestCreateRecords(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.DomainFilter{}
|
domfilter := endpoint.DomainFilter{}
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -292,7 +276,6 @@ func TestCreateRecords(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateRecordsDomainFilter(t *testing.T) {
|
func TestCreateRecordsDomainFilter(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.DomainFilter{}
|
domfilter := endpoint.DomainFilter{}
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -311,7 +294,6 @@ func TestCreateRecordsDomainFilter(t *testing.T) {
|
|||||||
|
|
||||||
// TestDeleteRecords validate delete
|
// TestDeleteRecords validate delete
|
||||||
func TestDeleteRecords(t *testing.T) {
|
func TestDeleteRecords(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.DomainFilter{}
|
domfilter := endpoint.DomainFilter{}
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -327,9 +309,7 @@ func TestDeleteRecords(t *testing.T) {
|
|||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
func TestDeleteRecordsDomainFilter(t *testing.T) {
|
func TestDeleteRecordsDomainFilter(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.NewDomainFilter([]string{"example.com"})
|
domfilter := endpoint.NewDomainFilter([]string{"example.com"})
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -348,7 +328,6 @@ func TestDeleteRecordsDomainFilter(t *testing.T) {
|
|||||||
|
|
||||||
// Test record update func
|
// Test record update func
|
||||||
func TestUpdateRecords(t *testing.T) {
|
func TestUpdateRecords(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.DomainFilter{}
|
domfilter := endpoint.DomainFilter{}
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -364,9 +343,7 @@ func TestUpdateRecords(t *testing.T) {
|
|||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
func TestUpdateRecordsDomainFilter(t *testing.T) {
|
func TestUpdateRecordsDomainFilter(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.NewDomainFilter([]string{"example.com"})
|
domfilter := endpoint.NewDomainFilter([]string{"example.com"})
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
@ -384,7 +361,6 @@ func TestUpdateRecordsDomainFilter(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAkamaiApplyChanges(t *testing.T) {
|
func TestAkamaiApplyChanges(t *testing.T) {
|
||||||
|
|
||||||
stub := newStub()
|
stub := newStub()
|
||||||
domfilter := endpoint.NewDomainFilter([]string{"example.com"})
|
domfilter := endpoint.NewDomainFilter([]string{"example.com"})
|
||||||
idfilter := provider.ZoneIDFilter{}
|
idfilter := provider.ZoneIDFilter{}
|
||||||
|
@ -433,7 +433,6 @@ func (p *AlibabaCloudProvider) getDomainRecords(domainName string) ([]alidns.Rec
|
|||||||
request.PageNumber = "1"
|
request.PageNumber = "1"
|
||||||
for {
|
for {
|
||||||
response, err := p.getDNSClient().DescribeDomainRecords(request)
|
response, err := p.getDNSClient().DescribeDomainRecords(request)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to describe domain records for Alibaba Cloud DNS: %v", err)
|
log.Errorf("Failed to describe domain records for Alibaba Cloud DNS: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -449,7 +448,7 @@ func (p *AlibabaCloudProvider) getDomainRecords(domainName string) ([]alidns.Rec
|
|||||||
if !provider.SupportedRecordType(recordType) {
|
if !provider.SupportedRecordType(recordType) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
//TODO filter Locked record
|
// TODO filter Locked record
|
||||||
results = append(results, record)
|
results = append(results, record)
|
||||||
}
|
}
|
||||||
nextPage := getNextPageNumber(response.PageNumber, defaultAlibabaCloudPageSize, response.TotalCount)
|
nextPage := getNextPageNumber(response.PageNumber, defaultAlibabaCloudPageSize, response.TotalCount)
|
||||||
@ -761,7 +760,6 @@ func (p *AlibabaCloudProvider) getPrivateZones() (map[string]*alibabaPrivateZone
|
|||||||
recordsCount := 0
|
recordsCount := 0
|
||||||
|
|
||||||
zones, err := p.privateZones()
|
zones, err := p.privateZones()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -776,7 +774,6 @@ func (p *AlibabaCloudProvider) getPrivateZones() (map[string]*alibabaPrivateZone
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
response, err := p.getPvtzClient().DescribeZoneRecords(request)
|
response, err := p.getPvtzClient().DescribeZoneRecords(request)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Failed to describe zone record '%s' in Alibaba Cloud DNS: %v", zone.ZoneId, err)
|
log.Errorf("Failed to describe zone record '%s' in Alibaba Cloud DNS: %v", zone.ZoneId, err)
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -789,7 +786,7 @@ func (p *AlibabaCloudProvider) getPrivateZones() (map[string]*alibabaPrivateZone
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO filter Locked
|
// TODO filter Locked
|
||||||
records = append(records, record)
|
records = append(records, record)
|
||||||
}
|
}
|
||||||
nextPage := getNextPageNumber(int64(response.PageNumber), defaultAlibabaCloudPageSize, int64(response.TotalItems))
|
nextPage := getNextPageNumber(int64(response.PageNumber), defaultAlibabaCloudPageSize, int64(response.TotalItems))
|
||||||
|
@ -435,7 +435,6 @@ func TestAlibabaCloudProvider_splitDNSName(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAlibabaCloudProvider_TXTEndpoint(t *testing.T) {
|
func TestAlibabaCloudProvider_TXTEndpoint(t *testing.T) {
|
||||||
|
|
||||||
p := newTestAlibabaCloudProvider(false)
|
p := newTestAlibabaCloudProvider(false)
|
||||||
const recordValue = "heritage=external-dns,external-dns/owner=default"
|
const recordValue = "heritage=external-dns,external-dns/owner=default"
|
||||||
const endpointTarget = "\"heritage=external-dns,external-dns/owner=default\""
|
const endpointTarget = "\"heritage=external-dns,external-dns/owner=default\""
|
||||||
@ -448,9 +447,8 @@ func TestAlibabaCloudProvider_TXTEndpoint(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TestAlibabaCloudProvider_TXTEndpoint_PrivateZone
|
// TestAlibabaCloudProvider_TXTEndpoint_PrivateZone
|
||||||
func TestAlibabaCloudProvider_TXTEndpoint_PrivateZone(t *testing.T) {
|
func TestAlibabaCloudProvider_TXTEndpoint_PrivateZone(t *testing.T) {
|
||||||
|
|
||||||
p := newTestAlibabaCloudProvider(true)
|
p := newTestAlibabaCloudProvider(true)
|
||||||
const recordValue = "heritage=external-dns,external-dns/owner=default"
|
const recordValue = "heritage=external-dns,external-dns/owner=default"
|
||||||
const endpointTarget = "\"heritage=external-dns,external-dns/owner=default\""
|
const endpointTarget = "\"heritage=external-dns,external-dns/owner=default\""
|
||||||
|
@ -63,9 +63,8 @@ const (
|
|||||||
sameZoneAlias = "same-zone"
|
sameZoneAlias = "same-zone"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
// see: https://docs.aws.amazon.com/general/latest/gr/elb.html
|
||||||
// see: https://docs.aws.amazon.com/general/latest/gr/elb.html
|
var canonicalHostedZones = map[string]string{
|
||||||
canonicalHostedZones = map[string]string{
|
|
||||||
// Application Load Balancers and Classic Load Balancers
|
// Application Load Balancers and Classic Load Balancers
|
||||||
"us-east-2.elb.amazonaws.com": "Z3AADJGX6KTTL2",
|
"us-east-2.elb.amazonaws.com": "Z3AADJGX6KTTL2",
|
||||||
"us-east-1.elb.amazonaws.com": "Z35SXDOTRQ7X7K",
|
"us-east-1.elb.amazonaws.com": "Z35SXDOTRQ7X7K",
|
||||||
@ -123,8 +122,7 @@ var (
|
|||||||
"awsglobalaccelerator.com": "Z2BJ6XQ5FK7U4H",
|
"awsglobalaccelerator.com": "Z2BJ6XQ5FK7U4H",
|
||||||
// Cloudfront
|
// Cloudfront
|
||||||
"cloudfront.net": "Z2FDTNDATAQYW2",
|
"cloudfront.net": "Z2FDTNDATAQYW2",
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
|
||||||
// Route53API is the subset of the AWS Route53 API that we actually use. Add methods as required. Signatures must match exactly.
|
// Route53API is the subset of the AWS Route53 API that we actually use. Add methods as required. Signatures must match exactly.
|
||||||
// mostly taken from: https://github.com/kubernetes/kubernetes/blob/853167624edb6bc0cfdcdfb88e746e178f5db36c/federation/pkg/dnsprovider/providers/aws/route53/stubs/route53api.go
|
// mostly taken from: https://github.com/kubernetes/kubernetes/blob/853167624edb6bc0cfdcdfb88e746e178f5db36c/federation/pkg/dnsprovider/providers/aws/route53/stubs/route53api.go
|
||||||
@ -528,7 +526,7 @@ func (p *AWSProvider) submitChanges(ctx context.Context, changes []*route53.Chan
|
|||||||
|
|
||||||
if _, err := p.client.ChangeResourceRecordSetsWithContext(ctx, params); err != nil {
|
if _, err := p.client.ChangeResourceRecordSetsWithContext(ctx, params); err != nil {
|
||||||
log.Errorf("Failure in zone %s [Id: %s]", aws.StringValue(zones[z].Name), z)
|
log.Errorf("Failure in zone %s [Id: %s]", aws.StringValue(zones[z].Name), z)
|
||||||
log.Error(err) //TODO(ideahitme): consider changing the interface in cases when this error might be a concern for other components
|
log.Error(err) // TODO(ideahitme): consider changing the interface in cases when this error might be a concern for other components
|
||||||
failedUpdate = true
|
failedUpdate = true
|
||||||
} else {
|
} else {
|
||||||
// z is the R53 Hosted Zone ID already as aws.StringValue
|
// z is the R53 Hosted Zone ID already as aws.StringValue
|
||||||
@ -665,7 +663,7 @@ func (p *AWSProvider) newChange(action string, ep *endpoint.Endpoint) (*route53.
|
|||||||
change.ResourceRecordSet.MultiValueAnswer = aws.Bool(true)
|
change.ResourceRecordSet.MultiValueAnswer = aws.Bool(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
var geolocation = &route53.GeoLocation{}
|
geolocation := &route53.GeoLocation{}
|
||||||
useGeolocation := false
|
useGeolocation := false
|
||||||
if prop, ok := ep.GetProviderSpecificProperty(providerSpecificGeolocationContinentCode); ok {
|
if prop, ok := ep.GetProviderSpecificProperty(providerSpecificGeolocationContinentCode); ok {
|
||||||
geolocation.ContinentCode = aws.String(prop.Value)
|
geolocation.ContinentCode = aws.String(prop.Value)
|
||||||
@ -820,6 +818,7 @@ func changesByZone(zones map[string]*route53.HostedZone, changeSet []*route53.Ch
|
|||||||
}
|
}
|
||||||
|
|
||||||
// suitableZones returns all suitable private zones and the most suitable public zone
|
// suitableZones returns all suitable private zones and the most suitable public zone
|
||||||
|
//
|
||||||
// for a given hostname and a set of zones.
|
// for a given hostname and a set of zones.
|
||||||
func suitableZones(hostname string, zones map[string]*route53.HostedZone) []*route53.HostedZone {
|
func suitableZones(hostname string, zones map[string]*route53.HostedZone) []*route53.HostedZone {
|
||||||
var matchingZones []*route53.HostedZone
|
var matchingZones []*route53.HostedZone
|
||||||
|
@ -1241,7 +1241,6 @@ func setupAWSRecords(t *testing.T, provider *AWSProvider, endpoints []*endpoint.
|
|||||||
|
|
||||||
_, err = provider.Records(ctx)
|
_, err = provider.Records(ctx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func listAWSRecords(t *testing.T, client Route53API, zone string) []*route53.ResourceRecordSet {
|
func listAWSRecords(t *testing.T, client Route53API, zone string) []*route53.ResourceRecordSet {
|
||||||
@ -1301,6 +1300,7 @@ func escapeAWSRecords(t *testing.T, provider *AWSProvider, zone string) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newAWSProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneTypeFilter provider.ZoneTypeFilter, evaluateTargetHealth, dryRun bool, records []*endpoint.Endpoint) (*AWSProvider, *Route53APIStub) {
|
func newAWSProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneTypeFilter provider.ZoneTypeFilter, evaluateTargetHealth, dryRun bool, records []*endpoint.Endpoint) (*AWSProvider, *Route53APIStub) {
|
||||||
return newAWSProviderWithTagFilter(t, domainFilter, zoneIDFilter, zoneTypeFilter, provider.NewZoneTagFilter([]string{}), evaluateTargetHealth, dryRun, records)
|
return newAWSProviderWithTagFilter(t, domainFilter, zoneIDFilter, zoneTypeFilter, provider.NewZoneTagFilter([]string{}), evaluateTargetHealth, dryRun, records)
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,11 @@ package awssd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
||||||
@ -493,7 +491,9 @@ func (p *AWSSDProvider) UpdateService(service *sd.Service, ep *endpoint.Endpoint
|
|||||||
Type: aws.String(srvType),
|
Type: aws.String(srvType),
|
||||||
TTL: aws.Int64(ttl),
|
TTL: aws.Int64(ttl),
|
||||||
}},
|
}},
|
||||||
}}})
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,6 @@ type AWSSDClientStub struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *AWSSDClientStub) CreateService(input *sd.CreateServiceInput) (*sd.CreateServiceOutput, error) {
|
func (s *AWSSDClientStub) CreateService(input *sd.CreateServiceInput) (*sd.CreateServiceOutput, error) {
|
||||||
|
|
||||||
srv := &sd.Service{
|
srv := &sd.Service{
|
||||||
Id: aws.String(strconv.Itoa(rand.Intn(10000))),
|
Id: aws.String(strconv.Itoa(rand.Intn(10000))),
|
||||||
DnsConfig: input.DnsConfig,
|
DnsConfig: input.DnsConfig,
|
||||||
@ -150,7 +149,6 @@ func (s *AWSSDClientStub) ListServicesPages(input *sd.ListServicesInput, fn func
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *AWSSDClientStub) RegisterInstance(input *sd.RegisterInstanceInput) (*sd.RegisterInstanceOutput, error) {
|
func (s *AWSSDClientStub) RegisterInstance(input *sd.RegisterInstanceInput) (*sd.RegisterInstanceOutput, error) {
|
||||||
|
|
||||||
srvInstances, ok := s.instances[*input.ServiceId]
|
srvInstances, ok := s.instances[*input.ServiceId]
|
||||||
if !ok {
|
if !ok {
|
||||||
srvInstances = make(map[string]*sd.Instance)
|
srvInstances = make(map[string]*sd.Instance)
|
||||||
|
@ -139,12 +139,15 @@ func privateOthersRecordSetPropertiesGetter(values []string, ttl int64) *private
|
|||||||
TTL: to.Int64Ptr(ttl),
|
TTL: to.Int64Ptr(ttl),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createPrivateMockRecordSet(name, recordType string, values ...string) privatedns.RecordSet {
|
func createPrivateMockRecordSet(name, recordType string, values ...string) privatedns.RecordSet {
|
||||||
return createPrivateMockRecordSetMultiWithTTL(name, recordType, 0, values...)
|
return createPrivateMockRecordSetMultiWithTTL(name, recordType, 0, values...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createPrivateMockRecordSetWithTTL(name, recordType, value string, ttl int64) privatedns.RecordSet {
|
func createPrivateMockRecordSetWithTTL(name, recordType, value string, ttl int64) privatedns.RecordSet {
|
||||||
return createPrivateMockRecordSetMultiWithTTL(name, recordType, ttl, value)
|
return createPrivateMockRecordSetMultiWithTTL(name, recordType, ttl, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createPrivateMockRecordSetMultiWithTTL(name, recordType string, ttl int64, values ...string) privatedns.RecordSet {
|
func createPrivateMockRecordSetMultiWithTTL(name, recordType string, ttl int64, values ...string) privatedns.RecordSet {
|
||||||
var getterFunc func(values []string, ttl int64) *privatedns.RecordSetProperties
|
var getterFunc func(values []string, ttl int64) *privatedns.RecordSetProperties
|
||||||
|
|
||||||
@ -163,7 +166,6 @@ func createPrivateMockRecordSetMultiWithTTL(name, recordType string, ttl int64,
|
|||||||
Type: to.StringPtr("Microsoft.Network/privateDnsZones/" + recordType),
|
Type: to.StringPtr("Microsoft.Network/privateDnsZones/" + recordType),
|
||||||
RecordSetProperties: getterFunc(values, ttl),
|
RecordSetProperties: getterFunc(values, ttl),
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *mockPrivateRecordSetsClient) ListComplete(ctx context.Context, resourceGroupName string, zoneName string, top *int32, recordSetNameSuffix string) (result privatedns.RecordSetListResultIterator, err error) {
|
func (client *mockPrivateRecordSetsClient) ListComplete(ctx context.Context, resourceGroupName string, zoneName string, top *int32, recordSetNameSuffix string) (result privatedns.RecordSetListResultIterator, err error) {
|
||||||
@ -265,13 +267,11 @@ func TestAzurePrivateDNSRecord(t *testing.T) {
|
|||||||
createPrivateMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
createPrivateMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
||||||
createPrivateMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
createPrivateMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
actual, err := provider.Records(context.Background())
|
actual, err := provider.Records(context.Background())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -284,7 +284,6 @@ func TestAzurePrivateDNSRecord(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validateAzureEndpoints(t, actual, expected)
|
validateAzureEndpoints(t, actual, expected)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAzurePrivateDNSMultiRecord(t *testing.T) {
|
func TestAzurePrivateDNSMultiRecord(t *testing.T) {
|
||||||
@ -301,13 +300,11 @@ func TestAzurePrivateDNSMultiRecord(t *testing.T) {
|
|||||||
createPrivateMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
createPrivateMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
||||||
createPrivateMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
createPrivateMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
actual, err := provider.Records(context.Background())
|
actual, err := provider.Records(context.Background())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -320,7 +317,6 @@ func TestAzurePrivateDNSMultiRecord(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validateAzureEndpoints(t, actual, expected)
|
validateAzureEndpoints(t, actual, expected)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAzurePrivateDNSApplyChanges(t *testing.T) {
|
func TestAzurePrivateDNSApplyChanges(t *testing.T) {
|
||||||
|
@ -138,12 +138,15 @@ func othersRecordSetPropertiesGetter(values []string, ttl int64) *dns.RecordSetP
|
|||||||
TTL: to.Int64Ptr(ttl),
|
TTL: to.Int64Ptr(ttl),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createMockRecordSet(name, recordType string, values ...string) dns.RecordSet {
|
func createMockRecordSet(name, recordType string, values ...string) dns.RecordSet {
|
||||||
return createMockRecordSetMultiWithTTL(name, recordType, 0, values...)
|
return createMockRecordSetMultiWithTTL(name, recordType, 0, values...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createMockRecordSetWithTTL(name, recordType, value string, ttl int64) dns.RecordSet {
|
func createMockRecordSetWithTTL(name, recordType, value string, ttl int64) dns.RecordSet {
|
||||||
return createMockRecordSetMultiWithTTL(name, recordType, ttl, value)
|
return createMockRecordSetMultiWithTTL(name, recordType, ttl, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createMockRecordSetMultiWithTTL(name, recordType string, ttl int64, values ...string) dns.RecordSet {
|
func createMockRecordSetMultiWithTTL(name, recordType string, ttl int64, values ...string) dns.RecordSet {
|
||||||
var getterFunc func(values []string, ttl int64) *dns.RecordSetProperties
|
var getterFunc func(values []string, ttl int64) *dns.RecordSetProperties
|
||||||
|
|
||||||
@ -162,7 +165,6 @@ func createMockRecordSetMultiWithTTL(name, recordType string, ttl int64, values
|
|||||||
Type: to.StringPtr("Microsoft.Network/dnszones/" + recordType),
|
Type: to.StringPtr("Microsoft.Network/dnszones/" + recordType),
|
||||||
RecordSetProperties: getterFunc(values, ttl),
|
RecordSetProperties: getterFunc(values, ttl),
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *mockRecordSetsClient) ListAllByDNSZoneComplete(ctx context.Context, resourceGroupName string, zoneName string, top *int32, recordSetNameSuffix string) (result dns.RecordSetListResultIterator, err error) {
|
func (client *mockRecordSetsClient) ListAllByDNSZoneComplete(ctx context.Context, resourceGroupName string, zoneName string, top *int32, recordSetNameSuffix string) (result dns.RecordSetListResultIterator, err error) {
|
||||||
@ -270,14 +272,12 @@ func TestAzureRecord(t *testing.T) {
|
|||||||
createMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
createMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
||||||
createMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
createMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
actual, err := provider.Records(ctx)
|
actual, err := provider.Records(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -290,7 +290,6 @@ func TestAzureRecord(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validateAzureEndpoints(t, actual, expected)
|
validateAzureEndpoints(t, actual, expected)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAzureMultiRecord(t *testing.T) {
|
func TestAzureMultiRecord(t *testing.T) {
|
||||||
@ -307,14 +306,12 @@ func TestAzureMultiRecord(t *testing.T) {
|
|||||||
createMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
createMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
||||||
createMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
createMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
actual, err := provider.Records(ctx)
|
actual, err := provider.Records(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -327,7 +324,6 @@ func TestAzureMultiRecord(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validateAzureEndpoints(t, actual, expected)
|
validateAzureEndpoints(t, actual, expected)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAzureApplyChanges(t *testing.T) {
|
func TestAzureApplyChanges(t *testing.T) {
|
||||||
@ -461,14 +457,12 @@ func TestAzureNameFilter(t *testing.T) {
|
|||||||
createMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
createMockRecordSetWithTTL("nginx", endpoint.RecordTypeTXT, "heritage=external-dns,external-dns/owner=default", recordTTL),
|
||||||
createMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
createMockRecordSetWithTTL("hack", endpoint.RecordTypeCNAME, "hack.azurewebsites.net", 10),
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
actual, err := provider.Records(ctx)
|
actual, err := provider.Records(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -479,7 +473,6 @@ func TestAzureNameFilter(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
validateAzureEndpoints(t, actual, expected)
|
validateAzureEndpoints(t, actual, expected)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAzureApplyChangesZoneName(t *testing.T) {
|
func TestAzureApplyChangesZoneName(t *testing.T) {
|
||||||
|
@ -109,7 +109,6 @@ func getAccessToken(cfg config, environment azure.Environment) (*adal.ServicePri
|
|||||||
token, err := adal.NewServicePrincipalTokenFromManagedIdentity(environment.ServiceManagementEndpoint, &adal.ManagedIdentityOptions{
|
token, err := adal.NewServicePrincipalTokenFromManagedIdentity(environment.ServiceManagementEndpoint, &adal.ManagedIdentityOptions{
|
||||||
ClientID: cfg.UserAssignedIdentityID,
|
ClientID: cfg.UserAssignedIdentityID,
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create the managed service identity token: %v", err)
|
return nil, fmt.Errorf("failed to create the managed service identity token: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,12 @@ package azure
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/Azure/go-autorest/autorest/azure"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetAzureEnvironmentConfig(t *testing.T) {
|
func TestGetAzureEnvironmentConfig(t *testing.T) {
|
||||||
|
@ -48,14 +48,17 @@ type Changes struct {
|
|||||||
func (g mockGatewayClient) GetBluecatZones(zoneName string) ([]api.BluecatZone, error) {
|
func (g mockGatewayClient) GetBluecatZones(zoneName string) ([]api.BluecatZone, error) {
|
||||||
return *g.mockBluecatZones, nil
|
return *g.mockBluecatZones, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) GetHostRecords(zone string, records *[]api.BluecatHostRecord) error {
|
func (g mockGatewayClient) GetHostRecords(zone string, records *[]api.BluecatHostRecord) error {
|
||||||
*records = *g.mockBluecatHosts
|
*records = *g.mockBluecatHosts
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) GetCNAMERecords(zone string, records *[]api.BluecatCNAMERecord) error {
|
func (g mockGatewayClient) GetCNAMERecords(zone string, records *[]api.BluecatCNAMERecord) error {
|
||||||
*records = *g.mockBluecatCNAMEs
|
*records = *g.mockBluecatCNAMEs
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) GetHostRecord(name string, record *api.BluecatHostRecord) error {
|
func (g mockGatewayClient) GetHostRecord(name string, record *api.BluecatHostRecord) error {
|
||||||
for _, currentRecord := range *g.mockBluecatHosts {
|
for _, currentRecord := range *g.mockBluecatHosts {
|
||||||
if currentRecord.Name == strings.Split(name, ".")[0] {
|
if currentRecord.Name == strings.Split(name, ".")[0] {
|
||||||
@ -65,6 +68,7 @@ func (g mockGatewayClient) GetHostRecord(name string, record *api.BluecatHostRec
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) GetCNAMERecord(name string, record *api.BluecatCNAMERecord) error {
|
func (g mockGatewayClient) GetCNAMERecord(name string, record *api.BluecatCNAMERecord) error {
|
||||||
for _, currentRecord := range *g.mockBluecatCNAMEs {
|
for _, currentRecord := range *g.mockBluecatCNAMEs {
|
||||||
if currentRecord.Name == strings.Split(name, ".")[0] {
|
if currentRecord.Name == strings.Split(name, ".")[0] {
|
||||||
@ -74,24 +78,30 @@ func (g mockGatewayClient) GetCNAMERecord(name string, record *api.BluecatCNAMER
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) CreateHostRecord(zone string, req *api.BluecatCreateHostRecordRequest) (err error) {
|
func (g mockGatewayClient) CreateHostRecord(zone string, req *api.BluecatCreateHostRecordRequest) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) CreateCNAMERecord(zone string, req *api.BluecatCreateCNAMERecordRequest) (err error) {
|
func (g mockGatewayClient) CreateCNAMERecord(zone string, req *api.BluecatCreateCNAMERecordRequest) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) DeleteHostRecord(name string, zone string) (err error) {
|
func (g mockGatewayClient) DeleteHostRecord(name string, zone string) (err error) {
|
||||||
*g.mockBluecatHosts = nil
|
*g.mockBluecatHosts = nil
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) DeleteCNAMERecord(name string, zone string) (err error) {
|
func (g mockGatewayClient) DeleteCNAMERecord(name string, zone string) (err error) {
|
||||||
*g.mockBluecatCNAMEs = nil
|
*g.mockBluecatCNAMEs = nil
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) GetTXTRecords(zone string, records *[]api.BluecatTXTRecord) error {
|
func (g mockGatewayClient) GetTXTRecords(zone string, records *[]api.BluecatTXTRecord) error {
|
||||||
*records = *g.mockBluecatTXTs
|
*records = *g.mockBluecatTXTs
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) GetTXTRecord(name string, record *api.BluecatTXTRecord) error {
|
func (g mockGatewayClient) GetTXTRecord(name string, record *api.BluecatTXTRecord) error {
|
||||||
for _, currentRecord := range *g.mockBluecatTXTs {
|
for _, currentRecord := range *g.mockBluecatTXTs {
|
||||||
if currentRecord.Name == name {
|
if currentRecord.Name == name {
|
||||||
@ -101,13 +111,16 @@ func (g mockGatewayClient) GetTXTRecord(name string, record *api.BluecatTXTRecor
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) CreateTXTRecord(zone string, req *api.BluecatCreateTXTRecordRequest) error {
|
func (g mockGatewayClient) CreateTXTRecord(zone string, req *api.BluecatCreateTXTRecordRequest) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) DeleteTXTRecord(name string, zone string) error {
|
func (g mockGatewayClient) DeleteTXTRecord(name string, zone string) error {
|
||||||
*g.mockBluecatTXTs = nil
|
*g.mockBluecatTXTs = nil
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g mockGatewayClient) ServerFullDeploy() error {
|
func (g mockGatewayClient) ServerFullDeploy() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -271,6 +284,7 @@ func TestBluecatApplyChangesCreate(t *testing.T) {
|
|||||||
validateEndpoints(t, actual, []*endpoint.Endpoint{})
|
validateEndpoints(t, actual, []*endpoint.Endpoint{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBluecatApplyChangesDelete(t *testing.T) {
|
func TestBluecatApplyChangesDelete(t *testing.T) {
|
||||||
client := mockGatewayClient{
|
client := mockGatewayClient{
|
||||||
mockBluecatZones: &[]api.BluecatZone{
|
mockBluecatZones: &[]api.BluecatZone{
|
||||||
@ -354,7 +368,6 @@ func TestBluecatApplyChangesDeleteWithOwner(t *testing.T) {
|
|||||||
}
|
}
|
||||||
validateEndpoints(t, actual, []*endpoint.Endpoint{})
|
validateEndpoints(t, actual, []*endpoint.Endpoint{})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: ensure findZone method is tested
|
// TODO: ensure findZone method is tested
|
||||||
|
@ -176,7 +176,6 @@ func GetBluecatGatewayToken(cfg BluecatConfig) (string, http.Cookie, error) {
|
|||||||
url := cfg.GatewayHost + "/rest_login"
|
url := cfg.GatewayHost + "/rest_login"
|
||||||
|
|
||||||
response, err := executeHTTPRequest(cfg.SkipTLSVerify, http.MethodPost, url, "", bytes.NewBuffer(body), http.Cookie{})
|
response, err := executeHTTPRequest(cfg.SkipTLSVerify, http.MethodPost, url, "", bytes.NewBuffer(body), http.Cookie{})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", http.Cookie{}, errors.Wrap(err, "error obtaining API token from bluecat gateway")
|
return "", http.Cookie{}, errors.Wrap(err, "error obtaining API token from bluecat gateway")
|
||||||
}
|
}
|
||||||
|
@ -96,9 +96,11 @@ func (z zoneService) CreateDNSRecord(ctx context.Context, zoneID string, rr clou
|
|||||||
func (z zoneService) DNSRecords(ctx context.Context, zoneID string, rr cloudflare.DNSRecord) ([]cloudflare.DNSRecord, error) {
|
func (z zoneService) DNSRecords(ctx context.Context, zoneID string, rr cloudflare.DNSRecord) ([]cloudflare.DNSRecord, error) {
|
||||||
return z.service.DNSRecords(ctx, zoneID, rr)
|
return z.service.DNSRecords(ctx, zoneID, rr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (z zoneService) UpdateDNSRecord(ctx context.Context, zoneID, recordID string, rr cloudflare.DNSRecord) error {
|
func (z zoneService) UpdateDNSRecord(ctx context.Context, zoneID, recordID string, rr cloudflare.DNSRecord) error {
|
||||||
return z.service.UpdateDNSRecord(ctx, zoneID, recordID, rr)
|
return z.service.UpdateDNSRecord(ctx, zoneID, recordID, rr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (z zoneService) DeleteDNSRecord(ctx context.Context, zoneID, recordID string) error {
|
func (z zoneService) DeleteDNSRecord(ctx context.Context, zoneID, recordID string) error {
|
||||||
return z.service.DeleteDNSRecord(ctx, zoneID, recordID)
|
return z.service.DeleteDNSRecord(ctx, zoneID, recordID)
|
||||||
}
|
}
|
||||||
@ -145,7 +147,7 @@ func NewCloudFlareProvider(domainFilter endpoint.DomainFilter, zoneIDFilter prov
|
|||||||
return nil, fmt.Errorf("failed to initialize cloudflare provider: %v", err)
|
return nil, fmt.Errorf("failed to initialize cloudflare provider: %v", err)
|
||||||
}
|
}
|
||||||
provider := &CloudFlareProvider{
|
provider := &CloudFlareProvider{
|
||||||
//Client: config,
|
// Client: config,
|
||||||
Client: zoneService{config},
|
Client: zoneService{config},
|
||||||
domainFilter: domainFilter,
|
domainFilter: domainFilter,
|
||||||
zoneIDFilter: zoneIDFilter,
|
zoneIDFilter: zoneIDFilter,
|
||||||
|
@ -244,7 +244,6 @@ func AssertActions(t *testing.T, provider *CloudFlareProvider, endpoints []*endp
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
records, err := provider.Records(ctx)
|
records, err := provider.Records(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("cannot fetch records, %s", err)
|
t.Fatalf("cannot fetch records, %s", err)
|
||||||
}
|
}
|
||||||
@ -309,7 +308,6 @@ func TestCloudflareA(t *testing.T) {
|
|||||||
},
|
},
|
||||||
[]string{endpoint.RecordTypeA, endpoint.RecordTypeCNAME},
|
[]string{endpoint.RecordTypeA, endpoint.RecordTypeCNAME},
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCloudflareCname(t *testing.T) {
|
func TestCloudflareCname(t *testing.T) {
|
||||||
@ -501,7 +499,7 @@ func TestCloudflareProxiedOverrideIllegal(t *testing.T) {
|
|||||||
func TestCloudflareSetProxied(t *testing.T) {
|
func TestCloudflareSetProxied(t *testing.T) {
|
||||||
var proxied *bool = proxyEnabled
|
var proxied *bool = proxyEnabled
|
||||||
var notProxied *bool = proxyDisabled
|
var notProxied *bool = proxyDisabled
|
||||||
var testCases = []struct {
|
testCases := []struct {
|
||||||
recordType string
|
recordType string
|
||||||
domain string
|
domain string
|
||||||
proxiable *bool
|
proxiable *bool
|
||||||
@ -674,7 +672,6 @@ func TestCloudflareApplyChanges(t *testing.T) {
|
|||||||
Targets: endpoint.Targets{"target-new"},
|
Targets: endpoint.Targets{"target-new"},
|
||||||
}}
|
}}
|
||||||
err := provider.ApplyChanges(context.Background(), changes)
|
err := provider.ApplyChanges(context.Background(), changes)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("should not fail, %s", err)
|
t.Errorf("should not fail, %s", err)
|
||||||
}
|
}
|
||||||
@ -1111,7 +1108,6 @@ func TestCloudflareComplexUpdate(t *testing.T) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
records, err := provider.Records(ctx)
|
records, err := provider.Records(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("should not fail, %s", err)
|
t.Errorf("should not fail, %s", err)
|
||||||
}
|
}
|
||||||
@ -1146,7 +1142,7 @@ func TestCloudflareComplexUpdate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
td.CmpDeeply(t, client.Actions, []MockAction{
|
td.CmpDeeply(t, client.Actions, []MockAction{
|
||||||
MockAction{
|
{
|
||||||
Name: "Create",
|
Name: "Create",
|
||||||
ZoneId: "001",
|
ZoneId: "001",
|
||||||
RecordData: cloudflare.DNSRecord{
|
RecordData: cloudflare.DNSRecord{
|
||||||
@ -1157,7 +1153,7 @@ func TestCloudflareComplexUpdate(t *testing.T) {
|
|||||||
Proxied: proxyEnabled,
|
Proxied: proxyEnabled,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
MockAction{
|
{
|
||||||
Name: "Update",
|
Name: "Update",
|
||||||
ZoneId: "001",
|
ZoneId: "001",
|
||||||
RecordId: "1234567890",
|
RecordId: "1234567890",
|
||||||
@ -1169,7 +1165,7 @@ func TestCloudflareComplexUpdate(t *testing.T) {
|
|||||||
Proxied: proxyEnabled,
|
Proxied: proxyEnabled,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
MockAction{
|
{
|
||||||
Name: "Delete",
|
Name: "Delete",
|
||||||
ZoneId: "001",
|
ZoneId: "001",
|
||||||
RecordId: "2345678901",
|
RecordId: "2345678901",
|
||||||
@ -1179,7 +1175,7 @@ func TestCloudflareComplexUpdate(t *testing.T) {
|
|||||||
|
|
||||||
func TestCustomTTLWithEnabledProxyNotChanged(t *testing.T) {
|
func TestCustomTTLWithEnabledProxyNotChanged(t *testing.T) {
|
||||||
client := NewMockCloudFlareClientWithRecords(map[string][]cloudflare.DNSRecord{
|
client := NewMockCloudFlareClientWithRecords(map[string][]cloudflare.DNSRecord{
|
||||||
"001": []cloudflare.DNSRecord{
|
"001": {
|
||||||
{
|
{
|
||||||
ID: "1234567890",
|
ID: "1234567890",
|
||||||
ZoneID: "001",
|
ZoneID: "001",
|
||||||
@ -1197,7 +1193,6 @@ func TestCustomTTLWithEnabledProxyNotChanged(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
records, err := provider.Records(context.Background())
|
records, err := provider.Records(context.Background())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("should not fail, %s", err)
|
t.Errorf("should not fail, %s", err)
|
||||||
}
|
}
|
||||||
|
@ -232,7 +232,7 @@ func getETCDConfig() (*etcdcv3.Config, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//newETCDClient is an etcd client constructor
|
// newETCDClient is an etcd client constructor
|
||||||
func newETCDClient() (coreDNSClient, error) {
|
func newETCDClient() (coreDNSClient, error) {
|
||||||
cfg, err := getETCDConfig()
|
cfg, err := getETCDConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -329,7 +329,6 @@ func TestDesignateCreateRecords(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testDesignateCreateRecords(t *testing.T, client *fakeDesignateClient) []*recordsets.RecordSet {
|
func testDesignateCreateRecords(t *testing.T, client *fakeDesignateClient) []*recordsets.RecordSet {
|
||||||
|
|
||||||
for i, zoneName := range []string{"example.com.", "test.net."} {
|
for i, zoneName := range []string{"example.com.", "test.net."} {
|
||||||
client.AddZone(zones.Zone{
|
client.AddZone(zones.Zone{
|
||||||
ID: fmt.Sprintf("zone-%d", i+1),
|
ID: fmt.Sprintf("zone-%d", i+1),
|
||||||
|
@ -75,9 +75,11 @@ func (m *mockDigitalOceanClient) CreateRecord(context.Context, string, *godo.Dom
|
|||||||
func (m *mockDigitalOceanClient) Delete(context.Context, string) (*godo.Response, error) {
|
func (m *mockDigitalOceanClient) Delete(context.Context, string) (*godo.Response, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockDigitalOceanClient) DeleteRecord(ctx context.Context, domain string, id int) (*godo.Response, error) {
|
func (m *mockDigitalOceanClient) DeleteRecord(ctx context.Context, domain string, id int) (*godo.Response, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockDigitalOceanClient) EditRecord(ctx context.Context, domain string, id int, editRequest *godo.DomainRecordEditRequest) (*godo.DomainRecord, *godo.Response, error) {
|
func (m *mockDigitalOceanClient) EditRecord(ctx context.Context, domain string, id int, editRequest *godo.DomainRecordEditRequest) (*godo.DomainRecord, *godo.Response, error) {
|
||||||
return &godo.DomainRecord{ID: 1}, nil, nil
|
return &godo.DomainRecord{ID: 1}, nil, nil
|
||||||
}
|
}
|
||||||
@ -157,9 +159,11 @@ func (m *mockDigitalOceanRecordsFail) CreateRecord(context.Context, string, *god
|
|||||||
func (m *mockDigitalOceanRecordsFail) Delete(context.Context, string) (*godo.Response, error) {
|
func (m *mockDigitalOceanRecordsFail) Delete(context.Context, string) (*godo.Response, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockDigitalOceanRecordsFail) DeleteRecord(ctx context.Context, domain string, id int) (*godo.Response, error) {
|
func (m *mockDigitalOceanRecordsFail) DeleteRecord(ctx context.Context, domain string, id int) (*godo.Response, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockDigitalOceanRecordsFail) EditRecord(ctx context.Context, domain string, id int, editRequest *godo.DomainRecordEditRequest) (*godo.DomainRecord, *godo.Response, error) {
|
func (m *mockDigitalOceanRecordsFail) EditRecord(ctx context.Context, domain string, id int, editRequest *godo.DomainRecordEditRequest) (*godo.DomainRecord, *godo.Response, error) {
|
||||||
return &godo.DomainRecord{ID: 1}, nil, nil
|
return &godo.DomainRecord{ID: 1}, nil, nil
|
||||||
}
|
}
|
||||||
|
@ -32,9 +32,11 @@ import (
|
|||||||
"sigs.k8s.io/external-dns/provider"
|
"sigs.k8s.io/external-dns/provider"
|
||||||
)
|
)
|
||||||
|
|
||||||
var mockProvider dnsimpleProvider
|
var (
|
||||||
var dnsimpleListRecordsResponse dnsimple.ZoneRecordsResponse
|
mockProvider dnsimpleProvider
|
||||||
var dnsimpleListZonesResponse dnsimple.ZonesResponse
|
dnsimpleListRecordsResponse dnsimple.ZoneRecordsResponse
|
||||||
|
dnsimpleListZonesResponse dnsimple.ZonesResponse
|
||||||
|
)
|
||||||
|
|
||||||
func TestDnsimpleServices(t *testing.T) {
|
func TestDnsimpleServices(t *testing.T) {
|
||||||
// Setup example responses
|
// Setup example responses
|
||||||
|
@ -252,9 +252,9 @@ func apiRetryLoop(f func() error) error {
|
|||||||
|
|
||||||
func (d *dynProviderState) allRecordsToEndpoints(records *dynsoap.GetAllRecordsResponseType) []*endpoint.Endpoint {
|
func (d *dynProviderState) allRecordsToEndpoints(records *dynsoap.GetAllRecordsResponseType) []*endpoint.Endpoint {
|
||||||
result := []*endpoint.Endpoint{}
|
result := []*endpoint.Endpoint{}
|
||||||
//Convert each record to an endpoint
|
// Convert each record to an endpoint
|
||||||
|
|
||||||
//Process A Records
|
// Process A Records
|
||||||
for _, rec := range records.Data.A_records {
|
for _, rec := range records.Data.A_records {
|
||||||
ep := &endpoint.Endpoint{
|
ep := &endpoint.Endpoint{
|
||||||
DNSName: rec.Fqdn,
|
DNSName: rec.Fqdn,
|
||||||
@ -266,7 +266,7 @@ func (d *dynProviderState) allRecordsToEndpoints(records *dynsoap.GetAllRecordsR
|
|||||||
result = append(result, ep)
|
result = append(result, ep)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Process CNAME Records
|
// Process CNAME Records
|
||||||
for _, rec := range records.Data.Cname_records {
|
for _, rec := range records.Data.Cname_records {
|
||||||
ep := &endpoint.Endpoint{
|
ep := &endpoint.Endpoint{
|
||||||
DNSName: rec.Fqdn,
|
DNSName: rec.Fqdn,
|
||||||
@ -278,7 +278,7 @@ func (d *dynProviderState) allRecordsToEndpoints(records *dynsoap.GetAllRecordsR
|
|||||||
result = append(result, ep)
|
result = append(result, ep)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Process TXT Records
|
// Process TXT Records
|
||||||
for _, rec := range records.Data.Txt_records {
|
for _, rec := range records.Data.Txt_records {
|
||||||
ep := &endpoint.Endpoint{
|
ep := &endpoint.Endpoint{
|
||||||
DNSName: rec.Fqdn,
|
DNSName: rec.Fqdn,
|
||||||
@ -321,7 +321,6 @@ func (d *dynProviderState) fetchZoneSerial(client *dynect.Client, zone string) (
|
|||||||
var resp dynect.ZoneResponse
|
var resp dynect.ZoneResponse
|
||||||
|
|
||||||
err := client.Do("GET", fmt.Sprintf("Zone/%s", zone), nil, &resp)
|
err := client.Do("GET", fmt.Sprintf("Zone/%s", zone), nil, &resp)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@ -329,7 +328,7 @@ func (d *dynProviderState) fetchZoneSerial(client *dynect.Client, zone string) (
|
|||||||
return resp.Data.Serial, nil
|
return resp.Data.Serial, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//Use SOAP to fetch all records with a single call
|
// Use SOAP to fetch all records with a single call
|
||||||
func (d *dynProviderState) fetchAllRecordsInZone(zone string) (*dynsoap.GetAllRecordsResponseType, error) {
|
func (d *dynProviderState) fetchAllRecordsInZone(zone string) (*dynsoap.GetAllRecordsResponseType, error) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
@ -368,7 +367,7 @@ func (d *dynProviderState) fetchAllRecordsInZone(zone string) (*dynsoap.GetAllRe
|
|||||||
Fault_incompat: 0,
|
Fault_incompat: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
var records = &dynsoap.GetAllRecordsResponseType{}
|
records := &dynsoap.GetAllRecordsResponseType{}
|
||||||
|
|
||||||
err = apiRetryLoop(func() error {
|
err = apiRetryLoop(func() error {
|
||||||
records, err = service.GetAllRecords(&req)
|
records, err = service.GetAllRecords(&req)
|
||||||
@ -388,7 +387,7 @@ func (d *dynProviderState) fetchAllRecordsInZone(zone string) (*dynsoap.GetAllRe
|
|||||||
Fault_incompat: 0,
|
Fault_incompat: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
var jobResults = dynsoap.GetJobResponseType{}
|
jobResults := dynsoap.GetJobResponseType{}
|
||||||
err = apiRetryLoop(func() error {
|
err = apiRetryLoop(func() error {
|
||||||
jobResults, err := service.GetJob(&jobRequest)
|
jobResults, err := service.GetJob(&jobRequest)
|
||||||
if strings.ToLower(jobResults.Status) == "incomplete" {
|
if strings.ToLower(jobResults.Status) == "incomplete" {
|
||||||
@ -415,7 +414,7 @@ func (d *dynProviderState) buildLinkToRecord(ep *endpoint.Endpoint) string {
|
|||||||
if ep == nil {
|
if ep == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
var matchingZone = ""
|
matchingZone := ""
|
||||||
for _, zone := range d.ZoneIDFilter.ZoneIDs {
|
for _, zone := range d.ZoneIDFilter.ZoneIDs {
|
||||||
if strings.HasSuffix(ep.DNSName, zone) {
|
if strings.HasSuffix(ep.DNSName, zone) {
|
||||||
matchingZone = zone
|
matchingZone = zone
|
||||||
@ -448,10 +447,11 @@ func (d *dynProviderState) login() (*dynect.Client, error) {
|
|||||||
}
|
}
|
||||||
client := dynect.NewClient(d.CustomerName)
|
client := dynect.NewClient(d.CustomerName)
|
||||||
|
|
||||||
var req = dynect.LoginBlock{
|
req := dynect.LoginBlock{
|
||||||
Username: d.Username,
|
Username: d.Username,
|
||||||
Password: d.Password,
|
Password: d.Password,
|
||||||
CustomerName: d.CustomerName}
|
CustomerName: d.CustomerName,
|
||||||
|
}
|
||||||
|
|
||||||
var resp dynect.LoginResponse
|
var resp dynect.LoginResponse
|
||||||
|
|
||||||
@ -618,7 +618,7 @@ func (d *dynProviderState) Records(ctx context.Context) ([]*endpoint.Endpoint, e
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fetch All Records
|
// Fetch All Records
|
||||||
records, err := d.fetchAllRecordsInZone(zone)
|
records, err := d.fetchAllRecordsInZone(zone)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -43,12 +43,13 @@ type updateRecordExoscale struct {
|
|||||||
updateDNSRecord egoscale.UpdateDNSRecord
|
updateDNSRecord egoscale.UpdateDNSRecord
|
||||||
}
|
}
|
||||||
|
|
||||||
var createExoscale []createRecordExoscale
|
var (
|
||||||
var deleteExoscale []deleteRecordExoscale
|
createExoscale []createRecordExoscale
|
||||||
var updateExoscale []updateRecordExoscale
|
deleteExoscale []deleteRecordExoscale
|
||||||
|
updateExoscale []updateRecordExoscale
|
||||||
|
)
|
||||||
|
|
||||||
type ExoscaleClientStub struct {
|
type ExoscaleClientStub struct{}
|
||||||
}
|
|
||||||
|
|
||||||
func NewExoscaleClientStub() EgoscaleClientI {
|
func NewExoscaleClientStub() EgoscaleClientI {
|
||||||
ep := &ExoscaleClientStub{}
|
ep := &ExoscaleClientStub{}
|
||||||
@ -59,6 +60,7 @@ func (ep *ExoscaleClientStub) DeleteRecord(ctx context.Context, name string, rec
|
|||||||
deleteExoscale = append(deleteExoscale, deleteRecordExoscale{name: name, recordID: recordID})
|
deleteExoscale = append(deleteExoscale, deleteRecordExoscale{name: name, recordID: recordID})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ep *ExoscaleClientStub) GetRecords(ctx context.Context, name string) ([]egoscale.DNSRecord, error) {
|
func (ep *ExoscaleClientStub) GetRecords(ctx context.Context, name string) ([]egoscale.DNSRecord, error) {
|
||||||
init := []egoscale.DNSRecord{
|
init := []egoscale.DNSRecord{
|
||||||
{ID: 0, Name: "v4.barfoo.com", RecordType: "ALIAS"},
|
{ID: 0, Name: "v4.barfoo.com", RecordType: "ALIAS"},
|
||||||
@ -79,14 +81,17 @@ func (ep *ExoscaleClientStub) GetRecords(ctx context.Context, name string) ([]eg
|
|||||||
|
|
||||||
return rec, nil
|
return rec, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ep *ExoscaleClientStub) UpdateRecord(ctx context.Context, name string, rec egoscale.UpdateDNSRecord) (*egoscale.DNSRecord, error) {
|
func (ep *ExoscaleClientStub) UpdateRecord(ctx context.Context, name string, rec egoscale.UpdateDNSRecord) (*egoscale.DNSRecord, error) {
|
||||||
updateExoscale = append(updateExoscale, updateRecordExoscale{name: name, updateDNSRecord: rec})
|
updateExoscale = append(updateExoscale, updateRecordExoscale{name: name, updateDNSRecord: rec})
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ep *ExoscaleClientStub) CreateRecord(ctx context.Context, name string, rec egoscale.DNSRecord) (*egoscale.DNSRecord, error) {
|
func (ep *ExoscaleClientStub) CreateRecord(ctx context.Context, name string, rec egoscale.DNSRecord) (*egoscale.DNSRecord, error) {
|
||||||
createExoscale = append(createExoscale, createRecordExoscale{name: name, rec: rec})
|
createExoscale = append(createExoscale, createRecordExoscale{name: name, rec: rec})
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ep *ExoscaleClientStub) GetDomains(ctx context.Context) ([]egoscale.DNSDomain, error) {
|
func (ep *ExoscaleClientStub) GetDomains(ctx context.Context) ([]egoscale.DNSDomain, error) {
|
||||||
dom := []egoscale.DNSDomain{
|
dom := []egoscale.DNSDomain{
|
||||||
{ID: 1, Name: "foo.com"},
|
{ID: 1, Name: "foo.com"},
|
||||||
|
@ -16,14 +16,14 @@ package gandi
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/go-gandi/go-gandi/domain"
|
"github.com/go-gandi/go-gandi/domain"
|
||||||
"github.com/go-gandi/go-gandi/livedns"
|
"github.com/go-gandi/go-gandi/livedns"
|
||||||
"github.com/maxatome/go-testdeep/td"
|
"github.com/maxatome/go-testdeep/td"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"os"
|
|
||||||
"reflect"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
@ -62,9 +62,11 @@ func mockGandiClientNewWithFailure(functionToFail string) *mockGandiClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const domainUriPrefix = "https://api.gandi.net/v5/domain/domains/"
|
const (
|
||||||
const exampleDotComUri = domainUriPrefix + "example.com"
|
domainUriPrefix = "https://api.gandi.net/v5/domain/domains/"
|
||||||
const exampleDotNetUri = domainUriPrefix + "example.net"
|
exampleDotComUri = domainUriPrefix + "example.com"
|
||||||
|
exampleDotNetUri = domainUriPrefix + "example.net"
|
||||||
|
)
|
||||||
|
|
||||||
func testRecords() []livedns.DomainRecord {
|
func testRecords() []livedns.DomainRecord {
|
||||||
return []livedns.DomainRecord{
|
return []livedns.DomainRecord{
|
||||||
@ -286,7 +288,6 @@ func TestGandiProvider_TestData(t *testing.T) {
|
|||||||
if !reflect.DeepEqual(expectedRecordsAnswer, testingRecordsAnswer) {
|
if !reflect.DeepEqual(expectedRecordsAnswer, testingRecordsAnswer) {
|
||||||
t.Errorf("should be equal, %s", err)
|
t.Errorf("should be equal, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGandiProvider_Records(t *testing.T) {
|
func TestGandiProvider_Records(t *testing.T) {
|
||||||
@ -319,7 +320,6 @@ func TestGandiProvider_Records(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGandiProvider_RecordsAppliesDomainFilter(t *testing.T) {
|
func TestGandiProvider_RecordsAppliesDomainFilter(t *testing.T) {
|
||||||
|
|
||||||
mockedClient := mockGandiClientNew()
|
mockedClient := mockGandiClientNew()
|
||||||
|
|
||||||
mockedProvider := &GandiProvider{
|
mockedProvider := &GandiProvider{
|
||||||
@ -343,7 +343,6 @@ func TestGandiProvider_RecordsAppliesDomainFilter(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGandiProvider_RecordsErrorOnMultipleValues(t *testing.T) {
|
func TestGandiProvider_RecordsErrorOnMultipleValues(t *testing.T) {
|
||||||
|
|
||||||
mockedClient := mockGandiClientNewWithRecords([]livedns.DomainRecord{
|
mockedClient := mockGandiClientNewWithRecords([]livedns.DomainRecord{
|
||||||
{
|
{
|
||||||
RrsetValues: []string{"foo", "bar"},
|
RrsetValues: []string{"foo", "bar"},
|
||||||
|
@ -259,7 +259,7 @@ func (c *Client) CallAPI(method, path string, reqBody, resType interface{}, need
|
|||||||
// - full serialized request body
|
// - full serialized request body
|
||||||
// - server current time (takes time delta into account)
|
// - server current time (takes time delta into account)
|
||||||
//
|
//
|
||||||
// Context is used by http.Client to handle context cancelation
|
// # Context is used by http.Client to handle context cancelation
|
||||||
//
|
//
|
||||||
// Call will automatically assemble the target url from the endpoint
|
// Call will automatically assemble the target url from the endpoint
|
||||||
// configured in the client instance and the path argument. If the reqBody
|
// configured in the client instance and the path argument. If the reqBody
|
||||||
|
@ -44,10 +44,8 @@ var actionNames = []string{
|
|||||||
"delete",
|
"delete",
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
// ErrRecordToMutateNotFound when ApplyChange has to update/delete and didn't found the record in the existing zone (Change with no record ID)
|
||||||
// ErrRecordToMutateNotFound when ApplyChange has to update/delete and didn't found the record in the existing zone (Change with no record ID)
|
var ErrRecordToMutateNotFound = errors.New("record to mutate not found in current zone")
|
||||||
ErrRecordToMutateNotFound = errors.New("record to mutate not found in current zone")
|
|
||||||
)
|
|
||||||
|
|
||||||
type gdClient interface {
|
type gdClient interface {
|
||||||
Patch(string, interface{}, interface{}) error
|
Patch(string, interface{}, interface{}) error
|
||||||
@ -141,7 +139,6 @@ func (z gdZoneIDName) findZoneRecord(hostname string) (suitableZoneID string, su
|
|||||||
// NewGoDaddyProvider initializes a new GoDaddy DNS based Provider.
|
// NewGoDaddyProvider initializes a new GoDaddy DNS based Provider.
|
||||||
func NewGoDaddyProvider(ctx context.Context, domainFilter endpoint.DomainFilter, ttl int64, apiKey, apiSecret string, useOTE, dryRun bool) (*GDProvider, error) {
|
func NewGoDaddyProvider(ctx context.Context, domainFilter endpoint.DomainFilter, ttl int64, apiKey, apiSecret string, useOTE, dryRun bool) (*GDProvider, error) {
|
||||||
client, err := NewClient(useOTE, apiKey, apiSecret)
|
client, err := NewClient(useOTE, apiKey, apiSecret)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -177,7 +174,6 @@ func (p *GDProvider) zones() ([]string, error) {
|
|||||||
func (p *GDProvider) zonesRecords(ctx context.Context, all bool) ([]string, []gdRecords, error) {
|
func (p *GDProvider) zonesRecords(ctx context.Context, all bool) ([]string, []gdRecords, error) {
|
||||||
var allRecords []gdRecords
|
var allRecords []gdRecords
|
||||||
zones, err := p.zones()
|
zones, err := p.zones()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -186,7 +182,6 @@ func (p *GDProvider) zonesRecords(ctx context.Context, all bool) ([]string, []gd
|
|||||||
allRecords = []gdRecords{}
|
allRecords = []gdRecords{}
|
||||||
} else if len(zones) == 1 {
|
} else if len(zones) == 1 {
|
||||||
record, err := p.records(&ctx, zones[0], all)
|
record, err := p.records(&ctx, zones[0], all)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -201,7 +196,6 @@ func (p *GDProvider) zonesRecords(ctx context.Context, all bool) ([]string, []gd
|
|||||||
zone := zoneName
|
zone := zoneName
|
||||||
eg.Go(func() error {
|
eg.Go(func() error {
|
||||||
record, err := p.records(&ctx, zone, all)
|
record, err := p.records(&ctx, zone, all)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -316,7 +310,6 @@ func (p *GDProvider) groupByNameAndType(zoneRecords []gdRecords) []*endpoint.End
|
|||||||
// Records returns the list of records in all relevant zones.
|
// Records returns the list of records in all relevant zones.
|
||||||
func (p *GDProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) {
|
func (p *GDProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) {
|
||||||
_, records, err := p.zonesRecords(ctx, false)
|
_, records, err := p.zonesRecords(ctx, false)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -390,7 +383,6 @@ func (p *GDProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) er
|
|||||||
}
|
}
|
||||||
|
|
||||||
_, records, err := p.zonesRecords(ctx, true)
|
_, records, err := p.zonesRecords(ctx, true)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -549,7 +541,6 @@ func maxOf(vars ...int64) int64 {
|
|||||||
|
|
||||||
func toString(obj interface{}) string {
|
func toString(obj interface{}) string {
|
||||||
b, err := json.MarshalIndent(obj, "", " ")
|
b, err := json.MarshalIndent(obj, "", " ")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Sprintf("<%v>", err)
|
return fmt.Sprintf("<%v>", err)
|
||||||
}
|
}
|
||||||
|
@ -745,7 +745,6 @@ func newGoogleProviderZoneOverlap(t *testing.T, domainFilter endpoint.DomainFilt
|
|||||||
provider.dryRun = dryRun
|
provider.dryRun = dryRun
|
||||||
|
|
||||||
return provider
|
return provider
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newGoogleProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider {
|
func newGoogleProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, dryRun bool, records []*endpoint.Endpoint) *GoogleProvider {
|
||||||
|
@ -156,7 +156,6 @@ func NewInfobloxProvider(ibStartupCfg StartupConfig) (*ProviderConfig, error) {
|
|||||||
requestor := &ibclient.WapiHttpRequestor{}
|
requestor := &ibclient.WapiHttpRequestor{}
|
||||||
|
|
||||||
client, err := ibclient.NewConnector(hostCfg, authCfg, transportConfig, requestBuilder, requestor)
|
client, err := ibclient.NewConnector(hostCfg, authCfg, transportConfig, requestBuilder, requestor)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -419,7 +419,6 @@ func TestInfobloxRecords(t *testing.T) {
|
|||||||
|
|
||||||
providerCfg := 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 := providerCfg.Records(context.Background())
|
actual, err := providerCfg.Records(context.Background())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -471,7 +470,6 @@ func TestInfobloxAdjustEndpoints(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestInfobloxRecordsReverse(t *testing.T) {
|
func TestInfobloxRecordsReverse(t *testing.T) {
|
||||||
|
|
||||||
client := mockIBConnector{
|
client := mockIBConnector{
|
||||||
mockInfobloxZones: &[]ibclient.ZoneAuth{
|
mockInfobloxZones: &[]ibclient.ZoneAuth{
|
||||||
createMockInfobloxZone("10.0.0.0/24"),
|
createMockInfobloxZone("10.0.0.0/24"),
|
||||||
@ -485,7 +483,6 @@ func TestInfobloxRecordsReverse(t *testing.T) {
|
|||||||
|
|
||||||
providerCfg := 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 := providerCfg.Records(context.Background())
|
actual, err := providerCfg.Records(context.Background())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,7 @@ import (
|
|||||||
"sigs.k8s.io/external-dns/provider"
|
"sigs.k8s.io/external-dns/provider"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var _ provider.Provider = &InMemoryProvider{}
|
||||||
_ provider.Provider = &InMemoryProvider{}
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestInMemoryProvider(t *testing.T) {
|
func TestInMemoryProvider(t *testing.T) {
|
||||||
t.Run("findByType", testInMemoryFindByType)
|
t.Run("findByType", testInMemoryFindByType)
|
||||||
@ -684,20 +682,17 @@ func testInMemoryApplyChanges(t *testing.T) {
|
|||||||
"org": {
|
"org": {
|
||||||
"example.org": []*inMemoryRecord{
|
"example.org": []*inMemoryRecord{
|
||||||
{
|
{
|
||||||
|
|
||||||
Name: "example.org",
|
Name: "example.org",
|
||||||
Target: "8.8.8.8",
|
Target: "8.8.8.8",
|
||||||
Type: endpoint.RecordTypeA,
|
Type: endpoint.RecordTypeA,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
||||||
Name: "example.org",
|
Name: "example.org",
|
||||||
Type: endpoint.RecordTypeTXT,
|
Type: endpoint.RecordTypeTXT,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"foo.org": []*inMemoryRecord{
|
"foo.org": []*inMemoryRecord{
|
||||||
{
|
{
|
||||||
|
|
||||||
Name: "foo.org",
|
Name: "foo.org",
|
||||||
Target: "4.4.4.4",
|
Target: "4.4.4.4",
|
||||||
Type: endpoint.RecordTypeCNAME,
|
Type: endpoint.RecordTypeCNAME,
|
||||||
@ -792,7 +787,6 @@ func testInMemoryApplyChanges(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(ti.title, func(t *testing.T) {
|
t.Run(ti.title, func(t *testing.T) {
|
||||||
|
|
||||||
im := NewInMemoryProvider()
|
im := NewInMemoryProvider()
|
||||||
c := &inMemoryClient{}
|
c := &inMemoryClient{}
|
||||||
c.zones = getInitData()
|
c.zones = getInitData()
|
||||||
|
@ -158,7 +158,6 @@ func (p *LinodeProvider) fetchZones(ctx context.Context) ([]linodego.Domain, err
|
|||||||
var zones []linodego.Domain
|
var zones []linodego.Domain
|
||||||
|
|
||||||
allZones, err := p.Client.ListDomains(ctx, linodego.NewListOptions(0, ""))
|
allZones, err := p.Client.ListDomains(ctx, linodego.NewListOptions(0, ""))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -262,7 +261,6 @@ func (p *LinodeProvider) ApplyChanges(ctx context.Context, changes *plan.Changes
|
|||||||
recordsByZoneID := make(map[string][]linodego.DomainRecord)
|
recordsByZoneID := make(map[string][]linodego.DomainRecord)
|
||||||
|
|
||||||
zones, err := p.fetchZones(ctx)
|
zones, err := p.fetchZones(ctx)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -279,7 +277,6 @@ func (p *LinodeProvider) ApplyChanges(ctx context.Context, changes *plan.Changes
|
|||||||
// Fetch records for each zone
|
// Fetch records for each zone
|
||||||
for _, zone := range zones {
|
for _, zone := range zones {
|
||||||
records, err := p.fetchRecords(ctx, zone.ID)
|
records, err := p.fetchRecords(ctx, zone.ID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -322,7 +319,6 @@ func (p *LinodeProvider) ApplyChanges(ctx context.Context, changes *plan.Changes
|
|||||||
}
|
}
|
||||||
|
|
||||||
recordType, err := convertRecordType(ep.RecordType)
|
recordType, err := convertRecordType(ep.RecordType)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -371,7 +367,6 @@ func (p *LinodeProvider) ApplyChanges(ctx context.Context, changes *plan.Changes
|
|||||||
}
|
}
|
||||||
|
|
||||||
recordType, err := convertRecordType(ep.RecordType)
|
recordType, err := convertRecordType(ep.RecordType)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -43,14 +43,17 @@ func (m *MockDomainClient) ListDomains(ctx context.Context, opts *linodego.ListO
|
|||||||
args := m.Called(ctx, opts)
|
args := m.Called(ctx, opts)
|
||||||
return args.Get(0).([]linodego.Domain), args.Error(1)
|
return args.Get(0).([]linodego.Domain), args.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockDomainClient) CreateDomainRecord(ctx context.Context, domainID int, opts linodego.DomainRecordCreateOptions) (*linodego.DomainRecord, error) {
|
func (m *MockDomainClient) CreateDomainRecord(ctx context.Context, domainID int, opts linodego.DomainRecordCreateOptions) (*linodego.DomainRecord, error) {
|
||||||
args := m.Called(ctx, domainID, opts)
|
args := m.Called(ctx, domainID, opts)
|
||||||
return args.Get(0).(*linodego.DomainRecord), args.Error(1)
|
return args.Get(0).(*linodego.DomainRecord), args.Error(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockDomainClient) DeleteDomainRecord(ctx context.Context, domainID int, recordID int) error {
|
func (m *MockDomainClient) DeleteDomainRecord(ctx context.Context, domainID int, recordID int) error {
|
||||||
args := m.Called(ctx, domainID, recordID)
|
args := m.Called(ctx, domainID, recordID)
|
||||||
return args.Error(0)
|
return args.Error(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockDomainClient) UpdateDomainRecord(ctx context.Context, domainID int, recordID int, opts linodego.DomainRecordUpdateOptions) (*linodego.DomainRecord, error) {
|
func (m *MockDomainClient) UpdateDomainRecord(ctx context.Context, domainID int, recordID int, opts linodego.DomainRecordUpdateOptions) (*linodego.DomainRecord, error) {
|
||||||
args := m.Called(ctx, domainID, recordID, opts)
|
args := m.Called(ctx, domainID, recordID, opts)
|
||||||
return args.Get(0).(*linodego.DomainRecord), args.Error(1)
|
return args.Get(0).(*linodego.DomainRecord), args.Error(1)
|
||||||
|
@ -184,7 +184,7 @@ func (p *NS1Provider) ns1BuildRecord(zoneName string, change *ns1Change) *dns.Re
|
|||||||
record.AddAnswer(dns.NewAnswer(strings.Split(v, " ")))
|
record.AddAnswer(dns.NewAnswer(strings.Split(v, " ")))
|
||||||
}
|
}
|
||||||
// set default ttl, but respect minTTLSeconds
|
// set default ttl, but respect minTTLSeconds
|
||||||
var ttl = ns1DefaultTTL
|
ttl := ns1DefaultTTL
|
||||||
if p.minTTLSeconds > ttl {
|
if p.minTTLSeconds > ttl {
|
||||||
ttl = p.minTTLSeconds
|
ttl = p.minTTLSeconds
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,8 @@ func (c *mockOCIDNSClient) GetZoneRecords(ctx context.Context, request dns.GetZo
|
|||||||
}}
|
}}
|
||||||
response.OpcNextPage = common.String("1")
|
response.OpcNextPage = common.String("1")
|
||||||
} else {
|
} else {
|
||||||
response.Items = []dns.Record{{Domain: common.String("bar.foo.com"),
|
response.Items = []dns.Record{{
|
||||||
|
Domain: common.String("bar.foo.com"),
|
||||||
Rdata: common.String("bar.com."),
|
Rdata: common.String("bar.com."),
|
||||||
Rtype: common.String(endpoint.RecordTypeCNAME),
|
Rtype: common.String(endpoint.RecordTypeCNAME),
|
||||||
Ttl: common.Int(ociRecordTTL),
|
Ttl: common.Int(ociRecordTTL),
|
||||||
|
@ -257,7 +257,7 @@ func NewPDNSProvider(ctx context.Context, config PDNSConfig) (*PDNSProvider, err
|
|||||||
|
|
||||||
func (p *PDNSProvider) convertRRSetToEndpoints(rr pgo.RrSet) (endpoints []*endpoint.Endpoint, _ error) {
|
func (p *PDNSProvider) convertRRSetToEndpoints(rr pgo.RrSet) (endpoints []*endpoint.Endpoint, _ error) {
|
||||||
endpoints = []*endpoint.Endpoint{}
|
endpoints = []*endpoint.Endpoint{}
|
||||||
var targets = []string{}
|
targets := []string{}
|
||||||
|
|
||||||
for _, record := range rr.Records {
|
for _, record := range rr.Records {
|
||||||
// If a record is "Disabled", it's not supposed to be "visible"
|
// If a record is "Disabled", it's not supposed to be "visible"
|
||||||
|
@ -540,18 +540,20 @@ var (
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
// API that returns a zone with multiple record types
|
// API that returns a zone with multiple record types
|
||||||
type PDNSAPIClientStub struct {
|
type PDNSAPIClientStub struct{}
|
||||||
}
|
|
||||||
|
|
||||||
func (c *PDNSAPIClientStub) ListZones() ([]pgo.Zone, *http.Response, error) {
|
func (c *PDNSAPIClientStub) ListZones() ([]pgo.Zone, *http.Response, error) {
|
||||||
return []pgo.Zone{ZoneMixed}, nil, nil
|
return []pgo.Zone{ZoneMixed}, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PDNSAPIClientStub) PartitionZones(zones []pgo.Zone) ([]pgo.Zone, []pgo.Zone) {
|
func (c *PDNSAPIClientStub) PartitionZones(zones []pgo.Zone) ([]pgo.Zone, []pgo.Zone) {
|
||||||
return zones, nil
|
return zones, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PDNSAPIClientStub) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
func (c *PDNSAPIClientStub) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
||||||
return ZoneMixed, nil, nil
|
return ZoneMixed, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PDNSAPIClientStub) PatchZone(zoneID string, zoneStruct pgo.Zone) (*http.Response, error) {
|
func (c *PDNSAPIClientStub) PatchZone(zoneID string, zoneStruct pgo.Zone) (*http.Response, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
@ -566,11 +568,12 @@ type PDNSAPIClientStubEmptyZones struct {
|
|||||||
func (c *PDNSAPIClientStubEmptyZones) ListZones() ([]pgo.Zone, *http.Response, error) {
|
func (c *PDNSAPIClientStubEmptyZones) ListZones() ([]pgo.Zone, *http.Response, error) {
|
||||||
return []pgo.Zone{ZoneEmpty, ZoneEmptyLong, ZoneEmpty2}, nil, nil
|
return []pgo.Zone{ZoneEmpty, ZoneEmptyLong, ZoneEmpty2}, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PDNSAPIClientStubEmptyZones) PartitionZones(zones []pgo.Zone) ([]pgo.Zone, []pgo.Zone) {
|
func (c *PDNSAPIClientStubEmptyZones) PartitionZones(zones []pgo.Zone) ([]pgo.Zone, []pgo.Zone) {
|
||||||
return zones, nil
|
return zones, nil
|
||||||
}
|
}
|
||||||
func (c *PDNSAPIClientStubEmptyZones) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
|
||||||
|
|
||||||
|
func (c *PDNSAPIClientStubEmptyZones) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
||||||
if strings.Contains(zoneID, "example.com") {
|
if strings.Contains(zoneID, "example.com") {
|
||||||
return ZoneEmpty, nil, nil
|
return ZoneEmpty, nil, nil
|
||||||
} else if strings.Contains(zoneID, "mock.test") {
|
} else if strings.Contains(zoneID, "mock.test") {
|
||||||
@ -579,8 +582,8 @@ func (c *PDNSAPIClientStubEmptyZones) ListZone(zoneID string) (pgo.Zone, *http.R
|
|||||||
return ZoneEmptyLong, nil, nil
|
return ZoneEmptyLong, nil, nil
|
||||||
}
|
}
|
||||||
return pgo.Zone{}, nil, nil
|
return pgo.Zone{}, nil, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *PDNSAPIClientStubEmptyZones) PatchZone(zoneID string, zoneStruct pgo.Zone) (*http.Response, error) {
|
func (c *PDNSAPIClientStubEmptyZones) PatchZone(zoneID string, zoneStruct pgo.Zone) (*http.Response, error) {
|
||||||
c.patchedZones = append(c.patchedZones, zoneStruct)
|
c.patchedZones = append(c.patchedZones, zoneStruct)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
@ -608,7 +611,6 @@ type PDNSAPIClientStubListZoneFailure struct {
|
|||||||
// Just overwrite the ListZone method to introduce a failure
|
// Just overwrite the ListZone method to introduce a failure
|
||||||
func (c *PDNSAPIClientStubListZoneFailure) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
func (c *PDNSAPIClientStubListZoneFailure) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
||||||
return pgo.Zone{}, nil, errors.New("Generic PDNS Error")
|
return pgo.Zone{}, nil, errors.New("Generic PDNS Error")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
@ -635,7 +637,6 @@ func (c *PDNSAPIClientStubPartitionZones) ListZones() ([]pgo.Zone, *http.Respons
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *PDNSAPIClientStubPartitionZones) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
func (c *PDNSAPIClientStubPartitionZones) ListZone(zoneID string) (pgo.Zone, *http.Response, error) {
|
||||||
|
|
||||||
if strings.Contains(zoneID, "example.com") {
|
if strings.Contains(zoneID, "example.com") {
|
||||||
return ZoneEmpty, nil, nil
|
return ZoneEmpty, nil, nil
|
||||||
} else if strings.Contains(zoneID, "mock.test") {
|
} else if strings.Contains(zoneID, "mock.test") {
|
||||||
@ -651,7 +652,6 @@ func (c *PDNSAPIClientStubPartitionZones) ListZone(zoneID string) (pgo.Zone, *ht
|
|||||||
// Just overwrite the ListZones method to introduce a failure
|
// Just overwrite the ListZones method to introduce a failure
|
||||||
func (c *PDNSAPIClientStubPartitionZones) PartitionZones(zones []pgo.Zone) ([]pgo.Zone, []pgo.Zone) {
|
func (c *PDNSAPIClientStubPartitionZones) PartitionZones(zones []pgo.Zone) ([]pgo.Zone, []pgo.Zone) {
|
||||||
return []pgo.Zone{ZoneEmpty}, []pgo.Zone{ZoneEmptyLong, ZoneEmpty2}
|
return []pgo.Zone{ZoneEmpty}, []pgo.Zone{ZoneEmptyLong, ZoneEmpty2}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
@ -661,7 +661,6 @@ type NewPDNSProviderTestSuite struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreate() {
|
func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreate() {
|
||||||
|
|
||||||
_, err := NewPDNSProvider(
|
_, err := NewPDNSProvider(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
PDNSConfig{
|
PDNSConfig{
|
||||||
@ -701,7 +700,6 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
|
func (suite *NewPDNSProviderTestSuite) TestPDNSProviderCreateTLS() {
|
||||||
|
|
||||||
_, err := NewPDNSProvider(
|
_, err := NewPDNSProvider(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
PDNSConfig{
|
PDNSConfig{
|
||||||
@ -829,7 +827,6 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSRRSetToEndpoints() {
|
|||||||
eps, err = p.convertRRSetToEndpoints(RRSetDisabledRecord)
|
eps, err = p.convertRRSetToEndpoints(RRSetDisabledRecord)
|
||||||
assert.Nil(suite.T(), err)
|
assert.Nil(suite.T(), err)
|
||||||
assert.Equal(suite.T(), endpointsDisabledRecord, eps)
|
assert.Equal(suite.T(), endpointsDisabledRecord, eps)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *NewPDNSProviderTestSuite) TestPDNSRecords() {
|
func (suite *NewPDNSProviderTestSuite) TestPDNSRecords() {
|
||||||
@ -861,7 +858,6 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSRecords() {
|
|||||||
}
|
}
|
||||||
_, err = p.Records(ctx)
|
_, err = p.Records(ctx)
|
||||||
assert.NotNil(suite.T(), err)
|
assert.NotNil(suite.T(), err)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *NewPDNSProviderTestSuite) TestPDNSConvertEndpointsToZones() {
|
func (suite *NewPDNSProviderTestSuite) TestPDNSConvertEndpointsToZones() {
|
||||||
@ -996,7 +992,6 @@ func (suite *NewPDNSProviderTestSuite) TestPDNSmutateRecords() {
|
|||||||
// Check inserting endpoints from a single zone
|
// Check inserting endpoints from a single zone
|
||||||
err = p.mutateRecords(endpointsSimpleRecord, pdnsChangeType("REPLACE"))
|
err = p.mutateRecords(endpointsSimpleRecord, pdnsChangeType("REPLACE"))
|
||||||
assert.NotNil(suite.T(), err)
|
assert.NotNil(suite.T(), err)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *NewPDNSProviderTestSuite) TestPDNSClientPartitionZones() {
|
func (suite *NewPDNSProviderTestSuite) TestPDNSClientPartitionZones() {
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"sigs.k8s.io/external-dns/endpoint"
|
"sigs.k8s.io/external-dns/endpoint"
|
||||||
"sigs.k8s.io/external-dns/plan"
|
"sigs.k8s.io/external-dns/plan"
|
||||||
"sigs.k8s.io/external-dns/provider"
|
"sigs.k8s.io/external-dns/provider"
|
||||||
|
@ -70,7 +70,6 @@ func newPluralProvider(pluralDNSRecord []*DnsRecord) *PluralProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPluralRecords(t *testing.T) {
|
func TestPluralRecords(t *testing.T) {
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
expectedEndpoints []*endpoint.Endpoint
|
expectedEndpoints []*endpoint.Endpoint
|
||||||
@ -136,11 +135,9 @@ func TestPluralRecords(t *testing.T) {
|
|||||||
validateEndpoints(t, actual, test.expectedEndpoints)
|
validateEndpoints(t, actual, test.expectedEndpoints)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPluralApplyChangesCreate(t *testing.T) {
|
func TestPluralApplyChangesCreate(t *testing.T) {
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
expectedEndpoints []*endpoint.Endpoint
|
expectedEndpoints []*endpoint.Endpoint
|
||||||
@ -198,7 +195,6 @@ func TestPluralApplyChangesCreate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPluralApplyChangesDelete(t *testing.T) {
|
func TestPluralApplyChangesDelete(t *testing.T) {
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
records []*DnsRecord
|
records []*DnsRecord
|
||||||
|
@ -34,8 +34,7 @@ type Provider interface {
|
|||||||
GetDomainFilter() endpoint.DomainFilterInterface
|
GetDomainFilter() endpoint.DomainFilterInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
type BaseProvider struct {
|
type BaseProvider struct{}
|
||||||
}
|
|
||||||
|
|
||||||
func (b BaseProvider) AdjustEndpoints(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint {
|
func (b BaseProvider) AdjustEndpoints(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint {
|
||||||
return endpoints
|
return endpoints
|
||||||
|
@ -47,7 +47,6 @@ type RcodeZeroProvider struct {
|
|||||||
// Returns the provider or an error if a provider could not be created.
|
// Returns the provider or an error if a provider could not be created.
|
||||||
func NewRcodeZeroProvider(domainFilter endpoint.DomainFilter, dryRun bool, txtEnc bool) (*RcodeZeroProvider, error) {
|
func NewRcodeZeroProvider(domainFilter endpoint.DomainFilter, dryRun bool, txtEnc bool) (*RcodeZeroProvider, error) {
|
||||||
client, err := rc0.NewClient(os.Getenv("RC0_API_KEY"))
|
client, err := rc0.NewClient(os.Getenv("RC0_API_KEY"))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -106,7 +105,6 @@ func (p *RcodeZeroProvider) Records(ctx context.Context) ([]*endpoint.Endpoint,
|
|||||||
|
|
||||||
for _, zone := range zones {
|
for _, zone := range zones {
|
||||||
rrset, err := p.fetchRecords(zone.Domain)
|
rrset, err := p.fetchRecords(zone.Domain)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -172,7 +170,6 @@ func (p *RcodeZeroProvider) fetchRecords(zoneName string) ([]*rc0.RRType, error)
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
records, page, err := p.Client.RRSet.List(zoneName, listOptions)
|
records, page, err := p.Client.RRSet.List(zoneName, listOptions)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -249,7 +246,6 @@ func (p *RcodeZeroProvider) submitChanges(changes []*rc0.RRSetChange) error {
|
|||||||
switch change.ChangeType {
|
switch change.ChangeType {
|
||||||
case rc0.ChangeTypeADD:
|
case rc0.ChangeTypeADD:
|
||||||
sr, err := p.Client.RRSet.Create(zoneName, []*rc0.RRSetChange{change})
|
sr, err := p.Client.RRSet.Create(zoneName, []*rc0.RRSetChange{change})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -260,7 +256,6 @@ func (p *RcodeZeroProvider) submitChanges(changes []*rc0.RRSetChange) error {
|
|||||||
|
|
||||||
case rc0.ChangeTypeUPDATE:
|
case rc0.ChangeTypeUPDATE:
|
||||||
sr, err := p.Client.RRSet.Edit(zoneName, []*rc0.RRSetChange{change})
|
sr, err := p.Client.RRSet.Edit(zoneName, []*rc0.RRSetChange{change})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -271,7 +266,6 @@ func (p *RcodeZeroProvider) submitChanges(changes []*rc0.RRSetChange) error {
|
|||||||
|
|
||||||
case rc0.ChangeTypeDELETE:
|
case rc0.ChangeTypeDELETE:
|
||||||
sr, err := p.Client.RRSet.Delete(zoneName, []*rc0.RRSetChange{change})
|
sr, err := p.Client.RRSet.Delete(zoneName, []*rc0.RRSetChange{change})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,6 @@ func (m *mockZoneManagementService) resetTestConditions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRcodeZeroProvider_Records(t *testing.T) {
|
func TestRcodeZeroProvider_Records(t *testing.T) {
|
||||||
|
|
||||||
mockRRSetService := &mockRRSetService{}
|
mockRRSetService := &mockRRSetService{}
|
||||||
mockZoneManagementService := &mockZoneManagementService{}
|
mockZoneManagementService := &mockZoneManagementService{}
|
||||||
|
|
||||||
@ -67,7 +66,6 @@ func TestRcodeZeroProvider_Records(t *testing.T) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
endpoints, err := provider.Records(ctx) // should return 6 rrs
|
endpoints, err := provider.Records(ctx) // should return 6 rrs
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("should not fail, %s", err)
|
t.Errorf("should not fail, %s", err)
|
||||||
}
|
}
|
||||||
@ -79,11 +77,9 @@ func TestRcodeZeroProvider_Records(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("expected to fail, %s", err)
|
t.Errorf("expected to fail, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRcodeZeroProvider_ApplyChanges(t *testing.T) {
|
func TestRcodeZeroProvider_ApplyChanges(t *testing.T) {
|
||||||
|
|
||||||
mockRRSetService := &mockRRSetService{}
|
mockRRSetService := &mockRRSetService{}
|
||||||
mockZoneManagementService := &mockZoneManagementService{}
|
mockZoneManagementService := &mockZoneManagementService{}
|
||||||
|
|
||||||
@ -98,15 +94,12 @@ func TestRcodeZeroProvider_ApplyChanges(t *testing.T) {
|
|||||||
changes := mockChanges()
|
changes := mockChanges()
|
||||||
|
|
||||||
err := provider.ApplyChanges(context.Background(), changes)
|
err := provider.ApplyChanges(context.Background(), changes)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("should not fail, %s", err)
|
t.Errorf("should not fail, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRcodeZeroProvider_NewRcodezeroChanges(t *testing.T) {
|
func TestRcodeZeroProvider_NewRcodezeroChanges(t *testing.T) {
|
||||||
|
|
||||||
provider := &RcodeZeroProvider{}
|
provider := &RcodeZeroProvider{}
|
||||||
|
|
||||||
changes := mockChanges()
|
changes := mockChanges()
|
||||||
@ -125,7 +118,6 @@ func TestRcodeZeroProvider_NewRcodezeroChanges(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRcodeZeroProvider_NewRcodezeroChange(t *testing.T) {
|
func TestRcodeZeroProvider_NewRcodezeroChange(t *testing.T) {
|
||||||
|
|
||||||
_endpoint := &endpoint.Endpoint{
|
_endpoint := &endpoint.Endpoint{
|
||||||
RecordType: "A",
|
RecordType: "A",
|
||||||
DNSName: "app." + testZoneOne,
|
DNSName: "app." + testZoneOne,
|
||||||
@ -140,12 +132,10 @@ func TestRcodeZeroProvider_NewRcodezeroChange(t *testing.T) {
|
|||||||
require.Equal(t, _endpoint.RecordType, rrsetChange.Type)
|
require.Equal(t, _endpoint.RecordType, rrsetChange.Type)
|
||||||
require.Equal(t, _endpoint.DNSName, rrsetChange.Name)
|
require.Equal(t, _endpoint.DNSName, rrsetChange.Name)
|
||||||
require.Equal(t, _endpoint.Targets[0], rrsetChange.Records[0].Content)
|
require.Equal(t, _endpoint.Targets[0], rrsetChange.Records[0].Content)
|
||||||
//require.Equal(t, endpoint.RecordTTL, rrsetChange.TTL)
|
// require.Equal(t, endpoint.RecordTTL, rrsetChange.TTL)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_submitChanges(t *testing.T) {
|
func Test_submitChanges(t *testing.T) {
|
||||||
|
|
||||||
mockRRSetService := &mockRRSetService{}
|
mockRRSetService := &mockRRSetService{}
|
||||||
mockZoneManagementService := &mockZoneManagementService{}
|
mockZoneManagementService := &mockZoneManagementService{}
|
||||||
|
|
||||||
@ -164,11 +154,9 @@ func Test_submitChanges(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("expected to fail, %s", err)
|
t.Errorf("expected to fail, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func mockRRSetChanges(condition int) []*rc0.RRSetChange {
|
func mockRRSetChanges(condition int) []*rc0.RRSetChange {
|
||||||
|
|
||||||
switch condition {
|
switch condition {
|
||||||
case rrsetChangesUnsupportedChangeType:
|
case rrsetChangesUnsupportedChangeType:
|
||||||
return []*rc0.RRSetChange{
|
return []*rc0.RRSetChange{
|
||||||
@ -185,7 +173,6 @@ func mockRRSetChanges(condition int) []*rc0.RRSetChange {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func mockChanges() *plan.Changes {
|
func mockChanges() *plan.Changes {
|
||||||
|
|
||||||
changes := &plan.Changes{}
|
changes := &plan.Changes{}
|
||||||
|
|
||||||
changes.Create = []*endpoint.Endpoint{
|
changes.Create = []*endpoint.Endpoint{
|
||||||
@ -202,7 +189,6 @@ func mockChanges() *plan.Changes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRcodeZeroProvider_Zones(t *testing.T) {
|
func TestRcodeZeroProvider_Zones(t *testing.T) {
|
||||||
|
|
||||||
mockRRSetService := &mockRRSetService{}
|
mockRRSetService := &mockRRSetService{}
|
||||||
mockZoneManagementService := &mockZoneManagementService{}
|
mockZoneManagementService := &mockZoneManagementService{}
|
||||||
|
|
||||||
@ -216,7 +202,6 @@ func TestRcodeZeroProvider_Zones(t *testing.T) {
|
|||||||
mockZoneManagementService.TestNilZonesReturned = true
|
mockZoneManagementService.TestNilZonesReturned = true
|
||||||
|
|
||||||
zones, err := provider.Zones()
|
zones, err := provider.Zones()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -229,14 +214,11 @@ func TestRcodeZeroProvider_Zones(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("expected to fail, %s", err)
|
t.Errorf("expected to fail, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewRcodeZeroProvider(t *testing.T) {
|
func TestNewRcodeZeroProvider(t *testing.T) {
|
||||||
|
|
||||||
_ = os.Setenv("RC0_API_KEY", "123")
|
_ = os.Setenv("RC0_API_KEY", "123")
|
||||||
p, err := NewRcodeZeroProvider(endpoint.NewDomainFilter([]string{"ext-dns-test." + testZoneOne + "."}), true, true)
|
p, err := NewRcodeZeroProvider(endpoint.NewDomainFilter([]string{"ext-dns-test." + testZoneOne + "."}), true, true)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("should not fail, %s", err)
|
t.Errorf("should not fail, %s", err)
|
||||||
}
|
}
|
||||||
@ -262,13 +244,11 @@ func TestNewRcodeZeroProvider(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("expected to fail")
|
t.Errorf("expected to fail")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mocking mockRRSetServiceInterface */
|
/* mocking mockRRSetServiceInterface */
|
||||||
|
|
||||||
func (m *mockRRSetService) List(zone string, options *rc0.ListOptions) ([]*rc0.RRType, *rc0.Page, error) {
|
func (m *mockRRSetService) List(zone string, options *rc0.ListOptions) ([]*rc0.RRType, *rc0.Page, error) {
|
||||||
|
|
||||||
if m.TestErrorReturned {
|
if m.TestErrorReturned {
|
||||||
return nil, nil, fmt.Errorf("operation RRSet.List failed")
|
return nil, nil, fmt.Errorf("operation RRSet.List failed")
|
||||||
}
|
}
|
||||||
@ -341,20 +321,18 @@ func mockRRSet(zone string) []*rc0.RRType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockRRSetService) Create(zone string, rrsetCreate []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
func (m *mockRRSetService) Create(zone string, rrsetCreate []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
||||||
|
|
||||||
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockRRSetService) Edit(zone string, rrsetEdit []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
func (m *mockRRSetService) Edit(zone string, rrsetEdit []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
||||||
|
|
||||||
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockRRSetService) Delete(zone string, rrsetDelete []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
func (m *mockRRSetService) Delete(zone string, rrsetDelete []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
||||||
|
|
||||||
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
||||||
}
|
}
|
||||||
func (m *mockRRSetService) SubmitChangeSet(zone string, changeSet []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
|
||||||
|
|
||||||
|
func (m *mockRRSetService) SubmitChangeSet(zone string, changeSet []*rc0.RRSetChange) (*rc0.StatusResponse, error) {
|
||||||
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +343,6 @@ func (m *mockRRSetService) DecryptTXT(key []byte, rrType *rc0.RRType) {}
|
|||||||
/* mocking ZoneManagementServiceInterface */
|
/* mocking ZoneManagementServiceInterface */
|
||||||
|
|
||||||
func (m *mockZoneManagementService) List(options *rc0.ListOptions) ([]*rc0.Zone, *rc0.Page, error) {
|
func (m *mockZoneManagementService) List(options *rc0.ListOptions) ([]*rc0.Zone, *rc0.Page, error) {
|
||||||
|
|
||||||
if m.TestNilZonesReturned {
|
if m.TestNilZonesReturned {
|
||||||
return nil, nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
@ -407,6 +384,7 @@ func (m *mockZoneManagementService) Get(zone string) (*rc0.Zone, error) { return
|
|||||||
func (m *mockZoneManagementService) Create(zoneCreate *rc0.ZoneCreate) (*rc0.StatusResponse, error) {
|
func (m *mockZoneManagementService) Create(zoneCreate *rc0.ZoneCreate) (*rc0.StatusResponse, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockZoneManagementService) Edit(zone string, zoneEdit *rc0.ZoneEdit) (*rc0.StatusResponse, error) {
|
func (m *mockZoneManagementService) Edit(zone string, zoneEdit *rc0.ZoneEdit) (*rc0.StatusResponse, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
@ -282,7 +282,6 @@ func TestRDNSApplyChanges(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
client.validateRecords(client.rs, expectedRecords3, t)
|
client.validateRecords(client.rs, expectedRecords3, t)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c fakeEtcdv3Client) aggregationRecords(result *clientv3.GetResponse) ([]RDNSRecord, error) {
|
func (c fakeEtcdv3Client) aggregationRecords(result *clientv3.GetResponse) ([]RDNSRecord, error) {
|
||||||
|
@ -19,7 +19,7 @@ package provider
|
|||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
func TestRecordTypeFilter(t *testing.T) {
|
func TestRecordTypeFilter(t *testing.T) {
|
||||||
var records = []struct {
|
records := []struct {
|
||||||
rtype string
|
rtype string
|
||||||
expect bool
|
expect bool
|
||||||
}{
|
}{
|
||||||
|
@ -69,17 +69,15 @@ type rfc2136Provider struct {
|
|||||||
actions rfc2136Actions
|
actions rfc2136Actions
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
// Map of supported TSIG algorithms
|
||||||
// Map of supported TSIG algorithms
|
var tsigAlgs = map[string]string{
|
||||||
tsigAlgs = map[string]string{
|
|
||||||
"hmac-md5": dns.HmacMD5,
|
"hmac-md5": dns.HmacMD5,
|
||||||
"hmac-sha1": dns.HmacSHA1,
|
"hmac-sha1": dns.HmacSHA1,
|
||||||
"hmac-sha224": dns.HmacSHA224,
|
"hmac-sha224": dns.HmacSHA224,
|
||||||
"hmac-sha256": dns.HmacSHA256,
|
"hmac-sha256": dns.HmacSHA256,
|
||||||
"hmac-sha384": dns.HmacSHA384,
|
"hmac-sha384": dns.HmacSHA384,
|
||||||
"hmac-sha512": dns.HmacSHA512,
|
"hmac-sha512": dns.HmacSHA512,
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
|
||||||
type rfc2136Actions interface {
|
type rfc2136Actions interface {
|
||||||
SendMessage(msg *dns.Msg) error
|
SendMessage(msg *dns.Msg) error
|
||||||
@ -347,7 +345,7 @@ func (r rfc2136Provider) UpdateRecord(m *dns.Msg, oldEp *endpoint.Endpoint, newE
|
|||||||
func (r rfc2136Provider) AddRecord(m *dns.Msg, ep *endpoint.Endpoint) error {
|
func (r rfc2136Provider) AddRecord(m *dns.Msg, ep *endpoint.Endpoint) error {
|
||||||
log.Debugf("AddRecord.ep=%s", ep)
|
log.Debugf("AddRecord.ep=%s", ep)
|
||||||
|
|
||||||
var ttl = int64(r.minTTL.Seconds())
|
ttl := int64(r.minTTL.Seconds())
|
||||||
if ep.RecordTTL.IsConfigured() && int64(ep.RecordTTL) > ttl {
|
if ep.RecordTTL.IsConfigured() && int64(ep.RecordTTL) > ttl {
|
||||||
ttl = int64(ep.RecordTTL)
|
ttl = int64(ep.RecordTTL)
|
||||||
}
|
}
|
||||||
|
@ -208,7 +208,6 @@ func TestRfc2136ApplyChanges(t *testing.T) {
|
|||||||
assert.Equal(t, 2, len(stub.updateMsgs))
|
assert.Equal(t, 2, len(stub.updateMsgs))
|
||||||
assert.True(t, strings.Contains(stub.updateMsgs[0].String(), "v2.foo.com"))
|
assert.True(t, strings.Contains(stub.updateMsgs[0].String(), "v2.foo.com"))
|
||||||
assert.True(t, strings.Contains(stub.updateMsgs[1].String(), "v2.foobar.com"))
|
assert.True(t, strings.Contains(stub.updateMsgs[1].String(), "v2.foobar.com"))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRfc2136ApplyChangesWithDifferentTTLs(t *testing.T) {
|
func TestRfc2136ApplyChangesWithDifferentTTLs(t *testing.T) {
|
||||||
@ -253,7 +252,6 @@ func TestRfc2136ApplyChangesWithDifferentTTLs(t *testing.T) {
|
|||||||
assert.True(t, strings.Contains(createRecords[2], "v3.foo.com"))
|
assert.True(t, strings.Contains(createRecords[2], "v3.foo.com"))
|
||||||
assert.True(t, strings.Contains(createRecords[2], "4.3.3.3"))
|
assert.True(t, strings.Contains(createRecords[2], "4.3.3.3"))
|
||||||
assert.True(t, strings.Contains(createRecords[2], "300"))
|
assert.True(t, strings.Contains(createRecords[2], "300"))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRfc2136ApplyChangesWithUpdate(t *testing.T) {
|
func TestRfc2136ApplyChangesWithUpdate(t *testing.T) {
|
||||||
@ -331,7 +329,6 @@ func TestRfc2136ApplyChangesWithUpdate(t *testing.T) {
|
|||||||
|
|
||||||
assert.True(t, strings.Contains(stub.updateMsgs[1].String(), "v1.foobar.com"))
|
assert.True(t, strings.Contains(stub.updateMsgs[1].String(), "v1.foobar.com"))
|
||||||
assert.True(t, strings.Contains(stub.updateMsgs[1].String(), "boom"))
|
assert.True(t, strings.Contains(stub.updateMsgs[1].String(), "boom"))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestChunkBy(t *testing.T) {
|
func TestChunkBy(t *testing.T) {
|
||||||
|
@ -272,11 +272,11 @@ func getCompleteZoneName(zone *domain.DNSZone) string {
|
|||||||
|
|
||||||
func endpointToScalewayRecords(zoneName string, ep *endpoint.Endpoint) []*domain.Record {
|
func endpointToScalewayRecords(zoneName string, ep *endpoint.Endpoint) []*domain.Record {
|
||||||
// no annotation results in a TTL of 0, default to 300 for consistency with other providers
|
// no annotation results in a TTL of 0, default to 300 for consistency with other providers
|
||||||
var ttl = scalewyRecordTTL
|
ttl := scalewyRecordTTL
|
||||||
if ep.RecordTTL.IsConfigured() {
|
if ep.RecordTTL.IsConfigured() {
|
||||||
ttl = uint32(ep.RecordTTL)
|
ttl = uint32(ep.RecordTTL)
|
||||||
}
|
}
|
||||||
var priority = scalewayDefaultPriority
|
priority := scalewayDefaultPriority
|
||||||
if prop, ok := ep.GetProviderSpecificProperty(scalewayPriorityKey); ok {
|
if prop, ok := ep.GetProviderSpecificProperty(scalewayPriorityKey); ok {
|
||||||
prio, err := strconv.ParseUint(prop.Value, 10, 32)
|
prio, err := strconv.ParseUint(prop.Value, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -265,7 +265,7 @@ func APIRecord(apiAction Action, request string, response string) {
|
|||||||
message := fmt.Sprintf("APIRecord API: %s/%s Request: %s, Response: %s", apiAction.Service, apiAction.Name, request, response)
|
message := fmt.Sprintf("APIRecord API: %s/%s Request: %s, Response: %s", apiAction.Service, apiAction.Name, request, response)
|
||||||
|
|
||||||
if apiAction.ReadOnly {
|
if apiAction.ReadOnly {
|
||||||
//log.Infof(message)
|
// log.Infof(message)
|
||||||
} else {
|
} else {
|
||||||
log.Infof(message)
|
log.Infof(message)
|
||||||
}
|
}
|
||||||
|
@ -18,21 +18,22 @@ package tencentcloud
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
|
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
|
||||||
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
|
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
|
||||||
"sigs.k8s.io/external-dns/endpoint"
|
"sigs.k8s.io/external-dns/endpoint"
|
||||||
"sigs.k8s.io/external-dns/plan"
|
"sigs.k8s.io/external-dns/plan"
|
||||||
"sigs.k8s.io/external-dns/provider"
|
"sigs.k8s.io/external-dns/provider"
|
||||||
"sigs.k8s.io/external-dns/provider/tencentcloud/cloudapi"
|
"sigs.k8s.io/external-dns/provider/tencentcloud/cloudapi"
|
||||||
"testing"
|
|
||||||
|
|
||||||
privatedns "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns/v20201028"
|
privatedns "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns/v20201028"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewMockTencentCloudProvider(domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneType string) *TencentCloudProvider {
|
func NewMockTencentCloudProvider(domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneType string) *TencentCloudProvider {
|
||||||
cfg := tencentCloudConfig{
|
cfg := tencentCloudConfig{
|
||||||
//SecretId: "",
|
// SecretId: "",
|
||||||
//SecretKey: "",
|
// SecretKey: "",
|
||||||
RegionId: "ap-shanghai",
|
RegionId: "ap-shanghai",
|
||||||
VPCId: "vpc-abcdefg",
|
VPCId: "vpc-abcdefg",
|
||||||
}
|
}
|
||||||
|
@ -41,11 +41,14 @@ const (
|
|||||||
|
|
||||||
// global variables
|
// global variables
|
||||||
var sbPoolRunProbes = true
|
var sbPoolRunProbes = true
|
||||||
var sbPoolActOnProbes = true
|
|
||||||
var ultradnsPoolType = "rdpool"
|
|
||||||
var accountName string
|
|
||||||
|
|
||||||
//Setting custom headers for ultradns api calls
|
var (
|
||||||
|
sbPoolActOnProbes = true
|
||||||
|
ultradnsPoolType = "rdpool"
|
||||||
|
accountName string
|
||||||
|
)
|
||||||
|
|
||||||
|
// Setting custom headers for ultradns api calls
|
||||||
var customHeader = []udnssdk.CustomHeader{
|
var customHeader = []udnssdk.CustomHeader{
|
||||||
{
|
{
|
||||||
Key: "UltraClient",
|
Key: "UltraClient",
|
||||||
@ -145,7 +148,6 @@ func (p *UltraDNSProvider) Zones(ctx context.Context) ([]udnssdk.Zone, error) {
|
|||||||
zoneKey.Zone = zone
|
zoneKey.Zone = zone
|
||||||
zoneKey.AccountName = accountName
|
zoneKey.AccountName = accountName
|
||||||
zones, err := p.fetchZones(ctx, zoneKey)
|
zones, err := p.fetchZones(ctx, zoneKey)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -489,7 +491,7 @@ func (p *UltraDNSProvider) newSBPoolObjectCreation(ctx context.Context, change *
|
|||||||
return sbPoolObject, nil
|
return sbPoolObject, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//Creation of RDPoolObject
|
// Creation of RDPoolObject
|
||||||
func (p *UltraDNSProvider) newRDPoolObjectCreation(ctx context.Context, change *UltraDNSChanges) (rdPool udnssdk.RDPoolProfile, err error) {
|
func (p *UltraDNSProvider) newRDPoolObjectCreation(ctx context.Context, change *UltraDNSChanges) (rdPool udnssdk.RDPoolProfile, err error) {
|
||||||
rdPoolObject := udnssdk.RDPoolProfile{
|
rdPoolObject := udnssdk.RDPoolProfile{
|
||||||
Context: udnssdk.RDPoolSchema,
|
Context: udnssdk.RDPoolSchema,
|
||||||
|
@ -76,7 +76,6 @@ func (m *mockUltraDNSRecord) Select(k udnssdk.RRSetKey) ([]udnssdk.RRSet, error)
|
|||||||
RData: []string{"1.1.1.1"},
|
RData: []string{"1.1.1.1"},
|
||||||
TTL: 86400,
|
TTL: 86400,
|
||||||
}}, nil
|
}}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *mockUltraDNSRecord) SelectWithOffset(k udnssdk.RRSetKey, offset int) ([]udnssdk.RRSet, udnssdk.ResultInfo, *http.Response, error) {
|
func (m *mockUltraDNSRecord) SelectWithOffset(k udnssdk.RRSetKey, offset int) ([]udnssdk.RRSet, udnssdk.ResultInfo, *http.Response, error) {
|
||||||
@ -117,7 +116,7 @@ func TestNewUltraDNSProvider(t *testing.T) {
|
|||||||
assert.NotNilf(t, err, "Expected to fail %s", "formatted")
|
assert.NotNilf(t, err, "Expected to fail %s", "formatted")
|
||||||
}
|
}
|
||||||
|
|
||||||
//zones function test scenario
|
// zones function test scenario
|
||||||
func TestUltraDNSProvider_Zones(t *testing.T) {
|
func TestUltraDNSProvider_Zones(t *testing.T) {
|
||||||
mocked := mockUltraDNSZone{}
|
mocked := mockUltraDNSZone{}
|
||||||
provider := &UltraDNSProvider{
|
provider := &UltraDNSProvider{
|
||||||
@ -136,10 +135,9 @@ func TestUltraDNSProvider_Zones(t *testing.T) {
|
|||||||
zones, err := provider.Zones(context.Background())
|
zones, err := provider.Zones(context.Background())
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, reflect.DeepEqual(expected, zones), true)
|
assert.Equal(t, reflect.DeepEqual(expected, zones), true)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Records function test case
|
// Records function test case
|
||||||
func TestUltraDNSProvider_Records(t *testing.T) {
|
func TestUltraDNSProvider_Records(t *testing.T) {
|
||||||
mocked := mockUltraDNSRecord{}
|
mocked := mockUltraDNSRecord{}
|
||||||
mockedDomain := mockUltraDNSZone{}
|
mockedDomain := mockUltraDNSZone{}
|
||||||
@ -159,10 +157,9 @@ func TestUltraDNSProvider_Records(t *testing.T) {
|
|||||||
assert.Equal(t, v.RecordType, expected[0].RRType)
|
assert.Equal(t, v.RecordType, expected[0].RRType)
|
||||||
assert.Equal(t, int(v.RecordTTL), expected[0].TTL)
|
assert.Equal(t, int(v.RecordTTL), expected[0].TTL)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//ApplyChanges function testcase
|
// ApplyChanges function testcase
|
||||||
func TestUltraDNSProvider_ApplyChanges(t *testing.T) {
|
func TestUltraDNSProvider_ApplyChanges(t *testing.T) {
|
||||||
changes := &plan.Changes{}
|
changes := &plan.Changes{}
|
||||||
mocked := mockUltraDNSRecord{nil}
|
mocked := mockUltraDNSRecord{nil}
|
||||||
@ -209,7 +206,7 @@ func TestUltraDNSProvider_getSpecificRecord(t *testing.T) {
|
|||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Fail case scenario testing where CNAME and TXT Record name are same
|
// Fail case scenario testing where CNAME and TXT Record name are same
|
||||||
func TestUltraDNSProvider_ApplyChangesCNAME(t *testing.T) {
|
func TestUltraDNSProvider_ApplyChangesCNAME(t *testing.T) {
|
||||||
changes := &plan.Changes{}
|
changes := &plan.Changes{}
|
||||||
mocked := mockUltraDNSRecord{nil}
|
mocked := mockUltraDNSRecord{nil}
|
||||||
@ -233,11 +230,9 @@ func TestUltraDNSProvider_ApplyChangesCNAME(t *testing.T) {
|
|||||||
|
|
||||||
// This will work if you would set the environment variables such as "ULTRADNS_INTEGRATION" and zone should be available "kubernetes-ultradns-provider-test.com"
|
// This will work if you would set the environment variables such as "ULTRADNS_INTEGRATION" and zone should be available "kubernetes-ultradns-provider-test.com"
|
||||||
func TestUltraDNSProvider_ApplyChanges_Integration(t *testing.T) {
|
func TestUltraDNSProvider_ApplyChanges_Integration(t *testing.T) {
|
||||||
|
|
||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
providerUltradns, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
providerUltradns, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
||||||
@ -271,7 +266,8 @@ func TestUltraDNSProvider_ApplyChanges_Integration(t *testing.T) {
|
|||||||
changes = &plan.Changes{}
|
changes = &plan.Changes{}
|
||||||
changes.UpdateNew = []*endpoint.Endpoint{
|
changes.UpdateNew = []*endpoint.Endpoint{
|
||||||
{DNSName: "kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.2.2"}, RecordType: "A", RecordTTL: 100},
|
{DNSName: "kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.2.2"}, RecordType: "A", RecordTTL: 100},
|
||||||
{DNSName: "ttl.kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"2001:0db8:85a3:0000:0000:8a2e:0370:7335"}, RecordType: "AAAA", RecordTTL: 100}}
|
{DNSName: "ttl.kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"2001:0db8:85a3:0000:0000:8a2e:0370:7335"}, RecordType: "AAAA", RecordTTL: 100},
|
||||||
|
}
|
||||||
err = providerUltradns.ApplyChanges(context.Background(), changes)
|
err = providerUltradns.ApplyChanges(context.Background(), changes)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
@ -296,7 +292,8 @@ func TestUltraDNSProvider_ApplyChanges_Integration(t *testing.T) {
|
|||||||
changes = &plan.Changes{}
|
changes = &plan.Changes{}
|
||||||
changes.Delete = []*endpoint.Endpoint{
|
changes.Delete = []*endpoint.Endpoint{
|
||||||
{DNSName: "ttl.kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"2001:0db8:85a3:0000:0000:8a2e:0370:7335"}, RecordType: "AAAA", RecordTTL: 100},
|
{DNSName: "ttl.kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"2001:0db8:85a3:0000:0000:8a2e:0370:7335"}, RecordType: "AAAA", RecordTTL: 100},
|
||||||
{DNSName: "kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.2.2"}, RecordType: "A", RecordTTL: 100}}
|
{DNSName: "kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.2.2"}, RecordType: "A", RecordTTL: 100},
|
||||||
|
}
|
||||||
|
|
||||||
err = providerUltradns.ApplyChanges(context.Background(), changes)
|
err = providerUltradns.ApplyChanges(context.Background(), changes)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
@ -308,7 +305,6 @@ func TestUltraDNSProvider_ApplyChanges_Integration(t *testing.T) {
|
|||||||
assert.Equal(t, resp.Status, "404 Not Found")
|
assert.Equal(t, resp.Status, "404 Not Found")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will work if you would set the environment variables such as "ULTRADNS_INTEGRATION" and zone should be available "kubernetes-ultradns-provider-test.com" for multiple target
|
// This will work if you would set the environment variables such as "ULTRADNS_INTEGRATION" and zone should be available "kubernetes-ultradns-provider-test.com" for multiple target
|
||||||
@ -316,13 +312,13 @@ func TestUltraDNSProvider_ApplyChanges_MultipleTarget_integeration(t *testing.T)
|
|||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
provider, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
provider, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
||||||
changes := &plan.Changes{}
|
changes := &plan.Changes{}
|
||||||
changes.Create = []*endpoint.Endpoint{
|
changes.Create = []*endpoint.Endpoint{
|
||||||
{DNSName: "kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.1.1", "1.1.2.2"}, RecordType: "A"}}
|
{DNSName: "kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.1.1", "1.1.2.2"}, RecordType: "A"},
|
||||||
|
}
|
||||||
|
|
||||||
err = provider.ApplyChanges(context.Background(), changes)
|
err = provider.ApplyChanges(context.Background(), changes)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
@ -404,7 +400,7 @@ func TestUltraDNSProvider_newSBPoolObjectCreation(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, _ = range changesList.ResourceRecordSetUltraDNS.RData {
|
for range changesList.ResourceRecordSetUltraDNS.RData {
|
||||||
|
|
||||||
rrdataInfo := udnssdk.SBRDataInfo{
|
rrdataInfo := udnssdk.SBRDataInfo{
|
||||||
RunProbes: true,
|
RunProbes: true,
|
||||||
@ -428,15 +424,13 @@ func TestUltraDNSProvider_newSBPoolObjectCreation(t *testing.T) {
|
|||||||
|
|
||||||
actualSBPoolObject, _ := provider.newSBPoolObjectCreation(context.Background(), changesList)
|
actualSBPoolObject, _ := provider.newSBPoolObjectCreation(context.Background(), changesList)
|
||||||
assert.Equal(t, sbPoolObject, actualSBPoolObject)
|
assert.Equal(t, sbPoolObject, actualSBPoolObject)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Testcase to check fail scenario for multiple AAAA targets
|
// Testcase to check fail scenario for multiple AAAA targets
|
||||||
func TestUltraDNSProvider_MultipleTargetAAAA(t *testing.T) {
|
func TestUltraDNSProvider_MultipleTargetAAAA(t *testing.T) {
|
||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_ = os.Setenv("ULTRADNS_POOL_TYPE", "sbpool")
|
_ = os.Setenv("ULTRADNS_POOL_TYPE", "sbpool")
|
||||||
|
|
||||||
@ -454,12 +448,11 @@ func TestUltraDNSProvider_MultipleTargetAAAA(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Testcase to check fail scenario for multiple AAAA targets
|
// Testcase to check fail scenario for multiple AAAA targets
|
||||||
func TestUltraDNSProvider_MultipleTargetAAAARDPool(t *testing.T) {
|
func TestUltraDNSProvider_MultipleTargetAAAARDPool(t *testing.T) {
|
||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
_ = os.Setenv("ULTRADNS_POOL_TYPE", "rdpool")
|
_ = os.Setenv("ULTRADNS_POOL_TYPE", "rdpool")
|
||||||
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
||||||
@ -491,7 +484,6 @@ func TestUltraDNSProvider_MultipleTargetCNAME(t *testing.T) {
|
|||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
provider, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
provider, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
||||||
changes := &plan.Changes{}
|
changes := &plan.Changes{}
|
||||||
@ -508,7 +500,7 @@ func TestUltraDNSProvider_MultipleTargetCNAME(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Testing creation of RD Pool
|
// Testing creation of RD Pool
|
||||||
func TestUltraDNSProvider_newRDPoolObjectCreation(t *testing.T) {
|
func TestUltraDNSProvider_newRDPoolObjectCreation(t *testing.T) {
|
||||||
mocked := mockUltraDNSRecord{nil}
|
mocked := mockUltraDNSRecord{nil}
|
||||||
mockedDomain := mockUltraDNSZone{nil}
|
mockedDomain := mockUltraDNSZone{nil}
|
||||||
@ -538,10 +530,9 @@ func TestUltraDNSProvider_newRDPoolObjectCreation(t *testing.T) {
|
|||||||
|
|
||||||
actualRDPoolObject, _ := provider.newRDPoolObjectCreation(context.Background(), changesList)
|
actualRDPoolObject, _ := provider.newRDPoolObjectCreation(context.Background(), changesList)
|
||||||
assert.Equal(t, rdPoolObject, actualRDPoolObject)
|
assert.Equal(t, rdPoolObject, actualRDPoolObject)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Testing Failure scenarios over NewUltraDNS Provider
|
// Testing Failure scenarios over NewUltraDNS Provider
|
||||||
func TestNewUltraDNSProvider_FailCases(t *testing.T) {
|
func TestNewUltraDNSProvider_FailCases(t *testing.T) {
|
||||||
_ = os.Setenv("ULTRADNS_USERNAME", "")
|
_ = os.Setenv("ULTRADNS_USERNAME", "")
|
||||||
_ = os.Setenv("ULTRADNS_PASSWORD", "")
|
_ = os.Setenv("ULTRADNS_PASSWORD", "")
|
||||||
@ -590,7 +581,6 @@ func TestNewUltraDNSProvider_FailCases(t *testing.T) {
|
|||||||
_ = os.Unsetenv("ULTRADNS_POOL_TYPE")
|
_ = os.Unsetenv("ULTRADNS_POOL_TYPE")
|
||||||
_, accounterr := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"test-ultradns-provider.com"}), true)
|
_, accounterr := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"test-ultradns-provider.com"}), true)
|
||||||
assert.Nil(t, accounterr)
|
assert.Nil(t, accounterr)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Testing success scenarios for newly introduced environment variables
|
// Testing success scenarios for newly introduced environment variables
|
||||||
@ -618,12 +608,10 @@ func TestNewUltraDNSProvider_NewEnvVariableSuccessCases(t *testing.T) {
|
|||||||
_ = os.Setenv("ULTRADNS_ENABLE_ACTONPROBE", "true")
|
_ = os.Setenv("ULTRADNS_ENABLE_ACTONPROBE", "true")
|
||||||
_, err2 := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"test-ultradns-provider.com"}), true)
|
_, err2 := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"test-ultradns-provider.com"}), true)
|
||||||
assert.Nilf(t, err2, "ActOnProbe given value is not working %s", "formatted")
|
assert.Nilf(t, err2, "ActOnProbe given value is not working %s", "formatted")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Base64 Bad string decoding scenario
|
// Base64 Bad string decoding scenario
|
||||||
func TestNewUltraDNSProvider_Base64DecodeFailcase(t *testing.T) {
|
func TestNewUltraDNSProvider_Base64DecodeFailcase(t *testing.T) {
|
||||||
|
|
||||||
_ = os.Setenv("ULTRADNS_USERNAME", "")
|
_ = os.Setenv("ULTRADNS_USERNAME", "")
|
||||||
_ = os.Setenv("ULTRADNS_PASSWORD", "12345")
|
_ = os.Setenv("ULTRADNS_PASSWORD", "12345")
|
||||||
_ = os.Setenv("ULTRADNS_BASEURL", "")
|
_ = os.Setenv("ULTRADNS_BASEURL", "")
|
||||||
@ -631,17 +619,14 @@ func TestNewUltraDNSProvider_Base64DecodeFailcase(t *testing.T) {
|
|||||||
_ = os.Setenv("ULTRADNS_ENABLE_ACTONPROBE", "true")
|
_ = os.Setenv("ULTRADNS_ENABLE_ACTONPROBE", "true")
|
||||||
_, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"test-ultradns-provider.com"}), true)
|
_, err := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"test-ultradns-provider.com"}), true)
|
||||||
assert.NotNilf(t, err, "Base64 decode should fail in this case %s", "formatted")
|
assert.NotNilf(t, err, "Base64 decode should fail in this case %s", "formatted")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUltraDNSProvider_PoolConversionCase(t *testing.T) {
|
func TestUltraDNSProvider_PoolConversionCase(t *testing.T) {
|
||||||
|
|
||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//Creating SBPool Record
|
// Creating SBPool Record
|
||||||
_ = os.Setenv("ULTRADNS_POOL_TYPE", "sbpool")
|
_ = os.Setenv("ULTRADNS_POOL_TYPE", "sbpool")
|
||||||
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
||||||
changes := &plan.Changes{}
|
changes := &plan.Changes{}
|
||||||
@ -652,7 +637,7 @@ func TestUltraDNSProvider_PoolConversionCase(t *testing.T) {
|
|||||||
resp, _ := provider.client.Do("GET", "zones/kubernetes-ultradns-provider-test.com./rrsets/A/ttl.kubernetes-ultradns-provider-test.com.", nil, udnssdk.RRSetListDTO{})
|
resp, _ := provider.client.Do("GET", "zones/kubernetes-ultradns-provider-test.com./rrsets/A/ttl.kubernetes-ultradns-provider-test.com.", nil, udnssdk.RRSetListDTO{})
|
||||||
assert.Equal(t, resp.Status, "200 OK")
|
assert.Equal(t, resp.Status, "200 OK")
|
||||||
|
|
||||||
//Converting to RD Pool
|
// Converting to RD Pool
|
||||||
_ = os.Setenv("ULTRADNS_POOL_TYPE", "rdpool")
|
_ = os.Setenv("ULTRADNS_POOL_TYPE", "rdpool")
|
||||||
provider, _ = NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
provider, _ = NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
||||||
changes = &plan.Changes{}
|
changes = &plan.Changes{}
|
||||||
@ -662,7 +647,7 @@ func TestUltraDNSProvider_PoolConversionCase(t *testing.T) {
|
|||||||
resp, _ = provider.client.Do("GET", "zones/kubernetes-ultradns-provider-test.com./rrsets/A/ttl.kubernetes-ultradns-provider-test.com.", nil, udnssdk.RRSetListDTO{})
|
resp, _ = provider.client.Do("GET", "zones/kubernetes-ultradns-provider-test.com./rrsets/A/ttl.kubernetes-ultradns-provider-test.com.", nil, udnssdk.RRSetListDTO{})
|
||||||
assert.Equal(t, resp.Status, "200 OK")
|
assert.Equal(t, resp.Status, "200 OK")
|
||||||
|
|
||||||
//Converting back to SB Pool
|
// Converting back to SB Pool
|
||||||
_ = os.Setenv("ULTRADNS_POOL_TYPE", "sbpool")
|
_ = os.Setenv("ULTRADNS_POOL_TYPE", "sbpool")
|
||||||
provider, _ = NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
provider, _ = NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com"}), false)
|
||||||
changes = &plan.Changes{}
|
changes = &plan.Changes{}
|
||||||
@ -672,7 +657,7 @@ func TestUltraDNSProvider_PoolConversionCase(t *testing.T) {
|
|||||||
resp, _ = provider.client.Do("GET", "zones/kubernetes-ultradns-provider-test.com./rrsets/A/ttl.kubernetes-ultradns-provider-test.com.", nil, udnssdk.RRSetListDTO{})
|
resp, _ = provider.client.Do("GET", "zones/kubernetes-ultradns-provider-test.com./rrsets/A/ttl.kubernetes-ultradns-provider-test.com.", nil, udnssdk.RRSetListDTO{})
|
||||||
assert.Equal(t, resp.Status, "200 OK")
|
assert.Equal(t, resp.Status, "200 OK")
|
||||||
|
|
||||||
//Deleting Record
|
// Deleting Record
|
||||||
changes = &plan.Changes{}
|
changes = &plan.Changes{}
|
||||||
changes.Delete = []*endpoint.Endpoint{{DNSName: "ttl.kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.1.1", "1.2.3.4"}, RecordType: "A"}}
|
changes.Delete = []*endpoint.Endpoint{{DNSName: "ttl.kubernetes-ultradns-provider-test.com", Targets: endpoint.Targets{"1.1.1.1", "1.2.3.4"}, RecordType: "A"}}
|
||||||
err = provider.ApplyChanges(context.Background(), changes)
|
err = provider.ApplyChanges(context.Background(), changes)
|
||||||
@ -683,11 +668,9 @@ func TestUltraDNSProvider_PoolConversionCase(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUltraDNSProvider_DomainFilter(t *testing.T) {
|
func TestUltraDNSProvider_DomainFilter(t *testing.T) {
|
||||||
|
|
||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com", "kubernetes-ultradns-provider-test.com"}), true)
|
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com", "kubernetes-ultradns-provider-test.com"}), true)
|
||||||
zones, err := provider.Zones(context.Background())
|
zones, err := provider.Zones(context.Background())
|
||||||
@ -703,11 +686,9 @@ func TestUltraDNSProvider_DomainFilter(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUltraDNSProvider_DomainFiltersZonesFailCase(t *testing.T) {
|
func TestUltraDNSProvider_DomainFiltersZonesFailCase(t *testing.T) {
|
||||||
|
|
||||||
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
_, ok := os.LookupEnv("ULTRADNS_INTEGRATION")
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Printf("Skipping test")
|
log.Printf("Skipping test")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com", "kubernetes-uldsvdsvadvvdsvadvstradns-provider-test.com"}), true)
|
provider, _ := NewUltraDNSProvider(endpoint.NewDomainFilter([]string{"kubernetes-ultradns-provider-test.com", "kubernetes-uldsvdsvadvvdsvadvstradns-provider-test.com"}), true)
|
||||||
_, err := provider.Zones(context.Background())
|
_, err := provider.Zones(context.Background())
|
||||||
@ -715,7 +696,7 @@ func TestUltraDNSProvider_DomainFiltersZonesFailCase(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//zones function with domain filter test scenario
|
// zones function with domain filter test scenario
|
||||||
func TestUltraDNSProvider_DomainFilterZonesMocked(t *testing.T) {
|
func TestUltraDNSProvider_DomainFilterZonesMocked(t *testing.T) {
|
||||||
mocked := mockUltraDNSZone{}
|
mocked := mockUltraDNSZone{}
|
||||||
provider := &UltraDNSProvider{
|
provider := &UltraDNSProvider{
|
||||||
@ -756,7 +737,7 @@ func TestUltraDNSProvider_DomainFilterZonesMocked(t *testing.T) {
|
|||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, reflect.DeepEqual(expected, zones), true)
|
assert.Equal(t, reflect.DeepEqual(expected, zones), true)
|
||||||
|
|
||||||
//When zone is not given but account is provided
|
// When zone is not given but account is provided
|
||||||
provider = &UltraDNSProvider{
|
provider = &UltraDNSProvider{
|
||||||
client: udnssdk.Client{
|
client: udnssdk.Client{
|
||||||
Zone: &mocked,
|
Zone: &mocked,
|
||||||
@ -772,5 +753,4 @@ func TestUltraDNSProvider_DomainFilterZonesMocked(t *testing.T) {
|
|||||||
zones, err = provider.Zones(context.Background())
|
zones, err = provider.Zones(context.Background())
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, reflect.DeepEqual(expected, zones), true)
|
assert.Equal(t, reflect.DeepEqual(expected, zones), true)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ func (p *vinyldnsProvider) Records(ctx context.Context) (endpoints []*endpoint.E
|
|||||||
recordsCount := len(r.Records)
|
recordsCount := len(r.Records)
|
||||||
log.Debugf(fmt.Sprintf("%s.%s.%d.%s", r.Name, r.Type, recordsCount, zone.Name))
|
log.Debugf(fmt.Sprintf("%s.%s.%d.%s", r.Name, r.Type, recordsCount, zone.Name))
|
||||||
|
|
||||||
//TODO: AAAA Records
|
// TODO: AAAA Records
|
||||||
if len(r.Records) > 0 {
|
if len(r.Records) > 0 {
|
||||||
targets := make([]string, len(r.Records))
|
targets := make([]string, len(r.Records))
|
||||||
for idx, rr := range r.Records {
|
for idx, rr := range r.Records {
|
||||||
@ -231,7 +231,7 @@ func newVinylDNSChanges(action string, endpoints []*endpoint.Endpoint) []*vinyld
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newVinylDNSChange(action string, endpoint *endpoint.Endpoint) *vinyldnsChange {
|
func newVinylDNSChange(action string, endpoint *endpoint.Endpoint) *vinyldnsChange {
|
||||||
var ttl = vinyldnsRecordTTL
|
ttl := vinyldnsRecordTTL
|
||||||
if endpoint.RecordTTL.IsConfigured() {
|
if endpoint.RecordTTL.IsConfigured() {
|
||||||
ttl = int(endpoint.RecordTTL)
|
ttl = int(endpoint.RecordTTL)
|
||||||
}
|
}
|
||||||
|
@ -37,9 +37,11 @@ type mockVinyldnsZoneInterface struct {
|
|||||||
|
|
||||||
var mockVinylDNSProvider vinyldnsProvider
|
var mockVinylDNSProvider vinyldnsProvider
|
||||||
|
|
||||||
var vinylDNSZones []vinyldns.Zone
|
var (
|
||||||
var vinylDNSRecords []vinyldns.RecordSet
|
vinylDNSZones []vinyldns.Zone
|
||||||
var vinylDNSRecordSetUpdateResponse *vinyldns.RecordSetUpdateResponse
|
vinylDNSRecords []vinyldns.RecordSet
|
||||||
|
vinylDNSRecordSetUpdateResponse *vinyldns.RecordSetUpdateResponse
|
||||||
|
)
|
||||||
|
|
||||||
func TestVinylDNSServices(t *testing.T) {
|
func TestVinylDNSServices(t *testing.T) {
|
||||||
firstZone := vinyldns.Zone{
|
firstZone := vinyldns.Zone{
|
||||||
|
@ -72,7 +72,6 @@ func (m mockVultrDomain) GetDNSSec(ctx context.Context, domain string) ([]string
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
type mockVultrRecord struct {
|
type mockVultrRecord struct {
|
||||||
client *govultr.Client
|
client *govultr.Client
|
||||||
}
|
}
|
||||||
|
@ -37,22 +37,22 @@ func TestZoneTypeFilterMatch(t *testing.T) {
|
|||||||
zones []interface{}
|
zones []interface{}
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
"", true, []interface{}{ publicZoneStr, privateZoneStr, &route53.HostedZone{} },
|
"", true, []interface{}{publicZoneStr, privateZoneStr, &route53.HostedZone{}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"public", true, []interface{}{ publicZoneStr, publicZoneAWS, &route53.HostedZone{} },
|
"public", true, []interface{}{publicZoneStr, publicZoneAWS, &route53.HostedZone{}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"public", false, []interface{}{ privateZoneStr, privateZoneAWS },
|
"public", false, []interface{}{privateZoneStr, privateZoneAWS},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"private", true, []interface{}{ privateZoneStr, privateZoneAWS },
|
"private", true, []interface{}{privateZoneStr, privateZoneAWS},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"private", false, []interface{}{ publicZoneStr, publicZoneAWS, &route53.HostedZone{} },
|
"private", false, []interface{}{publicZoneStr, publicZoneAWS, &route53.HostedZone{}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"unknown", false, []interface{}{ publicZoneStr },
|
"unknown", false, []interface{}{publicZoneStr},
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
zoneTypeFilter := NewZoneTypeFilter(tc.zoneTypeFilter)
|
zoneTypeFilter := NewZoneTypeFilter(tc.zoneTypeFilter)
|
||||||
|
@ -108,7 +108,7 @@ func testNoopApplyChanges(t *testing.T) {
|
|||||||
})
|
})
|
||||||
assert.EqualError(t, err, inmemory.ErrRecordAlreadyExists.Error())
|
assert.EqualError(t, err, inmemory.ErrRecordAlreadyExists.Error())
|
||||||
|
|
||||||
//correct changes
|
// correct changes
|
||||||
require.NoError(t, r.ApplyChanges(ctx, &plan.Changes{
|
require.NoError(t, r.ApplyChanges(ctx, &plan.Changes{
|
||||||
Create: []*endpoint.Endpoint{
|
Create: []*endpoint.Endpoint{
|
||||||
{
|
{
|
||||||
|
@ -38,7 +38,7 @@ type Registry interface {
|
|||||||
MissingRecords() []*endpoint.Endpoint
|
MissingRecords() []*endpoint.Endpoint
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO(ideahitme): consider moving this to Plan
|
// TODO(ideahitme): consider moving this to Plan
|
||||||
func filterOwnedRecords(ownerID string, eps []*endpoint.Endpoint) []*endpoint.Endpoint {
|
func filterOwnedRecords(ownerID string, eps []*endpoint.Endpoint) []*endpoint.Endpoint {
|
||||||
filtered := []*endpoint.Endpoint{}
|
filtered := []*endpoint.Endpoint{}
|
||||||
for _, ep := range eps {
|
for _, ep := range eps {
|
||||||
|
@ -35,7 +35,7 @@ const recordTemplate = "%{record_type}"
|
|||||||
// TXTRegistry implements registry interface with ownership implemented via associated TXT records
|
// TXTRegistry implements registry interface with ownership implemented via associated TXT records
|
||||||
type TXTRegistry struct {
|
type TXTRegistry struct {
|
||||||
provider provider.Provider
|
provider provider.Provider
|
||||||
ownerID string //refers to the owner id of the current instance
|
ownerID string // refers to the owner id of the current instance
|
||||||
mapper nameMapper
|
mapper nameMapper
|
||||||
|
|
||||||
// cache the records in memory and update on an interval instead.
|
// cache the records in memory and update on an interval instead.
|
||||||
@ -114,9 +114,9 @@ func (im *TXTRegistry) Records(ctx context.Context) ([]*endpoint.Endpoint, error
|
|||||||
// We simply assume that TXT records for the registry will always have only one target.
|
// We simply assume that TXT records for the registry will always have only one target.
|
||||||
labels, err := endpoint.NewLabelsFromString(record.Targets[0])
|
labels, err := endpoint.NewLabelsFromString(record.Targets[0])
|
||||||
if err == endpoint.ErrInvalidHeritage {
|
if err == endpoint.ErrInvalidHeritage {
|
||||||
//if no heritage is found or it is invalid
|
// if no heritage is found or it is invalid
|
||||||
//case when value of txt record cannot be identified
|
// case when value of txt record cannot be identified
|
||||||
//record will not be removed as it will have empty owner
|
// record will not be removed as it will have empty owner
|
||||||
endpoints = append(endpoints, record)
|
endpoints = append(endpoints, record)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -343,6 +343,7 @@ func (pr affixNameMapper) dropAffixTemplate(name string) string {
|
|||||||
func (pr affixNameMapper) isPrefix() bool {
|
func (pr affixNameMapper) isPrefix() bool {
|
||||||
return len(pr.suffix) == 0
|
return len(pr.suffix) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pr affixNameMapper) isSuffix() bool {
|
func (pr affixNameMapper) isSuffix() bool {
|
||||||
return len(pr.prefix) == 0 && len(pr.suffix) > 0
|
return len(pr.prefix) == 0 && len(pr.suffix) > 0
|
||||||
}
|
}
|
||||||
@ -395,6 +396,7 @@ func (pr affixNameMapper) normalizeAffixTemplate(afix, recordType string) string
|
|||||||
}
|
}
|
||||||
return afix
|
return afix
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pr affixNameMapper) toNewTXTName(endpointDNSName, recordType string) string {
|
func (pr affixNameMapper) toNewTXTName(endpointDNSName, recordType string) string {
|
||||||
DNSName := strings.SplitN(endpointDNSName, ".", 2)
|
DNSName := strings.SplitN(endpointDNSName, ".", 2)
|
||||||
recordType = strings.ToLower(recordType)
|
recordType = strings.ToLower(recordType)
|
||||||
|
@ -536,6 +536,7 @@ func testTXTRegistryApplyChangesWithTemplatedPrefix(t *testing.T) {
|
|||||||
err := r.ApplyChanges(ctx, changes)
|
err := r.ApplyChanges(ctx, changes)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testTXTRegistryApplyChangesWithTemplatedSuffix(t *testing.T) {
|
func testTXTRegistryApplyChangesWithTemplatedSuffix(t *testing.T) {
|
||||||
p := inmemory.NewInMemoryProvider()
|
p := inmemory.NewInMemoryProvider()
|
||||||
p.CreateZone(testZone)
|
p.CreateZone(testZone)
|
||||||
@ -579,6 +580,7 @@ func testTXTRegistryApplyChangesWithTemplatedSuffix(t *testing.T) {
|
|||||||
err := r.ApplyChanges(ctx, changes)
|
err := r.ApplyChanges(ctx, changes)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testTXTRegistryApplyChangesWithSuffix(t *testing.T) {
|
func testTXTRegistryApplyChangesWithSuffix(t *testing.T) {
|
||||||
p := inmemory.NewInMemoryProvider()
|
p := inmemory.NewInMemoryProvider()
|
||||||
p.CreateZone(testZone)
|
p.CreateZone(testZone)
|
||||||
|
@ -66,7 +66,8 @@ func NewAmbassadorHostSource(
|
|||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
dynamicKubeClient dynamic.Interface,
|
dynamicKubeClient dynamic.Interface,
|
||||||
kubeClient kubernetes.Interface,
|
kubeClient kubernetes.Interface,
|
||||||
namespace string) (Source, error) {
|
namespace string,
|
||||||
|
) (Source, error) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// Use shared informer to listen for add/update/delete of Host in the specified namespace.
|
// Use shared informer to listen for add/update/delete of Host in the specified namespace.
|
||||||
|
@ -80,7 +80,6 @@ func TestAmbassadorHostSource(t *testing.T) {
|
|||||||
t.Fatalf("could not collect ambassador source endpoints: %v", err)
|
t.Fatalf("could not collect ambassador source endpoints: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func createAmbassadorHost(name, ambassadorService string) (*unstructured.Unstructured, error) {
|
func createAmbassadorHost(name, ambassadorService string) (*unstructured.Unstructured, error) {
|
||||||
|
@ -33,7 +33,6 @@ type ConnectorSuite struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *ConnectorSuite) SetupTest() {
|
func (suite *ConnectorSuite) SetupTest() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func startServerToServeTargets(t *testing.T, endpoints []*endpoint.Endpoint) net.Listener {
|
func startServerToServeTargets(t *testing.T, endpoints []*endpoint.Endpoint) net.Listener {
|
||||||
@ -91,7 +90,8 @@ func testConnectorSourceEndpoints(t *testing.T) {
|
|||||||
title: "valid remote server",
|
title: "valid remote server",
|
||||||
server: true,
|
server: true,
|
||||||
expected: []*endpoint.Endpoint{
|
expected: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -103,12 +103,14 @@ func testConnectorSourceEndpoints(t *testing.T) {
|
|||||||
title: "valid remote server with multiple endpoints",
|
title: "valid remote server with multiple endpoints",
|
||||||
server: true,
|
server: true,
|
||||||
expected: []*endpoint.Endpoint{
|
expected: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
},
|
},
|
||||||
{DNSName: "xyz.example.org",
|
{
|
||||||
|
DNSName: "xyz.example.org",
|
||||||
Targets: endpoint.Targets{"abc.example.org"},
|
Targets: endpoint.Targets{"abc.example.org"},
|
||||||
RecordType: endpoint.RecordTypeCNAME,
|
RecordType: endpoint.RecordTypeCNAME,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
|
@ -45,7 +45,6 @@ type CRDSuite struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (suite *CRDSuite) SetupTest() {
|
func (suite *CRDSuite) SetupTest() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultHeader() http.Header {
|
func defaultHeader() http.Header {
|
||||||
@ -152,7 +151,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
registeredKind: "DNSEndpoint",
|
registeredKind: "DNSEndpoint",
|
||||||
kind: "DNSEndpoint",
|
kind: "DNSEndpoint",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -168,7 +168,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
registeredKind: "DNSEndpoint",
|
registeredKind: "DNSEndpoint",
|
||||||
kind: "JustEndpoint",
|
kind: "JustEndpoint",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -186,7 +187,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
namespace: "foo",
|
namespace: "foo",
|
||||||
registeredNamespace: "foo",
|
registeredNamespace: "foo",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -204,7 +206,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
namespace: "foo",
|
namespace: "foo",
|
||||||
registeredNamespace: "bar",
|
registeredNamespace: "bar",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -222,7 +225,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
namespace: "foo",
|
namespace: "foo",
|
||||||
registeredNamespace: "foo",
|
registeredNamespace: "foo",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{},
|
Targets: endpoint.Targets{},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -240,7 +244,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
namespace: "foo",
|
namespace: "foo",
|
||||||
registeredNamespace: "foo",
|
registeredNamespace: "foo",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -258,12 +263,14 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
namespace: "foo",
|
namespace: "foo",
|
||||||
registeredNamespace: "foo",
|
registeredNamespace: "foo",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
},
|
},
|
||||||
{DNSName: "xyz.example.org",
|
{
|
||||||
|
DNSName: "xyz.example.org",
|
||||||
Targets: endpoint.Targets{"abc.example.org"},
|
Targets: endpoint.Targets{"abc.example.org"},
|
||||||
RecordType: endpoint.RecordTypeCNAME,
|
RecordType: endpoint.RecordTypeCNAME,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -283,7 +290,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
annotations: map[string]string{"test": "that"},
|
annotations: map[string]string{"test": "that"},
|
||||||
annotationFilter: "test=filter_something_else",
|
annotationFilter: "test=filter_something_else",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -303,7 +311,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
annotations: map[string]string{"test": "that"},
|
annotations: map[string]string{"test": "that"},
|
||||||
annotationFilter: "test=that",
|
annotationFilter: "test=that",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -323,7 +332,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
labels: map[string]string{"test": "that"},
|
labels: map[string]string{"test": "that"},
|
||||||
labelFilter: "test=filter_something_else",
|
labelFilter: "test=filter_something_else",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -343,7 +353,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
labels: map[string]string{"test": "that"},
|
labels: map[string]string{"test": "that"},
|
||||||
labelFilter: "test=that",
|
labelFilter: "test=that",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"1.2.3.4"},
|
Targets: endpoint.Targets{"1.2.3.4"},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
@ -363,7 +374,8 @@ func testCRDSourceEndpoints(t *testing.T) {
|
|||||||
labels: map[string]string{"test": "that"},
|
labels: map[string]string{"test": "that"},
|
||||||
labelFilter: "test=that",
|
labelFilter: "test=that",
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
{DNSName: "abc.example.org",
|
{
|
||||||
|
DNSName: "abc.example.org",
|
||||||
Targets: endpoint.Targets{"ns1.k8s.io", "ns2.k8s.io"},
|
Targets: endpoint.Targets{"ns1.k8s.io", "ns2.k8s.io"},
|
||||||
RecordType: endpoint.RecordTypeNS,
|
RecordType: endpoint.RecordTypeNS,
|
||||||
RecordTTL: 180,
|
RecordTTL: 180,
|
||||||
|
@ -446,7 +446,8 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) {
|
|||||||
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
||||||
}},
|
}},
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
newTestEndpoint("foo.example.internal", "A", "1.2.3.4")},
|
newTestEndpoint("foo.example.internal", "A", "1.2.3.4"),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "WildcardInRoute",
|
title: "WildcardInRoute",
|
||||||
@ -472,7 +473,8 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) {
|
|||||||
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
||||||
}},
|
}},
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
newTestEndpoint("foo.example.internal", "A", "1.2.3.4")},
|
newTestEndpoint("foo.example.internal", "A", "1.2.3.4"),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "WildcardInRouteAndGateway",
|
title: "WildcardInRouteAndGateway",
|
||||||
@ -498,7 +500,8 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) {
|
|||||||
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
||||||
}},
|
}},
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
newTestEndpoint("*.example.internal", "A", "1.2.3.4")},
|
newTestEndpoint("*.example.internal", "A", "1.2.3.4"),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "NoRouteHostname",
|
title: "NoRouteHostname",
|
||||||
@ -522,7 +525,8 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) {
|
|||||||
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
Status: httpRouteStatus(gatewayParentRef("default", "test")),
|
||||||
}},
|
}},
|
||||||
endpoints: []*endpoint.Endpoint{
|
endpoints: []*endpoint.Endpoint{
|
||||||
newTestEndpoint("foo.example.internal", "A", "1.2.3.4")},
|
newTestEndpoint("foo.example.internal", "A", "1.2.3.4"),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "NoGateways",
|
title: "NoGateways",
|
||||||
|
@ -94,13 +94,13 @@ var internalProxySvc = corev1.Service{
|
|||||||
Status: corev1.ServiceStatus{
|
Status: corev1.ServiceStatus{
|
||||||
LoadBalancer: corev1.LoadBalancerStatus{
|
LoadBalancer: corev1.LoadBalancerStatus{
|
||||||
Ingress: []corev1.LoadBalancerIngress{
|
Ingress: []corev1.LoadBalancerIngress{
|
||||||
corev1.LoadBalancerIngress{
|
{
|
||||||
IP: "203.0.113.1",
|
IP: "203.0.113.1",
|
||||||
},
|
},
|
||||||
corev1.LoadBalancerIngress{
|
{
|
||||||
IP: "203.0.113.2",
|
IP: "203.0.113.2",
|
||||||
},
|
},
|
||||||
corev1.LoadBalancerIngress{
|
{
|
||||||
IP: "203.0.113.3",
|
IP: "203.0.113.3",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -181,13 +181,13 @@ var externalProxySvc = corev1.Service{
|
|||||||
Status: corev1.ServiceStatus{
|
Status: corev1.ServiceStatus{
|
||||||
LoadBalancer: corev1.LoadBalancerStatus{
|
LoadBalancer: corev1.LoadBalancerStatus{
|
||||||
Ingress: []corev1.LoadBalancerIngress{
|
Ingress: []corev1.LoadBalancerIngress{
|
||||||
corev1.LoadBalancerIngress{
|
{
|
||||||
Hostname: "a.example.org",
|
Hostname: "a.example.org",
|
||||||
},
|
},
|
||||||
corev1.LoadBalancerIngress{
|
{
|
||||||
Hostname: "b.example.org",
|
Hostname: "b.example.org",
|
||||||
},
|
},
|
||||||
corev1.LoadBalancerIngress{
|
{
|
||||||
Hostname: "c.example.org",
|
Hostname: "c.example.org",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -270,7 +270,7 @@ func TestGlooSource(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Len(t, endpoints, 5)
|
assert.Len(t, endpoints, 5)
|
||||||
assert.ElementsMatch(t, endpoints, []*endpoint.Endpoint{
|
assert.ElementsMatch(t, endpoints, []*endpoint.Endpoint{
|
||||||
&endpoint.Endpoint{
|
{
|
||||||
DNSName: "a.test",
|
DNSName: "a.test",
|
||||||
Targets: []string{internalProxySvc.Status.LoadBalancer.Ingress[0].IP, internalProxySvc.Status.LoadBalancer.Ingress[1].IP, internalProxySvc.Status.LoadBalancer.Ingress[2].IP},
|
Targets: []string{internalProxySvc.Status.LoadBalancer.Ingress[0].IP, internalProxySvc.Status.LoadBalancer.Ingress[1].IP, internalProxySvc.Status.LoadBalancer.Ingress[2].IP},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
@ -278,7 +278,7 @@ func TestGlooSource(t *testing.T) {
|
|||||||
Labels: endpoint.Labels{},
|
Labels: endpoint.Labels{},
|
||||||
ProviderSpecific: endpoint.ProviderSpecific{},
|
ProviderSpecific: endpoint.ProviderSpecific{},
|
||||||
},
|
},
|
||||||
&endpoint.Endpoint{
|
{
|
||||||
DNSName: "b.test",
|
DNSName: "b.test",
|
||||||
Targets: []string{internalProxySvc.Status.LoadBalancer.Ingress[0].IP, internalProxySvc.Status.LoadBalancer.Ingress[1].IP, internalProxySvc.Status.LoadBalancer.Ingress[2].IP},
|
Targets: []string{internalProxySvc.Status.LoadBalancer.Ingress[0].IP, internalProxySvc.Status.LoadBalancer.Ingress[1].IP, internalProxySvc.Status.LoadBalancer.Ingress[2].IP},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
@ -286,7 +286,7 @@ func TestGlooSource(t *testing.T) {
|
|||||||
Labels: endpoint.Labels{},
|
Labels: endpoint.Labels{},
|
||||||
ProviderSpecific: endpoint.ProviderSpecific{},
|
ProviderSpecific: endpoint.ProviderSpecific{},
|
||||||
},
|
},
|
||||||
&endpoint.Endpoint{
|
{
|
||||||
DNSName: "c.test",
|
DNSName: "c.test",
|
||||||
Targets: []string{internalProxySvc.Status.LoadBalancer.Ingress[0].IP, internalProxySvc.Status.LoadBalancer.Ingress[1].IP, internalProxySvc.Status.LoadBalancer.Ingress[2].IP},
|
Targets: []string{internalProxySvc.Status.LoadBalancer.Ingress[0].IP, internalProxySvc.Status.LoadBalancer.Ingress[1].IP, internalProxySvc.Status.LoadBalancer.Ingress[2].IP},
|
||||||
RecordType: endpoint.RecordTypeA,
|
RecordType: endpoint.RecordTypeA,
|
||||||
@ -300,7 +300,7 @@ func TestGlooSource(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&endpoint.Endpoint{
|
{
|
||||||
DNSName: "d.test",
|
DNSName: "d.test",
|
||||||
Targets: []string{externalProxySvc.Status.LoadBalancer.Ingress[0].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[1].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[2].Hostname},
|
Targets: []string{externalProxySvc.Status.LoadBalancer.Ingress[0].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[1].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[2].Hostname},
|
||||||
RecordType: endpoint.RecordTypeCNAME,
|
RecordType: endpoint.RecordTypeCNAME,
|
||||||
@ -308,7 +308,7 @@ func TestGlooSource(t *testing.T) {
|
|||||||
Labels: endpoint.Labels{},
|
Labels: endpoint.Labels{},
|
||||||
ProviderSpecific: endpoint.ProviderSpecific{},
|
ProviderSpecific: endpoint.ProviderSpecific{},
|
||||||
},
|
},
|
||||||
&endpoint.Endpoint{
|
{
|
||||||
DNSName: "e.test",
|
DNSName: "e.test",
|
||||||
Targets: []string{externalProxySvc.Status.LoadBalancer.Ingress[0].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[1].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[2].Hostname},
|
Targets: []string{externalProxySvc.Status.LoadBalancer.Ingress[0].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[1].Hostname, externalProxySvc.Status.LoadBalancer.Ingress[2].Hostname},
|
||||||
RecordType: endpoint.RecordTypeCNAME,
|
RecordType: endpoint.RecordTypeCNAME,
|
||||||
|
@ -255,11 +255,10 @@ func newKongUnstructuredConverter() (*unstructuredConverter, error) {
|
|||||||
return uc, nil
|
return uc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//Kong types based on https://github.com/Kong/kubernetes-ingress-controller/blob/v1.2.0/pkg/apis/configuration/v1beta1/types.go to facilitate testing
|
// Kong types based on https://github.com/Kong/kubernetes-ingress-controller/blob/v1.2.0/pkg/apis/configuration/v1beta1/types.go to facilitate testing
|
||||||
//When trying to import them from the Kong repo as a dependency it required upgrading the k8s.io/client-go and k8s.io/apimachinery which seemed
|
// When trying to import them from the Kong repo as a dependency it required upgrading the k8s.io/client-go and k8s.io/apimachinery which seemed
|
||||||
//cause several changes in how the mock clients were working that resulted in a bunch of failures in other tests
|
// cause several changes in how the mock clients were working that resulted in a bunch of failures in other tests
|
||||||
//If that is dealt with at some point the below can be removed and replaced with an actual import
|
// If that is dealt with at some point the below can be removed and replaced with an actual import
|
||||||
|
|
||||||
type TCPIngress struct {
|
type TCPIngress struct {
|
||||||
metav1.TypeMeta `json:",inline"`
|
metav1.TypeMeta `json:",inline"`
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||||
|
@ -490,7 +490,6 @@ func testOcpRouteSourceEndpoints(t *testing.T) {
|
|||||||
title: "route without matching labels",
|
title: "route without matching labels",
|
||||||
labelFilter: "app=web-external",
|
labelFilter: "app=web-external",
|
||||||
ocpRoute: &routev1.Route{
|
ocpRoute: &routev1.Route{
|
||||||
|
|
||||||
Spec: routev1.RouteSpec{
|
Spec: routev1.RouteSpec{
|
||||||
Host: "my-annotation-domain.com",
|
Host: "my-annotation-domain.com",
|
||||||
},
|
},
|
||||||
|
@ -74,7 +74,6 @@ func NewPodSource(ctx context.Context, kubeClient kubernetes.Interface, namespac
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (*podSource) AddEventHandler(ctx context.Context, handler func()) {
|
func (*podSource) AddEventHandler(ctx context.Context, handler func()) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ps *podSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, error) {
|
func (ps *podSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, error) {
|
||||||
|
@ -686,7 +686,8 @@ func testServiceSourceEndpoints(t *testing.T) {
|
|||||||
{DNSName: "internal.foo.example.org", Targets: endpoint.Targets{"1.2.3.4"}},
|
{DNSName: "internal.foo.example.org", Targets: endpoint.Targets{"1.2.3.4"}},
|
||||||
{DNSName: "internal.foo.example.org", Targets: endpoint.Targets{"lb.example.com"}},
|
{DNSName: "internal.foo.example.org", Targets: endpoint.Targets{"lb.example.com"}},
|
||||||
},
|
},
|
||||||
}, {
|
},
|
||||||
|
{
|
||||||
title: "load balancer services annotated with DNS Controller annotations return an endpoint with both annotations in compatibility mode",
|
title: "load balancer services annotated with DNS Controller annotations return an endpoint with both annotations in compatibility mode",
|
||||||
svcNamespace: "testing",
|
svcNamespace: "testing",
|
||||||
svcName: "foo",
|
svcName: "foo",
|
||||||
|
@ -215,14 +215,14 @@ func TestEndpointsFromRouteGroups(t *testing.T) {
|
|||||||
Targets: endpoint.Targets([]string{"lb.example.org"}),
|
Targets: endpoint.Targets([]string{"lb.example.org"}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}} {
|
},
|
||||||
|
} {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
got := tt.source.endpointsFromRouteGroup(tt.rg)
|
got := tt.source.endpointsFromRouteGroup(tt.rg)
|
||||||
|
|
||||||
validateEndpoints(t, got, tt.want)
|
validateEndpoints(t, got, tt.want)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type fakeRouteGroupClient struct {
|
type fakeRouteGroupClient struct {
|
||||||
@ -709,7 +709,8 @@ func TestRouteGroupsEndpoints(t *testing.T) {
|
|||||||
Targets: endpoint.Targets([]string{"lb.example.org"}),
|
Targets: endpoint.Targets([]string{"lb.example.org"}),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}} {
|
},
|
||||||
|
} {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
if tt.fqdnTemplate != "" {
|
if tt.fqdnTemplate != "" {
|
||||||
tmpl, err := parseTemplate(tt.fqdnTemplate)
|
tmpl, err := parseTemplate(tt.fqdnTemplate)
|
||||||
|
Loading…
Reference in New Issue
Block a user