mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-05 17:16:59 +02:00
refactor(provider/cloudflare): use local regionalHostname struct (#5615)
This commit is contained in:
parent
69d3424d4d
commit
5c42ed00c7
@ -220,7 +220,7 @@ type CloudFlareProvider struct {
|
||||
type cloudFlareChange struct {
|
||||
Action changeAction
|
||||
ResourceRecord cloudflare.DNSRecord
|
||||
RegionalHostname cloudflare.RegionalHostname
|
||||
RegionalHostname regionalHostname
|
||||
CustomHostnames map[string]cloudflare.CustomHostname
|
||||
CustomHostnamesPrev []string
|
||||
}
|
||||
|
@ -40,12 +40,17 @@ var recordTypeRegionalHostnameSupported = map[string]bool{
|
||||
"CNAME": true,
|
||||
}
|
||||
|
||||
// RegionalHostnamesMap is a map of regional hostnames keyed by hostname.
|
||||
type RegionalHostnamesMap map[string]cloudflare.RegionalHostname
|
||||
type regionalHostname struct {
|
||||
hostname string
|
||||
regionKey string
|
||||
}
|
||||
|
||||
// regionalHostnamesMap is a map of regional hostnames keyed by hostname.
|
||||
type regionalHostnamesMap map[string]regionalHostname
|
||||
|
||||
type regionalHostnameChange struct {
|
||||
action changeAction
|
||||
cloudflare.RegionalHostname
|
||||
regionalHostname
|
||||
}
|
||||
|
||||
func (z zoneService) ListDataLocalizationRegionalHostnames(ctx context.Context, rc *cloudflare.ResourceContainer, rp cloudflare.ListDataLocalizationRegionalHostnamesParams) ([]cloudflare.RegionalHostname, error) {
|
||||
@ -69,16 +74,16 @@ func (z zoneService) DeleteDataLocalizationRegionalHostname(ctx context.Context,
|
||||
// createDataLocalizationRegionalHostnameParams is a function that returns the appropriate RegionalHostname Param based on the cloudFlareChange passed in
|
||||
func createDataLocalizationRegionalHostnameParams(rhc regionalHostnameChange) cloudflare.CreateDataLocalizationRegionalHostnameParams {
|
||||
return cloudflare.CreateDataLocalizationRegionalHostnameParams{
|
||||
Hostname: rhc.Hostname,
|
||||
RegionKey: rhc.RegionKey,
|
||||
Hostname: rhc.hostname,
|
||||
RegionKey: rhc.regionKey,
|
||||
}
|
||||
}
|
||||
|
||||
// updateDataLocalizationRegionalHostnameParams is a function that returns the appropriate RegionalHostname Param based on the cloudFlareChange passed in
|
||||
func updateDataLocalizationRegionalHostnameParams(rhc regionalHostnameChange) cloudflare.UpdateDataLocalizationRegionalHostnameParams {
|
||||
return cloudflare.UpdateDataLocalizationRegionalHostnameParams{
|
||||
Hostname: rhc.Hostname,
|
||||
RegionKey: rhc.RegionKey,
|
||||
Hostname: rhc.hostname,
|
||||
RegionKey: rhc.regionKey,
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,8 +103,8 @@ func (p *CloudFlareProvider) submitRegionalHostnameChanges(ctx context.Context,
|
||||
// submitRegionalHostnameChange applies a single regional hostname change, returns false if it fails
|
||||
func (p *CloudFlareProvider) submitRegionalHostnameChange(ctx context.Context, rhChange regionalHostnameChange, resourceContainer *cloudflare.ResourceContainer) bool {
|
||||
changeLog := log.WithFields(log.Fields{
|
||||
"hostname": rhChange.Hostname,
|
||||
"region_key": rhChange.RegionKey,
|
||||
"hostname": rhChange.hostname,
|
||||
"region_key": rhChange.regionKey,
|
||||
"action": rhChange.action.String(),
|
||||
"zone": resourceContainer.Identifier,
|
||||
})
|
||||
@ -124,7 +129,7 @@ func (p *CloudFlareProvider) submitRegionalHostnameChange(ctx context.Context, r
|
||||
}
|
||||
case cloudFlareDelete:
|
||||
changeLog.Debug("Deleting regional hostname")
|
||||
if err := p.Client.DeleteDataLocalizationRegionalHostname(ctx, resourceContainer, rhChange.Hostname); err != nil {
|
||||
if err := p.Client.DeleteDataLocalizationRegionalHostname(ctx, resourceContainer, rhChange.hostname); err != nil {
|
||||
changeLog.Errorf("failed to delete regional hostname: %v", err)
|
||||
return false
|
||||
}
|
||||
@ -132,34 +137,37 @@ func (p *CloudFlareProvider) submitRegionalHostnameChange(ctx context.Context, r
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *CloudFlareProvider) listDataLocalisationRegionalHostnames(ctx context.Context, resourceContainer *cloudflare.ResourceContainer) (RegionalHostnamesMap, error) {
|
||||
func (p *CloudFlareProvider) listDataLocalisationRegionalHostnames(ctx context.Context, resourceContainer *cloudflare.ResourceContainer) (regionalHostnamesMap, error) {
|
||||
rhs, err := p.Client.ListDataLocalizationRegionalHostnames(ctx, resourceContainer, cloudflare.ListDataLocalizationRegionalHostnamesParams{})
|
||||
if err != nil {
|
||||
return nil, convertCloudflareError(err)
|
||||
}
|
||||
rhsMap := make(RegionalHostnamesMap)
|
||||
for _, r := range rhs {
|
||||
rhsMap[r.Hostname] = r
|
||||
rhsMap := make(regionalHostnamesMap)
|
||||
for _, rh := range rhs {
|
||||
rhsMap[rh.Hostname] = regionalHostname{
|
||||
hostname: rh.Hostname,
|
||||
regionKey: rh.RegionKey,
|
||||
}
|
||||
}
|
||||
return rhsMap, nil
|
||||
}
|
||||
|
||||
// regionalHostname returns a RegionalHostname for the given endpoint.
|
||||
// regionalHostname returns a regionalHostname for the given endpoint.
|
||||
//
|
||||
// If the regional services feature is not enabled or the record type does not support regional hostnames,
|
||||
// it returns an empty RegionalHostname.
|
||||
// it returns an empty regionalHostname.
|
||||
// If the endpoint has a specific region key set, it uses that; otherwise, it defaults to the region key configured in the provider.
|
||||
func (p *CloudFlareProvider) regionalHostname(ep *endpoint.Endpoint) cloudflare.RegionalHostname {
|
||||
func (p *CloudFlareProvider) regionalHostname(ep *endpoint.Endpoint) regionalHostname {
|
||||
if !p.RegionalServicesConfig.Enabled || !recordTypeRegionalHostnameSupported[ep.RecordType] {
|
||||
return cloudflare.RegionalHostname{}
|
||||
return regionalHostname{}
|
||||
}
|
||||
regionKey := p.RegionalServicesConfig.RegionKey
|
||||
if epRegionKey, exists := ep.GetProviderSpecificProperty(annotations.CloudflareRegionKey); exists {
|
||||
regionKey = epRegionKey
|
||||
}
|
||||
return cloudflare.RegionalHostname{
|
||||
Hostname: ep.DNSName,
|
||||
RegionKey: regionKey,
|
||||
return regionalHostname{
|
||||
hostname: ep.DNSName,
|
||||
regionKey: regionKey,
|
||||
}
|
||||
}
|
||||
|
||||
@ -192,7 +200,7 @@ func (p *CloudFlareProvider) addEnpointsProviderSpecificRegionKeyProperty(ctx co
|
||||
|
||||
for _, ep := range supportedEndpoints {
|
||||
if rh, found := regionalHostnames[ep.DNSName]; found {
|
||||
ep.SetProviderSpecificProperty(annotations.CloudflareRegionKey, rh.RegionKey)
|
||||
ep.SetProviderSpecificProperty(annotations.CloudflareRegionKey, rh.regionKey)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
@ -203,67 +211,67 @@ func (p *CloudFlareProvider) addEnpointsProviderSpecificRegionKeyProperty(ctx co
|
||||
// If there is a delete and a create or update action for the same hostname,
|
||||
// The create or update takes precedence.
|
||||
// Returns an error for conflicting region keys.
|
||||
func desiredRegionalHostnames(changes []*cloudFlareChange) ([]cloudflare.RegionalHostname, error) {
|
||||
rhs := make(map[string]cloudflare.RegionalHostname)
|
||||
func desiredRegionalHostnames(changes []*cloudFlareChange) ([]regionalHostname, error) {
|
||||
rhs := make(map[string]regionalHostname)
|
||||
for _, change := range changes {
|
||||
if change.RegionalHostname.Hostname == "" {
|
||||
if change.RegionalHostname.hostname == "" {
|
||||
continue
|
||||
}
|
||||
rh, found := rhs[change.RegionalHostname.Hostname]
|
||||
rh, found := rhs[change.RegionalHostname.hostname]
|
||||
if !found {
|
||||
if change.Action == cloudFlareDelete {
|
||||
rhs[change.RegionalHostname.Hostname] = cloudflare.RegionalHostname{
|
||||
Hostname: change.RegionalHostname.Hostname,
|
||||
RegionKey: "", // Indicate that this regional hostname should not exists
|
||||
rhs[change.RegionalHostname.hostname] = regionalHostname{
|
||||
hostname: change.RegionalHostname.hostname,
|
||||
regionKey: "", // Indicate that this regional hostname should not exists
|
||||
}
|
||||
continue
|
||||
}
|
||||
rhs[change.RegionalHostname.Hostname] = change.RegionalHostname
|
||||
rhs[change.RegionalHostname.hostname] = change.RegionalHostname
|
||||
continue
|
||||
}
|
||||
if change.Action == cloudFlareDelete {
|
||||
// A previous regional hostname exists so we can skip this delete action
|
||||
continue
|
||||
}
|
||||
if rh.RegionKey == "" {
|
||||
if rh.regionKey == "" {
|
||||
// If the existing regional hostname has no region key, we can overwrite it
|
||||
rhs[change.RegionalHostname.Hostname] = change.RegionalHostname
|
||||
rhs[change.RegionalHostname.hostname] = change.RegionalHostname
|
||||
continue
|
||||
}
|
||||
if rh.RegionKey != change.RegionalHostname.RegionKey {
|
||||
return nil, fmt.Errorf("conflicting region keys for regional hostname %q: %q and %q", change.RegionalHostname.Hostname, rh.RegionKey, change.RegionalHostname.RegionKey)
|
||||
if rh.regionKey != change.RegionalHostname.regionKey {
|
||||
return nil, fmt.Errorf("conflicting region keys for regional hostname %q: %q and %q", change.RegionalHostname.hostname, rh.regionKey, change.RegionalHostname.regionKey)
|
||||
}
|
||||
}
|
||||
return slices.Collect(maps.Values(rhs)), nil
|
||||
}
|
||||
|
||||
// regionalHostnamesChanges build a list of changes needed to synchronize the current regional hostnames state with the desired state.
|
||||
func regionalHostnamesChanges(desired []cloudflare.RegionalHostname, regionalHostnames RegionalHostnamesMap) []regionalHostnameChange {
|
||||
func regionalHostnamesChanges(desired []regionalHostname, regionalHostnames regionalHostnamesMap) []regionalHostnameChange {
|
||||
changes := make([]regionalHostnameChange, 0)
|
||||
for _, rh := range desired {
|
||||
current, found := regionalHostnames[rh.Hostname]
|
||||
if rh.RegionKey == "" {
|
||||
current, found := regionalHostnames[rh.hostname]
|
||||
if rh.regionKey == "" {
|
||||
// If the region key is empty, we don't want a regional hostname
|
||||
if !found {
|
||||
continue
|
||||
}
|
||||
changes = append(changes, regionalHostnameChange{
|
||||
action: cloudFlareDelete,
|
||||
RegionalHostname: rh,
|
||||
regionalHostname: rh,
|
||||
})
|
||||
continue
|
||||
}
|
||||
if !found {
|
||||
changes = append(changes, regionalHostnameChange{
|
||||
action: cloudFlareCreate,
|
||||
RegionalHostname: rh,
|
||||
regionalHostname: rh,
|
||||
})
|
||||
continue
|
||||
}
|
||||
if rh.RegionKey != current.RegionKey {
|
||||
if rh.regionKey != current.regionKey {
|
||||
changes = append(changes, regionalHostnameChange{
|
||||
action: cloudFlareUpdate,
|
||||
RegionalHostname: rh,
|
||||
regionalHostname: rh,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,14 @@ func (m *mockCloudFlareClient) ListDataLocalizationRegionalHostnames(ctx context
|
||||
if strings.Contains(rc.Identifier, "rherror") {
|
||||
return nil, fmt.Errorf("failed to list regional hostnames")
|
||||
}
|
||||
return m.regionalHostnames[rc.Identifier], nil
|
||||
rhs := make([]cloudflare.RegionalHostname, 0, len(m.regionalHostnames[rc.Identifier]))
|
||||
for _, rh := range m.regionalHostnames[rc.Identifier] {
|
||||
rhs = append(rhs, cloudflare.RegionalHostname{
|
||||
Hostname: rh.hostname,
|
||||
RegionKey: rh.regionKey,
|
||||
})
|
||||
}
|
||||
return rhs, nil
|
||||
}
|
||||
|
||||
func (m *mockCloudFlareClient) CreateDataLocalizationRegionalHostname(ctx context.Context, rc *cloudflare.ResourceContainer, rp cloudflare.CreateDataLocalizationRegionalHostnameParams) error {
|
||||
@ -49,9 +56,9 @@ func (m *mockCloudFlareClient) CreateDataLocalizationRegionalHostname(ctx contex
|
||||
Name: "CreateDataLocalizationRegionalHostname",
|
||||
ZoneId: rc.Identifier,
|
||||
RecordId: "",
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: rp.Hostname,
|
||||
RegionKey: rp.RegionKey,
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: rp.Hostname,
|
||||
regionKey: rp.RegionKey,
|
||||
},
|
||||
})
|
||||
return nil
|
||||
@ -66,9 +73,9 @@ func (m *mockCloudFlareClient) UpdateDataLocalizationRegionalHostname(ctx contex
|
||||
Name: "UpdateDataLocalizationRegionalHostname",
|
||||
ZoneId: rc.Identifier,
|
||||
RecordId: "",
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: rp.Hostname,
|
||||
RegionKey: rp.RegionKey,
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: rp.Hostname,
|
||||
regionKey: rp.RegionKey,
|
||||
},
|
||||
})
|
||||
return nil
|
||||
@ -82,8 +89,8 @@ func (m *mockCloudFlareClient) DeleteDataLocalizationRegionalHostname(ctx contex
|
||||
Name: "DeleteDataLocalizationRegionalHostname",
|
||||
ZoneId: rc.Identifier,
|
||||
RecordId: "",
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: hostname,
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: hostname,
|
||||
},
|
||||
})
|
||||
return nil
|
||||
@ -93,14 +100,14 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
records map[string]cloudflare.DNSRecord
|
||||
regionalHostnames []cloudflare.RegionalHostname
|
||||
regionalHostnames []regionalHostname
|
||||
endpoints []*endpoint.Endpoint
|
||||
want []MockAction
|
||||
}{
|
||||
{
|
||||
name: "create",
|
||||
records: map[string]cloudflare.DNSRecord{},
|
||||
regionalHostnames: []cloudflare.RegionalHostname{},
|
||||
regionalHostnames: []regionalHostname{},
|
||||
endpoints: []*endpoint.Endpoint{
|
||||
{
|
||||
RecordType: "A",
|
||||
@ -131,9 +138,9 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
{
|
||||
Name: "CreateDataLocalizationRegionalHostname",
|
||||
ZoneId: "001",
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "create.bar.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "create.bar.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -150,10 +157,10 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
Proxied: proxyDisabled,
|
||||
},
|
||||
},
|
||||
regionalHostnames: []cloudflare.RegionalHostname{
|
||||
regionalHostnames: []regionalHostname{
|
||||
{
|
||||
Hostname: "update.bar.com",
|
||||
RegionKey: "us",
|
||||
hostname: "update.bar.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
},
|
||||
endpoints: []*endpoint.Endpoint{
|
||||
@ -186,9 +193,9 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
{
|
||||
Name: "UpdateDataLocalizationRegionalHostname",
|
||||
ZoneId: "001",
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "update.bar.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "update.bar.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -205,10 +212,10 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
Proxied: proxyDisabled,
|
||||
},
|
||||
},
|
||||
regionalHostnames: []cloudflare.RegionalHostname{
|
||||
regionalHostnames: []regionalHostname{
|
||||
{
|
||||
Hostname: "delete.bar.com",
|
||||
RegionKey: "us",
|
||||
hostname: "delete.bar.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
},
|
||||
endpoints: []*endpoint.Endpoint{},
|
||||
@ -222,8 +229,8 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
{
|
||||
Name: "DeleteDataLocalizationRegionalHostname",
|
||||
ZoneId: "001",
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "delete.bar.com",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "delete.bar.com",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -240,10 +247,10 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
Proxied: proxyDisabled,
|
||||
},
|
||||
},
|
||||
regionalHostnames: []cloudflare.RegionalHostname{
|
||||
regionalHostnames: []regionalHostname{
|
||||
{
|
||||
Hostname: "nochange.bar.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "nochange.bar.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
endpoints: []*endpoint.Endpoint{
|
||||
@ -273,7 +280,7 @@ func TestCloudflareRegionalHostnameActions(t *testing.T) {
|
||||
Records: map[string]map[string]cloudflare.DNSRecord{
|
||||
"001": tt.records,
|
||||
},
|
||||
regionalHostnames: map[string][]cloudflare.RegionalHostname{
|
||||
regionalHostnames: map[string][]regionalHostname{
|
||||
"001": tt.regionalHostnames,
|
||||
},
|
||||
},
|
||||
@ -323,9 +330,9 @@ func TestCloudflareRegionalHostnameDefaults(t *testing.T) {
|
||||
{
|
||||
Name: "CreateDataLocalizationRegionalHostname",
|
||||
ZoneId: "001",
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "bar.com",
|
||||
RegionKey: "us",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "bar.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -341,7 +348,7 @@ func Test_regionalHostname(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want cloudflare.RegionalHostname
|
||||
want regionalHostname
|
||||
}{
|
||||
{
|
||||
name: "no region key",
|
||||
@ -355,9 +362,9 @@ func Test_regionalHostname(t *testing.T) {
|
||||
RegionKey: "",
|
||||
},
|
||||
},
|
||||
want: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "",
|
||||
want: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -372,9 +379,9 @@ func Test_regionalHostname(t *testing.T) {
|
||||
RegionKey: "us",
|
||||
},
|
||||
},
|
||||
want: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "us",
|
||||
want: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -395,9 +402,9 @@ func Test_regionalHostname(t *testing.T) {
|
||||
RegionKey: "us",
|
||||
},
|
||||
},
|
||||
want: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
want: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -418,9 +425,9 @@ func Test_regionalHostname(t *testing.T) {
|
||||
RegionKey: "us",
|
||||
},
|
||||
},
|
||||
want: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "",
|
||||
want: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -441,7 +448,7 @@ func Test_regionalHostname(t *testing.T) {
|
||||
RegionKey: "us",
|
||||
},
|
||||
},
|
||||
want: cloudflare.RegionalHostname{},
|
||||
want: regionalHostname{},
|
||||
},
|
||||
{
|
||||
name: "disabled",
|
||||
@ -460,9 +467,9 @@ func Test_regionalHostname(t *testing.T) {
|
||||
Enabled: false,
|
||||
},
|
||||
},
|
||||
want: cloudflare.RegionalHostname{
|
||||
Hostname: "",
|
||||
RegionKey: "",
|
||||
want: regionalHostname{
|
||||
hostname: "",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -479,7 +486,7 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
changes []*cloudFlareChange
|
||||
want []cloudflare.RegionalHostname
|
||||
want []regionalHostname
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
@ -501,23 +508,23 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareUpdate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []cloudflare.RegionalHostname{
|
||||
want: []regionalHostname{
|
||||
{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
@ -527,16 +534,16 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareUpdate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "us", // Different region key
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "us", // Different region key
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -548,38 +555,38 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example1.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example1.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareUpdate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example2.com",
|
||||
RegionKey: "us",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example2.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareDelete,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example3.com",
|
||||
RegionKey: "us",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example3.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []cloudflare.RegionalHostname{
|
||||
want: []regionalHostname{
|
||||
{
|
||||
Hostname: "example1.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "example1.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
{
|
||||
Hostname: "example2.com",
|
||||
RegionKey: "us",
|
||||
hostname: "example2.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
{
|
||||
Hostname: "example3.com",
|
||||
RegionKey: "",
|
||||
hostname: "example3.com",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
@ -589,16 +596,16 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "", // Empty region key
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "", // Empty region key
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []cloudflare.RegionalHostname{
|
||||
want: []regionalHostname{
|
||||
{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "",
|
||||
hostname: "example.com",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
@ -608,23 +615,23 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "", // Empty region key
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "", // Empty region key
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareUpdate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []cloudflare.RegionalHostname{
|
||||
want: []regionalHostname{
|
||||
{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
@ -634,23 +641,23 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareUpdate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu", // Empty region key
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu", // Empty region key
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []cloudflare.RegionalHostname{
|
||||
want: []regionalHostname{
|
||||
{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
@ -660,23 +667,23 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareDelete,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []cloudflare.RegionalHostname{
|
||||
want: []regionalHostname{
|
||||
{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
@ -686,23 +693,23 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
changes: []*cloudFlareChange{
|
||||
{
|
||||
Action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
Action: cloudFlareDelete,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
},
|
||||
want: []cloudflare.RegionalHostname{
|
||||
want: []regionalHostname{
|
||||
{
|
||||
Hostname: "example.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
wantErr: false,
|
||||
@ -718,10 +725,10 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
sort.Slice(got, func(i, j int) bool {
|
||||
return got[i].Hostname < got[j].Hostname
|
||||
return got[i].hostname < got[j].hostname
|
||||
})
|
||||
sort.Slice(tt.want, func(i, j int) bool {
|
||||
return tt.want[i].Hostname < tt.want[j].Hostname
|
||||
return tt.want[i].hostname < tt.want[j].hostname
|
||||
})
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
@ -731,74 +738,74 @@ func Test_desiredDataLocalizationRegionalHostnames(t *testing.T) {
|
||||
func Test_dataLocalizationRegionalHostnamesChanges(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
desired []cloudflare.RegionalHostname
|
||||
regionalHostnames RegionalHostnamesMap
|
||||
desired []regionalHostname
|
||||
regionalHostnames regionalHostnamesMap
|
||||
want []regionalHostnameChange
|
||||
}{
|
||||
{
|
||||
name: "empty desired and current lists",
|
||||
desired: []cloudflare.RegionalHostname{},
|
||||
regionalHostnames: RegionalHostnamesMap{},
|
||||
desired: []regionalHostname{},
|
||||
regionalHostnames: regionalHostnamesMap{},
|
||||
want: []regionalHostnameChange{},
|
||||
},
|
||||
{
|
||||
name: "multiple changes",
|
||||
desired: []cloudflare.RegionalHostname{
|
||||
desired: []regionalHostname{
|
||||
{
|
||||
Hostname: "create.example.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "create.example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
{
|
||||
Hostname: "update.example.com",
|
||||
RegionKey: "eu",
|
||||
hostname: "update.example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
{
|
||||
Hostname: "delete.example.com",
|
||||
RegionKey: "",
|
||||
hostname: "delete.example.com",
|
||||
regionKey: "",
|
||||
},
|
||||
{
|
||||
Hostname: "nochange.example.com",
|
||||
RegionKey: "us",
|
||||
hostname: "nochange.example.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
{
|
||||
Hostname: "absent.example.com",
|
||||
RegionKey: "",
|
||||
hostname: "absent.example.com",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
regionalHostnames: RegionalHostnamesMap{
|
||||
"update.example.com": cloudflare.RegionalHostname{
|
||||
Hostname: "update.example.com",
|
||||
RegionKey: "us",
|
||||
regionalHostnames: regionalHostnamesMap{
|
||||
"update.example.com": regionalHostname{
|
||||
hostname: "update.example.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
"delete.example.com": cloudflare.RegionalHostname{
|
||||
Hostname: "delete.example.com",
|
||||
RegionKey: "ap",
|
||||
"delete.example.com": regionalHostname{
|
||||
hostname: "delete.example.com",
|
||||
regionKey: "ap",
|
||||
},
|
||||
"nochange.example.com": cloudflare.RegionalHostname{
|
||||
Hostname: "nochange.example.com",
|
||||
RegionKey: "us",
|
||||
"nochange.example.com": regionalHostname{
|
||||
hostname: "nochange.example.com",
|
||||
regionKey: "us",
|
||||
},
|
||||
},
|
||||
want: []regionalHostnameChange{
|
||||
{
|
||||
action: cloudFlareCreate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "create.example.com",
|
||||
RegionKey: "eu",
|
||||
regionalHostname: regionalHostname{
|
||||
hostname: "create.example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
action: cloudFlareUpdate,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "update.example.com",
|
||||
RegionKey: "eu",
|
||||
regionalHostname: regionalHostname{
|
||||
hostname: "update.example.com",
|
||||
regionKey: "eu",
|
||||
},
|
||||
},
|
||||
{
|
||||
action: cloudFlareDelete,
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "delete.example.com",
|
||||
RegionKey: "",
|
||||
regionalHostname: regionalHostname{
|
||||
hostname: "delete.example.com",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -834,7 +841,7 @@ func TestApplyChangesWithRegionalHostnamesFaillures(t *testing.T) {
|
||||
t.Parallel()
|
||||
type fields struct {
|
||||
Records map[string]cloudflare.DNSRecord
|
||||
RegionalHostnames []cloudflare.RegionalHostname
|
||||
RegionalHostnames []regionalHostname
|
||||
RegionKey string
|
||||
}
|
||||
type args struct {
|
||||
@ -869,7 +876,7 @@ func TestApplyChangesWithRegionalHostnamesFaillures(t *testing.T) {
|
||||
name: "create fails",
|
||||
fields: fields{
|
||||
Records: map[string]cloudflare.DNSRecord{},
|
||||
RegionalHostnames: []cloudflare.RegionalHostname{},
|
||||
RegionalHostnames: []regionalHostname{},
|
||||
RegionKey: "us",
|
||||
},
|
||||
args: args{
|
||||
@ -899,8 +906,8 @@ func TestApplyChangesWithRegionalHostnamesFaillures(t *testing.T) {
|
||||
Content: "127.0.0.1",
|
||||
},
|
||||
},
|
||||
RegionalHostnames: []cloudflare.RegionalHostname{
|
||||
{Hostname: "rherror.bar.com", RegionKey: "us"},
|
||||
RegionalHostnames: []regionalHostname{
|
||||
{hostname: "rherror.bar.com", regionKey: "us"},
|
||||
},
|
||||
RegionKey: "us",
|
||||
},
|
||||
@ -941,8 +948,8 @@ func TestApplyChangesWithRegionalHostnamesFaillures(t *testing.T) {
|
||||
Content: "127.0.0.1",
|
||||
},
|
||||
},
|
||||
RegionalHostnames: []cloudflare.RegionalHostname{
|
||||
{Hostname: "rherror.bar.com", RegionKey: "us"},
|
||||
RegionalHostnames: []regionalHostname{
|
||||
{hostname: "rherror.bar.com", regionKey: "us"},
|
||||
},
|
||||
RegionKey: "us",
|
||||
},
|
||||
@ -964,7 +971,7 @@ func TestApplyChangesWithRegionalHostnamesFaillures(t *testing.T) {
|
||||
name: "conflicting regional keys",
|
||||
fields: fields{
|
||||
Records: map[string]cloudflare.DNSRecord{},
|
||||
RegionalHostnames: []cloudflare.RegionalHostname{},
|
||||
RegionalHostnames: []regionalHostname{},
|
||||
RegionKey: "us",
|
||||
},
|
||||
args: args{
|
||||
@ -1008,7 +1015,7 @@ func TestApplyChangesWithRegionalHostnamesFaillures(t *testing.T) {
|
||||
Records: map[string]map[string]cloudflare.DNSRecord{
|
||||
"001": records,
|
||||
},
|
||||
regionalHostnames: map[string][]cloudflare.RegionalHostname{
|
||||
regionalHostnames: map[string][]regionalHostname{
|
||||
"001": tt.fields.RegionalHostnames,
|
||||
},
|
||||
},
|
||||
@ -1034,7 +1041,7 @@ func TestApplyChangesWithRegionalHostnamesDryRun(t *testing.T) {
|
||||
t.Parallel()
|
||||
type fields struct {
|
||||
Records map[string]cloudflare.DNSRecord
|
||||
RegionalHostnames []cloudflare.RegionalHostname
|
||||
RegionalHostnames []regionalHostname
|
||||
RegionKey string
|
||||
}
|
||||
type args struct {
|
||||
@ -1050,7 +1057,7 @@ func TestApplyChangesWithRegionalHostnamesDryRun(t *testing.T) {
|
||||
name: "create dry run",
|
||||
fields: fields{
|
||||
Records: map[string]cloudflare.DNSRecord{},
|
||||
RegionalHostnames: []cloudflare.RegionalHostname{},
|
||||
RegionalHostnames: []regionalHostname{},
|
||||
RegionKey: "us",
|
||||
},
|
||||
args: args{
|
||||
@ -1080,8 +1087,8 @@ func TestApplyChangesWithRegionalHostnamesDryRun(t *testing.T) {
|
||||
Content: "127.0.0.1",
|
||||
},
|
||||
},
|
||||
RegionalHostnames: []cloudflare.RegionalHostname{
|
||||
{Hostname: "foo.bar.com", RegionKey: "us"},
|
||||
RegionalHostnames: []regionalHostname{
|
||||
{hostname: "foo.bar.com", regionKey: "us"},
|
||||
},
|
||||
RegionKey: "us",
|
||||
},
|
||||
@ -1122,8 +1129,8 @@ func TestApplyChangesWithRegionalHostnamesDryRun(t *testing.T) {
|
||||
Content: "127.0.0.1",
|
||||
},
|
||||
},
|
||||
RegionalHostnames: []cloudflare.RegionalHostname{
|
||||
{Hostname: "foo.bar.com", RegionKey: "us"},
|
||||
RegionalHostnames: []regionalHostname{
|
||||
{hostname: "foo.bar.com", regionKey: "us"},
|
||||
},
|
||||
RegionKey: "us",
|
||||
},
|
||||
@ -1157,7 +1164,7 @@ func TestApplyChangesWithRegionalHostnamesDryRun(t *testing.T) {
|
||||
Records: map[string]map[string]cloudflare.DNSRecord{
|
||||
"001": records,
|
||||
},
|
||||
regionalHostnames: map[string][]cloudflare.RegionalHostname{
|
||||
regionalHostnames: map[string][]regionalHostname{
|
||||
"001": tt.fields.RegionalHostnames,
|
||||
},
|
||||
},
|
||||
|
@ -48,7 +48,7 @@ type MockAction struct {
|
||||
ZoneId string
|
||||
RecordId string
|
||||
RecordData cloudflare.DNSRecord
|
||||
RegionalHostname cloudflare.RegionalHostname
|
||||
RegionalHostname regionalHostname
|
||||
}
|
||||
|
||||
type mockCloudFlareClient struct {
|
||||
@ -60,7 +60,7 @@ type mockCloudFlareClient struct {
|
||||
listZonesContextError error
|
||||
dnsRecordsError error
|
||||
customHostnames map[string][]cloudflare.CustomHostname
|
||||
regionalHostnames map[string][]cloudflare.RegionalHostname
|
||||
regionalHostnames map[string][]regionalHostname
|
||||
}
|
||||
|
||||
var ExampleDomain = []cloudflare.DNSRecord{
|
||||
@ -102,7 +102,7 @@ func NewMockCloudFlareClient() *mockCloudFlareClient {
|
||||
"002": {},
|
||||
},
|
||||
customHostnames: map[string][]cloudflare.CustomHostname{},
|
||||
regionalHostnames: map[string][]cloudflare.RegionalHostname{},
|
||||
regionalHostnames: map[string][]regionalHostname{},
|
||||
}
|
||||
}
|
||||
|
||||
@ -1795,8 +1795,8 @@ func TestCloudFlareProvider_newCloudFlareChange(t *testing.T) {
|
||||
}
|
||||
|
||||
change, _ := p.newCloudFlareChange(cloudFlareCreate, ep, ep.Targets[0], nil)
|
||||
if change.RegionalHostname.RegionKey != "us" {
|
||||
t.Errorf("expected region key to be 'us', but got '%s'", change.RegionalHostname.RegionKey)
|
||||
if change.RegionalHostname.regionKey != "us" {
|
||||
t.Errorf("expected region key to be 'us', but got '%s'", change.RegionalHostname.regionKey)
|
||||
}
|
||||
|
||||
var freeValidCommentBuilder strings.Builder
|
||||
@ -1949,8 +1949,8 @@ func TestCloudFlareProvider_submitChangesCNAME(t *testing.T) {
|
||||
ID: "1234567890",
|
||||
Content: "my-tunnel-guid-here.cfargotunnel.com",
|
||||
},
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "my-domain-here.app",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "my-domain-here.app",
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -1961,9 +1961,9 @@ func TestCloudFlareProvider_submitChangesCNAME(t *testing.T) {
|
||||
ID: "9876543210",
|
||||
Content: "heritage=external-dns,external-dns/owner=default,external-dns/resource=service/external-dns/my-domain-here-app",
|
||||
},
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "my-domain-here.app",
|
||||
RegionKey: "",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "my-domain-here.app",
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -2012,8 +2012,8 @@ func TestCloudFlareProvider_submitChangesApex(t *testing.T) {
|
||||
ID: "1234567890",
|
||||
Content: "my-tunnel-guid-here.cfargotunnel.com",
|
||||
},
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "@", // APEX record
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "@", // APEX record
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -2024,9 +2024,9 @@ func TestCloudFlareProvider_submitChangesApex(t *testing.T) {
|
||||
ID: "9876543210",
|
||||
Content: "heritage=external-dns,external-dns/owner=default,external-dns/resource=service/external-dns/my-domain-here-app",
|
||||
},
|
||||
RegionalHostname: cloudflare.RegionalHostname{
|
||||
Hostname: "@", // APEX record
|
||||
RegionKey: "",
|
||||
RegionalHostname: regionalHostname{
|
||||
hostname: "@", // APEX record
|
||||
regionKey: "",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user