Node upgrade tests
Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
502
internal/pkg/upgrade/node_test.go
Normal file
502
internal/pkg/upgrade/node_test.go
Normal file
@@ -0,0 +1,502 @@
|
||||
package upgrade
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
var nodesYamlUpgradeTests = []struct {
|
||||
name string
|
||||
legacyYaml string
|
||||
upgradedYaml string
|
||||
}{
|
||||
{
|
||||
name: "captured vers42 example",
|
||||
legacyYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
comment: This profile is automatically included for each node
|
||||
runtime overlay: "generic"
|
||||
discoverable: false
|
||||
leap:
|
||||
comment: openSUSE leap
|
||||
kernel version: 5.14.21
|
||||
ipmi netmask: "255.255.255.0"
|
||||
keys:
|
||||
foo: baar
|
||||
network devices:
|
||||
lan1:
|
||||
gateway: 1.1.1.1
|
||||
nodes:
|
||||
node01:
|
||||
system overlay: "nodeoverlay"
|
||||
discoverable: true
|
||||
network devices:
|
||||
eth0:
|
||||
ipaddr: 1.2.3.4
|
||||
default: true
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
comment: This profile is automatically included for each node
|
||||
runtime overlay:
|
||||
- generic
|
||||
leap:
|
||||
comment: openSUSE leap
|
||||
kernel:
|
||||
version: 5.14.21
|
||||
ipmi:
|
||||
netmask: 255.255.255.0
|
||||
network devices:
|
||||
lan1:
|
||||
gateway: 1.1.1.1
|
||||
tags:
|
||||
foo: baar
|
||||
nodes:
|
||||
node01:
|
||||
discoverable: "true"
|
||||
system overlay:
|
||||
- nodeoverlay
|
||||
network devices:
|
||||
eth0:
|
||||
ipaddr: 1.2.3.4
|
||||
primary network: eth0
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "captured vers43 example",
|
||||
legacyYaml: `
|
||||
WW_INTERNAL: 45
|
||||
nodeprofiles:
|
||||
default:
|
||||
comment: This profile is automatically included for each node
|
||||
runtime overlay:
|
||||
- generic
|
||||
discoverable: "false"
|
||||
leap:
|
||||
comment: openSUSE leap
|
||||
kernel:
|
||||
override: 5.14.21
|
||||
ipmi:
|
||||
netmask: 255.255.255.0
|
||||
discoverable: "false"
|
||||
network devices:
|
||||
lan1:
|
||||
device: lan1
|
||||
gateway: 1.1.1.1
|
||||
default: "false"
|
||||
keys:
|
||||
foo: baar
|
||||
nodes:
|
||||
node01:
|
||||
system overlay:
|
||||
- nodeoverlay
|
||||
discoverable: "true"
|
||||
network devices:
|
||||
eth0:
|
||||
device: eth0
|
||||
ipaddr: 1.2.3.4
|
||||
default: "true"
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
comment: This profile is automatically included for each node
|
||||
runtime overlay:
|
||||
- generic
|
||||
leap:
|
||||
comment: openSUSE leap
|
||||
kernel:
|
||||
override: 5.14.21
|
||||
ipmi:
|
||||
netmask: 255.255.255.0
|
||||
network devices:
|
||||
lan1:
|
||||
device: lan1
|
||||
gateway: 1.1.1.1
|
||||
tags:
|
||||
foo: baar
|
||||
nodes:
|
||||
node01:
|
||||
discoverable: "true"
|
||||
system overlay:
|
||||
- nodeoverlay
|
||||
network devices:
|
||||
eth0:
|
||||
device: eth0
|
||||
ipaddr: 1.2.3.4
|
||||
primary network: eth0
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "remove WW_INTERNAL",
|
||||
legacyYaml: `WW_INTERNAL: 45`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles: {}
|
||||
nodes: {}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "disabled is obsolete",
|
||||
legacyYaml: `
|
||||
nodes:
|
||||
n1:
|
||||
disabled: true
|
||||
nodeprofiles:
|
||||
default:
|
||||
disabled: true
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
default: {}
|
||||
nodes:
|
||||
n1: {}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "inline IPMI settings",
|
||||
legacyYaml: `
|
||||
nodes:
|
||||
n1:
|
||||
ipmi escapechar: "~"
|
||||
ipmi gateway: 192.168.0.1
|
||||
ipmi interface: lanplus
|
||||
ipmi ipaddr: 192.168.0.100
|
||||
ipmi netmask: 255.255.255.0
|
||||
ipmi password: password
|
||||
ipmi port: 623
|
||||
ipmi username: admin
|
||||
ipmi write: true
|
||||
nodeprofiles:
|
||||
default:
|
||||
ipmi escapechar: "~"
|
||||
ipmi gateway: 192.168.0.1
|
||||
ipmi interface: lanplus
|
||||
ipmi ipaddr: 192.168.0.100
|
||||
ipmi netmask: 255.255.255.0
|
||||
ipmi password: password
|
||||
ipmi port: 623
|
||||
ipmi username: admin
|
||||
ipmi write: true
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
ipmi:
|
||||
username: admin
|
||||
password: password
|
||||
ipaddr: 192.168.0.100
|
||||
gateway: 192.168.0.1
|
||||
netmask: 255.255.255.0
|
||||
port: "623"
|
||||
interface: lanplus
|
||||
escapechar: "~"
|
||||
write: "true"
|
||||
nodes:
|
||||
n1:
|
||||
ipmi:
|
||||
username: admin
|
||||
password: password
|
||||
ipaddr: 192.168.0.100
|
||||
gateway: 192.168.0.1
|
||||
netmask: 255.255.255.0
|
||||
port: "623"
|
||||
interface: lanplus
|
||||
escapechar: "~"
|
||||
write: "true"
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "inline Kernel settings",
|
||||
legacyYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
kernel args: quiet
|
||||
kernel override: rockylinux-9
|
||||
kernel version: 2.6
|
||||
nodes:
|
||||
n1:
|
||||
kernel args: quiet
|
||||
kernel override: rockylinux-9
|
||||
kernel version: 2.6
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
kernel:
|
||||
version: "2.6"
|
||||
override: rockylinux-9
|
||||
args: quiet
|
||||
nodes:
|
||||
n1:
|
||||
kernel:
|
||||
version: "2.6"
|
||||
override: rockylinux-9
|
||||
args: quiet
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "keys and tags",
|
||||
legacyYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
keys:
|
||||
key1: val1
|
||||
key2: val2
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
key4: valD
|
||||
tagsdel:
|
||||
- key4
|
||||
network devices:
|
||||
default:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
key4: valD
|
||||
tagsdel:
|
||||
- key4
|
||||
ipmi:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
key4: valD
|
||||
tagsdel:
|
||||
- key4
|
||||
nodes:
|
||||
n1:
|
||||
keys:
|
||||
key1: val1
|
||||
key2: val2
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
key4: valD
|
||||
tagsdel:
|
||||
- key4
|
||||
network devices:
|
||||
default:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
key4: valD
|
||||
tagsdel:
|
||||
- key4
|
||||
ipmi:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
key4: valD
|
||||
tagsdel:
|
||||
- key4
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
default:
|
||||
ipmi:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
network devices:
|
||||
default:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
tags:
|
||||
key1: val1
|
||||
key2: valB
|
||||
key3: valC
|
||||
nodes:
|
||||
n1:
|
||||
ipmi:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
network devices:
|
||||
default:
|
||||
tags:
|
||||
key2: valB
|
||||
key3: valC
|
||||
tags:
|
||||
key1: val1
|
||||
key2: valB
|
||||
key3: valC
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "primary network",
|
||||
legacyYaml: `
|
||||
nodes:
|
||||
n1:
|
||||
network devices:
|
||||
eth0: {}
|
||||
eth1:
|
||||
default: true
|
||||
n2:
|
||||
network devices:
|
||||
eth0:
|
||||
primary: true
|
||||
eth1: {}
|
||||
n3:
|
||||
network devices:
|
||||
eth0:
|
||||
primary: true
|
||||
eth1: {}
|
||||
primary network: eth1
|
||||
nodeprofiles:
|
||||
p1:
|
||||
network devices:
|
||||
eth0: {}
|
||||
eth1:
|
||||
default: true
|
||||
p2:
|
||||
network devices:
|
||||
eth0:
|
||||
primary: true
|
||||
eth1: {}
|
||||
p3:
|
||||
network devices:
|
||||
eth0:
|
||||
primary: true
|
||||
eth1: {}
|
||||
primary network: eth1
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
p1:
|
||||
primary network: eth1
|
||||
p2:
|
||||
primary network: eth0
|
||||
p3:
|
||||
primary network: eth1
|
||||
nodes:
|
||||
n1:
|
||||
primary network: eth1
|
||||
n2:
|
||||
primary network: eth0
|
||||
n3:
|
||||
primary network: eth1
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "overlays",
|
||||
legacyYaml: `
|
||||
nodes:
|
||||
n1:
|
||||
runtime overlay:
|
||||
- r1
|
||||
- r2
|
||||
system overlay:
|
||||
- s1
|
||||
- s2
|
||||
n2:
|
||||
runtime overlay: r1,r2
|
||||
system overlay: s1,s2
|
||||
nodeprofiles:
|
||||
p1:
|
||||
runtime overlay:
|
||||
- r1
|
||||
- r2
|
||||
system overlay:
|
||||
- s1
|
||||
- s2
|
||||
p2:
|
||||
runtime overlay: r1,r2
|
||||
system overlay: s1,s2
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles:
|
||||
p1:
|
||||
runtime overlay:
|
||||
- r1
|
||||
- r2
|
||||
system overlay:
|
||||
- s1
|
||||
- s2
|
||||
p2:
|
||||
runtime overlay:
|
||||
- r1
|
||||
- r2
|
||||
system overlay:
|
||||
- s1
|
||||
- s2
|
||||
nodes:
|
||||
n1:
|
||||
runtime overlay:
|
||||
- r1
|
||||
- r2
|
||||
system overlay:
|
||||
- s1
|
||||
- s2
|
||||
n2:
|
||||
runtime overlay:
|
||||
- r1
|
||||
- r2
|
||||
system overlay:
|
||||
- s1
|
||||
- s2
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "disk example",
|
||||
legacyYaml: `
|
||||
nodes:
|
||||
n1:
|
||||
disks:
|
||||
/dev/vda:
|
||||
wipe_table: true
|
||||
partitions:
|
||||
scratch:
|
||||
number: "1"
|
||||
should_exist: true
|
||||
swap:
|
||||
number: "2"
|
||||
size_mib: "1024"
|
||||
filesystems:
|
||||
/dev/disk/by-partlabel/scratch:
|
||||
format: btrfs
|
||||
path: /scratch
|
||||
/dev/disk/by-partlabel/swap:
|
||||
format: swap
|
||||
path: swap
|
||||
`,
|
||||
upgradedYaml: `
|
||||
nodeprofiles: {}
|
||||
nodes:
|
||||
n1:
|
||||
disks:
|
||||
/dev/vda:
|
||||
wipe_table: true
|
||||
partitions:
|
||||
scratch:
|
||||
number: "1"
|
||||
should_exist: true
|
||||
swap:
|
||||
number: "2"
|
||||
size_mib: "1024"
|
||||
filesystems:
|
||||
/dev/disk/by-partlabel/scratch:
|
||||
format: btrfs
|
||||
path: /scratch
|
||||
/dev/disk/by-partlabel/swap:
|
||||
format: swap
|
||||
path: swap
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
||||
func Test_UpgradeNodesYaml(t *testing.T) {
|
||||
for _, tt := range nodesYamlUpgradeTests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
legacy, err := Parse([]byte(tt.legacyYaml))
|
||||
assert.NoError(t, err)
|
||||
upgraded := legacy.Upgrade()
|
||||
upgradedYaml, err := upgraded.Dump()
|
||||
assert.Equal(t, strings.TrimSpace(tt.upgradedYaml), strings.TrimSpace(string(upgradedYaml)))
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user