From 12efa0cc6801131bbb0665458f3896b97638b664 Mon Sep 17 00:00:00 2001 From: mslacken Date: Fri, 14 Oct 2022 18:18:58 +0200 Subject: [PATCH 1/5] check if new template file was modified --- internal/app/wwctl/overlay/edit/main.go | 62 ++++++++++++++++++------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/internal/app/wwctl/overlay/edit/main.go b/internal/app/wwctl/overlay/edit/main.go index 3303fd0d..b903ca36 100644 --- a/internal/app/wwctl/overlay/edit/main.go +++ b/internal/app/wwctl/overlay/edit/main.go @@ -1,7 +1,10 @@ package edit import ( + "crypto/sha256" + "encoding/hex" "fmt" + "io" "os" "path" "path/filepath" @@ -47,34 +50,59 @@ func CobraRunE(cmd *cobra.Command, args []string) error { os.Exit(1) } } - + newFile := false if !util.IsFile(overlayFile) && filepath.Ext(overlayFile) == ".ww" { wwlog.Verbose("This is a new file, creating some default content") - + newFile = true w, err := os.OpenFile(overlayFile, os.O_RDWR|os.O_CREATE, os.FileMode(PermMode)) if err != nil { wwlog.Warn("Could not create file for writing: %s", err) } - - fmt.Fprintf(w, "# This is a Warewulf Template file.\n") - fmt.Fprintf(w, "#\n") - fmt.Fprintf(w, "# This file (suffix '.ww') will be automatically rewritten without the suffix\n") - fmt.Fprintf(w, "# when the overlay is rendered for the individual nodes. Here are some examples\n") - fmt.Fprintf(w, "# of macros and logic which can be used within this file:\n") - fmt.Fprintf(w, "#\n") - fmt.Fprintf(w, "# Node FQDN = {{.Id}}\n") - fmt.Fprintf(w, "# Node Cluster = {{.ClusterName}}\n") - fmt.Fprintf(w, "# Network Config = {{.NetDevs.eth0.Ipaddr}}, {{.NetDevs.eth0.Hwaddr}}, etc.\n") - fmt.Fprintf(w, "#\n") - fmt.Fprintf(w, "# Goto the documentation pages for more information: http://www.hpcng.org/...\n") - fmt.Fprintf(w, "\n") + fmtStr := `# This is a Warewulf Template file. +# +# This file (suffix '.ww') will be automatically rewritten without the suffix +# when the overlay is rendered for the individual nodes. Here are some examples +# of macros and logic which can be used within this file: +# +# Node FQDN = {{.Id}}\n") +# Node Cluster = {{.ClusterName}}\n") +# Network Config = {{.NetDevs.eth0.Ipaddr}}, {{.NetDevs.eth0.Hwaddr}}, etc. +# +# Goto the documentation pages for more information: http://www.hpcng.org/... +# Keep the following for better reference +# This file is autogenerated by warewulf +# Host: {{.BuildHost}} +# Time: {{.BuildTime}} +# Source: {{.BuildSource}} +` + fmt.Fprint(w, fmtStr) } - - err := util.ExecInteractive(editor, overlayFile) + fileDesc, err := os.OpenFile(overlayFile, os.O_RDWR, os.FileMode(PermMode)) + defer fileDesc.Close() + _, _ = fileDesc.Seek(0, 0) + hasher := sha256.New() + if _, err := io.Copy(hasher, fileDesc); err != nil { + wwlog.Error("Problems getting checksum of file %s\n", err) + } + sum1 := hex.EncodeToString(hasher.Sum(nil)) + err = util.ExecInteractive(editor, overlayFile) if err != nil { wwlog.Error("Editor process existed with non-zero") os.Exit(1) } + _, _ = fileDesc.Seek(0, 0) + hasher.Reset() + if _, err := io.Copy(hasher, fileDesc); err != nil { + wwlog.Error("Problems getting checksum of file %s\n", err) + } + sum2 := hex.EncodeToString(hasher.Sum(nil)) + if sum1 == sum2 && newFile { + wwlog.Verbose("New template %s wasn't modified, deleting it", overlayFile) + err = os.Remove(overlayFile) + if err != nil { + wwlog.Warn("Could not delete %s", overlayFile) + } + } return nil } From cbeca6678efd78794e1f3569dd4731fe5e3716d0 Mon Sep 17 00:00:00 2001 From: Christian Goll Date: Fri, 14 Oct 2022 19:31:07 +0200 Subject: [PATCH 2/5] fix linting --- internal/app/wwctl/overlay/edit/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/app/wwctl/overlay/edit/main.go b/internal/app/wwctl/overlay/edit/main.go index b903ca36..677c883b 100644 --- a/internal/app/wwctl/overlay/edit/main.go +++ b/internal/app/wwctl/overlay/edit/main.go @@ -78,6 +78,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error { fmt.Fprint(w, fmtStr) } fileDesc, err := os.OpenFile(overlayFile, os.O_RDWR, os.FileMode(PermMode)) + if err != nil { + wwlog.Warn("Could not open file for editing: %s", err) + } defer fileDesc.Close() _, _ = fileDesc.Seek(0, 0) hasher := sha256.New() From 21f7a1f8c3c4e35c9dcad7e2b24ba381ec860f1a Mon Sep 17 00:00:00 2001 From: Christian Goll Date: Fri, 14 Oct 2022 19:31:07 +0200 Subject: [PATCH 3/5] fix linting --- internal/app/wwctl/overlay/edit/main.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/app/wwctl/overlay/edit/main.go b/internal/app/wwctl/overlay/edit/main.go index b903ca36..96e0de36 100644 --- a/internal/app/wwctl/overlay/edit/main.go +++ b/internal/app/wwctl/overlay/edit/main.go @@ -78,6 +78,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error { fmt.Fprint(w, fmtStr) } fileDesc, err := os.OpenFile(overlayFile, os.O_RDWR, os.FileMode(PermMode)) + if err != nil { + wwlog.Warn("Could not open file for editing: %s", err) + } defer fileDesc.Close() _, _ = fileDesc.Seek(0, 0) hasher := sha256.New() @@ -96,6 +99,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { wwlog.Error("Problems getting checksum of file %s\n", err) } sum2 := hex.EncodeToString(hasher.Sum(nil)) + fmt.Println("sum1,sum2", sum1, sum2) if sum1 == sum2 && newFile { wwlog.Verbose("New template %s wasn't modified, deleting it", overlayFile) err = os.Remove(overlayFile) From 721a52239f21c4bd6d28a8c36c286eb0867879b6 Mon Sep 17 00:00:00 2001 From: Christian Goll Date: Thu, 27 Oct 2022 11:41:03 +0200 Subject: [PATCH 4/5] opening file with twi seperate descriptors --- internal/app/wwctl/overlay/edit/main.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/internal/app/wwctl/overlay/edit/main.go b/internal/app/wwctl/overlay/edit/main.go index 96e0de36..945ca498 100644 --- a/internal/app/wwctl/overlay/edit/main.go +++ b/internal/app/wwctl/overlay/edit/main.go @@ -76,26 +76,33 @@ func CobraRunE(cmd *cobra.Command, args []string) error { # Source: {{.BuildSource}} ` fmt.Fprint(w, fmtStr) + w.Close() } - fileDesc, err := os.OpenFile(overlayFile, os.O_RDWR, os.FileMode(PermMode)) + fileDesc1, err := os.OpenFile(overlayFile, os.O_RDWR, os.FileMode(PermMode)) if err != nil { wwlog.Warn("Could not open file for editing: %s", err) } - defer fileDesc.Close() - _, _ = fileDesc.Seek(0, 0) + defer fileDesc1.Close() + _, _ = fileDesc1.Seek(0, 0) hasher := sha256.New() - if _, err := io.Copy(hasher, fileDesc); err != nil { + if _, err := io.Copy(hasher, fileDesc1); err != nil { wwlog.Error("Problems getting checksum of file %s\n", err) } sum1 := hex.EncodeToString(hasher.Sum(nil)) + fileDesc1.Close() err = util.ExecInteractive(editor, overlayFile) if err != nil { wwlog.Error("Editor process existed with non-zero") os.Exit(1) } - _, _ = fileDesc.Seek(0, 0) + fileDesc2, err := os.OpenFile(overlayFile, os.O_RDWR, os.FileMode(PermMode)) + if err != nil { + wwlog.Warn("Could not open file for editing: %s", err) + } + defer fileDesc2.Close() + _, _ = fileDesc2.Seek(0, 0) hasher.Reset() - if _, err := io.Copy(hasher, fileDesc); err != nil { + if _, err := io.Copy(hasher, fileDesc2); err != nil { wwlog.Error("Problems getting checksum of file %s\n", err) } sum2 := hex.EncodeToString(hasher.Sum(nil)) From 5413eb611da10fb3be82ad4b4c990d45ef73557e Mon Sep 17 00:00:00 2001 From: Christian Goll Date: Thu, 27 Oct 2022 12:08:32 +0200 Subject: [PATCH 5/5] removed stray debug line --- internal/app/wwctl/overlay/edit/main.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/app/wwctl/overlay/edit/main.go b/internal/app/wwctl/overlay/edit/main.go index 945ca498..83a7d1a0 100644 --- a/internal/app/wwctl/overlay/edit/main.go +++ b/internal/app/wwctl/overlay/edit/main.go @@ -106,7 +106,6 @@ func CobraRunE(cmd *cobra.Command, args []string) error { wwlog.Error("Problems getting checksum of file %s\n", err) } sum2 := hex.EncodeToString(hasher.Sum(nil)) - fmt.Println("sum1,sum2", sum1, sum2) if sum1 == sum2 && newFile { wwlog.Verbose("New template %s wasn't modified, deleting it", overlayFile) err = os.Remove(overlayFile)