Skip to content

Commit 1ce9328

Browse files
Orzeliussmira
authored andcommitted
fix: disks flag parsing and handling in create qemu command
The disks flag Set method was appending new disk requests to the existing ones, which caused duplicate disk entries when custom values for the disks flag were set. Signed-off-by: Orzelius <33936483+Orzelius@users.noreply.github.com> (cherry picked from commit ce53ffa)
1 parent 1f989df commit 1ce9328

File tree

3 files changed

+76
-5
lines changed

3 files changed

+76
-5
lines changed

cmd/talosctl/cmd/mgmt/cluster/create/clusterops/configmaker/internal/makers/qemu_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ package makers_test
77
import (
88
"testing"
99

10+
"github.com/stretchr/testify/assert"
1011
"github.com/stretchr/testify/require"
1112

1213
"github.com/siderolabs/talos/cmd/talosctl/cmd/mgmt/cluster/create/clusterops"
1314
"github.com/siderolabs/talos/cmd/talosctl/cmd/mgmt/cluster/create/clusterops/configmaker/internal/makers"
15+
"github.com/siderolabs/talos/cmd/talosctl/cmd/mgmt/cluster/create/flags"
1416
"github.com/siderolabs/talos/pkg/machinery/config/generate"
17+
"github.com/siderolabs/talos/pkg/provision"
1518
)
1619

1720
func TestQemuMaker_MachineConfig(t *testing.T) {
@@ -29,3 +32,62 @@ func TestQemuMaker_MachineConfig(t *testing.T) {
2932

3033
assertConfigDefaultness(t, cOps, *m.Maker, desiredExtraGenOps...)
3134
}
35+
36+
func TestQemuMaker_Disks(t *testing.T) {
37+
cOps := clusterops.GetCommon()
38+
qOps := clusterops.GetQemu()
39+
40+
disks := flags.Disks{}
41+
err := disks.Set("virtio:10GiB,nvme:20GiB,virtio:30GiB")
42+
require.NoError(t, err)
43+
44+
qOps.Disks = disks
45+
cOps.Controlplanes = 1
46+
cOps.Workers = 1
47+
48+
m, err := makers.NewQemu(makers.MakerOptions[clusterops.Qemu]{
49+
ExtraOps: qOps,
50+
CommonOps: cOps,
51+
Provisioner: testProvisioner{}, // use test provisioner to simplify the test case.
52+
})
53+
require.NoError(t, err)
54+
55+
req, err := m.GetClusterConfigs()
56+
require.NoError(t, err)
57+
58+
controlplaneDisks := req.ClusterRequest.Nodes[0].Disks
59+
workerDisks := req.ClusterRequest.Nodes[1].Disks
60+
61+
assert.Equal(t, 1, len(controlplaneDisks))
62+
assert.Equal(t, 3, len(workerDisks))
63+
64+
assert.Equal(t, []*provision.Disk{
65+
{
66+
Size: disks.Requests()[0].Size.Bytes(),
67+
SkipPreallocate: !qOps.PreallocateDisks,
68+
Driver: "virtio",
69+
BlockSize: qOps.DiskBlockSize,
70+
},
71+
}, controlplaneDisks)
72+
73+
assert.Equal(t, []*provision.Disk{
74+
{
75+
Size: disks.Requests()[0].Size.Bytes(),
76+
SkipPreallocate: !qOps.PreallocateDisks,
77+
Driver: "virtio",
78+
BlockSize: qOps.DiskBlockSize,
79+
},
80+
{
81+
Size: disks.Requests()[1].Size.Bytes(),
82+
SkipPreallocate: !qOps.PreallocateDisks,
83+
Driver: "nvme",
84+
BlockSize: qOps.DiskBlockSize,
85+
},
86+
{
87+
Size: disks.Requests()[2].Size.Bytes(),
88+
SkipPreallocate: !qOps.PreallocateDisks,
89+
Driver: "virtio",
90+
BlockSize: qOps.DiskBlockSize,
91+
},
92+
}, workerDisks)
93+
}

cmd/talosctl/cmd/mgmt/cluster/create/flags/disks.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func (f *Disks) Set(value string) error {
8383
return err
8484
}
8585

86-
f.requests = append(f.requests, reqs...)
86+
f.requests = reqs
8787

8888
return nil
8989
}

cmd/talosctl/cmd/mgmt/cluster/create/flags/disks_test.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ func TestDisksFlag_AccumulatesAndRequests(t *testing.T) {
2323
fs.Var(&d, "disks", "")
2424

2525
args := []string{
26-
"--disks", "virtio:1GiB",
27-
"--disks", "nvme:10GiB,sata:512MiB",
26+
"--disks", "virtio:1GiB,nvme:10GiB,sata:512MiB",
2827
}
2928

3029
err := fs.Parse(args)
@@ -55,11 +54,21 @@ func TestDisksFlag_AccumulatesAndRequests(t *testing.T) {
5554
assert.Equal(t, "virtio:1GiB,nvme:10GiB,sata:512MiB", d.String())
5655
}
5756

58-
func TestDisksFlag_SetInvalid(t *testing.T) {
57+
func TestDisksFlag_Set(t *testing.T) {
5958
t.Parallel()
6059

6160
var d flags.Disks
6261

63-
err := d.Set("invalid-no-colon")
62+
err := d.Set("virtio:6gb")
63+
assert.NoError(t, err)
64+
65+
assert.Equal(t, "virtio:6gb", d.String())
66+
67+
err = d.Set("nvme:12mb,sata:2gb")
68+
assert.NoError(t, err)
69+
70+
assert.Equal(t, "nvme:12mb,sata:2gb", d.String())
71+
72+
err = d.Set("invalid-no-colon")
6473
assert.Error(t, err)
6574
}

0 commit comments

Comments
 (0)