|
5 | 5 | "crypto/x509" |
6 | 6 | "encoding/pem" |
7 | 7 | "fmt" |
| 8 | + "net" |
8 | 9 | "strings" |
9 | 10 | "time" |
10 | 11 |
|
@@ -49,6 +50,24 @@ func RequireSecretTypeTLS(h router.Handler) router.Handler { |
49 | 50 | }) |
50 | 51 | } |
51 | 52 |
|
| 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 | + |
52 | 71 | // RenewCert handles the renewal of existing TLS certificates |
53 | 72 | func RenewCert(req router.Request, resp router.Response) error { |
54 | 73 | sec := req.Object.(*corev1.Secret) |
@@ -82,6 +101,11 @@ func RenewCert(req router.Request, resp router.Response) error { |
82 | 101 |
|
83 | 102 | logrus.Infof("Renewing TLS cert for %s", domain) |
84 | 103 |
|
| 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 | + |
85 | 109 | // Get new certificate |
86 | 110 | cert, err := leUser.getCert(req.Ctx, domain) |
87 | 111 | if err != nil { |
|
0 commit comments