Search in sources :

Example 26 with VmConfigSpec

use of com.vmware.vim25.VmConfigSpec in project photon-model by vmware.

the class InstanceClient method populateCloudConfig.

/**
 * Puts the cloud-config user data in the OVF environment
 *
 * @param spec
 * @param currentProps
 */
private boolean populateCloudConfig(VirtualMachineConfigSpec spec, ArrayOfVAppPropertyInfo currentProps) {
    if (this.bootDisk == null) {
        return false;
    }
    boolean customizationsApplied = false;
    int nextKey = 1;
    if (currentProps != null) {
        nextKey = currentProps.getVAppPropertyInfo().stream().mapToInt(VAppPropertyInfo::getKey).max().orElse(1);
        nextKey++;
    }
    VmConfigSpec configSpec = new VmConfigSpec();
    configSpec.getOvfEnvironmentTransport().add(OvfDeployer.TRANSPORT_ISO);
    String cloudConfig = getFileItemByPath(this.bootDisk, CLOUD_CONFIG_PROPERTY_USER_DATA);
    if (cloudConfig != null) {
        VAppPropertySpec propertySpec = new VAppPropertySpec();
        VAppPropertyInfo userDataInfo = null;
        if (currentProps != null) {
            userDataInfo = currentProps.getVAppPropertyInfo().stream().filter(p -> p.getId().equals(CLOUD_CONFIG_PROPERTY_USER_DATA)).findFirst().orElse(null);
            if (userDataInfo == null) {
                // try coreOS key
                userDataInfo = currentProps.getVAppPropertyInfo().stream().filter(p -> p.getId().equals(COREOS_CLOUD_CONFIG_PROPERTY_USER_DATA)).findFirst().orElse(null);
                if (userDataInfo != null) {
                    VAppPropertyInfo coreosEncoding = currentProps.getVAppPropertyInfo().stream().filter(p -> p.getId().equals(COREOS_CLOUD_CONFIG_PROPERTY_USER_DATA_ENCODING)).findFirst().orElse(null);
                    if (coreosEncoding != null) {
                        VAppPropertySpec pSpec = new VAppPropertySpec();
                        coreosEncoding.setValue(CLOUD_CONFIG_BASE64_ENCODING);
                        pSpec.setOperation(ArrayUpdateOperation.EDIT);
                        pSpec.setInfo(coreosEncoding);
                        configSpec.getProperty().add(pSpec);
                    }
                }
            }
        }
        if (userDataInfo != null) {
            propertySpec.setOperation(ArrayUpdateOperation.EDIT);
        } else {
            userDataInfo = new VAppPropertyInfo();
            userDataInfo.setId(CLOUD_CONFIG_PROPERTY_USER_DATA);
            userDataInfo.setType("string");
            userDataInfo.setKey(nextKey++);
            propertySpec.setOperation(ArrayUpdateOperation.ADD);
        }
        String encodedUserData = Base64.getEncoder().encodeToString(cloudConfig.getBytes());
        userDataInfo.setValue(encodedUserData);
        propertySpec.setInfo(userDataInfo);
        configSpec.getProperty().add(propertySpec);
        customizationsApplied = true;
    }
    String publicKeys = getFileItemByPath(this.bootDisk, CLOUD_CONFIG_PROPERTY_PUBLIC_KEYS);
    if (publicKeys != null) {
        VAppPropertySpec propertySpec = new VAppPropertySpec();
        VAppPropertyInfo sshKeyInfo = null;
        if (currentProps != null) {
            sshKeyInfo = currentProps.getVAppPropertyInfo().stream().filter(p -> p.getId().equals(CLOUD_CONFIG_PROPERTY_PUBLIC_KEYS)).findFirst().orElse(null);
        }
        if (sshKeyInfo != null) {
            propertySpec.setOperation(ArrayUpdateOperation.EDIT);
        } else {
            sshKeyInfo = new VAppPropertyInfo();
            sshKeyInfo.setType("string");
            sshKeyInfo.setId(CLOUD_CONFIG_PROPERTY_PUBLIC_KEYS);
            sshKeyInfo.setKey(nextKey++);
            propertySpec.setOperation(ArrayUpdateOperation.ADD);
        }
        sshKeyInfo.setValue(publicKeys);
        propertySpec.setInfo(sshKeyInfo);
        configSpec.getProperty().add(propertySpec);
        customizationsApplied = true;
    }
    String hostname = getFileItemByPath(this.bootDisk, CLOUD_CONFIG_PROPERTY_HOSTNAME);
    if (hostname != null) {
        VAppPropertySpec propertySpec = new VAppPropertySpec();
        VAppPropertyInfo hostInfo = null;
        if (currentProps != null) {
            hostInfo = currentProps.getVAppPropertyInfo().stream().filter(p -> p.getId().equals(CLOUD_CONFIG_PROPERTY_HOSTNAME)).findFirst().orElse(null);
            if (hostInfo == null) {
                // try coreOS key
                hostInfo = currentProps.getVAppPropertyInfo().stream().filter(p -> p.getId().equals(COREOS_CLOUD_CONFIG_PROPERTY_HOSTNAME)).findFirst().orElse(null);
            }
        }
        if (hostInfo != null) {
            propertySpec.setOperation(ArrayUpdateOperation.EDIT);
        } else {
            hostInfo = new VAppPropertyInfo();
            hostInfo.setId(CLOUD_CONFIG_PROPERTY_USER_DATA);
            hostInfo.setType("string");
            hostInfo.setKey(nextKey++);
            propertySpec.setOperation(ArrayUpdateOperation.ADD);
        }
        hostInfo.setValue(hostname);
        propertySpec.setInfo(hostInfo);
        configSpec.getProperty().add(propertySpec);
        customizationsApplied = true;
    }
    if (customizationsApplied) {
        spec.setVAppConfig(configSpec);
    }
    return customizationsApplied;
}
Also used : ClientUtils.findMatchingVirtualDevice(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.findMatchingVirtualDevice) VirtualMachineConfigSpec(com.vmware.vim25.VirtualMachineConfigSpec) VirtualMachineRelocateSpecDiskLocator(com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator) VirtualDiskSpec(com.vmware.vim25.VirtualDiskSpec) ClientUtils.fillInControllerUnitNumber(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.fillInControllerUnitNumber) ArrayOfVirtualDevice(com.vmware.vim25.ArrayOfVirtualDevice) ClientUtils.findFreeScsiUnit(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.findFreeScsiUnit) VmConfigSpec(com.vmware.vim25.VmConfigSpec) ClientUtils.getFirstIdeController(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getFirstIdeController) VirtualDeviceConnectInfo(com.vmware.vim25.VirtualDeviceConnectInfo) Utils(com.vmware.xenon.common.Utils) Document(org.w3c.dom.Document) Map(java.util.Map) VirtualDevice(com.vmware.vim25.VirtualDevice) EnumSet(java.util.EnumSet) FinderException(com.vmware.photon.controller.model.adapters.vsphere.util.finders.FinderException) VapiConnection(com.vmware.photon.controller.model.adapters.vsphere.vapi.VapiConnection) ClientUtils.createHdd(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.createHdd) ClientUtils.getFirstScsiController(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getFirstScsiController) ArrayOfManagedObjectReference(com.vmware.vim25.ArrayOfManagedObjectReference) ClientUtils.nextUnitNumber(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.nextUnitNumber) ClientUtils.getFirstSioController(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getFirstSioController) ClientUtils.getDatastorePathForDisk(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getDatastorePathForDisk) VirtualMachineFileInfo(com.vmware.vim25.VirtualMachineFileInfo) VirtualMachineSnapshotInfo(com.vmware.vim25.VirtualMachineSnapshotInfo) DuplicateNameFaultMsg(com.vmware.vim25.DuplicateNameFaultMsg) ArrayUpdateOperation(com.vmware.vim25.ArrayUpdateOperation) UriUtils(com.vmware.xenon.common.UriUtils) ClientUtils.detachDisk(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.detachDisk) VirtualFloppy(com.vmware.vim25.VirtualFloppy) ClientUtils.getStorageIOAllocationInfo(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getStorageIOAllocationInfo) Finder(com.vmware.photon.controller.model.adapters.vsphere.util.finders.Finder) OvfDeployer(com.vmware.photon.controller.model.adapters.vsphere.ovf.OvfDeployer) VirtualLsiLogicController(com.vmware.vim25.VirtualLsiLogicController) OptionValue(com.vmware.vim25.OptionValue) RuntimeFaultFaultMsg(com.vmware.vim25.RuntimeFaultFaultMsg) ArrayList(java.util.ArrayList) ComputeInstanceRequest(com.vmware.photon.controller.model.adapterapi.ComputeInstanceRequest) VirtualCdrom(com.vmware.vim25.VirtualCdrom) STORAGE_REFERENCE(com.vmware.photon.controller.model.constants.PhotonModelConstants.STORAGE_REFERENCE) OvfRetriever(com.vmware.photon.controller.model.adapters.vsphere.ovf.OvfRetriever) ClientUtils.getDiskProvisioningType(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getDiskProvisioningType) DISK_DATASTORE_NAME(com.vmware.photon.controller.model.adapters.vsphere.CustomProperties.DISK_DATASTORE_NAME) VirtualMachineRelocateDiskMoveOptions(com.vmware.vim25.VirtualMachineRelocateDiskMoveOptions) InvalidCollectorVersionFaultMsg(com.vmware.vim25.InvalidCollectorVersionFaultMsg) VirtualMachineGuestOsIdentifier(com.vmware.vim25.VirtualMachineGuestOsIdentifier) DiskStatus(com.vmware.photon.controller.model.resources.DiskService.DiskStatus) VirtualDeviceConfigSpec(com.vmware.vim25.VirtualDeviceConfigSpec) VirtualDeviceBackingInfo(com.vmware.vim25.VirtualDeviceBackingInfo) ClientUtils.getDiskMode(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getDiskMode) PROVIDER_DISK_UNIQUE_ID(com.vmware.photon.controller.model.adapters.vsphere.CustomProperties.PROVIDER_DISK_UNIQUE_ID) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference) ClientUtils.findFreeUnit(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.findFreeUnit) ClientUtils.insertCdrom(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.insertCdrom) MethodFault(com.vmware.vim25.MethodFault) Lock(java.util.concurrent.locks.Lock) VirtualDisk(com.vmware.vim25.VirtualDisk) Paths(java.nio.file.Paths) InvalidNameFaultMsg(com.vmware.vim25.InvalidNameFaultMsg) ClientUtils.insertFloppy(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.insertFloppy) VAppPropertySpec(com.vmware.vim25.VAppPropertySpec) VirtualDiskType(com.vmware.vim25.VirtualDiskType) VirtualEthernetCardMacType(com.vmware.vim25.VirtualEthernetCardMacType) OvfParser(com.vmware.photon.controller.model.adapters.vsphere.ovf.OvfParser) BaseHelper(com.vmware.photon.controller.model.adapters.vsphere.util.connection.BaseHelper) LoggerFactory(org.slf4j.LoggerFactory) ClientUtils.toKb(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.toKb) DiskType(com.vmware.photon.controller.model.resources.DiskService.DiskType) OvfNetworkMapping(com.vmware.vim25.OvfNetworkMapping) VAppPropertyInfo(com.vmware.vim25.VAppPropertyInfo) ClientUtils.getPbmProfileSpec(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getPbmProfileSpec) Connection(com.vmware.photon.controller.model.adapters.vsphere.util.connection.Connection) URI(java.net.URI) TaskInfo(com.vmware.vim25.TaskInfo) VirtualDiskFlatVer2BackingInfo(com.vmware.vim25.VirtualDiskFlatVer2BackingInfo) VM_PATH_FORMAT(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.VM_PATH_FORMAT) DiskStateExpanded(com.vmware.photon.controller.model.resources.DiskService.DiskStateExpanded) DuplicateName(com.vmware.vim25.DuplicateName) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ArrayOfVAppPropertyInfo(com.vmware.vim25.ArrayOfVAppPropertyInfo) Collectors(java.util.stream.Collectors) ServiceHost(com.vmware.xenon.common.ServiceHost) Objects(java.util.Objects) Base64(java.util.Base64) List(java.util.List) InvalidPropertyFaultMsg(com.vmware.vim25.InvalidPropertyFaultMsg) VirtualMachineRelocateSpec(com.vmware.vim25.VirtualMachineRelocateSpec) VirtualPCIController(com.vmware.vim25.VirtualPCIController) ClientUtils.createCdrom(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.createCdrom) Entry(java.util.Map.Entry) DiskService(com.vmware.photon.controller.model.resources.DiskService) VimPath(com.vmware.photon.controller.model.adapters.vsphere.util.VimPath) PhotonModelUriUtils(com.vmware.photon.controller.model.util.PhotonModelUriUtils) FileAlreadyExists(com.vmware.vim25.FileAlreadyExists) ClientUtils.makePathToVmdkFile(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.makePathToVmdkFile) HashMap(java.util.HashMap) GetMoRef(com.vmware.photon.controller.model.adapters.vsphere.util.connection.GetMoRef) VirtualMachineCloneSpec(com.vmware.vim25.VirtualMachineCloneSpec) VapiClient(com.vmware.photon.controller.model.adapters.vsphere.vapi.VapiClient) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) CollectionUtils(org.apache.commons.collections.CollectionUtils) ComputeState(com.vmware.photon.controller.model.resources.ComputeService.ComputeState) ClientUtils.getListOfVirtualDisk(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getListOfVirtualDisk) NetworkDeviceBackingFactory(com.vmware.photon.controller.model.adapters.vsphere.network.NetworkDeviceBackingFactory) ClientUtils.getDatastoreFromStoragePolicy(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.getDatastoreFromStoragePolicy) Logger(org.slf4j.Logger) Element(com.vmware.photon.controller.model.adapters.vsphere.util.finders.Element) ReentrantLock(java.util.concurrent.locks.ReentrantLock) VirtualE1000(com.vmware.vim25.VirtualE1000) Operation(com.vmware.xenon.common.Operation) DISK_CONTROLLER_NUMBER(com.vmware.photon.controller.model.adapters.vsphere.CustomProperties.DISK_CONTROLLER_NUMBER) ClientUtils.createFloppy(com.vmware.photon.controller.model.adapters.vsphere.ClientUtils.createFloppy) VirtualSCSIController(com.vmware.vim25.VirtualSCSIController) VimNames(com.vmware.photon.controller.model.adapters.vsphere.util.VimNames) NetworkInterfaceStateWithDetails(com.vmware.photon.controller.model.adapters.vsphere.ProvisionContext.NetworkInterfaceStateWithDetails) DISK_PARENT_DIRECTORY(com.vmware.photon.controller.model.adapters.vsphere.CustomProperties.DISK_PARENT_DIRECTORY) TimeUnit(java.util.concurrent.TimeUnit) VirtualDeviceConfigSpecOperation(com.vmware.vim25.VirtualDeviceConfigSpecOperation) FileEntry(com.vmware.photon.controller.model.resources.DiskService.DiskState.BootConfig.FileEntry) VirtualSCSISharing(com.vmware.vim25.VirtualSCSISharing) LibraryClient(com.vmware.photon.controller.model.adapters.vsphere.vapi.LibraryClient) VirtualMachineDefinedProfileSpec(com.vmware.vim25.VirtualMachineDefinedProfileSpec) ImageState(com.vmware.photon.controller.model.resources.ImageService.ImageState) VirtualEthernetCard(com.vmware.vim25.VirtualEthernetCard) Collections(java.util.Collections) TaskInfoState(com.vmware.vim25.TaskInfoState) OperationJoin(com.vmware.xenon.common.OperationJoin) RESOURCE_GROUP_NAME(com.vmware.photon.controller.model.ComputeProperties.RESOURCE_GROUP_NAME) VmConfigSpec(com.vmware.vim25.VmConfigSpec) VAppPropertySpec(com.vmware.vim25.VAppPropertySpec) VAppPropertyInfo(com.vmware.vim25.VAppPropertyInfo) ArrayOfVAppPropertyInfo(com.vmware.vim25.ArrayOfVAppPropertyInfo)

Aggregations

VirtualMachineConfigSpec (com.vmware.vim25.VirtualMachineConfigSpec)19 VirtualDeviceConfigSpec (com.vmware.vim25.VirtualDeviceConfigSpec)17 ManagedObjectReference (com.vmware.vim25.ManagedObjectReference)11 VirtualDevice (com.vmware.vim25.VirtualDevice)10 IOException (java.io.IOException)8 CloudException (com.cloud.exception.CloudException)7 InternalErrorException (com.cloud.exception.InternalErrorException)7 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)7 UnsupportedEncodingException (java.io.UnsupportedEncodingException)7 ConnectException (java.net.ConnectException)7 RemoteException (java.rmi.RemoteException)7 ConfigurationException (javax.naming.ConfigurationException)7 VirtualMachineMO (com.cloud.hypervisor.vmware.mo.VirtualMachineMO)5 VmwareHypervisorHost (com.cloud.hypervisor.vmware.mo.VmwareHypervisorHost)5 VmwareContext (com.cloud.hypervisor.vmware.util.VmwareContext)5 ArrayOfManagedObjectReference (com.vmware.vim25.ArrayOfManagedObjectReference)5 OptionValue (com.vmware.vim25.OptionValue)4 VirtualDisk (com.vmware.vim25.VirtualDisk)4 DatacenterMO (com.cloud.hypervisor.vmware.mo.DatacenterMO)3 HostMO (com.cloud.hypervisor.vmware.mo.HostMO)3