diff --git a/go.mod b/go.mod index 56803414..ff13b90c 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/opencontainers/umoci v0.4.6 github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.1.1 + github.com/stretchr/testify v1.7.0 github.com/talos-systems/go-smbios v0.1.1 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 gopkg.in/yaml.v2 v2.4.0 diff --git a/internal/pkg/node/modifiers.go b/internal/pkg/node/modifiers.go index 3dab2ac4..50e55c31 100644 --- a/internal/pkg/node/modifiers.go +++ b/internal/pkg/node/modifiers.go @@ -61,14 +61,16 @@ func (config *nodeYaml) NodeUpdate(node NodeInfo) error { config.Nodes[nodeID].ClusterName = node.ClusterName.GetReal() config.Nodes[nodeID].Ipxe = node.Ipxe.GetReal() config.Nodes[nodeID].Init = node.Init.GetReal() - if node.Kernel.Override.GotReal() || node.Kernel.Args.GotReal() { + + if node.Kernel != nil && (node.Kernel.Override.GotReal() || node.Kernel.Args.GotReal()) { config.Nodes[nodeID].Kernel = new(KernelConf) config.Nodes[nodeID].Kernel.Override = node.Kernel.Override.GetReal() config.Nodes[nodeID].Kernel.Args = node.Kernel.Args.GetReal() } - if node.Ipmi.Ipaddr.GotReal() || node.Ipmi.Netmask.GotReal() || + + if node.Ipmi != nil && (node.Ipmi.Ipaddr.GotReal() || node.Ipmi.Netmask.GotReal() || node.Ipmi.Port.GotReal() || node.Ipmi.Gateway.GotReal() || node.Ipmi.UserName.GotReal() || - node.Ipmi.Password.GotReal() || node.Ipmi.Interface.GotReal() || node.Ipmi.Write.GotReal() { + node.Ipmi.Password.GotReal() || node.Ipmi.Interface.GotReal() || node.Ipmi.Write.GotReal()) { config.Nodes[nodeID].Ipmi = new(IpmiConf) config.Nodes[nodeID].Ipmi.Ipaddr = node.Ipmi.Ipaddr.GetReal() config.Nodes[nodeID].Ipmi.Netmask = node.Ipmi.Netmask.GetReal() diff --git a/internal/pkg/node/node_test.go b/internal/pkg/node/node_test.go new file mode 100644 index 00000000..3a3943e5 --- /dev/null +++ b/internal/pkg/node/node_test.go @@ -0,0 +1,40 @@ +package node + +import ( + "testing" + + "gopkg.in/yaml.v2" + "github.com/stretchr/testify/assert" +) + +func TestNodeUpdate(t *testing.T) { + var nodeConfig = ` +WW_INTERNAL: 43 +nodeprofiles: + default: + comment: This profile is automatically included for each node +nodes: + n0000: + discoverable: true + profiles: + - default + network devices: + default: + onboot: true + device: eth0 + hwaddr: 08:00:27:39:46:70 + ipaddr: 10.0.8.150 +` + var nodeYaml nodeYaml + err := yaml.Unmarshal([]byte(nodeConfig), &nodeYaml) + assert.NoError(t, err) + + err = nodeYaml.NodeUpdate( + NodeInfo{ + Id: Entry { + value: []string{"n0000"}, + }, + }, + ) + assert.NoError(t, err) +} \ No newline at end of file