More fixes and usibility updates

This commit is contained in:
Gregory Kurtzer
2020-11-04 12:01:15 -08:00
parent 3d1964f933
commit 260315cccd
10 changed files with 56 additions and 46 deletions

View File

@@ -19,7 +19,7 @@ func ipxe(w http.ResponseWriter, req *http.Request) {
hwaddr := strings.ReplaceAll(url[2], "-", ":")
node, err := assets.FindByHwaddr(hwaddr)
if err != nil {
log.Printf("Could not find HW Addr: %s\n", hwaddr)
log.Printf("Could not find HW Addr: %s: %s\n", hwaddr, err)
w.WriteHeader(404)
return
}

View File

@@ -21,9 +21,9 @@ func overlayRuntime(node assets.NodeInfo, replace map[string]string, wg *sync.Wa
if err == nil {
destModTime = destMod.ModTime()
}
configMod, err := os.Stat("/etc/warewulf/nodes.yaml")
configMod, err := os.Stat("/etc/warewulf/nodes.conf")
if err != nil {
fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.yaml")
fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.conf")
os.Exit(1)
}
configModTime := configMod.ModTime()

View File

@@ -22,9 +22,9 @@ func overlaySystem(node assets.NodeInfo, replace map[string]string, wg *sync.Wai
if err == nil {
destModTime = destMod.ModTime()
}
configMod, err := os.Stat("/etc/warewulf/nodes.yaml")
configMod, err := os.Stat("/etc/warewulf/nodes.conf")
if err != nil {
fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.yaml")
fmt.Printf("ERROR: could not find node file: /etc/warewulf/nodes.conf\n")
os.Exit(1)
}
configModTime := configMod.ModTime()

View File

@@ -37,7 +37,7 @@ func BuildOverlayDir(sourceDir string, destDir string, replace map[string]string
return err
}
destFD, err := os.OpenFile(destDir+"/"+destFile, os.O_RDWR|os.O_CREATE, info.Mode())
destFD, err := os.OpenFile(destDir + "/" + destFile, os.O_RDWR|os.O_CREATE, info.Mode())
if err != nil {
return err
}
@@ -52,18 +52,21 @@ func BuildOverlayDir(sourceDir string, destDir string, replace map[string]string
replaceString := fmt.Sprintf("@%s@", strings.ToUpper(k))
newLine = strings.ReplaceAll(newLine, replaceString, v)
}
//TODO: Support directives like '#INCLUDE <filename>' and
// conditionals like '#IFDEF ....`
if strings.HasPrefix(newLine, "#WWENDIF") {
if strings.HasPrefix(newLine, "#WWEND") {
skip = false
} else if skip == true {
} else if strings.HasPrefix(newLine, "#WWIFDEF") {
} else if strings.HasPrefix(newLine, "#WWIFDEF ") {
line := strings.Split(newLine, " ")
if len(line) > 0 && line[1] != "false" {
skip = true
}
} else if strings.HasPrefix(newLine, "#WWIFNDEF ") {
line := strings.Split(newLine, " ")
if len(line) > 0 && line[1] == "false" {
skip = true
}
} else if strings.HasPrefix(newLine, "#WWIF ") {
line := strings.Split(newLine, " ")
if len(line) == 2 && line[1] != "false" {
@@ -76,13 +79,25 @@ func BuildOverlayDir(sourceDir string, destDir string, replace map[string]string
}
}
}
} else if strings.HasPrefix(newLine, "#WWELSE") {
if skip == true {
skip = false
} else {
skip = true
}
} else if strings.HasPrefix(newLine, "#WWINCLUDE ") {
line := strings.Split(newLine, " ")
//fmt.Printf("Including file (%s): %s\n", destDir + "/" + destFile, line[1])
includeFD, err := os.Open(line[1])
if err != nil {
return err
}
io.Copy(w, includeFD)
fmt.Printf("ERROR(os.Open): %s\n", err)
return err
}
_, err = io.Copy(w, includeFD)
if err != nil {
fmt.Printf("ERROR(io.Copy): %s\n", err)
return err
}
includeFD.Close()
} else {
_, err := w.WriteString(newLine + "\n")

View File

@@ -8,6 +8,7 @@ import (
"path"
"strings"
"sync"
"time"
)
const LocalStateDir = "/var/warewulf"
@@ -33,7 +34,6 @@ func vnfsBuild(vnfsPath string, wg *sync.WaitGroup) {
fmt.Printf("ERROR: %s\n", err)
os.Exit(1)
}
fmt.Printf("BUILD DONE: %s\n", vnfsPath)
} else {
fmt.Printf("SKIPPING VNFS: (bad path) %s\n", vnfsPath)
@@ -43,7 +43,7 @@ func vnfsBuild(vnfsPath string, wg *sync.WaitGroup) {
func main() {
if len(os.Args) < 2 {
fmt.Printf("USAGE: %s [vnfs/kernel/overlay/all]\n", os.Args[0])
fmt.Printf("USAGE: %s [vnfs/kernel/overlay] (node regex)\n", os.Args[0])
return
}
@@ -52,15 +52,10 @@ func main() {
set := make(map[string]bool)
var wg sync.WaitGroup
if len(os.Args) < 3 {
fmt.Printf("USAGE: %s vnfs [node name pattern/ALL]\n", os.Args[0])
return
}
if os.Args[2] == "ALL" {
nodeList, _ = assets.FindAllNodes()
} else {
if len(os.Args) >= 3 {
nodeList, _ = assets.SearchByName(os.Args[2])
} else {
nodeList, _ = assets.FindAllNodes()
}
if len(nodeList) == 0 {
@@ -77,21 +72,18 @@ func main() {
wg.Add(1)
go vnfsBuild(entry, &wg)
}
time.Sleep(1000 * time.Millisecond)
fmt.Printf("Waiting for build(s) to complete...\n")
wg.Wait()
} else if os.Args[1] == "kernel" {
var nodeList []assets.NodeInfo
set := make(map[string]bool)
if len(os.Args) < 3 {
fmt.Printf("USAGE: %s vnfs [node name pattern/ALL]\n", os.Args[0])
return
}
if os.Args[2] == "ALL" {
nodeList, _ = assets.FindAllNodes()
} else {
if len(os.Args) >= 3 {
nodeList, _ = assets.SearchByName(os.Args[2])
} else {
nodeList, _ = assets.FindAllNodes()
}
if len(nodeList) == 0 {
@@ -140,15 +132,10 @@ func main() {
var nodeList []assets.NodeInfo
var wg sync.WaitGroup
if len(os.Args) < 3 {
fmt.Printf("USAGE: %s vnfs [node name pattern/ALL]\n", os.Args[0])
return
}
if os.Args[2] == "ALL" {
nodeList, _ = assets.FindAllNodes()
} else {
if len(os.Args) >= 3 {
nodeList, _ = assets.SearchByName(os.Args[2])
} else {
nodeList, _ = assets.FindAllNodes()
}
if len(nodeList) == 0 {
@@ -157,7 +144,6 @@ func main() {
}
for _, node := range nodeList {
replace := make(map[string]string)
replace["HOSTNAME"] = node.HostName
replace["FQDN"] = node.Fqdn
@@ -174,8 +160,8 @@ func main() {
}
wg.Add(2)
go overlayRuntime(node, replace, &wg)
go overlaySystem(node, replace, &wg)
overlayRuntime(node, replace, &wg)
overlaySystem(node, replace, &wg)
}
wg.Wait()

View File

@@ -99,7 +99,7 @@ func main() {
*/
log.Printf("Updating runtime system\n")
command := exec.Command("/bin/cpio", "-i")
command := exec.Command("/bin/cpio", "-iu")
command.Stdin = resp.Body
err := command.Run()
if err != nil {