Skip to content

Commit e78b385

Browse files
authored
chore(cloudflare): migrate CreateDNSRecord() to new lib (#5779)
1 parent 5181b3f commit e78b385

File tree

2 files changed

+37
-44
lines changed

2 files changed

+37
-44
lines changed

provider/cloudflare/cloudflare.go

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ type cloudFlareDNS interface {
111111
ListZones(ctx context.Context, params zones.ZoneListParams) autoPager[zones.Zone]
112112
GetZone(ctx context.Context, zoneID string) (*zones.Zone, error)
113113
ListDNSRecords(ctx context.Context, rc *cloudflarev0.ResourceContainer, rp cloudflarev0.ListDNSRecordsParams) ([]dns.RecordResponse, *cloudflarev0.ResultInfo, error)
114-
CreateDNSRecord(ctx context.Context, rc *cloudflarev0.ResourceContainer, rp cloudflarev0.CreateDNSRecordParams) (dns.RecordResponse, error)
114+
CreateDNSRecord(ctx context.Context, params dns.RecordNewParams) (*dns.RecordResponse, error)
115115
DeleteDNSRecord(ctx context.Context, rc *cloudflarev0.ResourceContainer, recordID string) error
116116
UpdateDNSRecord(ctx context.Context, rc *cloudflarev0.ResourceContainer, rp cloudflarev0.UpdateDNSRecordParams) error
117117
ListDataLocalizationRegionalHostnames(ctx context.Context, params addressing.RegionalHostnameListParams) autoPager[addressing.RegionalHostnameListResponse]
@@ -148,9 +148,8 @@ func (z zoneService) ZoneIDByName(zoneName string) (string, error) {
148148
return "", fmt.Errorf("zone %q not found in CloudFlare account - verify the zone exists and API credentials have access to it", zoneName)
149149
}
150150

151-
func (z zoneService) CreateDNSRecord(ctx context.Context, rc *cloudflarev0.ResourceContainer, rp cloudflarev0.CreateDNSRecordParams) (dns.RecordResponse, error) {
152-
record, err := z.serviceV0.CreateDNSRecord(ctx, rc, rp)
153-
return dnsRecordResponseFromLegacyDNSRecord(record), err
151+
func (z zoneService) CreateDNSRecord(ctx context.Context, params dns.RecordNewParams) (*dns.RecordResponse, error) {
152+
return z.service.DNS.Records.New(ctx, params)
154153
}
155154

156155
func (z zoneService) ListDNSRecords(ctx context.Context, rc *cloudflarev0.ResourceContainer, rp cloudflarev0.ListDNSRecordsParams) ([]dns.RecordResponse, *cloudflarev0.ResultInfo, error) {
@@ -286,20 +285,19 @@ func updateDNSRecordParam(cfc cloudFlareChange) cloudflarev0.UpdateDNSRecordPara
286285
}
287286

288287
// getCreateDNSRecordParam is a function that returns the appropriate Record Param based on the cloudFlareChange passed in
289-
func getCreateDNSRecordParam(cfc cloudFlareChange) cloudflarev0.CreateDNSRecordParams {
290-
priority := uint16(cfc.ResourceRecord.Priority)
291-
292-
params := cloudflarev0.CreateDNSRecordParams{
293-
Name: cfc.ResourceRecord.Name,
294-
TTL: int(cfc.ResourceRecord.TTL),
295-
Proxied: &cfc.ResourceRecord.Proxied,
296-
Type: string(cfc.ResourceRecord.Type),
297-
Content: cfc.ResourceRecord.Content,
298-
Priority: &priority,
299-
Comment: cfc.ResourceRecord.Comment,
288+
func getCreateDNSRecordParam(zoneID string, cfc *cloudFlareChange) dns.RecordNewParams {
289+
return dns.RecordNewParams{
290+
ZoneID: cloudflare.F(zoneID),
291+
Body: dns.RecordNewParamsBody{
292+
Name: cloudflare.F(cfc.ResourceRecord.Name),
293+
TTL: cloudflare.F(cfc.ResourceRecord.TTL),
294+
Proxied: cloudflare.F(cfc.ResourceRecord.Proxied),
295+
Type: cloudflare.F(dns.RecordNewParamsBodyType(cfc.ResourceRecord.Type)),
296+
Content: cloudflare.F(cfc.ResourceRecord.Content),
297+
Priority: cloudflare.F(cfc.ResourceRecord.Priority),
298+
Comment: cloudflare.F(cfc.ResourceRecord.Comment),
299+
},
300300
}
301-
302-
return params
303301
}
304302

305303
func convertCloudflareError(err error) error {
@@ -684,8 +682,8 @@ func (p *CloudFlareProvider) submitChanges(ctx context.Context, changes []*cloud
684682
failedChange = true
685683
}
686684
} else if change.Action == cloudFlareCreate {
687-
recordParam := getCreateDNSRecordParam(*change)
688-
_, err := p.Client.CreateDNSRecord(ctx, resourceContainer, recordParam)
685+
recordParam := getCreateDNSRecordParam(zoneID, change)
686+
_, err := p.Client.CreateDNSRecord(ctx, recordParam)
689687
if err != nil {
690688
failedChange = true
691689
log.WithFields(logFields).Errorf("failed to create record: %v", err)

provider/cloudflare/cloudflare_test.go

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -120,19 +120,6 @@ func NewMockCloudFlareClientWithRecords(records map[string][]dns.RecordResponse)
120120

121121
func getDNSRecordFromRecordParams(rp any) dns.RecordResponse {
122122
switch params := rp.(type) {
123-
case cloudflarev0.CreateDNSRecordParams:
124-
record := dns.RecordResponse{
125-
ID: params.ID,
126-
Name: params.Name,
127-
TTL: dns.TTL(params.TTL),
128-
Proxied: params.Proxied != nil && *params.Proxied,
129-
Type: dns.RecordResponseType(params.Type),
130-
Content: params.Content,
131-
}
132-
if params.Type == "MX" {
133-
record.Priority = float64(*params.Priority)
134-
}
135-
return record
136123
case cloudflarev0.UpdateDNSRecordParams:
137124
record := dns.RecordResponse{
138125
ID: params.ID,
@@ -155,25 +142,33 @@ func generateDNSRecordID(rrtype string, name string, content string) string {
155142
return fmt.Sprintf("%s-%s-%s", name, rrtype, content)
156143
}
157144

158-
func (m *mockCloudFlareClient) CreateDNSRecord(ctx context.Context, rc *cloudflarev0.ResourceContainer, rp cloudflarev0.CreateDNSRecordParams) (dns.RecordResponse, error) {
159-
recordData := getDNSRecordFromRecordParams(rp)
160-
if recordData.ID == "" {
161-
recordData.ID = generateDNSRecordID(string(recordData.Type), recordData.Name, recordData.Content)
145+
func (m *mockCloudFlareClient) CreateDNSRecord(ctx context.Context, params dns.RecordNewParams) (*dns.RecordResponse, error) {
146+
body := params.Body.(dns.RecordNewParamsBody)
147+
148+
record := dns.RecordResponse{
149+
ID: generateDNSRecordID(body.Type.String(), body.Name.Value, body.Content.Value),
150+
Name: body.Name.Value,
151+
TTL: dns.TTL(body.TTL.Value),
152+
Proxied: body.Proxied.Value,
153+
Type: dns.RecordResponseType(body.Type.String()),
154+
Content: body.Content.Value,
155+
Priority: body.Priority.Value,
162156
}
157+
163158
m.Actions = append(m.Actions, MockAction{
164159
Name: "Create",
165-
ZoneId: rc.Identifier,
166-
RecordId: recordData.ID,
167-
RecordData: recordData,
160+
ZoneId: params.ZoneID.Value,
161+
RecordId: record.ID,
162+
RecordData: record,
168163
})
169-
if zone, ok := m.Records[rc.Identifier]; ok {
170-
zone[recordData.ID] = recordData
164+
if zone, ok := m.Records[params.ZoneID.Value]; ok {
165+
zone[record.ID] = record
171166
}
172167

173-
if recordData.Name == "newerror.bar.com" {
174-
return dns.RecordResponse{}, fmt.Errorf("failed to create record")
168+
if record.Name == "newerror.bar.com" {
169+
return nil, fmt.Errorf("failed to create record")
175170
}
176-
return dns.RecordResponse{}, nil
171+
return &record, nil
177172
}
178173

179174
func (m *mockCloudFlareClient) ListDNSRecords(ctx context.Context, rc *cloudflarev0.ResourceContainer, rp cloudflarev0.ListDNSRecordsParams) ([]dns.RecordResponse, *cloudflarev0.ResultInfo, error) {

0 commit comments

Comments
 (0)