From b6ec8557ae356d1673e98a213cd4771032d53f18 Mon Sep 17 00:00:00 2001 From: Reinier Schoof Date: Thu, 24 Oct 2019 17:02:29 +0200 Subject: [PATCH] honor ttlAnnotationKey for node endpoints --- source/node.go | 8 +++++++- source/node_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/source/node.go b/source/node.go index 36fc56e7f..8a976a3cd 100644 --- a/source/node.go +++ b/source/node.go @@ -58,7 +58,7 @@ func NewNodeSource(kubeClient kubernetes.Interface, annotationFilter, fqdnTempla } } - // Use shared informers to listen for add/update/delete of services/pods/nodes in the specified namespace. + // Use shared informers to listen for add/update/delete of nodes. // Set resync period to 0, to prevent processing when nothing has changed informerFactory := kubeinformers.NewSharedInformerFactoryWithOptions(kubeClient, 0) nodeInformer := informerFactory.Core().V1().Nodes() @@ -117,9 +117,15 @@ func (ns *nodeSource) Endpoints() ([]*endpoint.Endpoint, error) { log.Debugf("creating endpoint for node %s", node.Name) + ttl, err := getTTLFromAnnotations(node.Annotations) + if err != nil { + log.Warn(err) + } + // create new endpoint with the information we already have ep := &endpoint.Endpoint{ RecordType: "A", // hardcoded DNS record type + RecordTTL: ttl, } if ns.fqdnTemplate != nil { diff --git a/source/node_test.go b/source/node_test.go index 1b3a7458e..bce87a278 100644 --- a/source/node_test.go +++ b/source/node_test.go @@ -248,6 +248,49 @@ func testNodeSourceEndpoints(t *testing.T) { []*endpoint.Endpoint{}, false, }, + { + "ttl not annotated should have RecordTTL.IsConfigured set to false", + "", + "", + "node1", + []v1.NodeAddress{{v1.NodeExternalIP, "1.2.3.4"}}, + map[string]string{}, + map[string]string{}, + []*endpoint.Endpoint{ + {RecordType: "A", DNSName: "node1", Targets: endpoint.Targets{"1.2.3.4"}, RecordTTL: endpoint.TTL(0)}, + }, + false, + }, + { + "ttl annotated but invalid should have RecordTTL.IsConfigured set to false", + "", + "", + "node1", + []v1.NodeAddress{{v1.NodeExternalIP, "1.2.3.4"}}, + map[string]string{}, + map[string]string{ + ttlAnnotationKey: "foo", + }, + []*endpoint.Endpoint{ + {RecordType: "A", DNSName: "node1", Targets: endpoint.Targets{"1.2.3.4"}, RecordTTL: endpoint.TTL(0)}, + }, + false, + }, + { + "ttl annotated and is valid should set Record.TTL", + "", + "", + "node1", + []v1.NodeAddress{{v1.NodeExternalIP, "1.2.3.4"}}, + map[string]string{}, + map[string]string{ + ttlAnnotationKey: "10", + }, + []*endpoint.Endpoint{ + {RecordType: "A", DNSName: "node1", Targets: endpoint.Targets{"1.2.3.4"}, RecordTTL: endpoint.TTL(10)}, + }, + false, + }, } { t.Run(tc.title, func(t *testing.T) { // Create a Kubernetes testing client