Skip to content

Commit 5c42ed0

Browse files
authored
refactor(provider/cloudflare): use local regionalHostname struct (kubernetes-sigs#5615)
1 parent 69d3424 commit 5c42ed0

File tree

4 files changed

+246
-231
lines changed

4 files changed

+246
-231
lines changed

provider/cloudflare/cloudflare.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ type CloudFlareProvider struct {
220220
type cloudFlareChange struct {
221221
Action changeAction
222222
ResourceRecord cloudflare.DNSRecord
223-
RegionalHostname cloudflare.RegionalHostname
223+
RegionalHostname regionalHostname
224224
CustomHostnames map[string]cloudflare.CustomHostname
225225
CustomHostnamesPrev []string
226226
}

provider/cloudflare/cloudflare_regional.go

Lines changed: 49 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,17 @@ var recordTypeRegionalHostnameSupported = map[string]bool{
4040
"CNAME": true,
4141
}
4242

43-
// RegionalHostnamesMap is a map of regional hostnames keyed by hostname.
44-
type RegionalHostnamesMap map[string]cloudflare.RegionalHostname
43+
type regionalHostname struct {
44+
hostname string
45+
regionKey string
46+
}
47+
48+
// regionalHostnamesMap is a map of regional hostnames keyed by hostname.
49+
type regionalHostnamesMap map[string]regionalHostname
4550

4651
type regionalHostnameChange struct {
4752
action changeAction
48-
cloudflare.RegionalHostname
53+
regionalHostname
4954
}
5055

5156
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,
6974
// createDataLocalizationRegionalHostnameParams is a function that returns the appropriate RegionalHostname Param based on the cloudFlareChange passed in
7075
func createDataLocalizationRegionalHostnameParams(rhc regionalHostnameChange) cloudflare.CreateDataLocalizationRegionalHostnameParams {
7176
return cloudflare.CreateDataLocalizationRegionalHostnameParams{
72-
Hostname: rhc.Hostname,
73-
RegionKey: rhc.RegionKey,
77+
Hostname: rhc.hostname,
78+
RegionKey: rhc.regionKey,
7479
}
7580
}
7681

7782
// updateDataLocalizationRegionalHostnameParams is a function that returns the appropriate RegionalHostname Param based on the cloudFlareChange passed in
7883
func updateDataLocalizationRegionalHostnameParams(rhc regionalHostnameChange) cloudflare.UpdateDataLocalizationRegionalHostnameParams {
7984
return cloudflare.UpdateDataLocalizationRegionalHostnameParams{
80-
Hostname: rhc.Hostname,
81-
RegionKey: rhc.RegionKey,
85+
Hostname: rhc.hostname,
86+
RegionKey: rhc.regionKey,
8287
}
8388
}
8489

@@ -98,8 +103,8 @@ func (p *CloudFlareProvider) submitRegionalHostnameChanges(ctx context.Context,
98103
// submitRegionalHostnameChange applies a single regional hostname change, returns false if it fails
99104
func (p *CloudFlareProvider) submitRegionalHostnameChange(ctx context.Context, rhChange regionalHostnameChange, resourceContainer *cloudflare.ResourceContainer) bool {
100105
changeLog := log.WithFields(log.Fields{
101-
"hostname": rhChange.Hostname,
102-
"region_key": rhChange.RegionKey,
106+
"hostname": rhChange.hostname,
107+
"region_key": rhChange.regionKey,
103108
"action": rhChange.action.String(),
104109
"zone": resourceContainer.Identifier,
105110
})
@@ -124,42 +129,45 @@ func (p *CloudFlareProvider) submitRegionalHostnameChange(ctx context.Context, r
124129
}
125130
case cloudFlareDelete:
126131
changeLog.Debug("Deleting regional hostname")
127-
if err := p.Client.DeleteDataLocalizationRegionalHostname(ctx, resourceContainer, rhChange.Hostname); err != nil {
132+
if err := p.Client.DeleteDataLocalizationRegionalHostname(ctx, resourceContainer, rhChange.hostname); err != nil {
128133
changeLog.Errorf("failed to delete regional hostname: %v", err)
129134
return false
130135
}
131136
}
132137
return true
133138
}
134139

135-
func (p *CloudFlareProvider) listDataLocalisationRegionalHostnames(ctx context.Context, resourceContainer *cloudflare.ResourceContainer) (RegionalHostnamesMap, error) {
140+
func (p *CloudFlareProvider) listDataLocalisationRegionalHostnames(ctx context.Context, resourceContainer *cloudflare.ResourceContainer) (regionalHostnamesMap, error) {
136141
rhs, err := p.Client.ListDataLocalizationRegionalHostnames(ctx, resourceContainer, cloudflare.ListDataLocalizationRegionalHostnamesParams{})
137142
if err != nil {
138143
return nil, convertCloudflareError(err)
139144
}
140-
rhsMap := make(RegionalHostnamesMap)
141-
for _, r := range rhs {
142-
rhsMap[r.Hostname] = r
145+
rhsMap := make(regionalHostnamesMap)
146+
for _, rh := range rhs {
147+
rhsMap[rh.Hostname] = regionalHostname{
148+
hostname: rh.Hostname,
149+
regionKey: rh.RegionKey,
150+
}
143151
}
144152
return rhsMap, nil
145153
}
146154

147-
// regionalHostname returns a RegionalHostname for the given endpoint.
155+
// regionalHostname returns a regionalHostname for the given endpoint.
148156
//
149157
// If the regional services feature is not enabled or the record type does not support regional hostnames,
150-
// it returns an empty RegionalHostname.
158+
// it returns an empty regionalHostname.
151159
// If the endpoint has a specific region key set, it uses that; otherwise, it defaults to the region key configured in the provider.
152-
func (p *CloudFlareProvider) regionalHostname(ep *endpoint.Endpoint) cloudflare.RegionalHostname {
160+
func (p *CloudFlareProvider) regionalHostname(ep *endpoint.Endpoint) regionalHostname {
153161
if !p.RegionalServicesConfig.Enabled || !recordTypeRegionalHostnameSupported[ep.RecordType] {
154-
return cloudflare.RegionalHostname{}
162+
return regionalHostname{}
155163
}
156164
regionKey := p.RegionalServicesConfig.RegionKey
157165
if epRegionKey, exists := ep.GetProviderSpecificProperty(annotations.CloudflareRegionKey); exists {
158166
regionKey = epRegionKey
159167
}
160-
return cloudflare.RegionalHostname{
161-
Hostname: ep.DNSName,
162-
RegionKey: regionKey,
168+
return regionalHostname{
169+
hostname: ep.DNSName,
170+
regionKey: regionKey,
163171
}
164172
}
165173

@@ -192,7 +200,7 @@ func (p *CloudFlareProvider) addEnpointsProviderSpecificRegionKeyProperty(ctx co
192200

193201
for _, ep := range supportedEndpoints {
194202
if rh, found := regionalHostnames[ep.DNSName]; found {
195-
ep.SetProviderSpecificProperty(annotations.CloudflareRegionKey, rh.RegionKey)
203+
ep.SetProviderSpecificProperty(annotations.CloudflareRegionKey, rh.regionKey)
196204
}
197205
}
198206
return nil
@@ -203,67 +211,67 @@ func (p *CloudFlareProvider) addEnpointsProviderSpecificRegionKeyProperty(ctx co
203211
// If there is a delete and a create or update action for the same hostname,
204212
// The create or update takes precedence.
205213
// Returns an error for conflicting region keys.
206-
func desiredRegionalHostnames(changes []*cloudFlareChange) ([]cloudflare.RegionalHostname, error) {
207-
rhs := make(map[string]cloudflare.RegionalHostname)
214+
func desiredRegionalHostnames(changes []*cloudFlareChange) ([]regionalHostname, error) {
215+
rhs := make(map[string]regionalHostname)
208216
for _, change := range changes {
209-
if change.RegionalHostname.Hostname == "" {
217+
if change.RegionalHostname.hostname == "" {
210218
continue
211219
}
212-
rh, found := rhs[change.RegionalHostname.Hostname]
220+
rh, found := rhs[change.RegionalHostname.hostname]
213221
if !found {
214222
if change.Action == cloudFlareDelete {
215-
rhs[change.RegionalHostname.Hostname] = cloudflare.RegionalHostname{
216-
Hostname: change.RegionalHostname.Hostname,
217-
RegionKey: "", // Indicate that this regional hostname should not exists
223+
rhs[change.RegionalHostname.hostname] = regionalHostname{
224+
hostname: change.RegionalHostname.hostname,
225+
regionKey: "", // Indicate that this regional hostname should not exists
218226
}
219227
continue
220228
}
221-
rhs[change.RegionalHostname.Hostname] = change.RegionalHostname
229+
rhs[change.RegionalHostname.hostname] = change.RegionalHostname
222230
continue
223231
}
224232
if change.Action == cloudFlareDelete {
225233
// A previous regional hostname exists so we can skip this delete action
226234
continue
227235
}
228-
if rh.RegionKey == "" {
236+
if rh.regionKey == "" {
229237
// If the existing regional hostname has no region key, we can overwrite it
230-
rhs[change.RegionalHostname.Hostname] = change.RegionalHostname
238+
rhs[change.RegionalHostname.hostname] = change.RegionalHostname
231239
continue
232240
}
233-
if rh.RegionKey != change.RegionalHostname.RegionKey {
234-
return nil, fmt.Errorf("conflicting region keys for regional hostname %q: %q and %q", change.RegionalHostname.Hostname, rh.RegionKey, change.RegionalHostname.RegionKey)
241+
if rh.regionKey != change.RegionalHostname.regionKey {
242+
return nil, fmt.Errorf("conflicting region keys for regional hostname %q: %q and %q", change.RegionalHostname.hostname, rh.regionKey, change.RegionalHostname.regionKey)
235243
}
236244
}
237245
return slices.Collect(maps.Values(rhs)), nil
238246
}
239247

240248
// regionalHostnamesChanges build a list of changes needed to synchronize the current regional hostnames state with the desired state.
241-
func regionalHostnamesChanges(desired []cloudflare.RegionalHostname, regionalHostnames RegionalHostnamesMap) []regionalHostnameChange {
249+
func regionalHostnamesChanges(desired []regionalHostname, regionalHostnames regionalHostnamesMap) []regionalHostnameChange {
242250
changes := make([]regionalHostnameChange, 0)
243251
for _, rh := range desired {
244-
current, found := regionalHostnames[rh.Hostname]
245-
if rh.RegionKey == "" {
252+
current, found := regionalHostnames[rh.hostname]
253+
if rh.regionKey == "" {
246254
// If the region key is empty, we don't want a regional hostname
247255
if !found {
248256
continue
249257
}
250258
changes = append(changes, regionalHostnameChange{
251259
action: cloudFlareDelete,
252-
RegionalHostname: rh,
260+
regionalHostname: rh,
253261
})
254262
continue
255263
}
256264
if !found {
257265
changes = append(changes, regionalHostnameChange{
258266
action: cloudFlareCreate,
259-
RegionalHostname: rh,
267+
regionalHostname: rh,
260268
})
261269
continue
262270
}
263-
if rh.RegionKey != current.RegionKey {
271+
if rh.regionKey != current.regionKey {
264272
changes = append(changes, regionalHostnameChange{
265273
action: cloudFlareUpdate,
266-
RegionalHostname: rh,
274+
regionalHostname: rh,
267275
})
268276
}
269277
}

0 commit comments

Comments
 (0)