From b246fd6dfe3c4cf6f666272ede0ebc29fabe2b61 Mon Sep 17 00:00:00 2001 From: Moath Qasim Date: Thu, 30 Apr 2020 14:30:32 +0200 Subject: [PATCH 1/2] support flatcar in vSphere cloud provider Signed-off-by: Moath Qasim Signed-off-by: Moath Qasim --- pkg/cloudprovider/provider/vsphere/helper.go | 22 ++++++++++++++++--- .../provider/vsphere/provider.go | 10 ++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/pkg/cloudprovider/provider/vsphere/helper.go b/pkg/cloudprovider/provider/vsphere/helper.go index 94b7c38ff..2eaea6c1c 100644 --- a/pkg/cloudprovider/provider/vsphere/helper.go +++ b/pkg/cloudprovider/provider/vsphere/helper.go @@ -28,6 +28,8 @@ import ( "os/exec" "text/template" + providerconfigtypes "github.com/kubermatic/machine-controller/pkg/providerconfig/types" + "github.com/vmware/govmomi/object" "github.com/vmware/govmomi/vim25/mo" "github.com/vmware/govmomi/vim25/soap" @@ -42,7 +44,7 @@ const ( local-hostname: {{ .Hostname }}` ) -func createClonedVM(ctx context.Context, vmName string, config *Config, session *Session, containerLinuxUserdata string) (*object.VirtualMachine, error) { +func createClonedVM(ctx context.Context, vmName string, config *Config, session *Session, os providerconfigtypes.OperatingSystem, containerLinuxUserdata string) (*object.VirtualMachine, error) { tpl, err := session.Finder.VirtualMachine(ctx, config.TemplateVMName) if err != nil { return nil, fmt.Errorf("failed to get template vm: %v", err) @@ -130,9 +132,23 @@ func createClonedVM(ctx context.Context, vmName string, config *Config, session return nil, fmt.Errorf("no vm config found in template '%s'. Make sure you import the correct OVA with the appropriate coreos settings", config.TemplateVMName) } + var ( + guestInfoUserData string + guestInfoUserDataEncoding string + ) + + switch os { + case providerconfigtypes.OperatingSystemCoreos: + guestInfoUserData = "guestinfo.coreos.config.data" + guestInfoUserDataEncoding = "guestinfo.coreos.config.data.encoding" + case providerconfigtypes.OperatingSystemFlatcar: + guestInfoUserData = "guestinfo.ignition.config.data" + guestInfoUserDataEncoding = "guestinfo.ignition.config.data.encoding" + } + for _, item := range mvm.Config.VAppConfig.GetVmConfigInfo().Property { switch item.Id { - case "guestinfo.coreos.config.data": + case guestInfoUserData: propertySpecs = append(propertySpecs, types.VAppPropertySpec{ ArrayUpdateSpec: types.ArrayUpdateSpec{ Operation: types.ArrayUpdateOperationEdit, @@ -143,7 +159,7 @@ func createClonedVM(ctx context.Context, vmName string, config *Config, session Value: userdataBase64, }, }) - case "guestinfo.coreos.config.data.encoding": + case guestInfoUserDataEncoding: propertySpecs = append(propertySpecs, types.VAppPropertySpec{ ArrayUpdateSpec: types.ArrayUpdateSpec{ Operation: types.ArrayUpdateOperationEdit, diff --git a/pkg/cloudprovider/provider/vsphere/provider.go b/pkg/cloudprovider/provider/vsphere/provider.go index da3922c67..b631057b6 100644 --- a/pkg/cloudprovider/provider/vsphere/provider.go +++ b/pkg/cloudprovider/provider/vsphere/provider.go @@ -296,7 +296,8 @@ func (p *provider) create(machine *v1alpha1.Machine, userdata string) (instance. defer session.Logout() var containerLinuxUserdata string - if pc.OperatingSystem == providerconfigtypes.OperatingSystemCoreos { + if pc.OperatingSystem == providerconfigtypes.OperatingSystemCoreos || + pc.OperatingSystem == providerconfigtypes.OperatingSystemFlatcar { containerLinuxUserdata = userdata } @@ -304,13 +305,15 @@ func (p *provider) create(machine *v1alpha1.Machine, userdata string) (instance. machine.Spec.Name, config, session, + pc.OperatingSystem, containerLinuxUserdata, ) if err != nil { return nil, machineInvalidConfigurationTerminalError(fmt.Errorf("failed to create cloned vm: '%v'", err)) } - if pc.OperatingSystem != providerconfigtypes.OperatingSystemCoreos { + if pc.OperatingSystem != providerconfigtypes.OperatingSystemCoreos && + pc.OperatingSystem != providerconfigtypes.OperatingSystemFlatcar { localUserdataIsoFilePath, err := generateLocalUserdataISO(userdata, machine.Spec.Name) if err != nil { return nil, fmt.Errorf("failed to generate local userdadata iso: %v", err) @@ -426,7 +429,8 @@ func (p *provider) Cleanup(machine *v1alpha1.Machine, data *cloudprovidertypes.P return false, fmt.Errorf("failed to destroy vm %s: %v", virtualMachine.Name(), err) } - if pc.OperatingSystem != providerconfigtypes.OperatingSystemCoreos { + if pc.OperatingSystem != providerconfigtypes.OperatingSystemCoreos && + pc.OperatingSystem != providerconfigtypes.OperatingSystemFlatcar { filemanager := datastore.NewFileManager(session.Datacenter, false) if err := filemanager.Delete(ctx, virtualMachine.Name()); err != nil { From 7dce61b94fc165a5c57b8ce0afbabdcd236229d5 Mon Sep 17 00:00:00 2001 From: Moath Qasim Date: Thu, 30 Apr 2020 14:31:34 +0200 Subject: [PATCH 2/2] enable flatcar e2e tests for vSphere cloud provider Signed-off-by: Moath Qasim Signed-off-by: Moath Qasim --- test/e2e/provisioning/all_e2e_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/provisioning/all_e2e_test.go b/test/e2e/provisioning/all_e2e_test.go index 640faa349..41193acb3 100644 --- a/test/e2e/provisioning/all_e2e_test.go +++ b/test/e2e/provisioning/all_e2e_test.go @@ -395,7 +395,7 @@ func getVSphereTestParams(t *testing.T) []string { func TestVsphereProvisioningE2E(t *testing.T) { t.Parallel() - selector := Not(OsSelector("sles", "rhel", "flatcar")) + selector := Not(OsSelector("sles", "rhel")) params := getVSphereTestParams(t) runScenarios(t, selector, params, VSPhereManifest, fmt.Sprintf("vs-%s", *testRunIdentifier))