From 8531d91a1f20ecc587a1b76c13637ab3555718e9 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Wed, 12 Feb 2025 18:05:45 +0400 Subject: [PATCH] fix: blockdevice transport detection Fixes #10292 This pulls in fixes from go-blockdevice library: * https://github.com/siderolabs/go-blockdevice/pull/127 * https://github.com/siderolabs/go-blockdevice/pull/128 Also allow `megaraid` emulation in `talosctl cluster create`. Signed-off-by: Andrey Smirnov --- cmd/talosctl/cmd/mgmt/cluster/create.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- pkg/machinery/go.mod | 2 +- pkg/machinery/go.sum | 4 ++-- pkg/provision/providers/qemu/launch.go | 16 ++++++++++++++-- pkg/provision/request.go | 2 +- website/content/v1.10/reference/cli.md | 2 +- 8 files changed, 23 insertions(+), 11 deletions(-) diff --git a/cmd/talosctl/cmd/mgmt/cluster/create.go b/cmd/talosctl/cmd/mgmt/cluster/create.go index 23b997deb56..cf715a7b4bd 100644 --- a/cmd/talosctl/cmd/mgmt/cluster/create.go +++ b/cmd/talosctl/cmd/mgmt/cluster/create.go @@ -1295,7 +1295,7 @@ func init() { createCmd.Flags().BoolVar(&clusterDiskPreallocate, clusterDiskPreallocateFlag, true, "whether disk space should be preallocated") createCmd.Flags().StringSliceVar(&clusterDisks, clusterDisksFlag, []string{}, "list of disks to create for each VM in format: :::") createCmd.Flags().IntVar(&extraDisks, "extra-disks", 0, "number of extra disks to create for each worker VM") - createCmd.Flags().StringSliceVar(&extraDisksDrivers, "extra-disks-drivers", nil, "driver for each extra disk (virtio, ide, ahci, scsi, nvme)") + createCmd.Flags().StringSliceVar(&extraDisksDrivers, "extra-disks-drivers", nil, "driver for each extra disk (virtio, ide, ahci, scsi, nvme, megaraid)") createCmd.Flags().IntVar(&extraDiskSize, "extra-disks-size", 5*1024, "default limit on disk size in MB (each VM)") createCmd.Flags().StringVar(&targetArch, "arch", stdruntime.GOARCH, "cluster architecture") createCmd.Flags().BoolVar(&clusterWait, "wait", true, "wait for the cluster to be ready before returning") diff --git a/go.mod b/go.mod index 94d77b92d79..2319d09b97e 100644 --- a/go.mod +++ b/go.mod @@ -145,7 +145,7 @@ require ( github.com/siderolabs/gen v0.8.0 github.com/siderolabs/go-api-signature v0.3.6 github.com/siderolabs/go-blockdevice v0.4.8 - github.com/siderolabs/go-blockdevice/v2 v2.0.13 + github.com/siderolabs/go-blockdevice/v2 v2.0.14 github.com/siderolabs/go-circular v0.2.1 github.com/siderolabs/go-cmd v0.1.3 github.com/siderolabs/go-copy v0.1.0 diff --git a/go.sum b/go.sum index ecc02e139c1..8685916b48a 100644 --- a/go.sum +++ b/go.sum @@ -647,8 +647,8 @@ github.com/siderolabs/go-api-signature v0.3.6 h1:wDIsXbpl7Oa/FXvxB6uz4VL9INA9fmr github.com/siderolabs/go-api-signature v0.3.6/go.mod h1:hoH13AfunHflxbXfh+NoploqV13ZTDfQ1mQJWNVSW9U= github.com/siderolabs/go-blockdevice v0.4.8 h1:KfdWvIx0Jft5YVuCsFIJFwjWEF1oqtzkgX9PeU9cX4c= github.com/siderolabs/go-blockdevice v0.4.8/go.mod h1:4PeOuk71pReJj1JQEXDE7kIIQJPVe8a+HZQa+qjxSEA= -github.com/siderolabs/go-blockdevice/v2 v2.0.13 h1:N94eK+EFwnD+2kdNT38910Qlu+5+Z0WDODKbX7NXvPs= -github.com/siderolabs/go-blockdevice/v2 v2.0.13/go.mod h1:74htzCV913UzaLZ4H+NBXkwWlYnBJIq5m/379ZEcu8w= +github.com/siderolabs/go-blockdevice/v2 v2.0.14 h1:9Nu4ceeKpCSUhSub6RbxU2eat5IwAOR11Vdb5mPVASo= +github.com/siderolabs/go-blockdevice/v2 v2.0.14/go.mod h1:74htzCV913UzaLZ4H+NBXkwWlYnBJIq5m/379ZEcu8w= github.com/siderolabs/go-circular v0.2.1 h1:a++iVCn9jyhICX3POQZZX8n72p2h5JGdGU6w1ulmpcA= github.com/siderolabs/go-circular v0.2.1/go.mod h1:ZDItzVyXK+B/XuqTBV5MtQtSv06VI+oCmWGRnNCATo8= github.com/siderolabs/go-cmd v0.1.3 h1:JrgZwqhJQeoec3QRON0LK+fv+0y7d0DyY7zsfkO6ciw= diff --git a/pkg/machinery/go.mod b/pkg/machinery/go.mod index ddefb4d8db6..397824c1813 100644 --- a/pkg/machinery/go.mod +++ b/pkg/machinery/go.mod @@ -32,7 +32,7 @@ require ( github.com/siderolabs/crypto v0.5.1 github.com/siderolabs/gen v0.8.0 github.com/siderolabs/go-api-signature v0.3.6 - github.com/siderolabs/go-blockdevice/v2 v2.0.13 + github.com/siderolabs/go-blockdevice/v2 v2.0.14 github.com/siderolabs/go-pointer v1.0.0 github.com/siderolabs/net v0.4.0 github.com/siderolabs/protoenc v0.2.2 diff --git a/pkg/machinery/go.sum b/pkg/machinery/go.sum index 7a89260186b..6c4325c8152 100644 --- a/pkg/machinery/go.sum +++ b/pkg/machinery/go.sum @@ -117,8 +117,8 @@ github.com/siderolabs/gen v0.8.0 h1:Pj93+hexkk5hQ7izjJ6YXnEWc8vlzOmDwFz13/VzS7o= github.com/siderolabs/gen v0.8.0/go.mod h1:an3a2Y53O7kUjnnK8Bfu3gewtvnIOu5RTU6HalFtXQQ= github.com/siderolabs/go-api-signature v0.3.6 h1:wDIsXbpl7Oa/FXvxB6uz4VL9INA9fmr3EbmjEZYFJrU= github.com/siderolabs/go-api-signature v0.3.6/go.mod h1:hoH13AfunHflxbXfh+NoploqV13ZTDfQ1mQJWNVSW9U= -github.com/siderolabs/go-blockdevice/v2 v2.0.13 h1:N94eK+EFwnD+2kdNT38910Qlu+5+Z0WDODKbX7NXvPs= -github.com/siderolabs/go-blockdevice/v2 v2.0.13/go.mod h1:74htzCV913UzaLZ4H+NBXkwWlYnBJIq5m/379ZEcu8w= +github.com/siderolabs/go-blockdevice/v2 v2.0.14 h1:9Nu4ceeKpCSUhSub6RbxU2eat5IwAOR11Vdb5mPVASo= +github.com/siderolabs/go-blockdevice/v2 v2.0.14/go.mod h1:74htzCV913UzaLZ4H+NBXkwWlYnBJIq5m/379ZEcu8w= github.com/siderolabs/go-pointer v1.0.0 h1:6TshPKep2doDQJAAtHUuHWXbca8ZfyRySjSBT/4GsMU= github.com/siderolabs/go-pointer v1.0.0/go.mod h1:HTRFUNYa3R+k0FFKNv11zgkaCLzEkWVzoYZ433P3kHc= github.com/siderolabs/go-retry v0.3.3 h1:zKV+S1vumtO72E6sYsLlmIdV/G/GcYSBLiEx/c9oCEg= diff --git a/pkg/provision/providers/qemu/launch.go b/pkg/provision/providers/qemu/launch.go index 97fa21d0e94..ae18891ec9e 100644 --- a/pkg/provision/providers/qemu/launch.go +++ b/pkg/provision/providers/qemu/launch.go @@ -337,8 +337,8 @@ func launchVM(config *LaunchConfig) error { } var ( - scsiAttached, ahciAttached, nvmeAttached bool - ahciBus int + scsiAttached, ahciAttached, nvmeAttached, megaraidAttached bool + ahciBus int ) for i, disk := range config.DiskPaths { @@ -388,6 +388,18 @@ func launchVM(config *LaunchConfig) error { "-drive", fmt.Sprintf("id=nvme%d,format=raw,if=none,file=%s,discard=unmap,aio=native,cache=none", i, disk), "-device", fmt.Sprintf("nvme-ns,drive=nvme%d,logical_block_size=%d,physical_block_size=%d", i, blockSize, blockSize), ) + case "megaraid": + if !megaraidAttached { + args = append(args, + "-device", "megasas-gen2,id=scsi1") + + megaraidAttached = true + } + + args = append(args, + "-drive", fmt.Sprintf("id=scsi%d,format=raw,if=none,file=%s,discard=unmap,aio=native,cache=none", i, disk), + "-device", fmt.Sprintf("scsi-hd,drive=scsi%d,bus=scsi1.0,channel=0,scsi-id=%d,lun=0,logical_block_size=%d,physical_block_size=%d", i, i, blockSize, blockSize), + ) default: return fmt.Errorf("unsupported disk driver %q", driver) } diff --git a/pkg/provision/request.go b/pkg/provision/request.go index c9b324e0e07..151ca5533c2 100644 --- a/pkg/provision/request.go +++ b/pkg/provision/request.go @@ -164,7 +164,7 @@ type Disk struct { Partitions []*v1alpha1.DiskPartition // Driver for the disk. // - // Supported types: "virtio", "ide", "ahci", "scsi", "nvme". + // Supported types: "virtio", "ide", "ahci", "scsi", "nvme", "megaraid". Driver string // Block size for the disk, defaults to 512 if not set. BlockSize uint diff --git a/website/content/v1.10/reference/cli.md b/website/content/v1.10/reference/cli.md index bdc17271a34..9e32a5740b3 100644 --- a/website/content/v1.10/reference/cli.md +++ b/website/content/v1.10/reference/cli.md @@ -171,7 +171,7 @@ talosctl cluster create [flags] -p, --exposed-ports string Comma-separated list of ports/protocols to expose on init node. Ex -p :/ (Docker provisioner only) --extra-boot-kernel-args string add extra kernel args to the initial boot from vmlinuz and initramfs (QEMU only) --extra-disks int number of extra disks to create for each worker VM - --extra-disks-drivers strings driver for each extra disk (virtio, ide, ahci, scsi, nvme) + --extra-disks-drivers strings driver for each extra disk (virtio, ide, ahci, scsi, nvme, megaraid) --extra-disks-size int default limit on disk size in MB (each VM) (default 5120) --extra-uefi-search-paths strings additional search paths for UEFI firmware (only applies when UEFI is enabled) -h, --help help for create