Skip to content

Commit 0f5b0e6

Browse files
authored
VM ingestion (#3606)
The VM ingestion feature allows CloudStack to discover, on-board, import existing VMs in an infra. The feature currently works only for VMware, with a hypervisor agnostic framework which may be extended for KVM and XenServer in future.
1 parent 6d014fa commit 0f5b0e6

File tree

41 files changed

+4166
-299
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+4166
-299
lines changed

api/src/main/java/com/cloud/event/EventTypes.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public class EventTypes {
9797
public static final String EVENT_VM_MOVE = "VM.MOVE";
9898
public static final String EVENT_VM_RESTORE = "VM.RESTORE";
9999
public static final String EVENT_VM_EXPUNGE = "VM.EXPUNGE";
100+
public static final String EVENT_VM_IMPORT = "VM.IMPORT";
100101

101102
// Domain Router
102103
public static final String EVENT_ROUTER_CREATE = "ROUTER.CREATE";
@@ -596,6 +597,7 @@ public class EventTypes {
596597
entityEventDetails.put(EVENT_VM_MOVE, VirtualMachine.class);
597598
entityEventDetails.put(EVENT_VM_RESTORE, VirtualMachine.class);
598599
entityEventDetails.put(EVENT_VM_EXPUNGE, VirtualMachine.class);
600+
entityEventDetails.put(EVENT_VM_IMPORT, VirtualMachine.class);
599601

600602
entityEventDetails.put(EVENT_ROUTER_CREATE, VirtualRouter.class);
601603
entityEventDetails.put(EVENT_ROUTER_DESTROY, VirtualRouter.class);

api/src/main/java/com/cloud/vm/UserVmService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,4 +513,8 @@ UserVm upgradeVirtualMachine(ScaleVMCmd cmd) throws ResourceUnavailableException
513513

514514
void collectVmNetworkStatistics (UserVm userVm);
515515

516+
UserVm importVM(final DataCenter zone, final Host host, final VirtualMachineTemplate template, final String instanceName, final String displayName, final Account owner, final String userData, final Account caller, final Boolean isDisplayVm, final String keyboard,
517+
final long accountId, final long userId, final ServiceOffering serviceOffering, final String sshPublicKey,
518+
final String hostName, final HypervisorType hypervisorType, final Map<String, String> customParameters, final VirtualMachine.PowerState powerState) throws InsufficientCapacityException;
519+
516520
}

api/src/main/java/com/cloud/vm/VmDetailConstants.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,12 @@ public interface VmDetailConstants {
5454
String SSH_PUBLIC_KEY = "SSH.PublicKey";
5555
String PASSWORD = "password";
5656
String ENCRYPTED_PASSWORD = "Encrypted.Password";
57+
58+
// VM import with nic, disk and custom params for custom compute offering
59+
String NIC = "nic";
60+
String NETWORK = "network";
61+
String IP4_ADDRESS = "ip4Address";
62+
String IP6_ADDRESS = "ip6Address";
63+
String DISK = "disk";
64+
String DISK_OFFERING = "diskOffering";
5765
}

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class ApiConstants {
2222
public static final String ACCOUNT_TYPE = "accounttype";
2323
public static final String ACCOUNT_ID = "accountid";
2424
public static final String ACTIVITY = "activity";
25+
public static final String ADAPTER_TYPE = "adaptertype";
2526
public static final String ADDRESS = "address";
2627
public static final String ALGORITHM = "algorithm";
2728
public static final String ALLOCATED_ONLY = "allocatedonly";
@@ -43,16 +44,23 @@ public class ApiConstants {
4344
public static final String BYTES_WRITE_RATE_MAX = "byteswriteratemax";
4445
public static final String BYTES_WRITE_RATE_MAX_LENGTH = "byteswriteratemaxlength";
4546
public static final String BYPASS_VLAN_OVERLAP_CHECK = "bypassvlanoverlapcheck";
47+
public static final String CAPACITY = "capacity";
4648
public static final String CATEGORY = "category";
4749
public static final String CAN_REVERT = "canrevert";
4850
public static final String CA_CERTIFICATES = "cacertificates";
4951
public static final String CERTIFICATE = "certificate";
5052
public static final String CERTIFICATE_CHAIN = "certchain";
5153
public static final String CERTIFICATE_FINGERPRINT = "fingerprint";
5254
public static final String CERTIFICATE_ID = "certid";
55+
public static final String CONTROLLER = "controller";
56+
public static final String CONTROLLER_UNIT = "controllerunit";
5357
public static final String COPY_IMAGE_TAGS = "copyimagetags";
5458
public static final String CSR = "csr";
5559
public static final String PRIVATE_KEY = "privatekey";
60+
public static final String DATASTORE_HOST = "datastorehost";
61+
public static final String DATASTORE_NAME = "datastorename";
62+
public static final String DATASTORE_PATH = "datastorepath";
63+
public static final String DATASTORE_TYPE = "datastoretype";
5664
public static final String DOMAIN_SUFFIX = "domainsuffix";
5765
public static final String DNS_SEARCH_ORDER = "dnssearchorder";
5866
public static final String CHAIN_INFO = "chaininfo";
@@ -69,6 +77,7 @@ public class ApiConstants {
6977
public static final String COMMAND = "command";
7078
public static final String CMD_EVENT_TYPE = "cmdeventtype";
7179
public static final String COMPONENT = "component";
80+
public static final String CPU_CORE_PER_SOCKET = "cpucorepersocket";
7281
public static final String CPU_NUMBER = "cpunumber";
7382
public static final String CPU_SPEED = "cpuspeed";
7483
public static final String CPU_LOAD_AVERAGE = "cpuloadaverage";
@@ -91,6 +100,7 @@ public class ApiConstants {
91100
public static final String DETAILS = "details";
92101
public static final String DEVICE_ID = "deviceid";
93102
public static final String DIRECT_DOWNLOAD = "directdownload";
103+
public static final String DISK = "disk";
94104
public static final String DISK_OFFERING_ID = "diskofferingid";
95105
public static final String NEW_DISK_OFFERING_ID = "newdiskofferingid";
96106
public static final String DISK_KBS_READ = "diskkbsread";
@@ -170,6 +180,7 @@ public class ApiConstants {
170180
public static final String PREVIOUS_ACL_RULE_ID = "previousaclruleid";
171181
public static final String NEXT_ACL_RULE_ID = "nextaclruleid";
172182
public static final String MOVE_ACL_CONSISTENCY_HASH = "aclconsistencyhash";
183+
public static final String IMAGE_PATH = "imagepath";
173184
public static final String INTERNAL_DNS1 = "internaldns1";
174185
public static final String INTERNAL_DNS2 = "internaldns2";
175186
public static final String INTERVAL_TYPE = "intervaltype";
@@ -181,6 +192,7 @@ public class ApiConstants {
181192
public static final String IOPS_WRITE_RATE_MAX = "iopswriteratemax";
182193
public static final String IOPS_WRITE_RATE_MAX_LENGTH = "iopswriteratemaxlength";
183194
public static final String IP_ADDRESS = "ipaddress";
195+
public static final String IP_ADDRESSES = "ipaddresses";
184196
public static final String IP6_ADDRESS = "ip6address";
185197
public static final String IP_ADDRESS_ID = "ipaddressid";
186198
public static final String IS_ASYNC = "isasync";
@@ -224,13 +236,17 @@ public class ApiConstants {
224236
public static final String NETWORK_DOMAIN = "networkdomain";
225237
public static final String NETMASK = "netmask";
226238
public static final String NEW_NAME = "newname";
239+
public static final String NIC = "nic";
240+
public static final String NIC_NETWORK_LIST = "nicnetworklist";
241+
public static final String NIC_IP_ADDRESS_LIST = "nicipaddresslist";
227242
public static final String NUM_RETRIES = "numretries";
228243
public static final String OFFER_HA = "offerha";
229244
public static final String IS_SYSTEM_OFFERING = "issystem";
230245
public static final String IS_DEFAULT_USE = "defaultuse";
231246
public static final String OLD_FORMAT = "oldformat";
232247
public static final String OP = "op";
233248
public static final String OS_CATEGORY_ID = "oscategoryid";
249+
public static final String OS_ID = "osid";
234250
public static final String OS_TYPE_ID = "ostypeid";
235251
public static final String OS_DISPLAY_NAME = "osdisplayname";
236252
public static final String OS_NAME_FOR_HYPERVISOR = "osnameforhypervisor";
@@ -255,6 +271,7 @@ public class ApiConstants {
255271
public static final String PORTAL = "portal";
256272
public static final String PORTABLE_IP_ADDRESS = "portableipaddress";
257273
public static final String PORT_FORWARDING_SERVICE_ID = "portforwardingserviceid";
274+
public static final String POSITION = "position";
258275
public static final String POST_URL = "postURL";
259276
public static final String POWER_STATE = "powerstate";
260277
public static final String PRIVATE_INTERFACE = "privateinterface";
@@ -360,6 +377,7 @@ public class ApiConstants {
360377
public static final String REMOVE_VLAN = "removevlan";
361378
public static final String VLAN_ID = "vlanid";
362379
public static final String ISOLATED_PVLAN = "isolatedpvlan";
380+
public static final String ISOLATED_PVLAN_TYPE = "isolatedpvlantype";
363381
public static final String ISOLATION_URI = "isolationuri";
364382
public static final String VM_AVAILABLE = "vmavailable";
365383
public static final String VM_LIMIT = "vmlimit";
@@ -531,6 +549,7 @@ public class ApiConstants {
531549
public static final String CUSTOM_DISK_OFF_MAX_SIZE = "customdiskofferingmaxsize";
532550
public static final String DEFAULT_ZONE_ID = "defaultzoneid";
533551
public static final String LIVE_MIGRATE = "livemigrate";
552+
public static final String MIGRATE_ALLOWED = "migrateallowed";
534553
public static final String MIGRATE_TO = "migrateto";
535554
public static final String GUID = "guid";
536555
public static final String VSWITCH_TYPE_GUEST_TRAFFIC = "guestvswitchtype";

0 commit comments

Comments
 (0)