From eff1edd038795dfe94bb3fcf27de87b33c2ac8c2 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 17 Jan 2025 00:58:12 -0700 Subject: [PATCH] Fixing tests in review of #1568 Signed-off-by: Jonathon Anderson --- .../app/wwctl/container/exec/child/main.go | 2 +- internal/app/wwctl/node/list/main_test.go | 6 +++--- internal/app/wwctl/overlay/build/main.go | 6 +++--- internal/app/wwctl/overlay/imprt/main.go | 2 +- internal/app/wwctl/overlay/show/main.go | 2 +- internal/app/wwctl/profile/list/main_test.go | 6 +++--- internal/app/wwctl/resource/add/main.go | 10 +++++----- internal/app/wwctl/resource/add/main_test.go | 8 ++++---- internal/app/wwctl/resource/add/root.go | 2 +- internal/app/wwctl/resource/delete/main.go | 4 ++-- .../app/wwctl/resource/delete/main_test.go | 12 +++++------ internal/app/wwctl/resource/list/main_test.go | 10 +++++----- internal/app/wwctl/resource/set/main.go | 8 ++++---- internal/app/wwctl/resource/set/main_test.go | 14 ++++++------- internal/pkg/configure/hostfile.go | 2 +- internal/pkg/node/constructors.go | 6 +++--- internal/pkg/node/constructors_test.go | 8 ++++---- internal/pkg/node/datastructure.go | 19 +++++------------- internal/pkg/node/fields_test.go | 2 ++ internal/pkg/overlay/datastructure.go | 6 +++--- internal/pkg/overlay/overlay.go | 20 +++++++++---------- internal/pkg/overlay/overlay_test.go | 8 ++++---- internal/pkg/warewulfd/util.go | 4 ++-- overlays/fstab/internal/nodes.conf | 4 ++-- overlays/fstab/rootfs/etc/fstab.ww | 8 ++++---- overlays/host/internal/nodes.conf | 4 ++-- overlays/host/rootfs/etc/exports.ww | 5 ++--- 27 files changed, 90 insertions(+), 98 deletions(-) diff --git a/internal/app/wwctl/container/exec/child/main.go b/internal/app/wwctl/container/exec/child/main.go index 7847616d..195458a0 100644 --- a/internal/app/wwctl/container/exec/child/main.go +++ b/internal/app/wwctl/container/exec/child/main.go @@ -103,7 +103,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { } overlays := filteredNodes[0].SystemOverlay overlays = append(overlays, filteredNodes[0].RuntimeOverlay...) - err = overlay.BuildOverlayIndir(filteredNodes[0], allNodes, overlays, path.Join(runDir, "nodeoverlay")) + err = overlay.BuildOverlayIndir(filteredNodes[0], allNodes, nodeDB.Resources, overlays, path.Join(runDir, "nodeoverlay")) if err != nil { return fmt.Errorf("could not build overlay: %s", err) } diff --git a/internal/app/wwctl/node/list/main_test.go b/internal/app/wwctl/node/list/main_test.go index 01460743..31e3ee4a 100644 --- a/internal/app/wwctl/node/list/main_test.go +++ b/internal/app/wwctl/node/list/main_test.go @@ -480,7 +480,7 @@ nodes: "PrimaryNetDev": "", "Disks": null, "FileSystems": null, - "ResourceList": null + "Resources": null } ] `, @@ -531,7 +531,7 @@ nodes: "PrimaryNetDev": "", "Disks": null, "FileSystems": null, - "ResourceList": null + "Resources": null }, { "Discoverable": "", @@ -566,7 +566,7 @@ nodes: "PrimaryNetDev": "", "Disks": null, "FileSystems": null, - "ResourceList": null + "Resources": null } ] `, diff --git a/internal/app/wwctl/overlay/build/main.go b/internal/app/wwctl/overlay/build/main.go index 2e987de7..1f898243 100644 --- a/internal/app/wwctl/overlay/build/main.go +++ b/internal/app/wwctl/overlay/build/main.go @@ -57,7 +57,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { } for _, node := range filteredNodes { - return overlay.BuildOverlayIndir(node, allNodes, OverlayNames, OverlayDir) + return overlay.BuildOverlayIndir(node, allNodes, nodeDB.Resources, OverlayNames, OverlayDir) } } else { return errors.New("must specify a node to build overlay") @@ -68,9 +68,9 @@ func CobraRunE(cmd *cobra.Command, args []string) error { defer syscall.Umask(oldMask) if len(OverlayNames) > 0 { - err = overlay.BuildSpecificOverlays(filteredNodes, allNodes, OverlayNames, Workers) + err = overlay.BuildSpecificOverlays(filteredNodes, allNodes, nodeDB.Resources, OverlayNames, Workers) } else { - err = overlay.BuildAllOverlays(filteredNodes, allNodes, Workers) + err = overlay.BuildAllOverlays(filteredNodes, allNodes, nodeDB.Resources, Workers) } if err != nil { diff --git a/internal/app/wwctl/overlay/imprt/main.go b/internal/app/wwctl/overlay/imprt/main.go index f53144f8..1bb37d40 100644 --- a/internal/app/wwctl/overlay/imprt/main.go +++ b/internal/app/wwctl/overlay/imprt/main.go @@ -86,7 +86,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { } } - return overlay.BuildSpecificOverlays(updateNodes, nodes, []string{overlayName}, Workers) + return overlay.BuildSpecificOverlays(updateNodes, nodes, n.Resources, []string{overlayName}, Workers) } return nil diff --git a/internal/app/wwctl/overlay/show/main.go b/internal/app/wwctl/overlay/show/main.go index 533322e7..07d89d57 100644 --- a/internal/app/wwctl/overlay/show/main.go +++ b/internal/app/wwctl/overlay/show/main.go @@ -62,7 +62,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { if err != nil { return err } - tstruct, err := overlay.InitStruct(overlayName, nodeConf, allNodes) + tstruct, err := overlay.InitStruct(overlayName, nodeConf, allNodes, nodeDB.Resources) if err != nil { return err } diff --git a/internal/app/wwctl/profile/list/main_test.go b/internal/app/wwctl/profile/list/main_test.go index 617dcb43..808ccef4 100644 --- a/internal/app/wwctl/profile/list/main_test.go +++ b/internal/app/wwctl/profile/list/main_test.go @@ -170,7 +170,7 @@ nodes: "PrimaryNetDev": "", "Disks": null, "FileSystems": null, - "ResourceList": null + "Resources": null } } `, @@ -222,7 +222,7 @@ nodes: "PrimaryNetDev": "", "Disks": null, "FileSystems": null, - "ResourceList": null + "Resources": null }, "test": { "Profiles": null, @@ -241,7 +241,7 @@ nodes: "PrimaryNetDev": "", "Disks": null, "FileSystems": null, - "ResourceList": null + "Resources": null } } `, diff --git a/internal/app/wwctl/resource/add/main.go b/internal/app/wwctl/resource/add/main.go index e2a90dfa..b5cc0214 100644 --- a/internal/app/wwctl/resource/add/main.go +++ b/internal/app/wwctl/resource/add/main.go @@ -14,17 +14,17 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err if err != nil { return fmt.Errorf("failed to load node configuration: %s", err) } - if ok := nodeYml.Resource[args[0]] != nil; ok { + if ok := nodeYml.Resources[args[0]] != nil; ok { return fmt.Errorf("resource %s already exists", args[0]) } - if nodeYml.Resource == nil { - nodeYml.Resource = make(map[string]node.RemoteRes) + if nodeYml.Resources == nil { + nodeYml.Resources = make(map[string]node.Resource) } - res := node.RemoteRes{} + res := node.Resource{} for key, val := range vars.tags { res[key] = val } - nodeYml.Resource[args[0]] = res + nodeYml.Resources[args[0]] = res err = nodeYml.Persist() return err } diff --git a/internal/app/wwctl/resource/add/main_test.go b/internal/app/wwctl/resource/add/main_test.go index c81760cb..ef36f95f 100644 --- a/internal/app/wwctl/resource/add/main_test.go +++ b/internal/app/wwctl/resource/add/main_test.go @@ -28,15 +28,15 @@ nodes: {} `, outDb: `nodeprofiles: {} nodes: {} -resource: +resources: test: foo: baar `}} env := testenv.New(t) - defer env.RemoveAll(t) + defer env.RemoveAll() warewulfd.SetNoDaemon() for _, tt := range tests { - env.WriteFile(t, "etc/warewulf/nodes.conf", tt.inDB) + env.WriteFile("etc/warewulf/nodes.conf", tt.inDB) t.Run(tt.name, func(t *testing.T) { baseCmd := GetCommand() baseCmd.SetArgs(tt.args) @@ -49,7 +49,7 @@ resource: } else { assert.NoError(t, err) assert.Equal(t, buf.String(), tt.stdout) - content := env.ReadFile(t, "etc/warewulf/nodes.conf") + content := env.ReadFile("etc/warewulf/nodes.conf") assert.YAMLEq(t, tt.outDb, content) } }) diff --git a/internal/app/wwctl/resource/add/root.go b/internal/app/wwctl/resource/add/root.go index d003a992..96489b04 100644 --- a/internal/app/wwctl/resource/add/root.go +++ b/internal/app/wwctl/resource/add/root.go @@ -5,7 +5,7 @@ import ( ) type variables struct { - tags map[string]string + tags map[string]string } // GetRootCommand returns the root cobra.Command for the application. diff --git a/internal/app/wwctl/resource/delete/main.go b/internal/app/wwctl/resource/delete/main.go index d4608fbb..d7f98597 100644 --- a/internal/app/wwctl/resource/delete/main.go +++ b/internal/app/wwctl/resource/delete/main.go @@ -15,10 +15,10 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err return fmt.Errorf("failed to load node configuration: %s", err) } for _, res := range args { - if _, ok := nodeYml.Resource[res]; !ok { + if _, ok := nodeYml.Resources[res]; !ok { return fmt.Errorf("resource %s does not exist", res) } - delete(nodeYml.Resource, res) + delete(nodeYml.Resources, res) } return nodeYml.Persist() } diff --git a/internal/app/wwctl/resource/delete/main_test.go b/internal/app/wwctl/resource/delete/main_test.go index 5e9a45dc..f5343810 100644 --- a/internal/app/wwctl/resource/delete/main_test.go +++ b/internal/app/wwctl/resource/delete/main_test.go @@ -26,22 +26,22 @@ func Test_resource_set(t *testing.T) { args: []string{"test1"}, inDB: `nodeprofiles: {} nodes: {} -resource: +resources: test1: {} test2: {} `, outDb: `nodeprofiles: {} nodes: {} -resource: +resources: test2: {} `}, } env := testenv.New(t) - defer env.RemoveAll(t) + defer env.RemoveAll() warewulfd.SetNoDaemon() for _, tt := range tests { - env.WriteFile(t, "etc/warewulf/nodes.conf", tt.inDB) + env.WriteFile("etc/warewulf/nodes.conf", tt.inDB) t.Run(tt.name, func(t *testing.T) { baseCmd := GetCommand() baseCmd.SetArgs(tt.args) @@ -53,8 +53,8 @@ resource: assert.Error(t, err) } else { assert.NoError(t, err) - assert.Equal(t, buf.String(), tt.stdout) - content := env.ReadFile(t, "etc/warewulf/nodes.conf") + assert.Equal(t, tt.stdout, buf.String()) + content := env.ReadFile("etc/warewulf/nodes.conf") assert.YAMLEq(t, tt.outDb, content) } }) diff --git a/internal/app/wwctl/resource/list/main_test.go b/internal/app/wwctl/resource/list/main_test.go index ffffc291..07e9125f 100644 --- a/internal/app/wwctl/resource/list/main_test.go +++ b/internal/app/wwctl/resource/list/main_test.go @@ -28,7 +28,7 @@ test2 `, inDB: `nodeprofiles: {} nodes: {} -resource: +resources: test1: {} test2: {} `, @@ -43,17 +43,17 @@ test foo baar `, inDB: `nodeprofiles: {} nodes: {} -resource: +resources: test: foo: baar `, }, } env := testenv.New(t) - defer env.RemoveAll(t) + defer env.RemoveAll() warewulfd.SetNoDaemon() for _, tt := range tests { - env.WriteFile(t, "etc/warewulf/nodes.conf", tt.inDB) + env.WriteFile("etc/warewulf/nodes.conf", tt.inDB) t.Run(tt.name, func(t *testing.T) { baseCmd := GetCommand() baseCmd.SetArgs(tt.args) @@ -66,7 +66,7 @@ resource: assert.Error(t, err) } else { assert.NoError(t, err) - assert.Equal(t, buf.String(), tt.stdout) + assert.Equal(t, tt.stdout, buf.String()) } }) diff --git a/internal/app/wwctl/resource/set/main.go b/internal/app/wwctl/resource/set/main.go index a8eb9428..f9d2fd9a 100644 --- a/internal/app/wwctl/resource/set/main.go +++ b/internal/app/wwctl/resource/set/main.go @@ -14,11 +14,11 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err if err != nil { return fmt.Errorf("failed to load node configuration: %s", err) } - if ok := nodeYml.Resource[args[0]] != nil; ok { - if nodeYml.Resource == nil { - nodeYml.Resource = make(map[string]node.RemoteRes) + if ok := nodeYml.Resources[args[0]] != nil; ok { + if nodeYml.Resources == nil { + nodeYml.Resources = make(map[string]node.Resource) } - res := nodeYml.Resource[args[0]] + res := nodeYml.Resources[args[0]] for key, val := range vars.tags { res[key] = val } diff --git a/internal/app/wwctl/resource/set/main_test.go b/internal/app/wwctl/resource/set/main_test.go index b728529d..733ab744 100644 --- a/internal/app/wwctl/resource/set/main_test.go +++ b/internal/app/wwctl/resource/set/main_test.go @@ -26,13 +26,13 @@ func Test_resource_set(t *testing.T) { stdout: "", inDB: `nodeprofiles: {} nodes: {} -resource: +resources: test: foo: baar `, outDb: `nodeprofiles: {} nodes: {} -resource: +resources: test: foo: test `}, @@ -43,17 +43,17 @@ resource: stdout: "", inDB: `nodeprofiles: {} nodes: {} -resource: +resources: test: foo: baar `, outDb: ``}, } env := testenv.New(t) - defer env.RemoveAll(t) + defer env.RemoveAll() warewulfd.SetNoDaemon() for _, tt := range tests { - env.WriteFile(t, "etc/warewulf/nodes.conf", tt.inDB) + env.WriteFile("etc/warewulf/nodes.conf", tt.inDB) t.Run(tt.name, func(t *testing.T) { baseCmd := GetCommand() baseCmd.SetArgs(tt.args) @@ -65,8 +65,8 @@ resource: assert.Error(t, err) } else { assert.NoError(t, err) - assert.Equal(t, buf.String(), tt.stdout) - content := env.ReadFile(t, "etc/warewulf/nodes.conf") + assert.Equal(t, tt.stdout, buf.String()) + content := env.ReadFile("etc/warewulf/nodes.conf") assert.YAMLEq(t, tt.outDb, content) } }) diff --git a/internal/pkg/configure/hostfile.go b/internal/pkg/configure/hostfile.go index e8bf1759..42f4fda4 100644 --- a/internal/pkg/configure/hostfile.go +++ b/internal/pkg/configure/hostfile.go @@ -31,7 +31,7 @@ func Hostfile() (err error) { } hostname, _ := os.Hostname() - tstruct, err := overlay.InitStruct(overlay_.Name(), node.NewNode(hostname), allNodes) + tstruct, err := overlay.InitStruct(overlay_.Name(), node.NewNode(hostname), allNodes, nil) if err != nil { return err } diff --git a/internal/pkg/node/constructors.go b/internal/pkg/node/constructors.go index aa3d7c59..8f938d9b 100644 --- a/internal/pkg/node/constructors.go +++ b/internal/pkg/node/constructors.go @@ -188,7 +188,7 @@ Return the names of all available remote resources */ func (config *NodesYaml) ListAllResources() []string { var resList []string - for name := range config.Resource { + for name := range config.Resources { resList = append(resList, name) } sort.Strings(resList) @@ -227,8 +227,8 @@ func (config *NodesYaml) FindDiscoverableNode() (Node, string, error) { /* get the given resource */ -func (config *NodesYaml) GetResource(id string) (res RemoteRes, err error) { - if found, ok := config.Resource[id]; ok { +func (config *NodesYaml) GetResource(id string) (res Resource, err error) { + if found, ok := config.Resources[id]; ok { return found, nil } return res, ErrNotFound diff --git a/internal/pkg/node/constructors_test.go b/internal/pkg/node/constructors_test.go index a945a1f2..5b2e29c8 100644 --- a/internal/pkg/node/constructors_test.go +++ b/internal/pkg/node/constructors_test.go @@ -22,7 +22,7 @@ nodes: network devices: net0: device: eth0 - resource_list: + resources: - NFSHOME test_node2: primary network: net1 @@ -53,7 +53,7 @@ nodes: network devices: override: device: ib1 -resource: +resources: NFSHOME: mountpoint: /home ` @@ -123,8 +123,8 @@ func Test_Primary_Network(t *testing.T) { assert.Equal(t, "profile", test_node6.NetDevs["override"].Type) }) t.Run("resource is defined", func(t *testing.T) { - assert.Contains(t, test_node1.ResourceList, "NFSHOME") - res, err := c.GetResource(test_node1.ResourceList[0]) + assert.Contains(t, test_node1.Resources, "NFSHOME") + res, err := c.GetResource(test_node1.Resources[0]) assert.NoError(t, err) assert.Contains(t, res, "mountpoint") }) diff --git a/internal/pkg/node/datastructure.go b/internal/pkg/node/datastructure.go index 7cb2fd6d..47d66b2f 100644 --- a/internal/pkg/node/datastructure.go +++ b/internal/pkg/node/datastructure.go @@ -15,9 +15,9 @@ const undef string = "UNDEF" Structure of which goes to disk */ type NodesYaml struct { - NodeProfiles map[string]*Profile - Nodes map[string]*Node - Resource map[string]RemoteRes `yaml:"resource,omitempty"` + NodeProfiles map[string]*Profile `yaml:"nodeprofiles"` + Nodes map[string]*Node `yaml:"nodes"` + Resources map[string]Resource `yaml:"resources,omitempty"` } /* @@ -54,7 +54,7 @@ type Profile struct { PrimaryNetDev string `yaml:"primary network,omitempty" lopt:"primarynet" sopt:"p" comment:"Set the primary network interface"` Disks map[string]*Disk `yaml:"disks,omitempty"` FileSystems map[string]*FileSystem `yaml:"filesystems,omitempty"` - ResourceList []string `yaml:"resource_list,omitempty" lopt:"resources" comment:"Set the resources available to the node or profile"` + Resources []string `yaml:"resources,omitempty" lopt:"resources" comment:"Set the resources available to the node or profile"` } type IpmiConf struct { @@ -127,13 +127,4 @@ type FileSystem struct { MountOptions string `yaml:"mount_options,omitempty" comment:"any special options to be passed to the mount command"` } -/* -Definition of any remote. Can be a nfs share or other FS types -*/ - -type RemoteRes map[string]string - -// always return so that the resource isn't marshalled -// func (res RemoteRes) IsZero() bool { -// return true -// } +type Resource map[string]string diff --git a/internal/pkg/node/fields_test.go b/internal/pkg/node/fields_test.go index e788ed58..eaad50ef 100644 --- a/internal/pkg/node/fields_test.go +++ b/internal/pkg/node/fields_test.go @@ -142,6 +142,7 @@ func Test_listFields(t *testing.T) { "NetDevs[default].Tags[nettag]", "Tags[tag]", "PrimaryNetDev", + "Resources", }, }, "profile": { @@ -192,6 +193,7 @@ func Test_listFields(t *testing.T) { "NetDevs[default].Tags[nettag]", "Tags[tag]", "PrimaryNetDev", + "Resources", }, }, } diff --git a/internal/pkg/overlay/datastructure.go b/internal/pkg/overlay/datastructure.go index 67075367..2c19d068 100644 --- a/internal/pkg/overlay/datastructure.go +++ b/internal/pkg/overlay/datastructure.go @@ -37,7 +37,7 @@ type TemplateStruct struct { Tftp warewulfconf.TFTPConf Paths warewulfconf.BuildConfig AllNodes []node.Node - Resource map[string]node.RemoteRes + Resources map[string]node.Resource node.Node // backward compatiblity Container string @@ -47,7 +47,7 @@ type TemplateStruct struct { /* Initialize an TemplateStruct with the given node.NodeInfo */ -func InitStruct(overlayName string, nodeData node.Node, allNodes []node.Node) (TemplateStruct, error) { +func InitStruct(overlayName string, nodeData node.Node, allNodes []node.Node, resources map[string]node.Resource) (TemplateStruct, error) { var tstruct TemplateStruct tstruct.Overlay = overlayName hostname, _ := os.Hostname() @@ -82,7 +82,7 @@ func InitStruct(overlayName string, nodeData node.Node, allNodes []node.Node) (T 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.Resource = nodeDB.Resource + tstruct.Resources = resources var buf bytes.Buffer enc := gob.NewEncoder(&buf) dec := gob.NewDecoder(&buf) diff --git a/internal/pkg/overlay/overlay.go b/internal/pkg/overlay/overlay.go index e0eba792..e18033ac 100644 --- a/internal/pkg/overlay/overlay.go +++ b/internal/pkg/overlay/overlay.go @@ -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, workerCount int) error { +func BuildAllOverlays(nodes []node.Node, allNodes []node.Node, resources map[string]node.Resource, 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, workerCount int) 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, "system", n.SystemOverlay); err != nil { + if err := BuildOverlay(n, allNodes, resources, "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, "runtime", n.RuntimeOverlay); err != nil { + if err := BuildOverlay(n, allNodes, resources, "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, workerCount int) return nil } -func BuildSpecificOverlays(nodes []node.Node, allNodes []node.Node, overlayNames []string, workerCount int) error { +func BuildSpecificOverlays(nodes []node.Node, allNodes []node.Node, resources map[string]node.Resource, 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, overlayNames for n := range nodeChan { wwlog.Info("Building overlay for %s: %v", n, overlayNames) for _, overlayName := range overlayNames { - err := BuildOverlay(n, allNodes, "", []string{overlayName}) + err := BuildOverlay(n, allNodes, resources, "", []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, []string{"host"}, "/") + return BuildOverlayIndir(hostData, allNodes, registry.Resources, []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, context string, overlayNames []string) error { +func BuildOverlay(nodeConf node.Node, allNodes []node.Node, resources map[string]node.Resource, context string, overlayNames []string) error { if len(overlayNames) == 0 && context == "" { return nil } @@ -254,7 +254,7 @@ func BuildOverlay(nodeConf node.Node, allNodes []node.Node, context string, over wwlog.Debug("Created temporary directory for %s: %s", name, buildDir) - err = BuildOverlayIndir(nodeConf, allNodes, overlayNames, buildDir) + err = BuildOverlayIndir(nodeConf, allNodes, resources, 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, overlayNames []string, outputDir string) error { +func BuildOverlayIndir(nodeData node.Node, allNodes []node.Node, resources map[string]node.Resource, overlayNames []string, outputDir string) error { if len(overlayNames) == 0 { return nil } @@ -332,7 +332,7 @@ func BuildOverlayIndir(nodeData node.Node, allNodes []node.Node, overlayNames [] } else if filepath.Ext(walkPath) == ".ww" { originalOutputPath := outputPath outputPath := strings.TrimSuffix(outputPath, ".ww") - tstruct, err := InitStruct(overlayName, nodeData, allNodes) + tstruct, err := InitStruct(overlayName, nodeData, allNodes, resources) if err != nil { return fmt.Errorf("failed to initial data for %s: %w", nodeData.Id(), err) } diff --git a/internal/pkg/overlay/overlay_test.go b/internal/pkg/overlay/overlay_test.go index 845ba11f..761e20ec 100644 --- a/internal/pkg/overlay/overlay_test.go +++ b/internal/pkg/overlay/overlay_test.go @@ -229,7 +229,7 @@ T3 env.MkdirAll(tt.outputDir) - assert.NoError(t, BuildOverlayIndir(tt.node, []node.Node{tt.node}, tt.overlays, env.GetPath(tt.outputDir))) + assert.NoError(t, BuildOverlayIndir(tt.node, []node.Node{tt.node}, nil, 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}, tt.context, tt.overlays) + err := BuildOverlay(nodeInfo, []node.Node{nodeInfo}, nil, 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, runtime.NumCPU()) + err := BuildAllOverlays(nodes, nodes, nil, 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, tt.overlays, runtime.NumCPU()) + err := BuildSpecificOverlays(nodes, nodes, nil, tt.overlays, runtime.NumCPU()) if !tt.succeed { assert.Error(t, err) } else { diff --git a/internal/pkg/warewulfd/util.go b/internal/pkg/warewulfd/util.go index 919ee05e..234edbf3 100644 --- a/internal/pkg/warewulfd/util.go +++ b/internal/pkg/warewulfd/util.go @@ -72,9 +72,9 @@ func getOverlayFile(n node.Node, context string, stage_overlays []string, autobu return "", err } if len(stage_overlays) > 0 { - err = overlay.BuildSpecificOverlays([]node.Node{n}, allNodes, stage_overlays, 1) + err = overlay.BuildSpecificOverlays([]node.Node{n}, allNodes, registry.Resources, stage_overlays, 1) } else { - err = overlay.BuildAllOverlays([]node.Node{n}, allNodes, 1) + err = overlay.BuildAllOverlays([]node.Node{n}, allNodes, registry.Resources, 1) } if err != nil { wwlog.Error("Failed to build overlay: %s, %s, %s\n%s", diff --git a/overlays/fstab/internal/nodes.conf b/overlays/fstab/internal/nodes.conf index 04f8a5ce..e6dbb33d 100644 --- a/overlays/fstab/internal/nodes.conf +++ b/overlays/fstab/internal/nodes.conf @@ -1,6 +1,6 @@ nodes: node1: - resource_list: + resources: - NFSHOME disks: /dev/vda: @@ -19,7 +19,7 @@ nodes: /dev/disk/by-partlabel/swap: format: swap path: swap -resource: +resources: NFSHOME: mountpoint: /home moptions: defaults diff --git a/overlays/fstab/rootfs/etc/fstab.ww b/overlays/fstab/rootfs/etc/fstab.ww index 5b969cc0..93462977 100644 --- a/overlays/fstab/rootfs/etc/fstab.ww +++ b/overlays/fstab/rootfs/etc/fstab.ww @@ -12,11 +12,11 @@ proc /proc proc defaults 0 0 {{- if $fs.MountOptions }} noauto{{range $index,$opt := $fs.MountOptions }},{{ $opt }}{{ end }} 0 0 {{- else }} noauto,defaults 0 0 {{- end }}{{ end }}{{ end }} -{{- $Resource := .Resource }}{{ $server := .Ipaddr}}{{/* export the needed values */}} -{{- range $i,$ResName := .ResourceList }} -{{- if eq (substr 0 3 $ResName) "NFS" }}{{ $nfs := (index $Resource $ResName)}} +{{- $server := .Ipaddr}}{{/* export the needed values */}} +{{- range $i,$ResName := .Node.Resources }} +{{- if eq (substr 0 3 $ResName) "NFS" }}{{ $nfs := (index $.Resources $ResName)}} # Resource: {{ $ResName }} {{- if not (eq $nfs.server "controller") }}{{ $server = $nfs.server }}{{ end }} {{ $server }}:{{ $nfs.epath}} {{ $nfs.mountpoint }} nfs {{ $nfs.moptions }} 0 0 {{- end }} -{{- end }} \ No newline at end of file +{{- end }} diff --git a/overlays/host/internal/nodes.conf b/overlays/host/internal/nodes.conf index 135a7a49..3734cbdc 100644 --- a/overlays/host/internal/nodes.conf +++ b/overlays/host/internal/nodes.conf @@ -15,10 +15,10 @@ nodes: device: wwnet0 hwaddr: e6:92:39:49:7b:04 ipaddr: 192.168.3.23 -resource: +resources: NFSHOME: mountpoint: /home moptions: defaults eoptions: rw,sync epath: /home - server: controller \ No newline at end of file + server: controller diff --git a/overlays/host/rootfs/etc/exports.ww b/overlays/host/rootfs/etc/exports.ww index 61356b1c..749f0248 100644 --- a/overlays/host/rootfs/etc/exports.ww +++ b/overlays/host/rootfs/etc/exports.ww @@ -1,11 +1,10 @@ {{ IncludeBlock "/etc/exports" "# Do not edit after this line" }} # This block is autogenerated by warewulf -{{- $Resource := .Resource }} {{- $network := .Network }} {{- $netmask := .Netmask }} -{{- range $ResName,$Res := .Resource }} +{{- range $ResName,$Res := .Resources }} {{- if eq (substr 0 3 $ResName) "NFS" }}{{ if eq $Res.server "controller" }} # Resource: {{ $ResName }} {{ $Res.epath}} {{ $network }}/{{ $netmask }}({{ $Res.eoptions }}) {{- end }}{{ end }} -{{- end }} \ No newline at end of file +{{- end }}