cloudstack/docs/tmp/en-US/html/whats-new-in-api-3.0.html

629 lines
28 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>3.2. What's New in the API for 3.0</title><link rel="stylesheet" type="text/css" href="Common_Content/css/default.css" /><link rel="stylesheet" media="print" href="Common_Content/css/print.css" type="text/css" /><meta name="generator" content="publican 2.8" /><meta name="package" content="Apache_CloudStack-API_Developers_Guide-4.0.0-incubating-en-US-1-" /><link rel="home" href="index.html" title="CloudStack API Developer's Guide" /><link rel="up" href="whats-new.html" title="Chapter 3. What's New in the API?" /><link rel="prev" href="whats-new-in-api-4.0.html" title="3.1. What's New in the API for 4.0" /><link rel="next" href="api-calls.html" title="Chapter 4. Calling the CloudStack API" /></head><body><p id="title"><a class="left" href="http://cloudstack.org"><img src="Common_Content/images/image_left.png" alt="Product Site" /></a><a class="right" href="http://docs.cloudstack.org"><img src="Common_Content/images/image_right.png" alt="Documentation Site" /></a></p><ul class="docnav"><li class="previous"><a accesskey="p" href="whats-new-in-api-4.0.html"><strong>Prev</strong></a></li><li class="next"><a accesskey="n" href="api-calls.html"><strong>Next</strong></a></li></ul><div class="section" id="whats-new-in-api-3.0"><div class="titlepage"><div><div><h2 class="title" id="whats-new-in-api-3.0">3.2. What's New in the API for 3.0</h2></div></div></div><div xml:lang="en-US" class="section" id="enabling-port-8096" lang="en-US"><div class="titlepage"><div><div><h3 class="title" id="enabling-port-8096">3.2.1. Enabling Port 8096</h3></div></div></div><div class="para">
Port 8096, which allows API calls without authentication, is closed and disabled by default on any fresh 3.0.1 installations. You can enable 8096 (or another port) for this purpose as follows:
</div><div class="orderedlist"><ol><li class="listitem"><div class="para">
Ensure that the first Management Server is installed and running.
</div></li><li class="listitem"><div class="para">
Set the global configuration parameter integration.api.port to the desired port.
</div></li><li class="listitem"><div class="para">
Restart the Management Server.
</div></li><li class="listitem"><div class="para">
On the Management Server host machine, create an iptables rule allowing access to that port.
</div></li></ol></div></div><div xml:lang="en-US" class="section" id="stopped-vm" lang="en-US"><div class="titlepage"><div><div><h3 class="title" id="stopped-vm">3.2.2. Stopped VM</h3></div></div></div><div class="para">
CloudStack now supports creating a VM without starting it. You can determine whether the VM needs to be started as part of the VM deployment. A VM can now be deployed in two ways: create and start a VM (the default method); or create a VM and leave it in the stopped state.
</div><div class="para">
A new request parameter, startVM, is introduced in the deployVm API to support the stopped VM feature.
</div><div class="para">
The possible values are:
</div><div class="itemizedlist"><ul><li class="listitem"><div class="para">
true - The VM starts as a part of the VM deployment.
</div></li><li class="listitem"><div class="para">
false - The VM is left in the stopped state at the end of the VM deployment.
</div></li></ul></div><div class="para">
The default value is true.
</div></div><div xml:lang="en-US" class="section" id="change-to-behavior-of-list-commands" lang="en-US"><div class="titlepage"><div><div><h3 class="title" id="change-to-behavior-of-list-commands">3.2.3. Change to Behavior of List Commands</h3></div></div></div><div class="para">
There was a major change in how our List* API commands work in CloudStack 3.0 compared to 2.2.x. The rules below apply only for managed resources those that belong to an account, domain, or project. They are irrelevant for the List* commands displaying unmanaged (system) resources, such as hosts, clusters, and external network resources.
</div><div class="para">
When no parameters are passed in to the call, the caller sees only resources owned by the caller (even when the caller is the administrator). Previously, the administrator saw everyone else's resources by default.
</div><div class="para">
When accountName and domainId are passed in:
</div><div class="itemizedlist"><ul><li class="listitem"><div class="para">
The caller sees the resources dedicated to the account specified.
</div></li><li class="listitem"><div class="para">
If the call is executed by a regular user, the user is authorized to specify only the user's own account and domainId.
</div></li><li class="listitem"><div class="para">
If the caller is a domain administrator, CloudStack performs an authorization check to see whether the caller is permitted to view resources for the given account and domainId.
</div></li></ul></div><div class="para">
When projectId is passed in, only resources belonging to that project are listed.
</div><div class="para">
When domainId is passed in, the call returns only resources belonging to the domain specified. To see the resources of subdomains, use the parameter isRecursive=true. Again, the regular user can see only resources owned by that user, the root administrator can list anything, and a domain administrator is authorized to see only resources of the administrator's own domain and subdomains.
</div><div class="para">
To see all resources the caller is authorized to see, except for Project resources, use the parameter listAll=true.
</div><div class="para">
To see all Project resources the caller is authorized to see, use the parameter projectId=-1.
</div><div class="para">
There is one API command that doesn't fall under the rules above completely: the listTemplates command. This command has its own flags defining the list rules:
</div><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" width="50%" /><col align="left" class="c2" width="50%" /></colgroup><thead><tr><th align="left">
<div class="para">
listTemplates Flag
</div>
</th><th align="left">
<div class="para">
Description
</div>
</th></tr></thead><tbody><tr><td align="left">
<div class="para">
featured
</div>
</td><td align="left">
<div class="para">
Returns templates that have been marked as featured and public.
</div>
</td></tr><tr><td align="left">
<div class="para">
self
</div>
</td><td align="left">
<div class="para">
Returns templates that have been registered or created by the calling user.
</div>
</td></tr><tr><td align="left">
<div class="para">
selfexecutable
</div>
</td><td align="left">
<div class="para">
Same as self, but only returns templates that are ready to be deployed with.
</div>
</td></tr><tr><td align="left">
<div class="para">
sharedexecutable
</div>
</td><td align="left">
<div class="para">
Ready templates that have been granted to the calling user by another user.
</div>
</td></tr><tr><td align="left">
<div class="para">
executable
</div>
</td><td align="left">
<div class="para">
Templates that are owned by the calling user, or public templates, that can be used to deploy a new VM.
</div>
</td></tr><tr><td align="left">
<div class="para">
community
</div>
</td><td align="left">
<div class="para">
Returns templates that have been marked as public but not featured.
</div>
</td></tr><tr><td align="left">
<div class="para">
all
</div>
</td><td align="left">
<div class="para">
Returns all templates (only usable by admins).
</div>
</td></tr></tbody></table></div><div class="para">
The CloudStack UI on a general view will display all resources that the logged-in user is authorized to see, except for project resources. To see the project resources, select the project view.
</div></div><div xml:lang="en-US" class="section" id="removed-API-commands" lang="en-US"><div class="titlepage"><div><div><h3 class="title" id="removed-API-commands">3.2.4. Removed API commands</h3></div></div></div><div class="itemizedlist"><ul><li class="listitem"><div class="para">
createConfiguration (Adds configuration value)
</div></li><li class="listitem"><div class="para">
configureSimulator (Configures simulator)
</div></li></ul></div></div><div xml:lang="en-US" class="section" id="added-API-commands" lang="en-US"><div class="titlepage"><div><div><h3 class="title" id="added-API-commands">3.2.5. Added API commands in 3.0</h3></div></div></div><div class="section" id="added-api-commands-3.0.2"><div class="titlepage"><div><div><h4 class="title" id="added-api-commands-3.0.2">3.2.5.1. Added in 3.0.2</h4></div></div></div><div class="itemizedlist"><ul><li class="listitem"><div class="para">
changeServiceForSystemVm
</div><div class="para">
Changes the service offering for a system VM (console proxy or secondary storage). The system VM must be in a "Stopped" state for this command to take effect.
</div></li></ul></div></div><div class="section" id="added-api-commands-3.0.1"><div class="titlepage"><div><div><h4 class="title" id="added-api-commands-3.0.1">3.2.5.2. Added in 3.0.1</h4></div></div></div><div class="itemizedlist"><ul><li class="listitem"><div class="para">
changeServiceForSystemVm
</div><div class="para">
Changes the service offering for a system VM (console proxy or secondary storage). The system VM must be in a "Stopped" state for this command to take effect.
</div></li></ul></div></div><div class="section" id="added-api-commands-3.0.0"><div class="titlepage"><div><div><h4 class="title" id="added-api-commands-3.0.0">3.2.5.3. Added in 3.0.0</h4></div></div></div><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" width="33%" /><col align="left" class="c2" width="33%" /><col align="left" class="c3" width="33%" /></colgroup><tbody><tr><td align="left">
<div class="para">
assignVirtualMachine (Move a user VM to another user under same domain.)
</div>
</td><td align="left">
<div class="para">
restoreVirtualMachine (Restore a VM to original template or specific snapshot)
</div>
</td><td align="left">
<div class="para">
createLBStickinessPolicy (Creates a Load Balancer stickiness policy )
</div>
</td></tr><tr><td align="left">
<div class="para">
deleteLBStickinessPolicy (Deletes a LB stickiness policy.)
</div>
</td><td align="left">
<div class="para">
listLBStickinessPolicies (Lists LBStickiness policies.)
</div>
</td><td align="left">
<div class="para">
ldapConfig (Configure the LDAP context for this site.)
</div>
</td></tr><tr><td align="left">
<div class="para">
addSwift (Adds Swift.)
</div>
</td><td align="left">
<div class="para">
listSwifts (List Swift.)
</div>
</td><td align="left">
<div class="para">
migrateVolume (Migrate volume)
</div>
</td></tr><tr><td align="left">
<div class="para">
updateStoragePool (Updates a storage pool.)
</div>
</td><td align="left">
<div class="para">
authorizeSecurityGroupEgress (Authorizes a particular egress rule for this security group)
</div>
</td><td align="left">
<div class="para">
revokeSecurityGroupEgress (Deletes a particular egress rule from this security group)
</div>
</td></tr><tr><td align="left">
<div class="para">
createNetworkOffering (Creates a network offering.)
</div>
</td><td align="left">
<div class="para">
deleteNetworkOffering (Deletes a network offering.)
</div>
</td><td align="left">
<div class="para">
createProject (Creates a project)
</div>
</td></tr><tr><td align="left">
<div class="para">
deleteProject (Deletes a project)
</div>
</td><td align="left">
<div class="para">
updateProject (Updates a project)
</div>
</td><td align="left">
<div class="para">
activateProject (Activates a project)
</div>
</td></tr><tr><td align="left">
<div class="para">
suspendProject (Suspends a project)
</div>
</td><td align="left">
<div class="para">
listProjects (Lists projects and provides detailed information for listed projects)
</div>
</td><td align="left">
<div class="para">
addAccountToProject (Adds acoount to a project)
</div>
</td></tr><tr><td align="left">
<div class="para">
deleteAccountFromProject (Deletes account from the project)
</div>
</td><td align="left">
<div class="para">
listProjectAccounts (Lists project's accounts)
</div>
</td><td align="left">
<div class="para">
listProjectInvitations (Lists an account's invitations to join projects)
</div>
</td></tr><tr><td align="left">
<div class="para">
updateProjectInvitation (Accepts or declines project invitation)
</div>
</td><td align="left">
<div class="para">
deleteProjectInvitation (Deletes a project invitation)
</div>
</td><td align="left">
<div class="para">
updateHypervisorCapabilities (Updates a hypervisor capabilities.)
</div>
</td></tr><tr><td align="left">
<div class="para">
listHypervisorCapabilities (Lists all hypervisor capabilities.)
</div>
</td><td align="left">
<div class="para">
createPhysicalNetwork (Creates a physical network)
</div>
</td><td align="left">
<div class="para">
deletePhysicalNetwork (Deletes a Physical Network.)
</div>
</td></tr><tr><td align="left">
<div class="para">
listPhysicalNetworks (Lists physical networks)
</div>
</td><td align="left">
<div class="para">
updatePhysicalNetwork (Updates a physical network)
</div>
</td><td align="left">
<div class="para">
listSupportedNetworkServices (Lists all network services provided by CloudStack or for the given Provider.)
</div>
</td></tr><tr><td align="left">
<div class="para">
addNetworkServiceProvider (Adds a network serviceProvider to a physical network)
</div>
</td><td align="left">
<div class="para">
deleteNetworkServiceProvider (Deletes a Network Service Provider.)
</div>
</td><td align="left">
<div class="para">
listNetworkServiceProviders (Lists network serviceproviders for a given physical network.)
</div>
</td></tr><tr><td align="left">
<div class="para">
updateNetworkServiceProvider (Updates a network serviceProvider of a physical network)
</div>
</td><td align="left">
<div class="para">
addTrafficType (Adds traffic type to a physical network)
</div>
</td><td align="left">
<div class="para">
deleteTrafficType (Deletes traffic type of a physical network)
</div>
</td></tr><tr><td align="left">
<div class="para">
listTrafficTypes (Lists traffic types of a given physical network.)
</div>
</td><td align="left">
<div class="para">
updateTrafficType (Updates traffic type of a physical network)
</div>
</td><td align="left">
<div class="para">
listTrafficTypeImplementors (Lists implementors of implementor of a network traffic type or implementors of all network traffic types)
</div>
</td></tr><tr><td align="left">
<div class="para">
createStorageNetworkIpRange (Creates a Storage network IP range.)
</div>
</td><td align="left">
<div class="para">
deleteStorageNetworkIpRange (Deletes a storage network IP Range.)
</div>
</td><td align="left">
<div class="para">
listStorageNetworkIpRange (List a storage network IP range.)
</div>
</td></tr><tr><td align="left">
<div class="para">
updateStorageNetworkIpRange (Update a Storage network IP range, only allowed when no IPs in this range have been allocated.)
</div>
</td><td align="left">
<div class="para">
listUsageTypes (List Usage Types)
</div>
</td><td align="left">
<div class="para">
addF5LoadBalancer (Adds a F5 BigIP load balancer device)
</div>
</td></tr><tr><td align="left">
<div class="para">
configureF5LoadBalancer (configures a F5 load balancer device)
</div>
</td><td align="left">
<div class="para">
deleteF5LoadBalancer ( delete a F5 load balancer device)
</div>
</td><td align="left">
<div class="para">
listF5LoadBalancers (lists F5 load balancer devices)
</div>
</td></tr><tr><td align="left">
<div class="para">
listF5LoadBalancerNetworks (lists network that are using a F5 load balancer device)
</div>
</td><td align="left">
<div class="para">
addSrxFirewall (Adds a SRX firewall device)
</div>
</td><td align="left">
<div class="para">
deleteSrxFirewall ( delete a SRX firewall device)
</div>
</td></tr><tr><td align="left">
<div class="para">
listSrxFirewalls (lists SRX firewall devices in a physical network)
</div>
</td><td align="left">
<div class="para">
listSrxFirewallNetworks (lists network that are using SRX firewall device)
</div>
</td><td align="left">
<div class="para">
addNetscalerLoadBalancer (Adds a netscaler load balancer device)
</div>
</td></tr><tr><td align="left">
<div class="para">
deleteNetscalerLoadBalancer ( delete a netscaler load balancer device)
</div>
</td><td align="left">
<div class="para">
configureNetscalerLoadBalancer (configures a netscaler load balancer device)
</div>
</td><td align="left">
<div class="para">
listNetscalerLoadBalancers (lists netscaler load balancer devices)
</div>
</td></tr><tr><td align="left">
<div class="para">
listNetscalerLoadBalancerNetworks (lists network that are using a netscaler load balancer device)
</div>
</td><td align="left">
<div class="para">
createVirtualRouterElement (Create a virtual router element.)
</div>
</td><td align="left">
<div class="para">
configureVirtualRouterElement (Configures a virtual router element.)
</div>
</td></tr><tr><td align="left">
<div class="para">
listVirtualRouterElements (Lists all available virtual router elements.)
</div>
</td><td align="left">
<div class="para">
</div>
</td><td align="left">
<div class="para">
</div>
</td></tr></tbody></table></div></div></div><div xml:lang="en-US" class="section" id="added-error-codes" lang="en-US"><div class="titlepage"><div><div><h3 class="title" id="added-error-codes">3.2.6. Added CloudStack Error Codes</h3></div></div></div><div class="para">
You can now find the CloudStack-specific error code in the exception response for each type of exception. The following list of error codes is added to the new class named CSExceptionErrorCode. These codes are applicable in CloudStack 3.0.3 and later versions.
</div><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" width="33%" /><col align="left" class="c2" width="33%" /><col align="left" class="c3" width="33%" /></colgroup><tbody><tr><td align="left">
<div class="para">
4250 : "com.cloud.utils.exception.CloudRuntimeException"
</div>
</td><td align="left">
<div class="para">
4255 : "com.cloud.utils.exception.ExceptionUtil"
</div>
</td><td align="left">
<div class="para">
4260 : "com.cloud.utils.exception.ExecutionException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4265 : "com.cloud.utils.exception.HypervisorVersionChangedException"
</div>
</td><td align="left">
<div class="para">
4270 : "com.cloud.utils.exception.RuntimeCloudException"
</div>
</td><td align="left">
<div class="para">
4275 : "com.cloud.exception.CloudException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4280 : "com.cloud.exception.AccountLimitException"
</div>
</td><td align="left">
<div class="para">
4285 : "com.cloud.exception.AgentUnavailableException"
</div>
</td><td align="left">
<div class="para">
4290 : "com.cloud.exception.CloudAuthenticationException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4295 : "com.cloud.exception.CloudExecutionException"
</div>
</td><td align="left">
<div class="para">
4300 : "com.cloud.exception.ConcurrentOperationException"
</div>
</td><td align="left">
<div class="para">
4305 : "com.cloud.exception.ConflictingNetworkSettingsException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4310 : "com.cloud.exception.DiscoveredWithErrorException"
</div>
</td><td align="left">
<div class="para">
4315 : "com.cloud.exception.HAStateException"
</div>
</td><td align="left">
<div class="para">
4320 : "com.cloud.exception.InsufficientAddressCapacityException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4325 : "com.cloud.exception.InsufficientCapacityException"
</div>
</td><td align="left">
<div class="para">
4330 : "com.cloud.exception.InsufficientNetworkCapacityException"
</div>
</td><td align="left">
<div class="para">
4335 : "com.cloud.exception.InsufficientServerCapacityException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4340 : "com.cloud.exception.InsufficientStorageCapacityException"
</div>
</td><td align="left">
<div class="para">
4345 : "com.cloud.exception.InternalErrorException"
</div>
</td><td align="left">
<div class="para">
4350 : "com.cloud.exception.InvalidParameterValueException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4355 : "com.cloud.exception.ManagementServerException"
</div>
</td><td align="left">
<div class="para">
4360 : "com.cloud.exception.NetworkRuleConflictException"
</div>
</td><td align="left">
<div class="para">
4365 : "com.cloud.exception.PermissionDeniedException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4370 : "com.cloud.exception.ResourceAllocationException"
</div>
</td><td align="left">
<div class="para">
4375 : "com.cloud.exception.ResourceInUseException"
</div>
</td><td align="left">
<div class="para">
4380 : "com.cloud.exception.ResourceUnavailableException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4385 : "com.cloud.exception.StorageUnavailableException"
</div>
</td><td align="left">
<div class="para">
4390 : "com.cloud.exception.UnsupportedServiceException"
</div>
</td><td align="left">
<div class="para">
4395 : "com.cloud.exception.VirtualMachineMigrationException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4400 : "com.cloud.exception.AccountLimitException"
</div>
</td><td align="left">
<div class="para">
4405 : "com.cloud.exception.AgentUnavailableException"
</div>
</td><td align="left">
<div class="para">
4410 : "com.cloud.exception.CloudAuthenticationException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4415 : "com.cloud.exception.CloudException"
</div>
</td><td align="left">
<div class="para">
4420 : "com.cloud.exception.CloudExecutionException"
</div>
</td><td align="left">
<div class="para">
4425 : "com.cloud.exception.ConcurrentOperationException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4430 : "com.cloud.exception.ConflictingNetworkSettingsException"
</div>
</td><td align="left">
<div class="para">
4435 : "com.cloud.exception.ConnectionException"
</div>
</td><td align="left">
<div class="para">
4440 : "com.cloud.exception.DiscoveredWithErrorException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4445 : "com.cloud.exception.DiscoveryException"
</div>
</td><td align="left">
<div class="para">
4450 : "com.cloud.exception.HAStateException"
</div>
</td><td align="left">
<div class="para">
4455 : "com.cloud.exception.InsufficientAddressCapacityException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4460 : "com.cloud.exception.InsufficientCapacityException"
</div>
</td><td align="left">
<div class="para">
4465 : "com.cloud.exception.InsufficientNetworkCapacityException"
</div>
</td><td align="left">
<div class="para">
4470 : "com.cloud.exception.InsufficientServerCapacityException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4475 : "com.cloud.exception.InsufficientStorageCapacityException"
</div>
</td><td align="left">
<div class="para">
4480 : "com.cloud.exception.InsufficientVirtualNetworkCapcityException"
</div>
</td><td align="left">
<div class="para">
4485 : "com.cloud.exception.InternalErrorException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4490 : "com.cloud.exception.InvalidParameterValueException"
</div>
</td><td align="left">
<div class="para">
4495 : "com.cloud.exception.ManagementServerException"
</div>
</td><td align="left">
<div class="para">
4500 : "com.cloud.exception.NetworkRuleConflictException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4505 : "com.cloud.exception.PermissionDeniedException"
</div>
</td><td align="left">
<div class="para">
4510 : "com.cloud.exception.ResourceAllocationException"
</div>
</td><td align="left">
<div class="para">
4515 : "com.cloud.exception.ResourceInUseException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4520 : "com.cloud.exception.ResourceUnavailableException"
</div>
</td><td align="left">
<div class="para">
4525 : "com.cloud.exception.StorageUnavailableException"
</div>
</td><td align="left">
<div class="para">
4530 : "com.cloud.exception.UnsupportedServiceException"
</div>
</td></tr><tr><td align="left">
<div class="para">
4535 : "com.cloud.exception.VirtualMachineMigrationException"
</div>
</td><td align="left">
<div class="para">
9999 : "com.cloud.api.ServerApiException"
</div>
</td><td align="left">
<div class="para">
</div>
</td></tr></tbody></table></div></div></div><ul class="docnav"><li class="previous"><a accesskey="p" href="whats-new-in-api-4.0.html"><strong>Prev</strong>3.1. What's New in the API for 4.0</a></li><li class="up"><a accesskey="u" href="#"><strong>Up</strong></a></li><li class="home"><a accesskey="h" href="index.html"><strong>Home</strong></a></li><li class="next"><a accesskey="n" href="api-calls.html"><strong>Next</strong>Chapter 4. Calling the CloudStack API</a></li></ul></body></html>