package org.zstack.header.vm; import org.springframework.http.HttpMethod; import org.zstack.header.cluster.ClusterVO; import org.zstack.header.configuration.DiskOfferingVO; import org.zstack.header.configuration.InstanceOfferingVO; import org.zstack.header.core.scheduler.SchedulerVO; import org.zstack.header.host.HostVO; import org.zstack.header.identity.Action; import org.zstack.header.image.ImageVO; import org.zstack.header.message.APICreateMessage; import org.zstack.header.message.APIEvent; import org.zstack.header.message.APIMessage; import org.zstack.header.message.APIParam; import org.zstack.header.network.l3.L3NetworkVO; import org.zstack.header.notification.ApiNotification; import org.zstack.header.rest.RestRequest; import org.zstack.header.storage.primary.PrimaryStorageVO; import org.zstack.header.tag.TagResourceType; import org.zstack.header.zone.ZoneVO; import java.util.List; import static java.util.Arrays.asList; /** * @api create a new vm instance * @cli * @httpMsg { * "org.zstack.header.vm.APICreateVmInstanceMsg": { * "name": "TestVm", * "instanceOfferingUuid": "1618154b462a48749ca9b114cf4a2979", * "imageUuid": "99a5eea648954ef7be2b8ede8f34fe26", * "l3NetworkUuids": [ * "c4f6a370f80443798cc460ee07d56ff1", * "f5fbd96e0df745bdb7bc4f4c19febe65", * "c60285dca24d43a4b9a2e536674ddca1" * ], * "type": "UserVm", * "dataDiskOfferingUuids": [], * "description": "Test", * "session": { * "uuid": "49c7e4c1fc18499a9477dd426436a8a4" * } * } * } * @msg { * "org.zstack.header.vm.APICreateVmInstanceMsg": { * "name": "TestVm", * "instanceOfferingUuid": "1618154b462a48749ca9b114cf4a2979", * "imageUuid": "99a5eea648954ef7be2b8ede8f34fe26", * "l3NetworkUuids": [ * "c4f6a370f80443798cc460ee07d56ff1", * "f5fbd96e0df745bdb7bc4f4c19febe65", * "c60285dca24d43a4b9a2e536674ddca1" * ], * "type": "UserVm", * "dataDiskOfferingUuids": [], * "description": "Test", * "session": { * "uuid": "49c7e4c1fc18499a9477dd426436a8a4" * }, * "timeout": 1800000, * "id": "add5fb2198f14980adf26db572d035c5", * "serviceId": "api.portal", * "creatingTime": 1398912618016 * } * } * @result See :ref:`APICreateVmInstanceEvent` * @since 0.1.0 */ @TagResourceType(VmInstanceVO.class) @Action(category = VmInstanceConstant.ACTION_CATEGORY) @RestRequest( path = "/vm-instances", method = HttpMethod.POST, responseClass = APICreateVmInstanceEvent.class, parameterName = "params" ) public class APICreateVmInstanceMsg extends APICreateMessage { /** * @desc max length of 255 characters */ @APIParam(maxLength = 255) private String name; /** * @desc uuid of instance offering. See :ref:`InstanceOfferingInventory` */ @APIParam(resourceType = InstanceOfferingVO.class, checkAccount = true) private String instanceOfferingUuid; /** * @desc uuid of image. See :ref:`ImageInventory` */ @APIParam(resourceType = ImageVO.class, checkAccount = true) private String imageUuid; /** * @desc a list of L3Network uuid the vm will create nic on. See :ref:`L3NetworkInventory` */ @APIParam(resourceType = L3NetworkVO.class, nonempty = true, checkAccount = true) private List<String> l3NetworkUuids; /** * @desc see type of :ref:`VmInstanceInventory` * @choices - UserVm * - ApplianceVm */ @APIParam(validValues = {"UserVm", "ApplianceVm"}, required = false) private String type; /** * @desc disk offering uuid for root volume. Optional when vm is created from RootVolumeTemplate, * mandatory when vm is created from ISO. See 'mediaType' of :ref:`ImageInventory` * @optional */ @APIParam(required = false, resourceType = DiskOfferingVO.class, checkAccount = true) private String rootDiskOfferingUuid; /** * @desc disk offering uuid for data volumes. See :ref:`DiskOfferingInventory` */ @APIParam(required = false, resourceType = DiskOfferingVO.class, checkAccount = true) private List<String> dataDiskOfferingUuids; /** * @desc when not null, vm will be created in the zone this uuid specified * @optional */ @APIParam(required = false, resourceType = ZoneVO.class) private String zoneUuid; /** * @desc when not null, vm will be created in the cluster this uuid specified * @optional */ @APIParam(required = false, resourceType = ClusterVO.class) private String clusterUuid; /** * @desc when not null, vm will be created on the host this uuid specified * @optional */ @APIParam(required = false, resourceType = HostVO.class) private String hostUuid; /** * @desc when not null, vm will be created on the primary storage this uuid specified * @optional */ @APIParam(required = false, resourceType = PrimaryStorageVO.class) private String primaryStorageUuidForRootVolume; /** * @desc max length of 255 characters * @optional */ @APIParam(required = false, maxLength = 2048) private String description; /** * @desc user-defined root password * @optional */ // @APIParam(required = false, maxLength = 32, checkAccount = true, validRegexValues = VmInstanceConstant.USER_VM_REGEX_PASSWORD) // private String rootPassword; private String defaultL3NetworkUuid; @APIParam(required = false, validValues = {"InstantStart", "JustCreate"}) private String strategy = VmCreationStrategy.InstantStart.toString(); public String getStrategy() { return strategy; } public void setStrategy(String strategy) { this.strategy = strategy; } public String getDefaultL3NetworkUuid() { return defaultL3NetworkUuid; } public void setDefaultL3NetworkUuid(String defaultL3NetworkUuid) { this.defaultL3NetworkUuid = defaultL3NetworkUuid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getInstanceOfferingUuid() { return instanceOfferingUuid; } public void setInstanceOfferingUuid(String instanceOfferingUuid) { this.instanceOfferingUuid = instanceOfferingUuid; } public String getImageUuid() { return imageUuid; } public void setImageUuid(String imageUuid) { this.imageUuid = imageUuid; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getZoneUuid() { return zoneUuid; } public void setZoneUuid(String zoneUuid) { this.zoneUuid = zoneUuid; } public String getClusterUuid() { return clusterUuid; } public void setClusterUuid(String clusterUuid) { this.clusterUuid = clusterUuid; } public String getHostUuid() { return hostUuid; } public void setHostUuid(String hostUuid) { this.hostUuid = hostUuid; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public List<String> getL3NetworkUuids() { return l3NetworkUuids; } public void setL3NetworkUuids(List<String> l3NetworkUuids) { this.l3NetworkUuids = l3NetworkUuids; } public List<String> getDataDiskOfferingUuids() { return dataDiskOfferingUuids; } public void setDataDiskOfferingUuids(List<String> dataDiskOfferingUuids) { this.dataDiskOfferingUuids = dataDiskOfferingUuids; } public String getRootDiskOfferingUuid() { return rootDiskOfferingUuid; } public void setRootDiskOfferingUuid(String rootDiskOfferingUuid) { this.rootDiskOfferingUuid = rootDiskOfferingUuid; } public String getPrimaryStorageUuidForRootVolume() { return primaryStorageUuidForRootVolume; } public void setPrimaryStorageUuidForRootVolume(String primaryStorageUuidForRootVolume) { this.primaryStorageUuidForRootVolume = primaryStorageUuidForRootVolume; } public static APICreateVmInstanceMsg __example__() { APICreateVmInstanceMsg msg = new APICreateVmInstanceMsg(); msg.setName("vm1"); msg.setDescription("this is a vm"); msg.setClusterUuid(uuid()); msg.setDataDiskOfferingUuids(asList(uuid(), uuid())); msg.setImageUuid(uuid()); msg.setInstanceOfferingUuid(uuid()); msg.setL3NetworkUuids(asList(uuid())); return msg; } public ApiNotification __notification__() { APIMessage that = this; return new ApiNotification() { @Override public void after(APIEvent evt) { if (evt.isSuccess()) { ntfy("Created").resource(((APICreateVmInstanceEvent) evt).getInventory().getUuid(), VmInstanceVO.class.getSimpleName()) .messageAndEvent(that, evt).done(); } } }; } }