govmomi icon indicating copy to clipboard operation
govmomi copied to clipboard

Can't set ftcpt.ftEncryptionMode or migrate.encryptionMode in extra config

Open jhg03a opened this issue 7 months ago • 4 comments

Describe the bug When attempting to set ftcpt.ftEncryptionMode or migrate.encryptionMode in VM extra config on vSphere 8.0U3, the modify task says it completed successfully, but those properties are missing if you query the extra config immediately afterwards. Other made up properties can be set fine.

To Reproduce Steps to reproduce the behavior:

  1. govc vm.change -vm=/'DC West'/vm/vm.test.net -e ftcpt.ftEncryptionMode="ftEncryptionRequired" -e migrate.encryptionMode="required" -e foo="bar"
  2. govc vm.info -e /'DC West'/vm/vm.test.net

Expected behavior I expect to either have those configs set ideally or an error thrown if it's not possible to set them

Affected version govc installed via brew on osx at latest available (0.38.0)

Screenshots/Debug Output

| => govc vm.change -debug=true -trace=true -verbose=true -dump=true -json=true -vm=/'DC West'/vm/vm.test.net -e ftcpt.ftEncryptionMode="ftEncryptionRequired" -e migrate.encryptionMode="required" -e foo="bar"
<snipped>
types.ReconfigVM_Task{
    This: types.ManagedObjectReference{Type:"VirtualMachine", Value:"vm-9039", ServerGUID:""},
    Spec: types.VirtualMachineConfigSpec{
        ChangeVersion:         "",
        Name:                  "",
        Version:               "",
        CreateDate:            (*time.Time)(nil),
        Uuid:                  "",
        InstanceUuid:          "",
        NpivNodeWorldWideName: nil,
        NpivPortWorldWideName: nil,
        NpivWorldWideNameType: "",
        NpivDesiredNodeWwns:   0,
        NpivDesiredPortWwns:   0,
        NpivTemporaryDisabled: (*bool)(nil),
        NpivOnNonRdmDisks:     (*bool)(nil),
        NpivWorldWideNameOp:   "",
        LocationId:            "",
        GuestId:               "",
        AlternateGuestName:    "",
        Annotation:            "",
        Files:                 (*types.VirtualMachineFileInfo)(nil),
        Tools:                 (*types.ToolsConfigInfo)(nil),
        Flags:                 (*types.VirtualMachineFlagInfo)(nil),
        ConsolePreferences:    (*types.VirtualMachineConsolePreferences)(nil),
        PowerOpInfo:           (*types.VirtualMachineDefaultPowerOpInfo)(nil),
        RebootPowerOff:        (*bool)(nil),
        NumCPUs:               0,
        VcpuConfig:            nil,
        NumCoresPerSocket:     0,
        MemoryMB:              0,
        MemoryHotAddEnabled:   (*bool)(nil),
        CpuHotAddEnabled:      (*bool)(nil),
        CpuHotRemoveEnabled:   (*bool)(nil),
        VirtualICH7MPresent:   (*bool)(nil),
        VirtualSMCPresent:     (*bool)(nil),
        DeviceChange:          nil,
        CpuAllocation:         (*types.ResourceAllocationInfo)(nil),
        MemoryAllocation:      (*types.ResourceAllocationInfo)(nil),
        LatencySensitivity:    (*types.LatencySensitivity)(nil),
        CpuAffinity:           (*types.VirtualMachineAffinityInfo)(nil),
        MemoryAffinity:        (*types.VirtualMachineAffinityInfo)(nil),
        NetworkShaper:         (*types.VirtualMachineNetworkShaperInfo)(nil),
        CpuFeatureMask:        nil,
        ExtraConfig:           []types.BaseOptionValue{
            &types.OptionValue{
                Key:   "ftcpt.ftEncryptionMode",
                Value: "ftEncryptionRequired",
            },
            &types.OptionValue{
                Key:   "migrate.encryptionMode",
                Value: "required",
            },
            &types.OptionValue{
                Key:   "foo",
                Value: "bar",
            },
        },
        SwapPlacement:                "",
        BootOptions:                  (*types.VirtualMachineBootOptions)(nil),
        VAppConfig:                   nil,
        FtInfo:                       nil,
        RepConfig:                    (*types.ReplicationConfigSpec)(nil),
        VAppConfigRemoved:            (*bool)(nil),
        VAssertsEnabled:              (*bool)(nil),
        ChangeTrackingEnabled:        (*bool)(nil),
        Firmware:                     "",
        MaxMksConnections:            0,
        GuestAutoLockEnabled:         (*bool)(nil),
        ManagedBy:                    (*types.ManagedByInfo)(nil),
        MemoryReservationLockedToMax: (*bool)(nil),
        NestedHVEnabled:              (*bool)(nil),
        VPMCEnabled:                  (*bool)(nil),
        ScheduledHardwareUpgradeInfo: (*types.ScheduledHardwareUpgradeInfo)(nil),
        VmProfile:                    nil,
        MessageBusTunnelEnabled:      (*bool)(nil),
        Crypto:                       nil,
        MigrateEncryption:            "",
        SgxInfo:                      (*types.VirtualMachineSgxInfo)(nil),
        FtEncryptionMode:             "",
        GuestMonitoringModeInfo:      (*types.VirtualMachineGuestMonitoringModeInfo)(nil),
        SevEnabled:                   (*bool)(nil),
        VirtualNuma:                  (*types.VirtualMachineVirtualNuma)(nil),
        MotherboardLayout:            "",
        PmemFailoverEnabled:          (*bool)(nil),
        VmxStatsCollectionEnabled:    (*bool)(nil),
        VmOpNotificationToAppEnabled: (*bool)(nil),
        VmOpNotificationTimeout:      0,
        DeviceSwap:                   (*types.VirtualMachineVirtualDeviceSwap)(nil),
        SimultaneousThreads:          0,
        Pmem:                         (*types.VirtualMachineVirtualPMem)(nil),
        DeviceGroups:                 (*types.VirtualMachineVirtualDeviceGroups)(nil),
        FixedPassthruHotPlugEnabled:  (*bool)(nil),
    },
}
types.ReconfigVM_TaskResponse{
    Returnval: types.ManagedObjectReference{Type:"Task", Value:"task-19320", ServerGUID:""},
}
types.CreatePropertyCollector{
    This: types.ManagedObjectReference{Type:"PropertyCollector", Value:"propertyCollector", ServerGUID:""},
}
types.CreatePropertyCollectorResponse{
    Returnval: types.ManagedObjectReference{Type:"PropertyCollector", Value:"session[<session_guid>]52cc6f78-add9-3432-e23f-f828e84ecab0", ServerGUID:""},
}
types.CreateFilter{
    This: types.ManagedObjectReference{Type:"PropertyCollector", Value:"session[<session_guid>]52cc6f78-add9-3432-e23f-f828e84ecab0", ServerGUID:""},
    Spec: types.PropertyFilterSpec{
        PropSet: []types.PropertySpec{
            {
                Type:    "Task",
                All:     (*bool)(nil),
                PathSet: []string{"info"},
            },
        },
        ObjectSet: []types.ObjectSpec{
            {
                Obj:       types.ManagedObjectReference{Type:"Task", Value:"task-19320", ServerGUID:""},
                Skip:      (*bool)(nil),
                SelectSet: nil,
            },
        },
        ReportMissingObjectsInResults: (*bool)(nil),
    },
    PartialUpdates: false,
}
types.CreateFilterResponse{
    Returnval: types.ManagedObjectReference{Type:"PropertyFilter", Value:"session[<session_guid>]5209d3b6-68cd-103c-b743-9382dd57d25a", ServerGUID:""},
}
types.WaitForUpdatesEx{
    This:    types.ManagedObjectReference{Type:"PropertyCollector", Value:"session[<session_guid>]52cc6f78-add9-3432-e23f-f828e84ecab0", ServerGUID:""},
    Version: "",
    Options: (*types.WaitOptions)(nil),
}
types.WaitForUpdatesExResponse{
    Returnval: &types.UpdateSet{
        Version:   "1",
        FilterSet: []types.PropertyFilterUpdate{
            {
                Filter:    types.ManagedObjectReference{Type:"PropertyFilter", Value:"session[<session_guid>]5209d3b6-68cd-103c-b743-9382dd57d25a", ServerGUID:""},
                ObjectSet: []types.ObjectUpdate{
                    {
                        Kind:      "enter",
                        Obj:       types.ManagedObjectReference{Type:"Task", Value:"task-19320", ServerGUID:""},
                        ChangeSet: []types.PropertyChange{
                            {
                                Name: "info",
                                Op:   "assign",
                                Val:  types.TaskInfo{
                                    Key:             "task-19320",
                                    Task:            types.ManagedObjectReference{Type:"Task", Value:"task-19320", ServerGUID:""},
                                    Description:     (*types.LocalizableMessage)(nil),
                                    Name:            "ReconfigVM_Task",
                                    DescriptionId:   "VirtualMachine.reconfigure",
                                    Entity:          &types.ManagedObjectReference{Type:"VirtualMachine", Value:"vm-9039", ServerGUID:""},
                                    EntityName:      "vm.test.net",
                                    Locked:          nil,
                                    State:           "success",
                                    Cancelled:       false,
                                    Cancelable:      false,
                                    Error:           (*types.LocalizedMethodFault)(nil),
                                    Result:          nil,
                                    Progress:        0,
                                    ProgressDetails: nil,
                                    Reason:          &types.TaskReasonUser{
                                        TaskReason: types.TaskReason{},
                                        UserName:   "VSPHERE.LOCAL\\Administrator",
                                    },
                                    QueueTime:     time.Now(),
                                    StartTime:     types.NewTime(time.Now()),
                                    CompleteTime:  types.NewTime(time.Now()),
                                    EventChainId:  1157403,
                                    ChangeTag:     "",
                                    ParentTaskKey: "",
                                    RootTaskKey:   "",
                                    ActivationId:  "",
                                },
                            },
                        },
                        MissingSet: nil,
                    },
                },
                MissingSet: nil,
            },
        },
        Truncated: (*bool)(nil),
    },
}
types.DestroyPropertyFilter{
    This: types.ManagedObjectReference{Type:"PropertyFilter", Value:"session[<session_guid>]5209d3b6-68cd-103c-b743-9382dd57d25a", ServerGUID:""},
}
types.DestroyPropertyFilterResponse{}
types.DestroyPropertyCollector{
    This: types.ManagedObjectReference{Type:"PropertyCollector", Value:"session[<session_guid>]52cc6f78-add9-3432-e23f-f828e84ecab0", ServerGUID:""},
}
types.DestroyPropertyCollectorResponse{}


| => govc vm.info -e /'DC West'/vm/vm.test.net
Name:           vm.test.net
  Path:         /DC West/vm/vm.test.net
  UUID:         4205fb31-48e8-190a-dc2a-52ffb4428b68
  Guest name:   Rocky Linux (64-bit)
  Memory:       8092MB
  CPU:          4 vCPU(s)
  Power state:  poweredOff
  Boot time:    <nil>
  IP address:
  Host:         vmhost.test.net
  ExtraConfig:
    nvram:                                     vm.test.net.nvram
    svga.present:                              TRUE
    pciBridge0.present:                        TRUE
    pciBridge4.present:                        TRUE
    pciBridge4.virtualDev:                     pcieRootPort
    pciBridge4.functions:                      8
    pciBridge5.present:                        TRUE
    pciBridge5.virtualDev:                     pcieRootPort
    pciBridge5.functions:                      8
    pciBridge6.present:                        TRUE
    pciBridge6.virtualDev:                     pcieRootPort
    pciBridge6.functions:                      8
    pciBridge7.present:                        TRUE
    pciBridge7.virtualDev:                     pcieRootPort
    pciBridge7.functions:                      8
    hpet0.present:                             TRUE
    isolation.tools.vmxDnDVersionGet.disable:  TRUE
    RemoteDisplay.maxConnections:              1
    log.rotateSize:                            2048000
    mks.enable3d:                              FALSE
    isolation.tools.copy.disable:              TRUE
    isolation.tools.setGUIOptions.enable:      FALSE
    isolation.device.connectable.disable:      TRUE
    isolation.tools.paste.disable:             TRUE
    isolation.tools.dnd.disable:               TRUE
    viv.moid:                                  <redacted>
    vmware.tools.internalversion:              2147483647
    vmware.tools.requiredversion:              12448
    migrate.hostLogState:                      none
    migrate.migrationId:                       0
    migrate.hostLog:                           vm.test.net-544fa868.hlog
    guestinfo.metadata:                        <redacted>
    guestinfo.metadata.encoding:               gzip+base64
    guestinfo.userdata:                        <redacted>
    guestinfo.userdata.encoding:               gzip+base64
    guestinfo.vendordata:                      <redacted>
    guestinfo.vendordata.encoding:             gzip+base64
    foo:                                       bar

Additional context These properties are settable via PowerCLI as follows:

$VMview = $TargetVM | Get-View 
$ConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$ConfigSpec.FtEncryptionMode = New-object VMware.Vim.VirtualMachineConfigSpecEncryptedFtModes
$ConfigSpec.FtEncryptionMode = "ftEncryptionRequired"
$ConfigSpec.MigrateEncryption = New-Object VMware.Vim.VirtualMachineConfigSpecEncryptedVMotionModes
$ConfigSpec.MigrateEncryption = "required"
$VMview.ReconfigVM_Task($ConfigSpec)

Separately I also noticed that it seems govc cannot deploy and OVF with these properties set as well which would have been ideal.

jhg03a avatar Jul 09 '24 17:07 jhg03a