Recommended changes from review of #1568
- Make Resources an `interface{}` to support arbitrary yaml
- Remove `wwctl resource` as incompatible with arbitrary yaml
- Revert changes to host overlay templates
- Remove NFS mount options from warewulf.conf
- Replace NFS support / resource prefix with "fstab" resource
- Move resources to profiles
- Migrate warewulf.conf mounts to nodes.conf with `wwctl upgrade`
- Add documentation
Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
@@ -37,7 +37,6 @@ type TemplateStruct struct {
|
||||
Tftp warewulfconf.TFTPConf
|
||||
Paths warewulfconf.BuildConfig
|
||||
AllNodes []node.Node
|
||||
Resources map[string]node.Resource
|
||||
node.Node
|
||||
// backward compatiblity
|
||||
Container string
|
||||
@@ -47,7 +46,7 @@ type TemplateStruct struct {
|
||||
/*
|
||||
Initialize an TemplateStruct with the given node.NodeInfo
|
||||
*/
|
||||
func InitStruct(overlayName string, nodeData node.Node, allNodes []node.Node, resources map[string]node.Resource) (TemplateStruct, error) {
|
||||
func InitStruct(overlayName string, nodeData node.Node, allNodes []node.Node) (TemplateStruct, error) {
|
||||
var tstruct TemplateStruct
|
||||
tstruct.Overlay = overlayName
|
||||
hostname, _ := os.Hostname()
|
||||
@@ -82,7 +81,6 @@ func InitStruct(overlayName string, nodeData node.Node, allNodes []node.Node, re
|
||||
tstruct.BuildTime = dt.Format("01-02-2006 15:04:05 MST")
|
||||
tstruct.BuildTimeUnix = strconv.FormatInt(dt.Unix(), 10)
|
||||
// tstruct.Node.Tags = map[string]string{}
|
||||
tstruct.Resources = resources
|
||||
var buf bytes.Buffer
|
||||
enc := gob.NewEncoder(&buf)
|
||||
dec := gob.NewDecoder(&buf)
|
||||
|
||||
@@ -101,7 +101,7 @@ func (this Overlay) IsDistributionOverlay() bool {
|
||||
return path.Dir(this.Path()) == config.Get().Paths.DistributionOverlaydir()
|
||||
}
|
||||
|
||||
func BuildAllOverlays(nodes []node.Node, allNodes []node.Node, resources map[string]node.Resource, workerCount int) error {
|
||||
func BuildAllOverlays(nodes []node.Node, allNodes []node.Node, workerCount int) error {
|
||||
nodeChan := make(chan node.Node, len(nodes))
|
||||
errChan := make(chan error, len(nodes)*2)
|
||||
|
||||
@@ -109,12 +109,12 @@ func BuildAllOverlays(nodes []node.Node, allNodes []node.Node, resources map[str
|
||||
worker := func() {
|
||||
for n := range nodeChan {
|
||||
wwlog.Info("Building system overlays for %s: [%s]", n.Id(), strings.Join(n.SystemOverlay, ", "))
|
||||
if err := BuildOverlay(n, allNodes, resources, "system", n.SystemOverlay); err != nil {
|
||||
if err := BuildOverlay(n, allNodes, "system", n.SystemOverlay); err != nil {
|
||||
errChan <- fmt.Errorf("could not build system overlays %v for node %s: %w", n.SystemOverlay, n.Id(), err)
|
||||
}
|
||||
|
||||
wwlog.Info("Building runtime overlays for %s: [%s]", n.Id(), strings.Join(n.RuntimeOverlay, ", "))
|
||||
if err := BuildOverlay(n, allNodes, resources, "runtime", n.RuntimeOverlay); err != nil {
|
||||
if err := BuildOverlay(n, allNodes, "runtime", n.RuntimeOverlay); err != nil {
|
||||
errChan <- fmt.Errorf("could not build runtime overlays %v for node %s: %w", n.RuntimeOverlay, n.Id(), err)
|
||||
}
|
||||
}
|
||||
@@ -139,7 +139,7 @@ func BuildAllOverlays(nodes []node.Node, allNodes []node.Node, resources map[str
|
||||
return nil
|
||||
}
|
||||
|
||||
func BuildSpecificOverlays(nodes []node.Node, allNodes []node.Node, resources map[string]node.Resource, overlayNames []string, workerCount int) error {
|
||||
func BuildSpecificOverlays(nodes []node.Node, allNodes []node.Node, overlayNames []string, workerCount int) error {
|
||||
nodeChan := make(chan node.Node, len(nodes))
|
||||
errChan := make(chan error, len(nodes))
|
||||
|
||||
@@ -148,7 +148,7 @@ func BuildSpecificOverlays(nodes []node.Node, allNodes []node.Node, resources ma
|
||||
for n := range nodeChan {
|
||||
wwlog.Info("Building overlay for %s: %v", n, overlayNames)
|
||||
for _, overlayName := range overlayNames {
|
||||
err := BuildOverlay(n, allNodes, resources, "", []string{overlayName})
|
||||
err := BuildOverlay(n, allNodes, "", []string{overlayName})
|
||||
if err != nil {
|
||||
errChan <- fmt.Errorf("could not build overlay %s for node %s: %w", overlayName, n.Id(), err)
|
||||
}
|
||||
@@ -199,7 +199,7 @@ func BuildHostOverlay() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return BuildOverlayIndir(hostData, allNodes, registry.Resources, []string{"host"}, "/")
|
||||
return BuildOverlayIndir(hostData, allNodes, []string{"host"}, "/")
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -229,7 +229,7 @@ func FindOverlays() (overlayList []string, err error) {
|
||||
/*
|
||||
Build the given overlays for a node and create a Image for them
|
||||
*/
|
||||
func BuildOverlay(nodeConf node.Node, allNodes []node.Node, resources map[string]node.Resource, context string, overlayNames []string) error {
|
||||
func BuildOverlay(nodeConf node.Node, allNodes []node.Node, context string, overlayNames []string) error {
|
||||
if len(overlayNames) == 0 && context == "" {
|
||||
return nil
|
||||
}
|
||||
@@ -254,7 +254,7 @@ func BuildOverlay(nodeConf node.Node, allNodes []node.Node, resources map[string
|
||||
|
||||
wwlog.Debug("Created temporary directory for %s: %s", name, buildDir)
|
||||
|
||||
err = BuildOverlayIndir(nodeConf, allNodes, resources, overlayNames, buildDir)
|
||||
err = BuildOverlayIndir(nodeConf, allNodes, overlayNames, buildDir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to generate files for %s: %w", name, err)
|
||||
}
|
||||
@@ -283,7 +283,7 @@ func init() {
|
||||
}
|
||||
|
||||
// Build the given overlays for a node in the given directory.
|
||||
func BuildOverlayIndir(nodeData node.Node, allNodes []node.Node, resources map[string]node.Resource, overlayNames []string, outputDir string) error {
|
||||
func BuildOverlayIndir(nodeData node.Node, allNodes []node.Node, overlayNames []string, outputDir string) error {
|
||||
if len(overlayNames) == 0 {
|
||||
return nil
|
||||
}
|
||||
@@ -332,7 +332,7 @@ func BuildOverlayIndir(nodeData node.Node, allNodes []node.Node, resources map[s
|
||||
} else if filepath.Ext(walkPath) == ".ww" {
|
||||
originalOutputPath := outputPath
|
||||
outputPath := strings.TrimSuffix(outputPath, ".ww")
|
||||
tstruct, err := InitStruct(overlayName, nodeData, allNodes, resources)
|
||||
tstruct, err := InitStruct(overlayName, nodeData, allNodes)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to initial data for %s: %w", nodeData.Id(), err)
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ T3
|
||||
|
||||
env.MkdirAll(tt.outputDir)
|
||||
|
||||
assert.NoError(t, BuildOverlayIndir(tt.node, []node.Node{tt.node}, nil, tt.overlays, env.GetPath(tt.outputDir)))
|
||||
assert.NoError(t, BuildOverlayIndir(tt.node, []node.Node{tt.node}, tt.overlays, env.GetPath(tt.outputDir)))
|
||||
dirFiles := tt.outputDirs
|
||||
for outputFile, _ := range tt.outputFiles {
|
||||
dirFiles = append(dirFiles, outputFile)
|
||||
@@ -400,7 +400,7 @@ func Test_BuildOverlay(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
nodeInfo := node.NewNode(tt.nodeName)
|
||||
t.Run(tt.description, func(t *testing.T) {
|
||||
err := BuildOverlay(nodeInfo, []node.Node{nodeInfo}, nil, tt.context, tt.overlays)
|
||||
err := BuildOverlay(nodeInfo, []node.Node{nodeInfo}, tt.context, tt.overlays)
|
||||
assert.NoError(t, err)
|
||||
if tt.image != "" {
|
||||
image := env.GetPath(path.Join("srv/warewulf/overlays", tt.image))
|
||||
@@ -523,7 +523,7 @@ func Test_BuildAllOverlays(t *testing.T) {
|
||||
}
|
||||
nodes = append(nodes, nodeInfo)
|
||||
}
|
||||
err := BuildAllOverlays(nodes, nodes, nil, runtime.NumCPU())
|
||||
err := BuildAllOverlays(nodes, nodes, runtime.NumCPU())
|
||||
assert.NoError(t, err)
|
||||
if tt.createdOverlays == nil {
|
||||
dirName := path.Join(provisionDir, "overlays")
|
||||
@@ -615,7 +615,7 @@ func Test_BuildSpecificOverlays(t *testing.T) {
|
||||
nodeInfo := node.NewNode(nodeName)
|
||||
nodes = append(nodes, nodeInfo)
|
||||
}
|
||||
err := BuildSpecificOverlays(nodes, nodes, nil, tt.overlays, runtime.NumCPU())
|
||||
err := BuildSpecificOverlays(nodes, nodes, tt.overlays, runtime.NumCPU())
|
||||
if !tt.succeed {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user