66 "strings"
77
88 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+ "k8s.io/utils/env"
910 externaldns "sigs.k8s.io/external-dns/endpoint"
1011 gatewayapiv1 "sigs.k8s.io/gateway-api/apis/v1"
1112
@@ -19,11 +20,27 @@ const (
1920 LabelListenerReference = "kuadrant.io/listener-name"
2021)
2122
23+ func dnsPolicyDefaultTTL () (int , error ) {
24+ ttl , err := env .GetInt ("DNS_DEFAULT_TTL" , builder .DefaultTTL )
25+ if err != nil {
26+ return ttl , fmt .Errorf ("DNS_DEFAULT_TTL env value could not be parsed as int, default %d will be used: %w" , builder .DefaultTTL , err )
27+ }
28+ return ttl , nil
29+ }
30+
31+ func dnsPolicyDefaultCnameTTL () (int , error ) {
32+ ttl , err := env .GetInt ("DNS_DEFAULT_LB_TTL" , builder .DefaultLoadBalancedTTL )
33+ if err != nil {
34+ return ttl , fmt .Errorf ("DNS_DEFAULT_LB_TTL env value could not be parsed as int, default %d will be used: %w" , builder .DefaultLoadBalancedTTL , err )
35+ }
36+ return ttl , nil
37+ }
38+
2239func dnsRecordName (gatewayName , listenerName string ) string {
2340 return fmt .Sprintf ("%s-%s" , gatewayName , listenerName )
2441}
2542
26- func desiredDNSRecord (gateway * gatewayapiv1.Gateway , clusterID string , dnsPolicy * kuadrantv1.DNSPolicy , targetListener gatewayapiv1.Listener ) (* kuadrantdnsv1alpha1.DNSRecord , error ) {
43+ func desiredDNSRecord (gateway * gatewayapiv1.Gateway , clusterID string , dnsPolicy * kuadrantv1.DNSPolicy , targetListener gatewayapiv1.Listener , defaultTTL int , defaultLoadBalancedTTL int ) (* kuadrantdnsv1alpha1.DNSRecord , error ) {
2744 rootHost := string (* targetListener .Hostname )
2845 var healthCheckSpec * kuadrantdnsv1alpha1.HealthCheckSpec
2946
@@ -65,7 +82,7 @@ func desiredDNSRecord(gateway *gatewayapiv1.Gateway, clusterID string, dnsPolicy
6582
6683 dnsRecord .Labels [LabelListenerReference ] = string (targetListener .Name )
6784
68- endpoints , err := buildEndpoints (clusterID , string (* targetListener .Hostname ), gateway , dnsPolicy )
85+ endpoints , err := buildEndpoints (clusterID , string (* targetListener .Hostname ), gateway , dnsPolicy , defaultTTL , defaultLoadBalancedTTL )
6986 if err != nil {
7087 return nil , fmt .Errorf ("failed to generate dns record for a gateway %s in %s ns: %w" , gateway .Name , gateway .Namespace , err )
7188 }
@@ -127,14 +144,16 @@ func (g *GatewayWrapper) RemoveExcludedStatusAddresses(p *kuadrantv1.DNSPolicy)
127144 return nil
128145}
129146
130- func buildEndpoints (clusterID , hostname string , gateway * gatewayapiv1.Gateway , policy * kuadrantv1.DNSPolicy ) ([]* externaldns.Endpoint , error ) {
147+ func buildEndpoints (clusterID , hostname string , gateway * gatewayapiv1.Gateway , policy * kuadrantv1.DNSPolicy , defaultTTL int , defaultLoadBalancedTTL int ) ([]* externaldns.Endpoint , error ) {
131148 gw := gateway .DeepCopy ()
132149 gatewayWrapper := NewGatewayWrapper (gw )
133150 // modify the status addresses based on any that need to be excluded
134151 if err := gatewayWrapper .RemoveExcludedStatusAddresses (policy ); err != nil {
135152 return nil , fmt .Errorf ("failed to reconcile gateway dns records error: %w " , err )
136153 }
137- endpointBuilder := builder .NewEndpointsBuilder (gatewayWrapper , hostname )
154+ endpointBuilder := builder .NewEndpointsBuilder (gatewayWrapper , hostname ).
155+ SetDefaultTTL (defaultTTL ).
156+ SetDefaultLoadBalancedTTL (defaultLoadBalancedTTL )
138157
139158 if policy .Spec .LoadBalancing != nil {
140159 endpointBuilder .WithLoadBalancingFor (
0 commit comments