Added 3rd shell execute. Improved log messages. Moved propagation wait to start of check procedure.
This commit is contained in:
parent
d1e49c7bba
commit
ecaa627551
@ -1,5 +1,5 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
appVersion: v0.0.5-alpha.90
|
appVersion: v0.0.5-alpha.97
|
||||||
description: Cert-Manager webhook for sthome
|
description: Cert-Manager webhook for sthome
|
||||||
name: sthome-webhook
|
name: sthome-webhook
|
||||||
version: 0.0.5-alpha.90
|
version: 0.0.5-alpha.97
|
||||||
|
|||||||
@ -31,7 +31,7 @@ clusterIssuer:
|
|||||||
image:
|
image:
|
||||||
repository: stuurmcp/cert-manager-webhook-sthome
|
repository: stuurmcp/cert-manager-webhook-sthome
|
||||||
#repository: wstat.sthome.net:5000/cert-manager-webhook-sthome
|
#repository: wstat.sthome.net:5000/cert-manager-webhook-sthome
|
||||||
tag: 0.0.5-alpha.90
|
tag: 0.0.5-alpha.97
|
||||||
#pullPolicy should be IfNotPresent. Set to Always for testing purposes
|
#pullPolicy should be IfNotPresent. Set to Always for testing purposes
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
@ -54,3 +55,66 @@ func Execute2(shell string, arg ...string) (bool, error) {
|
|||||||
klog.Infof("Script returned success\n")
|
klog.Infof("Script returned success\n")
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CapturingPassThroughWriter is a writer that remembers
|
||||||
|
// data written to it and passes it to w
|
||||||
|
type CapturingPassThroughWriter struct {
|
||||||
|
buf bytes.Buffer
|
||||||
|
w io.Writer
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCapturingPassThroughWriter creates new CapturingPassThroughWriter
|
||||||
|
func NewCapturingPassThroughWriter(w io.Writer) *CapturingPassThroughWriter {
|
||||||
|
return &CapturingPassThroughWriter{
|
||||||
|
w: w,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *CapturingPassThroughWriter) Write(d []byte) (int, error) {
|
||||||
|
w.buf.Write(d)
|
||||||
|
return w.w.Write(d)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bytes returns bytes written to the writer
|
||||||
|
func (w *CapturingPassThroughWriter) Bytes() []byte {
|
||||||
|
return w.buf.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Execute3(shell string, arg ...string) (bool, error) {
|
||||||
|
var errStdout, errStderr error
|
||||||
|
cmd := exec.Command(shell, arg...)
|
||||||
|
stdoutIn, _ := cmd.StdoutPipe()
|
||||||
|
stderrIn, _ := cmd.StderrPipe()
|
||||||
|
stdout := NewCapturingPassThroughWriter(os.Stdout)
|
||||||
|
stderr := NewCapturingPassThroughWriter(os.Stderr)
|
||||||
|
err := cmd.Start()
|
||||||
|
if err != nil {
|
||||||
|
klog.Fatalf("cmd.Start() failed with '%s'\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
_, errStdout = io.Copy(stdout, stdoutIn)
|
||||||
|
wg.Done()
|
||||||
|
}()
|
||||||
|
|
||||||
|
_, errStderr = io.Copy(stderr, stderrIn)
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
|
err = cmd.Wait()
|
||||||
|
if err != nil {
|
||||||
|
klog.Fatalf("cmd.Run() failed with %s\n", err)
|
||||||
|
}
|
||||||
|
if errStdout != nil || errStderr != nil {
|
||||||
|
klog.Fatalf("failed to capture stdout or stderr\n")
|
||||||
|
}
|
||||||
|
//outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes())
|
||||||
|
//fmt.Printf("\nout:\n%s\nerr:\n%s\n", outStr, errStr)
|
||||||
|
errStr := string(stderr.Bytes())
|
||||||
|
if stderr != nil {
|
||||||
|
klog.Infof("err:\n%s\n", errStr)
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|||||||
@ -52,7 +52,7 @@ func (loc *LocalDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error
|
|||||||
}
|
}
|
||||||
// TODO: convert shell script to golang
|
// TODO: convert shell script to golang
|
||||||
//localip := GetOutboundIP(Dnsserver_net)
|
//localip := GetOutboundIP(Dnsserver_net)
|
||||||
success, err := Execute2(
|
success, err := Execute3(
|
||||||
Shell,
|
Shell,
|
||||||
// "-c",
|
// "-c",
|
||||||
AcmeAuthCmd,
|
AcmeAuthCmd,
|
||||||
@ -81,7 +81,7 @@ func (loc *LocalDNSProviderSolver) Present(ch *v1alpha1.ChallengeRequest) error
|
|||||||
func (loc *LocalDNSProviderSolver) CleanUp(ch *v1alpha1.ChallengeRequest) error {
|
func (loc *LocalDNSProviderSolver) CleanUp(ch *v1alpha1.ChallengeRequest) error {
|
||||||
//domainName := extractDomainName(ch.ResolvedZone)
|
//domainName := extractDomainName(ch.ResolvedZone)
|
||||||
//localip := GetOutboundIP(Dnsserver_net)
|
//localip := GetOutboundIP(Dnsserver_net)
|
||||||
success, err := Execute2(
|
success, err := Execute3(
|
||||||
Shell,
|
Shell,
|
||||||
// "-c",
|
// "-c",
|
||||||
AcmeAuthCmd,
|
AcmeAuthCmd,
|
||||||
@ -119,13 +119,13 @@ func (loc *LocalDNSProviderSolver) Initialize(kubeClientConfig *rest.Config, sto
|
|||||||
// Check verifies that the DNS records for the ACME challenge have propagated.
|
// Check verifies that the DNS records for the ACME challenge have propagated.
|
||||||
func (s *LocalDNSProviderSolver) Check(DNSName string, Key string) error {
|
func (s *LocalDNSProviderSolver) Check(DNSName string, Key string) error {
|
||||||
ttl := 20
|
ttl := 20
|
||||||
|
klog.Info("waiting DNS record TTL to allow the DNS01 record to propagate for domain")
|
||||||
|
time.Sleep(time.Second * time.Duration(ttl))
|
||||||
|
|
||||||
fqdn, err := util.DNS01LookupFQDN(DNSName, false, DNS01Nameservers...)
|
fqdn, err := util.DNS01LookupFQDN(DNSName, false, DNS01Nameservers...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
klog.Info("waiting DNS record TTL to allow the DNS01 record to propagate for domain")
|
|
||||||
time.Sleep(time.Second * time.Duration(ttl))
|
|
||||||
|
|
||||||
//klog.Info("checking DNS propagation: ", "dns: ", DNSName, ", fqdn: ", fqdn, ", key: ", Key, ", nameservers: ", DNS01Nameservers)
|
//klog.Info("checking DNS propagation: ", "dns: ", DNSName, ", fqdn: ", fqdn, ", key: ", Key, ", nameservers: ", DNS01Nameservers)
|
||||||
klog.Info("checking DNS prop: fqdn: ", fqdn)
|
klog.Info("checking DNS prop: fqdn: ", fqdn)
|
||||||
|
|||||||
@ -139,15 +139,21 @@ func checkAuthoritativeNss(fqdn, value string, nameservers []string) (bool, erro
|
|||||||
klog.Infof("================== NS: %s ==================", ns)
|
klog.Infof("================== NS: %s ==================", ns)
|
||||||
r, err := DNSQuery(fqdn, dns.TypeTXT, []string{ns}, true)
|
r, err := DNSQuery(fqdn, dns.TypeTXT, []string{ns}, true)
|
||||||
//klog.Infof("DNSQuery returned \nr: %s, \nerr: %s", r, err)
|
//klog.Infof("DNSQuery returned \nr: %s, \nerr: %s", r, err)
|
||||||
|
rCodeStr := ""
|
||||||
|
if r == nil {
|
||||||
|
rCodeStr = "nil"
|
||||||
|
} else {
|
||||||
|
rCodeStr = dns.RcodeToString[r.Rcode]
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.Infof("DNSQuery failed, err: %s", err)
|
klog.Infof("DNSQuery failed, err: %s, ns: %s, rcode: %s", err, ns, rCodeStr)
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
klog.Infof("DNSQuery succeeded with r.Rcode: %d", r.Rcode)
|
klog.Infof("DNSQuery succeeded with r.Rcode: %s", rCodeStr)
|
||||||
// NXDomain response is not really an error, just waiting for propagation to happen
|
// NXDomain response is not really an error, just waiting for propagation to happen
|
||||||
if !(r.Rcode == dns.RcodeSuccess || r.Rcode == dns.RcodeNameError) {
|
if !(r.Rcode == dns.RcodeSuccess || r.Rcode == dns.RcodeNameError) {
|
||||||
//klog.Errorf("NS %s returned %s for %s", ns, dns.RcodeToString[r.Rcode], fqdn)
|
//klog.Errorf("NS %s returned %s for %s", ns, dns.RcodeToString[r.Rcode], fqdn)
|
||||||
return false, fmt.Errorf("NS %s returned %s for %s", ns, dns.RcodeToString[r.Rcode], fqdn)
|
return false, fmt.Errorf("NS %s returned %s for %s", ns, rCodeStr, fqdn)
|
||||||
}
|
}
|
||||||
|
|
||||||
klog.Infof("%q: must be %s", fqdn, value)
|
klog.Infof("%q: must be %s", fqdn, value)
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
0.0.5-alpha.90
|
0.0.5-alpha.97
|
||||||
20240416-2039
|
20240418-0139
|
||||||
90
|
97
|
||||||
Loading…
Reference in New Issue
Block a user