første xml update
[virt-orchestrator.git] / vFLOWER / content / Actions / com.vmware.library.vc.vm.spec / getRelocateSpec.action.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <dunes-script-module name="getRelocateSpec" result-type="Any" api-version="3.1.0" id="a12e3fb9-94f1-4c99-9e3b-709e44a639cc" version="0.2.1" allowed-operations="fv">
3     <description>Specification for moving or copying a virtual machine to a different datastore or host.</description>
4
5     <param n="datastore" t="VC:Datastore">[optional] The datastore where the virtual machine should be located. If not specified, the current datastore is used</param>
6
7     <param n="disk" t="Array/Any">[optional] Array of VirtualMachineRelocateSpecDiskLocator: An optional list that allows specifying the datastore location for each virtual disk.</param>
8
9     <param n="host" t="VC:HostSystem">[optional] The target host for the virtual machine.</param>
10
11     <param n="pool" t="VC:ResourcePool">[optional] The resource pool to which this virtual machine should be attached.</param>
12
13     <param n="transform" t="VC:VirtualMachineRelocateTransformation">[optional] Transformation to perform on the disks.</param>
14
15     <script encoded="false">
16 try {
17         simpleCheckParams();
18         consistencyCheckParams();
19         var relocateSpec = new VcVirtualMachineRelocateSpec();
20         affectParams();
21         return relocateSpec;
22 }
23 catch (ex) {
24         throw "Unable to create VcVirtualMachineRelocateSpec: " + ex;
25 }
26
27 function consistencyCheckParams() {
28         //if resource pool is not specified, current host is used. 
29         if (pool == null &amp;&amp; host == null) return; // throw "pool and host cannot be all two set to null";
30         if (pool == null) {
31                 // host is not null
32                 pool = host.parent.resourcePool;
33                 checkDatastoreAccessOkFromHost(host);
34         }
35         else {
36                 cluster = pool.parent;
37                 while (! (cluster instanceof VcComputeResource) &amp;&amp; ! (cluster instanceof VcClusterComputeResource)) {
38                         cluster = cluster.parent;
39                 }
40                 //if resource pool is specified, and the target pool represents a stand-alone host, the host is used. 
41                 if (cluster instanceof VcComputeResource) {
42                         if (host != null &amp;&amp; (cluster != host.parent)) {
43                                 throw "pool and host do not represent the same compute resource";
44                         }
45                 }
46                 else if (cluster instanceof VcClusterComputeResource) {
47                         if (cluster.configuration.drsConfig.enabled ) {
48                                 //if resource pool is specified, and the target pool represents a DRS-enabled cluster, a host selected by DRS is used. 
49                                 if (host != null &amp;&amp; (cluster != host.parent)) {
50                                         throw "pool and host do not represent the same compute resource";                                               
51                                 }
52                         }
53                         else {
54                         //if resource pool is specified and the target pool represents a cluster without DRS enabled, an InvalidArgument exception be thrown.   
55                                 if (host == null) {
56                                         throw "pool is in a cluster without drs. You must define host";
57                                 }
58                         }
59                 }
60         }
61 }
62
63 function checkDatastoreAccessOkFromHost(myHost) {
64         var allDS = myHost.datastore;
65         var found = false;
66         
67         if (datastore == null) {
68                 return;
69         }
70         
71         for (var i in allDS) {
72                 if (allDS[i] == datastore) {
73                         found = true;
74                         break;
75                 }
76         }
77         if (found == false) {
78                 var hostName = myHost == null ? "Unknown Host" : myHost.name;
79                 var datastoreName = datastore == null ? "Unknown Datastore" : datastore.name;
80                 throw "host " + hostName + " have no access to datastore " + datastoreName;
81         }
82 }
83
84 function checkDatastoreAccessOkFromCluster(myCluster) {
85         var allDS = myCluster.datastore;
86         var found = false;
87         
88         if (datastore == null) {
89                 return;
90         }
91         
92         for (var i in allDS) {
93                 if (allDS[i] == datastore) {
94                         found = true;
95                         break;
96                 }
97         }
98         if (found == false) {
99                 var clusterName = myCluster == null ? "Unknown Cluster" : myCluster.name;
100                 var datastoreName = datastore == null ? "Unknown Datastore" : datastore.name;           
101                 throw "cluster " + clusterName + " have no access to datastore " + datastoreName;
102         }
103 }
104
105 function affectParams() {
106         if (datastore != null)
107                 relocateSpec.datastore = datastore.reference;
108         if (disk != null &amp;&amp; disk.length &gt; 0) 
109                 relocateSpec.disk = disk;
110         if (host != null)
111                 relocateSpec.host = host.reference;
112         if (pool != null)
113                 relocateSpec.pool = pool.reference;
114         if (transform != null)
115                 relocateSpec.transform = VcVirtualMachineRelocateTransformation.fromString(transform.name);
116 }
117
118
119 function simpleCheckParams() {
120         if (disk != null) {
121                 for (var i in disk) {
122                         if ((disk[i] instanceof VcVirtualMachineRelocateSpecDiskLocator) == false) {
123                                 throw "disk must be of type 'Array of VcVirtualMachineRelocateSpecDiskLocator'";
124                         }
125                 }
126         }
127 }
128     </script>
129 </dunes-script-module>