@@ -38,6 +38,7 @@ const (
3838 generatedLabelEndpointRecordSetNamespace = "endpoint.dns.appthrust.io/endpointrecordset-namespace"
3939 generatedLabelEndpointRecordSetName = "endpoint.dns.appthrust.io/endpointrecordset-name"
4040 route53RecordSetAdoptionAnnotation = "endpoint.dns.appthrust.io/route53-recordset-adoption"
41+ route53RecordTypeAnnotation = "endpoint.dns.appthrust.io/route53-record-type"
4142 generatedRecordSetsFinalizer = "endpoint.dns.appthrust.io/generated-recordsets"
4243)
4344
@@ -203,11 +204,16 @@ func (r *Reconciler) recordSetsForHostname(ctx context.Context, endpointRecordSe
203204 rejections = append (rejections , fmt .Sprintf ("%s/%s: multiple EndpointProviderCapability resources for provider %s/%s" , zone .Namespace , zone .Name , zone .Spec .Provider .Name , zone .Spec .Provider .Version ))
204205 continue
205206 }
207+ preferredRecordType , err := preferredRecordTypeForEndpointRecordSet (endpointRecordSet )
208+ if err != nil {
209+ return status , nil , err
210+ }
206211 input := endpointv1alpha1.EndpointRecordSetConversionInput {
207- Hostname : hostname ,
208- Name : relativeRecordName (hostname , zone .Spec .DomainName ),
209- Zone : endpointv1alpha1.EndpointRecordSetConversionZone {DomainName : zone .Spec .DomainName },
210- Targets : endpointRecordSet .Spec .Targets ,
212+ Hostname : hostname ,
213+ Name : relativeRecordName (hostname , zone .Spec .DomainName ),
214+ Zone : endpointv1alpha1.EndpointRecordSetConversionZone {DomainName : zone .Spec .DomainName },
215+ Targets : endpointRecordSet .Spec .Targets ,
216+ PreferredRecordType : preferredRecordType ,
211217 }
212218 fragments , message , err := r .convertEndpointRecordSet (ctx , capability , input )
213219 if err != nil {
@@ -269,6 +275,17 @@ func (r *Reconciler) recordSetsForHostname(ctx context.Context, endpointRecordSe
269275 return status , nil , nil
270276}
271277
278+ func preferredRecordTypeForEndpointRecordSet (endpointRecordSet * endpointv1alpha1.EndpointRecordSet ) (endpointv1alpha1.EndpointRecordSetType , error ) {
279+ value := strings .ToUpper (strings .TrimSpace (endpointRecordSet .Annotations [route53RecordTypeAnnotation ]))
280+ switch value {
281+ case "" :
282+ return "" , nil
283+ case string (endpointv1alpha1 .EndpointRecordSetTypeCNAME ):
284+ return endpointv1alpha1 .EndpointRecordSetTypeCNAME , nil
285+ default :
286+ return "" , fmt .Errorf ("unsupported %s value %q" , route53RecordTypeAnnotation , value )
287+ }
288+ }
272289func (r * Reconciler ) convertEndpointRecordSet (ctx context.Context , capability * endpointv1alpha1.EndpointProviderCapability , input endpointv1alpha1.EndpointRecordSetConversionInput ) ([]endpointv1alpha1.RecordSetSpecFragment , string , error ) {
273290 if r .conversionFunc != nil {
274291 return r .conversionFunc (ctx , capability , input )
@@ -286,6 +303,7 @@ func (r *Reconciler) convertEndpointRecordSet(ctx context.Context, capability *e
286303 Resource : capability .Spec .Conversion .Resource ,
287304 }
288305 uid := string (uuid .NewUUID ())
306+
289307 request := endpointconversionv1alpha1.EndpointRecordSetConversion {
290308 TypeMeta : metav1.TypeMeta {
291309 APIVersion : gvr .Group + "/" + gvr .Version ,
0 commit comments