File Coverage

lib/Net/CloudStack/API.pm
Criterion Covered Total %
statement 16 18 88.8
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 22 24 91.6


line stmt bran cond sub pod time code
1             package Net::CloudStack::API;
2              
3             # ABSTRACT: Basic request and response handling for calls to a CloudStack service.
4              
5             ## no critic qw( ValuesAndExpressions::RestrictLongStrings ClassHierarchies::ProhibitAutoloading )
6             ## no critic qw( ValuesAndExpressions::ProhibitAccessOfPrivateData )
7              
8              
9 1     1   50419 use 5.006;
  1         3  
  1         53  
10 1     1   7 use strict;
  1         3  
  1         37  
11 1     1   5 use warnings;
  1         2  
  1         33  
12 1     1   963 use namespace::autoclean;
  1         27056  
  1         7  
13              
14             our $VERSION = '0.02'; # VERSION
15              
16 1     1   167 use Carp;
  1         2  
  1         64  
17 1     1   450 use Net::CloudStack;
  0            
  0            
18             use Params::Validate ':all';
19             use Scalar::Util 'blessed';
20             use Sub::Exporter;
21              
22             { # Begin general hiding
23              
24             ##############################################################################
25             # Base structure
26              
27             my $command = {
28             addCluster => {
29             description => 'Adds a new cluster',
30             isAsync => 'false',
31             level => 1,
32             request => {
33             optional => {
34             allocationstate => 'Allocation state of this cluster for allocation of new resources',
35             password => 'the password for the host',
36             podid => 'the Pod ID for the host',
37             url => 'the URL',
38             username => 'the username for the cluster',
39             },
40             required => {
41             clustername => 'the cluster name',
42             clustertype => 'type of the cluster: CloudManaged, ExternalManaged',
43             hypervisor => 'hypervisor type of the cluster: XenServer,KVM,VMware,Hyperv,BareMetal,Simulator',
44             zoneid => 'the Zone ID for the cluster',
45             },
46             },
47             response => {
48             allocationstate => 'the allocation state of the cluster',
49             clustertype => 'the type of the cluster',
50             hypervisortype => 'the hypervisor type of the cluster',
51             id => 'the cluster ID',
52             managedstate => 'whether this cluster is managed by cloudstack',
53             name => 'the cluster name',
54             podid => 'the Pod ID of the cluster',
55             podname => 'the Pod name of the cluster',
56             zoneid => 'the Zone ID of the cluster',
57             zonename => 'the Zone name of the cluster',
58             },
59             section => 'Host',
60             },
61             addExternalFirewall => {
62             description => 'Adds an external firewall appliance',
63             isAsync => 'false',
64             level => 1,
65             request => {
66             required => {
67             password => 'Password of the external firewall appliance.',
68             url => 'URL of the external firewall appliance.',
69             username => 'Username of the external firewall appliance.',
70             zoneid => 'Zone in which to add the external firewall appliance.',
71             },
72             },
73             response => {
74             id => 'the ID of the external firewall',
75             ipaddress => 'the management IP address of the external firewall',
76             numretries => 'the number of times to retry requests to the external firewall',
77             privateinterface => 'the private interface of the external firewall',
78             privatezone => 'the private security zone of the external firewall',
79             publicinterface => 'the public interface of the external firewall',
80             publiczone => 'the public security zone of the external firewall',
81             timeout => 'the timeout (in seconds) for requests to the external firewall',
82             usageinterface => 'the usage interface of the external firewall',
83             username => 'the username that\'s used to log in to the external firewall',
84             zoneid => 'the zone ID of the external firewall',
85             },
86             section => 'ExternalFirewall',
87             },
88             addExternalLoadBalancer => {
89             description => 'Adds an external load balancer appliance.',
90             isAsync => 'false',
91             level => 1,
92             request => {
93             required => {
94             password => 'Password of the external load balancer appliance.',
95             url => 'URL of the external load balancer appliance.',
96             username => 'Username of the external load balancer appliance.',
97             zoneid => 'Zone in which to add the external load balancer appliance.',
98             },
99             },
100             response => {
101             id => 'the ID of the external load balancer',
102             inline => 'configures the external load balancer to be inline with an external firewall',
103             ipaddress => 'the management IP address of the external load balancer',
104             numretries => 'the number of times to retry requests to the external load balancer',
105             privateinterface => 'the private interface of the external load balancer',
106             publicinterface => 'the public interface of the external load balancer',
107             username => 'the username that\'s used to log in to the external load balancer',
108             zoneid => 'the zone ID of the external load balancer',
109             },
110             section => 'ExternalLoadBalancer',
111             },
112             addHost => {
113             description => 'Adds a new host.',
114             isAsync => 'false',
115             level => 3,
116             request => {
117             optional => {
118             allocationstate => 'Allocation state of this Host for allocation of new resources',
119             clusterid => 'the cluster ID for the host',
120             clustername => 'the cluster name for the host',
121             hosttags => 'list of tags to be added to the host',
122             podid => 'the Pod ID for the host',
123             },
124             required => {
125             hypervisor => 'hypervisor type of the host',
126             password => 'the password for the host',
127             url => 'the host URL',
128             username => 'the username for the host',
129             zoneid => 'the Zone ID for the host',
130             },
131             },
132             response => {
133             allocationstate => 'the allocation state of the host',
134             averageload => 'the cpu average load on the host',
135             capabilities => 'capabilities of the host',
136             clusterid => 'the cluster ID of the host',
137             clustername => 'the cluster name of the host',
138             clustertype => 'the cluster type of the cluster that host belongs to',
139             cpuallocated => 'the amount of the host\'s CPU currently allocated',
140             cpunumber => 'the CPU number of the host',
141             cpuspeed => 'the CPU speed of the host',
142             cpuused => 'the amount of the host\'s CPU currently used',
143             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
144             created => 'the date and time the host was created',
145             disconnected => 'true if the host is disconnected. False otherwise.',
146             disksizeallocated => 'the host\'s currently allocated disk size',
147             disksizetotal => 'the total disk size of the host',
148             events => 'events available for the host',
149             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
150             hosttags => 'comma-separated list of tags for the host',
151             hypervisor => 'the host hypervisor',
152             id => 'the ID of the host',
153             ipaddress => 'the IP address of the host',
154             islocalstorageactive => 'true if local storage is active, false otherwise',
155             jobid =>
156             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
157             jobstatus => 'shows the current pending asynchronous job status',
158             lastpinged => 'the date and time the host was last pinged',
159             managementserverid => 'the management server ID of the host',
160             memoryallocated => 'the amount of the host\'s memory currently allocated',
161             memorytotal => 'the memory total of the host',
162             memoryused => 'the amount of the host\'s memory currently used',
163             name => 'the name of the host',
164             networkkbsread => 'the incoming network traffic on the host',
165             networkkbswrite => 'the outgoing network traffic on the host',
166             oscategoryid => 'the OS category ID of the host',
167             oscategoryname => 'the OS category name of the host',
168             podid => 'the Pod ID of the host',
169             podname => 'the Pod name of the host',
170             removed => 'the date and time the host was removed',
171             state => 'the state of the host',
172             type => 'the host type',
173             version => 'the host version',
174             zoneid => 'the Zone ID of the host',
175             zonename => 'the Zone name of the host',
176             },
177             section => 'Host',
178             },
179             addNetworkDevice => {
180             description => 'List external load balancer appliances.',
181             isAsync => 'false',
182             level => 1,
183             request => {
184             optional => {
185             networkdeviceparameterlist => 'parameters for network device',
186             networkdevicetype =>
187             'Network device type, now supports ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer',
188             },
189             },
190             response => { id => 'the ID of the network device' },
191             section => 'NetworkDevices',
192             },
193             addSecondaryStorage => {
194             description => 'Adds secondary storage.',
195             isAsync => 'false',
196             level => 1,
197             request => {
198             optional => { zoneid => 'the Zone ID for the secondary storage' },
199             required => { url => 'the URL for the secondary storage' },
200             },
201             response => {
202             allocationstate => 'the allocation state of the host',
203             averageload => 'the cpu average load on the host',
204             capabilities => 'capabilities of the host',
205             clusterid => 'the cluster ID of the host',
206             clustername => 'the cluster name of the host',
207             clustertype => 'the cluster type of the cluster that host belongs to',
208             cpuallocated => 'the amount of the host\'s CPU currently allocated',
209             cpunumber => 'the CPU number of the host',
210             cpuspeed => 'the CPU speed of the host',
211             cpuused => 'the amount of the host\'s CPU currently used',
212             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
213             created => 'the date and time the host was created',
214             disconnected => 'true if the host is disconnected. False otherwise.',
215             disksizeallocated => 'the host\'s currently allocated disk size',
216             disksizetotal => 'the total disk size of the host',
217             events => 'events available for the host',
218             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
219             hosttags => 'comma-separated list of tags for the host',
220             hypervisor => 'the host hypervisor',
221             id => 'the ID of the host',
222             ipaddress => 'the IP address of the host',
223             islocalstorageactive => 'true if local storage is active, false otherwise',
224             jobid =>
225             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
226             jobstatus => 'shows the current pending asynchronous job status',
227             lastpinged => 'the date and time the host was last pinged',
228             managementserverid => 'the management server ID of the host',
229             memoryallocated => 'the amount of the host\'s memory currently allocated',
230             memorytotal => 'the memory total of the host',
231             memoryused => 'the amount of the host\'s memory currently used',
232             name => 'the name of the host',
233             networkkbsread => 'the incoming network traffic on the host',
234             networkkbswrite => 'the outgoing network traffic on the host',
235             oscategoryid => 'the OS category ID of the host',
236             oscategoryname => 'the OS category name of the host',
237             podid => 'the Pod ID of the host',
238             podname => 'the Pod name of the host',
239             removed => 'the date and time the host was removed',
240             state => 'the state of the host',
241             type => 'the host type',
242             version => 'the host version',
243             zoneid => 'the Zone ID of the host',
244             zonename => 'the Zone name of the host',
245             },
246             section => 'Host',
247             },
248             addTrafficMonitor => {
249             description => 'Adds Traffic Monitor Host for Direct Network Usage',
250             isAsync => 'false',
251             level => 1,
252             request => {
253             required => {
254             url => 'URL of the traffic monitor Host',
255             zoneid => 'Zone in which to add the external firewall appliance.',
256             },
257             },
258             response => {
259             id => 'the ID of the external firewall',
260             ipaddress => 'the management IP address of the external firewall',
261             numretries => 'the number of times to retry requests to the external firewall',
262             privateinterface => 'the private interface of the external firewall',
263             privatezone => 'the private security zone of the external firewall',
264             publicinterface => 'the public interface of the external firewall',
265             publiczone => 'the public security zone of the external firewall',
266             timeout => 'the timeout (in seconds) for requests to the external firewall',
267             usageinterface => 'the usage interface of the external firewall',
268             username => 'the username that\'s used to log in to the external firewall',
269             zoneid => 'the zone ID of the external firewall',
270             },
271             section => 'TrafficMonitor',
272             },
273             addVpnUser => {
274             description => 'Adds vpn users',
275             isAsync => 'true',
276             level => 15,
277             request => {
278             optional => {
279             account => 'an optional account for the vpn user. Must be used with domainId.',
280             domainid =>
281             'an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.',
282             },
283             required => { password => 'password for the username', username => 'username for the vpn user', },
284             },
285             response => {
286             account => 'the account of the remote access vpn',
287             domainid => 'the domain id of the account of the remote access vpn',
288             domainname => 'the domain name of the account of the remote access vpn',
289             id => 'the vpn userID',
290             username => 'the username of the vpn user',
291             },
292             section => 'VPN',
293             },
294             assignToLoadBalancerRule => {
295             description => 'Assigns virtual machine or a list of virtual machines to a load balancer rule.',
296             isAsync => 'true',
297             level => 15,
298             request => {
299             required => {
300             id => 'the ID of the load balancer rule',
301             virtualmachineids =>
302             'the list of IDs of the virtual machine that are being assigned to the load balancer rule(i.e. virtualMachineIds=1,2,3)',
303             },
304             },
305             response => {
306             displaytext => 'any text associated with the success or failure',
307             success => 'true if operation is executed successfully',
308             },
309             section => 'LoadBalancer',
310             },
311             associateIpAddress => {
312             description => 'Acquires and associates a public IP to an account.',
313             isAsync => 'true',
314             level => 15,
315             request => {
316             optional => {
317             account => 'the account to associate with this IP address',
318             domainid => 'the ID of the domain to associate with this IP address',
319             networkid => 'The network this ip address should be associated to.',
320             },
321             required => { zoneid => 'the ID of the availability zone you want to acquire an public IP address from', },
322             },
323             response => {
324             account => 'the account the public IP address is associated with',
325             allocated => 'date the public IP address was acquired',
326             associatednetworkid => 'the ID of the Network associated with the IP address',
327             domain => 'the domain the public IP address is associated with',
328             domainid => 'the domain ID the public IP address is associated with',
329             forvirtualnetwork => 'the virtual network for the IP address',
330             id => 'public IP address id',
331             ipaddress => 'public IP address',
332             issourcenat => 'true if the IP address is a source nat address, false otherwise',
333             isstaticnat => 'true if this ip is for static nat, false otherwise',
334             jobid =>
335             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
336             jobstatus => 'shows the current pending asynchronous job status',
337             networkid => 'the ID of the Network where ip belongs to',
338             state => 'State of the ip address. Can be: Allocatin, Allocated and Releasing',
339             virtualmachinedisplayname =>
340             'virutal machine display name the ip address is assigned to (not null only for static nat Ip)',
341             virtualmachineid => 'virutal machine id the ip address is assigned to (not null only for static nat Ip)',
342             virtualmachinename => 'virutal machine name the ip address is assigned to (not null only for static nat Ip)',
343             vlanid => 'the ID of the VLAN associated with the IP address',
344             vlanname => 'the VLAN associated with the IP address',
345             zoneid => 'the ID of the zone the public IP address belongs to',
346             zonename => 'the name of the zone the public IP address belongs to',
347             },
348             section => 'Address',
349             },
350             associateLun => {
351             description => 'Associate a LUN with a guest IQN',
352             isAsync => 'false',
353             level => 15,
354             request => { required => { iqn => 'Guest IQN to which the LUN associate.', name => 'LUN name.' }, },
355             response => { id => 'the LUN id', ipaddress => 'the IP address of', targetiqn => 'the target IQN', },
356             section => 'NetAppIntegration',
357             },
358             attachIso => {
359             description => 'Attaches an ISO to a virtual machine.',
360             isAsync => 'true',
361             level => 15,
362             request =>
363             { required => { id => 'the ID of the ISO file', virtualmachineid => 'the ID of the virtual machine', }, },
364             response => {
365             'account' => 'the account associated with the virtual machine',
366             'cpunumber' => 'the number of cpu this virtual machine is running with',
367             'cpuspeed' => 'the speed of each cpu',
368             'cpuused' => 'the amount of the vm\'s CPU currently used',
369             'created' => 'the date when this virtual machine was created',
370             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
371             'domain' => 'the name of the domain in which the virtual machine exists',
372             'domainid' => 'the ID of the domain in which the virtual machine exists',
373             'forvirtualnetwork' => 'the virtual network for the service offering',
374             'group' => 'the group name of the virtual machine',
375             'groupid' => 'the group ID of the virtual machine',
376             'guestosid' => 'Os type ID of the virtual machine',
377             'haenable' => 'true if high-availability is enabled, false otherwise',
378             'hostid' => 'the ID of the host for the virtual machine',
379             'hostname' => 'the name of the host for the virtual machine',
380             'hypervisor' => 'the hypervisor on which the template runs',
381             'id' => 'the ID of the virtual machine',
382             'ipaddress' => 'the ip address of the virtual machine',
383             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
384             'isoid' => 'the ID of the ISO attached to the virtual machine',
385             'isoname' => 'the name of the ISO attached to the virtual machine',
386             'jobid' =>
387             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
388             'jobstatus' => 'shows the current pending asynchronous job status',
389             'memory' => 'the memory allocated for the virtual machine',
390             'name' => 'the name of the virtual machine',
391             'networkkbsread' => 'the incoming network traffic on the vm',
392             'networkkbswrite' => 'the outgoing network traffic on the host',
393             'nic(*)' => 'the list of nics associated with vm',
394             'password' => 'the password (if exists) of the virtual machine',
395             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
396             'rootdeviceid' => 'device ID of the root volume',
397             'rootdevicetype' => 'device type of the root volume',
398             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
399             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
400             'serviceofferingname' => 'the name of the service offering of the virtual machine',
401             'state' => 'the state of the virtual machine',
402             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
403             'templateid' =>
404             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
405             'templatename' => 'the name of the template for the virtual machine',
406             'zoneid' => 'the ID of the availablility zone for the virtual machine',
407             'zonename' => 'the name of the availability zone for the virtual machine',
408             },
409             section => 'ISO',
410             },
411             attachVolume => {
412             description => 'Attaches a disk volume to a virtual machine.',
413             isAsync => 'true',
414             level => 15,
415             request => {
416             optional => {
417             deviceid =>
418             'the ID of the device to map the volume to within the guest OS. If no deviceId is passed in, the next available deviceId will be chosen. Possible values for a Linux OS are:* 1 - /dev/xvdb* 2 - /dev/xvdc* 4 - /dev/xvde* 5 - /dev/xvdf* 6 - /dev/xvdg* 7 - /dev/xvdh* 8 - /dev/xvdi* 9 - /dev/xvdj',
419             },
420             required => { id => 'the ID of the disk volume', virtualmachineid => 'the ID of the virtual machine', },
421             },
422             response => {
423             account => 'the account associated with the disk volume',
424             attached => 'the date the volume was attached to a VM instance',
425             created => 'the date the disk volume was created',
426             destroyed => 'the boolean state of whether the volume is destroyed or not',
427             deviceid =>
428             'the ID of the device on user vm the volume is attahed to. This tag is not returned when the volume is detached.',
429             diskofferingdisplaytext => 'the display text of the disk offering',
430             diskofferingid => 'ID of the disk offering',
431             diskofferingname => 'name of the disk offering',
432             domain => 'the domain associated with the disk volume',
433             domainid => 'the ID of the domain associated with the disk volume',
434             hypervisor => 'Hypervisor the volume belongs to',
435             id => 'ID of the disk volume',
436             isextractable => 'true if the volume is extractable, false otherwise',
437             jobid =>
438             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
439             jobstatus => 'shows the current pending asynchronous job status',
440             name => 'name of the disk volume',
441             serviceofferingdisplaytext => 'the display text of the service offering for root disk',
442             serviceofferingid => 'ID of the service offering for root disk',
443             serviceofferingname => 'name of the service offering for root disk',
444             size => 'size of the disk volume',
445             snapshotid => 'ID of the snapshot from which this volume was created',
446             state => 'the state of the disk volume',
447             storage => 'name of the primary storage hosting the disk volume',
448             storagetype => 'shared or local storage',
449             type => 'type of the disk volume (ROOT or DATADISK)',
450             virtualmachineid => 'id of the virtual machine',
451             vmdisplayname => 'display name of the virtual machine',
452             vmname => 'name of the virtual machine',
453             vmstate => 'state of the virtual machine',
454             zoneid => 'ID of the availability zone',
455             zonename => 'name of the availability zone',
456             },
457             section => 'Volume',
458             },
459             authorizeSecurityGroupIngress => {
460             description => 'Authorizes a particular ingress rule for this security group',
461             isAsync => 'true',
462             level => 15,
463             request => {
464             optional => {
465             account => 'an optional account for the virtual machine. Must be used with domainId.',
466             cidrlist => 'the cidr list associated',
467             domainid =>
468             'an optional domainId for the security group. If the account parameter is used, domainId must also be used.',
469             endport => 'end port for this ingress rule',
470             icmpcode => 'error code for this icmp message',
471             icmptype => 'type of the icmp message being sent',
472             protocol => 'TCP is default. UDP is the other supported protocol',
473             securitygroupid => 'The ID of the security group. Mutually exclusive with securityGroupName parameter',
474             securitygroupname => 'The name of the security group. Mutually exclusive with securityGroupName parameter',
475             startport => 'start port for this ingress rule',
476             usersecuritygrouplist => 'user to security group mapping',
477             },
478             },
479             response => {
480             account => 'account owning the ingress rule',
481             cidr => 'the CIDR notation for the base IP address of the ingress rule',
482             endport => 'the ending IP of the ingress rule',
483             icmpcode => 'the code for the ICMP message response',
484             icmptype => 'the type of the ICMP message response',
485             protocol => 'the protocol of the ingress rule',
486             ruleid => 'the id of the ingress rule',
487             securitygroupname => 'security group name',
488             startport => 'the starting IP of the ingress rule',
489             },
490             section => 'SecurityGroup',
491             },
492             cancelHostMaintenance => {
493             description => 'Cancels host maintenance.',
494             isAsync => 'true',
495             level => 1,
496             request => { required => { id => 'the host ID' } },
497             response => {
498             allocationstate => 'the allocation state of the host',
499             averageload => 'the cpu average load on the host',
500             capabilities => 'capabilities of the host',
501             clusterid => 'the cluster ID of the host',
502             clustername => 'the cluster name of the host',
503             clustertype => 'the cluster type of the cluster that host belongs to',
504             cpuallocated => 'the amount of the host\'s CPU currently allocated',
505             cpunumber => 'the CPU number of the host',
506             cpuspeed => 'the CPU speed of the host',
507             cpuused => 'the amount of the host\'s CPU currently used',
508             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
509             created => 'the date and time the host was created',
510             disconnected => 'true if the host is disconnected. False otherwise.',
511             disksizeallocated => 'the host\'s currently allocated disk size',
512             disksizetotal => 'the total disk size of the host',
513             events => 'events available for the host',
514             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
515             hosttags => 'comma-separated list of tags for the host',
516             hypervisor => 'the host hypervisor',
517             id => 'the ID of the host',
518             ipaddress => 'the IP address of the host',
519             islocalstorageactive => 'true if local storage is active, false otherwise',
520             jobid =>
521             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
522             jobstatus => 'shows the current pending asynchronous job status',
523             lastpinged => 'the date and time the host was last pinged',
524             managementserverid => 'the management server ID of the host',
525             memoryallocated => 'the amount of the host\'s memory currently allocated',
526             memorytotal => 'the memory total of the host',
527             memoryused => 'the amount of the host\'s memory currently used',
528             name => 'the name of the host',
529             networkkbsread => 'the incoming network traffic on the host',
530             networkkbswrite => 'the outgoing network traffic on the host',
531             oscategoryid => 'the OS category ID of the host',
532             oscategoryname => 'the OS category name of the host',
533             podid => 'the Pod ID of the host',
534             podname => 'the Pod name of the host',
535             removed => 'the date and time the host was removed',
536             state => 'the state of the host',
537             type => 'the host type',
538             version => 'the host version',
539             zoneid => 'the Zone ID of the host',
540             zonename => 'the Zone name of the host',
541             },
542             section => 'Host',
543             },
544             cancelStorageMaintenance => {
545             description => 'Cancels maintenance for primary storage',
546             isAsync => 'true',
547             level => 1,
548             request => { required => { id => 'the primary storage ID' } },
549             response => {
550             clusterid => 'the ID of the cluster for the storage pool',
551             clustername => 'the name of the cluster for the storage pool',
552             created => 'the date and time the storage pool was created',
553             disksizeallocated => 'the host\'s currently allocated disk size',
554             disksizetotal => 'the total disk size of the storage pool',
555             id => 'the ID of the storage pool',
556             ipaddress => 'the IP address of the storage pool',
557             jobid =>
558             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the storage pool',
559             jobstatus => 'shows the current pending asynchronous job status',
560             name => 'the name of the storage pool',
561             path => 'the storage pool path',
562             podid => 'the Pod ID of the storage pool',
563             podname => 'the Pod name of the storage pool',
564             state => 'the state of the storage pool',
565             tags => 'the tags for the storage pool',
566             type => 'the storage pool type',
567             zoneid => 'the Zone ID of the storage pool',
568             zonename => 'the Zone name of the storage pool',
569             },
570             section => 'StoragePools',
571             },
572             changeServiceForRouter => {
573             description => 'Upgrades domain router to a new service offering',
574             isAsync => 'false',
575             level => 7,
576             request => {
577             required => {
578             id => 'The ID of the router',
579             serviceofferingid => 'the service offering ID to apply to the domain router',
580             },
581             },
582             response => {
583             account => 'the account associated with the router',
584             created => 'the date and time the router was created',
585             dns1 => 'the first DNS for the router',
586             dns2 => 'the second DNS for the router',
587             domain => 'the domain associated with the router',
588             domainid => 'the domain ID associated with the router',
589             gateway => 'the gateway for the router',
590             guestipaddress => 'the guest IP address for the router',
591             guestmacaddress => 'the guest MAC address for the router',
592             guestnetmask => 'the guest netmask for the router',
593             guestnetworkid => 'the ID of the corresponding guest network',
594             hostid => 'the host ID for the router',
595             hostname => 'the hostname for the router',
596             id => 'the id of the router',
597             isredundantrouter => 'if this router is an redundant virtual router',
598             linklocalip => 'the link local IP address for the router',
599             linklocalmacaddress => 'the link local MAC address for the router',
600             linklocalnetmask => 'the link local netmask for the router',
601             linklocalnetworkid => 'the ID of the corresponding link local network',
602             name => 'the name of the router',
603             networkdomain => 'the network domain for the router',
604             podid => 'the Pod ID for the router',
605             publicip => 'the public IP address for the router',
606             publicmacaddress => 'the public MAC address for the router',
607             publicnetmask => 'the public netmask for the router',
608             publicnetworkid => 'the ID of the corresponding public network',
609             redundantstate => 'the state of redundant virtual router',
610             serviceofferingid => 'the ID of the service offering of the virtual machine',
611             serviceofferingname => 'the name of the service offering of the virtual machine',
612             state => 'the state of the router',
613             templateid => 'the template ID for the router',
614             zoneid => 'the Zone ID for the router',
615             zonename => 'the Zone name for the router',
616             },
617             section => 'Router',
618             },
619             changeServiceForVirtualMachine => {
620             description =>
621             'Changes the service offering for a virtual machine. The virtual machine must be in a \'Stopped\' state for this command to take effect.',
622             isAsync => 'false',
623             level => 15,
624             request => {
625             required => {
626             id => 'The ID of the virtual machine',
627             serviceofferingid => 'the service offering ID to apply to the virtual machine',
628             },
629             },
630             response => {
631             'account' => 'the account associated with the virtual machine',
632             'cpunumber' => 'the number of cpu this virtual machine is running with',
633             'cpuspeed' => 'the speed of each cpu',
634             'cpuused' => 'the amount of the vm\'s CPU currently used',
635             'created' => 'the date when this virtual machine was created',
636             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
637             'domain' => 'the name of the domain in which the virtual machine exists',
638             'domainid' => 'the ID of the domain in which the virtual machine exists',
639             'forvirtualnetwork' => 'the virtual network for the service offering',
640             'group' => 'the group name of the virtual machine',
641             'groupid' => 'the group ID of the virtual machine',
642             'guestosid' => 'Os type ID of the virtual machine',
643             'haenable' => 'true if high-availability is enabled, false otherwise',
644             'hostid' => 'the ID of the host for the virtual machine',
645             'hostname' => 'the name of the host for the virtual machine',
646             'hypervisor' => 'the hypervisor on which the template runs',
647             'id' => 'the ID of the virtual machine',
648             'ipaddress' => 'the ip address of the virtual machine',
649             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
650             'isoid' => 'the ID of the ISO attached to the virtual machine',
651             'isoname' => 'the name of the ISO attached to the virtual machine',
652             'jobid' =>
653             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
654             'jobstatus' => 'shows the current pending asynchronous job status',
655             'memory' => 'the memory allocated for the virtual machine',
656             'name' => 'the name of the virtual machine',
657             'networkkbsread' => 'the incoming network traffic on the vm',
658             'networkkbswrite' => 'the outgoing network traffic on the host',
659             'nic(*)' => 'the list of nics associated with vm',
660             'password' => 'the password (if exists) of the virtual machine',
661             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
662             'rootdeviceid' => 'device ID of the root volume',
663             'rootdevicetype' => 'device type of the root volume',
664             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
665             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
666             'serviceofferingname' => 'the name of the service offering of the virtual machine',
667             'state' => 'the state of the virtual machine',
668             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
669             'templateid' =>
670             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
671             'templatename' => 'the name of the template for the virtual machine',
672             'zoneid' => 'the ID of the availablility zone for the virtual machine',
673             'zonename' => 'the name of the availability zone for the virtual machine',
674             },
675             section => 'VM',
676             },
677             copyIso => {
678             description => 'Copies a template from one zone to another.',
679             isAsync => 'true',
680             level => 15,
681             request => {
682             required => {
683             destzoneid => 'ID of the zone the template is being copied to.',
684             id => 'Template ID.',
685             sourcezoneid => 'ID of the zone the template is currently hosted on.',
686             },
687             },
688             response => {
689             account => 'the account name to which the template belongs',
690             accountid => 'the account id to which the template belongs',
691             bootable => 'true if the ISO is bootable, false otherwise',
692             checksum => 'checksum of the template',
693             created => 'the date this template was created',
694             crossZones => 'true if the template is managed across all Zones, false otherwise',
695             details => 'additional key/value details tied with template',
696             displaytext => 'the template display text',
697             domain => 'the name of the domain to which the template belongs',
698             domainid => 'the ID of the domain to which the template belongs',
699             format => 'the format of the template.',
700             hostid => 'the ID of the secondary storage host for the template',
701             hostname => 'the name of the secondary storage host for the template',
702             hypervisor => 'the hypervisor on which the template runs',
703             id => 'the template ID',
704             isextractable => 'true if the template is extractable, false otherwise',
705             isfeatured => 'true if this template is a featured template, false otherwise',
706             ispublic => 'true if this template is a public template, false otherwise',
707             isready => 'true if the template is ready to be deployed from, false otherwise.',
708             jobid =>
709             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
710             jobstatus => 'shows the current pending asynchronous job status',
711             name => 'the template name',
712             ostypeid => 'the ID of the OS type for this template.',
713             ostypename => 'the name of the OS type for this template.',
714             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
715             removed => 'the date this template was removed',
716             size => 'the size of the template',
717             sourcetemplateid => 'the template ID of the parent template if present',
718             status => 'the status of the template',
719             templatetag => 'the tag of this template',
720             templatetype => 'the type of the template',
721             zoneid => 'the ID of the zone for this template',
722             zonename => 'the name of the zone for this template',
723             },
724             section => 'ISO',
725             },
726             copyTemplate => {
727             description => 'Copies a template from one zone to another.',
728             isAsync => 'true',
729             level => 15,
730             request => {
731             required => {
732             destzoneid => 'ID of the zone the template is being copied to.',
733             id => 'Template ID.',
734             sourcezoneid => 'ID of the zone the template is currently hosted on.',
735             },
736             },
737             response => {
738             account => 'the account name to which the template belongs',
739             accountid => 'the account id to which the template belongs',
740             bootable => 'true if the ISO is bootable, false otherwise',
741             checksum => 'checksum of the template',
742             created => 'the date this template was created',
743             crossZones => 'true if the template is managed across all Zones, false otherwise',
744             details => 'additional key/value details tied with template',
745             displaytext => 'the template display text',
746             domain => 'the name of the domain to which the template belongs',
747             domainid => 'the ID of the domain to which the template belongs',
748             format => 'the format of the template.',
749             hostid => 'the ID of the secondary storage host for the template',
750             hostname => 'the name of the secondary storage host for the template',
751             hypervisor => 'the hypervisor on which the template runs',
752             id => 'the template ID',
753             isextractable => 'true if the template is extractable, false otherwise',
754             isfeatured => 'true if this template is a featured template, false otherwise',
755             ispublic => 'true if this template is a public template, false otherwise',
756             isready => 'true if the template is ready to be deployed from, false otherwise.',
757             jobid =>
758             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
759             jobstatus => 'shows the current pending asynchronous job status',
760             name => 'the template name',
761             ostypeid => 'the ID of the OS type for this template.',
762             ostypename => 'the name of the OS type for this template.',
763             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
764             removed => 'the date this template was removed',
765             size => 'the size of the template',
766             sourcetemplateid => 'the template ID of the parent template if present',
767             status => 'the status of the template',
768             templatetag => 'the tag of this template',
769             templatetype => 'the type of the template',
770             zoneid => 'the ID of the zone for this template',
771             zonename => 'the name of the zone for this template',
772             },
773             section => 'Template',
774             },
775             createAccount => {
776             description => 'Creates an account',
777             isAsync => 'false',
778             level => 3,
779             request => {
780             optional => {
781             account =>
782             'Creates the user under the specified account. If no account is specified, the username will be used as the account name.',
783             domainid => 'Creates the user under the specified domain.',
784             networkdomain => 'Network domain for the account\'s networks',
785             timezone =>
786             'Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.',
787             },
788             required => {
789             accounttype => 'Type of the account. Specify 0 for user, 1 for root admin, and 2 for domain admin',
790             email => 'email',
791             firstname => 'firstname',
792             lastname => 'lastname',
793             password =>
794             'Hashed password (Default is MD5). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.',
795             username => 'Unique username.',
796             },
797             },
798             response => {
799             account => 'the account name of the user',
800             accounttype => 'the account type of the user',
801             apikey => 'the api key of the user',
802             created => 'the date and time the user account was created',
803             domain => 'the domain name of the user',
804             domainid => 'the domain ID of the user',
805             email => 'the user email address',
806             firstname => 'the user firstname',
807             id => 'the user ID',
808             lastname => 'the user lastname',
809             secretkey => 'the secret key of the user',
810             state => 'the user state',
811             timezone => 'the timezone user was created in',
812             username => 'the user name',
813             },
814             section => 'Account',
815             },
816             createConfiguration => {
817             description => 'Adds configuration value',
818             isAsync => 'false',
819             level => 1,
820             request => {
821             optional =>
822             { description => 'the description of the configuration', value => 'the value of the configuration', },
823             required => {
824             category => 'component\'s category',
825             component => 'the component of the configuration',
826             instance => 'the instance of the configuration',
827             name => 'the name of the configuration',
828             },
829             },
830             response => {
831             category => 'the category of the configuration',
832             description => 'the description of the configuration',
833             name => 'the name of the configuration',
834             value => 'the value of the configuration',
835             },
836             section => 'Configuration',
837             },
838             createDiskOffering => {
839             description => 'Creates a disk offering.',
840             isAsync => 'false',
841             level => 1,
842             request => {
843             optional => {
844             customized => 'whether disk offering is custom or not',
845             disksize => 'size of the disk offering in GB',
846             domainid => 'the ID of the containing domain, null for public offerings',
847             tags => 'tags for the disk offering',
848             },
849             required =>
850             { displaytext => 'alternate display text of the disk offering', name => 'name of the disk offering', },
851             },
852             response => {
853             created => 'the date this disk offering was created',
854             disksize => 'the size of the disk offering in GB',
855             displaytext => 'an alternate display text of the disk offering.',
856             domain =>
857             'the domain name this disk offering belongs to. Ignore this information as it is not currently applicable.',
858             domainid =>
859             'the domain ID this disk offering belongs to. Ignore this information as it is not currently applicable.',
860             id => 'unique ID of the disk offering',
861             iscustomized => 'true if disk offering uses custom size, false otherwise',
862             name => 'the name of the disk offering',
863             tags => 'the tags for the disk offering',
864             },
865             section => 'DiskOffering',
866             },
867             createDomain => {
868             description => 'Creates a domain',
869             isAsync => 'false',
870             level => 1,
871             request => {
872             optional => {
873             networkdomain => 'Network domain for networks in the domain',
874             parentdomainid =>
875             'assigns new domain a parent domain by domain ID of the parent. If no parent domain is specied, the ROOT domain is assumed.',
876             },
877             required => { name => 'creates domain with this name' },
878             },
879             response => {
880             haschild => 'whether the domain has one or more sub-domains',
881             id => 'the ID of the domain',
882             level => 'the level of the domain',
883             name => 'the name of the domain',
884             networkdomain => 'the network domain',
885             parentdomainid => 'the domain ID of the parent domain',
886             parentdomainname => 'the domain name of the parent domain',
887             path => 'the path of the domain',
888             },
889             section => 'Domain',
890             },
891             createFirewallRule => {
892             description => 'Creates a firewall rule for a given ip address',
893             isAsync => 'true',
894             level => 15,
895             request => {
896             optional => {
897             cidrlist => 'the cidr list to forward traffic from',
898             endport => 'the ending port of firewall rule',
899             icmpcode => 'error code for this icmp message',
900             icmptype => 'type of the icmp message being sent',
901             startport => 'the starting port of firewall rule',
902             },
903             required => {
904             ipaddressid => 'the IP address id of the port forwarding rule',
905             protocol => 'the protocol for the firewall rule. Valid values are TCP/UDP/ICMP.',
906             },
907             },
908             response => {
909             cidrlist => 'the cidr list to forward traffic from',
910             endport => 'the ending port of firewall rule\'s port range',
911             icmpcode => 'error code for this icmp message',
912             icmptype => 'type of the icmp message being sent',
913             id => 'the ID of the firewall rule',
914             ipaddress => 'the public ip address for the port forwarding rule',
915             ipaddressid => 'the public ip address id for the port forwarding rule',
916             protocol => 'the protocol of the firewall rule',
917             startport => 'the starting port of firewall rule\'s port range',
918             state => 'the state of the rule',
919             },
920             section => 'Firewall',
921             },
922             createInstanceGroup => {
923             description => 'Creates a vm group',
924             isAsync => 'false',
925             level => 15,
926             request => {
927             optional => {
928             account =>
929             'the account of the instance group. The account parameter must be used with the domainId parameter.',
930             domainid => 'the domain ID of account owning the instance group',
931             },
932             required => { name => 'the name of the instance group' },
933             },
934             response => {
935             account => 'the account owning the instance group',
936             created => 'time and date the instance group was created',
937             domain => 'the domain name of the instance group',
938             domainid => 'the domain ID of the instance group',
939             id => 'the id of the instance group',
940             name => 'the name of the instance group',
941             },
942             section => 'VMGroup',
943             },
944             createIpForwardingRule => {
945             description => 'Creates an ip forwarding rule',
946             isAsync => 'true',
947             level => 15,
948             request => {
949             optional => {
950             cidrlist => 'the cidr list to forward traffic from',
951             endport => 'the end port for the rule',
952             openfirewall =>
953             'if true, firewall rule for source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. Has value true by default',
954             },
955             required => {
956             ipaddressid => 'the public IP address id of the forwarding rule, already associated via associateIp',
957             protocol => 'the protocol for the rule. Valid values are TCP or UDP.',
958             startport => 'the start port for the rule',
959             },
960             },
961             response => {
962             cidrlist => 'the cidr list to forward traffic from',
963             id => 'the ID of the port forwarding rule',
964             ipaddress => 'the public ip address for the port forwarding rule',
965             ipaddressid => 'the public ip address id for the port forwarding rule',
966             privateendport => 'the ending port of port forwarding rule\'s private port range',
967             privateport => 'the starting port of port forwarding rule\'s private port range',
968             protocol => 'the protocol of the port forwarding rule',
969             publicendport => 'the ending port of port forwarding rule\'s private port range',
970             publicport => 'the starting port of port forwarding rule\'s public port range',
971             state => 'the state of the rule',
972             virtualmachinedisplayname => 'the VM display name for the port forwarding rule',
973             virtualmachineid => 'the VM ID for the port forwarding rule',
974             virtualmachinename => 'the VM name for the port forwarding rule',
975             },
976             section => 'NAT',
977             },
978             createLoadBalancerRule => {
979             description => 'Creates a load balancer rule',
980             isAsync => 'true',
981             level => 15,
982             request => {
983             optional => {
984             account => 'the account associated with the load balancer. Must be used with the domainId parameter.',
985             cidrlist => 'the cidr list to forward traffic from',
986             description => 'the description of the load balancer rule',
987             domainid => 'the domain ID associated with the load balancer',
988             openfirewall =>
989             'if true, firewall rule for source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. Has value true by default',
990             publicipid => 'public ip address id from where the network traffic will be load balanced from',
991             zoneid => 'public ip address id from where the network traffic will be load balanced from',
992             },
993             required => {
994             algorithm => 'load balancer algorithm (source, roundrobin, leastconn)',
995             name => 'name of the load balancer rule',
996             privateport =>
997             'the private port of the private ip address/virtual machine where the network traffic will be load balanced to',
998             publicport => 'the public port from where the network traffic will be load balanced from',
999             },
1000             },
1001             response => {
1002             account => 'the account of the load balancer rule',
1003             algorithm => 'the load balancer algorithm (source, roundrobin, leastconn)',
1004             cidrlist => 'the cidr list to forward traffic from',
1005             description => 'the description of the load balancer',
1006             domain => 'the domain of the load balancer rule',
1007             domainid => 'the domain ID of the load balancer rule',
1008             id => 'the load balancer rule ID',
1009             name => 'the name of the load balancer',
1010             privateport => 'the private port',
1011             publicip => 'the public ip address',
1012             publicipid => 'the public ip address id',
1013             publicport => 'the public port',
1014             state => 'the state of the rule',
1015             zoneid => 'the id of the zone the rule belongs to',
1016             },
1017             section => 'LoadBalancer',
1018             },
1019             createLunOnFiler => {
1020             description => 'Create a LUN from a pool',
1021             isAsync => 'false',
1022             level => 15,
1023             request => { required => { name => 'pool name.', size => 'LUN size.' } },
1024             response => { ipaddress => 'ip address', iqn => 'iqn', path => 'pool path' },
1025             section => 'NetAppIntegration',
1026             },
1027             createNetwork => {
1028             description => 'Creates a network',
1029             isAsync => 'false',
1030             level => 15,
1031             request => {
1032             optional => {
1033             account => 'account who will own the network',
1034             domainid => 'domain ID of the account owning a network',
1035             endip => 'the ending IP address in the network IP range. If not specified, will be defaulted to startIP',
1036             gateway => 'the gateway of the network',
1037             isdefault => 'true if network is default, false otherwise',
1038             isshared => 'true is network is shared across accounts in the Zone',
1039             netmask => 'the netmask of the network',
1040             networkdomain => 'network domain',
1041             startip => 'the beginning IP address in the network IP range',
1042             tags => 'Tag the network',
1043             vlan => 'the ID or VID of the network',
1044             },
1045             required => {
1046             displaytext => 'the display text of the network',
1047             name => 'the name of the network',
1048             networkofferingid => 'the network offering id',
1049             zoneid => 'the Zone ID for the network',
1050             },
1051             },
1052             response => {
1053             'account' => 'the owner of the network',
1054             'broadcastdomaintype' => 'Broadcast domain type of the network',
1055             'broadcasturi' => 'broadcast uri of the network',
1056             'displaytext' => 'the displaytext of the network',
1057             'dns1' => 'the first DNS for the network',
1058             'dns2' => 'the second DNS for the network',
1059             'domain' => 'the domain name of the network owner',
1060             'domainid' => 'the domain id of the network owner',
1061             'endip' => 'the end ip of the network',
1062             'gateway' => 'the network\'s gateway',
1063             'id' => 'the id of the network',
1064             'isdefault' => 'true if network is default, false otherwise',
1065             'isshared' => 'true if network is shared, false otherwise',
1066             'issystem' => 'true if network is system, false otherwise',
1067             'name' => 'the name of the network',
1068             'netmask' => 'the network\'s netmask',
1069             'networkdomain' => 'the network domain',
1070             'networkofferingavailability' => 'availability of the network offering the network is created from',
1071             'networkofferingdisplaytext' => 'display text of the network offering the network is created from',
1072             'networkofferingid' => 'network offering id the network is created from',
1073             'networkofferingname' => 'name of the network offering the network is created from',
1074             'related' => 'related to what other network configuration',
1075             'securitygroupenabled' => 'true if security group is enabled, false otherwise',
1076             'service(*)' => 'the list of services',
1077             'startip' => 'the start ip of the network',
1078             'state' => 'state of the network',
1079             'tags' => 'comma separated tag',
1080             'traffictype' => 'the traffic type of the network',
1081             'type' => 'the type of the network',
1082             'vlan' => 'the vlan of the network',
1083             'zoneid' => 'zone id of the network',
1084             },
1085             section => 'Network',
1086             },
1087             createPod => {
1088             description => 'Creates a new Pod.',
1089             isAsync => 'false',
1090             level => 1,
1091             request => {
1092             optional => {
1093             allocationstate => 'Allocation state of this Pod for allocation of new resources',
1094             endip => 'the ending IP address for the Pod',
1095             },
1096             required => {
1097             gateway => 'the gateway for the Pod',
1098             name => 'the name of the Pod',
1099             netmask => 'the netmask for the Pod',
1100             startip => 'the starting IP address for the Pod',
1101             zoneid => 'the Zone ID in which the Pod will be created',
1102             },
1103             },
1104             response => {
1105             allocationstate => 'the allocation state of the cluster',
1106             endip => 'the ending IP for the Pod',
1107             gateway => 'the gateway of the Pod',
1108             id => 'the ID of the Pod',
1109             name => 'the name of the Pod',
1110             netmask => 'the netmask of the Pod',
1111             startip => 'the starting IP for the Pod',
1112             zoneid => 'the Zone ID of the Pod',
1113             zonename => 'the Zone name of the Pod',
1114             },
1115             section => 'Pod',
1116             },
1117             createPool => {
1118             description => 'Create a pool',
1119             isAsync => 'false',
1120             level => 15,
1121             request => { required => { algorithm => 'algorithm.', name => 'pool name.' } },
1122             response => undef,
1123             section => 'NetAppIntegration',
1124             },
1125             createPortForwardingRule => {
1126             description => 'Creates a port forwarding rule',
1127             isAsync => 'true',
1128             level => 15,
1129             request => {
1130             optional => {
1131             cidrlist => 'the cidr list to forward traffic from',
1132             openfirewall =>
1133             'if true, firewall rule for source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. Has value true by default',
1134             privateendport => 'the ending port of port forwarding rule\'s private port range',
1135             publicendport => 'the ending port of port forwarding rule\'s private port range',
1136             },
1137             required => {
1138             ipaddressid => 'the IP address id of the port forwarding rule',
1139             privateport => 'the starting port of port forwarding rule\'s private port range',
1140             protocol => 'the protocol for the port fowarding rule. Valid values are TCP or UDP.',
1141             publicport => 'the starting port of port forwarding rule\'s public port range',
1142             virtualmachineid => 'the ID of the virtual machine for the port forwarding rule',
1143             },
1144             },
1145             response => {
1146             cidrlist => 'the cidr list to forward traffic from',
1147             id => 'the ID of the port forwarding rule',
1148             ipaddress => 'the public ip address for the port forwarding rule',
1149             ipaddressid => 'the public ip address id for the port forwarding rule',
1150             privateendport => 'the ending port of port forwarding rule\'s private port range',
1151             privateport => 'the starting port of port forwarding rule\'s private port range',
1152             protocol => 'the protocol of the port forwarding rule',
1153             publicendport => 'the ending port of port forwarding rule\'s private port range',
1154             publicport => 'the starting port of port forwarding rule\'s public port range',
1155             state => 'the state of the rule',
1156             virtualmachinedisplayname => 'the VM display name for the port forwarding rule',
1157             virtualmachineid => 'the VM ID for the port forwarding rule',
1158             virtualmachinename => 'the VM name for the port forwarding rule',
1159             },
1160             section => 'Firewall',
1161             },
1162             createRemoteAccessVpn => {
1163             description => 'Creates a l2tp/ipsec remote access vpn',
1164             isAsync => 'true',
1165             level => 15,
1166             request => {
1167             optional => {
1168             account => 'an optional account for the VPN. Must be used with domainId.',
1169             domainid => 'an optional domainId for the VPN. If the account parameter is used, domainId must also be used.',
1170             iprange =>
1171             'the range of ip addresses to allocate to vpn clients. The first ip in the range will be taken by the vpn server',
1172             openfirewall =>
1173             'if true, firewall rule for source/end pubic port is automatically created; if false - firewall rule has to be created explicitely. Has value true by default',
1174             },
1175             required => { publicipid => 'public ip address id of the vpn server' },
1176             },
1177             response => {
1178             account => 'the account of the remote access vpn',
1179             domainid => 'the domain id of the account of the remote access vpn',
1180             domainname => 'the domain name of the account of the remote access vpn',
1181             iprange => 'the range of ips to allocate to the clients',
1182             presharedkey => 'the ipsec preshared key',
1183             publicip => 'the public ip address of the vpn server',
1184             publicipid => 'the public ip address of the vpn server',
1185             state => 'the state of the rule',
1186             },
1187             section => 'VPN',
1188             },
1189             createSecurityGroup => {
1190             description => 'Creates a security group',
1191             isAsync => 'false',
1192             level => 15,
1193             request => {
1194             optional => {
1195             account => 'an optional account for the security group. Must be used with domainId.',
1196             description => 'the description of the security group',
1197             domainid =>
1198             'an optional domainId for the security group. If the account parameter is used, domainId must also be used.',
1199             },
1200             required => { name => 'name of the security group' },
1201             },
1202             response => {
1203             'account' => 'the account owning the security group',
1204             'description' => 'the description of the security group',
1205             'domain' => 'the domain name of the security group',
1206             'domainid' => 'the domain ID of the security group',
1207             'id' => 'the ID of the security group',
1208             'ingressrule(*)' => 'the list of ingress rules associated with the security group',
1209             'jobid' =>
1210             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
1211             'jobstatus' => 'shows the current pending asynchronous job status',
1212             'name' => 'the name of the security group',
1213             },
1214             section => 'SecurityGroup',
1215             },
1216             createServiceOffering => {
1217             description => 'Creates a service offering.',
1218             isAsync => 'false',
1219             level => 1,
1220             request => {
1221             optional => {
1222             domainid => 'the ID of the containing domain, null for public offerings',
1223             hosttags => 'the host tag for this service offering.',
1224             issystem => 'is this a system vm offering',
1225             limitcpuuse => 'restrict the CPU usage to committed service offering',
1226             networkrate =>
1227             'data transfer rate in megabits per second allowed. Supported only for non-System offering and system offerings having \'domainrouter\' systemvmtype',
1228             offerha => 'the HA for the service offering',
1229             storagetype => 'the storage type of the service offering. Values are local and shared.',
1230             systemvmtype =>
1231             'the system VM type. Possible types are \'domainrouter\', \'consoleproxy\' and \'secondarystoragevm\'.',
1232             tags => 'the tags for this service offering.',
1233             },
1234             required => {
1235             cpunumber => 'the CPU number of the service offering',
1236             cpuspeed => 'the CPU speed of the service offering in MHz.',
1237             displaytext => 'the display text of the service offering',
1238             memory => 'the total memory of the service offering in MB',
1239             name => 'the name of the service offering',
1240             },
1241             },
1242             response => {
1243             cpunumber => 'the number of CPU',
1244             cpuspeed => 'the clock rate CPU speed in Mhz',
1245             created => 'the date this service offering was created',
1246             defaultuse => 'is this a default system vm offering',
1247             displaytext => 'an alternate display text of the service offering.',
1248             domain => 'Domain name for the offering',
1249             domainid => 'the domain id of the service offering',
1250             hosttags => 'the host tag for the service offering',
1251             id => 'the id of the service offering',
1252             issystem => 'is this a system vm offering',
1253             limitcpuuse => 'restrict the CPU usage to committed service offering',
1254             memory => 'the memory in MB',
1255             name => 'the name of the service offering',
1256             networkrate => 'data transfer rate in megabits per second allowed.',
1257             offerha => 'the ha support in the service offering',
1258             storagetype => 'the storage type for this service offering',
1259             systemvmtype => 'is this a the systemvm type for system vm offering',
1260             tags => 'the tags for the service offering',
1261             },
1262             section => 'ServiceOffering',
1263             },
1264             createSnapshot => {
1265             description => 'Creates an instant snapshot of a volume.',
1266             isAsync => 'true',
1267             level => 15,
1268             request => {
1269             optional => {
1270             account => 'The account of the snapshot. The account parameter must be used with the domainId parameter.',
1271             domainid =>
1272             'The domain ID of the snapshot. If used with the account parameter, specifies a domain for the account associated with the disk volume.',
1273             policyid => 'policy id of the snapshot, if this is null, then use MANUAL_POLICY.',
1274             },
1275             required => { volumeid => 'The ID of the disk volume' },
1276             },
1277             response => {
1278             account => 'the account associated with the snapshot',
1279             created => 'the date the snapshot was created',
1280             domain => 'the domain name of the snapshot\'s account',
1281             domainid => 'the domain ID of the snapshot\'s account',
1282             id => 'ID of the snapshot',
1283             intervaltype => 'valid types are hourly, daily, weekly, monthy, template, and none.',
1284             jobid =>
1285             'the job ID associated with the snapshot. This is only displayed if the snapshot listed is part of a currently running asynchronous job.',
1286             jobstatus =>
1287             'the job status associated with the snapshot. This is only displayed if the snapshot listed is part of a currently running asynchronous job.',
1288             name => 'name of the snapshot',
1289             snapshottype => 'the type of the snapshot',
1290             state =>
1291             'the state of the snapshot. BackedUp means that snapshot is ready to be used; Creating - the snapshot is being allocated on the primary storage; BackingUp - the snapshot is being backed up on secondary storage',
1292             volumeid => 'ID of the disk volume',
1293             volumename => 'name of the disk volume',
1294             volumetype => 'type of the disk volume',
1295             },
1296             section => 'Snapshot',
1297             },
1298             createSnapshotPolicy => {
1299             description => 'Creates a snapshot policy for the account.',
1300             isAsync => 'false',
1301             level => 15,
1302             request => {
1303             required => {
1304             intervaltype => 'valid values are HOURLY, DAILY, WEEKLY, and MONTHLY',
1305             maxsnaps => 'maximum number of snapshots to retain',
1306             schedule =>
1307             'time the snapshot is scheduled to be taken. Format is:* if HOURLY, MM* if DAILY, MM:HH* if WEEKLY, MM:HH:DD (1-7)* if MONTHLY, MM:HH:DD (1-28)',
1308             timezone =>
1309             'Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.',
1310             volumeid => 'the ID of the disk volume',
1311             },
1312             },
1313             response => {
1314             id => 'the ID of the snapshot policy',
1315             intervaltype => 'the interval type of the snapshot policy',
1316             maxsnaps => 'maximum number of snapshots retained',
1317             schedule => 'time the snapshot is scheduled to be taken.',
1318             timezone => 'the time zone of the snapshot policy',
1319             volumeid => 'the ID of the disk volume',
1320             },
1321             section => 'Snapshot',
1322             },
1323             createSSHKeyPair => {
1324             description => 'Create a new keypair and returns the private key',
1325             isAsync => 'false',
1326             level => 15,
1327             request => {
1328             optional => {
1329             account => 'an optional account for the ssh key. Must be used with domainId.',
1330             domainid =>
1331             'an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.',
1332             },
1333             required => { name => 'Name of the keypair' },
1334             },
1335             response => {
1336             fingerprint => 'Fingerprint of the public key',
1337             name => 'Name of the keypair',
1338             privatekey => 'Private key',
1339             },
1340             section => 'SSHKeyPair',
1341             },
1342             createStoragePool => {
1343             description => 'Creates a storage pool.',
1344             isAsync => 'false',
1345             level => 1,
1346             request => {
1347             optional => {
1348             clusterid => 'the cluster ID for the storage pool',
1349             details => 'the details for the storage pool',
1350             podid => 'the Pod ID for the storage pool',
1351             tags => 'the tags for the storage pool',
1352             },
1353             required => {
1354             name => 'the name for the storage pool',
1355             url => 'the URL of the storage pool',
1356             zoneid => 'the Zone ID for the storage pool',
1357             },
1358             },
1359             response => {
1360             clusterid => 'the ID of the cluster for the storage pool',
1361             clustername => 'the name of the cluster for the storage pool',
1362             created => 'the date and time the storage pool was created',
1363             disksizeallocated => 'the host\'s currently allocated disk size',
1364             disksizetotal => 'the total disk size of the storage pool',
1365             id => 'the ID of the storage pool',
1366             ipaddress => 'the IP address of the storage pool',
1367             jobid =>
1368             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the storage pool',
1369             jobstatus => 'shows the current pending asynchronous job status',
1370             name => 'the name of the storage pool',
1371             path => 'the storage pool path',
1372             podid => 'the Pod ID of the storage pool',
1373             podname => 'the Pod name of the storage pool',
1374             state => 'the state of the storage pool',
1375             tags => 'the tags for the storage pool',
1376             type => 'the storage pool type',
1377             zoneid => 'the Zone ID of the storage pool',
1378             zonename => 'the Zone name of the storage pool',
1379             },
1380             section => 'StoragePools',
1381             },
1382             createTemplate => {
1383             description =>
1384             'Creates a template of a virtual machine. The virtual machine must be in a STOPPED state. A template created from this command is automatically designated as a private template visible to the account that created it.',
1385             isAsync => 'true',
1386             level => 15,
1387             request => {
1388             optional => {
1389             bits => '32 or 64 bit',
1390             details => 'Template details in key/value pairs.',
1391             isfeatured => 'true if this template is a featured template, false otherwise',
1392             ispublic => 'true if this template is a public template, false otherwise',
1393             passwordenabled => 'true if the template supports the password reset feature; default is false',
1394             requireshvm => 'true if the template requres HVM, false otherwise',
1395             snapshotid =>
1396             'the ID of the snapshot the template is being created from. Either this parameter, or volumeId has to be passed in',
1397             templatetag => 'the tag for this template.',
1398             url => 'Optional, only for baremetal hypervisor. The directory name where template stored on CIFS server',
1399             virtualmachineid =>
1400             'Optional, VM ID. If this presents, it is going to create a baremetal template for VM this ID refers to. This is only for VM whose hypervisor type is BareMetal',
1401             volumeid =>
1402             'the ID of the disk volume the template is being created from. Either this parameter, or snapshotId has to be passed in',
1403             },
1404             required => {
1405             displaytext => 'the display text of the template. This is usually used for display purposes.',
1406             name => 'the name of the template',
1407             ostypeid => 'the ID of the OS Type that best represents the OS of this template.',
1408             },
1409             },
1410             response => {
1411             clusterid => 'the ID of the cluster for the storage pool',
1412             clustername => 'the name of the cluster for the storage pool',
1413             created => 'the date and time the storage pool was created',
1414             disksizeallocated => 'the host\'s currently allocated disk size',
1415             disksizetotal => 'the total disk size of the storage pool',
1416             id => 'the ID of the storage pool',
1417             ipaddress => 'the IP address of the storage pool',
1418             jobid =>
1419             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the storage pool',
1420             jobstatus => 'shows the current pending asynchronous job status',
1421             name => 'the name of the storage pool',
1422             path => 'the storage pool path',
1423             podid => 'the Pod ID of the storage pool',
1424             podname => 'the Pod name of the storage pool',
1425             state => 'the state of the storage pool',
1426             tags => 'the tags for the storage pool',
1427             type => 'the storage pool type',
1428             zoneid => 'the Zone ID of the storage pool',
1429             zonename => 'the Zone name of the storage pool',
1430             },
1431             section => 'Template',
1432             },
1433             createUser => {
1434             description => 'Creates a user for an account that already exists',
1435             isAsync => 'false',
1436             level => 3,
1437             request => {
1438             optional => {
1439             domainid => 'Creates the user under the specified domain. Has to be accompanied with the account parameter',
1440             timezone =>
1441             'Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.',
1442             },
1443             required => {
1444             account =>
1445             'Creates the user under the specified account. If no account is specified, the username will be used as the account name.',
1446             email => 'email',
1447             firstname => 'firstname',
1448             lastname => 'lastname',
1449             password =>
1450             'Hashed password (Default is MD5). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.',
1451             username => 'Unique username.',
1452             },
1453             },
1454             response => {
1455             account => 'the account name of the user',
1456             accounttype => 'the account type of the user',
1457             apikey => 'the api key of the user',
1458             created => 'the date and time the user account was created',
1459             domain => 'the domain name of the user',
1460             domainid => 'the domain ID of the user',
1461             email => 'the user email address',
1462             firstname => 'the user firstname',
1463             id => 'the user ID',
1464             lastname => 'the user lastname',
1465             secretkey => 'the secret key of the user',
1466             state => 'the user state',
1467             timezone => 'the timezone user was created in',
1468             username => 'the user name',
1469             },
1470             section => 'User',
1471             },
1472             createVlanIpRange => {
1473             description => 'Creates a VLAN IP range.',
1474             isAsync => 'false',
1475             level => 1,
1476             request => {
1477             optional => {
1478             account => 'account who will own the VLAN. If VLAN is Zone wide, this parameter should be ommited',
1479             domainid => 'domain ID of the account owning a VLAN',
1480             endip => 'the ending IP address in the VLAN IP range',
1481             forvirtualnetwork => 'true if VLAN is of Virtual type, false if Direct',
1482             gateway => 'the gateway of the VLAN IP range',
1483             netmask => 'the netmask of the VLAN IP range',
1484             networkid => 'the network id',
1485             podid => 'optional parameter. Have to be specified for Direct Untagged vlan only.',
1486             vlan => 'the ID or VID of the VLAN. Default is an \'untagged\' VLAN.',
1487             zoneid => 'the Zone ID of the VLAN IP range',
1488             },
1489             required => { startip => 'the beginning IP address in the VLAN IP range' },
1490             },
1491             response => {
1492             account => 'the account of the VLAN IP range',
1493             description => 'the description of the VLAN IP range',
1494             domain => 'the domain name of the VLAN IP range',
1495             domainid => 'the domain ID of the VLAN IP range',
1496             endip => 'the end ip of the VLAN IP range',
1497             forvirtualnetwork => 'the virtual network for the VLAN IP range',
1498             gateway => 'the gateway of the VLAN IP range',
1499             id => 'the ID of the VLAN IP range',
1500             netmask => 'the netmask of the VLAN IP range',
1501             networkid => 'the network id of vlan range',
1502             podid => 'the Pod ID for the VLAN IP range',
1503             podname => 'the Pod name for the VLAN IP range',
1504             startip => 'the start ip of the VLAN IP range',
1505             vlan => 'the ID or VID of the VLAN.',
1506             zoneid => 'the Zone ID of the VLAN IP range',
1507             },
1508             section => 'VLAN',
1509             },
1510             createVolume => {
1511             description =>
1512             'Creates a disk volume from a disk offering. This disk volume must still be attached to a virtual machine to make use of it.',
1513             isAsync => 'true',
1514             level => 15,
1515             request => {
1516             optional => {
1517             account => 'the account associated with the disk volume. Must be used with the domainId parameter.',
1518             diskofferingid => 'the ID of the disk offering. Either diskOfferingId or snapshotId must be passed in.',
1519             domainid =>
1520             'the domain ID associated with the disk offering. If used with the account parameter returns the disk volume associated with the account for the specified domain.',
1521             size => 'Arbitrary volume size',
1522             snapshotid => 'the snapshot ID for the disk volume. Either diskOfferingId or snapshotId must be passed in.',
1523             zoneid => 'the ID of the availability zone',
1524             },
1525             required => { name => 'the name of the disk volume' },
1526             },
1527             response => {
1528             account => 'the account associated with the disk volume',
1529             attached => 'the date the volume was attached to a VM instance',
1530             created => 'the date the disk volume was created',
1531             destroyed => 'the boolean state of whether the volume is destroyed or not',
1532             deviceid =>
1533             'the ID of the device on user vm the volume is attahed to. This tag is not returned when the volume is detached.',
1534             diskofferingdisplaytext => 'the display text of the disk offering',
1535             diskofferingid => 'ID of the disk offering',
1536             diskofferingname => 'name of the disk offering',
1537             domain => 'the domain associated with the disk volume',
1538             domainid => 'the ID of the domain associated with the disk volume',
1539             hypervisor => 'Hypervisor the volume belongs to',
1540             id => 'ID of the disk volume',
1541             isextractable => 'true if the volume is extractable, false otherwise',
1542             jobid =>
1543             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
1544             jobstatus => 'shows the current pending asynchronous job status',
1545             name => 'name of the disk volume',
1546             serviceofferingdisplaytext => 'the display text of the service offering for root disk',
1547             serviceofferingid => 'ID of the service offering for root disk',
1548             serviceofferingname => 'name of the service offering for root disk',
1549             size => 'size of the disk volume',
1550             snapshotid => 'ID of the snapshot from which this volume was created',
1551             state => 'the state of the disk volume',
1552             storage => 'name of the primary storage hosting the disk volume',
1553             storagetype => 'shared or local storage',
1554             type => 'type of the disk volume (ROOT or DATADISK)',
1555             virtualmachineid => 'id of the virtual machine',
1556             vmdisplayname => 'display name of the virtual machine',
1557             vmname => 'name of the virtual machine',
1558             vmstate => 'state of the virtual machine',
1559             zoneid => 'ID of the availability zone',
1560             zonename => 'name of the availability zone',
1561             },
1562             section => 'Volume',
1563             },
1564             createVolumeOnFiler => {
1565             description => 'Create a volume',
1566             isAsync => 'false',
1567             level => 15,
1568             request => {
1569             optional => { snapshotpolicy => 'snapshot policy.', snapshotreservation => 'snapshot reservation.', },
1570             required => {
1571             aggregatename => 'aggregate name.',
1572             ipaddress => 'ip address.',
1573             password => 'password.',
1574             poolname => 'pool name.',
1575             size => 'volume size.',
1576             username => 'user name.',
1577             volumename => 'volume name.',
1578             },
1579             },
1580             response => undef,
1581             section => 'NetAppIntegration',
1582             },
1583             createZone => {
1584             description => 'Creates a Zone.',
1585             isAsync => 'false',
1586             level => 1,
1587             request => {
1588             optional => {
1589             allocationstate => 'Allocation state of this Zone for allocation of new resources',
1590             dns2 => 'the second DNS for the Zone',
1591             domain => 'Network domain name for the networks in the zone',
1592             domainid => 'the ID of the containing domain, null for public zones',
1593             guestcidraddress => 'the guest CIDR address for the Zone',
1594             internaldns2 => 'the second internal DNS for the Zone',
1595             securitygroupenabled => 'true if network is security group enabled, false otherwise',
1596             vlan => 'the VLAN for the Zone',
1597             },
1598             required => {
1599             dns1 => 'the first DNS for the Zone',
1600             internaldns1 => 'the first internal DNS for the Zone',
1601             name => 'the name of the Zone',
1602             networktype => 'network type of the zone, can be Basic or Advanced',
1603             },
1604             },
1605             response => {
1606             allocationstate => 'the allocation state of the cluster',
1607             description => 'Zone description',
1608             dhcpprovider => 'the dhcp Provider for the Zone',
1609             displaytext => 'the display text of the zone',
1610             dns1 => 'the first DNS for the Zone',
1611             dns2 => 'the second DNS for the Zone',
1612             domain => 'Network domain name for the networks in the zone',
1613             domainid => 'the ID of the containing domain, null for public zones',
1614             guestcidraddress => 'the guest CIDR address for the Zone',
1615             id => 'Zone id',
1616             internaldns1 => 'the first internal DNS for the Zone',
1617             internaldns2 => 'the second internal DNS for the Zone',
1618             name => 'Zone name',
1619             networktype => 'the network type of the zone; can be Basic or Advanced',
1620             securitygroupsenabled => 'true if security groups support is enabled, false otherwise',
1621             vlan => 'the vlan range of the zone',
1622             zonetoken => 'Zone Token',
1623             },
1624             section => 'Zone',
1625             },
1626             deleteAccount => {
1627             description => 'Deletes a account, and all users associated with this account',
1628             isAsync => 'true',
1629             level => 3,
1630             request => { required => { id => 'Account id' } },
1631             response => {
1632             displaytext => 'any text associated with the success or failure',
1633             success => 'true if operation is executed successfully',
1634             },
1635             section => 'Account',
1636             },
1637             deleteCluster => {
1638             description => 'Deletes a cluster.',
1639             isAsync => 'false',
1640             level => 1,
1641             request => { required => { id => 'the cluster ID' } },
1642             response => {
1643             displaytext => 'any text associated with the success or failure',
1644             success => 'true if operation is executed successfully',
1645             },
1646             section => 'Host',
1647             },
1648             deleteDiskOffering => {
1649             description => 'Updates a disk offering.',
1650             isAsync => 'false',
1651             level => 1,
1652             request => { required => { id => 'ID of the disk offering' } },
1653             response => {
1654             displaytext => 'any text associated with the success or failure',
1655             success => 'true if operation is executed successfully',
1656             },
1657             section => 'DiskOffering',
1658             },
1659             deleteDomain => {
1660             description => 'Deletes a specified domain',
1661             isAsync => 'true',
1662             level => 1,
1663             request => {
1664             optional => {
1665             cleanup => 'true if all domain resources (child domains, accounts) have to be cleaned up, false otherwise',
1666             },
1667             required => { id => 'ID of domain to delete' },
1668             },
1669             response => {
1670             displaytext => 'any text associated with the success or failure',
1671             success => 'true if operation is executed successfully',
1672             },
1673             section => 'Domain',
1674             },
1675             deleteExternalFirewall => {
1676             description => 'Deletes an external firewall appliance.',
1677             isAsync => 'false',
1678             level => 1,
1679             request => { required => { id => 'Id of the external firewall appliance.' } },
1680             response => {
1681             displaytext => 'any text associated with the success or failure',
1682             success => 'true if operation is executed successfully',
1683             },
1684             section => 'ExternalFirewall',
1685             },
1686             deleteExternalLoadBalancer => {
1687             description => 'Deletes an external load balancer appliance.',
1688             isAsync => 'false',
1689             level => 1,
1690             request => { required => { id => 'Id of the external loadbalancer appliance.' }, },
1691             response => {
1692             displaytext => 'any text associated with the success or failure',
1693             success => 'true if operation is executed successfully',
1694             },
1695             section => 'ExternalLoadBalancer',
1696             },
1697             deleteFirewallRule => {
1698             description => 'Deletes a firewall rule',
1699             isAsync => 'true',
1700             level => 15,
1701             request => { required => { id => 'the ID of the firewall rule' } },
1702             response => {
1703             displaytext => 'any text associated with the success or failure',
1704             success => 'true if operation is executed successfully',
1705             },
1706             section => 'Firewall',
1707             },
1708             deleteHost => {
1709             description => 'Deletes a host.',
1710             isAsync => 'false',
1711             level => 3,
1712             request => {
1713             optional => {
1714             forced =>
1715             'Force delete the host. All HA enabled vms running on the host will be put to HA; HA disabled ones will be stopped',
1716             forcedestroylocalstorage =>
1717             'Force destroy local storage on this host. All VMs created on this local storage will be destroyed',
1718             },
1719             required => { id => 'the host ID' },
1720             },
1721             response => {
1722             displaytext => 'any text associated with the success or failure',
1723             success => 'true if operation is executed successfully',
1724             },
1725             section => 'Host',
1726             },
1727             deleteInstanceGroup => {
1728             description => 'Deletes a vm group',
1729             isAsync => 'false',
1730             level => 15,
1731             request => { required => { id => 'the ID of the instance group' } },
1732             response => {
1733             displaytext => 'any text associated with the success or failure',
1734             success => 'true if operation is executed successfully',
1735             },
1736             section => 'VMGroup',
1737             },
1738             deleteIpForwardingRule => {
1739             description => 'Deletes an ip forwarding rule',
1740             isAsync => 'true',
1741             level => 15,
1742             request => { required => { id => 'the id of the forwarding rule' } },
1743             response => {
1744             displaytext => 'any text associated with the success or failure',
1745             success => 'true if operation is executed successfully',
1746             },
1747             section => 'NAT',
1748             },
1749             deleteIso => {
1750             description => 'Deletes an ISO file.',
1751             isAsync => 'true',
1752             level => 15,
1753             request => {
1754             optional => {
1755             zoneid => 'the ID of the zone of the ISO file. If not specified, the ISO will be deleted from all the zones',
1756             },
1757             required => { id => 'the ID of the ISO file' },
1758             },
1759             response => {
1760             displaytext => 'any text associated with the success or failure',
1761             success => 'true if operation is executed successfully',
1762             },
1763             section => 'ISO',
1764             },
1765             deleteLoadBalancerRule => {
1766             description => 'Deletes a load balancer rule.',
1767             isAsync => 'true',
1768             level => 15,
1769             request => { required => { id => 'the ID of the load balancer rule' } },
1770             response => {
1771             displaytext => 'any text associated with the success or failure',
1772             success => 'true if operation is executed successfully',
1773             },
1774             section => 'LoadBalancer',
1775             },
1776             deleteNetwork => {
1777             description => 'Deletes a network',
1778             isAsync => 'true',
1779             level => 15,
1780             request => { required => { id => 'the ID of the network' } },
1781             response => {
1782             displaytext => 'any text associated with the success or failure',
1783             success => 'true if operation is executed successfully',
1784             },
1785             section => 'Network',
1786             },
1787             deleteNetworkDevice => {
1788             description => 'Delete network device.',
1789             isAsync => 'false',
1790             level => 1,
1791             request => { optional => { id => 'Id of network device to delete' } },
1792             response => {
1793             displaytext => 'any text associated with the success or failure',
1794             success => 'true if operation is executed successfully',
1795             },
1796             section => 'NetworkDevices',
1797             },
1798             deletePod => {
1799             description => 'Deletes a Pod.',
1800             isAsync => 'false',
1801             level => 1,
1802             request => { required => { id => 'the ID of the Pod' } },
1803             response => {
1804             displaytext => 'any text associated with the success or failure',
1805             success => 'true if operation is executed successfully',
1806             },
1807             section => 'Pod',
1808             },
1809             deletePool => {
1810             description => 'Delete a pool',
1811             isAsync => 'false',
1812             level => 15,
1813             request => { required => { poolname => 'pool name.' } },
1814             response => undef,
1815             section => 'NetAppIntegration',
1816             },
1817             deletePortForwardingRule => {
1818             description => 'Deletes a port forwarding rule',
1819             isAsync => 'true',
1820             level => 15,
1821             request => { required => { id => 'the ID of the port forwarding rule' } },
1822             response => {
1823             displaytext => 'any text associated with the success or failure',
1824             success => 'true if operation is executed successfully',
1825             },
1826             section => 'Firewall',
1827             },
1828             deleteRemoteAccessVpn => {
1829             description => 'Destroys a l2tp/ipsec remote access vpn',
1830             isAsync => 'true',
1831             level => 15,
1832             request => { required => { publicipid => 'public ip address id of the vpn server' }, },
1833             response => {
1834             displaytext => 'any text associated with the success or failure',
1835             success => 'true if operation is executed successfully',
1836             },
1837             section => 'VPN',
1838             },
1839             deleteSecurityGroup => {
1840             description => 'Deletes security group',
1841             isAsync => 'false',
1842             level => 15,
1843             request => {
1844             optional => {
1845             account => 'the account of the security group. Must be specified with domain ID',
1846             domainid => 'the domain ID of account owning the security group',
1847             id => 'The ID of the security group. Mutually exclusive with name parameter',
1848             name => 'The ID of the security group. Mutually exclusive with id parameter',
1849             },
1850             },
1851             response => {
1852             displaytext => 'any text associated with the success or failure',
1853             success => 'true if operation is executed successfully',
1854             },
1855             section => 'SecurityGroup',
1856             },
1857             deleteServiceOffering => {
1858             description => 'Deletes a service offering.',
1859             isAsync => 'false',
1860             level => 1,
1861             request => { required => { id => 'the ID of the service offering' } },
1862             response => {
1863             displaytext => 'any text associated with the success or failure',
1864             success => 'true if operation is executed successfully',
1865             },
1866             section => 'ServiceOffering',
1867             },
1868             deleteSnapshot => {
1869             description => 'Deletes a snapshot of a disk volume.',
1870             isAsync => 'true',
1871             level => 15,
1872             request => { required => { id => 'The ID of the snapshot' } },
1873             response => {
1874             displaytext => 'any text associated with the success or failure',
1875             success => 'true if operation is executed successfully',
1876             },
1877             section => 'Snapshot',
1878             },
1879             deleteSnapshotPolicies => {
1880             description => 'Deletes snapshot policies for the account.',
1881             isAsync => 'false',
1882             level => 15,
1883             request =>
1884             { optional => { id => 'the Id of the snapshot', ids => 'list of snapshots IDs separated by comma', }, },
1885             response => {
1886             displaytext => 'any text associated with the success or failure',
1887             success => 'true if operation is executed successfully',
1888             },
1889             section => 'Snapshot',
1890             },
1891             deleteSSHKeyPair => {
1892             description => 'Deletes a keypair by name',
1893             isAsync => 'false',
1894             level => 15,
1895             request => {
1896             optional => {
1897             account => 'the account associated with the keypair. Must be used with the domainId parameter.',
1898             domainid => 'the domain ID associated with the keypair',
1899             },
1900             required => { name => 'Name of the keypair' },
1901             },
1902             response => {
1903             displaytext => 'any text associated with the success or failure',
1904             success => 'true if operation is executed successfully',
1905             },
1906             section => 'SSHKeyPair',
1907             },
1908             deleteStoragePool => {
1909             description => 'Deletes a storage pool.',
1910             isAsync => 'false',
1911             level => 1,
1912             request => { required => { id => 'Storage pool id' } },
1913             response => {
1914             displaytext => 'any text associated with the success or failure',
1915             success => 'true if operation is executed successfully',
1916             },
1917             section => 'StoragePools',
1918             },
1919             deleteTemplate => {
1920             description =>
1921             'Deletes a template from the system. All virtual machines using the deleted template will not be affected.',
1922             isAsync => 'true',
1923             level => 15,
1924             request => {
1925             optional => { zoneid => 'the ID of zone of the template' },
1926             required => { id => 'the ID of the template' },
1927             },
1928             response => {
1929             displaytext => 'any text associated with the success or failure',
1930             success => 'true if operation is executed successfully',
1931             },
1932             section => 'Template',
1933             },
1934             deleteTrafficMonitor => {
1935             description => 'Deletes an traffic monitor host.',
1936             isAsync => 'false',
1937             level => 1,
1938             request => { required => { id => 'Id of the Traffic Monitor Host.' } },
1939             response => {
1940             displaytext => 'any text associated with the success or failure',
1941             success => 'true if operation is executed successfully',
1942             },
1943             section => 'TrafficMonitor',
1944             },
1945             deleteUser => {
1946             description => 'Creates a user for an account',
1947             isAsync => 'false',
1948             level => 3,
1949             request => { required => { id => 'Deletes a user' } },
1950             response => {
1951             account => 'the account name of the user',
1952             accounttype => 'the account type of the user',
1953             apikey => 'the api key of the user',
1954             created => 'the date and time the user account was created',
1955             domain => 'the domain name of the user',
1956             domainid => 'the domain ID of the user',
1957             email => 'the user email address',
1958             firstname => 'the user firstname',
1959             id => 'the user ID',
1960             lastname => 'the user lastname',
1961             secretkey => 'the secret key of the user',
1962             state => 'the user state',
1963             timezone => 'the timezone user was created in',
1964             username => 'the user name',
1965             },
1966             section => 'User',
1967             },
1968             deleteVlanIpRange => {
1969             description => 'Creates a VLAN IP range.',
1970             isAsync => 'false',
1971             level => 1,
1972             request => { required => { id => 'the id of the VLAN IP range' } },
1973             response => {
1974             displaytext => 'any text associated with the success or failure',
1975             success => 'true if operation is executed successfully',
1976             },
1977             section => 'VLAN',
1978             },
1979             deleteVolume => {
1980             description => 'Deletes a detached disk volume.',
1981             isAsync => 'false',
1982             level => 15,
1983             request => { required => { id => 'The ID of the disk volume' } },
1984             response => {
1985             displaytext => 'any text associated with the success or failure',
1986             success => 'true if operation is executed successfully',
1987             },
1988             section => 'Volume',
1989             },
1990             deleteZone => {
1991             description => 'Deletes a Zone.',
1992             isAsync => 'false',
1993             level => 1,
1994             request => { required => { id => 'the ID of the Zone' } },
1995             response => {
1996             displaytext => 'any text associated with the success or failure',
1997             success => 'true if operation is executed successfully',
1998             },
1999             section => 'Zone',
2000             },
2001             deployVirtualMachine => {
2002             description =>
2003             'Creates and automatically starts a virtual machine based on a service offering, disk offering, and template.',
2004             isAsync => 'true',
2005             level => 15,
2006             request => {
2007             optional => {
2008             account => 'an optional account for the virtual machine. Must be used with domainId.',
2009             diskofferingid =>
2010             'the ID of the disk offering for the virtual machine. If the template is of ISO format, the diskOfferingId is for the root disk volume. Otherwise this parameter is used to indicate the offering for the data disk volume. If the templateId parameter passed is from a Template object, the diskOfferingId refers to a DATA Disk Volume created. If the templateId parameter passed is from an ISO object, the diskOfferingId refers to a ROOT Disk Volume created.',
2011             displayname => 'an optional user generated name for the virtual machine',
2012             domainid =>
2013             'an optional domainId for the virtual machine. If the account parameter is used, domainId must also be used.',
2014             group => 'an optional group for the virtual machine',
2015             hostid => 'destination Host ID to deploy the VM to - parameter available for root admin only',
2016             hypervisor => 'the hypervisor on which to deploy the virtual machine',
2017             ipaddress => 'the ip address for default vm\'s network',
2018             iptonetworklist =>
2019             'ip to network mapping. Can\'t be specified with networkIds parameter. Example: iptonetworklist[0].ip=10.10.10.11&iptonetworklist[0].networkid=204 - requests to use ip 10.10.10.11 in network id=204',
2020             keyboard =>
2021             'an optional keyboard device type for the virtual machine. valid value can be one of de,de-ch,es,fi,fr,fr-be,fr-ch,is,it,jp,nl-be,no,pt,uk,us',
2022             keypair => 'name of the ssh key pair used to login to the virtual machine',
2023             name => 'host name for the virtual machine',
2024             networkids =>
2025             'list of network ids used by virtual machine. Can\'t be specified with ipToNetworkList parameter',
2026             securitygroupids =>
2027             'comma separated list of security groups id that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupnames parameter',
2028             securitygroupnames =>
2029             'comma separated list of security groups names that going to be applied to the virtual machine. Should be passed only when vm is created from a zone with Basic Network support. Mutually exclusive with securitygroupids parameter',
2030             size => 'the arbitrary size for the DATADISK volume. Mutually exclusive with diskOfferingId',
2031             userdata =>
2032             'an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Currently only HTTP GET is supported. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding.',
2033             },
2034             required => {
2035             serviceofferingid => 'the ID of the service offering for the virtual machine',
2036             templateid => 'the ID of the template for the virtual machine',
2037             zoneid => 'availability zone for the virtual machine',
2038             },
2039             },
2040             response => {
2041             'account' => 'the account associated with the virtual machine',
2042             'cpunumber' => 'the number of cpu this virtual machine is running with',
2043             'cpuspeed' => 'the speed of each cpu',
2044             'cpuused' => 'the amount of the vm\'s CPU currently used',
2045             'created' => 'the date when this virtual machine was created',
2046             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
2047             'domain' => 'the name of the domain in which the virtual machine exists',
2048             'domainid' => 'the ID of the domain in which the virtual machine exists',
2049             'forvirtualnetwork' => 'the virtual network for the service offering',
2050             'group' => 'the group name of the virtual machine',
2051             'groupid' => 'the group ID of the virtual machine',
2052             'guestosid' => 'Os type ID of the virtual machine',
2053             'haenable' => 'true if high-availability is enabled, false otherwise',
2054             'hostid' => 'the ID of the host for the virtual machine',
2055             'hostname' => 'the name of the host for the virtual machine',
2056             'hypervisor' => 'the hypervisor on which the template runs',
2057             'id' => 'the ID of the virtual machine',
2058             'ipaddress' => 'the ip address of the virtual machine',
2059             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
2060             'isoid' => 'the ID of the ISO attached to the virtual machine',
2061             'isoname' => 'the name of the ISO attached to the virtual machine',
2062             'jobid' =>
2063             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
2064             'jobstatus' => 'shows the current pending asynchronous job status',
2065             'memory' => 'the memory allocated for the virtual machine',
2066             'name' => 'the name of the virtual machine',
2067             'networkkbsread' => 'the incoming network traffic on the vm',
2068             'networkkbswrite' => 'the outgoing network traffic on the host',
2069             'nic(*)' => 'the list of nics associated with vm',
2070             'password' => 'the password (if exists) of the virtual machine',
2071             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
2072             'rootdeviceid' => 'device ID of the root volume',
2073             'rootdevicetype' => 'device type of the root volume',
2074             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
2075             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
2076             'serviceofferingname' => 'the name of the service offering of the virtual machine',
2077             'state' => 'the state of the virtual machine',
2078             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
2079             'templateid' =>
2080             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
2081             'templatename' => 'the name of the template for the virtual machine',
2082             'zoneid' => 'the ID of the availablility zone for the virtual machine',
2083             'zonename' => 'the name of the availability zone for the virtual machine',
2084             },
2085             section => 'VM',
2086             },
2087             destroyLunOnFiler => {
2088             description => 'Destroy a LUN',
2089             isAsync => 'false',
2090             level => 15,
2091             request => { required => { path => 'LUN path.' } },
2092             response => undef,
2093             section => 'NetAppIntegration',
2094             },
2095             destroyRouter => {
2096             description => 'Destroys a router.',
2097             isAsync => 'true',
2098             level => 7,
2099             request => { required => { id => 'the ID of the router' } },
2100             response => {
2101             account => 'the account associated with the router',
2102             created => 'the date and time the router was created',
2103             dns1 => 'the first DNS for the router',
2104             dns2 => 'the second DNS for the router',
2105             domain => 'the domain associated with the router',
2106             domainid => 'the domain ID associated with the router',
2107             gateway => 'the gateway for the router',
2108             guestipaddress => 'the guest IP address for the router',
2109             guestmacaddress => 'the guest MAC address for the router',
2110             guestnetmask => 'the guest netmask for the router',
2111             guestnetworkid => 'the ID of the corresponding guest network',
2112             hostid => 'the host ID for the router',
2113             hostname => 'the hostname for the router',
2114             id => 'the id of the router',
2115             isredundantrouter => 'if this router is an redundant virtual router',
2116             linklocalip => 'the link local IP address for the router',
2117             linklocalmacaddress => 'the link local MAC address for the router',
2118             linklocalnetmask => 'the link local netmask for the router',
2119             linklocalnetworkid => 'the ID of the corresponding link local network',
2120             name => 'the name of the router',
2121             networkdomain => 'the network domain for the router',
2122             podid => 'the Pod ID for the router',
2123             publicip => 'the public IP address for the router',
2124             publicmacaddress => 'the public MAC address for the router',
2125             publicnetmask => 'the public netmask for the router',
2126             publicnetworkid => 'the ID of the corresponding public network',
2127             redundantstate => 'the state of redundant virtual router',
2128             serviceofferingid => 'the ID of the service offering of the virtual machine',
2129             serviceofferingname => 'the name of the service offering of the virtual machine',
2130             state => 'the state of the router',
2131             templateid => 'the template ID for the router',
2132             zoneid => 'the Zone ID for the router',
2133             zonename => 'the Zone name for the router',
2134             },
2135             section => 'Router',
2136             },
2137             destroySystemVm => {
2138             description => 'Destroyes a system virtual machine.',
2139             isAsync => 'true',
2140             level => 1,
2141             request => { required => { id => 'The ID of the system virtual machine' } },
2142             response => {
2143             activeviewersessions => 'the number of active console sessions for the console proxy system vm',
2144             created => 'the date and time the system VM was created',
2145             dns1 => 'the first DNS for the system VM',
2146             dns2 => 'the second DNS for the system VM',
2147             gateway => 'the gateway for the system VM',
2148             hostid => 'the host ID for the system VM',
2149             hostname => 'the hostname for the system VM',
2150             id => 'the ID of the system VM',
2151             jobid =>
2152             'the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
2153             jobstatus =>
2154             'the job status associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
2155             linklocalip => 'the link local IP address for the system vm',
2156             linklocalmacaddress => 'the link local MAC address for the system vm',
2157             linklocalnetmask => 'the link local netmask for the system vm',
2158             name => 'the name of the system VM',
2159             networkdomain => 'the network domain for the system VM',
2160             podid => 'the Pod ID for the system VM',
2161             privateip => 'the private IP address for the system VM',
2162             privatemacaddress => 'the private MAC address for the system VM',
2163             privatenetmask => 'the private netmask for the system VM',
2164             publicip => 'the public IP address for the system VM',
2165             publicmacaddress => 'the public MAC address for the system VM',
2166             publicnetmask => 'the public netmask for the system VM',
2167             state => 'the state of the system VM',
2168             systemvmtype => 'the system VM type',
2169             templateid => 'the template ID for the system VM',
2170             zoneid => 'the Zone ID for the system VM',
2171             zonename => 'the Zone name for the system VM',
2172             },
2173             section => 'SystemVM',
2174             },
2175             destroyVirtualMachine => {
2176             description => 'Destroys a virtual machine. Once destroyed, only the administrator can recover it.',
2177             isAsync => 'true',
2178             level => 15,
2179             request => { required => { id => 'The ID of the virtual machine' } },
2180             response => {
2181             'account' => 'the account associated with the virtual machine',
2182             'cpunumber' => 'the number of cpu this virtual machine is running with',
2183             'cpuspeed' => 'the speed of each cpu',
2184             'cpuused' => 'the amount of the vm\'s CPU currently used',
2185             'created' => 'the date when this virtual machine was created',
2186             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
2187             'domain' => 'the name of the domain in which the virtual machine exists',
2188             'domainid' => 'the ID of the domain in which the virtual machine exists',
2189             'forvirtualnetwork' => 'the virtual network for the service offering',
2190             'group' => 'the group name of the virtual machine',
2191             'groupid' => 'the group ID of the virtual machine',
2192             'guestosid' => 'Os type ID of the virtual machine',
2193             'haenable' => 'true if high-availability is enabled, false otherwise',
2194             'hostid' => 'the ID of the host for the virtual machine',
2195             'hostname' => 'the name of the host for the virtual machine',
2196             'hypervisor' => 'the hypervisor on which the template runs',
2197             'id' => 'the ID of the virtual machine',
2198             'ipaddress' => 'the ip address of the virtual machine',
2199             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
2200             'isoid' => 'the ID of the ISO attached to the virtual machine',
2201             'isoname' => 'the name of the ISO attached to the virtual machine',
2202             'jobid' =>
2203             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
2204             'jobstatus' => 'shows the current pending asynchronous job status',
2205             'memory' => 'the memory allocated for the virtual machine',
2206             'name' => 'the name of the virtual machine',
2207             'networkkbsread' => 'the incoming network traffic on the vm',
2208             'networkkbswrite' => 'the outgoing network traffic on the host',
2209             'nic(*)' => 'the list of nics associated with vm',
2210             'password' => 'the password (if exists) of the virtual machine',
2211             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
2212             'rootdeviceid' => 'device ID of the root volume',
2213             'rootdevicetype' => 'device type of the root volume',
2214             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
2215             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
2216             'serviceofferingname' => 'the name of the service offering of the virtual machine',
2217             'state' => 'the state of the virtual machine',
2218             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
2219             'templateid' =>
2220             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
2221             'templatename' => 'the name of the template for the virtual machine',
2222             'zoneid' => 'the ID of the availablility zone for the virtual machine',
2223             'zonename' => 'the name of the availability zone for the virtual machine',
2224             },
2225             section => 'VM',
2226             },
2227             destroyVolumeOnFiler => {
2228             description => 'Destroy a Volume',
2229             isAsync => 'false',
2230             level => 15,
2231             request => {
2232             required => { aggregatename => 'aggregate name.', ipaddress => 'ip address.', volumename => 'volume name.', },
2233             },
2234             response => undef,
2235             section => 'NetAppIntegration',
2236             },
2237             detachIso => {
2238             description => 'Detaches any ISO file (if any) currently attached to a virtual machine.',
2239             isAsync => 'true',
2240             level => 15,
2241             request => { required => { virtualmachineid => 'The ID of the virtual machine' }, },
2242             response => {
2243             'account' => 'the account associated with the virtual machine',
2244             'cpunumber' => 'the number of cpu this virtual machine is running with',
2245             'cpuspeed' => 'the speed of each cpu',
2246             'cpuused' => 'the amount of the vm\'s CPU currently used',
2247             'created' => 'the date when this virtual machine was created',
2248             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
2249             'domain' => 'the name of the domain in which the virtual machine exists',
2250             'domainid' => 'the ID of the domain in which the virtual machine exists',
2251             'forvirtualnetwork' => 'the virtual network for the service offering',
2252             'group' => 'the group name of the virtual machine',
2253             'groupid' => 'the group ID of the virtual machine',
2254             'guestosid' => 'Os type ID of the virtual machine',
2255             'haenable' => 'true if high-availability is enabled, false otherwise',
2256             'hostid' => 'the ID of the host for the virtual machine',
2257             'hostname' => 'the name of the host for the virtual machine',
2258             'hypervisor' => 'the hypervisor on which the template runs',
2259             'id' => 'the ID of the virtual machine',
2260             'ipaddress' => 'the ip address of the virtual machine',
2261             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
2262             'isoid' => 'the ID of the ISO attached to the virtual machine',
2263             'isoname' => 'the name of the ISO attached to the virtual machine',
2264             'jobid' =>
2265             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
2266             'jobstatus' => 'shows the current pending asynchronous job status',
2267             'memory' => 'the memory allocated for the virtual machine',
2268             'name' => 'the name of the virtual machine',
2269             'networkkbsread' => 'the incoming network traffic on the vm',
2270             'networkkbswrite' => 'the outgoing network traffic on the host',
2271             'nic(*)' => 'the list of nics associated with vm',
2272             'password' => 'the password (if exists) of the virtual machine',
2273             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
2274             'rootdeviceid' => 'device ID of the root volume',
2275             'rootdevicetype' => 'device type of the root volume',
2276             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
2277             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
2278             'serviceofferingname' => 'the name of the service offering of the virtual machine',
2279             'state' => 'the state of the virtual machine',
2280             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
2281             'templateid' =>
2282             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
2283             'templatename' => 'the name of the template for the virtual machine',
2284             'zoneid' => 'the ID of the availablility zone for the virtual machine',
2285             'zonename' => 'the name of the availability zone for the virtual machine',
2286             },
2287             section => 'ISO',
2288             },
2289             detachVolume => {
2290             description => 'Detaches a disk volume from a virtual machine.',
2291             isAsync => 'true',
2292             level => 15,
2293             request => {
2294             optional => {
2295             deviceid => 'the device ID on the virtual machine where volume is detached from',
2296             id => 'the ID of the disk volume',
2297             virtualmachineid => 'the ID of the virtual machine where the volume is detached from',
2298             },
2299             },
2300             response => {
2301             account => 'the account associated with the disk volume',
2302             attached => 'the date the volume was attached to a VM instance',
2303             created => 'the date the disk volume was created',
2304             destroyed => 'the boolean state of whether the volume is destroyed or not',
2305             deviceid =>
2306             'the ID of the device on user vm the volume is attahed to. This tag is not returned when the volume is detached.',
2307             diskofferingdisplaytext => 'the display text of the disk offering',
2308             diskofferingid => 'ID of the disk offering',
2309             diskofferingname => 'name of the disk offering',
2310             domain => 'the domain associated with the disk volume',
2311             domainid => 'the ID of the domain associated with the disk volume',
2312             hypervisor => 'Hypervisor the volume belongs to',
2313             id => 'ID of the disk volume',
2314             isextractable => 'true if the volume is extractable, false otherwise',
2315             jobid =>
2316             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
2317             jobstatus => 'shows the current pending asynchronous job status',
2318             name => 'name of the disk volume',
2319             serviceofferingdisplaytext => 'the display text of the service offering for root disk',
2320             serviceofferingid => 'ID of the service offering for root disk',
2321             serviceofferingname => 'name of the service offering for root disk',
2322             size => 'size of the disk volume',
2323             snapshotid => 'ID of the snapshot from which this volume was created',
2324             state => 'the state of the disk volume',
2325             storage => 'name of the primary storage hosting the disk volume',
2326             storagetype => 'shared or local storage',
2327             type => 'type of the disk volume (ROOT or DATADISK)',
2328             virtualmachineid => 'id of the virtual machine',
2329             vmdisplayname => 'display name of the virtual machine',
2330             vmname => 'name of the virtual machine',
2331             vmstate => 'state of the virtual machine',
2332             zoneid => 'ID of the availability zone',
2333             zonename => 'name of the availability zone',
2334             },
2335             section => 'Volume',
2336             },
2337             disableAccount => {
2338             description => 'Disables an account',
2339             isAsync => 'true',
2340             level => 7,
2341             request => {
2342             required => {
2343             account => 'Disables specified account.',
2344             domainid => 'Disables specified account in this domain.',
2345             lock => 'If true, only lock the account; else disable the account',
2346             },
2347             },
2348             response => {
2349             'accounttype' => 'account type (admin, domain-admin, user)',
2350             'domain' => 'name of the Domain the account belongs too',
2351             'domainid' => 'id of the Domain the account belongs too',
2352             'id' => 'the id of the account',
2353             'ipavailable' => 'the total number of public ip addresses available for this account to acquire',
2354             'iplimit' => 'the total number of public ip addresses this account can acquire',
2355             'iptotal' => 'the total number of public ip addresses allocated for this account',
2356             'iscleanuprequired' => 'true if the account requires cleanup',
2357             'name' => 'the name of the account',
2358             'networkdomain' => 'the network domain',
2359             'receivedbytes' => 'the total number of network traffic bytes received',
2360             'sentbytes' => 'the total number of network traffic bytes sent',
2361             'snapshotavailable' => 'the total number of snapshots available for this account',
2362             'snapshotlimit' => 'the total number of snapshots which can be stored by this account',
2363             'snapshottotal' => 'the total number of snapshots stored by this account',
2364             'state' => 'the state of the account',
2365             'templateavailable' => 'the total number of templates available to be created by this account',
2366             'templatelimit' => 'the total number of templates which can be created by this account',
2367             'templatetotal' => 'the total number of templates which have been created by this account',
2368             'user(*)' => 'the list of users associated with account',
2369             'vmavailable' => 'the total number of virtual machines available for this account to acquire',
2370             'vmlimit' => 'the total number of virtual machines that can be deployed by this account',
2371             'vmrunning' => 'the total number of virtual machines running for this account',
2372             'vmstopped' => 'the total number of virtual machines stopped for this account',
2373             'vmtotal' => 'the total number of virtual machines deployed by this account',
2374             'volumeavailable' => 'the total volume available for this account',
2375             'volumelimit' => 'the total volume which can be used by this account',
2376             'volumetotal' => 'the total volume being used by this account',
2377             },
2378             section => 'Account',
2379             },
2380             disableStaticNat => {
2381             description => 'Disables static rule for given ip address',
2382             isAsync => 'true',
2383             level => 15,
2384             request => {
2385             required => { ipaddressid => 'the public IP address id for which static nat feature is being disableed', },
2386             },
2387             response => {
2388             displaytext => 'any text associated with the success or failure',
2389             success => 'true if operation is executed successfully',
2390             },
2391             section => 'NAT',
2392             },
2393             disableUser => {
2394             description => 'Disables a user account',
2395             isAsync => 'true',
2396             level => 7,
2397             request => { required => { id => 'Disables user by user ID.' } },
2398             response => {
2399             account => 'the account name of the user',
2400             accounttype => 'the account type of the user',
2401             apikey => 'the api key of the user',
2402             created => 'the date and time the user account was created',
2403             domain => 'the domain name of the user',
2404             domainid => 'the domain ID of the user',
2405             email => 'the user email address',
2406             firstname => 'the user firstname',
2407             id => 'the user ID',
2408             lastname => 'the user lastname',
2409             secretkey => 'the secret key of the user',
2410             state => 'the user state',
2411             timezone => 'the timezone user was created in',
2412             username => 'the user name',
2413             },
2414             section => 'User',
2415             },
2416             disassociateIpAddress => {
2417             description => 'Disassociates an ip address from the account.',
2418             isAsync => 'true',
2419             level => 15,
2420             request => { required => { id => 'the id of the public ip address to disassociate' }, },
2421             response => {
2422             displaytext => 'any text associated with the success or failure',
2423             success => 'true if operation is executed successfully',
2424             },
2425             section => 'Address',
2426             },
2427             dissociateLun => {
2428             description => 'Dissociate a LUN',
2429             isAsync => 'false',
2430             level => 15,
2431             request => { required => { iqn => 'Guest IQN.', path => 'LUN path.' } },
2432             response => undef,
2433             section => 'NetAppIntegration',
2434             },
2435             enableAccount => {
2436             description => 'Enables an account',
2437             isAsync => 'false',
2438             level => 7,
2439             request => {
2440             required =>
2441             { account => 'Enables specified account.', domainid => 'Enables specified account in this domain.', },
2442             },
2443             response => {
2444             'accounttype' => 'account type (admin, domain-admin, user)',
2445             'domain' => 'name of the Domain the account belongs too',
2446             'domainid' => 'id of the Domain the account belongs too',
2447             'id' => 'the id of the account',
2448             'ipavailable' => 'the total number of public ip addresses available for this account to acquire',
2449             'iplimit' => 'the total number of public ip addresses this account can acquire',
2450             'iptotal' => 'the total number of public ip addresses allocated for this account',
2451             'iscleanuprequired' => 'true if the account requires cleanup',
2452             'name' => 'the name of the account',
2453             'networkdomain' => 'the network domain',
2454             'receivedbytes' => 'the total number of network traffic bytes received',
2455             'sentbytes' => 'the total number of network traffic bytes sent',
2456             'snapshotavailable' => 'the total number of snapshots available for this account',
2457             'snapshotlimit' => 'the total number of snapshots which can be stored by this account',
2458             'snapshottotal' => 'the total number of snapshots stored by this account',
2459             'state' => 'the state of the account',
2460             'templateavailable' => 'the total number of templates available to be created by this account',
2461             'templatelimit' => 'the total number of templates which can be created by this account',
2462             'templatetotal' => 'the total number of templates which have been created by this account',
2463             'user(*)' => 'the list of users associated with account',
2464             'vmavailable' => 'the total number of virtual machines available for this account to acquire',
2465             'vmlimit' => 'the total number of virtual machines that can be deployed by this account',
2466             'vmrunning' => 'the total number of virtual machines running for this account',
2467             'vmstopped' => 'the total number of virtual machines stopped for this account',
2468             'vmtotal' => 'the total number of virtual machines deployed by this account',
2469             'volumeavailable' => 'the total volume available for this account',
2470             'volumelimit' => 'the total volume which can be used by this account',
2471             'volumetotal' => 'the total volume being used by this account',
2472             },
2473             section => 'Account',
2474             },
2475             enableStaticNat => {
2476             description => 'Enables static nat for given ip address',
2477             isAsync => 'false',
2478             level => 15,
2479             request => {
2480             required => {
2481             ipaddressid => 'the public IP address id for which static nat feature is being enabled',
2482             virtualmachineid => 'the ID of the virtual machine for enabling static nat feature',
2483             },
2484             },
2485             response => {
2486             displaytext => 'any text associated with the success or failure',
2487             success => 'true if operation is executed successfully',
2488             },
2489             section => 'NAT',
2490             },
2491             enableStorageMaintenance => {
2492             description => 'Puts storage pool into maintenance state',
2493             isAsync => 'true',
2494             level => 1,
2495             request => { required => { id => 'Primary storage ID' } },
2496             response => {
2497             clusterid => 'the ID of the cluster for the storage pool',
2498             clustername => 'the name of the cluster for the storage pool',
2499             created => 'the date and time the storage pool was created',
2500             disksizeallocated => 'the host\'s currently allocated disk size',
2501             disksizetotal => 'the total disk size of the storage pool',
2502             id => 'the ID of the storage pool',
2503             ipaddress => 'the IP address of the storage pool',
2504             jobid =>
2505             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the storage pool',
2506             jobstatus => 'shows the current pending asynchronous job status',
2507             name => 'the name of the storage pool',
2508             path => 'the storage pool path',
2509             podid => 'the Pod ID of the storage pool',
2510             podname => 'the Pod name of the storage pool',
2511             state => 'the state of the storage pool',
2512             tags => 'the tags for the storage pool',
2513             type => 'the storage pool type',
2514             zoneid => 'the Zone ID of the storage pool',
2515             zonename => 'the Zone name of the storage pool',
2516             },
2517             section => 'StoragePools',
2518             },
2519             enableUser => {
2520             description => 'Enables a user account',
2521             isAsync => 'false',
2522             level => 7,
2523             request => { required => { id => 'Enables user by user ID.' } },
2524             response => {
2525             account => 'the account name of the user',
2526             accounttype => 'the account type of the user',
2527             apikey => 'the api key of the user',
2528             created => 'the date and time the user account was created',
2529             domain => 'the domain name of the user',
2530             domainid => 'the domain ID of the user',
2531             email => 'the user email address',
2532             firstname => 'the user firstname',
2533             id => 'the user ID',
2534             lastname => 'the user lastname',
2535             secretkey => 'the secret key of the user',
2536             state => 'the user state',
2537             timezone => 'the timezone user was created in',
2538             username => 'the user name',
2539             },
2540             section => 'User',
2541             },
2542             extractIso => {
2543             description => 'Extracts an ISO',
2544             isAsync => 'true',
2545             level => 15,
2546             request => {
2547             optional => { url => 'the url to which the ISO would be extracted' },
2548             required => {
2549             id => 'the ID of the ISO file',
2550             mode => 'the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD',
2551             zoneid => 'the ID of the zone where the ISO is originally located',
2552             },
2553             },
2554             response => {
2555             accountid => 'the account id to which the extracted object belongs',
2556             created => 'the time and date the object was created',
2557             extractId => 'the upload id of extracted object',
2558             extractMode => 'the mode of extraction - upload or download',
2559             id => 'the id of extracted object',
2560             name => 'the name of the extracted object',
2561             state => 'the state of the extracted object',
2562             status => 'the status of the extraction',
2563             storagetype => 'type of the storage',
2564             uploadpercentage => 'the percentage of the entity uploaded to the specified location',
2565             url =>
2566             'if mode = upload then url of the uploaded entity. if mode = download the url from which the entity can be downloaded',
2567             zoneid => 'zone ID the object was extracted from',
2568             zonename => 'zone name the object was extracted from',
2569             },
2570             section => 'ISO',
2571             },
2572             extractTemplate => {
2573             description => 'Extracts a template',
2574             isAsync => 'true',
2575             level => 15,
2576             request => {
2577             optional => { url => 'the url to which the ISO would be extracted' },
2578             required => {
2579             id => 'the ID of the template',
2580             mode => 'the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD',
2581             zoneid => 'the ID of the zone where the ISO is originally located',
2582             },
2583             },
2584             response => {
2585             accountid => 'the account id to which the extracted object belongs',
2586             created => 'the time and date the object was created',
2587             extractId => 'the upload id of extracted object',
2588             extractMode => 'the mode of extraction - upload or download',
2589             id => 'the id of extracted object',
2590             name => 'the name of the extracted object',
2591             state => 'the state of the extracted object',
2592             status => 'the status of the extraction',
2593             storagetype => 'type of the storage',
2594             uploadpercentage => 'the percentage of the entity uploaded to the specified location',
2595             url =>
2596             'if mode = upload then url of the uploaded entity. if mode = download the url from which the entity can be downloaded',
2597             zoneid => 'zone ID the object was extracted from',
2598             zonename => 'zone name the object was extracted from',
2599             },
2600             section => 'Template',
2601             },
2602             extractVolume => {
2603             description => 'Extracts volume',
2604             isAsync => 'true',
2605             level => 15,
2606             request => {
2607             optional => { url => 'the url to which the volume would be extracted' },
2608             required => {
2609             id => 'the ID of the volume',
2610             mode => 'the mode of extraction - HTTP_DOWNLOAD or FTP_UPLOAD',
2611             zoneid => 'the ID of the zone where the volume is located',
2612             },
2613             },
2614             response => {
2615             accountid => 'the account id to which the extracted object belongs',
2616             created => 'the time and date the object was created',
2617             extractId => 'the upload id of extracted object',
2618             extractMode => 'the mode of extraction - upload or download',
2619             id => 'the id of extracted object',
2620             name => 'the name of the extracted object',
2621             state => 'the state of the extracted object',
2622             status => 'the status of the extraction',
2623             storagetype => 'type of the storage',
2624             uploadpercentage => 'the percentage of the entity uploaded to the specified location',
2625             url =>
2626             'if mode = upload then url of the uploaded entity. if mode = download the url from which the entity can be downloaded',
2627             zoneid => 'zone ID the object was extracted from',
2628             zonename => 'zone name the object was extracted from',
2629             },
2630             section => 'Volume',
2631             },
2632             generateUsageRecords => {
2633             description => 'Generates usage records',
2634             isAsync => 'false',
2635             level => 1,
2636             request => {
2637             optional => { domainid => 'List events for the specified domain.' },
2638             required => {
2639             enddate =>
2640             'End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.',
2641             startdate =>
2642             'Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.',
2643             },
2644             },
2645             response => {
2646             displaytext => 'any text associated with the success or failure',
2647             success => 'true if operation is executed successfully',
2648             },
2649             section => 'Usage',
2650             },
2651             getCloudIdentifier => {
2652             description => 'Retrieves a cloud identifier.',
2653             isAsync => 'false',
2654             level => 15,
2655             request => { required => { userid => 'the user ID for the cloud identifier' }, },
2656             response => {
2657             cloudidentifier => 'the cloud identifier',
2658             signature => 'the signed response for the cloud identifier',
2659             userid => 'the user ID for the cloud identifier',
2660             },
2661             section => 'CloudIdentifier',
2662             },
2663             getVMPassword => {
2664             description => 'Returns an encrypted password for the VM',
2665             isAsync => 'false',
2666             level => 15,
2667             request => { required => { id => 'The ID of the virtual machine' } },
2668             response => { encryptedpassword => 'The encrypted password of the VM' },
2669             section => 'VM',
2670             },
2671             listAccounts => {
2672             description => 'Lists accounts and provides detailed account information for listed accounts',
2673             isAsync => 'false',
2674             level => 15,
2675             request => {
2676             optional => {
2677             accounttype =>
2678             'list accounts by account type. Valid account types are 1 (admin), 2 (domain-admin), and 0 (user).',
2679             domainid =>
2680             'list all accounts in specified domain. If used with the name parameter, retrieves account information for the account with specified name in specified domain.',
2681             id => 'list account by account ID',
2682             iscleanuprequired => 'list accounts by cleanuprequred attribute (values are true or false)',
2683             isrecursive =>
2684             'defaults to false, but if true, lists all accounts from the parent specified by the domain id till leaves.',
2685             keyword => 'List by keyword',
2686             name => 'list account by account name',
2687             page => 'no description',
2688             pagesize => 'no description',
2689             state => 'list accounts by state. Valid states are enabled, disabled, and locked.',
2690             },
2691             },
2692             response => {
2693             'accounttype' => 'account type (admin, domain-admin, user)',
2694             'domain' => 'name of the Domain the account belongs too',
2695             'domainid' => 'id of the Domain the account belongs too',
2696             'id' => 'the id of the account',
2697             'ipavailable' => 'the total number of public ip addresses available for this account to acquire',
2698             'iplimit' => 'the total number of public ip addresses this account can acquire',
2699             'iptotal' => 'the total number of public ip addresses allocated for this account',
2700             'iscleanuprequired' => 'true if the account requires cleanup',
2701             'name' => 'the name of the account',
2702             'networkdomain' => 'the network domain',
2703             'receivedbytes' => 'the total number of network traffic bytes received',
2704             'sentbytes' => 'the total number of network traffic bytes sent',
2705             'snapshotavailable' => 'the total number of snapshots available for this account',
2706             'snapshotlimit' => 'the total number of snapshots which can be stored by this account',
2707             'snapshottotal' => 'the total number of snapshots stored by this account',
2708             'state' => 'the state of the account',
2709             'templateavailable' => 'the total number of templates available to be created by this account',
2710             'templatelimit' => 'the total number of templates which can be created by this account',
2711             'templatetotal' => 'the total number of templates which have been created by this account',
2712             'user(*)' => 'the list of users associated with account',
2713             'vmavailable' => 'the total number of virtual machines available for this account to acquire',
2714             'vmlimit' => 'the total number of virtual machines that can be deployed by this account',
2715             'vmrunning' => 'the total number of virtual machines running for this account',
2716             'vmstopped' => 'the total number of virtual machines stopped for this account',
2717             'vmtotal' => 'the total number of virtual machines deployed by this account',
2718             'volumeavailable' => 'the total volume available for this account',
2719             'volumelimit' => 'the total volume which can be used by this account',
2720             'volumetotal' => 'the total volume being used by this account',
2721             },
2722             section => 'Account',
2723             },
2724             listAlerts => {
2725             description => 'Lists all alerts.',
2726             isAsync => 'false',
2727             level => 3,
2728             request => {
2729             optional => {
2730             id => 'the ID of the alert',
2731             keyword => 'List by keyword',
2732             page => 'no description',
2733             pagesize => 'no description',
2734             type => 'list by alert type',
2735             },
2736             },
2737             response => {
2738             description => 'description of the alert',
2739             id => 'the id of the alert',
2740             sent => 'the date and time the alert was sent',
2741             type => 'the alert type',
2742             },
2743             section => 'Alerts',
2744             },
2745             listAsyncJobs => {
2746             description => 'Lists all pending asynchronous jobs for the account.',
2747             isAsync => 'false',
2748             level => 15,
2749             request => {
2750             optional => {
2751             account => 'the account associated with the async job. Must be used with the domainId parameter.',
2752             domainid =>
2753             'the domain ID associated with the async job. If used with the account parameter, returns async jobs for the account in the specified domain.',
2754             keyword => 'List by keyword',
2755             page => 'no description',
2756             pagesize => 'no description',
2757             startdate => 'the start date of the async job',
2758             },
2759             },
2760             response => {
2761             accountid => 'the account that executed the async command',
2762             cmd => 'the async command executed',
2763             created => 'the created date of the job',
2764             jobid => 'async job ID',
2765             jobinstanceid => 'the unique ID of the instance/entity object related to the job',
2766             jobinstancetype => 'the instance/entity object related to the job',
2767             jobprocstatus => 'the progress information of the PENDING job',
2768             jobresult => 'the result reason',
2769             jobresultcode => 'the result code for the job',
2770             jobresulttype => 'the result type',
2771             jobstatus => 'the current job status-should be 0 for PENDING',
2772             userid => 'the user that executed the async command',
2773             },
2774             section => 'AsyncQuery',
2775             },
2776             listCapabilities => {
2777             description => 'Lists capabilities',
2778             isAsync => 'false',
2779             level => 15,
2780             request => undef,
2781             response => {
2782             cloudstackversion => 'version of the cloud stack',
2783             firewallRuleUiEnabled => 'true if the firewall rule UI is enabled',
2784             securitygroupsenabled => 'true if security groups support is enabled, false otherwise',
2785             supportELB => 'true if region supports elastic load balancer on basic zones',
2786             userpublictemplateenabled => 'true if user and domain admins can set templates to be shared, false otherwise',
2787             },
2788             section => 'Configuration',
2789             },
2790             listCapacity => {
2791             description => 'Lists capacity.',
2792             isAsync => 'false',
2793             level => 3,
2794             request => {
2795             optional => {
2796             hostid => 'lists capacity by the Host ID',
2797             keyword => 'List by keyword',
2798             page => 'no description',
2799             pagesize => 'no description',
2800             podid => 'lists capacity by the Pod ID',
2801             type =>
2802             'lists capacity by type* CAPACITY_TYPE_MEMORY = 0* CAPACITY_TYPE_CPU = 1* CAPACITY_TYPE_STORAGE = 2* CAPACITY_TYPE_STORAGE_ALLOCATED = 3* CAPACITY_TYPE_PUBLIC_IP = 4* CAPACITY_TYPE_PRIVATE_IP = 5* CAPACITY_TYPE_SECONDARY_STORAGE = 6',
2803             zoneid => 'lists capacity by the Zone ID',
2804             },
2805             },
2806             response => {
2807             capacitytotal => 'the total capacity available',
2808             capacityused => 'the capacity currently in use',
2809             percentused => 'the percentage of capacity currently in use',
2810             podid => 'the Pod ID',
2811             podname => 'the Pod name',
2812             type => 'the capacity type',
2813             zoneid => 'the Zone ID',
2814             zonename => 'the Zone name',
2815             },
2816             section => 'SystemCapacity',
2817             },
2818             listClusters => {
2819             description => 'Lists clusters.',
2820             isAsync => 'false',
2821             level => 3,
2822             request => {
2823             optional => {
2824             allocationstate => 'lists clusters by allocation state',
2825             clustertype => 'lists clusters by cluster type',
2826             hypervisor => 'lists clusters by hypervisor type',
2827             id => 'lists clusters by the cluster ID',
2828             keyword => 'List by keyword',
2829             managedstate => 'whether this cluster is managed by cloudstack',
2830             name => 'lists clusters by the cluster name',
2831             page => 'no description',
2832             pagesize => 'no description',
2833             podid => 'lists clusters by Pod ID',
2834             zoneid => 'lists clusters by Zone ID',
2835             },
2836             },
2837             response => {
2838             allocationstate => 'the allocation state of the cluster',
2839             clustertype => 'the type of the cluster',
2840             hypervisortype => 'the hypervisor type of the cluster',
2841             id => 'the cluster ID',
2842             managedstate => 'whether this cluster is managed by cloudstack',
2843             name => 'the cluster name',
2844             podid => 'the Pod ID of the cluster',
2845             podname => 'the Pod name of the cluster',
2846             zoneid => 'the Zone ID of the cluster',
2847             zonename => 'the Zone name of the cluster',
2848             },
2849             section => 'StoragePools',
2850             },
2851             listConfigurations => {
2852             description => 'Lists all configurations.',
2853             isAsync => 'false',
2854             level => 1,
2855             request => {
2856             optional => {
2857             category => 'lists configurations by category',
2858             keyword => 'List by keyword',
2859             name => 'lists configuration by name',
2860             page => 'no description',
2861             pagesize => 'no description',
2862             },
2863             },
2864             response => {
2865             category => 'the category of the configuration',
2866             description => 'the description of the configuration',
2867             name => 'the name of the configuration',
2868             value => 'the value of the configuration',
2869             },
2870             section => 'Configuration',
2871             },
2872             listDiskOfferings => {
2873             description => 'Lists all available disk offerings.',
2874             isAsync => 'false',
2875             level => 15,
2876             request => {
2877             optional => {
2878             domainid => 'the ID of the domain of the disk offering.',
2879             id => 'ID of the disk offering',
2880             keyword => 'List by keyword',
2881             name => 'name of the disk offering',
2882             page => 'no description',
2883             pagesize => 'no description',
2884             },
2885             },
2886             response => {
2887             created => 'the date this disk offering was created',
2888             disksize => 'the size of the disk offering in GB',
2889             displaytext => 'an alternate display text of the disk offering.',
2890             domain =>
2891             'the domain name this disk offering belongs to. Ignore this information as it is not currently applicable.',
2892             domainid =>
2893             'the domain ID this disk offering belongs to. Ignore this information as it is not currently applicable.',
2894             id => 'unique ID of the disk offering',
2895             iscustomized => 'true if disk offering uses custom size, false otherwise',
2896             name => 'the name of the disk offering',
2897             tags => 'the tags for the disk offering',
2898             },
2899             section => 'DiskOffering',
2900             },
2901             listDomainChildren => {
2902             description => 'Lists all children domains belonging to a specified domain',
2903             isAsync => 'false',
2904             level => 7,
2905             request => {
2906             optional => {
2907             id => 'list children domain by parent domain ID.',
2908             isrecursive =>
2909             'to return the entire tree, use the value \'true\'. To return the first level children, use the value \'false\'.',
2910             keyword => 'List by keyword',
2911             name => 'list children domains by name',
2912             page => 'no description',
2913             pagesize => 'no description',
2914             },
2915             },
2916             response => {
2917             haschild => 'whether the domain has one or more sub-domains',
2918             id => 'the ID of the domain',
2919             level => 'the level of the domain',
2920             name => 'the name of the domain',
2921             networkdomain => 'the network domain',
2922             parentdomainid => 'the domain ID of the parent domain',
2923             parentdomainname => 'the domain name of the parent domain',
2924             path => 'the path of the domain',
2925             },
2926             section => 'Domain',
2927             },
2928             listDomains => {
2929             description => 'Lists domains and provides detailed information for listed domains',
2930             isAsync => 'false',
2931             level => 7,
2932             request => {
2933             optional => {
2934             id => 'List domain by domain ID.',
2935             keyword => 'List by keyword',
2936             level => 'List domains by domain level.',
2937             name => 'List domain by domain name.',
2938             page => 'no description',
2939             pagesize => 'no description',
2940             },
2941             },
2942             response => {
2943             haschild => 'whether the domain has one or more sub-domains',
2944             id => 'the ID of the domain',
2945             level => 'the level of the domain',
2946             name => 'the name of the domain',
2947             networkdomain => 'the network domain',
2948             parentdomainid => 'the domain ID of the parent domain',
2949             parentdomainname => 'the domain name of the parent domain',
2950             path => 'the path of the domain',
2951             },
2952             section => 'Domain',
2953             },
2954             listEvents => {
2955             description => 'A command to list events.',
2956             isAsync => 'false',
2957             level => 15,
2958             request => {
2959             optional => {
2960             account => 'the account for the event. Must be used with the domainId parameter.',
2961             domainid =>
2962             'the domain ID for the event. If used with the account parameter, returns all events for an account in the specified domain ID.',
2963             duration => 'the duration of the event',
2964             enddate =>
2965             'the end date range of the list you want to retrieve (use format \'yyyy-MM-dd\' or the new format \'yyyy-MM-dd HH:mm:ss\')',
2966             entrytime => 'the time the event was entered',
2967             id => 'the ID of the event',
2968             keyword => 'List by keyword',
2969             level => 'the event level (INFO, WARN, ERROR)',
2970             page => 'no description',
2971             pagesize => 'no description',
2972             startdate =>
2973             'the start date range of the list you want to retrieve (use format \'yyyy-MM-dd\' or the new format \'yyyy-MM-dd HH:mm:ss\')',
2974             type => 'the event type (see event types)',
2975             },
2976             },
2977             response => {
2978             account =>
2979             'the account name for the account that owns the object being acted on in the event (e.g. the owner of the virtual machine, ip address, or security group)',
2980             created => 'the date the event was created',
2981             description => 'a brief description of the event',
2982             domain => 'the name of the account\'s domain',
2983             domainid => 'the id of the account\'s domain',
2984             id => 'the ID of the event',
2985             level => 'the event level (INFO, WARN, ERROR)',
2986             parentid => 'whether the event is parented',
2987             state => 'the state of the event',
2988             type => 'the type of the event (see event types)',
2989             username =>
2990             'the name of the user who performed the action (can be different from the account if an admin is performing an action for a user, e.g. starting/stopping a user\'s virtual machine)',
2991             },
2992             section => 'Events',
2993             },
2994             listEventTypes => {
2995             description => 'List Event Types',
2996             isAsync => 'false',
2997             level => 15,
2998             request => undef,
2999             response => { name => 'Event Type' },
3000             section => 'Events',
3001             },
3002             listExternalFirewalls => {
3003             description => 'List external firewall appliances.',
3004             isAsync => 'false',
3005             level => 1,
3006             request => {
3007             optional => { keyword => 'List by keyword', page => 'no description', pagesize => 'no description', },
3008             required => { zoneid => 'zone Id' },
3009             },
3010             response => {
3011             id => 'the ID of the external firewall',
3012             ipaddress => 'the management IP address of the external firewall',
3013             numretries => 'the number of times to retry requests to the external firewall',
3014             privateinterface => 'the private interface of the external firewall',
3015             privatezone => 'the private security zone of the external firewall',
3016             publicinterface => 'the public interface of the external firewall',
3017             publiczone => 'the public security zone of the external firewall',
3018             timeout => 'the timeout (in seconds) for requests to the external firewall',
3019             usageinterface => 'the usage interface of the external firewall',
3020             username => 'the username that\'s used to log in to the external firewall',
3021             zoneid => 'the zone ID of the external firewall',
3022             },
3023             section => 'ExternalFirewall',
3024             },
3025             listExternalLoadBalancers => {
3026             description => 'List external load balancer appliances.',
3027             isAsync => 'false',
3028             level => 1,
3029             request => {
3030             optional => {
3031             keyword => 'List by keyword',
3032             page => 'no description',
3033             pagesize => 'no description',
3034             zoneid => 'zone Id',
3035             },
3036             },
3037             response => {
3038             allocationstate => 'the allocation state of the host',
3039             averageload => 'the cpu average load on the host',
3040             capabilities => 'capabilities of the host',
3041             clusterid => 'the cluster ID of the host',
3042             clustername => 'the cluster name of the host',
3043             clustertype => 'the cluster type of the cluster that host belongs to',
3044             cpuallocated => 'the amount of the host\'s CPU currently allocated',
3045             cpunumber => 'the CPU number of the host',
3046             cpuspeed => 'the CPU speed of the host',
3047             cpuused => 'the amount of the host\'s CPU currently used',
3048             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
3049             created => 'the date and time the host was created',
3050             disconnected => 'true if the host is disconnected. False otherwise.',
3051             disksizeallocated => 'the host\'s currently allocated disk size',
3052             disksizetotal => 'the total disk size of the host',
3053             events => 'events available for the host',
3054             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
3055             hosttags => 'comma-separated list of tags for the host',
3056             hypervisor => 'the host hypervisor',
3057             id => 'the ID of the host',
3058             ipaddress => 'the IP address of the host',
3059             islocalstorageactive => 'true if local storage is active, false otherwise',
3060             jobid =>
3061             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
3062             jobstatus => 'shows the current pending asynchronous job status',
3063             lastpinged => 'the date and time the host was last pinged',
3064             managementserverid => 'the management server ID of the host',
3065             memoryallocated => 'the amount of the host\'s memory currently allocated',
3066             memorytotal => 'the memory total of the host',
3067             memoryused => 'the amount of the host\'s memory currently used',
3068             name => 'the name of the host',
3069             networkkbsread => 'the incoming network traffic on the host',
3070             networkkbswrite => 'the outgoing network traffic on the host',
3071             oscategoryid => 'the OS category ID of the host',
3072             oscategoryname => 'the OS category name of the host',
3073             podid => 'the Pod ID of the host',
3074             podname => 'the Pod name of the host',
3075             removed => 'the date and time the host was removed',
3076             state => 'the state of the host',
3077             type => 'the host type',
3078             version => 'the host version',
3079             zoneid => 'the Zone ID of the host',
3080             zonename => 'the Zone name of the host',
3081             },
3082             section => 'ExternalLoadBalancer',
3083             },
3084             listFirewallRules => {
3085             description => 'Lists all firewall rules for an IP address.',
3086             isAsync => 'false',
3087             level => 15,
3088             request => {
3089             optional => {
3090             account => 'account. Must be used with the domainId parameter.',
3091             domainid =>
3092             'the domain ID. If used with the account parameter, lists firewall rules for the specified account in this domain.',
3093             id => 'Lists rule with the specified ID.',
3094             ipaddressid => 'the id of IP address of the firwall services',
3095             keyword => 'List by keyword',
3096             page => 'no description',
3097             pagesize => 'no description',
3098             },
3099             },
3100             response => {
3101             cidrlist => 'the cidr list to forward traffic from',
3102             endport => 'the ending port of firewall rule\'s port range',
3103             icmpcode => 'error code for this icmp message',
3104             icmptype => 'type of the icmp message being sent',
3105             id => 'the ID of the firewall rule',
3106             ipaddress => 'the public ip address for the port forwarding rule',
3107             ipaddressid => 'the public ip address id for the port forwarding rule',
3108             protocol => 'the protocol of the firewall rule',
3109             startport => 'the starting port of firewall rule\'s port range',
3110             state => 'the state of the rule',
3111             },
3112             section => 'Firewall',
3113             },
3114             listHosts => {
3115             description => 'Lists hosts.',
3116             isAsync => 'false',
3117             level => 3,
3118             request => {
3119             optional => {
3120             allocationstate => 'list hosts by allocation state',
3121             clusterid => 'lists hosts existing in particular cluster',
3122             details =>
3123             'give details. 1 = minimal; 2 = include static info; 3 = include events; 4 = include allocation and statistics',
3124             id => 'the id of the host',
3125             keyword => 'List by keyword',
3126             name => 'the name of the host',
3127             page => 'no description',
3128             pagesize => 'no description',
3129             podid => 'the Pod ID for the host',
3130             state => 'the state of the host',
3131             type => 'the host type',
3132             virtualmachineid =>
3133             'lists hosts in the same cluster as this VM and flag hosts with enough CPU/RAm to host this VM',
3134             zoneid => 'the Zone ID for the host',
3135             },
3136             },
3137             response => {
3138             allocationstate => 'the allocation state of the host',
3139             averageload => 'the cpu average load on the host',
3140             capabilities => 'capabilities of the host',
3141             clusterid => 'the cluster ID of the host',
3142             clustername => 'the cluster name of the host',
3143             clustertype => 'the cluster type of the cluster that host belongs to',
3144             cpuallocated => 'the amount of the host\'s CPU currently allocated',
3145             cpunumber => 'the CPU number of the host',
3146             cpuspeed => 'the CPU speed of the host',
3147             cpuused => 'the amount of the host\'s CPU currently used',
3148             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
3149             created => 'the date and time the host was created',
3150             disconnected => 'true if the host is disconnected. False otherwise.',
3151             disksizeallocated => 'the host\'s currently allocated disk size',
3152             disksizetotal => 'the total disk size of the host',
3153             events => 'events available for the host',
3154             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
3155             hosttags => 'comma-separated list of tags for the host',
3156             hypervisor => 'the host hypervisor',
3157             id => 'the ID of the host',
3158             ipaddress => 'the IP address of the host',
3159             islocalstorageactive => 'true if local storage is active, false otherwise',
3160             jobid =>
3161             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
3162             jobstatus => 'shows the current pending asynchronous job status',
3163             lastpinged => 'the date and time the host was last pinged',
3164             managementserverid => 'the management server ID of the host',
3165             memoryallocated => 'the amount of the host\'s memory currently allocated',
3166             memorytotal => 'the memory total of the host',
3167             memoryused => 'the amount of the host\'s memory currently used',
3168             name => 'the name of the host',
3169             networkkbsread => 'the incoming network traffic on the host',
3170             networkkbswrite => 'the outgoing network traffic on the host',
3171             oscategoryid => 'the OS category ID of the host',
3172             oscategoryname => 'the OS category name of the host',
3173             podid => 'the Pod ID of the host',
3174             podname => 'the Pod name of the host',
3175             removed => 'the date and time the host was removed',
3176             state => 'the state of the host',
3177             type => 'the host type',
3178             version => 'the host version',
3179             zoneid => 'the Zone ID of the host',
3180             zonename => 'the Zone name of the host',
3181             },
3182             section => 'Host',
3183             },
3184             listHypervisors => {
3185             description => 'List hypervisors',
3186             isAsync => 'false',
3187             level => 15,
3188             request => { optional => { zoneid => 'the zone id for listing hypervisors.' }, },
3189             response => { name => 'Hypervisor name' },
3190             section => 'Other',
3191             },
3192             listInstanceGroups => {
3193             description => 'Lists vm groups',
3194             isAsync => 'false',
3195             level => 15,
3196             request => {
3197             optional => {
3198             account => 'list instance group belonging to the specified account. Must be used with domainid parameter',
3199             domainid =>
3200             'the domain ID. If used with the account parameter, lists virtual machines for the specified account in this domain.',
3201             id => 'list instance groups by ID',
3202             keyword => 'List by keyword',
3203             name => 'list instance groups by name',
3204             page => 'no description',
3205             pagesize => 'no description',
3206             },
3207             },
3208             response => {
3209             account => 'the account owning the instance group',
3210             created => 'time and date the instance group was created',
3211             domain => 'the domain name of the instance group',
3212             domainid => 'the domain ID of the instance group',
3213             id => 'the id of the instance group',
3214             name => 'the name of the instance group',
3215             },
3216             section => 'VMGroup',
3217             },
3218             listIpForwardingRules => {
3219             description => 'List the ip forwarding rules',
3220             isAsync => 'false',
3221             level => 15,
3222             request => {
3223             optional => {
3224             account => 'the account associated with the ip forwarding rule. Must be used with the domainId parameter.',
3225             domainid =>
3226             'Lists all rules for this id. If used with the account parameter, returns all rules for an account in the specified domain ID.',
3227             id => 'Lists rule with the specified ID.',
3228             ipaddressid => 'list the rule belonging to this public ip address',
3229             keyword => 'List by keyword',
3230             page => 'no description',
3231             pagesize => 'no description',
3232             virtualmachineid => 'Lists all rules applied to the specified Vm.',
3233             },
3234             },
3235             response => {
3236             cidrlist => 'the cidr list to forward traffic from',
3237             id => 'the ID of the port forwarding rule',
3238             ipaddress => 'the public ip address for the port forwarding rule',
3239             ipaddressid => 'the public ip address id for the port forwarding rule',
3240             privateendport => 'the ending port of port forwarding rule\'s private port range',
3241             privateport => 'the starting port of port forwarding rule\'s private port range',
3242             protocol => 'the protocol of the port forwarding rule',
3243             publicendport => 'the ending port of port forwarding rule\'s private port range',
3244             publicport => 'the starting port of port forwarding rule\'s public port range',
3245             state => 'the state of the rule',
3246             virtualmachinedisplayname => 'the VM display name for the port forwarding rule',
3247             virtualmachineid => 'the VM ID for the port forwarding rule',
3248             virtualmachinename => 'the VM name for the port forwarding rule',
3249             },
3250             section => 'NAT',
3251             },
3252             listIsoPermissions => {
3253             description => 'List template visibility and all accounts that have permissions to view this template.',
3254             isAsync => 'false',
3255             level => 15,
3256             request => {
3257             optional => {
3258             account =>
3259             'List template visibility and permissions for the specified account. Must be used with the domainId parameter.',
3260             domainid =>
3261             'List template visibility and permissions by domain. If used with the account parameter, specifies in which domain the specified account exists.',
3262             },
3263             required => { id => 'the template ID' },
3264             },
3265             response => {
3266             account => 'the list of accounts the template is available for',
3267             domainid => 'the ID of the domain to which the template belongs',
3268             id => 'the template ID',
3269             ispublic => 'true if this template is a public template, false otherwise',
3270             },
3271             section => 'ISO',
3272             },
3273             listIsos => {
3274             description => 'Lists all available ISO files.',
3275             isAsync => 'false',
3276             level => 15,
3277             request => {
3278             optional => {
3279             account => 'the account of the ISO file. Must be used with the domainId parameter.',
3280             bootable => 'true if the ISO is bootable, false otherwise',
3281             domainid =>
3282             'lists all available ISO files by ID of a domain. If used with the account parameter, lists all available ISO files for the account in the ID of a domain.',
3283             hypervisor => 'the hypervisor for which to restrict the search',
3284             id => 'list all isos by id',
3285             isofilter =>
3286             'possible values are \'featured\', \'self\', \'self-executable\',\'executable\', and \'community\'. * featured-ISOs that are featured and are publicself-ISOs that have been registered/created by the owner. * selfexecutable-ISOs that have been registered/created by the owner that can be used to deploy a new VM. * executable-all ISOs that can be used to deploy a new VM * community-ISOs that are public.',
3287             ispublic => 'true if the ISO is publicly available to all users, false otherwise.',
3288             isready => 'true if this ISO is ready to be deployed',
3289             keyword => 'List by keyword',
3290             name => 'list all isos by name',
3291             page => 'no description',
3292             pagesize => 'no description',
3293             zoneid => 'the ID of the zone',
3294             },
3295             },
3296             response => {
3297             account => 'the account name to which the template belongs',
3298             accountid => 'the account id to which the template belongs',
3299             bootable => 'true if the ISO is bootable, false otherwise',
3300             checksum => 'checksum of the template',
3301             created => 'the date this template was created',
3302             crossZones => 'true if the template is managed across all Zones, false otherwise',
3303             details => 'additional key/value details tied with template',
3304             displaytext => 'the template display text',
3305             domain => 'the name of the domain to which the template belongs',
3306             domainid => 'the ID of the domain to which the template belongs',
3307             format => 'the format of the template.',
3308             hostid => 'the ID of the secondary storage host for the template',
3309             hostname => 'the name of the secondary storage host for the template',
3310             hypervisor => 'the hypervisor on which the template runs',
3311             id => 'the template ID',
3312             isextractable => 'true if the template is extractable, false otherwise',
3313             isfeatured => 'true if this template is a featured template, false otherwise',
3314             ispublic => 'true if this template is a public template, false otherwise',
3315             isready => 'true if the template is ready to be deployed from, false otherwise.',
3316             jobid =>
3317             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
3318             jobstatus => 'shows the current pending asynchronous job status',
3319             name => 'the template name',
3320             ostypeid => 'the ID of the OS type for this template.',
3321             ostypename => 'the name of the OS type for this template.',
3322             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
3323             removed => 'the date this template was removed',
3324             size => 'the size of the template',
3325             sourcetemplateid => 'the template ID of the parent template if present',
3326             status => 'the status of the template',
3327             templatetag => 'the tag of this template',
3328             templatetype => 'the type of the template',
3329             zoneid => 'the ID of the zone for this template',
3330             zonename => 'the name of the zone for this template',
3331             },
3332             section => 'ISO',
3333             },
3334             listLoadBalancerRuleInstances => {
3335             description => 'List all virtual machine instances that are assigned to a load balancer rule.',
3336             isAsync => 'false',
3337             level => 15,
3338             request => {
3339             optional => {
3340             applied =>
3341             'true if listing all virtual machines currently applied to the load balancer rule; default is true',
3342             keyword => 'List by keyword',
3343             page => 'no description',
3344             pagesize => 'no description',
3345             },
3346             required => { id => 'the ID of the load balancer rule' },
3347             },
3348             response => {
3349             'account' => 'the account associated with the virtual machine',
3350             'cpunumber' => 'the number of cpu this virtual machine is running with',
3351             'cpuspeed' => 'the speed of each cpu',
3352             'cpuused' => 'the amount of the vm\'s CPU currently used',
3353             'created' => 'the date when this virtual machine was created',
3354             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
3355             'domain' => 'the name of the domain in which the virtual machine exists',
3356             'domainid' => 'the ID of the domain in which the virtual machine exists',
3357             'forvirtualnetwork' => 'the virtual network for the service offering',
3358             'group' => 'the group name of the virtual machine',
3359             'groupid' => 'the group ID of the virtual machine',
3360             'guestosid' => 'Os type ID of the virtual machine',
3361             'haenable' => 'true if high-availability is enabled, false otherwise',
3362             'hostid' => 'the ID of the host for the virtual machine',
3363             'hostname' => 'the name of the host for the virtual machine',
3364             'hypervisor' => 'the hypervisor on which the template runs',
3365             'id' => 'the ID of the virtual machine',
3366             'ipaddress' => 'the ip address of the virtual machine',
3367             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
3368             'isoid' => 'the ID of the ISO attached to the virtual machine',
3369             'isoname' => 'the name of the ISO attached to the virtual machine',
3370             'jobid' =>
3371             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
3372             'jobstatus' => 'shows the current pending asynchronous job status',
3373             'memory' => 'the memory allocated for the virtual machine',
3374             'name' => 'the name of the virtual machine',
3375             'networkkbsread' => 'the incoming network traffic on the vm',
3376             'networkkbswrite' => 'the outgoing network traffic on the host',
3377             'nic(*)' => 'the list of nics associated with vm',
3378             'password' => 'the password (if exists) of the virtual machine',
3379             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
3380             'rootdeviceid' => 'device ID of the root volume',
3381             'rootdevicetype' => 'device type of the root volume',
3382             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
3383             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
3384             'serviceofferingname' => 'the name of the service offering of the virtual machine',
3385             'state' => 'the state of the virtual machine',
3386             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
3387             'templateid' =>
3388             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
3389             'templatename' => 'the name of the template for the virtual machine',
3390             'zoneid' => 'the ID of the availablility zone for the virtual machine',
3391             'zonename' => 'the name of the availability zone for the virtual machine',
3392             },
3393             section => 'LoadBalancer',
3394             },
3395             listLoadBalancerRules => {
3396             description => 'Lists load balancer rules.',
3397             isAsync => 'false',
3398             level => 15,
3399             request => {
3400             optional => {
3401             account => 'the account of the load balancer rule. Must be used with the domainId parameter.',
3402             domainid =>
3403             'the domain ID of the load balancer rule. If used with the account parameter, lists load balancer rules for the account in the specified domain.',
3404             id => 'the ID of the load balancer rule',
3405             keyword => 'List by keyword',
3406             name => 'the name of the load balancer rule',
3407             page => 'no description',
3408             pagesize => 'no description',
3409             publicipid => 'the public IP address id of the load balancer rule',
3410             virtualmachineid => 'the ID of the virtual machine of the load balancer rule',
3411             zoneid => 'the availability zone ID',
3412             },
3413             },
3414             response => {
3415             account => 'the account of the load balancer rule',
3416             algorithm => 'the load balancer algorithm (source, roundrobin, leastconn)',
3417             cidrlist => 'the cidr list to forward traffic from',
3418             description => 'the description of the load balancer',
3419             domain => 'the domain of the load balancer rule',
3420             domainid => 'the domain ID of the load balancer rule',
3421             id => 'the load balancer rule ID',
3422             name => 'the name of the load balancer',
3423             privateport => 'the private port',
3424             publicip => 'the public ip address',
3425             publicipid => 'the public ip address id',
3426             publicport => 'the public port',
3427             state => 'the state of the rule',
3428             zoneid => 'the id of the zone the rule belongs to',
3429             },
3430             section => 'LoadBalancer',
3431             },
3432             listLunsOnFiler => {
3433             description => 'List LUN',
3434             isAsync => 'false',
3435             level => 15,
3436             request => { required => { poolname => 'pool name.' } },
3437             response => { id => 'lun id', iqn => 'lun iqn', name => 'lun name', volumeid => 'volume id', },
3438             section => 'NetAppIntegration',
3439             },
3440             listNetworkDevice => {
3441             description => 'List network device.',
3442             isAsync => 'false',
3443             level => 1,
3444             request => {
3445             optional => {
3446             keyword => 'List by keyword',
3447             networkdeviceparameterlist => 'parameters for network device',
3448             networkdevicetype =>
3449             'Network device type, now supports ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer',
3450             page => 'no description',
3451             pagesize => 'no description',
3452             },
3453             },
3454             response => { id => 'the ID of the network device' },
3455             section => 'NetworkDevices',
3456             },
3457             listNetworkOfferings => {
3458             description => 'Lists all available network offerings.',
3459             isAsync => 'false',
3460             level => 15,
3461             request => {
3462             optional => {
3463             availability => 'the availability of network offering. Default value is Required',
3464             displaytext => 'list network offerings by display text',
3465             guestiptype => 'the guest ip type for the network offering, supported types are Direct and Virtual.',
3466             id => 'list network offerings by id',
3467             isdefault => 'true if need to list only default network offerings. Default value is false',
3468             isshared => 'true is network offering supports vlans',
3469             keyword => 'List by keyword',
3470             name => 'list network offerings by name',
3471             page => 'no description',
3472             pagesize => 'no description',
3473             specifyvlan => 'the tags for the network offering.',
3474             traffictype => 'list by traffic type',
3475             zoneid => 'list netowrk offerings available for network creation in specific zone',
3476             },
3477             },
3478             response => {
3479             availability => 'availability of the network offering',
3480             created => 'the date this network offering was created',
3481             displaytext => 'an alternate display text of the network offering.',
3482             guestiptype => 'guest ip type of the network offering',
3483             id => 'the id of the network offering',
3484             isdefault => 'true if network offering is default, false otherwise',
3485             maxconnections => 'the max number of concurrent connection the network offering supports',
3486             name => 'the name of the network offering',
3487             networkrate => 'data transfer rate in megabits per second allowed.',
3488             specifyvlan => 'true if network offering supports vlans, false otherwise',
3489             tags => 'the tags for the network offering',
3490             traffictype =>
3491             'the traffic type for the network offering, supported types are Public, Management, Control, Guest, Vlan or Storage.',
3492             },
3493             section => 'NetworkOffering',
3494             },
3495             listNetworks => {
3496             description => 'Lists all available networks.',
3497             isAsync => 'false',
3498             level => 15,
3499             request => {
3500             optional => {
3501             account => 'account who will own the VLAN. If VLAN is Zone wide, this parameter should be ommited',
3502             domainid => 'domain ID of the account owning a VLAN',
3503             id => 'list networks by id',
3504             isdefault => 'true if network is default, false otherwise',
3505             isshared => 'true if network is shared across accounts in the Zone, false otherwise',
3506             issystem => 'true if network is system, false otherwise',
3507             keyword => 'List by keyword',
3508             page => 'no description',
3509             pagesize => 'no description',
3510             traffictype => 'type of the traffic',
3511             type => 'the type of the network',
3512             zoneid => 'the Zone ID of the network',
3513             },
3514             },
3515             response => {
3516             'account' => 'the owner of the network',
3517             'broadcastdomaintype' => 'Broadcast domain type of the network',
3518             'broadcasturi' => 'broadcast uri of the network',
3519             'displaytext' => 'the displaytext of the network',
3520             'dns1' => 'the first DNS for the network',
3521             'dns2' => 'the second DNS for the network',
3522             'domain' => 'the domain name of the network owner',
3523             'domainid' => 'the domain id of the network owner',
3524             'endip' => 'the end ip of the network',
3525             'gateway' => 'the network\'s gateway',
3526             'id' => 'the id of the network',
3527             'isdefault' => 'true if network is default, false otherwise',
3528             'isshared' => 'true if network is shared, false otherwise',
3529             'issystem' => 'true if network is system, false otherwise',
3530             'name' => 'the name of the network',
3531             'netmask' => 'the network\'s netmask',
3532             'networkdomain' => 'the network domain',
3533             'networkofferingavailability' => 'availability of the network offering the network is created from',
3534             'networkofferingdisplaytext' => 'display text of the network offering the network is created from',
3535             'networkofferingid' => 'network offering id the network is created from',
3536             'networkofferingname' => 'name of the network offering the network is created from',
3537             'related' => 'related to what other network configuration',
3538             'securitygroupenabled' => 'true if security group is enabled, false otherwise',
3539             'service(*)' => 'the list of services',
3540             'startip' => 'the start ip of the network',
3541             'state' => 'state of the network',
3542             'tags' => 'comma separated tag',
3543             'traffictype' => 'the traffic type of the network',
3544             'type' => 'the type of the network',
3545             'vlan' => 'the vlan of the network',
3546             'zoneid' => 'zone id of the network',
3547             },
3548             section => 'Network',
3549             },
3550             listOsCategories => {
3551             description => 'Lists all supported OS categories for this cloud.',
3552             isAsync => 'false',
3553             level => 15,
3554             request => {
3555             optional => {
3556             id => 'list Os category by id',
3557             keyword => 'List by keyword',
3558             page => 'no description',
3559             pagesize => 'no description',
3560             },
3561             },
3562             response => { id => 'the ID of the OS category', name => 'the name of the OS category', },
3563             section => 'GuestOS',
3564             },
3565             listOsTypes => {
3566             description => 'Lists all supported OS types for this cloud.',
3567             isAsync => 'false',
3568             level => 15,
3569             request => {
3570             optional => {
3571             id => 'list by Os type Id',
3572             keyword => 'List by keyword',
3573             oscategoryid => 'list by Os Category id',
3574             page => 'no description',
3575             pagesize => 'no description',
3576             },
3577             },
3578             response => {
3579             description => 'the name/description of the OS type',
3580             id => 'the ID of the OS type',
3581             oscategoryid => 'the ID of the OS category',
3582             },
3583             section => 'GuestOS',
3584             },
3585             listPods => {
3586             description => 'Lists all Pods.',
3587             isAsync => 'false',
3588             level => 3,
3589             request => {
3590             optional => {
3591             allocationstate => 'list pods by allocation state',
3592             id => 'list Pods by ID',
3593             keyword => 'List by keyword',
3594             name => 'list Pods by name',
3595             page => 'no description',
3596             pagesize => 'no description',
3597             zoneid => 'list Pods by Zone ID',
3598             },
3599             },
3600             response => {
3601             allocationstate => 'the allocation state of the cluster',
3602             endip => 'the ending IP for the Pod',
3603             gateway => 'the gateway of the Pod',
3604             id => 'the ID of the Pod',
3605             name => 'the name of the Pod',
3606             netmask => 'the netmask of the Pod',
3607             startip => 'the starting IP for the Pod',
3608             zoneid => 'the Zone ID of the Pod',
3609             zonename => 'the Zone name of the Pod',
3610             },
3611             section => 'Pod',
3612             },
3613             listPools => {
3614             description => 'List Pool',
3615             isAsync => 'false',
3616             level => 15,
3617             request => undef,
3618             response => { algorithm => 'pool algorithm', id => 'pool id', name => 'pool name' },
3619             section => 'NetAppIntegration',
3620             },
3621             listPortForwardingRules => {
3622             description => 'Lists all port forwarding rules for an IP address.',
3623             isAsync => 'false',
3624             level => 15,
3625             request => {
3626             optional => {
3627             account => 'account. Must be used with the domainId parameter.',
3628             domainid =>
3629             'the domain ID. If used with the account parameter, lists port forwarding rules for the specified account in this domain.',
3630             id => 'Lists rule with the specified ID.',
3631             ipaddressid => 'the id of IP address of the port forwarding services',
3632             keyword => 'List by keyword',
3633             page => 'no description',
3634             pagesize => 'no description',
3635             },
3636             },
3637             response => {
3638             cidrlist => 'the cidr list to forward traffic from',
3639             id => 'the ID of the port forwarding rule',
3640             ipaddress => 'the public ip address for the port forwarding rule',
3641             ipaddressid => 'the public ip address id for the port forwarding rule',
3642             privateendport => 'the ending port of port forwarding rule\'s private port range',
3643             privateport => 'the starting port of port forwarding rule\'s private port range',
3644             protocol => 'the protocol of the port forwarding rule',
3645             publicendport => 'the ending port of port forwarding rule\'s private port range',
3646             publicport => 'the starting port of port forwarding rule\'s public port range',
3647             state => 'the state of the rule',
3648             virtualmachinedisplayname => 'the VM display name for the port forwarding rule',
3649             virtualmachineid => 'the VM ID for the port forwarding rule',
3650             virtualmachinename => 'the VM name for the port forwarding rule',
3651             },
3652             section => 'Firewall',
3653             },
3654             listPublicIpAddresses => {
3655             description => 'Lists all public ip addresses',
3656             isAsync => 'false',
3657             level => 15,
3658             request => {
3659             optional => {
3660             account => 'lists all public IP addresses by account. Must be used with the domainId parameter.',
3661             allocatedonly => 'limits search results to allocated public IP addresses',
3662             domainid =>
3663             'lists all public IP addresses by domain ID. If used with the account parameter, lists all public IP addresses by account for specified domain.',
3664             forloadbalancing => 'list only ips used for load balancing',
3665             forvirtualnetwork => 'the virtual network for the IP address',
3666             id => 'lists ip address by id',
3667             ipaddress => 'lists the specified IP address',
3668             keyword => 'List by keyword',
3669             page => 'no description',
3670             pagesize => 'no description',
3671             vlanid => 'lists all public IP addresses by VLAN ID',
3672             zoneid => 'lists all public IP addresses by Zone ID',
3673             },
3674             },
3675             response => {
3676             account => 'the account the public IP address is associated with',
3677             allocated => 'date the public IP address was acquired',
3678             associatednetworkid => 'the ID of the Network associated with the IP address',
3679             domain => 'the domain the public IP address is associated with',
3680             domainid => 'the domain ID the public IP address is associated with',
3681             forvirtualnetwork => 'the virtual network for the IP address',
3682             id => 'public IP address id',
3683             ipaddress => 'public IP address',
3684             issourcenat => 'true if the IP address is a source nat address, false otherwise',
3685             isstaticnat => 'true if this ip is for static nat, false otherwise',
3686             jobid =>
3687             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
3688             jobstatus => 'shows the current pending asynchronous job status',
3689             networkid => 'the ID of the Network where ip belongs to',
3690             state => 'State of the ip address. Can be: Allocatin, Allocated and Releasing',
3691             virtualmachinedisplayname =>
3692             'virutal machine display name the ip address is assigned to (not null only for static nat Ip)',
3693             virtualmachineid => 'virutal machine id the ip address is assigned to (not null only for static nat Ip)',
3694             virtualmachinename => 'virutal machine name the ip address is assigned to (not null only for static nat Ip)',
3695             vlanid => 'the ID of the VLAN associated with the IP address',
3696             vlanname => 'the VLAN associated with the IP address',
3697             zoneid => 'the ID of the zone the public IP address belongs to',
3698             zonename => 'the name of the zone the public IP address belongs to',
3699             },
3700             section => 'Address',
3701             },
3702             listRemoteAccessVpns => {
3703             description => 'Lists remote access vpns',
3704             isAsync => 'false',
3705             level => 15,
3706             request => {
3707             optional => {
3708             account => 'the account of the remote access vpn. Must be used with the domainId parameter.',
3709             domainid =>
3710             'the domain ID of the remote access vpn rule. If used with the account parameter, lists remote access vpns for the account in the specified domain.',
3711             keyword => 'List by keyword',
3712             page => 'no description',
3713             pagesize => 'no description',
3714             },
3715             required => { publicipid => 'public ip address id of the vpn server' },
3716             },
3717             response => {
3718             account => 'the account of the remote access vpn',
3719             domainid => 'the domain id of the account of the remote access vpn',
3720             domainname => 'the domain name of the account of the remote access vpn',
3721             iprange => 'the range of ips to allocate to the clients',
3722             presharedkey => 'the ipsec preshared key',
3723             publicip => 'the public ip address of the vpn server',
3724             publicipid => 'the public ip address of the vpn server',
3725             state => 'the state of the rule',
3726             },
3727             section => 'VPN',
3728             },
3729             listResourceLimits => {
3730             description => 'Lists resource limits.',
3731             isAsync => 'false',
3732             level => 15,
3733             request => {
3734             optional => {
3735             account => 'Lists resource limits by account. Must be used with the domainId parameter.',
3736             domainid =>
3737             'Lists resource limits by domain ID. If used with the account parameter, lists resource limits for a specified account in a specified domain.',
3738             id => 'Lists resource limits by ID.',
3739             keyword => 'List by keyword',
3740             page => 'no description',
3741             pagesize => 'no description',
3742             resourcetype =>
3743             'Type of resource to update. Values are 0, 1, 2, 3, and 4. 0 - Instance. Number of instances a user can create. 1 - IP. Number of public IP addresses a user can own. 2 - Volume. Number of disk volumes a user can create.3 - Snapshot. Number of snapshots a user can create.4 - Template. Number of templates that a user can register/create.',
3744             },
3745             },
3746             response => {
3747             account => 'the account of the resource limit',
3748             domain => 'the domain name of the resource limit',
3749             domainid => 'the domain ID of the resource limit',
3750             max => 'the maximum number of the resource. A -1 means the resource currently has no limit.',
3751             resourcetype =>
3752             'resource type. Values include 0, 1, 2, 3, 4. See the resourceType parameter for more information on these values.',
3753             },
3754             section => 'Limit',
3755             },
3756             listRouters => {
3757             description => 'List routers.',
3758             isAsync => 'false',
3759             level => 7,
3760             request => {
3761             optional => {
3762             account => 'the name of the account associated with the router. Must be used with the domainId parameter.',
3763             domainid =>
3764             'the domain ID associated with the router. If used with the account parameter, lists all routers associated with an account in the specified domain.',
3765             hostid => 'the host ID of the router',
3766             id => 'the ID of the disk router',
3767             keyword => 'List by keyword',
3768             name => 'the name of the router',
3769             networkid => 'list by network id',
3770             page => 'no description',
3771             pagesize => 'no description',
3772             podid => 'the Pod ID of the router',
3773             state => 'the state of the router',
3774             zoneid => 'the Zone ID of the router',
3775             },
3776             },
3777             response => {
3778             account => 'the account associated with the router',
3779             created => 'the date and time the router was created',
3780             dns1 => 'the first DNS for the router',
3781             dns2 => 'the second DNS for the router',
3782             domain => 'the domain associated with the router',
3783             domainid => 'the domain ID associated with the router',
3784             gateway => 'the gateway for the router',
3785             guestipaddress => 'the guest IP address for the router',
3786             guestmacaddress => 'the guest MAC address for the router',
3787             guestnetmask => 'the guest netmask for the router',
3788             guestnetworkid => 'the ID of the corresponding guest network',
3789             hostid => 'the host ID for the router',
3790             hostname => 'the hostname for the router',
3791             id => 'the id of the router',
3792             isredundantrouter => 'if this router is an redundant virtual router',
3793             linklocalip => 'the link local IP address for the router',
3794             linklocalmacaddress => 'the link local MAC address for the router',
3795             linklocalnetmask => 'the link local netmask for the router',
3796             linklocalnetworkid => 'the ID of the corresponding link local network',
3797             name => 'the name of the router',
3798             networkdomain => 'the network domain for the router',
3799             podid => 'the Pod ID for the router',
3800             publicip => 'the public IP address for the router',
3801             publicmacaddress => 'the public MAC address for the router',
3802             publicnetmask => 'the public netmask for the router',
3803             publicnetworkid => 'the ID of the corresponding public network',
3804             redundantstate => 'the state of redundant virtual router',
3805             serviceofferingid => 'the ID of the service offering of the virtual machine',
3806             serviceofferingname => 'the name of the service offering of the virtual machine',
3807             state => 'the state of the router',
3808             templateid => 'the template ID for the router',
3809             zoneid => 'the Zone ID for the router',
3810             zonename => 'the Zone name for the router',
3811             },
3812             section => 'Router',
3813             },
3814             listSecurityGroups => {
3815             description => 'Lists security groups',
3816             isAsync => 'false',
3817             level => 15,
3818             request => {
3819             optional => {
3820             account => 'lists all available port security groups for the account. Must be used with domainID parameter',
3821             domainid =>
3822             'lists all available security groups for the domain ID. If used with the account parameter, lists all available security groups for the account in the specified domain ID.',
3823             id => 'list the security group by the id provided',
3824             keyword => 'List by keyword',
3825             page => 'no description',
3826             pagesize => 'no description',
3827             securitygroupname => 'lists security groups by name',
3828             virtualmachineid => 'lists security groups by virtual machine id',
3829             },
3830             },
3831             response => {
3832             'account' => 'the account owning the security group',
3833             'description' => 'the description of the security group',
3834             'domain' => 'the domain name of the security group',
3835             'domainid' => 'the domain ID of the security group',
3836             'id' => 'the ID of the security group',
3837             'ingressrule(*)' => 'the list of ingress rules associated with the security group',
3838             'jobid' =>
3839             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
3840             'jobstatus' => 'shows the current pending asynchronous job status',
3841             'name' => 'the name of the security group',
3842             },
3843             section => 'SecurityGroup',
3844             },
3845             listServiceOfferings => {
3846             description => 'Lists all available service offerings.',
3847             isAsync => 'false',
3848             level => 15,
3849             request => {
3850             optional => {
3851             domainid => 'the ID of the domain associated with the service offering',
3852             id => 'ID of the service offering',
3853             issystem => 'is this a system vm offering',
3854             keyword => 'List by keyword',
3855             name => 'name of the service offering',
3856             page => 'no description',
3857             pagesize => 'no description',
3858             systemvmtype =>
3859             'the system VM type. Possible types are \'consoleproxy\', \'secondarystoragevm\' or \'domainrouter\'.',
3860             virtualmachineid =>
3861             'the ID of the virtual machine. Pass this in if you want to see the available service offering that a virtual machine can be changed to.',
3862             },
3863             },
3864             response => {
3865             cpunumber => 'the number of CPU',
3866             cpuspeed => 'the clock rate CPU speed in Mhz',
3867             created => 'the date this service offering was created',
3868             defaultuse => 'is this a default system vm offering',
3869             displaytext => 'an alternate display text of the service offering.',
3870             domain => 'Domain name for the offering',
3871             domainid => 'the domain id of the service offering',
3872             hosttags => 'the host tag for the service offering',
3873             id => 'the id of the service offering',
3874             issystem => 'is this a system vm offering',
3875             limitcpuuse => 'restrict the CPU usage to committed service offering',
3876             memory => 'the memory in MB',
3877             name => 'the name of the service offering',
3878             networkrate => 'data transfer rate in megabits per second allowed.',
3879             offerha => 'the ha support in the service offering',
3880             storagetype => 'the storage type for this service offering',
3881             systemvmtype => 'is this a the systemvm type for system vm offering',
3882             tags => 'the tags for the service offering',
3883             },
3884             section => 'ServiceOffering',
3885             },
3886             listSnapshotPolicies => {
3887             description => 'Lists snapshot policies.',
3888             isAsync => 'false',
3889             level => 15,
3890             request => {
3891             optional => {
3892             account => 'lists snapshot policies for the specified account. Must be used with domainid parameter.',
3893             domainid =>
3894             'the domain ID. If used with the account parameter, lists snapshot policies for the specified account in this domain.',
3895             keyword => 'List by keyword',
3896             page => 'no description',
3897             pagesize => 'no description',
3898             },
3899             required => { volumeid => 'the ID of the disk volume' },
3900             },
3901             response => {
3902             id => 'the ID of the snapshot policy',
3903             intervaltype => 'the interval type of the snapshot policy',
3904             maxsnaps => 'maximum number of snapshots retained',
3905             schedule => 'time the snapshot is scheduled to be taken.',
3906             timezone => 'the time zone of the snapshot policy',
3907             volumeid => 'the ID of the disk volume',
3908             },
3909             section => 'Snapshot',
3910             },
3911             listSnapshots => {
3912             description => 'Lists all available snapshots for the account.',
3913             isAsync => 'false',
3914             level => 15,
3915             request => {
3916             optional => {
3917             account => 'lists snapshot belongig to the specified account. Must be used with the domainId parameter.',
3918             domainid =>
3919             'the domain ID. If used with the account parameter, lists snapshots for the specified account in this domain.',
3920             id => 'lists snapshot by snapshot ID',
3921             intervaltype => 'valid values are HOURLY, DAILY, WEEKLY, and MONTHLY.',
3922             isrecursive =>
3923             'defaults to false, but if true, lists all snapshots from the parent specified by the domain id till leaves.',
3924             keyword => 'List by keyword',
3925             name => 'lists snapshot by snapshot name',
3926             page => 'no description',
3927             pagesize => 'no description',
3928             snapshottype => 'valid values are MANUAL or RECURRING.',
3929             volumeid => 'the ID of the disk volume',
3930             },
3931             },
3932             response => {
3933             account => 'the account associated with the snapshot',
3934             created => 'the date the snapshot was created',
3935             domain => 'the domain name of the snapshot\'s account',
3936             domainid => 'the domain ID of the snapshot\'s account',
3937             id => 'ID of the snapshot',
3938             intervaltype => 'valid types are hourly, daily, weekly, monthy, template, and none.',
3939             jobid =>
3940             'the job ID associated with the snapshot. This is only displayed if the snapshot listed is part of a currently running asynchronous job.',
3941             jobstatus =>
3942             'the job status associated with the snapshot. This is only displayed if the snapshot listed is part of a currently running asynchronous job.',
3943             name => 'name of the snapshot',
3944             snapshottype => 'the type of the snapshot',
3945             state =>
3946             'the state of the snapshot. BackedUp means that snapshot is ready to be used; Creating - the snapshot is being allocated on the primary storage; BackingUp - the snapshot is being backed up on secondary storage',
3947             volumeid => 'ID of the disk volume',
3948             volumename => 'name of the disk volume',
3949             volumetype => 'type of the disk volume',
3950             },
3951             section => 'Snapshot',
3952             },
3953             listSSHKeyPairs => {
3954             description => 'List registered keypairs',
3955             isAsync => 'false',
3956             level => 15,
3957             request => {
3958             optional => {
3959             fingerprint => 'A public key fingerprint to look for',
3960             keyword => 'List by keyword',
3961             name => 'A key pair name to look for',
3962             page => 'no description',
3963             pagesize => 'no description',
3964             },
3965             },
3966             response => {
3967             fingerprint => 'Fingerprint of the public key',
3968             name => 'Name of the keypair',
3969             privatekey => 'Private key',
3970             },
3971             section => 'SSHKeyPair',
3972             },
3973             listStoragePools => {
3974             description => 'Lists storage pools.',
3975             isAsync => 'false',
3976             level => 3,
3977             request => {
3978             optional => {
3979             clusterid => 'list storage pools belongig to the specific cluster',
3980             id => 'the ID of the storage pool',
3981             ipaddress => 'the IP address for the storage pool',
3982             keyword => 'List by keyword',
3983             name => 'the name of the storage pool',
3984             page => 'no description',
3985             pagesize => 'no description',
3986             path => 'the storage pool path',
3987             podid => 'the Pod ID for the storage pool',
3988             zoneid => 'the Zone ID for the storage pool',
3989             },
3990             },
3991             response => {
3992             clusterid => 'the ID of the cluster for the storage pool',
3993             clustername => 'the name of the cluster for the storage pool',
3994             created => 'the date and time the storage pool was created',
3995             disksizeallocated => 'the host\'s currently allocated disk size',
3996             disksizetotal => 'the total disk size of the storage pool',
3997             id => 'the ID of the storage pool',
3998             ipaddress => 'the IP address of the storage pool',
3999             jobid =>
4000             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the storage pool',
4001             jobstatus => 'shows the current pending asynchronous job status',
4002             name => 'the name of the storage pool',
4003             path => 'the storage pool path',
4004             podid => 'the Pod ID of the storage pool',
4005             podname => 'the Pod name of the storage pool',
4006             state => 'the state of the storage pool',
4007             tags => 'the tags for the storage pool',
4008             type => 'the storage pool type',
4009             zoneid => 'the Zone ID of the storage pool',
4010             zonename => 'the Zone name of the storage pool',
4011             },
4012             section => 'StoragePools',
4013             },
4014             listSystemVms => {
4015             description => 'List system virtual machines.',
4016             isAsync => 'false',
4017             level => 3,
4018             request => {
4019             optional => {
4020             hostid => 'the host ID of the system VM',
4021             id => 'the ID of the system VM',
4022             keyword => 'List by keyword',
4023             name => 'the name of the system VM',
4024             page => 'no description',
4025             pagesize => 'no description',
4026             podid => 'the Pod ID of the system VM',
4027             state => 'the state of the system VM',
4028             systemvmtype => 'the system VM type. Possible types are \'consoleproxy\' and \'secondarystoragevm\'.',
4029             zoneid => 'the Zone ID of the system VM',
4030             },
4031             },
4032             response => {
4033             activeviewersessions => 'the number of active console sessions for the console proxy system vm',
4034             created => 'the date and time the system VM was created',
4035             dns1 => 'the first DNS for the system VM',
4036             dns2 => 'the second DNS for the system VM',
4037             gateway => 'the gateway for the system VM',
4038             hostid => 'the host ID for the system VM',
4039             hostname => 'the hostname for the system VM',
4040             id => 'the ID of the system VM',
4041             jobid =>
4042             'the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
4043             jobstatus =>
4044             'the job status associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
4045             linklocalip => 'the link local IP address for the system vm',
4046             linklocalmacaddress => 'the link local MAC address for the system vm',
4047             linklocalnetmask => 'the link local netmask for the system vm',
4048             name => 'the name of the system VM',
4049             networkdomain => 'the network domain for the system VM',
4050             podid => 'the Pod ID for the system VM',
4051             privateip => 'the private IP address for the system VM',
4052             privatemacaddress => 'the private MAC address for the system VM',
4053             privatenetmask => 'the private netmask for the system VM',
4054             publicip => 'the public IP address for the system VM',
4055             publicmacaddress => 'the public MAC address for the system VM',
4056             publicnetmask => 'the public netmask for the system VM',
4057             state => 'the state of the system VM',
4058             systemvmtype => 'the system VM type',
4059             templateid => 'the template ID for the system VM',
4060             zoneid => 'the Zone ID for the system VM',
4061             zonename => 'the Zone name for the system VM',
4062             },
4063             section => 'SystemVM',
4064             },
4065             listTemplatePermissions => {
4066             description => 'List template visibility and all accounts that have permissions to view this template.',
4067             isAsync => 'false',
4068             level => 15,
4069             request => {
4070             optional => {
4071             account =>
4072             'List template visibility and permissions for the specified account. Must be used with the domainId parameter.',
4073             domainid =>
4074             'List template visibility and permissions by domain. If used with the account parameter, specifies in which domain the specified account exists.',
4075             },
4076             required => { id => 'the template ID' },
4077             },
4078             response => {
4079             account => 'the list of accounts the template is available for',
4080             domainid => 'the ID of the domain to which the template belongs',
4081             id => 'the template ID',
4082             ispublic => 'true if this template is a public template, false otherwise',
4083             },
4084             section => 'Template',
4085             },
4086             listTemplates => {
4087             description => 'List all public, private, and privileged templates.',
4088             isAsync => 'false',
4089             level => 15,
4090             request => {
4091             optional => {
4092             account => 'list template by account. Must be used with the domainId parameter.',
4093             domainid =>
4094             'list all templates in specified domain. If used with the account parameter, lists all templates for an account in the specified domain.',
4095             hypervisor => 'the hypervisor for which to restrict the search',
4096             id => 'the template ID',
4097             keyword => 'List by keyword',
4098             name => 'the template name',
4099             page => 'no description',
4100             pagesize => 'no description',
4101             zoneid => 'list templates by zoneId',
4102             },
4103             required => {
4104             templatefilter =>
4105             'possible values are \'featured\', \'self\', \'self-executable\', \'executable\', and \'community\'.* featured-templates that are featured and are public* self-templates that have been registered/created by the owner* selfexecutable-templates that have been registered/created by the owner that can be used to deploy a new VM* executable-all templates that can be used to deploy a new VM* community-templates that are public.',
4106             },
4107             },
4108             response => {
4109             account => 'the account name to which the template belongs',
4110             accountid => 'the account id to which the template belongs',
4111             bootable => 'true if the ISO is bootable, false otherwise',
4112             checksum => 'checksum of the template',
4113             created => 'the date this template was created',
4114             crossZones => 'true if the template is managed across all Zones, false otherwise',
4115             details => 'additional key/value details tied with template',
4116             displaytext => 'the template display text',
4117             domain => 'the name of the domain to which the template belongs',
4118             domainid => 'the ID of the domain to which the template belongs',
4119             format => 'the format of the template.',
4120             hostid => 'the ID of the secondary storage host for the template',
4121             hostname => 'the name of the secondary storage host for the template',
4122             hypervisor => 'the hypervisor on which the template runs',
4123             id => 'the template ID',
4124             isextractable => 'true if the template is extractable, false otherwise',
4125             isfeatured => 'true if this template is a featured template, false otherwise',
4126             ispublic => 'true if this template is a public template, false otherwise',
4127             isready => 'true if the template is ready to be deployed from, false otherwise.',
4128             jobid =>
4129             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
4130             jobstatus => 'shows the current pending asynchronous job status',
4131             name => 'the template name',
4132             ostypeid => 'the ID of the OS type for this template.',
4133             ostypename => 'the name of the OS type for this template.',
4134             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
4135             removed => 'the date this template was removed',
4136             size => 'the size of the template',
4137             sourcetemplateid => 'the template ID of the parent template if present',
4138             status => 'the status of the template',
4139             templatetag => 'the tag of this template',
4140             templatetype => 'the type of the template',
4141             zoneid => 'the ID of the zone for this template',
4142             zonename => 'the name of the zone for this template',
4143             },
4144             section => 'Template',
4145             },
4146             listTrafficMonitors => {
4147             description => 'List traffic monitor Hosts.',
4148             isAsync => 'false',
4149             level => 1,
4150             request => {
4151             optional => { keyword => 'List by keyword', page => 'no description', pagesize => 'no description', },
4152             required => { zoneid => 'zone Id' },
4153             },
4154             response => {
4155             id => 'the ID of the external firewall',
4156             ipaddress => 'the management IP address of the external firewall',
4157             numretries => 'the number of times to retry requests to the external firewall',
4158             privateinterface => 'the private interface of the external firewall',
4159             privatezone => 'the private security zone of the external firewall',
4160             publicinterface => 'the public interface of the external firewall',
4161             publiczone => 'the public security zone of the external firewall',
4162             timeout => 'the timeout (in seconds) for requests to the external firewall',
4163             usageinterface => 'the usage interface of the external firewall',
4164             username => 'the username that\'s used to log in to the external firewall',
4165             zoneid => 'the zone ID of the external firewall',
4166             },
4167             section => 'TrafficMonitor',
4168             },
4169             listUsageRecords => {
4170             description => 'Lists usage records for accounts',
4171             isAsync => 'false',
4172             level => 1,
4173             request => {
4174             optional => {
4175             account => 'List usage records for the specified user.',
4176             accountid => 'List usage records for the specified account',
4177             domainid => 'List usage records for the specified domain.',
4178             keyword => 'List by keyword',
4179             page => 'no description',
4180             pagesize => 'no description',
4181             },
4182             required => {
4183             enddate =>
4184             'End date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-03.',
4185             startdate =>
4186             'Start date range for usage record query. Use yyyy-MM-dd as the date format, e.g. startDate=2009-06-01.',
4187             },
4188             },
4189             response => {
4190             account => 'the user account name',
4191             accountid => 'the user account Id',
4192             assigneddate => 'the assign date of the account',
4193             description => 'description of account, including account name, service offering, and template',
4194             domainid => 'the domain ID number',
4195             enddate => 'end date of account',
4196             ipaddress => 'the IP address',
4197             issourcenat => 'source Nat flag for IPAddress',
4198             name => 'virtual machine name',
4199             offeringid => 'service offering ID number',
4200             rawusage => 'raw usage in hours',
4201             releaseddate => 'the release date of the account',
4202             startdate => 'start date of account',
4203             templateid => 'template ID number',
4204             type => 'type',
4205             usage => 'usage in hours',
4206             usageid => 'id of the usage entity',
4207             usagetype => 'usage type',
4208             virtualmachineid => 'virtual machine ID number',
4209             zoneid => 'the zone ID number',
4210             },
4211             section => 'Usage',
4212             },
4213             listUsers => {
4214             description => 'Lists user accounts',
4215             isAsync => 'false',
4216             level => 7,
4217             request => {
4218             optional => {
4219             account => 'List user by account. Must be used with the domainId parameter.',
4220             accounttype =>
4221             'List users by account type. Valid types include admin, domain-admin, read-only-admin, or user.',
4222             domainid =>
4223             'List all users in a domain. If used with the account parameter, lists an account in a specific domain.',
4224             id => 'List user by ID.',
4225             keyword => 'List by keyword',
4226             page => 'no description',
4227             pagesize => 'no description',
4228             state => 'List users by state of the user account.',
4229             username => 'List user by the username',
4230             },
4231             },
4232             response => {
4233             account => 'the account name of the user',
4234             accounttype => 'the account type of the user',
4235             apikey => 'the api key of the user',
4236             created => 'the date and time the user account was created',
4237             domain => 'the domain name of the user',
4238             domainid => 'the domain ID of the user',
4239             email => 'the user email address',
4240             firstname => 'the user firstname',
4241             id => 'the user ID',
4242             lastname => 'the user lastname',
4243             secretkey => 'the secret key of the user',
4244             state => 'the user state',
4245             timezone => 'the timezone user was created in',
4246             username => 'the user name',
4247             },
4248             section => 'User',
4249             },
4250             listVirtualMachines => {
4251             description => 'List the virtual machines owned by the account.',
4252             isAsync => 'false',
4253             level => 15,
4254             request => {
4255             optional => {
4256             account => 'account. Must be used with the domainId parameter.',
4257             domainid =>
4258             'the domain ID. If used with the account parameter, lists virtual machines for the specified account in this domain.',
4259             forvirtualnetwork => 'list by network type; true if need to list vms using Virtual Network, false otherwise',
4260             groupid => 'the group ID',
4261             hostid => 'the host ID',
4262             hypervisor => 'the target hypervisor for the template',
4263             id => 'the ID of the virtual machine',
4264             isrecursive =>
4265             'Must be used with domainId parameter. Defaults to false, but if true, lists all vms from the parent specified by the domain id till leaves.',
4266             keyword => 'List by keyword',
4267             name => 'name of the virtual machine',
4268             networkid => 'list by network id',
4269             page => 'no description',
4270             pagesize => 'no description',
4271             podid => 'the pod ID',
4272             state => 'state of the virtual machine',
4273             storageid => 'the storage ID where vm\'s volumes belong to',
4274             zoneid => 'the availability zone ID',
4275             },
4276             },
4277             response => {
4278             'account' => 'the account associated with the virtual machine',
4279             'cpunumber' => 'the number of cpu this virtual machine is running with',
4280             'cpuspeed' => 'the speed of each cpu',
4281             'cpuused' => 'the amount of the vm\'s CPU currently used',
4282             'created' => 'the date when this virtual machine was created',
4283             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
4284             'domain' => 'the name of the domain in which the virtual machine exists',
4285             'domainid' => 'the ID of the domain in which the virtual machine exists',
4286             'forvirtualnetwork' => 'the virtual network for the service offering',
4287             'group' => 'the group name of the virtual machine',
4288             'groupid' => 'the group ID of the virtual machine',
4289             'guestosid' => 'Os type ID of the virtual machine',
4290             'haenable' => 'true if high-availability is enabled, false otherwise',
4291             'hostid' => 'the ID of the host for the virtual machine',
4292             'hostname' => 'the name of the host for the virtual machine',
4293             'hypervisor' => 'the hypervisor on which the template runs',
4294             'id' => 'the ID of the virtual machine',
4295             'ipaddress' => 'the ip address of the virtual machine',
4296             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
4297             'isoid' => 'the ID of the ISO attached to the virtual machine',
4298             'isoname' => 'the name of the ISO attached to the virtual machine',
4299             'jobid' =>
4300             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
4301             'jobstatus' => 'shows the current pending asynchronous job status',
4302             'memory' => 'the memory allocated for the virtual machine',
4303             'name' => 'the name of the virtual machine',
4304             'networkkbsread' => 'the incoming network traffic on the vm',
4305             'networkkbswrite' => 'the outgoing network traffic on the host',
4306             'nic(*)' => 'the list of nics associated with vm',
4307             'password' => 'the password (if exists) of the virtual machine',
4308             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
4309             'rootdeviceid' => 'device ID of the root volume',
4310             'rootdevicetype' => 'device type of the root volume',
4311             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
4312             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
4313             'serviceofferingname' => 'the name of the service offering of the virtual machine',
4314             'state' => 'the state of the virtual machine',
4315             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
4316             'templateid' =>
4317             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
4318             'templatename' => 'the name of the template for the virtual machine',
4319             'zoneid' => 'the ID of the availablility zone for the virtual machine',
4320             'zonename' => 'the name of the availability zone for the virtual machine',
4321             },
4322             section => 'VM',
4323             },
4324             listVlanIpRanges => {
4325             description => 'Lists all VLAN IP ranges.',
4326             isAsync => 'false',
4327             level => 1,
4328             request => {
4329             optional => {
4330             account =>
4331             'the account with which the VLAN IP range is associated. Must be used with the domainId parameter.',
4332             domainid =>
4333             'the domain ID with which the VLAN IP range is associated. If used with the account parameter, returns all VLAN IP ranges for that account in the specified domain.',
4334             forvirtualnetwork => 'true if VLAN is of Virtual type, false if Direct',
4335             id => 'the ID of the VLAN IP range',
4336             keyword => 'List by keyword',
4337             networkid => 'network id of the VLAN IP range',
4338             page => 'no description',
4339             pagesize => 'no description',
4340             podid => 'the Pod ID of the VLAN IP range',
4341             vlan => 'the ID or VID of the VLAN. Default is an \'untagged\' VLAN.',
4342             zoneid => 'the Zone ID of the VLAN IP range',
4343             },
4344             },
4345             response => {
4346             account => 'the account of the VLAN IP range',
4347             description => 'the description of the VLAN IP range',
4348             domain => 'the domain name of the VLAN IP range',
4349             domainid => 'the domain ID of the VLAN IP range',
4350             endip => 'the end ip of the VLAN IP range',
4351             forvirtualnetwork => 'the virtual network for the VLAN IP range',
4352             gateway => 'the gateway of the VLAN IP range',
4353             id => 'the ID of the VLAN IP range',
4354             netmask => 'the netmask of the VLAN IP range',
4355             networkid => 'the network id of vlan range',
4356             podid => 'the Pod ID for the VLAN IP range',
4357             podname => 'the Pod name for the VLAN IP range',
4358             startip => 'the start ip of the VLAN IP range',
4359             vlan => 'the ID or VID of the VLAN.',
4360             zoneid => 'the Zone ID of the VLAN IP range',
4361             },
4362             section => 'VLAN',
4363             },
4364             listVolumes => {
4365             description => 'Lists all volumes.',
4366             isAsync => 'false',
4367             level => 15,
4368             request => {
4369             optional => {
4370             account => 'the account associated with the disk volume. Must be used with the domainId parameter.',
4371             domainid =>
4372             'Lists all disk volumes for the specified domain ID. If used with the account parameter, returns all disk volumes for an account in the specified domain ID.',
4373             hostid => 'list volumes on specified host',
4374             id => 'the ID of the disk volume',
4375             isrecursive =>
4376             'defaults to false, but if true, lists all volumes from the parent specified by the domain id till leaves.',
4377             keyword => 'List by keyword',
4378             name => 'the name of the disk volume',
4379             page => 'no description',
4380             pagesize => 'no description',
4381             podid => 'the pod id the disk volume belongs to',
4382             type => 'the type of disk volume',
4383             virtualmachineid => 'the ID of the virtual machine',
4384             zoneid => 'the ID of the availability zone',
4385             },
4386             },
4387             response => {
4388             account => 'the account associated with the disk volume',
4389             attached => 'the date the volume was attached to a VM instance',
4390             created => 'the date the disk volume was created',
4391             destroyed => 'the boolean state of whether the volume is destroyed or not',
4392             deviceid =>
4393             'the ID of the device on user vm the volume is attahed to. This tag is not returned when the volume is detached.',
4394             diskofferingdisplaytext => 'the display text of the disk offering',
4395             diskofferingid => 'ID of the disk offering',
4396             diskofferingname => 'name of the disk offering',
4397             domain => 'the domain associated with the disk volume',
4398             domainid => 'the ID of the domain associated with the disk volume',
4399             hypervisor => 'Hypervisor the volume belongs to',
4400             id => 'ID of the disk volume',
4401             isextractable => 'true if the volume is extractable, false otherwise',
4402             jobid =>
4403             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
4404             jobstatus => 'shows the current pending asynchronous job status',
4405             name => 'name of the disk volume',
4406             serviceofferingdisplaytext => 'the display text of the service offering for root disk',
4407             serviceofferingid => 'ID of the service offering for root disk',
4408             serviceofferingname => 'name of the service offering for root disk',
4409             size => 'size of the disk volume',
4410             snapshotid => 'ID of the snapshot from which this volume was created',
4411             state => 'the state of the disk volume',
4412             storage => 'name of the primary storage hosting the disk volume',
4413             storagetype => 'shared or local storage',
4414             type => 'type of the disk volume (ROOT or DATADISK)',
4415             virtualmachineid => 'id of the virtual machine',
4416             vmdisplayname => 'display name of the virtual machine',
4417             vmname => 'name of the virtual machine',
4418             vmstate => 'state of the virtual machine',
4419             zoneid => 'ID of the availability zone',
4420             zonename => 'name of the availability zone',
4421             },
4422             section => 'Volume',
4423             },
4424             listVolumesOnFiler => {
4425             description => 'List Volumes',
4426             isAsync => 'false',
4427             level => 15,
4428             request => { required => { poolname => 'pool name.' } },
4429             response => {
4430             aggregatename => 'Aggregate name',
4431             id => 'volume id',
4432             ipaddress => 'ip address',
4433             poolname => 'pool name',
4434             size => 'volume size',
4435             snapshotpolicy => 'snapshot policy',
4436             snapshotreservation => 'snapshot reservation',
4437             volumename => 'Volume name',
4438             },
4439             section => 'NetAppIntegration',
4440             },
4441             listVpnUsers => {
4442             description => 'Lists vpn users',
4443             isAsync => 'false',
4444             level => 15,
4445             request => {
4446             optional => {
4447             account => 'the account of the remote access vpn. Must be used with the domainId parameter.',
4448             domainid =>
4449             'the domain ID of the remote access vpn. If used with the account parameter, lists remote access vpns for the account in the specified domain.',
4450             id => 'the ID of the vpn user',
4451             keyword => 'List by keyword',
4452             page => 'no description',
4453             pagesize => 'no description',
4454             username => 'the username of the vpn user.',
4455             },
4456             },
4457             response => {
4458             account => 'the account of the remote access vpn',
4459             domainid => 'the domain id of the account of the remote access vpn',
4460             domainname => 'the domain name of the account of the remote access vpn',
4461             id => 'the vpn userID',
4462             username => 'the username of the vpn user',
4463             },
4464             section => 'VPN',
4465             },
4466             listZones => {
4467             description => 'Lists zones',
4468             isAsync => 'false',
4469             level => 15,
4470             request => {
4471             optional => {
4472             available =>
4473             'true if you want to retrieve all available Zones. False if you only want to return the Zones from which you have at least one VM. Default is false.',
4474             domainid => 'the ID of the domain associated with the zone',
4475             id => 'the ID of the zone',
4476             keyword => 'List by keyword',
4477             page => 'no description',
4478             pagesize => 'no description',
4479             },
4480             },
4481             response => {
4482             allocationstate => 'the allocation state of the cluster',
4483             description => 'Zone description',
4484             dhcpprovider => 'the dhcp Provider for the Zone',
4485             displaytext => 'the display text of the zone',
4486             dns1 => 'the first DNS for the Zone',
4487             dns2 => 'the second DNS for the Zone',
4488             domain => 'Network domain name for the networks in the zone',
4489             domainid => 'the ID of the containing domain, null for public zones',
4490             guestcidraddress => 'the guest CIDR address for the Zone',
4491             id => 'Zone id',
4492             internaldns1 => 'the first internal DNS for the Zone',
4493             internaldns2 => 'the second internal DNS for the Zone',
4494             name => 'Zone name',
4495             networktype => 'the network type of the zone; can be Basic or Advanced',
4496             securitygroupsenabled => 'true if security groups support is enabled, false otherwise',
4497             vlan => 'the vlan range of the zone',
4498             zonetoken => 'Zone Token',
4499             },
4500             section => 'Zone',
4501             },
4502             login => {
4503             description =>
4504             'Logs a user into the CloudStack. A successful login attempt will generate a JSESSIONID cookie value that can be passed in subsequent Query command calls until the \'logout\' command has been issued or the session has expired.',
4505             isAsync => 'false',
4506             level => 15,
4507             request => {
4508             optional => {
4509             domain =>
4510             'path of the domain that the user belongs to. Example: domain=/com/cloud/internal. If no domain is passed in, the ROOT domain is assumed.',
4511             },
4512             required => {
4513             password =>
4514             'Hashed password (Default is MD5). If you wish to use any other hashing algorithm, you would need to write a custom authentication adapter See Docs section.',
4515             username => 'Username',
4516             },
4517             },
4518             response => {
4519             account => 'the account name the user belongs to',
4520             domainid => 'domain ID that the user belongs to',
4521             firstname => 'first name of the user',
4522             lastname => 'last name of the user',
4523             password => 'Password',
4524             sessionkey => 'Session key that can be passed in subsequent Query command calls',
4525             timeout => 'the time period before the session has expired',
4526             timezone => 'user time zone',
4527             timezoneoffset => 'user time zone offset from UTC 00:00',
4528             type => 'the account type (admin, domain-admin, read-only-admin, user)',
4529             userid => 'User id',
4530             username => 'Username',
4531             },
4532             section => 'Session',
4533             },
4534             logout => {
4535             description => 'Logs out the user',
4536             isAsync => 'false',
4537             level => 15,
4538             request => undef,
4539             response => { success => 'success if the logout action succeeded' },
4540             section => 'Session',
4541             },
4542             migrateSystemVm => {
4543             description => 'Attempts Migration of a system virtual machine to the host specified.',
4544             isAsync => 'true',
4545             level => 1,
4546             request => {
4547             required =>
4548             { hostid => 'destination Host ID to migrate VM to', virtualmachineid => 'the ID of the virtual machine', },
4549             },
4550             response => {
4551             hostid => 'the host ID for the system VM',
4552             id => 'the ID of the system VM',
4553             name => 'the name of the system VM',
4554             role => 'the role of the system VM',
4555             state => 'the state of the system VM',
4556             systemvmtype => 'the system VM type',
4557             },
4558             section => 'SystemVM',
4559             },
4560             migrateVirtualMachine => {
4561             description => 'Attempts Migration of a user virtual machine to the host specified.',
4562             isAsync => 'true',
4563             level => 1,
4564             request => {
4565             required =>
4566             { hostid => 'destination Host ID to migrate VM to', virtualmachineid => 'the ID of the virtual machine', },
4567             },
4568             response => {
4569             'account' => 'the account associated with the virtual machine',
4570             'cpunumber' => 'the number of cpu this virtual machine is running with',
4571             'cpuspeed' => 'the speed of each cpu',
4572             'cpuused' => 'the amount of the vm\'s CPU currently used',
4573             'created' => 'the date when this virtual machine was created',
4574             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
4575             'domain' => 'the name of the domain in which the virtual machine exists',
4576             'domainid' => 'the ID of the domain in which the virtual machine exists',
4577             'forvirtualnetwork' => 'the virtual network for the service offering',
4578             'group' => 'the group name of the virtual machine',
4579             'groupid' => 'the group ID of the virtual machine',
4580             'guestosid' => 'Os type ID of the virtual machine',
4581             'haenable' => 'true if high-availability is enabled, false otherwise',
4582             'hostid' => 'the ID of the host for the virtual machine',
4583             'hostname' => 'the name of the host for the virtual machine',
4584             'hypervisor' => 'the hypervisor on which the template runs',
4585             'id' => 'the ID of the virtual machine',
4586             'ipaddress' => 'the ip address of the virtual machine',
4587             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
4588             'isoid' => 'the ID of the ISO attached to the virtual machine',
4589             'isoname' => 'the name of the ISO attached to the virtual machine',
4590             'jobid' =>
4591             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
4592             'jobstatus' => 'shows the current pending asynchronous job status',
4593             'memory' => 'the memory allocated for the virtual machine',
4594             'name' => 'the name of the virtual machine',
4595             'networkkbsread' => 'the incoming network traffic on the vm',
4596             'networkkbswrite' => 'the outgoing network traffic on the host',
4597             'nic(*)' => 'the list of nics associated with vm',
4598             'password' => 'the password (if exists) of the virtual machine',
4599             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
4600             'rootdeviceid' => 'device ID of the root volume',
4601             'rootdevicetype' => 'device type of the root volume',
4602             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
4603             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
4604             'serviceofferingname' => 'the name of the service offering of the virtual machine',
4605             'state' => 'the state of the virtual machine',
4606             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
4607             'templateid' =>
4608             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
4609             'templatename' => 'the name of the template for the virtual machine',
4610             'zoneid' => 'the ID of the availablility zone for the virtual machine',
4611             'zonename' => 'the name of the availability zone for the virtual machine',
4612             },
4613             section => 'VM',
4614             },
4615             modifyPool => {
4616             description => 'Modify pool',
4617             isAsync => 'false',
4618             level => 15,
4619             request => { required => { algorithm => 'algorithm.', poolname => 'pool name.' }, },
4620             response => undef,
4621             section => 'NetAppIntegration',
4622             },
4623             prepareHostForMaintenance => {
4624             description => 'Prepares a host for maintenance.',
4625             isAsync => 'true',
4626             level => 1,
4627             request => { required => { id => 'the host ID' } },
4628             response => {
4629             allocationstate => 'the allocation state of the host',
4630             averageload => 'the cpu average load on the host',
4631             capabilities => 'capabilities of the host',
4632             clusterid => 'the cluster ID of the host',
4633             clustername => 'the cluster name of the host',
4634             clustertype => 'the cluster type of the cluster that host belongs to',
4635             cpuallocated => 'the amount of the host\'s CPU currently allocated',
4636             cpunumber => 'the CPU number of the host',
4637             cpuspeed => 'the CPU speed of the host',
4638             cpuused => 'the amount of the host\'s CPU currently used',
4639             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
4640             created => 'the date and time the host was created',
4641             disconnected => 'true if the host is disconnected. False otherwise.',
4642             disksizeallocated => 'the host\'s currently allocated disk size',
4643             disksizetotal => 'the total disk size of the host',
4644             events => 'events available for the host',
4645             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
4646             hosttags => 'comma-separated list of tags for the host',
4647             hypervisor => 'the host hypervisor',
4648             id => 'the ID of the host',
4649             ipaddress => 'the IP address of the host',
4650             islocalstorageactive => 'true if local storage is active, false otherwise',
4651             jobid =>
4652             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
4653             jobstatus => 'shows the current pending asynchronous job status',
4654             lastpinged => 'the date and time the host was last pinged',
4655             managementserverid => 'the management server ID of the host',
4656             memoryallocated => 'the amount of the host\'s memory currently allocated',
4657             memorytotal => 'the memory total of the host',
4658             memoryused => 'the amount of the host\'s memory currently used',
4659             name => 'the name of the host',
4660             networkkbsread => 'the incoming network traffic on the host',
4661             networkkbswrite => 'the outgoing network traffic on the host',
4662             oscategoryid => 'the OS category ID of the host',
4663             oscategoryname => 'the OS category name of the host',
4664             podid => 'the Pod ID of the host',
4665             podname => 'the Pod name of the host',
4666             removed => 'the date and time the host was removed',
4667             state => 'the state of the host',
4668             type => 'the host type',
4669             version => 'the host version',
4670             zoneid => 'the Zone ID of the host',
4671             zonename => 'the Zone name of the host',
4672             },
4673             section => 'Host',
4674             },
4675             prepareTemplate => {
4676             description => 'load template into primary storage',
4677             isAsync => 'false',
4678             level => 1,
4679             request => {
4680             required => {
4681             templateid => 'template ID of the template to be prepared in primary storage(s).',
4682             zoneid => 'zone ID of the template to be prepared in primary storage(s).',
4683             },
4684             },
4685             response => {
4686             account => 'the account name to which the template belongs',
4687             accountid => 'the account id to which the template belongs',
4688             bootable => 'true if the ISO is bootable, false otherwise',
4689             checksum => 'checksum of the template',
4690             created => 'the date this template was created',
4691             crossZones => 'true if the template is managed across all Zones, false otherwise',
4692             details => 'additional key/value details tied with template',
4693             displaytext => 'the template display text',
4694             domain => 'the name of the domain to which the template belongs',
4695             domainid => 'the ID of the domain to which the template belongs',
4696             format => 'the format of the template.',
4697             hostid => 'the ID of the secondary storage host for the template',
4698             hostname => 'the name of the secondary storage host for the template',
4699             hypervisor => 'the hypervisor on which the template runs',
4700             id => 'the template ID',
4701             isextractable => 'true if the template is extractable, false otherwise',
4702             isfeatured => 'true if this template is a featured template, false otherwise',
4703             ispublic => 'true if this template is a public template, false otherwise',
4704             isready => 'true if the template is ready to be deployed from, false otherwise.',
4705             jobid =>
4706             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
4707             jobstatus => 'shows the current pending asynchronous job status',
4708             name => 'the template name',
4709             ostypeid => 'the ID of the OS type for this template.',
4710             ostypename => 'the name of the OS type for this template.',
4711             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
4712             removed => 'the date this template was removed',
4713             size => 'the size of the template',
4714             sourcetemplateid => 'the template ID of the parent template if present',
4715             status => 'the status of the template',
4716             templatetag => 'the tag of this template',
4717             templatetype => 'the type of the template',
4718             zoneid => 'the ID of the zone for this template',
4719             zonename => 'the name of the zone for this template',
4720             },
4721             section => 'Template',
4722             },
4723             queryAsyncJobResult => {
4724             description => 'Retrieves the current status of asynchronous job.',
4725             isAsync => 'false',
4726             level => 15,
4727             request => { required => { jobid => 'the ID of the asychronous job' } },
4728             response => {
4729             accountid => 'the account that executed the async command',
4730             cmd => 'the async command executed',
4731             created => 'the created date of the job',
4732             jobid => 'async job ID',
4733             jobinstanceid => 'the unique ID of the instance/entity object related to the job',
4734             jobinstancetype => 'the instance/entity object related to the job',
4735             jobprocstatus => 'the progress information of the PENDING job',
4736             jobresult => 'the result reason',
4737             jobresultcode => 'the result code for the job',
4738             jobresulttype => 'the result type',
4739             jobstatus => 'the current job status-should be 0 for PENDING',
4740             userid => 'the user that executed the async command',
4741             },
4742             section => 'AsyncQuery',
4743             },
4744             rebootRouter => {
4745             description => 'Starts a router.',
4746             isAsync => 'true',
4747             level => 7,
4748             request => { required => { id => 'the ID of the router' } },
4749             response => {
4750             account => 'the account associated with the router',
4751             created => 'the date and time the router was created',
4752             dns1 => 'the first DNS for the router',
4753             dns2 => 'the second DNS for the router',
4754             domain => 'the domain associated with the router',
4755             domainid => 'the domain ID associated with the router',
4756             gateway => 'the gateway for the router',
4757             guestipaddress => 'the guest IP address for the router',
4758             guestmacaddress => 'the guest MAC address for the router',
4759             guestnetmask => 'the guest netmask for the router',
4760             guestnetworkid => 'the ID of the corresponding guest network',
4761             hostid => 'the host ID for the router',
4762             hostname => 'the hostname for the router',
4763             id => 'the id of the router',
4764             isredundantrouter => 'if this router is an redundant virtual router',
4765             linklocalip => 'the link local IP address for the router',
4766             linklocalmacaddress => 'the link local MAC address for the router',
4767             linklocalnetmask => 'the link local netmask for the router',
4768             linklocalnetworkid => 'the ID of the corresponding link local network',
4769             name => 'the name of the router',
4770             networkdomain => 'the network domain for the router',
4771             podid => 'the Pod ID for the router',
4772             publicip => 'the public IP address for the router',
4773             publicmacaddress => 'the public MAC address for the router',
4774             publicnetmask => 'the public netmask for the router',
4775             publicnetworkid => 'the ID of the corresponding public network',
4776             redundantstate => 'the state of redundant virtual router',
4777             serviceofferingid => 'the ID of the service offering of the virtual machine',
4778             serviceofferingname => 'the name of the service offering of the virtual machine',
4779             state => 'the state of the router',
4780             templateid => 'the template ID for the router',
4781             zoneid => 'the Zone ID for the router',
4782             zonename => 'the Zone name for the router',
4783             },
4784             section => 'Router',
4785             },
4786             rebootSystemVm => {
4787             description => 'Reboots a system VM.',
4788             isAsync => 'true',
4789             level => 1,
4790             request => { required => { id => 'The ID of the system virtual machine' } },
4791             response => {
4792             activeviewersessions => 'the number of active console sessions for the console proxy system vm',
4793             created => 'the date and time the system VM was created',
4794             dns1 => 'the first DNS for the system VM',
4795             dns2 => 'the second DNS for the system VM',
4796             gateway => 'the gateway for the system VM',
4797             hostid => 'the host ID for the system VM',
4798             hostname => 'the hostname for the system VM',
4799             id => 'the ID of the system VM',
4800             jobid =>
4801             'the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
4802             jobstatus =>
4803             'the job status associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
4804             linklocalip => 'the link local IP address for the system vm',
4805             linklocalmacaddress => 'the link local MAC address for the system vm',
4806             linklocalnetmask => 'the link local netmask for the system vm',
4807             name => 'the name of the system VM',
4808             networkdomain => 'the network domain for the system VM',
4809             podid => 'the Pod ID for the system VM',
4810             privateip => 'the private IP address for the system VM',
4811             privatemacaddress => 'the private MAC address for the system VM',
4812             privatenetmask => 'the private netmask for the system VM',
4813             publicip => 'the public IP address for the system VM',
4814             publicmacaddress => 'the public MAC address for the system VM',
4815             publicnetmask => 'the public netmask for the system VM',
4816             state => 'the state of the system VM',
4817             systemvmtype => 'the system VM type',
4818             templateid => 'the template ID for the system VM',
4819             zoneid => 'the Zone ID for the system VM',
4820             zonename => 'the Zone name for the system VM',
4821             },
4822             section => 'SystemVM',
4823             },
4824             rebootVirtualMachine => {
4825             description => 'Reboots a virtual machine.',
4826             isAsync => 'true',
4827             level => 15,
4828             request => { required => { id => 'The ID of the virtual machine' } },
4829             response => {
4830             'account' => 'the account associated with the virtual machine',
4831             'cpunumber' => 'the number of cpu this virtual machine is running with',
4832             'cpuspeed' => 'the speed of each cpu',
4833             'cpuused' => 'the amount of the vm\'s CPU currently used',
4834             'created' => 'the date when this virtual machine was created',
4835             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
4836             'domain' => 'the name of the domain in which the virtual machine exists',
4837             'domainid' => 'the ID of the domain in which the virtual machine exists',
4838             'forvirtualnetwork' => 'the virtual network for the service offering',
4839             'group' => 'the group name of the virtual machine',
4840             'groupid' => 'the group ID of the virtual machine',
4841             'guestosid' => 'Os type ID of the virtual machine',
4842             'haenable' => 'true if high-availability is enabled, false otherwise',
4843             'hostid' => 'the ID of the host for the virtual machine',
4844             'hostname' => 'the name of the host for the virtual machine',
4845             'hypervisor' => 'the hypervisor on which the template runs',
4846             'id' => 'the ID of the virtual machine',
4847             'ipaddress' => 'the ip address of the virtual machine',
4848             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
4849             'isoid' => 'the ID of the ISO attached to the virtual machine',
4850             'isoname' => 'the name of the ISO attached to the virtual machine',
4851             'jobid' =>
4852             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
4853             'jobstatus' => 'shows the current pending asynchronous job status',
4854             'memory' => 'the memory allocated for the virtual machine',
4855             'name' => 'the name of the virtual machine',
4856             'networkkbsread' => 'the incoming network traffic on the vm',
4857             'networkkbswrite' => 'the outgoing network traffic on the host',
4858             'nic(*)' => 'the list of nics associated with vm',
4859             'password' => 'the password (if exists) of the virtual machine',
4860             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
4861             'rootdeviceid' => 'device ID of the root volume',
4862             'rootdevicetype' => 'device type of the root volume',
4863             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
4864             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
4865             'serviceofferingname' => 'the name of the service offering of the virtual machine',
4866             'state' => 'the state of the virtual machine',
4867             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
4868             'templateid' =>
4869             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
4870             'templatename' => 'the name of the template for the virtual machine',
4871             'zoneid' => 'the ID of the availablility zone for the virtual machine',
4872             'zonename' => 'the name of the availability zone for the virtual machine',
4873             },
4874             section => 'VM',
4875             },
4876             reconnectHost => {
4877             description => 'Reconnects a host.',
4878             isAsync => 'true',
4879             level => 1,
4880             request => { required => { id => 'the host ID' } },
4881             response => {
4882             allocationstate => 'the allocation state of the host',
4883             averageload => 'the cpu average load on the host',
4884             capabilities => 'capabilities of the host',
4885             clusterid => 'the cluster ID of the host',
4886             clustername => 'the cluster name of the host',
4887             clustertype => 'the cluster type of the cluster that host belongs to',
4888             cpuallocated => 'the amount of the host\'s CPU currently allocated',
4889             cpunumber => 'the CPU number of the host',
4890             cpuspeed => 'the CPU speed of the host',
4891             cpuused => 'the amount of the host\'s CPU currently used',
4892             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
4893             created => 'the date and time the host was created',
4894             disconnected => 'true if the host is disconnected. False otherwise.',
4895             disksizeallocated => 'the host\'s currently allocated disk size',
4896             disksizetotal => 'the total disk size of the host',
4897             events => 'events available for the host',
4898             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
4899             hosttags => 'comma-separated list of tags for the host',
4900             hypervisor => 'the host hypervisor',
4901             id => 'the ID of the host',
4902             ipaddress => 'the IP address of the host',
4903             islocalstorageactive => 'true if local storage is active, false otherwise',
4904             jobid =>
4905             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
4906             jobstatus => 'shows the current pending asynchronous job status',
4907             lastpinged => 'the date and time the host was last pinged',
4908             managementserverid => 'the management server ID of the host',
4909             memoryallocated => 'the amount of the host\'s memory currently allocated',
4910             memorytotal => 'the memory total of the host',
4911             memoryused => 'the amount of the host\'s memory currently used',
4912             name => 'the name of the host',
4913             networkkbsread => 'the incoming network traffic on the host',
4914             networkkbswrite => 'the outgoing network traffic on the host',
4915             oscategoryid => 'the OS category ID of the host',
4916             oscategoryname => 'the OS category name of the host',
4917             podid => 'the Pod ID of the host',
4918             podname => 'the Pod name of the host',
4919             removed => 'the date and time the host was removed',
4920             state => 'the state of the host',
4921             type => 'the host type',
4922             version => 'the host version',
4923             zoneid => 'the Zone ID of the host',
4924             zonename => 'the Zone name of the host',
4925             },
4926             section => 'Host',
4927             },
4928             recoverVirtualMachine => {
4929             description => 'Recovers a virtual machine.',
4930             isAsync => 'false',
4931             level => 7,
4932             request => { required => { id => 'The ID of the virtual machine' } },
4933             response => {
4934             'account' => 'the account associated with the virtual machine',
4935             'cpunumber' => 'the number of cpu this virtual machine is running with',
4936             'cpuspeed' => 'the speed of each cpu',
4937             'cpuused' => 'the amount of the vm\'s CPU currently used',
4938             'created' => 'the date when this virtual machine was created',
4939             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
4940             'domain' => 'the name of the domain in which the virtual machine exists',
4941             'domainid' => 'the ID of the domain in which the virtual machine exists',
4942             'forvirtualnetwork' => 'the virtual network for the service offering',
4943             'group' => 'the group name of the virtual machine',
4944             'groupid' => 'the group ID of the virtual machine',
4945             'guestosid' => 'Os type ID of the virtual machine',
4946             'haenable' => 'true if high-availability is enabled, false otherwise',
4947             'hostid' => 'the ID of the host for the virtual machine',
4948             'hostname' => 'the name of the host for the virtual machine',
4949             'hypervisor' => 'the hypervisor on which the template runs',
4950             'id' => 'the ID of the virtual machine',
4951             'ipaddress' => 'the ip address of the virtual machine',
4952             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
4953             'isoid' => 'the ID of the ISO attached to the virtual machine',
4954             'isoname' => 'the name of the ISO attached to the virtual machine',
4955             'jobid' =>
4956             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
4957             'jobstatus' => 'shows the current pending asynchronous job status',
4958             'memory' => 'the memory allocated for the virtual machine',
4959             'name' => 'the name of the virtual machine',
4960             'networkkbsread' => 'the incoming network traffic on the vm',
4961             'networkkbswrite' => 'the outgoing network traffic on the host',
4962             'nic(*)' => 'the list of nics associated with vm',
4963             'password' => 'the password (if exists) of the virtual machine',
4964             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
4965             'rootdeviceid' => 'device ID of the root volume',
4966             'rootdevicetype' => 'device type of the root volume',
4967             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
4968             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
4969             'serviceofferingname' => 'the name of the service offering of the virtual machine',
4970             'state' => 'the state of the virtual machine',
4971             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
4972             'templateid' =>
4973             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
4974             'templatename' => 'the name of the template for the virtual machine',
4975             'zoneid' => 'the ID of the availablility zone for the virtual machine',
4976             'zonename' => 'the name of the availability zone for the virtual machine',
4977             },
4978             section => 'VM',
4979             },
4980             registerIso => {
4981             description => 'Registers an existing ISO into the Cloud.com Cloud.',
4982             isAsync => 'false',
4983             level => 15,
4984             request => {
4985             optional => {
4986             account => 'an optional account name. Must be used with domainId.',
4987             bootable => 'true if this ISO is bootable',
4988             domainid => 'an optional domainId. If the account parameter is used, domainId must also be used.',
4989             isextractable => 'true if the iso or its derivatives are extractable; default is false',
4990             isfeatured => 'true if you want this ISO to be featured',
4991             ispublic => 'true if you want to register the ISO to be publicly available to all users, false otherwise.',
4992             ostypeid => 'the ID of the OS Type that best represents the OS of this ISO',
4993             },
4994             required => {
4995             displaytext => 'the display text of the ISO. This is usually used for display purposes.',
4996             name => 'the name of the ISO',
4997             url => 'the URL to where the ISO is currently being hosted',
4998             zoneid => 'the ID of the zone you wish to register the ISO to.',
4999             },
5000             },
5001             response => {
5002             account => 'the account name to which the template belongs',
5003             accountid => 'the account id to which the template belongs',
5004             bootable => 'true if the ISO is bootable, false otherwise',
5005             checksum => 'checksum of the template',
5006             created => 'the date this template was created',
5007             crossZones => 'true if the template is managed across all Zones, false otherwise',
5008             details => 'additional key/value details tied with template',
5009             displaytext => 'the template display text',
5010             domain => 'the name of the domain to which the template belongs',
5011             domainid => 'the ID of the domain to which the template belongs',
5012             format => 'the format of the template.',
5013             hostid => 'the ID of the secondary storage host for the template',
5014             hostname => 'the name of the secondary storage host for the template',
5015             hypervisor => 'the hypervisor on which the template runs',
5016             id => 'the template ID',
5017             isextractable => 'true if the template is extractable, false otherwise',
5018             isfeatured => 'true if this template is a featured template, false otherwise',
5019             ispublic => 'true if this template is a public template, false otherwise',
5020             isready => 'true if the template is ready to be deployed from, false otherwise.',
5021             jobid =>
5022             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
5023             jobstatus => 'shows the current pending asynchronous job status',
5024             name => 'the template name',
5025             ostypeid => 'the ID of the OS type for this template.',
5026             ostypename => 'the name of the OS type for this template.',
5027             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
5028             removed => 'the date this template was removed',
5029             size => 'the size of the template',
5030             sourcetemplateid => 'the template ID of the parent template if present',
5031             status => 'the status of the template',
5032             templatetag => 'the tag of this template',
5033             templatetype => 'the type of the template',
5034             zoneid => 'the ID of the zone for this template',
5035             zonename => 'the name of the zone for this template',
5036             },
5037             section => 'ISO',
5038             },
5039             registerSSHKeyPair => {
5040             description => 'Register a public key in a keypair under a certain name',
5041             isAsync => 'false',
5042             level => 15,
5043             request => {
5044             optional => {
5045             account => 'an optional account for the ssh key. Must be used with domainId.',
5046             domainid =>
5047             'an optional domainId for the ssh key. If the account parameter is used, domainId must also be used.',
5048             },
5049             required => { name => 'Name of the keypair', publickey => 'Public key material of the keypair', },
5050             },
5051             response => {
5052             fingerprint => 'Fingerprint of the public key',
5053             name => 'Name of the keypair',
5054             privatekey => 'Private key',
5055             },
5056             section => 'SSHKeyPair',
5057             },
5058             registerTemplate => {
5059             description => 'Registers an existing template into the Cloud.com cloud.',
5060             isAsync => 'false',
5061             level => 15,
5062             request => {
5063             optional => {
5064             account => 'an optional accountName. Must be used with domainId.',
5065             bits => '32 or 64 bits support. 64 by default',
5066             checksum => 'the MD5 checksum value of this template',
5067             details => 'Template details in key/value pairs.',
5068             domainid => 'an optional domainId. If the account parameter is used, domainId must also be used.',
5069             isextractable => 'true if the template or its derivatives are extractable; default is false',
5070             isfeatured => 'true if this template is a featured template, false otherwise',
5071             ispublic => 'true if the template is available to all accounts; default is true',
5072             passwordenabled => 'true if the template supports the password reset feature; default is false',
5073             requireshvm => 'true if this template requires HVM',
5074             templatetag => 'the tag for this template.',
5075             },
5076             required => {
5077             displaytext => 'the display text of the template. This is usually used for display purposes.',
5078             format => 'the format for the template. Possible values include QCOW2, RAW, and VHD.',
5079             hypervisor => 'the target hypervisor for the template',
5080             name => 'the name of the template',
5081             ostypeid => 'the ID of the OS Type that best represents the OS of this template.',
5082             url => 'the URL of where the template is hosted. Possible URL include http:// and https://',
5083             zoneid => 'the ID of the zone the template is to be hosted on',
5084             },
5085             },
5086             response => {
5087             account => 'the account name to which the template belongs',
5088             accountid => 'the account id to which the template belongs',
5089             bootable => 'true if the ISO is bootable, false otherwise',
5090             checksum => 'checksum of the template',
5091             created => 'the date this template was created',
5092             crossZones => 'true if the template is managed across all Zones, false otherwise',
5093             details => 'additional key/value details tied with template',
5094             displaytext => 'the template display text',
5095             domain => 'the name of the domain to which the template belongs',
5096             domainid => 'the ID of the domain to which the template belongs',
5097             format => 'the format of the template.',
5098             hostid => 'the ID of the secondary storage host for the template',
5099             hostname => 'the name of the secondary storage host for the template',
5100             hypervisor => 'the hypervisor on which the template runs',
5101             id => 'the template ID',
5102             isextractable => 'true if the template is extractable, false otherwise',
5103             isfeatured => 'true if this template is a featured template, false otherwise',
5104             ispublic => 'true if this template is a public template, false otherwise',
5105             isready => 'true if the template is ready to be deployed from, false otherwise.',
5106             jobid =>
5107             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
5108             jobstatus => 'shows the current pending asynchronous job status',
5109             name => 'the template name',
5110             ostypeid => 'the ID of the OS type for this template.',
5111             ostypename => 'the name of the OS type for this template.',
5112             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
5113             removed => 'the date this template was removed',
5114             size => 'the size of the template',
5115             sourcetemplateid => 'the template ID of the parent template if present',
5116             status => 'the status of the template',
5117             templatetag => 'the tag of this template',
5118             templatetype => 'the type of the template',
5119             zoneid => 'the ID of the zone for this template',
5120             zonename => 'the name of the zone for this template',
5121             },
5122             section => 'Template',
5123             },
5124             registerUserKeys => {
5125             description =>
5126             'This command allows a user to register for the developer API, returning a secret key and an API key. This request is made through the integration API port, so it is a privileged command and must be made on behalf of a user. It is up to the implementer just how the username and password are entered, and then how that translates to an integration API request. Both secret key and API key should be returned to the user',
5127             isAsync => 'false',
5128             level => 1,
5129             request => { required => { id => 'User id' } },
5130             response =>
5131             { apikey => 'the api key of the registered user', secretkey => 'the secret key of the registered user', },
5132             section => 'Registration',
5133             },
5134             removeFromLoadBalancerRule => {
5135             description => 'Removes a virtual machine or a list of virtual machines from a load balancer rule.',
5136             isAsync => 'true',
5137             level => 15,
5138             request => {
5139             required => {
5140             id => 'The ID of the load balancer rule',
5141             virtualmachineids =>
5142             'the list of IDs of the virtual machines that are being removed from the load balancer rule (i.e. virtualMachineIds=1,2,3)',
5143             },
5144             },
5145             response => {
5146             displaytext => 'any text associated with the success or failure',
5147             success => 'true if operation is executed successfully',
5148             },
5149             section => 'LoadBalancer',
5150             },
5151             removeVpnUser => {
5152             description => 'Removes vpn user',
5153             isAsync => 'true',
5154             level => 15,
5155             request => {
5156             optional => {
5157             account => 'an optional account for the vpn user. Must be used with domainId.',
5158             domainid =>
5159             'an optional domainId for the vpn user. If the account parameter is used, domainId must also be used.',
5160             },
5161             required => { username => 'username for the vpn user' },
5162             },
5163             response => {
5164             displaytext => 'any text associated with the success or failure',
5165             success => 'true if operation is executed successfully',
5166             },
5167             section => 'VPN',
5168             },
5169             resetPasswordForVirtualMachine => {
5170             description =>
5171             'Resets the password for virtual machine. The virtual machine must be in a \'Stopped\' state and the template must already support this feature for this command to take effect. [async]',
5172             isAsync => 'true',
5173             level => 15,
5174             request => { required => { id => 'The ID of the virtual machine' } },
5175             response => {
5176             'account' => 'the account associated with the virtual machine',
5177             'cpunumber' => 'the number of cpu this virtual machine is running with',
5178             'cpuspeed' => 'the speed of each cpu',
5179             'cpuused' => 'the amount of the vm\'s CPU currently used',
5180             'created' => 'the date when this virtual machine was created',
5181             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
5182             'domain' => 'the name of the domain in which the virtual machine exists',
5183             'domainid' => 'the ID of the domain in which the virtual machine exists',
5184             'forvirtualnetwork' => 'the virtual network for the service offering',
5185             'group' => 'the group name of the virtual machine',
5186             'groupid' => 'the group ID of the virtual machine',
5187             'guestosid' => 'Os type ID of the virtual machine',
5188             'haenable' => 'true if high-availability is enabled, false otherwise',
5189             'hostid' => 'the ID of the host for the virtual machine',
5190             'hostname' => 'the name of the host for the virtual machine',
5191             'hypervisor' => 'the hypervisor on which the template runs',
5192             'id' => 'the ID of the virtual machine',
5193             'ipaddress' => 'the ip address of the virtual machine',
5194             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
5195             'isoid' => 'the ID of the ISO attached to the virtual machine',
5196             'isoname' => 'the name of the ISO attached to the virtual machine',
5197             'jobid' =>
5198             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
5199             'jobstatus' => 'shows the current pending asynchronous job status',
5200             'memory' => 'the memory allocated for the virtual machine',
5201             'name' => 'the name of the virtual machine',
5202             'networkkbsread' => 'the incoming network traffic on the vm',
5203             'networkkbswrite' => 'the outgoing network traffic on the host',
5204             'nic(*)' => 'the list of nics associated with vm',
5205             'password' => 'the password (if exists) of the virtual machine',
5206             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
5207             'rootdeviceid' => 'device ID of the root volume',
5208             'rootdevicetype' => 'device type of the root volume',
5209             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
5210             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
5211             'serviceofferingname' => 'the name of the service offering of the virtual machine',
5212             'state' => 'the state of the virtual machine',
5213             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
5214             'templateid' =>
5215             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
5216             'templatename' => 'the name of the template for the virtual machine',
5217             'zoneid' => 'the ID of the availablility zone for the virtual machine',
5218             'zonename' => 'the name of the availability zone for the virtual machine',
5219             },
5220             section => 'VM',
5221             },
5222             restartNetwork => {
5223             description =>
5224             'Restarts the network; includes 1) restarting network elements - virtual routers, dhcp servers 2) reapplying all public ips 3) reapplying loadBalancing/portForwarding rules',
5225             isAsync => 'true',
5226             level => 15,
5227             request => {
5228             optional => { cleanup => 'If cleanup old network elements' },
5229             required => { id => 'The id of the network to restart.' },
5230             },
5231             response => {
5232             account => 'the account the public IP address is associated with',
5233             allocated => 'date the public IP address was acquired',
5234             associatednetworkid => 'the ID of the Network associated with the IP address',
5235             domain => 'the domain the public IP address is associated with',
5236             domainid => 'the domain ID the public IP address is associated with',
5237             forvirtualnetwork => 'the virtual network for the IP address',
5238             id => 'public IP address id',
5239             ipaddress => 'public IP address',
5240             issourcenat => 'true if the IP address is a source nat address, false otherwise',
5241             isstaticnat => 'true if this ip is for static nat, false otherwise',
5242             jobid =>
5243             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the volume',
5244             jobstatus => 'shows the current pending asynchronous job status',
5245             networkid => 'the ID of the Network where ip belongs to',
5246             state => 'State of the ip address. Can be: Allocatin, Allocated and Releasing',
5247             virtualmachinedisplayname =>
5248             'virutal machine display name the ip address is assigned to (not null only for static nat Ip)',
5249             virtualmachineid => 'virutal machine id the ip address is assigned to (not null only for static nat Ip)',
5250             virtualmachinename => 'virutal machine name the ip address is assigned to (not null only for static nat Ip)',
5251             vlanid => 'the ID of the VLAN associated with the IP address',
5252             vlanname => 'the VLAN associated with the IP address',
5253             zoneid => 'the ID of the zone the public IP address belongs to',
5254             zonename => 'the name of the zone the public IP address belongs to',
5255             },
5256             section => 'Network',
5257             },
5258             revokeSecurityGroupIngress => {
5259             description => 'Deletes a particular ingress rule from this security group',
5260             isAsync => 'true',
5261             level => 15,
5262             request => { required => { id => 'The ID of the ingress rule' } },
5263             response => {
5264             displaytext => 'any text associated with the success or failure',
5265             success => 'true if operation is executed successfully',
5266             },
5267             section => 'SecurityGroup',
5268             },
5269             startRouter => {
5270             description => 'Starts a router.',
5271             isAsync => 'true',
5272             level => 7,
5273             request => { required => { id => 'the ID of the router' } },
5274             response => {
5275             account => 'the account associated with the router',
5276             created => 'the date and time the router was created',
5277             dns1 => 'the first DNS for the router',
5278             dns2 => 'the second DNS for the router',
5279             domain => 'the domain associated with the router',
5280             domainid => 'the domain ID associated with the router',
5281             gateway => 'the gateway for the router',
5282             guestipaddress => 'the guest IP address for the router',
5283             guestmacaddress => 'the guest MAC address for the router',
5284             guestnetmask => 'the guest netmask for the router',
5285             guestnetworkid => 'the ID of the corresponding guest network',
5286             hostid => 'the host ID for the router',
5287             hostname => 'the hostname for the router',
5288             id => 'the id of the router',
5289             isredundantrouter => 'if this router is an redundant virtual router',
5290             linklocalip => 'the link local IP address for the router',
5291             linklocalmacaddress => 'the link local MAC address for the router',
5292             linklocalnetmask => 'the link local netmask for the router',
5293             linklocalnetworkid => 'the ID of the corresponding link local network',
5294             name => 'the name of the router',
5295             networkdomain => 'the network domain for the router',
5296             podid => 'the Pod ID for the router',
5297             publicip => 'the public IP address for the router',
5298             publicmacaddress => 'the public MAC address for the router',
5299             publicnetmask => 'the public netmask for the router',
5300             publicnetworkid => 'the ID of the corresponding public network',
5301             redundantstate => 'the state of redundant virtual router',
5302             serviceofferingid => 'the ID of the service offering of the virtual machine',
5303             serviceofferingname => 'the name of the service offering of the virtual machine',
5304             state => 'the state of the router',
5305             templateid => 'the template ID for the router',
5306             zoneid => 'the Zone ID for the router',
5307             zonename => 'the Zone name for the router',
5308             },
5309             section => 'Router',
5310             },
5311             startSystemVm => {
5312             description => 'Starts a system virtual machine.',
5313             isAsync => 'true',
5314             level => 1,
5315             request => { required => { id => 'The ID of the system virtual machine' } },
5316             response => {
5317             activeviewersessions => 'the number of active console sessions for the console proxy system vm',
5318             created => 'the date and time the system VM was created',
5319             dns1 => 'the first DNS for the system VM',
5320             dns2 => 'the second DNS for the system VM',
5321             gateway => 'the gateway for the system VM',
5322             hostid => 'the host ID for the system VM',
5323             hostname => 'the hostname for the system VM',
5324             id => 'the ID of the system VM',
5325             jobid =>
5326             'the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
5327             jobstatus =>
5328             'the job status associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
5329             linklocalip => 'the link local IP address for the system vm',
5330             linklocalmacaddress => 'the link local MAC address for the system vm',
5331             linklocalnetmask => 'the link local netmask for the system vm',
5332             name => 'the name of the system VM',
5333             networkdomain => 'the network domain for the system VM',
5334             podid => 'the Pod ID for the system VM',
5335             privateip => 'the private IP address for the system VM',
5336             privatemacaddress => 'the private MAC address for the system VM',
5337             privatenetmask => 'the private netmask for the system VM',
5338             publicip => 'the public IP address for the system VM',
5339             publicmacaddress => 'the public MAC address for the system VM',
5340             publicnetmask => 'the public netmask for the system VM',
5341             state => 'the state of the system VM',
5342             systemvmtype => 'the system VM type',
5343             templateid => 'the template ID for the system VM',
5344             zoneid => 'the Zone ID for the system VM',
5345             zonename => 'the Zone name for the system VM',
5346             },
5347             section => 'SystemVM',
5348             },
5349             startVirtualMachine => {
5350             description => 'Starts a virtual machine.',
5351             isAsync => 'true',
5352             level => 15,
5353             request => { required => { id => 'The ID of the virtual machine' } },
5354             response => {
5355             'account' => 'the account associated with the virtual machine',
5356             'cpunumber' => 'the number of cpu this virtual machine is running with',
5357             'cpuspeed' => 'the speed of each cpu',
5358             'cpuused' => 'the amount of the vm\'s CPU currently used',
5359             'created' => 'the date when this virtual machine was created',
5360             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
5361             'domain' => 'the name of the domain in which the virtual machine exists',
5362             'domainid' => 'the ID of the domain in which the virtual machine exists',
5363             'forvirtualnetwork' => 'the virtual network for the service offering',
5364             'group' => 'the group name of the virtual machine',
5365             'groupid' => 'the group ID of the virtual machine',
5366             'guestosid' => 'Os type ID of the virtual machine',
5367             'haenable' => 'true if high-availability is enabled, false otherwise',
5368             'hostid' => 'the ID of the host for the virtual machine',
5369             'hostname' => 'the name of the host for the virtual machine',
5370             'hypervisor' => 'the hypervisor on which the template runs',
5371             'id' => 'the ID of the virtual machine',
5372             'ipaddress' => 'the ip address of the virtual machine',
5373             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
5374             'isoid' => 'the ID of the ISO attached to the virtual machine',
5375             'isoname' => 'the name of the ISO attached to the virtual machine',
5376             'jobid' =>
5377             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
5378             'jobstatus' => 'shows the current pending asynchronous job status',
5379             'memory' => 'the memory allocated for the virtual machine',
5380             'name' => 'the name of the virtual machine',
5381             'networkkbsread' => 'the incoming network traffic on the vm',
5382             'networkkbswrite' => 'the outgoing network traffic on the host',
5383             'nic(*)' => 'the list of nics associated with vm',
5384             'password' => 'the password (if exists) of the virtual machine',
5385             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
5386             'rootdeviceid' => 'device ID of the root volume',
5387             'rootdevicetype' => 'device type of the root volume',
5388             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
5389             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
5390             'serviceofferingname' => 'the name of the service offering of the virtual machine',
5391             'state' => 'the state of the virtual machine',
5392             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
5393             'templateid' =>
5394             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
5395             'templatename' => 'the name of the template for the virtual machine',
5396             'zoneid' => 'the ID of the availablility zone for the virtual machine',
5397             'zonename' => 'the name of the availability zone for the virtual machine',
5398             },
5399             section => 'VM',
5400             },
5401             stopRouter => {
5402             description => 'Stops a router.',
5403             isAsync => 'true',
5404             level => 7,
5405             request => {
5406             optional => { forced => 'Force stop the VM. The caller knows the VM is stopped.', },
5407             required => { id => 'the ID of the router' },
5408             },
5409             response => {
5410             account => 'the account associated with the router',
5411             created => 'the date and time the router was created',
5412             dns1 => 'the first DNS for the router',
5413             dns2 => 'the second DNS for the router',
5414             domain => 'the domain associated with the router',
5415             domainid => 'the domain ID associated with the router',
5416             gateway => 'the gateway for the router',
5417             guestipaddress => 'the guest IP address for the router',
5418             guestmacaddress => 'the guest MAC address for the router',
5419             guestnetmask => 'the guest netmask for the router',
5420             guestnetworkid => 'the ID of the corresponding guest network',
5421             hostid => 'the host ID for the router',
5422             hostname => 'the hostname for the router',
5423             id => 'the id of the router',
5424             isredundantrouter => 'if this router is an redundant virtual router',
5425             linklocalip => 'the link local IP address for the router',
5426             linklocalmacaddress => 'the link local MAC address for the router',
5427             linklocalnetmask => 'the link local netmask for the router',
5428             linklocalnetworkid => 'the ID of the corresponding link local network',
5429             name => 'the name of the router',
5430             networkdomain => 'the network domain for the router',
5431             podid => 'the Pod ID for the router',
5432             publicip => 'the public IP address for the router',
5433             publicmacaddress => 'the public MAC address for the router',
5434             publicnetmask => 'the public netmask for the router',
5435             publicnetworkid => 'the ID of the corresponding public network',
5436             redundantstate => 'the state of redundant virtual router',
5437             serviceofferingid => 'the ID of the service offering of the virtual machine',
5438             serviceofferingname => 'the name of the service offering of the virtual machine',
5439             state => 'the state of the router',
5440             templateid => 'the template ID for the router',
5441             zoneid => 'the Zone ID for the router',
5442             zonename => 'the Zone name for the router',
5443             },
5444             section => 'Router',
5445             },
5446             stopSystemVm => {
5447             description => 'Stops a system VM.',
5448             isAsync => 'true',
5449             level => 1,
5450             request => {
5451             optional => { forced => 'Force stop the VM. The caller knows the VM is stopped.', },
5452             required => { id => 'The ID of the system virtual machine' },
5453             },
5454             response => {
5455             activeviewersessions => 'the number of active console sessions for the console proxy system vm',
5456             created => 'the date and time the system VM was created',
5457             dns1 => 'the first DNS for the system VM',
5458             dns2 => 'the second DNS for the system VM',
5459             gateway => 'the gateway for the system VM',
5460             hostid => 'the host ID for the system VM',
5461             hostname => 'the hostname for the system VM',
5462             id => 'the ID of the system VM',
5463             jobid =>
5464             'the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
5465             jobstatus =>
5466             'the job status associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.',
5467             linklocalip => 'the link local IP address for the system vm',
5468             linklocalmacaddress => 'the link local MAC address for the system vm',
5469             linklocalnetmask => 'the link local netmask for the system vm',
5470             name => 'the name of the system VM',
5471             networkdomain => 'the network domain for the system VM',
5472             podid => 'the Pod ID for the system VM',
5473             privateip => 'the private IP address for the system VM',
5474             privatemacaddress => 'the private MAC address for the system VM',
5475             privatenetmask => 'the private netmask for the system VM',
5476             publicip => 'the public IP address for the system VM',
5477             publicmacaddress => 'the public MAC address for the system VM',
5478             publicnetmask => 'the public netmask for the system VM',
5479             state => 'the state of the system VM',
5480             systemvmtype => 'the system VM type',
5481             templateid => 'the template ID for the system VM',
5482             zoneid => 'the Zone ID for the system VM',
5483             zonename => 'the Zone name for the system VM',
5484             },
5485             section => 'SystemVM',
5486             },
5487             stopVirtualMachine => {
5488             description => 'Stops a virtual machine.',
5489             isAsync => 'true',
5490             level => 15,
5491             request => {
5492             optional => { forced => 'Force stop the VM. The caller knows the VM is stopped.', },
5493             required => { id => 'The ID of the virtual machine' },
5494             },
5495             response => {
5496             'account' => 'the account associated with the virtual machine',
5497             'cpunumber' => 'the number of cpu this virtual machine is running with',
5498             'cpuspeed' => 'the speed of each cpu',
5499             'cpuused' => 'the amount of the vm\'s CPU currently used',
5500             'created' => 'the date when this virtual machine was created',
5501             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
5502             'domain' => 'the name of the domain in which the virtual machine exists',
5503             'domainid' => 'the ID of the domain in which the virtual machine exists',
5504             'forvirtualnetwork' => 'the virtual network for the service offering',
5505             'group' => 'the group name of the virtual machine',
5506             'groupid' => 'the group ID of the virtual machine',
5507             'guestosid' => 'Os type ID of the virtual machine',
5508             'haenable' => 'true if high-availability is enabled, false otherwise',
5509             'hostid' => 'the ID of the host for the virtual machine',
5510             'hostname' => 'the name of the host for the virtual machine',
5511             'hypervisor' => 'the hypervisor on which the template runs',
5512             'id' => 'the ID of the virtual machine',
5513             'ipaddress' => 'the ip address of the virtual machine',
5514             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
5515             'isoid' => 'the ID of the ISO attached to the virtual machine',
5516             'isoname' => 'the name of the ISO attached to the virtual machine',
5517             'jobid' =>
5518             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
5519             'jobstatus' => 'shows the current pending asynchronous job status',
5520             'memory' => 'the memory allocated for the virtual machine',
5521             'name' => 'the name of the virtual machine',
5522             'networkkbsread' => 'the incoming network traffic on the vm',
5523             'networkkbswrite' => 'the outgoing network traffic on the host',
5524             'nic(*)' => 'the list of nics associated with vm',
5525             'password' => 'the password (if exists) of the virtual machine',
5526             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
5527             'rootdeviceid' => 'device ID of the root volume',
5528             'rootdevicetype' => 'device type of the root volume',
5529             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
5530             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
5531             'serviceofferingname' => 'the name of the service offering of the virtual machine',
5532             'state' => 'the state of the virtual machine',
5533             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
5534             'templateid' =>
5535             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
5536             'templatename' => 'the name of the template for the virtual machine',
5537             'zoneid' => 'the ID of the availablility zone for the virtual machine',
5538             'zonename' => 'the name of the availability zone for the virtual machine',
5539             },
5540             section => 'VM',
5541             },
5542             updateAccount => {
5543             description => 'Updates account information for the authenticated user',
5544             isAsync => 'false',
5545             level => 3,
5546             request => {
5547             optional => { networkdomain => 'Network domain for the account\'s networks' },
5548             required => {
5549             account => 'the current account name',
5550             domainid => 'the ID of the domain where the account exists',
5551             newname => 'new name for the account',
5552             },
5553             },
5554             response => {
5555             'accounttype' => 'account type (admin, domain-admin, user)',
5556             'domain' => 'name of the Domain the account belongs too',
5557             'domainid' => 'id of the Domain the account belongs too',
5558             'id' => 'the id of the account',
5559             'ipavailable' => 'the total number of public ip addresses available for this account to acquire',
5560             'iplimit' => 'the total number of public ip addresses this account can acquire',
5561             'iptotal' => 'the total number of public ip addresses allocated for this account',
5562             'iscleanuprequired' => 'true if the account requires cleanup',
5563             'name' => 'the name of the account',
5564             'networkdomain' => 'the network domain',
5565             'receivedbytes' => 'the total number of network traffic bytes received',
5566             'sentbytes' => 'the total number of network traffic bytes sent',
5567             'snapshotavailable' => 'the total number of snapshots available for this account',
5568             'snapshotlimit' => 'the total number of snapshots which can be stored by this account',
5569             'snapshottotal' => 'the total number of snapshots stored by this account',
5570             'state' => 'the state of the account',
5571             'templateavailable' => 'the total number of templates available to be created by this account',
5572             'templatelimit' => 'the total number of templates which can be created by this account',
5573             'templatetotal' => 'the total number of templates which have been created by this account',
5574             'user(*)' => 'the list of users associated with account',
5575             'vmavailable' => 'the total number of virtual machines available for this account to acquire',
5576             'vmlimit' => 'the total number of virtual machines that can be deployed by this account',
5577             'vmrunning' => 'the total number of virtual machines running for this account',
5578             'vmstopped' => 'the total number of virtual machines stopped for this account',
5579             'vmtotal' => 'the total number of virtual machines deployed by this account',
5580             'volumeavailable' => 'the total volume available for this account',
5581             'volumelimit' => 'the total volume which can be used by this account',
5582             'volumetotal' => 'the total volume being used by this account',
5583             },
5584             section => 'Account',
5585             },
5586             updateCluster => {
5587             description => 'Updates an existing cluster',
5588             isAsync => 'false',
5589             level => 1,
5590             request => {
5591             optional => {
5592             allocationstate => 'Allocation state of this cluster for allocation of new resources',
5593             clustername => 'the cluster name',
5594             clustertype => 'hypervisor type of the cluster',
5595             hypervisor => 'hypervisor type of the cluster',
5596             managedstate => 'whether this cluster is managed by cloudstack',
5597             },
5598             required => { id => 'the ID of the Cluster' },
5599             },
5600             response => {
5601             allocationstate => 'the allocation state of the cluster',
5602             clustertype => 'the type of the cluster',
5603             hypervisortype => 'the hypervisor type of the cluster',
5604             id => 'the cluster ID',
5605             managedstate => 'whether this cluster is managed by cloudstack',
5606             name => 'the cluster name',
5607             podid => 'the Pod ID of the cluster',
5608             podname => 'the Pod name of the cluster',
5609             zoneid => 'the Zone ID of the cluster',
5610             zonename => 'the Zone name of the cluster',
5611             },
5612             section => 'Host',
5613             },
5614             updateConfiguration => {
5615             description => 'Updates a configuration.',
5616             isAsync => 'false',
5617             level => 1,
5618             request => {
5619             optional => { value => 'the value of the configuration' },
5620             required => { name => 'the name of the configuration' },
5621             },
5622             response => {
5623             category => 'the category of the configuration',
5624             description => 'the description of the configuration',
5625             name => 'the name of the configuration',
5626             value => 'the value of the configuration',
5627             },
5628             section => 'Configuration',
5629             },
5630             updateDiskOffering => {
5631             description => 'Updates a disk offering.',
5632             isAsync => 'false',
5633             level => 1,
5634             request => {
5635             optional => {
5636             displaytext => 'updates alternate display text of the disk offering with this value',
5637             name => 'updates name of the disk offering with this value',
5638             },
5639             required => { id => 'ID of the disk offering' },
5640             },
5641             response => {
5642             created => 'the date this disk offering was created',
5643             disksize => 'the size of the disk offering in GB',
5644             displaytext => 'an alternate display text of the disk offering.',
5645             domain =>
5646             'the domain name this disk offering belongs to. Ignore this information as it is not currently applicable.',
5647             domainid =>
5648             'the domain ID this disk offering belongs to. Ignore this information as it is not currently applicable.',
5649             id => 'unique ID of the disk offering',
5650             iscustomized => 'true if disk offering uses custom size, false otherwise',
5651             name => 'the name of the disk offering',
5652             tags => 'the tags for the disk offering',
5653             },
5654             section => 'DiskOffering',
5655             },
5656             updateDomain => {
5657             description => 'Updates a domain with a new name',
5658             isAsync => 'false',
5659             level => 1,
5660             request => {
5661             optional =>
5662             { name => 'updates domain with this name', networkdomain => 'Network domain for the domain\'s networks', },
5663             required => { id => 'ID of domain to update' },
5664             },
5665             response => {
5666             haschild => 'whether the domain has one or more sub-domains',
5667             id => 'the ID of the domain',
5668             level => 'the level of the domain',
5669             name => 'the name of the domain',
5670             networkdomain => 'the network domain',
5671             parentdomainid => 'the domain ID of the parent domain',
5672             parentdomainname => 'the domain name of the parent domain',
5673             path => 'the path of the domain',
5674             },
5675             section => 'Domain',
5676             },
5677             updateHost => {
5678             description => 'Updates a host.',
5679             isAsync => 'false',
5680             level => 1,
5681             request => {
5682             optional => {
5683             allocationstate => 'Allocation state of this Host for allocation of new resources',
5684             hosttags => 'list of tags to be added to the host',
5685             oscategoryid => 'the id of Os category to update the host with',
5686             },
5687             required => { id => 'the ID of the host to update' },
5688             },
5689             response => {
5690             allocationstate => 'the allocation state of the host',
5691             averageload => 'the cpu average load on the host',
5692             capabilities => 'capabilities of the host',
5693             clusterid => 'the cluster ID of the host',
5694             clustername => 'the cluster name of the host',
5695             clustertype => 'the cluster type of the cluster that host belongs to',
5696             cpuallocated => 'the amount of the host\'s CPU currently allocated',
5697             cpunumber => 'the CPU number of the host',
5698             cpuspeed => 'the CPU speed of the host',
5699             cpuused => 'the amount of the host\'s CPU currently used',
5700             cpuwithoverprovisioning => 'the amount of the host\'s CPU after applying the cpu.overprovisioning.factor',
5701             created => 'the date and time the host was created',
5702             disconnected => 'true if the host is disconnected. False otherwise.',
5703             disksizeallocated => 'the host\'s currently allocated disk size',
5704             disksizetotal => 'the total disk size of the host',
5705             events => 'events available for the host',
5706             hasEnoughCapacity => 'true if this host has enough CPU and RAM capacity to migrate a VM to it, false otherwise',
5707             hosttags => 'comma-separated list of tags for the host',
5708             hypervisor => 'the host hypervisor',
5709             id => 'the ID of the host',
5710             ipaddress => 'the IP address of the host',
5711             islocalstorageactive => 'true if local storage is active, false otherwise',
5712             jobid =>
5713             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the host',
5714             jobstatus => 'shows the current pending asynchronous job status',
5715             lastpinged => 'the date and time the host was last pinged',
5716             managementserverid => 'the management server ID of the host',
5717             memoryallocated => 'the amount of the host\'s memory currently allocated',
5718             memorytotal => 'the memory total of the host',
5719             memoryused => 'the amount of the host\'s memory currently used',
5720             name => 'the name of the host',
5721             networkkbsread => 'the incoming network traffic on the host',
5722             networkkbswrite => 'the outgoing network traffic on the host',
5723             oscategoryid => 'the OS category ID of the host',
5724             oscategoryname => 'the OS category name of the host',
5725             podid => 'the Pod ID of the host',
5726             podname => 'the Pod name of the host',
5727             removed => 'the date and time the host was removed',
5728             state => 'the state of the host',
5729             type => 'the host type',
5730             version => 'the host version',
5731             zoneid => 'the Zone ID of the host',
5732             zonename => 'the Zone name of the host',
5733             },
5734             section => 'Host',
5735             },
5736             updateHostPassword => {
5737             description => 'Update password of a host/pool on management server.',
5738             isAsync => 'false',
5739             level => 1,
5740             request => {
5741             optional => {
5742             clusterid => 'the cluster ID. Either this parameter, or hostId has to be passed in',
5743             hostid => 'the host ID. Either this parameter, or clusterId has to be passed in',
5744             },
5745             required =>
5746             { password => 'the new password for the host/cluster', username => 'the username for the host/cluster', },
5747             },
5748             response => {
5749             displaytext => 'any text associated with the success or failure',
5750             success => 'true if operation is executed successfully',
5751             },
5752             section => 'Host',
5753             },
5754             updateInstanceGroup => {
5755             description => 'Updates a vm group',
5756             isAsync => 'false',
5757             level => 15,
5758             request => { optional => { name => 'new instance group name' }, required => { id => 'Instance group ID' }, },
5759             response => {
5760             account => 'the account owning the instance group',
5761             created => 'time and date the instance group was created',
5762             domain => 'the domain name of the instance group',
5763             domainid => 'the domain ID of the instance group',
5764             id => 'the id of the instance group',
5765             name => 'the name of the instance group',
5766             },
5767             section => 'VMGroup',
5768             },
5769             updateIso => {
5770             description => 'Updates an ISO file.',
5771             isAsync => 'false',
5772             level => 15,
5773             request => {
5774             optional => {
5775             bootable => 'true if image is bootable, false otherwise',
5776             displaytext => 'the display text of the image',
5777             format => 'the format for the image',
5778             name => 'the name of the image file',
5779             ostypeid => 'the ID of the OS type that best represents the OS of this image.',
5780             passwordenabled => 'true if the image supports the password reset feature; default is false',
5781             },
5782             required => { id => 'the ID of the image file' },
5783             },
5784             response => {
5785             account => 'the account name to which the template belongs',
5786             accountid => 'the account id to which the template belongs',
5787             bootable => 'true if the ISO is bootable, false otherwise',
5788             checksum => 'checksum of the template',
5789             created => 'the date this template was created',
5790             crossZones => 'true if the template is managed across all Zones, false otherwise',
5791             details => 'additional key/value details tied with template',
5792             displaytext => 'the template display text',
5793             domain => 'the name of the domain to which the template belongs',
5794             domainid => 'the ID of the domain to which the template belongs',
5795             format => 'the format of the template.',
5796             hostid => 'the ID of the secondary storage host for the template',
5797             hostname => 'the name of the secondary storage host for the template',
5798             hypervisor => 'the hypervisor on which the template runs',
5799             id => 'the template ID',
5800             isextractable => 'true if the template is extractable, false otherwise',
5801             isfeatured => 'true if this template is a featured template, false otherwise',
5802             ispublic => 'true if this template is a public template, false otherwise',
5803             isready => 'true if the template is ready to be deployed from, false otherwise.',
5804             jobid =>
5805             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
5806             jobstatus => 'shows the current pending asynchronous job status',
5807             name => 'the template name',
5808             ostypeid => 'the ID of the OS type for this template.',
5809             ostypename => 'the name of the OS type for this template.',
5810             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
5811             removed => 'the date this template was removed',
5812             size => 'the size of the template',
5813             sourcetemplateid => 'the template ID of the parent template if present',
5814             status => 'the status of the template',
5815             templatetag => 'the tag of this template',
5816             templatetype => 'the type of the template',
5817             zoneid => 'the ID of the zone for this template',
5818             zonename => 'the name of the zone for this template',
5819             },
5820             section => 'ISO',
5821             },
5822             updateIsoPermissions => {
5823             description => 'Updates iso permissions',
5824             isAsync => 'false',
5825             level => 15,
5826             request => {
5827             optional => {
5828             accounts => 'a comma delimited list of accounts. If specified, \'op\' parameter has to be passed in.',
5829             isextractable => 'true if the template/iso is extractable, false other wise. Can be set only by root admin',
5830             isfeatured => 'true for featured template/iso, false otherwise',
5831             ispublic => 'true for public template/iso, false for private templates/isos',
5832             op => 'permission operator (add, remove, reset)',
5833             },
5834             required => { id => 'the template ID' },
5835             },
5836             response => {
5837             displaytext => 'any text associated with the success or failure',
5838             success => 'true if operation is executed successfully',
5839             },
5840             section => 'ISO',
5841             },
5842             updateLoadBalancerRule => {
5843             description => 'Updates load balancer',
5844             isAsync => 'true',
5845             level => 15,
5846             request => {
5847             optional => {
5848             algorithm => 'load balancer algorithm (source, roundrobin, leastconn)',
5849             description => 'the description of the load balancer rule',
5850             name => 'the name of the load balancer rule',
5851             },
5852             required => { id => 'the id of the load balancer rule to update' },
5853             },
5854             response => {
5855             account => 'the account of the load balancer rule',
5856             algorithm => 'the load balancer algorithm (source, roundrobin, leastconn)',
5857             cidrlist => 'the cidr list to forward traffic from',
5858             description => 'the description of the load balancer',
5859             domain => 'the domain of the load balancer rule',
5860             domainid => 'the domain ID of the load balancer rule',
5861             id => 'the load balancer rule ID',
5862             name => 'the name of the load balancer',
5863             privateport => 'the private port',
5864             publicip => 'the public ip address',
5865             publicipid => 'the public ip address id',
5866             publicport => 'the public port',
5867             state => 'the state of the rule',
5868             zoneid => 'the id of the zone the rule belongs to',
5869             },
5870             section => 'LoadBalancer',
5871             },
5872             updateNetwork => {
5873             description => 'Updates a network',
5874             isAsync => 'true',
5875             level => 15,
5876             request => {
5877             optional => {
5878             displaytext => 'the new display text for the network',
5879             name => 'the new name for the network',
5880             networkdomain => 'network domain',
5881             tags => 'tags for the network',
5882             },
5883             required => { id => 'the ID of the network' },
5884             },
5885             response => {
5886             'account' => 'the owner of the network',
5887             'broadcastdomaintype' => 'Broadcast domain type of the network',
5888             'broadcasturi' => 'broadcast uri of the network',
5889             'displaytext' => 'the displaytext of the network',
5890             'dns1' => 'the first DNS for the network',
5891             'dns2' => 'the second DNS for the network',
5892             'domain' => 'the domain name of the network owner',
5893             'domainid' => 'the domain id of the network owner',
5894             'endip' => 'the end ip of the network',
5895             'gateway' => 'the network\'s gateway',
5896             'id' => 'the id of the network',
5897             'isdefault' => 'true if network is default, false otherwise',
5898             'isshared' => 'true if network is shared, false otherwise',
5899             'issystem' => 'true if network is system, false otherwise',
5900             'name' => 'the name of the network',
5901             'netmask' => 'the network\'s netmask',
5902             'networkdomain' => 'the network domain',
5903             'networkofferingavailability' => 'availability of the network offering the network is created from',
5904             'networkofferingdisplaytext' => 'display text of the network offering the network is created from',
5905             'networkofferingid' => 'network offering id the network is created from',
5906             'networkofferingname' => 'name of the network offering the network is created from',
5907             'related' => 'related to what other network configuration',
5908             'securitygroupenabled' => 'true if security group is enabled, false otherwise',
5909             'service(*)' => 'the list of services',
5910             'startip' => 'the start ip of the network',
5911             'state' => 'state of the network',
5912             'tags' => 'comma separated tag',
5913             'traffictype' => 'the traffic type of the network',
5914             'type' => 'the type of the network',
5915             'vlan' => 'the vlan of the network',
5916             'zoneid' => 'zone id of the network',
5917             },
5918             section => 'Network',
5919             },
5920             updateNetworkOffering => {
5921             description => 'Updates a network offering.',
5922             isAsync => 'false',
5923             level => 1,
5924             request => {
5925             optional => {
5926             availability =>
5927             'the availability of network offering. Default value is Required for Guest Virtual network offering; Optional for Guest Direct network offering',
5928             displaytext => 'the display text of the network offering',
5929             id => 'the id of the network offering',
5930             name => 'the name of the network offering',
5931             },
5932             },
5933             response => {
5934             availability => 'availability of the network offering',
5935             created => 'the date this network offering was created',
5936             displaytext => 'an alternate display text of the network offering.',
5937             guestiptype => 'guest ip type of the network offering',
5938             id => 'the id of the network offering',
5939             isdefault => 'true if network offering is default, false otherwise',
5940             maxconnections => 'the max number of concurrent connection the network offering supports',
5941             name => 'the name of the network offering',
5942             networkrate => 'data transfer rate in megabits per second allowed.',
5943             specifyvlan => 'true if network offering supports vlans, false otherwise',
5944             tags => 'the tags for the network offering',
5945             traffictype =>
5946             'the traffic type for the network offering, supported types are Public, Management, Control, Guest, Vlan or Storage.',
5947             },
5948             section => 'NetworkOffering',
5949             },
5950             updatePod => {
5951             description => 'Updates a Pod.',
5952             isAsync => 'false',
5953             level => 1,
5954             request => {
5955             optional => {
5956             allocationstate => 'Allocation state of this cluster for allocation of new resources',
5957             endip => 'the ending IP address for the Pod',
5958             gateway => 'the gateway for the Pod',
5959             name => 'the name of the Pod',
5960             netmask => 'the netmask of the Pod',
5961             startip => 'the starting IP address for the Pod',
5962             },
5963             required => { id => 'the ID of the Pod' },
5964             },
5965             response => {
5966             allocationstate => 'the allocation state of the cluster',
5967             endip => 'the ending IP for the Pod',
5968             gateway => 'the gateway of the Pod',
5969             id => 'the ID of the Pod',
5970             name => 'the name of the Pod',
5971             netmask => 'the netmask of the Pod',
5972             startip => 'the starting IP for the Pod',
5973             zoneid => 'the Zone ID of the Pod',
5974             zonename => 'the Zone name of the Pod',
5975             },
5976             section => 'Pod',
5977             },
5978             updateResourceCount => {
5979             description => 'Recalculate and update resource count for an account or domain.',
5980             isAsync => 'false',
5981             level => 7,
5982             request => {
5983             optional => {
5984             account => 'Update resource count for a specified account. Must be used with the domainId parameter.',
5985             resourcetype =>
5986             'Type of resource to update. If specifies valid values are 0, 1, 2, 3, and 4. If not specified will update all resource counts0 - Instance. Number of instances a user can create. 1 - IP. Number of public IP addresses a user can own. 2 - Volume. Number of disk volumes a user can create.3 - Snapshot. Number of snapshots a user can create.4 - Template. Number of templates that a user can register/create.',
5987             },
5988             required => {
5989             domainid =>
5990             'If account parameter specified then updates resource counts for a specified account in this domain else update resource counts for all accounts & child domains in specified domain.',
5991             },
5992             },
5993             response => {
5994             account => 'the account for which resource count\'s are updated',
5995             domain => 'the domain name for which resource count\'s are updated',
5996             domainid => 'the domain ID for which resource count\'s are updated',
5997             resourcecount => 'resource count',
5998             resourcetype =>
5999             'resource type. Values include 0, 1, 2, 3, 4. See the resourceType parameter for more information on these values.',
6000             },
6001             section => 'Limit',
6002             },
6003             updateResourceLimit => {
6004             description => 'Updates resource limits for an account or domain.',
6005             isAsync => 'false',
6006             level => 7,
6007             request => {
6008             optional => {
6009             account => 'Update resource for a specified account. Must be used with the domainId parameter.',
6010             domainid =>
6011             'Update resource limits for all accounts in specified domain. If used with the account parameter, updates resource limits for a specified account in specified domain.',
6012             max => 'Maximum resource limit.',
6013             },
6014             required => {
6015             resourcetype =>
6016             'Type of resource to update. Values are 0, 1, 2, 3, and 4. 0 - Instance. Number of instances a user can create. 1 - IP. Number of public IP addresses a user can own. 2 - Volume. Number of disk volumes a user can create.3 - Snapshot. Number of snapshots a user can create.4 - Template. Number of templates that a user can register/create.',
6017             },
6018             },
6019             response => {
6020             account => 'the account of the resource limit',
6021             domain => 'the domain name of the resource limit',
6022             domainid => 'the domain ID of the resource limit',
6023             max => 'the maximum number of the resource. A -1 means the resource currently has no limit.',
6024             resourcetype =>
6025             'resource type. Values include 0, 1, 2, 3, 4. See the resourceType parameter for more information on these values.',
6026             },
6027             section => 'Limit',
6028             },
6029             updateServiceOffering => {
6030             description => 'Updates a service offering.',
6031             isAsync => 'false',
6032             level => 1,
6033             request => {
6034             optional => {
6035             displaytext => 'the display text of the service offering to be updated',
6036             name => 'the name of the service offering to be updated',
6037             },
6038             required => { id => 'the ID of the service offering to be updated' },
6039             },
6040             response => {
6041             cpunumber => 'the number of CPU',
6042             cpuspeed => 'the clock rate CPU speed in Mhz',
6043             created => 'the date this service offering was created',
6044             defaultuse => 'is this a default system vm offering',
6045             displaytext => 'an alternate display text of the service offering.',
6046             domain => 'Domain name for the offering',
6047             domainid => 'the domain id of the service offering',
6048             hosttags => 'the host tag for the service offering',
6049             id => 'the id of the service offering',
6050             issystem => 'is this a system vm offering',
6051             limitcpuuse => 'restrict the CPU usage to committed service offering',
6052             memory => 'the memory in MB',
6053             name => 'the name of the service offering',
6054             networkrate => 'data transfer rate in megabits per second allowed.',
6055             offerha => 'the ha support in the service offering',
6056             storagetype => 'the storage type for this service offering',
6057             systemvmtype => 'is this a the systemvm type for system vm offering',
6058             tags => 'the tags for the service offering',
6059             },
6060             section => 'ServiceOffering',
6061             },
6062             updateTemplate => {
6063             description => 'Updates attributes of a template.',
6064             isAsync => 'false',
6065             level => 15,
6066             request => {
6067             optional => {
6068             bootable => 'true if image is bootable, false otherwise',
6069             displaytext => 'the display text of the image',
6070             format => 'the format for the image',
6071             name => 'the name of the image file',
6072             ostypeid => 'the ID of the OS type that best represents the OS of this image.',
6073             passwordenabled => 'true if the image supports the password reset feature; default is false',
6074             },
6075             required => { id => 'the ID of the image file' },
6076             },
6077             response => {
6078             account => 'the account name to which the template belongs',
6079             accountid => 'the account id to which the template belongs',
6080             bootable => 'true if the ISO is bootable, false otherwise',
6081             checksum => 'checksum of the template',
6082             created => 'the date this template was created',
6083             crossZones => 'true if the template is managed across all Zones, false otherwise',
6084             details => 'additional key/value details tied with template',
6085             displaytext => 'the template display text',
6086             domain => 'the name of the domain to which the template belongs',
6087             domainid => 'the ID of the domain to which the template belongs',
6088             format => 'the format of the template.',
6089             hostid => 'the ID of the secondary storage host for the template',
6090             hostname => 'the name of the secondary storage host for the template',
6091             hypervisor => 'the hypervisor on which the template runs',
6092             id => 'the template ID',
6093             isextractable => 'true if the template is extractable, false otherwise',
6094             isfeatured => 'true if this template is a featured template, false otherwise',
6095             ispublic => 'true if this template is a public template, false otherwise',
6096             isready => 'true if the template is ready to be deployed from, false otherwise.',
6097             jobid =>
6098             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the template',
6099             jobstatus => 'shows the current pending asynchronous job status',
6100             name => 'the template name',
6101             ostypeid => 'the ID of the OS type for this template.',
6102             ostypename => 'the name of the OS type for this template.',
6103             passwordenabled => 'true if the reset password feature is enabled, false otherwise',
6104             removed => 'the date this template was removed',
6105             size => 'the size of the template',
6106             sourcetemplateid => 'the template ID of the parent template if present',
6107             status => 'the status of the template',
6108             templatetag => 'the tag of this template',
6109             templatetype => 'the type of the template',
6110             zoneid => 'the ID of the zone for this template',
6111             zonename => 'the name of the zone for this template',
6112             },
6113             section => 'Template',
6114             },
6115             updateTemplatePermissions => {
6116             description =>
6117             'Updates a template visibility permissions. A public template is visible to all accounts within the same domain. A private template is visible only to the owner of the template. A priviledged template is a private template with account permissions added. Only accounts specified under the template permissions are visible to them.',
6118             isAsync => 'false',
6119             level => 15,
6120             request => {
6121             optional => {
6122             accounts => 'a comma delimited list of accounts. If specified, \'op\' parameter has to be passed in.',
6123             isextractable => 'true if the template/iso is extractable, false other wise. Can be set only by root admin',
6124             isfeatured => 'true for featured template/iso, false otherwise',
6125             ispublic => 'true for public template/iso, false for private templates/isos',
6126             op => 'permission operator (add, remove, reset)',
6127             },
6128             required => { id => 'the template ID' },
6129             },
6130             response => {
6131             displaytext => 'any text associated with the success or failure',
6132             success => 'true if operation is executed successfully',
6133             },
6134             section => 'Template',
6135             },
6136             updateUser => {
6137             description => 'Updates a user account',
6138             isAsync => 'false',
6139             level => 3,
6140             request => {
6141             optional => {
6142             email => 'email',
6143             firstname => 'first name',
6144             lastname => 'last name',
6145             password =>
6146             'Hashed password (default is MD5). If you wish to use any other hasing algorithm, you would need to write a custom authentication adapter',
6147             timezone =>
6148             'Specifies a timezone for this command. For more information on the timezone parameter, see Time Zone Format.',
6149             userapikey => 'The API key for the user. Must be specified with userSecretKey',
6150             username => 'Unique username',
6151             usersecretkey => 'The secret key for the user. Must be specified with userApiKey',
6152             },
6153             required => { id => 'User id' },
6154             },
6155             response => {
6156             account => 'the account name of the user',
6157             accounttype => 'the account type of the user',
6158             apikey => 'the api key of the user',
6159             created => 'the date and time the user account was created',
6160             domain => 'the domain name of the user',
6161             domainid => 'the domain ID of the user',
6162             email => 'the user email address',
6163             firstname => 'the user firstname',
6164             id => 'the user ID',
6165             lastname => 'the user lastname',
6166             secretkey => 'the secret key of the user',
6167             state => 'the user state',
6168             timezone => 'the timezone user was created in',
6169             username => 'the user name',
6170             },
6171             section => 'User',
6172             },
6173             updateVirtualMachine => {
6174             description => 'Updates parameters of a virtual machine.',
6175             isAsync => 'false',
6176             level => 15,
6177             request => {
6178             optional => {
6179             displayname => 'user generated name',
6180             group => 'group of the virtual machine',
6181             haenable => 'true if high-availability is enabled for the virtual machine, false otherwise',
6182             ostypeid => 'the ID of the OS type that best represents this VM.',
6183             userdata =>
6184             'an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Currently only HTTP GET is supported. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding.',
6185             },
6186             required => { id => 'The ID of the virtual machine' },
6187             },
6188             response => {
6189             'account' => 'the account associated with the virtual machine',
6190             'cpunumber' => 'the number of cpu this virtual machine is running with',
6191             'cpuspeed' => 'the speed of each cpu',
6192             'cpuused' => 'the amount of the vm\'s CPU currently used',
6193             'created' => 'the date when this virtual machine was created',
6194             'displayname' => 'user generated name. The name of the virtual machine is returned if no displayname exists.',
6195             'domain' => 'the name of the domain in which the virtual machine exists',
6196             'domainid' => 'the ID of the domain in which the virtual machine exists',
6197             'forvirtualnetwork' => 'the virtual network for the service offering',
6198             'group' => 'the group name of the virtual machine',
6199             'groupid' => 'the group ID of the virtual machine',
6200             'guestosid' => 'Os type ID of the virtual machine',
6201             'haenable' => 'true if high-availability is enabled, false otherwise',
6202             'hostid' => 'the ID of the host for the virtual machine',
6203             'hostname' => 'the name of the host for the virtual machine',
6204             'hypervisor' => 'the hypervisor on which the template runs',
6205             'id' => 'the ID of the virtual machine',
6206             'ipaddress' => 'the ip address of the virtual machine',
6207             'isodisplaytext' => 'an alternate display text of the ISO attached to the virtual machine',
6208             'isoid' => 'the ID of the ISO attached to the virtual machine',
6209             'isoname' => 'the name of the ISO attached to the virtual machine',
6210             'jobid' =>
6211             'shows the current pending asynchronous job ID. This tag is not returned if no current pending jobs are acting on the virtual machine',
6212             'jobstatus' => 'shows the current pending asynchronous job status',
6213             'memory' => 'the memory allocated for the virtual machine',
6214             'name' => 'the name of the virtual machine',
6215             'networkkbsread' => 'the incoming network traffic on the vm',
6216             'networkkbswrite' => 'the outgoing network traffic on the host',
6217             'nic(*)' => 'the list of nics associated with vm',
6218             'password' => 'the password (if exists) of the virtual machine',
6219             'passwordenabled' => 'true if the password rest feature is enabled, false otherwise',
6220             'rootdeviceid' => 'device ID of the root volume',
6221             'rootdevicetype' => 'device type of the root volume',
6222             'securitygroup(*)' => 'list of security groups associated with the virtual machine',
6223             'serviceofferingid' => 'the ID of the service offering of the virtual machine',
6224             'serviceofferingname' => 'the name of the service offering of the virtual machine',
6225             'state' => 'the state of the virtual machine',
6226             'templatedisplaytext' => 'an alternate display text of the template for the virtual machine',
6227             'templateid' =>
6228             'the ID of the template for the virtual machine. A -1 is returned if the virtual machine was created from an ISO file.',
6229             'templatename' => 'the name of the template for the virtual machine',
6230             'zoneid' => 'the ID of the availablility zone for the virtual machine',
6231             'zonename' => 'the name of the availability zone for the virtual machine',
6232             },
6233             section => 'VM',
6234             },
6235             updateZone => {
6236             description => 'Updates a Zone.',
6237             isAsync => 'false',
6238             level => 1,
6239             request => {
6240             optional => {
6241             allocationstate => 'Allocation state of this cluster for allocation of new resources',
6242             details => 'the details for the Zone',
6243             dhcpprovider => 'the dhcp Provider for the Zone',
6244             dns1 => 'the first DNS for the Zone',
6245             dns2 => 'the second DNS for the Zone',
6246             dnssearchorder => 'the dns search order list',
6247             domain => 'Network domain name for the networks in the zone',
6248             guestcidraddress => 'the guest CIDR address for the Zone',
6249             internaldns1 => 'the first internal DNS for the Zone',
6250             internaldns2 => 'the second internal DNS for the Zone',
6251             ispublic => 'updates a private zone to public if set, but not vice-versa',
6252             name => 'the name of the Zone',
6253             vlan => 'the VLAN for the Zone',
6254             },
6255             required => { id => 'the ID of the Zone' },
6256             },
6257             response => {
6258             allocationstate => 'the allocation state of the cluster',
6259             description => 'Zone description',
6260             dhcpprovider => 'the dhcp Provider for the Zone',
6261             displaytext => 'the display text of the zone',
6262             dns1 => 'the first DNS for the Zone',
6263             dns2 => 'the second DNS for the Zone',
6264             domain => 'Network domain name for the networks in the zone',
6265             domainid => 'the ID of the containing domain, null for public zones',
6266             guestcidraddress => 'the guest CIDR address for the Zone',
6267             id => 'Zone id',
6268             internaldns1 => 'the first internal DNS for the Zone',
6269             internaldns2 => 'the second internal DNS for the Zone',
6270             name => 'Zone name',
6271             networktype => 'the network type of the zone; can be Basic or Advanced',
6272             securitygroupsenabled => 'true if security groups support is enabled, false otherwise',
6273             vlan => 'the vlan range of the zone',
6274             zonetoken => 'Zone Token',
6275             },
6276             section => 'Zone',
6277             },
6278             uploadCustomCertificate => {
6279             description => 'Uploads custom certificate',
6280             isAsync => 'true',
6281             level => 1,
6282             request => {
6283             optional => {
6284             id => 'the custom cert id in the chain',
6285             name => 'the alias of the certificate',
6286             privatekey => 'the private key for the certificate',
6287             },
6288             required => {
6289             certificate => 'the custom cert to be uploaded',
6290             domainsuffix => 'DNS domain suffix that the certificate is granted for',
6291             },
6292             },
6293             response => { message => 'message of the certificate upload operation' },
6294             section => 'Certificate',
6295             },
6296             };
6297              
6298             ##############################################################################
6299             # Setup exports
6300              
6301             my ( $exports, $groups, @all );
6302              
6303             for my $cmd ( keys %$command ) { ## no critic qw( References::ProhibitDoubleSigils )
6304              
6305             $exports->{ $cmd } = \&_generate_method;
6306             push @{ $groups->{ $command->{ $cmd }{ section } } }, $cmd;
6307             push @all, $cmd;
6308              
6309             }
6310              
6311             $groups->{ all } = \@all;
6312              
6313             my $config = {
6314              
6315             exports => $exports,
6316             groups => $groups,
6317              
6318             };
6319              
6320             Sub::Exporter::setup_exporter( $config );
6321              
6322             ##############################################################################
6323             # Setup OO interface
6324              
6325             # handle either a list of elements or a hashref
6326              
6327             sub new { ## no critic qw( Subroutines::RequireArgUnpacking )
6328             return bless {}, ref $_[0] || $_[0];
6329             }
6330              
6331             our $AUTOLOAD;
6332              
6333             sub AUTOLOAD { ## no critic qw( Subroutines::RequireArgUnpacking )
6334              
6335             my $self = $_[0];
6336              
6337             ( my $method = $AUTOLOAD ) =~ s/^.*:://;
6338              
6339             croak "unknown method $method"
6340             unless exists $command->{ $method };
6341              
6342             no strict 'refs'; ## no critic qw( TestingAndDebugging::ProhibitNoStrict )
6343             *$AUTOLOAD = $self->_generate_method( $method ); ## no critic qw( References::ProhibitDoubleSigils )
6344              
6345             goto &$AUTOLOAD; ## no critic qw( References::ProhibitDoubleSigils )
6346              
6347             }
6348              
6349             sub DESTROY { }
6350              
6351             ##############################################################################
6352             # Utility methods
6353              
6354             sub _generate_method {
6355              
6356             my ( undef, $cmd ) = @_;
6357              
6358             croak "Unknown method: $cmd"
6359             unless exists $command->{ $cmd };
6360              
6361             # FIXME: allow caller to pass in their own validation structures.
6362             # FIXME: more robust handling of at least the obvious data types.
6363             my %validate;
6364              
6365             # Only build this part of the hash once ...
6366             $validate{ spec }{ $_ } = { type => SCALAR } for keys %{ $command->{ $cmd }{ request }{ required } };
6367             $validate{ spec }{ $_ } = { type => SCALAR, optional => 1 } for keys %{ $command->{ $cmd }{ request }{ optional } };
6368              
6369             return sub {
6370              
6371             my $self = '';
6372             $self = shift
6373             if blessed $_[0];
6374              
6375             $validate{ params } = \@_;
6376              
6377             my %arg;
6378             %arg = validate_with( %validate )
6379             if keys %{ $validate{ spec } };
6380              
6381             my @proc = $cmd;
6382              
6383             if ( keys %arg ) {
6384              
6385             push @proc, join q{&}, map { "$_=$arg{$_}" } keys %arg;
6386              
6387             }
6388              
6389             my $api = blessed $self ? $self->api : api();
6390              
6391             $api->proc( @proc );
6392              
6393             return $api->send_request eq 'yes' ? $api->response : $api->url;
6394              
6395             };
6396             } ## end sub _generate_method
6397              
6398             { # Hide api stuff
6399              
6400             my $api;
6401              
6402             sub api { ## no critic qw( Subroutines::RequireArgUnpacking )
6403              
6404             if ( ! @_ || ( @_ == 1 && blessed $_[0] eq __PACKAGE__ ) ) {
6405              
6406             croak 'api not setup correctly'
6407             unless defined $api && blessed $api eq 'Net::CloudStack';
6408              
6409             return $api;
6410              
6411             }
6412              
6413             my $args
6414             = ( $_[0] eq __PACKAGE__ || blessed $_[0] eq __PACKAGE__ )
6415             ? $_[1]
6416             : $_[0];
6417              
6418             croak 'args must be a hashref'
6419             if ref $args && ref $args ne 'HASH';
6420              
6421             $api = Net::CloudStack->new( $args )
6422             if ! defined $api || blessed $api ne 'Net::CloudStack';
6423              
6424             return $api
6425             unless ref $args;
6426              
6427             $api->$_( $args->{ $_ } ) for keys %$args; ## no critic qw( References::ProhibitDoubleSigils )
6428              
6429             return $api;
6430              
6431             } ## end sub api
6432             } # End hiding api stuff
6433              
6434             } # End general hiding
6435              
6436             1;
6437              
6438             __END__