@@ -31,6 +31,7 @@ import (
3131 cloudflarev0 "github.com/cloudflare/cloudflare-go"
3232 "github.com/cloudflare/cloudflare-go/v5"
3333 "github.com/cloudflare/cloudflare-go/v5/addressing"
34+ "github.com/cloudflare/cloudflare-go/v5/dns"
3435 "github.com/cloudflare/cloudflare-go/v5/option"
3536 "github.com/cloudflare/cloudflare-go/v5/zones"
3637 log "github.com/sirupsen/logrus"
@@ -75,7 +76,7 @@ type DNSRecordIndex struct {
7576 Content string
7677}
7778
78- type DNSRecordsMap map [DNSRecordIndex ]cloudflarev0. DNSRecord
79+ type DNSRecordsMap map [DNSRecordIndex ]dns. RecordResponse
7980
8081// for faster getCustomHostname() lookup
8182type CustomHostnameIndex struct {
@@ -109,8 +110,8 @@ type cloudFlareDNS interface {
109110 ZoneIDByName (zoneName string ) (string , error )
110111 ListZones (ctx context.Context , params zones.ZoneListParams ) autoPager [zones.Zone ]
111112 GetZone (ctx context.Context , zoneID string ) (* zones.Zone , error )
112- ListDNSRecords (ctx context.Context , rc * cloudflarev0.ResourceContainer , rp cloudflarev0.ListDNSRecordsParams ) ([]cloudflarev0. DNSRecord , * cloudflarev0.ResultInfo , error )
113- CreateDNSRecord (ctx context.Context , rc * cloudflarev0.ResourceContainer , rp cloudflarev0.CreateDNSRecordParams ) (cloudflarev0. DNSRecord , error )
113+ 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 )
114115 DeleteDNSRecord (ctx context.Context , rc * cloudflarev0.ResourceContainer , recordID string ) error
115116 UpdateDNSRecord (ctx context.Context , rc * cloudflarev0.ResourceContainer , rp cloudflarev0.UpdateDNSRecordParams ) error
116117 ListDataLocalizationRegionalHostnames (ctx context.Context , params addressing.RegionalHostnameListParams ) autoPager [addressing.RegionalHostnameListResponse ]
@@ -147,12 +148,18 @@ func (z zoneService) ZoneIDByName(zoneName string) (string, error) {
147148 return "" , fmt .Errorf ("zone %q not found in CloudFlare account - verify the zone exists and API credentials have access to it" , zoneName )
148149}
149150
150- func (z zoneService ) CreateDNSRecord (ctx context.Context , rc * cloudflarev0.ResourceContainer , rp cloudflarev0.CreateDNSRecordParams ) (cloudflarev0.DNSRecord , error ) {
151- return z .serviceV0 .CreateDNSRecord (ctx , rc , rp )
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
152154}
153155
154- func (z zoneService ) ListDNSRecords (ctx context.Context , rc * cloudflarev0.ResourceContainer , rp cloudflarev0.ListDNSRecordsParams ) ([]cloudflarev0.DNSRecord , * cloudflarev0.ResultInfo , error ) {
155- return z .serviceV0 .ListDNSRecords (ctx , rc , rp )
156+ func (z zoneService ) ListDNSRecords (ctx context.Context , rc * cloudflarev0.ResourceContainer , rp cloudflarev0.ListDNSRecordsParams ) ([]dns.RecordResponse , * cloudflarev0.ResultInfo , error ) {
157+ records , info , err := z .serviceV0 .ListDNSRecords (ctx , rc , rp )
158+ convertedRecords := make ([]dns.RecordResponse , 0 , len (records ))
159+ for _ , record := range records {
160+ convertedRecords = append (convertedRecords , dnsRecordResponseFromLegacyDNSRecord (record ))
161+ }
162+ return convertedRecords , info , err
156163}
157164
158165func (z zoneService ) UpdateDNSRecord (ctx context.Context , rc * cloudflarev0.ResourceContainer , rp cloudflarev0.UpdateDNSRecordParams ) error {
@@ -250,7 +257,7 @@ type CloudFlareProvider struct {
250257// cloudFlareChange differentiates between ChangeActions
251258type cloudFlareChange struct {
252259 Action changeAction
253- ResourceRecord cloudflarev0. DNSRecord
260+ ResourceRecord dns. RecordResponse
254261 RegionalHostname regionalHostname
255262 CustomHostnames map [string ]cloudflarev0.CustomHostname
256263 CustomHostnamesPrev []string
@@ -263,13 +270,15 @@ type RecordParamsTypes interface {
263270
264271// updateDNSRecordParam is a function that returns the appropriate Record Param based on the cloudFlareChange passed in
265272func updateDNSRecordParam (cfc cloudFlareChange ) cloudflarev0.UpdateDNSRecordParams {
273+ priority := uint16 (cfc .ResourceRecord .Priority )
274+
266275 params := cloudflarev0.UpdateDNSRecordParams {
267276 Name : cfc .ResourceRecord .Name ,
268- TTL : cfc .ResourceRecord .TTL ,
269- Proxied : cfc .ResourceRecord .Proxied ,
270- Type : cfc .ResourceRecord .Type ,
277+ TTL : int ( cfc .ResourceRecord .TTL ) ,
278+ Proxied : & cfc .ResourceRecord .Proxied ,
279+ Type : string ( cfc .ResourceRecord .Type ) ,
271280 Content : cfc .ResourceRecord .Content ,
272- Priority : cfc . ResourceRecord . Priority ,
281+ Priority : & priority ,
273282 Comment : cloudflarev0 .StringPtr (cfc .ResourceRecord .Comment ),
274283 }
275284
@@ -278,13 +287,15 @@ func updateDNSRecordParam(cfc cloudFlareChange) cloudflarev0.UpdateDNSRecordPara
278287
279288// getCreateDNSRecordParam is a function that returns the appropriate Record Param based on the cloudFlareChange passed in
280289func getCreateDNSRecordParam (cfc cloudFlareChange ) cloudflarev0.CreateDNSRecordParams {
290+ priority := uint16 (cfc .ResourceRecord .Priority )
291+
281292 params := cloudflarev0.CreateDNSRecordParams {
282293 Name : cfc .ResourceRecord .Name ,
283- TTL : cfc .ResourceRecord .TTL ,
284- Proxied : cfc .ResourceRecord .Proxied ,
285- Type : cfc .ResourceRecord .Type ,
294+ TTL : int ( cfc .ResourceRecord .TTL ) ,
295+ Proxied : & cfc .ResourceRecord .Proxied ,
296+ Type : string ( cfc .ResourceRecord .Type ) ,
286297 Content : cfc .ResourceRecord .Content ,
287- Priority : cfc . ResourceRecord . Priority ,
298+ Priority : & priority ,
288299 Comment : cfc .ResourceRecord .Comment ,
289300 }
290301
@@ -534,7 +545,7 @@ func (p *CloudFlareProvider) submitCustomHostnameChanges(ctx context.Context, zo
534545
535546 switch change .Action {
536547 case cloudFlareUpdate :
537- if recordTypeCustomHostnameSupported [change .ResourceRecord .Type ] {
548+ if recordTypeCustomHostnameSupported [string ( change .ResourceRecord .Type ) ] {
538549 add , remove , _ := provider .Difference (change .CustomHostnamesPrev , slices .Collect (maps .Keys (change .CustomHostnames )))
539550
540551 for _ , changeCH := range remove {
@@ -561,7 +572,7 @@ func (p *CloudFlareProvider) submitCustomHostnameChanges(ctx context.Context, zo
561572 }
562573 case cloudFlareDelete :
563574 for _ , changeCH := range change .CustomHostnames {
564- if recordTypeCustomHostnameSupported [change .ResourceRecord .Type ] && changeCH .Hostname != "" {
575+ if recordTypeCustomHostnameSupported [string ( change .ResourceRecord .Type ) ] && changeCH .Hostname != "" {
565576 log .WithFields (logFields ).Infof ("Deleting custom hostname %q" , changeCH .Hostname )
566577 if ch , err := getCustomHostname (chs , changeCH .Hostname ); err == nil {
567578 chID := ch .ID
@@ -577,7 +588,7 @@ func (p *CloudFlareProvider) submitCustomHostnameChanges(ctx context.Context, zo
577588 }
578589 case cloudFlareCreate :
579590 for _ , changeCH := range change .CustomHostnames {
580- if recordTypeCustomHostnameSupported [change .ResourceRecord .Type ] && changeCH .Hostname != "" {
591+ if recordTypeCustomHostnameSupported [string ( change .ResourceRecord .Type ) ] && changeCH .Hostname != "" {
581592 log .WithFields (logFields ).Infof ("Creating custom hostname %q" , changeCH .Hostname )
582593 if ch , err := getCustomHostname (chs , changeCH .Hostname ); err == nil {
583594 if changeCH .CustomOriginServer == ch .CustomOriginServer {
@@ -769,8 +780,8 @@ func (p *CloudFlareProvider) changesByZone(zones []zones.Zone, changeSet []*clou
769780 return changes
770781}
771782
772- func (p * CloudFlareProvider ) getRecordID (records DNSRecordsMap , record cloudflarev0. DNSRecord ) string {
773- if zoneRecord , ok := records [DNSRecordIndex {Name : record .Name , Type : record .Type , Content : record .Content }]; ok {
783+ func (p * CloudFlareProvider ) getRecordID (records DNSRecordsMap , record dns. RecordResponse ) string {
784+ if zoneRecord , ok := records [DNSRecordIndex {Name : record .Name , Type : string ( record .Type ) , Content : record .Content }]; ok {
774785 return zoneRecord .ID
775786 }
776787 return ""
@@ -795,11 +806,11 @@ func (p *CloudFlareProvider) newCustomHostname(customHostname string, origin str
795806}
796807
797808func (p * CloudFlareProvider ) newCloudFlareChange (action changeAction , ep * endpoint.Endpoint , target string , current * endpoint.Endpoint ) (* cloudFlareChange , error ) {
798- ttl := defaultTTL
809+ ttl := dns . TTL ( defaultTTL )
799810 proxied := shouldBeProxied (ep , p .proxiedByDefault )
800811
801812 if ep .RecordTTL .IsConfigured () {
802- ttl = int (ep .RecordTTL )
813+ ttl = dns . TTL (ep .RecordTTL )
803814 }
804815
805816 prevCustomHostnames := []string {}
@@ -824,26 +835,24 @@ func (p *CloudFlareProvider) newCloudFlareChange(action changeAction, ep *endpoi
824835 comment = p .DNSRecordsConfig .trimAndValidateComment (ep .DNSName , comment , p .ZoneHasPaidPlan )
825836 }
826837
827- priority := ( * uint16 )( nil )
838+ var priority float64
828839 if ep .RecordType == "MX" {
829840 mxRecord , err := endpoint .NewMXRecord (target )
830841 if err != nil {
831842 return & cloudFlareChange {}, fmt .Errorf ("failed to parse MX record target %q: %w" , target , err )
832843 } else {
833- priority = mxRecord .GetPriority ()
844+ priority = float64 ( * mxRecord .GetPriority () )
834845 target = * mxRecord .GetHost ()
835846 }
836847 }
837848
838849 return & cloudFlareChange {
839850 Action : action ,
840- ResourceRecord : cloudflarev0.DNSRecord {
841- Name : ep .DNSName ,
842- TTL : ttl ,
843- // We have to use pointers to bools now, as the upstream cloudflare-go library requires them
844- // see: https://github.com/cloudflare/cloudflare-go/pull/595
845- Proxied : & proxied ,
846- Type : ep .RecordType ,
851+ ResourceRecord : dns.RecordResponse {
852+ Name : ep .DNSName ,
853+ TTL : ttl ,
854+ Proxied : proxied ,
855+ Type : dns .RecordResponseType (ep .RecordType ),
847856 Content : target ,
848857 Comment : comment ,
849858 Priority : priority ,
@@ -854,8 +863,8 @@ func (p *CloudFlareProvider) newCloudFlareChange(action changeAction, ep *endpoi
854863 }, nil
855864}
856865
857- func newDNSRecordIndex (r cloudflarev0. DNSRecord ) DNSRecordIndex {
858- return DNSRecordIndex {Name : r .Name , Type : r .Type , Content : r .Content }
866+ func newDNSRecordIndex (r dns. RecordResponse ) DNSRecordIndex {
867+ return DNSRecordIndex {Name : r .Name , Type : string ( r .Type ) , Content : r .Content }
859868}
860869
861870// listDNSRecordsWithAutoPagination performs automatic pagination of results on requests to cloudflare.ListDNSRecords with custom per_page values
@@ -964,16 +973,16 @@ func (p *CloudFlareProvider) groupByNameAndTypeWithCustomHostnames(records DNSRe
964973 var endpoints []* endpoint.Endpoint
965974
966975 // group supported records by name and type
967- groups := map [string ][]cloudflarev0. DNSRecord {}
976+ groups := map [string ][]dns. RecordResponse {}
968977
969978 for _ , r := range records {
970- if ! p .SupportedAdditionalRecordTypes (r .Type ) {
979+ if ! p .SupportedAdditionalRecordTypes (string ( r .Type ) ) {
971980 continue
972981 }
973982
974- groupBy := r .Name + r .Type
983+ groupBy := r .Name + string ( r .Type )
975984 if _ , ok := groups [groupBy ]; ! ok {
976- groups [groupBy ] = []cloudflarev0. DNSRecord {}
985+ groups [groupBy ] = []dns. RecordResponse {}
977986 }
978987
979988 groups [groupBy ] = append (groups [groupBy ], r )
@@ -994,20 +1003,17 @@ func (p *CloudFlareProvider) groupByNameAndTypeWithCustomHostnames(records DNSRe
9941003 targets := make ([]string , len (records ))
9951004 for i , record := range records {
9961005 if records [i ].Type == "MX" {
997- targets [i ] = fmt .Sprintf ("%v %v" , * record .Priority , record .Content )
1006+ targets [i ] = fmt .Sprintf ("%v %v" , record .Priority , record .Content )
9981007 } else {
9991008 targets [i ] = record .Content
10001009 }
10011010 }
10021011 e := endpoint .NewEndpointWithTTL (
10031012 records [0 ].Name ,
1004- records [0 ].Type ,
1013+ string ( records [0 ].Type ) ,
10051014 endpoint .TTL (records [0 ].TTL ),
10061015 targets ... )
1007- proxied := false
1008- if records [0 ].Proxied != nil {
1009- proxied = * records [0 ].Proxied
1010- }
1016+ proxied := records [0 ].Proxied
10111017 if e == nil {
10121018 continue
10131019 }
@@ -1036,3 +1042,27 @@ func (p *CloudFlareProvider) SupportedAdditionalRecordTypes(recordType string) b
10361042 return provider .SupportedRecordType (recordType )
10371043 }
10381044}
1045+
1046+ func dnsRecordResponseFromLegacyDNSRecord (record cloudflarev0.DNSRecord ) dns.RecordResponse {
1047+ var priority float64
1048+ if record .Priority != nil {
1049+ priority = float64 (* record .Priority )
1050+ }
1051+
1052+ return dns.RecordResponse {
1053+ CreatedOn : record .CreatedOn ,
1054+ ModifiedOn : record .ModifiedOn ,
1055+ Type : dns .RecordResponseType (record .Type ),
1056+ Name : record .Name ,
1057+ Content : record .Content ,
1058+ Meta : record .Meta ,
1059+ Data : record .Data ,
1060+ ID : record .ID ,
1061+ Priority : priority ,
1062+ TTL : dns .TTL (record .TTL ),
1063+ Proxied : record .Proxied != nil && * record .Proxied ,
1064+ Proxiable : record .Proxiable ,
1065+ Comment : record .Comment ,
1066+ Tags : record .Tags ,
1067+ }
1068+ }
0 commit comments