Return an error from wwclient updateSystem
Avoiding calling os.Exit() directly. Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
@@ -242,7 +242,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) {
|
|||||||
stopTimer.Reset(0)
|
stopTimer.Reset(0)
|
||||||
case syscall.SIGTERM, syscall.SIGINT:
|
case syscall.SIGTERM, syscall.SIGINT:
|
||||||
wwlog.Info("terminating wwclient, %v", sig)
|
wwlog.Info("terminating wwclient, %v", sig)
|
||||||
// Signal main loop to exit instead of calling os.Exit(0)
|
// Signal main loop to exit gracefully
|
||||||
exitChan <- true
|
exitChan <- true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -266,7 +266,9 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
updateSystem(target, ipaddr, port, wwid, tag, localUUID, scheme)
|
if err := updateSystem(target, ipaddr, port, wwid, tag, localUUID, scheme); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if !finishedInitialSync {
|
if !finishedInitialSync {
|
||||||
// Notify systemd that the service has started successfully.
|
// Notify systemd that the service has started successfully.
|
||||||
//
|
//
|
||||||
@@ -307,7 +309,7 @@ func parseWWIDFromCmdline(cmdline string) (string, error) {
|
|||||||
return "", fmt.Errorf("wwid parameter not found in kernel command line")
|
return "", fmt.Errorf("wwid parameter not found in kernel command line")
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateSystem(target string, ipaddr string, port int, wwid string, tag string, localUUID uuid.UUID, scheme string) {
|
func updateSystem(target string, ipaddr string, port int, wwid string, tag string, localUUID uuid.UUID, scheme string) error {
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
counter := 0
|
counter := 0
|
||||||
for {
|
for {
|
||||||
@@ -334,8 +336,7 @@ func updateSystem(target string, ipaddr string, port int, wwid string, tag strin
|
|||||||
if errors.As(err, &certificateInvalidError) ||
|
if errors.As(err, &certificateInvalidError) ||
|
||||||
errors.As(err, &unknownAuthorityError) ||
|
errors.As(err, &unknownAuthorityError) ||
|
||||||
errors.As(err, &hostnameError) {
|
errors.As(err, &hostnameError) {
|
||||||
wwlog.Error("TLS connection failed: %v", err)
|
return fmt.Errorf("TLS connection failed: %w", err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
if counter > 60 {
|
if counter > 60 {
|
||||||
counter = 0
|
counter = 0
|
||||||
@@ -351,7 +352,7 @@ func updateSystem(target string, ipaddr string, port int, wwid string, tag strin
|
|||||||
if resp.StatusCode != 200 {
|
if resp.StatusCode != 200 {
|
||||||
wwlog.Warn("not applying runtime overlay: got status code: %d", resp.StatusCode)
|
wwlog.Warn("not applying runtime overlay: got status code: %d", resp.StatusCode)
|
||||||
time.Sleep(60000 * time.Millisecond)
|
time.Sleep(60000 * time.Millisecond)
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
wwlog.Info("applying runtime overlay")
|
wwlog.Info("applying runtime overlay")
|
||||||
@@ -360,7 +361,7 @@ func updateSystem(target string, ipaddr string, port int, wwid string, tag strin
|
|||||||
tempDir, err := os.MkdirTemp("", "wwclient-")
|
tempDir, err := os.MkdirTemp("", "wwclient-")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wwlog.Error("failed to create temp directory: %s", err)
|
wwlog.Error("failed to create temp directory: %s", err)
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
defer os.RemoveAll(tempDir)
|
defer os.RemoveAll(tempDir)
|
||||||
wwlog.Debug("unpacking runtime overlay to %s", tempDir)
|
wwlog.Debug("unpacking runtime overlay to %s", tempDir)
|
||||||
@@ -369,7 +370,7 @@ func updateSystem(target string, ipaddr string, port int, wwid string, tag strin
|
|||||||
err = command.Run()
|
err = command.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wwlog.Error("failed running cpio: %s", err)
|
wwlog.Error("failed running cpio: %s", err)
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Atomically move files from temp directory to current working directory
|
// Atomically move files from temp directory to current working directory
|
||||||
@@ -377,6 +378,7 @@ func updateSystem(target string, ipaddr string, port int, wwid string, tag strin
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
wwlog.Error("failed to apply overlay: %s", err)
|
wwlog.Error("failed to apply overlay: %s", err)
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func atomicApplyOverlay(srcDir, destDir string) error {
|
func atomicApplyOverlay(srcDir, destDir string) error {
|
||||||
|
|||||||
Reference in New Issue
Block a user