refactor to overlay info

This commit is contained in:
Christian Goll
2025-11-12 19:30:24 +01:00
committed by Jonathon Anderson
parent d1d398d2ff
commit 983a359c00
7 changed files with 56 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
package variables
package info
import (
"fmt"

View File

@@ -1,4 +1,4 @@
package variables
package info
import (
"bytes"

View File

@@ -1,4 +1,4 @@
package variables
package info
import (
"github.com/spf13/cobra"
@@ -7,10 +7,10 @@ import (
var (
baseCmd = &cobra.Command{
Use: "variables [flags] OVERLAY_NAME FILE_PATH",
Use: "info [flags] OVERLAY_NAME FILE_PATH",
Short: "Show variables for a template file in an overlay",
Long: "This command will show the variables for a given template file in a given\n" + "overlay.",
Aliases: []string{"vars", "tags"},
Aliases: []string{"vars", "tags", "information"},
Args: cobra.ExactArgs(2),
RunE: CobraRunE,
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {

View File

@@ -1,7 +1,9 @@
package list
import (
"os"
"strconv"
"syscall"
"github.com/spf13/cobra"
"github.com/warewulf/warewulf/internal/app/wwctl/table"
@@ -30,7 +32,11 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) error {
if vars.ShowPath {
locationStr = "PATH"
}
t.AddHeader("OVERLAY NAME", "FILES/DIRS", locationStr)
if vars.ListLong {
t.AddHeader("PERM MODE", "UID", "GID", "OVERLAY", "FILE PATH", locationStr)
} else {
t.AddHeader("OVERLAY NAME", "FILES/DIRS", locationStr)
}
for _, name := range overlays {
overlay_, err := overlay.Get(name)
@@ -43,21 +49,39 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) error {
files := util.FindFiles(overlay_.Rootfs())
wwlog.Debug("Iterating overlay rootfs: %s", overlay_.Rootfs())
locLine := strconv.FormatBool(overlay_.IsSiteOverlay())
if vars.ShowPath {
locLine = overlay_.Path()
}
if vars.ListContents || vars.ListLong {
var fileCount int
if vars.ListLong {
for file := range files {
t.AddLine(name, files[file], locLine)
fileCount++
}
if fileCount == 0 {
t.AddLine(name, 0, locLine)
s, err := os.Stat(overlay_.File(files[file]))
if err != nil {
wwlog.Warn("%s: %s: %s", name, files[file], err)
continue
}
fileMode := s.Mode()
perms := fileMode & os.ModePerm
sys := s.Sys()
locLine := strconv.FormatBool(overlay_.IsSiteOverlay())
if vars.ShowPath {
locLine = overlay_.Path()
}
t.AddLine(perms, sys.(*syscall.Stat_t).Uid, sys.(*syscall.Stat_t).Gid, name, files[file], locLine)
}
} else {
t.AddLine(name, len(files), locLine)
locLine := strconv.FormatBool(overlay_.IsSiteOverlay())
if vars.ShowPath {
locLine = overlay_.Path()
}
if vars.ListContents {
var fileCount int
for file := range files {
t.AddLine(name, files[file], locLine)
fileCount++
}
if fileCount == 0 {
t.AddLine(name, 0, locLine)
}
} else {
t.AddLine(name, len(files), locLine)
}
}
}
t.Print()

View File

@@ -9,10 +9,10 @@ import (
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/delete"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/edit"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/imprt"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/info"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/list"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/mkdir"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/show"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/variables"
)
var (
@@ -36,7 +36,7 @@ func init() {
baseCmd.AddCommand(imprt.GetCommand())
baseCmd.AddCommand(chmod.GetCommand())
baseCmd.AddCommand(chown.GetCommand())
baseCmd.AddCommand(variables.GetCommand())
baseCmd.AddCommand(info.GetCommand())
}
// GetRootCommand returns the root cobra.Command for the application.

View File

@@ -330,7 +330,11 @@ func (overlay Overlay) ParseCommentVars(file string) (retMap map[string]string)
re := regexp.MustCompile(`{{\s*/\*\s*(.*?):\s*(.*?)\s*\*/\s*}}`)
matches := re.FindAllStringSubmatch(string(content), -1)
wwlog.Debug("matches: %v len(%d:%d)", matches, len(matches), len(matches[0]))
if len(matches) > 0 {
wwlog.Debug("matches: %v len(%d:%d)", matches, len(matches), len(matches[0]))
} else {
wwlog.Debug("matches: [] len(0)")
}
for i := range matches {
if len(matches[i]) > 2 {
retMap[matches[i][1]] = matches[i][2]
@@ -361,9 +365,15 @@ func walkParseTree(node parse.Node, vars map[string]bool) {
case *parse.RangeNode:
walkParseTree(n.Pipe, vars)
walkParseTree(n.List, vars)
walkParseTree(n.ElseList, vars)
case *parse.WithNode:
walkParseTree(n.Pipe, vars)
walkParseTree(n.List, vars)
walkParseTree(n.ElseList, vars)
case *parse.TemplateNode:
walkParseTree(n.Pipe, vars)
case *parse.BreakNode, *parse.ContinueNode:
// No variables to extract
case *parse.PipeNode:
if n != nil {
for _, cmd := range n.Cmds {