Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions pkg/cloudprovider/provider/vsphere/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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)
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down
10 changes: 7 additions & 3 deletions pkg/cloudprovider/provider/vsphere/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -296,21 +296,24 @@ 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
}

virtualMachine, err := createClonedVM(ctx,
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)
Expand Down Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/provisioning/all_e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down