diff --git a/images/virtualization-artifact/pkg/common/provisioner/node_placement.go b/images/virtualization-artifact/pkg/common/provisioner/node_placement.go index 14ecd1e1b0..6fdb53191e 100644 --- a/images/virtualization-artifact/pkg/common/provisioner/node_placement.go +++ b/images/virtualization-artifact/pkg/common/provisioner/node_placement.go @@ -85,3 +85,22 @@ func KeepNodePlacementTolerations(nodePlacement *NodePlacement, obj client.Objec return nil } + +var systemNodeToleration = corev1.Toleration{ + Key: "dedicated.deckhouse.io", + Operator: corev1.TolerationOpEqual, + Value: "system", +} + +func AddTolerationForSystemNodes(placement *NodePlacement) { + if placement == nil { + return + } + // Do nothing if system-node toleration is present. + for _, toleration := range placement.Tolerations { + if toleration.Key == systemNodeToleration.Key && toleration.Value == systemNodeToleration.Value { + return + } + } + placement.Tolerations = append(placement.Tolerations, systemNodeToleration) +} diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/http.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/http.go index 2ab9add2a6..6fd6288e03 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/http.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/http.go @@ -121,7 +121,7 @@ func (ds HTTPDataSource) Sync(ctx context.Context, cvi *v1alpha2.ClusterVirtualI cvi.Status.Progress = ds.statService.GetProgress(cvi.GetUID(), pod, cvi.Status.Progress) envSettings := ds.getEnvSettings(cvi, supgen) - err = ds.importerService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/interfaces.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/interfaces.go index a760da0487..8a7592cb04 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/interfaces.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/interfaces.go @@ -37,7 +37,7 @@ import ( type Importer interface { Start(ctx context.Context, settings *importer.Settings, obj client.Object, sup supplements.Generator, caBundle *datasource.CABundle, opts ...service.Option) error - StartWithPodSetting(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings) error + StartWithPodSetting(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings, opts ...service.Option) error CleanUp(ctx context.Context, sup supplements.Generator) (bool, error) CleanUpSupplements(ctx context.Context, sup supplements.Generator) (bool, error) GetPod(ctx context.Context, sup supplements.Generator) (*corev1.Pod, error) diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/mock.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/mock.go index 3afe5454ac..6cd2eb625d 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/mock.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/mock.go @@ -50,7 +50,7 @@ var _ Importer = &ImporterMock{} // StartFunc: func(ctx context.Context, settings *importer.Settings, obj client.Object, sup supplements.Generator, caBundle *datasource.CABundle, opts ...service.Option) error { // panic("mock out the Start method") // }, -// StartWithPodSettingFunc: func(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings) error { +// StartWithPodSettingFunc: func(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings, opts ...service.Option) error { // panic("mock out the StartWithPodSetting method") // }, // UnprotectFunc: func(ctx context.Context, pod *corev1.Pod, sup supplements.Generator) error { @@ -85,7 +85,7 @@ type ImporterMock struct { StartFunc func(ctx context.Context, settings *importer.Settings, obj client.Object, sup supplements.Generator, caBundle *datasource.CABundle, opts ...service.Option) error // StartWithPodSettingFunc mocks the StartWithPodSetting method. - StartWithPodSettingFunc func(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings) error + StartWithPodSettingFunc func(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings, opts ...service.Option) error // UnprotectFunc mocks the Unprotect method. UnprotectFunc func(ctx context.Context, pod *corev1.Pod, sup supplements.Generator) error @@ -171,6 +171,8 @@ type ImporterMock struct { CaBundle *datasource.CABundle // PodSettings is the podSettings argument value. PodSettings *importer.PodSettings + // Opts is the opts argument value. + Opts []service.Option } // Unprotect holds details about calls to the Unprotect method. Unprotect []struct { @@ -482,7 +484,7 @@ func (mock *ImporterMock) StartCalls() []struct { } // StartWithPodSetting calls StartWithPodSettingFunc. -func (mock *ImporterMock) StartWithPodSetting(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings) error { +func (mock *ImporterMock) StartWithPodSetting(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings, opts ...service.Option) error { if mock.StartWithPodSettingFunc == nil { panic("ImporterMock.StartWithPodSettingFunc: method is nil but Importer.StartWithPodSetting was just called") } @@ -492,17 +494,19 @@ func (mock *ImporterMock) StartWithPodSetting(ctx context.Context, settings *imp Sup supplements.Generator CaBundle *datasource.CABundle PodSettings *importer.PodSettings + Opts []service.Option }{ Ctx: ctx, Settings: settings, Sup: sup, CaBundle: caBundle, PodSettings: podSettings, + Opts: opts, } mock.lockStartWithPodSetting.Lock() mock.calls.StartWithPodSetting = append(mock.calls.StartWithPodSetting, callInfo) mock.lockStartWithPodSetting.Unlock() - return mock.StartWithPodSettingFunc(ctx, settings, sup, caBundle, podSettings) + return mock.StartWithPodSettingFunc(ctx, settings, sup, caBundle, podSettings, opts...) } // StartWithPodSettingCalls gets all the calls that were made to StartWithPodSetting. @@ -515,6 +519,7 @@ func (mock *ImporterMock) StartWithPodSettingCalls() []struct { Sup supplements.Generator CaBundle *datasource.CABundle PodSettings *importer.PodSettings + Opts []service.Option } { var calls []struct { Ctx context.Context @@ -522,6 +527,7 @@ func (mock *ImporterMock) StartWithPodSettingCalls() []struct { Sup supplements.Generator CaBundle *datasource.CABundle PodSettings *importer.PodSettings + Opts []service.Option } mock.lockStartWithPodSetting.RLock() calls = mock.calls.StartWithPodSetting diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref.go index 512af20ee8..b9f0531ba2 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref.go @@ -189,7 +189,7 @@ func (ds ObjectRefDataSource) Sync(ctx context.Context, cvi *v1alpha2.ClusterVir return reconcile.Result{}, err } - err = ds.importerService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vd.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vd.go index 25ba137f87..98ed958994 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vd.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vd.go @@ -120,7 +120,7 @@ func (ds ObjectRefVirtualDisk) Sync(ctx context.Context, cvi *v1alpha2.ClusterVi envSettings := ds.getEnvSettings(cvi, supgen, pvc.Spec.VolumeMode) ownerRef := metav1.NewControllerRef(cvi, cvi.GroupVersionKind()) podSettings := ds.importerService.GetPodSettingsWithPVC(ownerRef, supgen, vdRef.Status.Target.PersistentVolumeClaim, vdRef.Namespace) - err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), podSettings) + err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), podSettings, service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vdsnapshot.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vdsnapshot.go index 9bef91ea9c..ec8aa285c0 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vdsnapshot.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vdsnapshot.go @@ -211,7 +211,7 @@ func (ds ObjectRefVirtualDiskSnapshot) Sync(ctx context.Context, cvi *v1alpha2.C ownerRef := metav1.NewControllerRef(cvi, cvi.GroupVersionKind()) podSettings := ds.importerService.GetPodSettingsWithPVC(ownerRef, supgen, pvc.Name, pvc.Namespace) - err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), podSettings) + err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), podSettings, service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vi_on_pvc.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vi_on_pvc.go index e98ba2880f..f53550cbab 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vi_on_pvc.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/object_ref_vi_on_pvc.go @@ -109,7 +109,7 @@ func (ds ObjectRefVirtualImageOnPvc) Sync(ctx context.Context, cvi *v1alpha2.Clu ownerRef := metav1.NewControllerRef(cvi, cvi.GroupVersionKind()) podSettings := ds.importerService.GetPodSettingsWithPVC(ownerRef, supgen, viRef.Status.Target.PersistentVolumeClaim, viRef.Namespace) - err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), podSettings) + err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), podSettings, service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/registry.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/registry.go index a09fd8e89e..06495f18e5 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/registry.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/registry.go @@ -126,7 +126,7 @@ func (ds RegistryDataSource) Sync(ctx context.Context, cvi *v1alpha2.ClusterVirt cvi.Status.Progress = "0%" envSettings := ds.getEnvSettings(cvi, supgen) - err = ds.importerService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/cvi/internal/source/upload.go b/images/virtualization-artifact/pkg/controller/cvi/internal/source/upload.go index aeee4cadf9..e94dc830bb 100644 --- a/images/virtualization-artifact/pkg/controller/cvi/internal/source/upload.go +++ b/images/virtualization-artifact/pkg/controller/cvi/internal/source/upload.go @@ -121,7 +121,7 @@ func (ds UploadDataSource) Sync(ctx context.Context, cvi *v1alpha2.ClusterVirtua log.Info("Cleaning up...") case pod == nil || svc == nil || ing == nil: envSettings := ds.getEnvSettings(cvi, supgen) - err = ds.uploaderService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource)) + err = ds.uploaderService.Start(ctx, envSettings, cvi, supgen, datasource.NewCABundleForCVMI(cvi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/service/generic_options.go b/images/virtualization-artifact/pkg/controller/service/generic_options.go index a37b93e4ad..fe7d4d2455 100644 --- a/images/virtualization-artifact/pkg/controller/service/generic_options.go +++ b/images/virtualization-artifact/pkg/controller/service/generic_options.go @@ -37,3 +37,12 @@ func WithNodePlacement(nodePlacement *provisioner.NodePlacement) Option { o.nodePlacement = nodePlacement } } + +func WithSystemNodeToleration() Option { + return func(o *genericOptions) { + if o.nodePlacement == nil { + o.nodePlacement = &provisioner.NodePlacement{} + } + provisioner.AddTolerationForSystemNodes(o.nodePlacement) + } +} diff --git a/images/virtualization-artifact/pkg/controller/service/importer_service.go b/images/virtualization-artifact/pkg/controller/service/importer_service.go index c6db2c8105..a8478837d3 100644 --- a/images/virtualization-artifact/pkg/controller/service/importer_service.go +++ b/images/virtualization-artifact/pkg/controller/service/importer_service.go @@ -97,9 +97,21 @@ func (s ImporterService) Start( return supplements.EnsureForPod(ctx, s.client, sup, pod, caBundle, s.dvcrSettings) } -func (s ImporterService) StartWithPodSetting(ctx context.Context, settings *importer.Settings, sup supplements.Generator, caBundle *datasource.CABundle, podSettings *importer.PodSettings) error { +func (s ImporterService) StartWithPodSetting( + ctx context.Context, + settings *importer.Settings, + sup supplements.Generator, + caBundle *datasource.CABundle, + podSettings *importer.PodSettings, + opts ...Option, +) error { + options := newGenericOptions(opts...) settings.Verbose = s.verbose + podSettings.Finalizer = s.protection.finalizer + if options.nodePlacement != nil { + podSettings.NodePlacement = options.nodePlacement + } pod, err := importer.NewImporter(podSettings, settings).GetOrCreatePod(ctx, s.client) if err != nil { diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/http.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/http.go index bcd0f87cea..fb5e3915a5 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/http.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/http.go @@ -108,7 +108,7 @@ func (ds HTTPDataSource) StoreToDVCR(ctx context.Context, vi *v1alpha2.VirtualIm envSettings := ds.getEnvSettings(vi, supgen) - err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. @@ -247,7 +247,7 @@ func (ds HTTPDataSource) StoreToPVC(ctx context.Context, vi *v1alpha2.VirtualIma vi.Status.Progress = ds.statService.GetProgress(vi.GetUID(), pod, vi.Status.Progress) envSettings := ds.getEnvSettings(vi, supgen) - err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/mock.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/mock.go index 39ec8ca273..ca40fa45e2 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/mock.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/mock.go @@ -48,7 +48,7 @@ var _ Importer = &ImporterMock{} // StartFunc: func(ctx context.Context, settings *importer.Settings, obj client.Object, sup supplements.Generator, caBundle *datasource.CABundle, opts ...service.Option) error { // panic("mock out the Start method") // }, -// StartWithPodSettingFunc: func(contextMoqParam context.Context, settings *importer.Settings, generator supplements.Generator, cABundle *datasource.CABundle, podSettings *importer.PodSettings) error { +// StartWithPodSettingFunc: func(contextMoqParam context.Context, settings *importer.Settings, generator supplements.Generator, cABundle *datasource.CABundle, podSettings *importer.PodSettings, options ...service.Option) error { // panic("mock out the StartWithPodSetting method") // }, // UnprotectFunc: func(ctx context.Context, pod *corev1.Pod, sup supplements.Generator) error { @@ -80,7 +80,7 @@ type ImporterMock struct { StartFunc func(ctx context.Context, settings *importer.Settings, obj client.Object, sup supplements.Generator, caBundle *datasource.CABundle, opts ...service.Option) error // StartWithPodSettingFunc mocks the StartWithPodSetting method. - StartWithPodSettingFunc func(contextMoqParam context.Context, settings *importer.Settings, generator supplements.Generator, cABundle *datasource.CABundle, podSettings *importer.PodSettings) error + StartWithPodSettingFunc func(contextMoqParam context.Context, settings *importer.Settings, generator supplements.Generator, cABundle *datasource.CABundle, podSettings *importer.PodSettings, options ...service.Option) error // UnprotectFunc mocks the Unprotect method. UnprotectFunc func(ctx context.Context, pod *corev1.Pod, sup supplements.Generator) error @@ -155,6 +155,8 @@ type ImporterMock struct { CABundle *datasource.CABundle // PodSettings is the podSettings argument value. PodSettings *importer.PodSettings + // Options is the options argument value. + Options []service.Option } // Unprotect holds details about calls to the Unprotect method. Unprotect []struct { @@ -421,7 +423,7 @@ func (mock *ImporterMock) StartCalls() []struct { } // StartWithPodSetting calls StartWithPodSettingFunc. -func (mock *ImporterMock) StartWithPodSetting(contextMoqParam context.Context, settings *importer.Settings, generator supplements.Generator, cABundle *datasource.CABundle, podSettings *importer.PodSettings) error { +func (mock *ImporterMock) StartWithPodSetting(contextMoqParam context.Context, settings *importer.Settings, generator supplements.Generator, cABundle *datasource.CABundle, podSettings *importer.PodSettings, options ...service.Option) error { if mock.StartWithPodSettingFunc == nil { panic("ImporterMock.StartWithPodSettingFunc: method is nil but Importer.StartWithPodSetting was just called") } @@ -431,17 +433,19 @@ func (mock *ImporterMock) StartWithPodSetting(contextMoqParam context.Context, s Generator supplements.Generator CABundle *datasource.CABundle PodSettings *importer.PodSettings + Options []service.Option }{ ContextMoqParam: contextMoqParam, Settings: settings, Generator: generator, CABundle: cABundle, PodSettings: podSettings, + Options: options, } mock.lockStartWithPodSetting.Lock() mock.calls.StartWithPodSetting = append(mock.calls.StartWithPodSetting, callInfo) mock.lockStartWithPodSetting.Unlock() - return mock.StartWithPodSettingFunc(contextMoqParam, settings, generator, cABundle, podSettings) + return mock.StartWithPodSettingFunc(contextMoqParam, settings, generator, cABundle, podSettings, options...) } // StartWithPodSettingCalls gets all the calls that were made to StartWithPodSetting. @@ -454,6 +458,7 @@ func (mock *ImporterMock) StartWithPodSettingCalls() []struct { Generator supplements.Generator CABundle *datasource.CABundle PodSettings *importer.PodSettings + Options []service.Option } { var calls []struct { ContextMoqParam context.Context @@ -461,6 +466,7 @@ func (mock *ImporterMock) StartWithPodSettingCalls() []struct { Generator supplements.Generator CABundle *datasource.CABundle PodSettings *importer.PodSettings + Options []service.Option } mock.lockStartWithPodSetting.RLock() calls = mock.calls.StartWithPodSetting diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref.go index 8781a19c3d..21456cea5f 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref.go @@ -381,7 +381,7 @@ func (ds ObjectRefDataSource) StoreToDVCR(ctx context.Context, vi *v1alpha2.Virt return reconcile.Result{}, err } - err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vd.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vd.go index b3ccea6390..a67a07087a 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vd.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vd.go @@ -122,7 +122,7 @@ func (ds ObjectRefVirtualDisk) StoreToDVCR(ctx context.Context, vi *v1alpha2.Vir envSettings := ds.getEnvSettings(vi, supgen, pvc.Spec.VolumeMode) ownerRef := metav1.NewControllerRef(vi, vi.GroupVersionKind()) podSettings := ds.importerService.GetPodSettingsWithPVC(ownerRef, supgen, vdRef.Status.Target.PersistentVolumeClaim, vdRef.Namespace) - err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), podSettings) + err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), podSettings, service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vdsnapshot_cr_test.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vdsnapshot_cr_test.go index da64fd1a44..65b2014975 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vdsnapshot_cr_test.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vdsnapshot_cr_test.go @@ -208,7 +208,7 @@ var _ = Describe("ObjectRef VirtualImageSnapshot ContainerRegistry", func() { importer.GetPodSettingsWithPVCFunc = func(_ *metav1.OwnerReference, _ supplements.Generator, _, _ string) *importer2.PodSettings { return nil } - importer.StartWithPodSettingFunc = func(_ context.Context, _ *importer2.Settings, _ supplements.Generator, _ *datasource.CABundle, _ *importer2.PodSettings) error { + importer.StartWithPodSettingFunc = func(_ context.Context, _ *importer2.Settings, _ supplements.Generator, _ *datasource.CABundle, _ *importer2.PodSettings, _ ...service.Option) error { podCreated = true return nil } @@ -334,6 +334,7 @@ var _ = Describe("ObjectRef VirtualImageSnapshot ContainerRegistry", func() { }) func ExpectCondition(vi *v1alpha2.VirtualImage, status metav1.ConditionStatus, reason vicondition.ReadyReason, msgExists bool) { + GinkgoHelper() ready, _ := conditions.GetCondition(vicondition.Ready, vi.Status.Conditions) Expect(ready.Status).To(Equal(status)) Expect(ready.Reason).To(Equal(reason.String())) diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vi_on_pvc.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vi_on_pvc.go index f3550dc9d9..2094f08568 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vi_on_pvc.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/object_ref_vi_on_pvc.go @@ -113,7 +113,7 @@ func (ds ObjectRefDataVirtualImageOnPVC) StoreToDVCR(ctx context.Context, vi, vi ownerRef := metav1.NewControllerRef(vi, vi.GroupVersionKind()) podSettings := ds.importerService.GetPodSettingsWithPVC(ownerRef, supgen, viRef.Status.Target.PersistentVolumeClaim, viRef.Namespace) - err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), podSettings) + err = ds.importerService.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), podSettings, service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/registry.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/registry.go index 4ca3906c3a..6669fc7f6b 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/registry.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/registry.go @@ -136,7 +136,7 @@ func (ds RegistryDataSource) StoreToPVC(ctx context.Context, vi *v1alpha2.Virtua vi.Status.Progress = "0%" envSettings := ds.getEnvSettings(vi, supgen) - err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. @@ -324,7 +324,7 @@ func (ds RegistryDataSource) StoreToDVCR(ctx context.Context, vi *v1alpha2.Virtu vi.Status.Progress = "0%" envSettings := ds.getEnvSettings(vi, supgen) - err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource)) + err = ds.importerService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_bounder_pod_step.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_bounder_pod_step.go index cd836499ff..5e6719959d 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_bounder_pod_step.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_bounder_pod_step.go @@ -84,7 +84,7 @@ func (s CreateBounderPodStep) Take(ctx context.Context, vi *v1alpha2.VirtualImag supgen := supplements.NewGenerator(annotations.VIShortName, vi.Name, vi.Namespace, vi.UID) - err = s.bounder.Start(ctx, ownerRef, supgen) + err = s.bounder.Start(ctx, ownerRef, supgen, service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_pod_step.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_pod_step.go index 2509ebbeb9..039cabe1e5 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_pod_step.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/step/create_pod_step.go @@ -43,7 +43,7 @@ import ( type CreatePodStepImporter interface { GetPodSettingsWithPVC(_ *metav1.OwnerReference, _ supplements.Generator, _, _ string) *importer.PodSettings - StartWithPodSetting(_ context.Context, _ *importer.Settings, _ supplements.Generator, _ *datasource.CABundle, _ *importer.PodSettings) error + StartWithPodSetting(_ context.Context, _ *importer.Settings, _ supplements.Generator, _ *datasource.CABundle, _ *importer.PodSettings, _ ...service.Option) error } type CreatePodStepStat interface { @@ -112,7 +112,7 @@ func (s CreatePodStep) Take(ctx context.Context, vi *v1alpha2.VirtualImage) (*re } envSettings := s.getEnvSettings(vi, supgen, pvc.Spec.VolumeMode) - err = s.importer.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), podSettings) + err = s.importer.StartWithPodSetting(ctx, envSettings, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), podSettings, service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/images/virtualization-artifact/pkg/controller/vi/internal/source/upload.go b/images/virtualization-artifact/pkg/controller/vi/internal/source/upload.go index 508790587f..9fec96370e 100644 --- a/images/virtualization-artifact/pkg/controller/vi/internal/source/upload.go +++ b/images/virtualization-artifact/pkg/controller/vi/internal/source/upload.go @@ -144,7 +144,7 @@ func (ds UploadDataSource) StoreToPVC(ctx context.Context, vi *v1alpha2.VirtualI vi.Status.Progress = "0%" envSettings := ds.getEnvSettings(vi, supgen) - err = ds.uploaderService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource)) + err = ds.uploaderService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. @@ -380,7 +380,7 @@ func (ds UploadDataSource) StoreToDVCR(ctx context.Context, vi *v1alpha2.Virtual log.Info("Cleaning up...") case pod == nil || svc == nil || ing == nil: envSettings := ds.getEnvSettings(vi, supgen) - err = ds.uploaderService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource)) + err = ds.uploaderService.Start(ctx, envSettings, vi, supgen, datasource.NewCABundleForVMI(vi.GetNamespace(), vi.Spec.DataSource), service.WithSystemNodeToleration()) switch { case err == nil: // OK. diff --git a/templates/cdi/config.yaml b/templates/cdi/config.yaml index eeb684cc36..661f372f7f 100644 --- a/templates/cdi/config.yaml +++ b/templates/cdi/config.yaml @@ -164,3 +164,7 @@ spec: workload: nodeSelector: kubernetes.io/os: linux + tolerations: + - key: dedicated.deckhouse.io + operator: Equal + value: system