Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.

Commit 6387f5d

Browse files
committed
add: waitForDomain func to wait for a domain to be resolvable before pinging lets-encrypt
Signed-off-by: Thorsten Klein <tk@thklein.io>
1 parent 1fc37ec commit 6387f5d

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

pkg/controller/tls/certs.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"crypto/x509"
66
"encoding/pem"
77
"fmt"
8+
"net"
89
"strings"
910
"time"
1011

@@ -49,6 +50,24 @@ func RequireSecretTypeTLS(h router.Handler) router.Handler {
4950
})
5051
}
5152

53+
func waitForDomain(domain string, retryInterval time.Duration, maxRetries int) error {
54+
done := make(chan error)
55+
56+
go func() {
57+
for retries := 0; retries < maxRetries; retries++ {
58+
ips, err := net.LookupIP(domain)
59+
if err == nil && len(ips) > 0 {
60+
done <- nil // Domain is resolvable
61+
return
62+
}
63+
time.Sleep(retryInterval)
64+
}
65+
done <- fmt.Errorf("domain %s is not resolvable after %d retries", domain, maxRetries) // Domain is not resolvable
66+
}()
67+
68+
return <-done
69+
}
70+
5271
// RenewCert handles the renewal of existing TLS certificates
5372
func RenewCert(req router.Request, resp router.Response) error {
5473
sec := req.Object.(*corev1.Secret)
@@ -82,6 +101,11 @@ func RenewCert(req router.Request, resp router.Response) error {
82101

83102
logrus.Infof("Renewing TLS cert for %s", domain)
84103

104+
if err := waitForDomain(domain, 5*time.Second, 12); err != nil {
105+
logrus.Warnf("Domain %s is not resolvable, skipping certificate renewal: %v", domain, err)
106+
return
107+
}
108+
85109
// Get new certificate
86110
cert, err := leUser.getCert(req.Ctx, domain)
87111
if err != nil {

0 commit comments

Comments
 (0)