Live import VMs to vCloud Director
Tom Fojta wrote a great blog post about the new capability in vCloud Director 8.10 to import running VMs into vCloud Director. This is a huge asset in migration scenarios where customers can't afford outages when being migrated into the vCD environment. Unfortunately the API syntax to actually initiate the import is a little convoluted and not the easiest process to manage.
I set about writing a PowerShell script to significantly simplify the process of initiating a live-import operation. The script itself is available from github at the following link: https://github.com/jondwaite/vcdliveimport.
The liveimport.ps1 script contained in this repository does the following:
- Prompts for a credential to be used to connect to both vCloud Director (System context) and vCenter - if you have different usernames/passwords for each you'll need to adjust this.
- Enumerates the available vCenter instances registered as Provider Virtual Datacenters (PVDCs) in vCloud Director and allows one to be selected as the source vCenter for the migration.
- Lists the available VMs in the selected vCenter instance, filters this list based on selectable criteria (e.g. don't offer to import 'Guest Introspection' VMs) and allows the source VM to be selected.
- Lists available destination Virtual Datacenters (VDCs) in the vCloud Director environment and allows the destination VDC to be selected.
- Displays the appropriate POST request information to be submitted to vCloud Director to initiate the live-import of this VM.
- Optionally - Submits the REST API request directly to the vCloud Director environment to actually initiate the import process.
An example transcript of this process is show below. Hopefully this helps someone else out and helps to make it easier for you to live-import running VMs into vCloud Director.
Jon.
Example Session Transcript:
1PowerCLI C:\> liveimport.ps1
2Connected to vCloud Director OK
3vCenter(s) Found:
4-----------------
5vc01 (https://vcd01.dev.local/api/admin/extension/vimServer/158f73ec-a999-4332-8250-f4dd5e6c4971)
6
7Selecting vc01 as only pVDC vCenter found.
8vCenter vc01 selected.
9Connected to vCenter Server vc01 OK
10
11Evaluating vCenter VMs as migration candidates.............
12Available candidate VMs:
13------------------------
14testvm01
15
16Enter VM name to live-migrate to vCloud (or 'quit' to exit): testvm01
17Selected VM testvm01 for live import to vCloud.
18
19Available VDCs:
20---------------
21Lab VDC
22Enter Destination VDC Name (or quit to exit): Lab VDC
23VDC 'Lab VDC' selected.
24
25URI for POST operation:
26https://vcd01.dev.local/api/admin/extension/vimServer/158f73ec-a999-4332-8250-f4dd5e6c4971/importVmAsVApp
27
28XML Document Body:
29<xml version="1.0" encoding="UTF-8">
30<ImportVmAsVAppParams xmlns="http://www.vmware.com/vcloud/extension/v1.5" name="testvm01" sourceMove="true">
31 <VmMoRef>vm-111</VmMoRef>
32 <Vdc href="https://vcd01.dev.local/api/admin/vdc/b21c92fa-1a6f-42a9-8c1e-ef0947c7be76" />
33</ImportVmAsVAppParams>
34
35Content-Type: application/vnd.vmware.admin.importVmAsVAppParams+xml
36
37Would you like to submit this API request to live import this VM? (y or n) (or quit to exit): y
38Making request to live import VM testvm01...
39Response was:
40<xml version="1.0" encoding="UTF-8">
41<VApp xmlns="http://www.vmware.com/vcloud/v1.5" ovfDescriptorUploaded="true" deployed="false" status="0" name="testvm01" id="urn:vcloud:vapp:ff1a9021-2c21-4378-99c7-b77bdaf3e9e6" href="https://vcd01.ndev.local/api/vApp/vapp-ff1a9021-2c21-4378-99c7-b77bdaf3e9e6" type="application/vnd.vmware.vcloud.vApp+xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://vcd01.dev.local/api/v1.5/schema/master.xsd">
42 <Link rel="down" href="https://vcd01.dev.local/api/network/251f72a8-19b5-4e7d-94ba-0523ee919cd9" name="VM Network" type="application/vnd.vmware.vcloud.vAppNetwork+xml" />
43 <Link rel="down" href="https://vcd01.dev.local/api/vApp/vapp-ff1a9021-2c21-4378-99c7-b77bdaf3e9e6/controlAccess/" type="application/vnd.vmware.vcloud.controlAccess+xml" />
44 <Link rel="up" href="https://vcd01.dev.local/api/vdc/b21c92fa-1a6f-42a9-8c1e-ef0947c7be76" type="application/vnd.vmware.vcloud.vdc+xml" />
45 <Link rel="down" href="https://vcd01.dev.local/api/vApp/vapp-ff1a9021-2c21-4378-99c7-b77bdaf3e9e6/owner" type="application/vnd.vmware.vcloud.owner+xml" />
46 <Link rel="down" href="https://vcd01.dev.local/api/vApp/vapp-ff1a9021-2c21-4378-99c7-b77bdaf3e9e6/metadata" type="application/vnd.vmware.vcloud.metadata+xml" />
47 <Link rel="ovf" href="https://vcd01.dev.local/api/vApp/vapp-ff1a9021-2c21-4378-99c7-b77bdaf3e9e6/ovf" type="text/xml" />
48 <Link rel="down" href="https://vcd01.dev.local/api/vApp/vapp-ff1a9021-2c21-4378-99c7-b77bdaf3e9e6/productSections/" type="application/vnd.vmware.vcloud.productSections+xml" />
49 <Tasks>
50 <Task cancelRequested="false" expiryTime="2016-10-31T11:27:25.312+13:00" operation="Importing Virtual Application testvm01(ff1a9021-2c21-4378-99c7-b77bdaf3e9e6)"
51operationName="importSingletonVapp" serviceNamespace="com.vmware.vcloud" startTime="2016-08-02T11:27:25.312+12:00" status="queued" name="task" id="urn:vcloud:task:37576f8c-0d39-444c-8842-81436ddb421e" href="https://vcd01.dev.local/api/task/37576f8c-0d39-444c-8842-81436ddb421e" type="application/vnd.vmware.vcloud.task+xml">
52 <Owner href="https://vcd01.dev.local/api/vApp/vapp-ff1a9021-2c21-4378-99c7-b77bdaf3e9e6" name="testvm01" type="application/vnd.vmware.vcloud.vApp+xml" />
53 <User href="https://vcd01.dev.local/api/admin/user/fa7fb40e-648c-4787-ad0f-711dcc315261" name="system" type="application/vnd.vmware.admin.user+xml" />
54<Organization href="https://vcd01.dev.local/api/org/3f46b162-f794-4d9e-8fa1-6ca1ee7b6377" name="Lab" type="application/vnd.vmware.vcloud.org+xml" />
55 <Progress>1</Progress>
56 <Details />
57 </Task>
58 </Tasks>
59 <DateCreated>2016-08-02T11:27:25.079+12:00</DateCreated>
60 <Owner type="application/vnd.vmware.vcloud.owner+xml">
61 <User href="https://vcd01.dev.local/api/admin/user/1545cb33-9151-43e2-a156-9d20e3b966c0" name="system" type="application/vnd.vmware.admin.user+xml" />
62 </Owner>
63 <InMaintenanceMode>false</InMaintenanceMode>
64</VApp>