- Reorganized documentation - Reordered columns - Renamed column names - Added `--` to options in output - Updated aliases Signed-off-by: Jonathon Anderson <janderson@ciq.com>
102 lines
2.5 KiB
Go
102 lines
2.5 KiB
Go
package info
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/warewulf/warewulf/internal/app/wwctl/table"
|
|
"github.com/warewulf/warewulf/internal/pkg/node"
|
|
"github.com/warewulf/warewulf/internal/pkg/overlay"
|
|
"github.com/warewulf/warewulf/internal/pkg/wwlog"
|
|
"golang.org/x/exp/maps"
|
|
)
|
|
|
|
func CobraRunE(cmd *cobra.Command, args []string) error {
|
|
overlayName := args[0]
|
|
filePath := args[1]
|
|
|
|
ov, err := overlay.Get(overlayName)
|
|
if err != nil {
|
|
wwlog.Error("Failed to get overlay %s: %s", overlayName, err)
|
|
return err
|
|
}
|
|
|
|
vars := ov.ParseVars(filePath)
|
|
sort.Strings(vars)
|
|
commentMap := ov.ParseCommentVars(filePath)
|
|
varMap := node.TemplateVarMap{}
|
|
varMap.ConfToTemplateMap(node.Node{}, "")
|
|
if vars == nil {
|
|
return fmt.Errorf("could not parse variables for %s in overlay %s", filePath, overlayName)
|
|
}
|
|
commentKeys := maps.Keys(commentMap)
|
|
sort.Strings(commentKeys)
|
|
for _, docLn := range commentKeys {
|
|
if strings.Contains(docLn, "wwdoc") {
|
|
wwlog.Info(commentMap[docLn])
|
|
}
|
|
}
|
|
t := table.New(cmd.OutOrStdout())
|
|
t.AddHeader("VARIABLE", "OPTION", "TYPE", "HELP")
|
|
|
|
for _, v := range vars {
|
|
found := false
|
|
helpText, hasCommentHelp := commentMap[v]
|
|
|
|
for key, val := range varMap {
|
|
// fuzzy match, ignore case and try to also match singular / plural
|
|
textLower := strings.ToLower(v)
|
|
keyLower := strings.ToLower(key)
|
|
match := false
|
|
if strings.Contains(textLower, keyLower) {
|
|
match = true
|
|
} else {
|
|
keyParts := strings.Split(key, ".")
|
|
newParts := make([]string, len(keyParts))
|
|
for i, p := range keyParts {
|
|
newParts[i] = strings.ToLower(p)
|
|
}
|
|
for i, part := range newParts {
|
|
originalPart := part
|
|
var variation string
|
|
if strings.HasSuffix(part, "s") {
|
|
variation = strings.TrimSuffix(part, "s")
|
|
} else {
|
|
variation = part + "s"
|
|
}
|
|
newParts[i] = variation
|
|
variantKey := strings.Join(newParts, ".")
|
|
if strings.Contains(textLower, variantKey) {
|
|
match = true
|
|
break
|
|
}
|
|
newParts[i] = originalPart // restore for next iteration
|
|
}
|
|
}
|
|
if match {
|
|
opt := ""
|
|
if val.LongOpt != "" {
|
|
opt = "--" + val.LongOpt
|
|
}
|
|
if hasCommentHelp {
|
|
t.AddLine(v, opt, val.Type, helpText)
|
|
} else {
|
|
t.AddLine(v, opt, val.Type, val.Comment)
|
|
}
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
if hasCommentHelp {
|
|
t.AddLine(v, "", "", helpText)
|
|
} else if strings.Contains(v, "Tags") {
|
|
t.AddLine(v, "", "", "", "")
|
|
}
|
|
}
|
|
}
|
|
t.Print()
|
|
return nil
|
|
}
|