-
Bug
-
Resolution: Done-Errata
-
Normal
-
2.6.6
-
None
-
Incidents & Support
-
False
-
-
True
-
-
-
Moderate
While its not an officially supported Guest OS, the v2v conversion works fine, but an OS mapping logic makes the controller crash, breaking the system.
The os mapping logic is fragile, splitting strings and not testing length before accessing specific positions. I believe this should be fixed regardless of the unsupported OS.
Crashing the controller due to a plan having a migration with an unsupported OS is not nice, it breaks the system and other migrations.
Please make this more robust:
goroutine 439 [running]:
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile.func1()
/remote-source/app/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:116 +0x1e5
panic({0x2ff8ec0?, 0xc001df5680?})
/usr/lib/golang/src/runtime/panic.go:914 +0x21f
github.com/konveyor/forklift-controller/pkg/controller/plan/adapter/ova.mapOs({0x0, 0x0})
/remote-source/app/pkg/controller/plan/adapter/ova/ovfparser.go:118 +0x21f
github.com/konveyor/forklift-controller/pkg/controller/plan/adapter/ova.GetOperationSystemFromConfig({0xc00367d500?, 0xc003739800?})
/remote-source/app/pkg/controller/plan/adapter/ova/ovfparser.go:113 +0x3d
github.com/konveyor/forklift-controller/pkg/controller/plan.(*KubeVirt).UpdateVmByConvertedConfig(0xc0002a6d38, 0xc002734b60, 0xc001b48480, 0xc000f2ac60)
/remote-source/app/pkg/controller/plan/kubevirt.go:943 +0x3d5
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Migration).execute(0xc0002a6d20, 0xc002734b60)
/remote-source/app/pkg/controller/plan/migration.go:1137 +0x1235e
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Migration).Run(0xc0002a6d20)
/remote-source/app/pkg/controller/plan/migration.go:195 +0x285
github.com/konveyor/forklift-controller/pkg/controller/plan.(*Reconciler).execute(0xc001423f20, 0xc004315c00)
/remote-source/app/pkg/controller/plan/controller.go:428 +0x98b
github.com/konveyor/forklift-controller/pkg/controller/plan.Reconciler.Reconcile({{{0x3697338, 0xc000666bc0}, {0x36b3100, 0xc000a20510}, {0x36a9e38, 0xc00055c120}}}, {0x36c2560?, 0xc0008d5ce8?}, {{{0xc003df2ec0, 0xd}, ...}})
/remote-source/app/pkg/controller/plan/controller.go:257 +0x9de
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile(0x36a8108?, {0x36a49f8?, 0xc001423ef0?}, {{{0xc003df2ec0?, 0xb?}, {0xc001715c20?, 0x0?}}})
/remote-source/app/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:119 +0xb7
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler(0xc0005e7180, {0x36a4a30, 0xc0006bc190}, {0x2e5f8a0?, 0xc0044f4880?})
/remote-source/app/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:316 +0x3cc
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem(0xc0005e7180, {0x36a4a30, 0xc0006bc190})
/remote-source/app/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:266 +0x1c9
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2()
/remote-source/app/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:227 +0x79
created by sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2 in goroutine 24
/remote-source/app/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:223 +0x565
Here is the array acess without checking length after a split:
116 func mapOs(xmlOs string) (os string) {
117 split := strings.Split(xmlOs, "/")
118 distro := split[3] <------------
119 switch distro {
120 case "rocky", "opensuse", "ubuntu", "fedora":
121 os = distro
122 default:
123 os = split[3] + strings.Split(split[4], ".")[0]
124 }
125 os, ok := osV2VMap[os]
126 if !ok {
127 log.Info(fmt.Sprintf("Received %s, mapped to: %s", xmlOs, os))
128 os = "otherGuest64"
129 }
130 return
131 }
It should probably map to otherGuest64 if we have no official support, but not crash.
- links to
-
RHEA-2024:139263
MTV 2.7.0 Images