You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by wi...@apache.org on 2013/09/16 11:10:59 UTC
[01/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Updated Branches:
refs/heads/kvm-vnc-listen 389086057 -> 895c51d0b
CLOUDSTACK-4619: UI > Infrastructure > zone > Using listApis to check existence of listVmwareDcs API command will show an error in the log when listVmwareDcs API command doesn't exist (in oss build).
So, still use listClusters to determine the existence of listVmwareDcs API command.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/771b8377
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/771b8377
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/771b8377
Branch: refs/heads/kvm-vnc-listen
Commit: 771b8377fd61bb96f81a0d9bc35cd22de38370f5
Parents: 1acec83
Author: Jessica Wang <je...@apache.org>
Authored: Mon Sep 9 14:00:26 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Mon Sep 9 14:02:23 2013 -0700
----------------------------------------------------------------------
ui/scripts/system.js | 55 +++++++++++++++++++++++++++--------------------
1 file changed, 32 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/771b8377/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index d677a49..3f5a5d4 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -6096,30 +6096,39 @@
});
$.ajax({
- url: createURL('listApis'),
+ url: createURL('listClusters'),
data: {
- name: 'listVmwareDcs'
- },
- async: false,
- success: function(json) {
- $.ajax({
- url: createURL('listVmwareDcs'), //listVmwareDcs API exists in only non-oss bild
- data: {
- zoneid: args.context.physicalResources[0].id
- },
- async: false,
- success: function(json) { //e.g. json == { "listvmwaredcsresponse" { "count":1 ,"VMwareDC" [ {"id":"c3c2562d-65e9-4fc7-92e2-773c2efe8f37","zoneid":1,"name":"datacenter","vcenter":"10.10.20.20"} ] } }
- var vmwaredcs = json.listvmwaredcsresponse.VMwareDC;
- if (vmwaredcs != null) {
- selectedZoneObj.vmwaredcName = vmwaredcs[0].name;
- selectedZoneObj.vmwaredcVcenter = vmwaredcs[0].vcenter;
- selectedZoneObj.vmwaredcId = vmwaredcs[0].id;
- }
- }
- });
- },
- error: function(XMLHttpResponse) {} //suppress error dialog by overriding default error handling: cloudStack.dialog.notice({ message: parseXMLHttpResponse(XMLHttpResponse)});
- });
+ zoneid: args.context.physicalResources[0].id
+ },
+ async: false,
+ success: function(json) {
+ var clusters = json.listclustersresponse.cluster;
+ if (clusters != null) {
+ for (var i = 0; i < clusters.length; i++) {
+ if (clusters[i].hypervisortype == 'VMware') {
+ $.ajax({
+ url: createURL('listVmwareDcs'), //listVmwareDcs API exists in only non-oss bild
+ data: {
+ zoneid: args.context.physicalResources[0].id
+ },
+ async: false,
+ success: function(json) { //e.g. json == { "listvmwaredcsresponse" { "count":1 ,"VMwareDC" [ {"id":"c3c2562d-65e9-4fc7-92e2-773c2efe8f37","zoneid":1,"name":"datacenter","vcenter":"10.10.20.20"} ] } }
+ var vmwaredcs = json.listvmwaredcsresponse.VMwareDC;
+ if (vmwaredcs != null) {
+ selectedZoneObj.vmwaredcName = vmwaredcs[0].name;
+ selectedZoneObj.vmwaredcVcenter = vmwaredcs[0].vcenter;
+ selectedZoneObj.vmwaredcId = vmwaredcs[0].id;
+ }
+ }
+ //, error: function(XMLHttpResponse) {} //override default error handling: cloudStack.dialog.notice({ message: parseXMLHttpResponse(XMLHttpResponse)});
+ });
+
+ break;
+ }
+ }
+ }
+ }
+ });
// for testing only (begin)
/*
selectedZoneObj.vmwaredcName = "datacenter";
[25/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
heading changes for release notes CLOUDSTACK-4245
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c377c156
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c377c156
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c377c156
Branch: refs/heads/kvm-vnc-listen
Commit: c377c1566310be777c53ad31c7bbb27f57e95461
Parents: e4660fd
Author: radhikap <ra...@citrix.com>
Authored: Thu Sep 12 18:03:39 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Thu Sep 12 18:03:39 2013 +0530
----------------------------------------------------------------------
docs/en-US/Release_Notes.xml | 2159 +++++++++++++++++++------------------
1 file changed, 1098 insertions(+), 1061 deletions(-)
----------------------------------------------------------------------
[23/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
known issues from animesh has been added, edited, updated CLOUDSTACK-4245
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e4660fd7
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e4660fd7
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e4660fd7
Branch: refs/heads/kvm-vnc-listen
Commit: e4660fd7cdfed6ead707e43f739e522e76357183
Parents: 63f8b3f
Author: radhikap <ra...@citrix.com>
Authored: Thu Sep 12 17:45:27 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Thu Sep 12 17:46:13 2013 +0530
----------------------------------------------------------------------
docs/en-US/Release_Notes.xml | 343 ++++++++++++++++++++++++++++++++++++--
1 file changed, 326 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e4660fd7/docs/en-US/Release_Notes.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/Release_Notes.xml b/docs/en-US/Release_Notes.xml
index a057665..97f776b 100644
--- a/docs/en-US/Release_Notes.xml
+++ b/docs/en-US/Release_Notes.xml
@@ -1064,11 +1064,11 @@ under the License.
from this parent template. This saves space and decreases deployment time for instances
dramatically.</para>
<para>Before this release, a NFS Primary Storage was still required for running the System
- VMs from. The reason was a so called 'patch disk' that was generated by the
- hypervisor which contained metadata for the System VM. The scripts generating this disk
- didn't support RBD and thus System VMs had to be deployed from NFS. With 4.2 instead of
- the patch disk a VirtIO serial console is used to pass meta information to System VMs.
- This enabled the deployment of System VMs on RBD Primary Storage.</para>
+ VMs from. The reason was a so called 'patch disk' that was generated by the hypervisor
+ which contained metadata for the System VM. The scripts generating this disk didn't
+ support RBD and thus System VMs had to be deployed from NFS. With 4.2 instead of the patch
+ disk a VirtIO serial console is used to pass meta information to System VMs. This enabled
+ the deployment of System VMs on RBD Primary Storage.</para>
</section>
</section>
<section id="issues-fixed-4.2">
@@ -1223,7 +1223,7 @@ under the License.
<informaltable>
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colwidth="1.0*" colname="1" colnum="1"/>
- <colspec colwidth="2.0*" colname="2" colnum="2"/>
+ <colspec colwidth="4.17*" colname="2" colnum="2"/>
<thead>
<row>
<entry>
@@ -1237,10 +1237,10 @@ under the License.
<tbody>
<row>
<entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-2709"
- >CLOUDSTACK-2709</ulink></para></entry>
+ >CLOUDSTACK-3466</ulink></para></entry>
<entry>
<para>VM Migration across VMware clusters which are added with different switches
- (Standard Swith,Vmware DVS, Cisco Nexus 1000v) is not supported..</para>
+ (Standard Switch,Vmware DVS, Cisco Nexus 1000v) is not supported.</para>
</entry>
</row>
<row>
@@ -1248,7 +1248,7 @@ under the License.
>CLOUDSTACK-4207</ulink></para></entry>
<entry>
<para>The following exception is observed when the Management Server is started
- after upgrade from any older versions to &PRODUCT; 4.2.</para>
+ after the upgrade from any older versions to &PRODUCT; 4.2.</para>
<para><code>jsonParseException: The JsonDeserializer
com.cloud.agent.transport.ArrayTypeAdaptor@2426e26f failed to deserialize json
object</code></para>
@@ -1261,17 +1261,17 @@ under the License.
<entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-2709"
>CLOUDSTACK-2709</ulink></para></entry>
<entry>
- <para>Egress rules are are not supported on shared networks. </para>
+ <para>Egress rules are not supported on Shared networks. </para>
</entry>
</row>
<row>
<entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-1747"
>CLOUDSTACK-1747</ulink></para></entry>
- <entry><para>mvn deploydb only creates 4.0 DB, not 4.2</para>
- <para>Due to tooling changes between 4.2 and 4.2, CloudStack's database is created
+ <entry><para>The mvn deploydb command creates only 4.0 database, not 4.2 database.</para>
+ <para>Due to tooling changes between 4.0 and 4.2, &PRODUCT; database is created by
using the 4.0 schema and updated to the 4.2 schema when the management server
- starts for the first time. It's OK to see the same schema if the management server
- has not started yet.</para>
+ starts for the first time. Neglect the same schema if the management server has
+ not started yet.</para>
</entry>
</row>
<row>
@@ -1280,8 +1280,9 @@ under the License.
>CLOUDSTACK-1306</ulink></para>
</entry>
<entry>
- <para>Better Error message when trying to deploy Vm by passing static Ipv4 addresses
- that are assigned to another VM/IP4 address is outside the iprange.</para>
+ <para>Enhance the error message that is displayed when trying to deploy a VM by
+ passing the static IPv4 addresses that are assigned to another VM or an IPv4
+ address that is outside the IP range.</para>
</entry>
</row>
<row>
@@ -1290,7 +1291,8 @@ under the License.
>CLOUDSTACK-1236</ulink></para>
</entry>
<entry>
- <para>Warning while adding Xen 6.1 host [Unable to create local link network]</para>
+ <para>Warning while adding a XenSever 6.1 host. The warning displayed is Unable to
+ create local link network.</para>
</entry>
</row>
<row>
@@ -1396,6 +1398,313 @@ under the License.
<para>console proxy does not support any keymaps besides us, jp</para>
</entry>
</row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4645"
+ >CLOUDSTACK-4645</ulink></para></entry>
+ <entry><para>There is no upgrade path from 4.1.1 to 4.2.0.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4641"
+ >CLOUDSTACK-4641</ulink></para></entry>
+ <entry><para>Create volume form snapshot command times out exactly after 1 hour in
+ case of KVM hosts.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4621"
+ >CLOUDSTACK-4621</ulink></para></entry>
+ <entry><para>Changing the management server's Ethernet interface or MAC address leaves the system in
+ unstable state.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4615"
+ >CLOUDSTACK-4615</ulink></para></entry>
+ <entry><para>(Baremetal) Baremetal agent is missing in the installer.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4598"
+ >CLOUDSTACK-4598</ulink></para></entry>
+ <entry><para>Long delays during deploying a VM; both network and deployment planner are delayed.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4596"
+ >CLOUDSTACK-4596</ulink></para></entry>
+ <entry><para>The same IP range is allowed to be defined in different VLANs across public and portable
+ ranges.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4588"
+ >CLOUDSTACK-4588</ulink></para></entry>
+ <entry><para>(VMware) VM deployment failed while creating a volume with null pointer exception.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4578"
+ >CLOUDSTACK-4578</ulink></para></entry>
+ <entry><para>(VMware) SSVM is not getting created if one host is down in a cluster.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4551"
+ >CLOUDSTACK-4551</ulink></para></entry>
+ <entry><para>Migrating the data volume from NFS to local storage does not change the underlying disk
+ offering.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4550"
+ >CLOUDSTACK-4550</ulink></para></entry>
+ <entry><para>Migration does not work in the case of bridge naming while upgrading KVM agents to version
+ 4.2.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4549"
+ >CLOUDSTACK-4549</ulink></para></entry>
+ <entry><para>Deploying VMs from template fails if the template is created from a snapshot.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4540"
+ >CLOUDSTACK-4540</ulink></para></entry>
+ <entry><para>(VMware) When deploying 30 parallel VMs , 16 VMs fails to get deployed due to the following
+ error: "VmDataCommand failed due to Exception: java.lang.Exception Message: Timed
+ out in waiting SSH execution result".</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4506"
+ >CLOUDSTACK-4506</ulink></para></entry>
+ <entry><para>In a mixed hypervisor setup, destroying a VM whose host has been removed, throws a null
+ pointer exception. The Root volume of that VM also is not deleted from the primary
+ memory.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4442"
+ >CLOUDSTACK-4442</ulink></para></entry>
+ <entry><para>Source NAT not applied when network starts up.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4405"
+ >CLOUDSTACK-4405</ulink></para></entry>
+ <entry><para>(KVM) Migration between existing hosts and new hosts fails.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4402"
+ >CLOUDSTACK-4402</ulink></para></entry>
+ <entry><para>No options to delete the primary storage if the last host with which it was associated is
+ already removed.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4366"
+ >CLOUDSTACK-4366</ulink></para></entry>
+ <entry><para>(Ubuntu) Key translation fails for the Japanese keyboard for the Menu key and Caps Lock
+ buttons.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4351"
+ >CLOUDSTACK-4351</ulink></para></entry>
+ <entry><para>Host/Hypervisor System Requirements has misleading or premature note in the
+ documentation.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4348"
+ >CLOUDSTACK-4348</ulink></para></entry>
+ <entry><para>Regression truncation issues occurs when moving the cursor to the "plus" buttons.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4300"
+ >CLOUDSTACK-4300</ulink></para></entry>
+ <entry><para>(KVM) System VMs are not coming up after 2.2.14 to 4.2 upgrade.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4292"
+ >CLOUDSTACK-4292</ulink></para></entry>
+ <entry><para>The destroyedvm API failed with ArrayIndexexception while expunging.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4247"
+ >CLOUDSTACK-4247</ulink></para></entry>
+ <entry><para>(VMWARE) Network read and write statistics always returns zero.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4224"
+ >CLOUDSTACK-4224</ulink></para></entry>
+ <entry><para>Deleting UCS returns unknown API.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4220"
+ >CLOUDSTACK-4220</ulink></para></entry>
+ <entry><para>From 3.0.6 to 4.2 upgrade, Add VMWare DataCenter button is provided for legacy zones.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4201"
+ >CLOUDSTACK-4201</ulink></para></entry>
+ <entry><para>The listServiceOfferings API does not take virtualmachineid parameter of SystemVM to return
+ the Service Offerings available for the VM to change a Service Offering.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4200"
+ >CLOUDSTACK-4200</ulink></para></entry>
+ <entry><para>The listSystemVMs API and listRouters API fail to return hypervisor property.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4148"
+ >CLOUDSTACK-4148</ulink></para></entry>
+ <entry><para>The usage statistics are not triggered for Shared network.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4139"
+ >CLOUDSTACK-4139</ulink></para></entry>
+ <entry><para>(VMWARE) Resizing the volumes fails if they are created from snapshot.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4137"
+ >CLOUDSTACK-4137</ulink></para></entry>
+ <entry><para>(KVM): After removing a cluster, manage cluster will not bring KVM hosts to UP state.
+ Manually restart the cloud-agent on KVM hosts.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4128"
+ >CLOUDSTACK-4128</ulink></para></entry>
+ <entry><para>The System VMs start up does not check for existence of staging secondary storage in a
+ zone.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4099"
+ >CLOUDSTACK-4099</ulink></para></entry>
+ <entry><para>Update the systemvm templates in DevCloud2.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4095"
+ >CLOUDSTACK-4095</ulink></para></entry>
+ <entry><para>Region ID is displayed within the Database Transaction code.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4072"
+ >CLOUDSTACK-4072</ulink></para></entry>
+ <entry><para>The mysql-connector-java rpm is required while upgrading from 2.2.14 to 4.2.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4036"
+ >CLOUDSTACK-4036</ulink></para></entry>
+ <entry><para>The UI remains in processing state and the queryAsyncJobResult is being called repeatedly for
+ the scaleSystemVm API.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-4016"
+ >CLOUDSTACK-4016</ulink></para></entry>
+ <entry><para>The listPublicIpAddresses lists the portable IP that was already transferred to a different
+ Isolated network.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3968"
+ >CLOUDSTACK-3968</ulink></para></entry>
+ <entry><para>Distributed Port groups are not deleted when guest networks are removed. The user account of
+ this network is removed from &PRODUCT;</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3967"
+ >CLOUDSTACK-3967</ulink></para></entry>
+ <entry><para>No support for usage statistics collection at the portable IP level</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3953"
+ >CLOUDSTACK-3953</ulink></para></entry>
+ <entry><para>The usage statistics are not collected for GSLB rules.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3911"
+ >CLOUDSTACK-3911</ulink></para></entry>
+ <entry><para>No check available while adding public range in a zone to see whether the same VLAN exists in
+ a portable IP range.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3888"
+ >CLOUDSTACK-3888</ulink></para></entry>
+ <entry><para>The UI does not return the mode (Strict/Preferred) when listing the ServiceOffering that uses
+ ImplicitDedicationPlanner.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3808"
+ >CLOUDSTACK-3808</ulink></para></entry>
+ <entry><para>Attaching volumes does not work when root is at the zone-level primary store and data at the
+ cluster level or host level store.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3791"
+ >CLOUDSTACK-3791</ulink></para></entry>
+ <entry><para>Download template fails with a null pointer exception.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3788"
+ >CLOUDSTACK-3788</ulink></para></entry>
+ <entry><para>The weekly Snapshot is stuck in Allocated State.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3765"
+ >CLOUDSTACK-3765</ulink></para></entry>
+ <entry><para>Upgrading CloudPlatform 4.2 build on centos5.5 does not work.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3737"
+ >CLOUDSTACK-3737</ulink></para></entry>
+ <entry><para>Uploaded volume is not getting deleted from secondary storage after attaching it to a guest
+ VM.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3658"
+ >CLOUDSTACK-3658</ulink></para></entry>
+ <entry><para>Several old object storage tables and columns are deprecated as a part of 4.1 to 4.2 database
+ upgrade.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3627"
+ >CLOUDSTACK-3627</ulink></para></entry>
+ <entry><para>Public IP interface (eth2) is not getting configured with Redundant virtual router. The State
+ is FAULT.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3608"
+ >CLOUDSTACK-3608</ulink></para></entry>
+ <entry><para>The guest_os_hypervisor table in the database has repeated mappings of hypervisor and guest
+ OS.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3583"
+ >CLOUDSTACK-3583</ulink></para></entry>
+ <entry><para>Stopping the Management server does not remove the PID.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3565"
+ >CLOUDSTACK-3565</ulink></para></entry>
+ <entry><para>Restarting libvirtd service leads to destroying the storage pool.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3243"
+ >CLOUDSTACK-3243</ulink></para></entry>
+ <entry><para>Wrong NFS mount point is given in the documentation.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3138"
+ >CLOUDSTACK-3138</ulink></para></entry>
+ <entry><para>Flaws in the documentation for the upgrade from 3.0.2 to 4.1.0.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-2791"
+ >CLOUDSTACK-2791</ulink></para></entry>
+ <entry><para>Installation instruction is wrong.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-1986"
+ >CLOUDSTACK-1986</ulink></para></entry>
+ <entry><para>Key translation fails for the following Japanese keyboard keys: ¥_,\ |, Muhenkan, Henkan,
+ Hiragana/Katakana, Kanji Key, and Caps Lock.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-1775"
+ >CLOUDSTACK-1775</ulink></para></entry>
+ <entry><para>Events related to User/Domain/Account are not being generated expect for the
+ USER-DISABLE,DOMAIN-DELETE and ACCOUNT.DISABLE events.</para></entry>
+ </row>
+ <row>
+ <entry><para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-732"
+ >CLOUDSTACK-732</ulink></para></entry>
+ <entry><para>KVM snapshot is not supported.</para></entry>
+ </row>
</tbody>
</tgroup>
</informaltable>
[14/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4534:[object_store_refactor] Deleting uploaded volume is not
deleting the volume from backend.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a20097b9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a20097b9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a20097b9
Branch: refs/heads/kvm-vnc-listen
Commit: a20097b967bbe5bba5ee704d03c808c2a54b5268
Parents: e958f22
Author: Min Chen <mi...@citrix.com>
Authored: Wed Sep 11 10:10:46 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Wed Sep 11 10:25:57 2013 -0700
----------------------------------------------------------------------
.../apache/cloudstack/storage/volume/VolumeServiceImpl.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a20097b9/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index b40900b..7b4047a 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -566,12 +566,12 @@ public class VolumeServiceImpl implements VolumeService {
@Override
@DB
public boolean destroyVolume(long volumeId) throws ConcurrentOperationException {
-
+ // mark volume entry in volumes table as destroy state
VolumeInfo vol = volFactory.getVolume(volumeId);
- vol.processEvent(Event.DestroyRequested);
+ vol.stateTransit(Volume.Event.DestroyRequested);
snapshotMgr.deletePoliciesForVolume(volumeId);
- vol.processEvent(Event.OperationSuccessed);
+ vol.stateTransit(Volume.Event.OperationSucceeded);
return true;
}
[28/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Signed-off-by: venkataswamybabu budumuru <ve...@citrix.com>
Corrected Indentation issues.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2ea66124
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2ea66124
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2ea66124
Branch: refs/heads/kvm-vnc-listen
Commit: 2ea66124f224eab2fb48b5e62005358726e9e12f
Parents: 4356ecc
Author: venkataswamybabu budumuru <ve...@citrix.com>
Authored: Thu Sep 12 18:33:41 2013 +0530
Committer: venkataswamybabu budumuru <ve...@citrix.com>
Committed: Thu Sep 12 18:33:41 2013 +0530
----------------------------------------------------------------------
test/integration/component/test_shared_networks.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ea66124/test/integration/component/test_shared_networks.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_shared_networks.py b/test/integration/component/test_shared_networks.py
index a1aeca8..88bb018 100644
--- a/test/integration/component/test_shared_networks.py
+++ b/test/integration/component/test_shared_networks.py
@@ -1710,7 +1710,7 @@ class TestSharedNetworks(cloudstackTestCase):
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
self.fail("Virtual machine ip should be from the ip range assigned to network created.")
- @unittest.skip("skipped - This is a redundant case and also this is causing issue for rest fo the cases ")
+ @unittest.skip("skipped - This is a redundant case and also this is causing issue for rest fo the cases ")
@attr(tags=["advanced", "advancedns"])
def test_createSharedNetwork_usedVlan(self):
""" Test Shared Network with used vlan 01 """
[36/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
fix different type issue in write_rule_log_for_vm in security_group.py
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3f42601c
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3f42601c
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3f42601c
Branch: refs/heads/kvm-vnc-listen
Commit: 3f42601c6d179f8d8cae41769205e7399370c126
Parents: 83d3f7d
Author: Wei Zhou <w....@leaseweb.com>
Authored: Fri Sep 13 12:02:24 2013 +0200
Committer: Wei Zhou <w....@leaseweb.com>
Committed: Fri Sep 13 12:02:24 2013 +0200
----------------------------------------------------------------------
scripts/vm/network/security_group.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3f42601c/scripts/vm/network/security_group.py
----------------------------------------------------------------------
diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py
index 085a7f8..0e0fafb 100755
--- a/scripts/vm/network/security_group.py
+++ b/scripts/vm/network/security_group.py
@@ -752,7 +752,7 @@ def write_rule_log_for_vm(vmName, vmID, vmIP, domID, signature, seqno):
logfilename = logpath + vm_name + ".log"
logging.debug("Writing log to " + logfilename)
logf = open(logfilename, 'w')
- output = ','.join([vmName, vmID, vmIP, domID, signature, seqno])
+ output = ','.join([vmName, vmID, vmIP, str(domID), signature, seqno])
result = True
try:
logf.write(output)
@@ -937,7 +937,7 @@ def getvmId(vmName):
conn.close()
- return str(dom.ID())
+ return dom.ID()
def addFWFramework(brname):
try:
[09/50] [abbrv] new features section updated,
api section added CLOUDSTACK-4245
Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b12f3d6b/docs/en-US/Release_Notes.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/Release_Notes.xml b/docs/en-US/Release_Notes.xml
index bd51b61..a057665 100644
--- a/docs/en-US/Release_Notes.xml
+++ b/docs/en-US/Release_Notes.xml
@@ -25,7 +25,7 @@ under the License.
<title>Welcome to &PRODUCT; 4.2</title>
<para>Welcome to the 4.2.0 release of &PRODUCT;, the second major release from the Apache
CloudStack project since its graduation from the Apache Incubator. &PRODUCT; 4.2 includes more
- than 50 new features and enhancements. The focus of the release is on three major
+ than 70 new features and enhancements. The focus of the release is on three major
areas:</para>
<itemizedlist>
<listitem>
@@ -55,208 +55,1021 @@ under the License.
<para>If you find any errors or problems in this guide, please see <xref linkend="feedback"/>.
We hope you enjoy working with &PRODUCT;!</para>
</chapter>
- <chapter id="version-4.2">
- <title>Version 4.2.0</title>
- <section id="what-new-in-4.2">
- <title>What’s New in 4.2</title>
- <para>Apache CloudStack 4.2.0 includes many new features. This section covers the most
- prominent new features and changes.</para>
- <section id="windows-8">
- <title>Windows 8 and Windows Server as VM Guest OS</title>
- <para>Supported on XenServer, VMware, and KVM.</para>
- <para>Windows 8 and Windows Server 2012 can now be used as OS types on guest virtual
- machines. The OS would be made available the same as any other, by uploading an ISO or a
- template. The instructions for uploading ISOs and templates are given in the
- Administrator's Guide.</para>
+ <chapter id="whats-new-in-4.2">
+ <title>What's New in 4.2</title>
+ <para>&PRODUCT; 4.2 includes the following new features.</para>
+ <section id="workloads">
+ <title>Features to Support Heterogeneous Workloads</title>
+ <para>The following new features help &PRODUCT; 4.2 better support both legacy and cloud-era
+ style zones.</para>
+ <section id="regions">
+ <title>Regions</title>
+ <para>To increase reliability of the cloud, you can optionally group resources into
+ geographic regions. A region is the largest available organizational unit within a cloud
+ deployment. A region is made up of several availability zones, where each zone is
+ equivalent to a datacenter. Each region is controlled by its own cluster of Management
+ Servers, running in one of the zones. The zones in a region are typically located in close
+ geographical proximity. Regions are a useful technique for providing fault tolerance and
+ disaster recovery.</para>
+ <para>By grouping zones into regions, the cloud can achieve higher availability and
+ scalability. User accounts can span regions, so that users can deploy VMs in multiple,
+ widely-dispersed regions. Even if one of the regions becomes unavailable, the services are
+ still available to the end-user through VMs deployed in another region. And by grouping
+ communities of zones under their own nearby Management Servers, the latency of
+ communications within the cloud is reduced compared to managing widely-dispersed zones
+ from a single central Management Server.</para>
+ <para>Usage records can also be consolidated and tracked at the region level, creating
+ reports or invoices for each geographic region.</para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="./images/region-overview.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>region-overview.png: Nested structure of a region.</phrase>
+ </textobject>
+ </mediaobject>
+ </section>
+ <section id="object-store">
+ <title>Object Storage Plugin Architecture</title>
+ <para>Artifacts such as templates, ISOs and snapshots are kept in storage which &PRODUCT;
+ refers to as secondary storage. To improve scalability and performance, as when a number
+ of hosts access secondary storage concurrently, object storage can be used for secondary
+ storage. Object storage can also provide built-in high availability capability. When using
+ object storage, access to secondary storage data can be made available across multiple
+ zones in a region. This is a huge benefit, as it is no longer necessary to copy templates,
+ snapshots etc. across zones as would be needed in an NFS-only environment.</para>
+ <para>Object storage is provided through third-party software such as Amazon Simple Storage
+ Service (S3) or any other object storage that supports the S3 interface. These third party
+ object storages can be integrated with &PRODUCT; by writing plugin software that uses the
+ object storage plugin capability introduced in &PRODUCT; 4.2. Several new pluggable
+ service interfaces are available so that different storage providers can develop
+ vendor-specific plugins based on the well-defined contracts that can be seemlessly managed
+ by &PRODUCT;.</para>
+ </section>
+ <section id="zone-wide-primary-storage">
+ <title>Zone-Wide Primary Storage</title>
+ <para>(Supported on KVM and VMware)</para>
+ <para>In &PRODUCT; 4.2, you can provision primary storage on a per-zone basis. Data volumes
+ in the primary storage can be attached to any VM on any host in the zone.</para>
+ <para>In previous &PRODUCT; versions, each cluster had its own primary storage. Data in the
+ primary storage was directly available only to VMs within that cluster. If a VM in a
+ different cluster needed some of the data, it must be copied from one cluster to another,
+ using the zone's secondary storage as an intermediate step. This operation was
+ unnecessarily time-consuming.</para>
+ </section>
+ <section id="vmware-datacenter">
+ <title>VMware Datacenter Now Visible As a &PRODUCT; Zone</title>
+ <para>In order to support zone-wide functions for VMware, changes have been made so that
+ &PRODUCT; is now aware of VMware Datacenters and can map each Datacenter to a &PRODUCT;
+ zone. Previously, &PRODUCT; was only aware of VMware Clusters, a smaller organizational
+ unit than Datacenters. This implies that a single &PRODUCT; zone could possibly contain
+ clusters from different VMware Datacenters. In order for zone-wide functions, such as
+ zone-wide primary storage, to work for VMware hosts, &PRODUCT; has to make sure that a
+ zone contains only a single VMware Datacenter. Therefore, when you are creating a new
+ &PRODUCT; zone, you will now be able to select a VMware Datacenter for the zone. If you
+ are provisioning multiple VMware Datacenters, each one will be set up as a single zone in
+ &PRODUCT;. </para>
<note>
- <para><emphasis role="bold">Limitation:</emphasis> When used with VMware hosts, this
- feature works only for the following versions: vSphere ESXi 5.1 and ESXi 5.0 Patch
- 4.</para>
+ <para>If you are upgrading from a previous &PRODUCT; version, and your existing deployment
+ contains a zone with clusters from multiple VMware Datacenters, that zone will not be
+ forcibly migrated to the new model. It will continue to function as before. However, any
+ new zone-wide operations, such as zone-wide primary storage, will not be available in
+ that zone.</para>
</note>
+ <para/>
+ </section>
+ </section>
+ <section id="third-party-plugin">
+ <title>Third-Party UI Plugin Framework</title>
+ <para>Using the new third-party plugin framework, you can write and install extensions to
+ &PRODUCT;. The installed and enabled plugins will appear in the UI alongside the
+ Citrix-provided features.</para>
+ <para>The basic procedure for adding a UI plugin is explained in the Developer Guide. In
+ summary, the plugin developer creates the plugin code itself (in Javascript), a thumbnail
+ image, the plugin listing, and a CSS file. The &PRODUCT; administrator adds the folder
+ containing the plugin code under the &PRODUCT; PLUGINS folder and adds the plugin name to a
+ configuration file (plugins.js).</para>
+ <para>The next time the user refreshes the UI in the browser, the plugin will appear under the
+ Plugins button in the left navigation bar.</para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="./images/plugin4.jpg"/>
+ </imageobject>
+ <textobject>
+ <phrase>plugin4.jpg: The plugin appears in the UI</phrase>
+ </textobject>
+ </mediaobject>
+ </section>
+ <section id="networking">
+ <title>Networking Enhancements</title>
+ <para>The following new features provide additional networking functionality in &PRODUCT;
+ 4.2.</para>
+ <section id="ipv6">
+ <title>IPv6 (Technical Preview)</title>
+ <para>&PRODUCT; 4.2 introduces initial support for IPv6. This feature is provided as a
+ technical preview only. Full support is planned for a future release.</para>
</section>
<section id="portable-ip">
<title>Portable IPs</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-3236"
- >CLOUDSTACK-3236</ulink>:Portable IPs in &PRODUCT; are nothing but elastic IPs that can
- be transferred across geographically separated zones. As an administrator, you can
- provision a pool of portable IPs at region level and are available for user consumption.
- The users can acquire portable IPs if admin has provisioned portable public IPs at the
- region level they are part of. These IPs can be used for any service within an advanced
- zone. You can also use portable IPs for EIP service in Basic zones. Additionally, a
- portable IP can be transferred from one network to another network.</para>
+ <para>Portable IPs in &PRODUCT; are elastic IPs that can be transferred across
+ geographically separated zones. As an administrator, you can provision a pool of portable
+ IPs at region level and are available for user consumption. The users can acquire portable
+ IPs if admin has provisioned portable public IPs at the region level they are part of.
+ These IPs can be used for any service within an advanced zone. You can also use portable
+ IPs for EIP service in Basic zones. Additionally, a portable IP can be transferred from
+ one network to another network.</para>
</section>
<section id="ntier-apps">
<title>N-Tier Applications</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-770"
- >CLOUDSTACK-770</ulink>:In &PRODUCT; 3.0.6, a functionality was added to allow users to
- create a multi-tier application connected to a single instance of a Virtual Router that
- supports inter-VLAN routing. Such a multi-tier application is called a virtual private
- cloud (VPC). Users were also able to connect their multi-tier applications to a private
- Gateway or a Site-to-Site VPN tunnel and route certain traffic to those gateways. For
- &PRODUCT; 4.2, additional features are implemented to enhance VPC applications.</para>
+ <para>In &PRODUCT; 3.0.6, a functionality was added to allow users to create a multi-tier
+ application connected to a single instance of a Virtual Router that supports inter-VLAN
+ routing. Such a multi-tier application is called a virtual private cloud (VPC). Users were
+ also able to connect their multi-tier applications to a private Gateway or a Site-to-Site
+ VPN tunnel and route certain traffic to those gateways. For &PRODUCT; 4.2, additional
+ features are implemented to enhance VPC applications.</para>
<itemizedlist>
<listitem>
- <para>Internal Load Balancing between VPC tiers</para>
+ <para><xref linkend="kvm-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="deploy-vm-vpc"/></para>
</listitem>
<listitem>
- <para>Source NAT and ACL support on private gateways</para>
+ <para><xref linkend="add-loadbalancer-rule-vpc"/></para>
</listitem>
<listitem>
- <para>Multiple private gateway support</para>
+ <para><xref linkend="current-lb-vpc"/></para>
</listitem>
<listitem>
- <para>Support for ACL deny rules</para>
+ <para><xref linkend="across-tiers-lb"/></para>
</listitem>
<listitem>
- <para>ACL support on all layer 4 protocols</para>
+ <para><xref linkend="ns-support"/></para>
</listitem>
<listitem>
- <para>Support up to 8 VPN Gateways</para>
+ <para><xref linkend="configure-acl"/></para>
</listitem>
<listitem>
- <para>Support for blacklisting routes</para>
+ <para><xref linkend="acl-private-gateway"/></para>
</listitem>
<listitem>
- <para>NetScaler support for VPC load balancing</para>
+ <para><xref linkend="allow-acl"/></para>
</listitem>
<listitem>
- <para>Support for KVM hypervisor</para>
+ <para><xref linkend="acl-deny"/></para>
</listitem>
<listitem>
- <para>Support for the ability to simultaneously deploy an instance on a VPC Tier and one
- or more Shared Networks</para>
+ <para><xref linkend="add-vm-tier-sharednw"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="add-gateway-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="sourcenat-private-gateway"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="eightvpn"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="static-route"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="blacklist-route"/></para>
</listitem>
</itemizedlist>
+ <section id="kvm-vpc">
+ <title>Support for KVM</title>
+ <para>VPC is now supported on KVM hypervisors.</para>
+ </section>
+ <section id="deploy-vm-vpc">
+ <title>Support for Simultaneously Deploying a VM on VPC and Multiple Shared
+ Networks</title>
+ <para>Support for the ability to simultaneously deploy a VM on a VPC tier and one or more
+ Shared networks is supported.</para>
+ </section>
+ <section id="add-loadbalancer-rule-vpc">
+ <title>Load Balancing Support for VPC</title>
+ <para>In a VPC, you can configure two types of load balancing—external LB and
+ internal LB. External LB is nothing but a LB rule created to redirect the traffic
+ received at a public IP of the VPC virtual router. The traffic is load balanced within a
+ tier based on your configuration. Citrix NetScaler and VPC virtual router are supported
+ for external LB. When you use internal LB service, traffic received at a tier is load
+ balanced across different VMs within that tier. For example, traffic reached at Web tier
+ is redirected to another VM in that tier. External load balancing devices are not
+ supported for internal LB. The service is provided by a internal LB VM configured on the
+ target tier.</para>
+ <section id="current-lb-vpc">
+ <title>Load Balancing Within a Tier (External LB)</title>
+ <para>A &PRODUCT; user or administrator may create load balancing rules that balance
+ traffic received at a public IP to one or more VMs that belong to a network tier that
+ provides load balancing service in a VPC. A user creates a rule, specifies an
+ algorithm, and assigns the rule to a set of VMs within a tier.</para>
+ </section>
+ <section id="across-tiers-lb">
+ <title>Load Balancing Across Tiers</title>
+ <para>&PRODUCT; supports sharing workload across different tiers within your VPC. Assume
+ that multiple tiers are set up in your environment, such as Web tier and Application
+ tier. Traffic to each tier is balanced on the VPC virtual router on the public side.
+ If you want the traffic coming from the Web tier to the Application tier to be
+ balanced, use the internal load balancing feature offered by &PRODUCT;.</para>
+ </section>
+ <section id="ns-support">
+ <title>Netscaler Support for VPC</title>
+ <para>Citrix NetScaler is supported for external LB. Certified version for this feature
+ is NetScaler 10.0 Build 74.4006.e.</para>
+ </section>
+ </section>
+ <section id="configure-acl">
+ <title>Enhanced Access Control List</title>
+ <para>Network Access Control List (ACL) on the VPC virtual router is enhanced. The network
+ ACLs can be created for the tiers only if the NetworkACL service is supported. In
+ &PRODUCT; terminology, Network ACL is a group of Network ACL items. Network ACL items
+ are nothing but numbered rules that are evaluated in order, starting with the lowest
+ numbered rule. These rules determine whether traffic is allowed in or out of any tier
+ associated with the network ACL. You need to add the Network ACL items to the Network
+ ACL, then associate the Network ACL with a tier. Network ACL is associated with a VPC
+ and can be assigned to multiple VPC tiers within a VPC. A Tier is associated with a
+ Network ACL at all the times. Each tier can be associated with only one ACL. </para>
+ <para>The default Network ACL is used when no ACL is associated. Default behavior is all
+ incoming traffic to guest networks is blocked and all outgoing traffic from guest
+ networks is allowed. Default network ACL cannot be removed or modified.</para>
+ <section id="acl-private-gateway">
+ <title>ACL on Private Gateway</title>
+ <para>The traffic on the VPC private gateway is controlled by creating both ingress and
+ egress network ACL rules. The ACLs contains both allow and deny rules. As per the
+ rule, all the ingress traffic to the private gateway interface and all the egress
+ traffic out from the private gateway interface are blocked. You can change this
+ default behaviour while creating a private gateway.</para>
+ </section>
+ <section id="allow-acl">
+ <title>Allow ACL on All Level 4 Protocols</title>
+ <para>In addition to the existing protocol support for ICMP, TCP, UDP, support for All
+ Level 4 protocols is added. The protocol numbers from 0 to 255 are supported.</para>
+ </section>
+ <section id="acl-deny">
+ <title>Support for ACL Deny Rules</title>
+ <para>In addition to the existing support for ACL Allow rules, support for ACL Deny
+ rules has been added in &PRODUCT; 4.2. As part of this, two operations are supported:
+ Number and Action. You can configure a rule, allow or deny, by using action. Use
+ Number to add a rule number.</para>
+ </section>
+ </section>
+ <section id="add-vm-tier-sharednw">
+ <title>Deploying VMs to a VPC Tier and Shared Networks</title>
+ <para>&PRODUCT; allows you to deploy VMs on a VPC tier and one or more shared networks.
+ With this feature, the VMs deployed in a multi-tier application can receive services
+ offered by a service provider over the shared network. One example of such a service is
+ monitoring service.</para>
+ </section>
+ <section id="add-gateway-vpc">
+ <title>Adding a Private Gateway to a VPC</title>
+ <para>A private gateway can be added by the root admin only. The VPC private network has
+ 1:1 relationship with the NIC of the physical network. You can configure multiple
+ private gateways to a single VPC. No gateways with duplicated VLAN and IP are allowed in
+ the same data center.</para>
+ <section id="sourcenat-private-gateway">
+ <title>Source NAT on Private Gateway</title>
+ <para>You might want to deploy multiple VPCs with the same super CIDR and guest tier
+ CIDR. Therefore, multiple guest VMs from different VPCs can have the same IPs to reach
+ a enterprise data center through the private gateway. In such cases, a NAT service
+ need to be configured on the private gateway. If Source NAT is enabled, the guest VMs
+ in VPC reaches the enterprise network via private gateway IP address by using the NAT
+ service. </para>
+ <para>The Source NAT service on a private gateway can be enabled while adding the
+ private gateway. On deletion of a private gateway, source NAT rules specific to the
+ private gateway are deleted.</para>
+ </section>
+ <section id="eightvpn">
+ <title>VPN Gateways</title>
+ <para>Support up to 8 VPN Gateways is added.</para>
+ </section>
+ <section id="static-route">
+ <title>Creating a Static Route</title>
+ <para>&PRODUCT; enables you to specify routing for the VPN connection you create. You
+ can enter one or CIDR addresses to indicate which traffic is to be routed back to the
+ gateway.</para>
+ </section>
+ <section id="blacklist-route">
+ <title>Blacklisting Routes</title>
+ <para>&PRODUCT; enables you to block a list of routes so that they are not assigned to
+ any of the VPC private gateways. Specify the list of routes that you want to blacklist
+ in the <code>blacklisted.routes</code> global parameter. Note that the parameter
+ update affects only new static route creations. If you block an existing static route,
+ it remains intact and continue functioning. You cannot add a static route if the route
+ is blacklisted for the zone. </para>
+ </section>
+ </section>
+ </section>
+ <section id="vlan-assign-isolated-nw">
+ <title>Assigning VLANs to Isolated Networks</title>
+ <para>&PRODUCT; provides you the ability to control VLAN assignment to Isolated networks.
+ You can assign a VLAN ID when a network is created, just the way it's done for Shared
+ networks.</para>
+ <para>The former behaviour also is supported — VLAN is randomly allocated to a network
+ from the VNET range of the physical network when the network turns to Implemented state.
+ The VLAN is released back to the VNET pool when the network shuts down as a part of the
+ Network Garbage Collection. The VLAN can be re-used either by the same network when it is
+ implemented again, or by any other network. On each subsequent implementation of a
+ network, a new VLAN can be assigned.</para>
+ <note>
+ <para>You cannot change a VLAN once it's assigned to the network. The VLAN remains with
+ the network for its entire life cycle.</para>
+ </note>
+ </section>
+ <section id="persistent-network">
+ <title>Persistent Networks</title>
+ <para>&PRODUCT; 4.2 supports Persistent Networks. The network that you can provision without
+ having to deploy any VMs on it is called a Persistent Network. A Persistent Network can be
+ part of a VPC or a non-VPC environment. With the addition of this feature, you will have
+ the ability to create a network in &PRODUCT; in which physical devices can be deployed
+ without having to run any VMs. Additionally, you can deploy physical devices on that
+ network. Another advantages is that you can create a VPC with a tier that consists only
+ physical devices. For example, you might create a VPC for a three-tier application, deploy
+ VMs for Web and Application tier, and use physical machines for the Database tier. Another
+ use case is that if you are providing services by using physical hardware, you can define
+ the network as persistent and therefore even if all its VMs are destroyed the services
+ will not be discontinued.</para>
</section>
<section id="vnmc-cisco">
<title>Cisco VNMC Support</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-742"
- >CLOUDSTACK-742</ulink>:&PRODUCT; supports Cisco Virtual Network Management Center
- (VNMC) on Cisco Nexus 1000v dvSwich-enabled VMware hypervisors. &PRODUCT; supports Cisco
- ASA 1000v as an external Firewall provider when integrated with Cisco VNMC. </para>
- <para>When Cisco VNMC is integrated with ASA 1000v Cloud Firewall and Cisco Nexus 1000v
- dvSwitch in &PRODUCT; you will be able to: </para>
+ <para>Cisco Virtual Network Management Center (VNMC) provides centralized multi-device and
+ policy management for Cisco Network Virtual Services. When Cisco VNMC is integrated with
+ ASA 1000v Cloud Firewall and Cisco Nexus 1000v dvSwitch in &PRODUCT; you will be able to: </para>
<itemizedlist>
<listitem>
<para>Configure Cisco ASA 1000v Firewalls</para>
</listitem>
<listitem>
<para>Create and apply security profiles that contain ACL policy sets for both ingress
- and egress traffic, connection timeout, NAT policy sets, and TCP intercept</para>
+ and egress traffic, and NAT policy sets</para>
+ </listitem>
+ </itemizedlist>
+ <para>&PRODUCT; supports Cisco VNMC on Cisco Nexus 1000v dvSwich-enabled VMware
+ hypervisors.</para>
+ </section>
+ <section id="vmware-vswitch">
+ <title>VMware vNetwork Distributed vSwitch</title>
+ <para>&PRODUCT; supports VMware vSphere Distributed Switch (VDS) for virtual network
+ configuration in a VMware vSphere environment. Each vCenter server instance can support up
+ to 128 VDSs and each VDS can manage up to 500 VMware hosts. &PRODUCT; supports configuring
+ virtual networks in a deployment with a mix of Virtual Distributed Switch, Standard
+ Virtual Switch and Nexus 1000v Virtual Switch. </para>
+ </section>
+ <section id="reserved-ip-addresses-non-csvms">
+ <title>IP Reservation in Isolated Guest Networks</title>
+ <para>In Isolated guest networks in &PRODUCT; 4.2, a part of the guest IP address space can
+ be reserved for non-&PRODUCT; VMs or physical servers. To do so, you configure a range of
+ Reserved IP addresses by specifying the CIDR when a guest network is in Implemented state.
+ The advantage of having this feature is that if your customers wish to have non-&PRODUCT;
+ controlled VMs or physical servers on the same network, they can use a part of the IP
+ address space that is primarily provided to the guest network. When IP reservation is
+ configured, the administrator can add additional VMs or physical servers that are not part
+ of &PRODUCT; to the same network and assign them the Reserved IP addresses. &PRODUCT;
+ guest VMs cannot acquire IPs from the Reserved IP Range.</para>
+ </section>
+ <section id="ip-vlan-tenant">
+ <title>Dedicated Resources: Public IP Addresses and VLANs Per Account</title>
+ <para>&PRODUCT; provides you the ability to reserve a set of public IP addresses and VLANs
+ exclusively for an account. During zone creation, you can continue to define a set of
+ VLANs and multiple public IP ranges. This feature extends the functionality to enable you
+ to dedicate a fixed set of VLANs and guest IP addresses for a tenant.</para>
+ <para>This feature provides you the following capabilities:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Reserve a VLAN range and public IP address range from an Advanced zone and assign
+ it to an account</para>
+ </listitem>
+ <listitem>
+ <para>Disassociate a VLAN and public IP address range from an account</para>
+ </listitem>
+ </itemizedlist>
+ <note>
+ <para>Ensure that you check whether the required range is available and conforms to
+ account limits. The maximum IPs per account limit cannot be superseded.</para>
+ </note>
+ </section>
+ <section id="egress-firewall">
+ <title>Enhanced Juniper SRX Support for Egress Firewall Rules</title>
+ <para>Egress firewall rules were previously supported on virtual routers, and now they are
+ also supported on Juniper SRX external networking devices.</para>
+ <para>Egress traffic originates from a private network to a public network, such as the
+ Internet. By default, the egress traffic is blocked, so no outgoing traffic is allowed
+ from a guest network to the Internet. However, you can control the egress traffic in an
+ Advanced zone by creating egress firewall rules. When an egress firewall rule is applied,
+ the traffic specific to the rule is allowed and the remaining traffic is blocked. When all
+ the firewall rules are removed the default policy, Block, is applied.</para>
+ <note>
+ <para>Egress firewall rules are not supported on Shared networks. They are supported only
+ on Isolated guest networks.</para>
+ </note>
+ </section>
+ <section id="default-egress-policy">
+ <title>Configuring the Default Egress Policy</title>
+ <para>The default egress policy for Isolated guest network can be configured by using
+ Network offering. Use the create network offering option to determine whether the default
+ policy should be block or allow all the traffic to the public network from a guest
+ network. Use this network offering to create the network. If no policy is specified, by
+ default all the traffic is allowed from the guest network that you create by using this
+ network offering.</para>
+ <para>You have two options: Allow and Deny.</para>
+ <para>If you select Allow for a network offering, by default egress traffic is allowed.
+ However, when an egress rule is configured for a guest network, rules are applied to block
+ the specified traffic and rest are allowed. If no egress rules are configured for the
+ network, egress traffic is accepted. If you select Deny for a network offering, by default
+ egress traffic for the guest network is blocked. However, when an egress rules is
+ configured for a guest network, rules are applied to allow the specified traffic. While
+ implementing a guest network, &PRODUCT; adds the firewall egress rule specific to the
+ default egress policy for the guest network.</para>
+ <para>This feature is supported only on virtual router and Juniper SRX.</para>
+ </section>
+ <section id="non-contiguous-vlan">
+ <title>Non-Contiguous VLAN Ranges</title>
+ <para>&PRODUCT; provides you with the flexibility to add non contiguous VLAN ranges to your
+ network. The administrator can either update an existing VLAN range or add multiple non
+ contiguous VLAN ranges while creating a zone. You can also use the UpdatephysicalNetwork
+ API to extend the VLAN range.</para>
+ </section>
+ <section id="pvlan">
+ <title>Isolation in Advanced Zone Using Private VLAN</title>
+ <para>Isolation of guest traffic in shared networks can be achieved by using Private VLANs
+ (PVLAN). PVLANs provide Layer 2 isolation between ports within the same VLAN. In a
+ PVLAN-enabled shared network, a user VM cannot reach other user VM though they can reach
+ the DHCP server and gateway, this would in turn allow users to control traffic within a
+ network and help them deploy multiple applications without communication between
+ application as well as prevent communication with other users’ VMs.</para>
+ <itemizedlist>
+ <listitem>
+ <para>Isolate VMs in a shared networks by using Private VLANs.</para>
+ </listitem>
+ <listitem>
+ <para>Supported on KVM, XenServer, and VMware hypervisors.</para>
+ </listitem>
+ <listitem>
+ <para>PVLAN-enabled shared network can be a part of multiple networks of a guest VM.
+ </para>
</listitem>
</itemizedlist>
- <para>Consider the following use cases before using this feature:</para>
+ <para>For further reading:</para>
<itemizedlist>
<listitem>
- <para>A Cloud administrator adds VNMC as a network element by using the admin API
- addCiscoVnmcResource after specifying the credentials</para>
+ <para><ulink
+ url="http://www.cisco.com/en/US/docs/switches/lan/catalyst3750/software/release/12.2_25_see/configuration/guide/swpvlan.html#wp1038379"
+ >Understanding Private VLANs</ulink></para>
</listitem>
<listitem>
- <para>A Cloud administrator adds ASA 1000v appliances by using the admin API
- addCiscoAsa1000vResource. You can configure one per guest network.</para>
+ <para><ulink url="http://tools.ietf.org/html/rfc5517">Cisco Systems' Private VLANs:
+ Scalable Security in a Multi-Client Environment</ulink></para>
</listitem>
<listitem>
- <para>A Cloud administrator creates an Isolated guest network offering by using ASA
- 1000v as the service provider for Firewall, Source NAT, Port Forwarding, and Static
- NAT. </para>
+ <para><ulink url="http://kb.vmware.com">Private VLAN (PVLAN) on vNetwork Distributed
+ Switch - Concept Overview (1010691)</ulink></para>
</listitem>
</itemizedlist>
</section>
- <section id="vmware-vswitch">
- <title>VMware vNetwork Distributed vSwitch</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-772"
- >CLOUDSTACK-772</ulink>:&PRODUCT; 4.2 supports VMware vSphere Distributed Switch (VDS)
- for virtual network configuration in a VMware vSphere environment. Each vCenter server
- instance can support up to 128 VDSs and each VDS can manage up to 500 VMware hosts.</para>
- <section id="about-dvswitch">
- <title>About VMware Distributed Virtual Switch</title>
- <para>VMware VDS is an aggregation of host-level virtual switches on a VMware vCenter
- server. VDS abstracts the configuration of individual virtual switches that span across
- a large number of hosts, and enables centralized provisioning, administration, and
- monitoring for your entire datacenter from a centralized interface. VDS is controlled as
- a single distributed switch at the datacenter level. So there needed a component to
- ensure that the network configurations on the source and the destination virtual switch
- are consistent and will allow the VM to operate without breaking connectivity or network
- policies. Particularly during migration of VM across hosts, the sync up among peers need
- to be taken care. However in case of distributed vSwitch during VMotion, the vCenter
- server, would update the vSwitch modules on the hosts in cluster accordingly.</para>
- </section>
- <section id="enable-dvswitch">
- <title>Enabling Virtual Distributed Switch in &PRODUCT;</title>
- <para>To make a &PRODUCT; deployment VDS enabled, set the vmware.use.dvswitch parameter to
- true by using the Global Settings page in the &PRODUCT; UI and restart the Management
- Server. Unless you enable the vmware.use.dvswitch parameter, you cannot see any UI
- options specific to VDS, and &PRODUCT; ignores the VDS-specific parameters specified in
- the AddCluster API call. Additionally, &PRODUCT; uses VDS for virtual network
- infrastructure if the value of vmware.use.dvswitch parameter is true and the value of
- vmware.use.nexus.dvswitch parameter is false.</para>
- <para>&PRODUCT; supports configuring virtual networks in a deployment with a mix of
- Virtual Distributed Switch, Standard Virtual Switch and Nexus 1000v Virtual Switch.
- </para>
- </section>
+ <section id="multiple-ip-nic">
+ <title>Configuring Multiple IP Addresses on a Single NIC</title>
+ <para>(Supported on XenServer, KVM, and VMware hypervisors)</para>
+ <para>&PRODUCT; now provides you the ability to associate multiple private IP addresses per
+ guest VM NIC. This feature is supported on all the network configurations—Basic,
+ Advanced, and VPC. Security Groups, Static NAT and Port forwarding services are supported
+ on these additional IPs. In addition to the primary IP, you can assign additional IPs to
+ the guest VM NIC. Up to 256 IP addresses are allowed per NIC.</para>
+ <para>As always, you can specify an IP from the guest subnet; if not specified, an IP is
+ automatically picked up from the guest VM subnet. You can view the IPs associated with for
+ each guest VM NICs on the UI. You can apply NAT on these additional guest IPs by using
+ firewall configuration in the &PRODUCT; UI. You must specify the NIC to which the IP
+ should be associated.</para>
+ </section>
+ <section id="multiple-ip-range">
+ <title>Adding Multiple IP Ranges</title>
+ <para>(Supported on KVM, xenServer, and VMware hypervisors)</para>
+ <para>&PRODUCT; 4.2 provides you with the flexibility to add guest IP ranges from different
+ subnets in Basic zones and security groups-enabled Advanced zones. For security
+ groups-enabled Advanced zones, it implies multiple subnets can be added to the same VLAN.
+ With the addition of this feature, you will be able to add IP address ranges from the same
+ subnet or from a different one when IP address are exhausted. This would in turn allows
+ you to employ higher number of subnets and thus reduce the address management
+ overhead.</para>
+ <para>Ensure that you manually configure the gateway of the new subnet before adding the IP
+ range. Note that &PRODUCT; supports only one gateway for a subnet; overlapping subnets are
+ not currently supported.</para>
+ <para>You can also delete IP ranges. This operation fails if an IP from the remove range is
+ in use. If the remove range contains the IP address on which the DHCP server is running,
+ &PRODUCT; acquires a new IP from the same subnet. If no IP is available in the subnet, the
+ remove operation fails.</para>
+ <note>
+ <para>The feature can only be implemented on IPv4 addresses.</para>
+ </note>
+ </section>
+ <section id="add-remove-network-vm">
+ <title>Support for Multiple Networks in VMs</title>
+ <para>(Supported on XenServer, VMware and KVM hypervisors)</para>
+ <para>&PRODUCT; 4.2 provides you the ability to add and remove multiple networks to a VM.
+ You can remove a network from a VM and add a new network. You can also change the default
+ network of a VM. With this functionality, hybrid or traditional server loads can be
+ accommodated with ease. </para>
+ <para>For adding or removing a NIC to work on VMware, ensure that vm-tools are running on
+ guest VMs.</para>
+ </section>
+ <section id="gslb">
+ <title>Global Server Load Balancing</title>
+ <para>&PRODUCT; 4.2 supports Global Server Load Balancing (GSLB) functionalities to provide
+ business continuity by load balancing traffic to an instance on active zones only in case
+ of zone failures . &PRODUCT; achieve this by extending its functionality of integrating
+ with NetScaler Application Delivery Controller (ADC), which also provides various GSLB
+ capabilities, such as disaster recovery and load balancing. The DNS redirection technique
+ is used to achieve GSLB in &PRODUCT;. In order to support this functionality, region level
+ services and service provider are introduced. A new service 'GSLB' is introduced as a
+ region level service. The GSLB service provider is introduced that will provider the GSLB
+ service. Currently, NetScaler is the supported GSLB provider in &PRODUCT;. GSLB
+ functionality works in an Active-Active data center environment. </para>
+ </section>
+ <section id="lb-on-shared-vlan">
+ <title>Enhanced Load Balancing Services Using External Provider on Shared VLANs</title>
+ <para>Network services like Firewall, Load Balancing, and NAT are now supported in shared
+ networks created in an advanced zone. In effect, the following network services shall be
+ made available to a VM in a shared network: Source NAT, Static NAT, Port Forwarding,
+ Firewall and Load balancing. Subset of these service can be chosen while creating a
+ network offering for shared networks. Services available in a shared network is defined by
+ the network offering and the service chosen in the network offering. For example, if
+ network offering for a shared network has source NAT service enabled, a public IP shall be
+ provisioned and source NAT is configured on the firewall device to provide public access
+ to the VMs on the shared network. Static NAT, Port Forwarding, Load Balancing, and
+ Firewall services shall be available only on the acquired public IPs associated with a
+ shared network.</para>
+ <para>Additionally, Netscaler and Juniper SRX firewall device can be configured inline or
+ side-by-side mode.</para>
</section>
<section id="health-check">
<title>Health Checks for Load Balanced Instances</title>
<note>
- <para>CLOUDSTACK-4243: This feature is supported only on NetScaler version 10.0 and
- beyond. The Nitro API is not compatible with NetScaler 9.3 and therefore this version is
- not supported for this feature.</para>
+ <para>This feature is supported only on NetScaler version 10.0 and beyond.</para>
</note>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-816"
- >CLOUDSTACK-816</ulink>:(NetScaler load balancer only) A load balancer rule distributes
- requests among a pool of services (a service in this context means an application running
- on a virtual machine). When creating a load balancer rule, you can specify a health check
- which will ensure that the rule forwards requests only to services that are healthy
- (running and available). This is in addition to specifying the stickiness policy,
- algorithm, and other load balancer rule options. You can configure one health check policy
- per load balancer rule.</para>
- <para>When a health check is in effect, the load balancer will stop forwarding requests to
- any resources that it has found to be unhealthy. If the resource later becomes available
+ <para>(NetScaler load balancer only) A load balancer rule distributes requests among a pool
+ of services (a service in this context means an application running on a virtual machine).
+ When creating a load balancer rule, you can specify a health check which will ensure that
+ the rule forwards requests only to services that are healthy (running and available). When
+ a health check is in effect, the load balancer will stop forwarding requests to any
+ resources that it has found to be unhealthy. If the resource later becomes available
again, the periodic health check (periodicity is configurable) will discover it and the
- resource will once again be added to the pool of resources that can receive requests from
- the load balancer.</para>
- <para>You can delete or modify existing health check policies.</para>
+ resource will once again be made available to the load balancer.</para>
<para>To configure how often the health check is performed by default, use the global
configuration setting healthcheck.update.interval. This default applies to all the health
check policies in the cloud. You can override this value for an individual health check
policy.</para>
</section>
+ </section>
+ <section id="host-and-vm-enhancements">
+ <title>Host and Virtual Machine Enhancements</title>
+ <para>The following new features expand the ways you can use hosts and virtual
+ machines.</para>
+ <section id="vmware-drs">
+ <title>VMware DRS Support</title>
+ <para>The VMware vSphere Distributed Resources Scheduler (DRS) is supported.</para>
+ </section>
+ <section id="windows-8">
+ <title>Windows 8 and Windows Server 2012 as VM Guest OS</title>
+ <para>(Supported on XenServer, VMware, and KVM)</para>
+ <para>Windows 8 and Windows Server 2012 can now be used as OS types on guest virtual
+ machines. The OS would be made available the same as any other, by uploading an ISO or a
+ template. The instructions for uploading ISOs and templates are given in the
+ Administrator's Guide. </para>
+ <note>
+ <para><emphasis role="bold">Limitation:</emphasis> When used with VMware hosts, this
+ feature works only for the following versions: vSphere ESXi 5.1 and ESXi 5.0 Patch
+ 4.</para>
+ </note>
+ <para/>
+ </section>
+ <section id="change-account">
+ <title>Change Account Ownership of Virtual Machines</title>
+ <para>A root administrator can now change the ownership of any virtual machine from one
+ account to any other account. A domain or sub-domain administrator can do the same for VMs
+ within the domain from one account to any other account in the domain.</para>
+ </section>
+ <section id="dedicated-resources">
+ <title>Private Pod, Cluster, or Host</title>
+ <para>Dedicating pod, cluster or host to a specific domain/account means that the
+ domain/account will have sole access to the dedicated pod, cluster or hosts such that
+ scalability, security and manageability within a domain/account can be improved. The
+ resources which belong to that tenant will be placed into that dedicated pod, cluster or
+ host.</para>
+ </section>
+ <section id="resize-volume">
+ <title>Resizing Volumes</title>
+ <para>&PRODUCT; provides the ability to resize data disks; &PRODUCT; controls volume size by
+ using disk offerings. This provides &PRODUCT; administrators with the flexibility to
+ choose how much space they want to make available to the end users. Volumes within the
+ disk offerings with the same storage tag can be resized. For example, if you only want to
+ offer 10, 50, and 100 GB offerings, the allowed resize should stay within those limits.
+ That implies if you define a 10 GB, a 50 GB and a 100 GB disk offerings, a user can
+ upgrade from 10 GB to 50 GB, or 50 GB to 100 GB. If you create a custom-sized disk
+ offering, then you have the option to resize the volume by specifying a new, larger size.
+ Additionally, using the resizeVolume API, a data volume can be moved from a static disk
+ offering to a custom disk offering with the size specified. This functionality allows
+ those who might be billing by certain volume sizes or disk offerings to stick to that
+ model, while providing the flexibility to migrate to whatever custom size necessary. This
+ feature is supported on KVM, XenServer, and VMware hosts. However, shrinking volumes is
+ not supported on VMware hosts</para>
+ </section>
+ <section id="volume-snapshot-enhancement">
+ <title>VMware Volume Snapshot Improved Performance</title>
+ <para>When you take a snapshot of a data volume on VMware, &PRODUCT; will now use a more
+ efficient storage technique to improve performance.</para>
+ <para>Previously, every snapshot was immediately exported from vCenter to a mounted NFS
+ share and packaged into an OVA file format. This operation consumed time and resources.
+ Starting from 4.2, the original file formats (e.g., VMDK) provided by vCenter will be
+ retained. An OVA file will only be created as needed, on demand.</para>
+ <para>The new process applies only to newly created snapshots after upgrade to &PRODUCT;
+ 4.2. Snapshots that have already been taken and stored in OVA format will continue to
+ exist in that format, and will continue to work as expected.</para>
+ </section>
+ <section id="storage-migration">
+ <title>Storage Migration: XenMotion and vMotion</title>
+ <para>(Supported on XenServer and VMware)</para>
+ <para>Storage migration allows VMs to be moved from one host to another, where the VMs are
+ not located on storage shared between the two hosts. It provides the option to live
+ migrate a VM’s disks along with the VM itself. It is now possible to migrate a VM from one
+ XenServer resource pool / VMware cluster to another, or to migrate a VM whose disks are on
+ local storage, or even to migrate a VM’s disks from one storage repository to another, all
+ while the VM is running.</para>
+ </section>
+ <section id="vmware-configure-linked-clones">
+ <title>Configuring Usage of Linked Clones on VMware</title>
+ <para>(For ESX hypervisor in conjunction with vCenter)</para>
+ <para>In &PRODUCT; 4.2, the creation of VMs as full clones is allowed. In previous versions,
+ only linked clones were possible.</para>
+ <para>For a full description of clone types, refer to VMware documentation. In summary: A
+ full clone is a copy of an existing virtual machine which, once created, does not depend
+ in any way on the original virtual machine. A linked clone is also a copy of an existing
+ virtual machine, but it has ongoing dependency on the original. A linked clone shares the
+ virtual disk of the original VM, and retains access to all files that were present at the
+ time the clone was created.</para>
+ <para>A new global configuration setting has been added, vmware.create.full.clone. When the
+ administrator sets this to true, end users can create guest VMs only as full clones. The
+ default value is true for new installations. For customers upgrading from a previous
+ version of &PRODUCT;, the default value of vmware.create.full.clone is false.</para>
+ </section>
+ <section id="host-deployment-rules">
+ <title>VM Deployment Rules</title>
+ <para>Rules can be set up to ensure that particular VMs are not placed on the same physical
+ host. These "anti-affinity rules" can increase the reliability of applications by ensuring
+ that the failure of a single host can not take down the entire group of VMs supporting a
+ given application. See Affinity Groups in the &PRODUCT; 4.2 Administration Guide.</para>
+ </section>
+ <section id="cpu-ram-dynamic-scaling">
+ <title>CPU and Memory Scaling for Running VMs</title>
+ <para>(Supported on VMware and XenServer)</para>
+ <para>You can now change the CPU and RAM values for a running virtual machine. In previous
+ versions of &PRODUCT;, this could only be done on a stopped VM.</para>
+ <para>It is not always possible to accurately predict the CPU and RAM requirements when you
+ first deploy a VM. You might need to increase or decrease these resources at any time
+ during the life of a VM. With the new ability to dynamically modify CPU and RAM levels,
+ you can change these resources for a running VM without incurring any downtime.</para>
+ <para>Dynamic CPU and RAM scaling can be used in the following cases:</para>
+ <itemizedlist>
+ <listitem>
+ <para>New VMs that are created after the installation of &PRODUCT; 4.2. If you are
+ upgrading from a previous version of &PRODUCT;, your existing VMs created with
+ previous versions will not have the dynamic scaling capability.</para>
+ </listitem>
+ <listitem>
+ <para>User VMs on hosts running VMware and XenServer.</para>
+ </listitem>
+ <listitem>
+ <para>System VMs on VMware.</para>
+ </listitem>
+ <listitem>
+ <para>VM Tools or XenServer Tools must be installed on the virtual machine.</para>
+ </listitem>
+ <listitem>
+ <para>The new requested CPU and RAM values must be within the constraints allowed by the
+ hypervisor and the VM operating system.</para>
+ </listitem>
+ </itemizedlist>
+ <para>To configure this feature, use the following new global configuration
+ variables:</para>
+ <itemizedlist>
+ <listitem>
+ <para>enable.dynamic.scale.vm: Set to True to enable the feature. By default, the
+ feature is turned off.</para>
+ </listitem>
+ <listitem>
+ <para>scale.retry: How many times to attempt the scaling operation. Default = 2.</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section id="cpu-ram-overcommit">
+ <title>CPU and Memory Over-Provisioning</title>
+ <para>(Supported for XenServer, KVM, and VMware)</para>
+ <para>In &PRODUCT; 4.2, CPU and memory (RAM) over-provisioning factors can be set for each
+ cluster to change the number of VMs that can run on each host in the cluster. This helps
+ optimize the use of resources. By increasing the over-provisioning ratio, more resource
+ capacity will be used. If the ratio is set to 1, no over-provisioning is done.</para>
+ <para>In previous releases, &PRODUCT; did not perform memory over-provisioning. It performed
+ CPU over-provisioning based on a ratio configured by the administrator in the global
+ configuration setting cpu.overprovisioning.factor. Starting in 4.2, the administrator can
+ specify a memory over-provisioning ratio, and can specify both CPU and memory
+ over-provisioning ratios on a per-cluster basis, rather than only on a global
+ basis.</para>
+ <para>In any given cloud, the optimum number of VMs for each host is affected by such things
+ as the hypervisor, storage, and hardware configuration. These may be different for each
+ cluster in the same cloud. A single global over-provisioning setting could not provide the
+ best utilization for all the different clusters in the cloud. It had to be set for the
+ lowest common denominator. The new per-cluster setting provides a finer granularity for
+ better utilization of resources, no matter where the &PRODUCT; placement algorithm decides
+ to place a VM.</para>
+ </section>
+ <section id="baremetal">
+ <title>Kickstart Installation for Bare Metal Provisioning</title>
+ <para>&PRODUCT; 4.2 supports the kick start installation method for RPM-based Linux
+ operating systems on baremetal hosts in basic zones. Users can provision a baremetal host
+ managed by &PRODUCT; as long as they have the kick start file and corresponding OS
+ installation ISO ready.</para>
+ <para>Tested on CentOS 5.5, CentOS 6.2, CentOS 6.3, Ubuntu 12.04.</para>
+ <para>For more information, see the Baremetal Installation Guide.</para>
+ </section>
+ <section id="baremetal-ucs">
+ <title>Enhanced Bare Metal Support on Cisco UCS</title>
+ <para>You can now more easily provision new Cisco UCS server blades into &PRODUCT; for use
+ as bare metal hosts. The goal is to enable easy expansion of the cloud by leveraging the
+ programmability of the UCS converged infrastructure and &PRODUCT;’s knowledge of the cloud
+ architecture and ability to orchestrate. With this new feature, &PRODUCT; can
+ automatically understand the UCS environment, server profiles, etc. to make it easy to
+ deploy a bare metal OS on a Cisco UCS.</para>
+ </section>
+ <section id="update-vm-image">
+ <title>Changing a VM's Base Image</title>
+ <para>Every VM is created from a base image, which is a template or ISO which has been
+ created and stored in &PRODUCT;. Both cloud administrators and end users can create and
+ modify templates, ISOs, and VMs.</para>
+ <para>In &PRODUCT; 4.2, there is a new way to modify an existing VM. You can change an
+ existing VM from one base image to another. For example, suppose there is a template based
+ on a particular operating system, and the OS vendor releases a software patch. The
+ administrator or user naturally wants to apply the patch and then make sure existing VMs
+ start using it. Whether a software update is involved or not, it's also possible to simply
+ switch a VM from its current template to any other desired template.</para>
+ </section>
+ <section id="reset-vm-reboot">
+ <title>Reset VM on Reboot</title>
+ <para>In &PRODUCT; 4.2, you can specify that you want to discard the root disk and create a
+ new one whenever a given VM is rebooted. This is useful for secure environments that need
+ a fresh start on every boot and for desktops that should not retain state. The IP address
+ of the VM will not change due to this operation.</para>
+ </section>
+ <section id="vm-snapshots">
+ <title>Virtual Machine Snapshots for VMware</title>
+ <para>(VMware hosts only) In addition to the existing &PRODUCT; ability to snapshot
+ individual VM volumes, you can now take a VM snapshot to preserve all the VM's data
+ volumes as well as (optionally) its CPU/memory state. This is useful for quick restore of
+ a VM. For example, you can snapshot a VM, then make changes such as software upgrades. If
+ anything goes wrong, simply restore the VM to its previous state using the previously
+ saved VM snapshot. </para>
+ <para>The snapshot is created using the VMware native snapshot facility. The VM snapshot
+ includes not only the data volumes, but optionally also whether the VM is running or
+ turned off (CPU state) and the memory contents. The snapshot is stored in &PRODUCT;'s
+ primary storage.</para>
+ <para>VM snapshots can have a parent/child relationship. Each successive snapshot of the
+ same VM is the child of the snapshot that came before it. Each time you take an additional
+ snapshot of the same VM, it saves only the differences between the current state of the VM
+ and the state stored in the most recent previous snapshot. The previous snapshot becomes a
+ parent, and the new snapshot is its child. It is possible to create a long chain of these
+ parent/child snapshots, which amount to a "redo" record leading from the current state of
+ the VM back to the original.</para>
+ </section>
+ <section id="vm-userdata">
+ <title>Increased Userdata Size When Deploying a VM</title>
+ <para>You can now specify up to 32KB of userdata when deploying a virtual machine through
+ the &PRODUCT; UI or the deployVirtualMachine API call. </para>
+ </section>
+ <section id="vmware-cluster-limit">
+ <title>Set VMware Cluster Size Limit Depending on VMware Version</title>
+ <para>The maximum number of hosts in a vSphere cluster is determined by the VMware
+ hypervisor software. For VMware versions 4.2, 4.1, 5.0, and 5.1, the limit is 32
+ hosts.</para>
+ <para>For &PRODUCT; 4.2, the global configuration setting vmware.percluster.host.max has
+ been removed. The maximum number of hosts in a VMware cluster is now determined by the
+ underlying hypervisor software.</para>
+ <note>
+ <para>Best Practice: It is advisable for VMware clusters in &PRODUCT; to be smaller than
+ the VMware hypervisor's maximum size. A cluster size of up to 8 hosts has been found
+ optimal for most real-world situations.</para>
+ </note>
+ </section>
+ <section id="limit-accounts-domains-rn">
+ <title>Limiting Resource Usage</title>
+ <para>Previously in &PRODUCT;, resource usage limit was imposed based on the resource count,
+ that is, restrict a user or domain on the basis of the number of VMs, volumes, or
+ snapshots used. In &PRODUCT; 4.2, a new set of resource types has been added to the
+ existing pool of resources (VMs, Volumes, and Snapshots) to support the customization
+ model—need-basis usage, such as large VM or small VM. The new resource types are now
+ broadly classified as CPU, RAM, Primary storage, and Secondary storage. &PRODUCT; 4.2
+ allows the root administrator to impose resource usage limit by the following resource
+ types for Domain, Project and Accounts. </para>
+ <itemizedlist>
+ <listitem>
+ <para>CPUs</para>
+ </listitem>
+ <listitem>
+ <para>Memory (RAM)</para>
+ </listitem>
+ <listitem>
+ <para>Primary Storage (Volumes)</para>
+ </listitem>
+ <listitem>
+ <para>Secondary Storage (Snapshots, Templates, ISOs)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ </section>
+ <section id="ops">
+ <title>Monitoring, Maintenance, and Operations Enhancements</title>
+ <!-- <section id="mixed-zone">
+ <title>Basic and Advanced Zone Views</title>
+ <para>A new dropdown in the UI provides the choice between Basic and Advanced views.
+ Depending on which type of zone you are working with, you can change the view to show only
+ &PRODUCT; features and choices that are relevant for that type of zone. This makes it
+ easier to work with basic zones, since features that are not relevant will not be shown in
+ the UI.</para>
+ </section> -->
+ <section id="events-pubsub">
+ <title>Publish and Subscribe for Event Notification</title>
+ <para>An event is essentially a significant or meaningful change in the state of both
+ virtual and physical resources associated with a cloud environment. In &PRODUCT; an event
+ could be a state change of virtual or psychical resources, an action performed by an user
+ (action events), or policy based events (alerts). In &PRODUCT; 4.2, a new event
+ notification framework has been added. This framework provides a means for the Management
+ Server components to publish and subscribe to &PRODUCT; events. Event notification is
+ achieved by implementing the concept of event bus abstraction in the Management Server. </para>
+ <para>A new event for state change, resource state change, is introduced as part of Event
+ notification framework. Every resource, such as user VM, volume, NIC, network, public IP,
+ snapshot, and template, is associated with a state machine and generates events as part of
+ the state change. That implies that a change in the state of a resource results in a state
+ change event, and the event is published in the corresponding state machine on the event
+ bus. All the &PRODUCT; events (alerts, action events, usage events) and the additional
+ category of resource state change events, are published on to the events bus.</para>
+ </section>
+ <section id="delete-alerts">
+ <title>Deleting and Archiving Events and Alerts</title>
+ <para>In addition to viewing a list of events and alerts in the UI, the administrator can
+ now delete and archive them. In order to support deleting and archiving alerts, the
+ following global parameters have been added:</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">alert.purge.delay</emphasis>: The alerts older than
+ specified number of days are purged. Set the value to 0 to never purge alerts
+ automatically.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">alert.purge.interval</emphasis>: The interval in seconds to
+ wait before running the alert purge thread. The default is 86400 seconds (one
+ day).</para>
+ </listitem>
+ </itemizedlist>
+ <note>
+ <para>Archived alerts or events cannot be viewed in the UI, or by using the API. They are
+ maintained in the database for auditing or compliance purposes.</para>
+ </note>
+ </section>
+ <section id="global-parameters">
+ <title>Increased Granularity for Configuration Parameters</title>
+ <para>Some configuration parameters which were previously available only at the global level
+ of the cloud can now be set for smaller components of the cloud, such as at the zone
+ level. To set these parameters, look for the new Settings tab in the UI. You will find it
+ on the detail page for an account, cluster, zone, or primary storage.</para>
+ <para>The account level parameters are: <code>remote.access.vpn.client.iprange</code>,
+ <code>allow.public.user.templates</code>, <code>use.system.public.ips</code>, and
+ <code>use.system.guest.vlans</code></para>
+ <para>The cluster level parameters are
+ <code>cluster.storage.allocated.capacity.notificationthreshold</code>,
+ <code>cluster.storage.capacity.notificationthreshold</code>,
+ <code>cluster.cpu.allocated.capacity.notificationthreshold</code>,
+ <code>cluster.memory.allocated.capacity.notificationthreshold</code>, <code>
+ cluster.cpu.allocated.capacity.disablethreshold</code>,
+ <code>cluster.memory.allocated.capacity.disablethreshold</code>,
+ <code>cpu.overprovisioning.factor</code>, <code>mem.overprovisioning.factor</code>,
+ <code>vmware.reserve.cpu</code>, and <code>vmware.reserve.mem</code>.</para>
+ <para>The zone level parameters are
+ <code>pool.storage.allocated.capacity.disablethreshold</code>,
+ <code>pool.storage.capacity.disablethreshold</code>,
+ <code>storage.overprovisioning.factor</code>, <code>network.throttling.rate</code>,
+ <code>guest.domain.suffix</code>, <code>router.template.xen</code>,
+ <code>router.template.kvm</code>, <code>router.template.vmware</code>,
+ <code>router.template.hyperv</code>, <code>router.template.lx</code>c,
+ <code>enable.dynamic.scale.vm</code>, <code>use.external.dns</code>, and
+ <code>blacklisted.routes</code>.</para>
+ </section>
+ <section id="api-request-throttling">
+ <title>API Request Throttling</title>
+ <para>In &PRODUCT; 4.2, you can limit the rate at which API requests can be placed for each
+ account. This is useful to avoid malicious attacks on the Management Server, prevent
+ performance degradation, and provide fairness to all accounts.</para>
+ <para>If the number of API calls exceeds the threshold, an error message is returned for any
+ additional API calls. The caller will have to retry these API calls at another
+ time.</para>
+ <para>To control the API request throttling, use the following new global configuration
+ settings:</para>
+ <itemizedlist>
+ <listitem>
+ <para>api.throttling.enabled - Enable/Disable API throttling. By default, this setting
+ is false, so API throttling is not enabled.</para>
+ </listitem>
+ <listitem>
+ <para>api.throttling.interval (in seconds) - Time interval during which the number of
+ API requests is to be counted. When the interval has passed, the API count is reset to
+ 0.</para>
+ </listitem>
+ <listitem>
+ <para>api.throttling.max - Maximum number of APIs that can be placed within the
+ api.throttling.interval period.</para>
+ </listitem>
+ <listitem>
+ <para>api.throttling.cachesize - Cache size for storing API counters. Use a value higher
+ than the total number of accounts managed by the cloud. One cache entry is needed for
+ each account, to store the running API total for that account within the current time
+ window.</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section id="external-alert-managers">
+ <title>Sending Alerts to External SNMP and Syslog Managers</title>
+ <para>In addition to showing administrator alerts on the Dashboard in the &PRODUCT; UI and
+ sending them in email, &PRODUCT; now can also send the same alerts to external SNMP or
+ Syslog management software. This is useful if you prefer to use an SNMP or Syslog manager
+ to monitor your cloud.</para>
+ <para>The supported protocol is SNMP version 2.</para>
+ </section>
+ <section id="default-pwd-engine">
+ <title>Changing the Default Password Encryption</title>
+ <para>Passwords are encoded when creating or updating users. The new default preferred
+ encoder, replacing MD5, is SHA256. It is more secure than MD5 hashing. If you take no
+ action to customize password encryption and authentication, SHA256 Salt will be
+ used.</para>
+ <para>If you prefer a different authentication mechanism, &PRODUCT; 4.2 provides a way for
+ you to determine the default encoding and authentication mechanism for admin and user
+ logins. Two new configurable lists have been introduced: userPasswordEncoders and
+ userAuthenticators. userPasswordEncoders allow you to configure the order of preference
+ for encoding passwords, and userAuthenticator allows you to configure the order in which
+ authentication schemes are invoked to validate user passwords.</para>
+ <para>The plain text user authenticator has been modified not to convert supplied passwords
+ to their md5 sums before checking them with the database entries. It performs a simple
+ string comparison between retrieved and supplied login passwords instead of comparing the
+ retrieved md5 hash of the stored password against the supplied md5 hash of the password,
+ because clients no longer hash the password.</para>
+ </section>
+ <section id="cloud-bugtool">
+ <title>Log Collection Utility cloud-bugtool</title>
+ <para>&PRODUCT; provides a command-line utility called cloud-bugtool to make it easier to
+ collect the logs and other diagnostic data required for troubleshooting. This is
+ especially useful when interacting with Citrix Technical Support.</para>
+ <para>You can use cloud-bugtool to collect the following:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Basic system and environment information and network configuration including IP
+ addresses, routing, and name resolver settings </para>
+ </listitem>
+ <listitem>
+ <para>Information about running processes</para>
+ </listitem>
+ <listitem>
+ <para>Management Server logs</para>
+ </listitem>
+ <listitem>
+ <para>System logs in /var/log/</para>
+ </listitem>
+ <listitem>
+ <para>Dump of the cloud database</para>
+ </listitem>
+ </itemizedlist>
+ <warning>
+ <para>cloud-bugtool collects information which might be considered sensitive and
+ confidential. Using the <code>--nodb</code> option to avoid the cloud database can
+ reduce this concern, though it is not guaranteed to exclude all sensitive data.</para>
+ </warning>
+ <para/>
+ </section>
<section id="rbd-primary-storage">
- <title>Snaphotting, backups, cloning and System VMs for RBD Primary Storage</title>
+ <title>Snaphotting, Backups, Cloning and System VMs for RBD Primary Storage</title>
<note>
<para>These new RBD features require at least librbd 0.61.7 (Cuttlefish) and libvirt
0.9.14 on the KVM hypervisors.</para>
</note>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-1191">CLOUDSTACK-1191</ulink>:
- With this release &PRODUCT; will leverage the features of RBD format 2. This allows
+ <para>This release of &PRODUCT; will leverage the features of RBD format 2. This allows
snapshotting and backing up those snapshots.</para>
<para>Backups of snapshots to Secondary Storage are full copies of the RBD snapshot, they
are not RBD diffs. This because when restoring a backup of a snapshot it is not mandatory
that this backup is deployed on RBD again, it could also be a NFS Primary Storage.</para>
- <para>Another key feature of RBD format 2 is cloning and with this release templates will be
- copied to Primary Storage once and using the cloning mechanism new disks will be cloned
- from this parent template. This saves space and decreases deployment time for Instances
+ <para>Another key feature of RBD format 2 is cloning. With this release templates will be
+ copied to Primary Storage once and by using the cloning mechanism new disks will be cloned
+ from this parent template. This saves space and decreases deployment time for instances
dramatically.</para>
- <para>Cloning will however only work with new templates and when they are freshly downloaded
- to primary storage. Templates currently stored on RBD Primary Storage are in RBD format 1
- which does not support cloning. Loglevel debug on the Agent will show if cloning is used
- when deploying a template or not.</para>
- <para>Before this release a NFS Primary Storage was still required for running the System
- VMs from. The reason behind this was a so called 'patch disk' which was generated by the
+ <para>Before this release, a NFS Primary Storage was still required for running the System
+ VMs from. The reason was a so called 'patch disk' that was generated by the
hypervisor which contained metadata for the System VM. The scripts generating this disk
didn't support RBD and thus System VMs had to be deployed from NFS. With 4.2 instead of
the patch disk a VirtIO serial console is used to pass meta information to System VMs.
This enabled the deployment of System VMs on RBD Primary Storage.</para>
</section>
- <section id="disk-io-polling-throttling">
- <title>Disk I/O polling and throttling</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-1192">CLOUDSTACK-1192</ulink>:
- On KVM hypervisors polling and throttling of disk I/Os is supported. Per disk disk attached to
- an Instance the usage server will record the amount of IOps.</para>
- <para>Per disk offering you are able to specify the number of Read and Write I/Os. Trottling is
- done by Qemu/KVM.</para>
- <para>Both polling and throttling only works with KVM and with all types of Primary Storage.</para>
- </section>
</section>
<section id="issues-fixed-4.2">
<title>Issues Fixed in 4.2.0</title>
@@ -2219,6 +3032,1919 @@ service cloudstack-agent start
</orderedlist>
</section>
</chapter>
+ <chapter id="api-changes">
+ <title>API Changes from 4.1 to 4.2</title>
+ <section id="added-API-commands-4.2">
+ <title>Added API Commands in 4.2</title>
+ <section>
+ <title>Secondary Storage</title>
+ <itemizedlist>
+ <listitem>
+ <para>addImageStore (Adds all types of secondary storage providers, S3/Swift/NFS)</para>
+ </listitem>
+ <listitem>
+ <para>createSecondaryStagingStore (Adds a staging secondary storage in each zone)</para>
+ </listitem>
+ <listitem>
+ <para>listImageStores (Lists all secondary storages, S3/Swift/NFS)</para>
+ </listitem>
+ <listitem>
+ <para>listSecondaryStagingStores (Lists all staging secondary storages)</para>
+ </listitem>
+ <listitem>
+ <para>addS3 (Adds a Amazon Simple Storage Service instance.) It is recommended to use
+ addImageStore instead.</para>
+ </listitem>
+ <listitem>
+ <para>listS3s (Lists all the Amazon Simple Storage Service instances.) It is recommended
+ to use listImageStores instead.</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>VM Snapshot</title>
+ <itemizedlist>
+ <listitem>
+ <para>createVMSnapshot (Creates a virtual machine snapshot; see <xref
+ linkend="vm-snapshots"/>)</para>
+ </listitem>
+ <listitem>
+ <para>deleteVMSnapshot (Deletes a virtual machine snapshot)</para>
+ </listitem>
+ <listitem>
+ <para>listVMSnapshot (Shows a virtual machine snapshot)</para>
+ </listitem>
+ <listitem>
+ <para>revertToVMSnapshot (Returns a virtual machine to the state and data saved in a
+ given snapshot)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Load Balancer Health Check</title>
+ <itemizedlist>
+ <listitem>
+ <para>createLBHealthCheckPolicy (Creates a new health check policy for a load balancer
+ rule; see <xref linkend="health-check"/>)</para>
+ </listitem>
+ <listitem>
+ <para>deleteLBHealthCheckPolicy (Deletes an existing health check policy from a load
+ balancer rule)</para>
+ </listitem>
+ <listitem>
+ <para>listLBHealthCheckPolicies (Displays the health check policy for a load balancer
+ rule)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Egress Firewall Rules</title>
+ <itemizedlist>
+ <listitem>
+ <para>createEgressFirewallRules (Creates an egress firewall rule on the guest network;
+ see <xref linkend="egress-firewall"/>)</para>
+ </listitem>
+ <listitem>
+ <para>deleteEgressFirewallRules (Deletes a egress firewall rule on the guest
+ network.)</para>
+ </listitem>
+ <listitem>
+ <para>listEgressFirewallRules (Lists the egress firewall rules configured for a guest
+ network.)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>SSH Key</title>
+ <itemizedlist>
+ <listitem>
+ <para>resetSSHKeyForVirtualMachine (Resets the SSHkey for virtual machine.)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Bare Metal</title>
+ <itemizedlist>
+ <listitem>
+ <para>addBaremetalHost (Adds a new host. Technically, this API command was present in
+ v3.0.6, but its functionality was disabled. See <xref linkend="baremetal"/>)</para>
+ </listitem>
+ <listitem>
+ <para>addBaremetalDhcp (Adds a DHCP server for bare metal hosts)</para>
+ </listitem>
+ <listitem>
+ <para> addBaremetalPxePingServer (Adds a PXE PING server for bare metal hosts)</para>
+ </listitem>
+ <listitem>
+ <para> addBaremetalPxeKickStartServer (Adds a PXE server for bare metal hosts)</para>
+ </listitem>
+ <listitem>
+ <para> listBaremetalDhcp (Shows the DHCP servers currently defined for bare metal
+ hosts)</para>
+ </listitem>
+ <listitem>
+ <para> listBaremetalPxePingServer (Shows the PXE PING servers currently defined for bare
+ metal hosts)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>NIC</title>
+ <itemizedlist>
+ <listitem>
+ <para>addNicToVirtualMachine (Adds a new NIC to the specified VM on a selected network;
+ see <xref linkend="multiple-ip-nic"/>)</para>
+ </listitem>
+ <listitem>
+ <para>removeNicFromVirtualMachine (Removes the specified NIC from a selected VM.)</para>
+ </listitem>
+ <listitem>
+ <para>updateDefaultNicForVirtualMachine (Updates the specified NIC to be the default one
+ for a selected VM.)</para>
+ </listitem>
+ <listitem>
+ <para>addIpToNic (Assigns secondary IP to a NIC.) </para>
+ </listitem>
+ <listitem>
+ <para>removeIpFromNic (Assigns secondary IP to a NIC.) </para>
+ </listitem>
+ <listitem>
+ <para>listNics (Lists the NICs associated with a VM.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Regions</title>
+ <itemizedlist>
+ <listitem>
+ <para>addRegion (Registers a Region into another Region; see <xref linkend="regions"
+ />)</para>
+ </listitem>
+ <listitem>
+ <para>updateRegion (Updates Region details: ID, Name, Endpoint, User API Key, and User
+ Secret Key.)</para>
+ </listitem>
+ <listitem>
+ <para>removeRegion (Removes a Region from current Region.)</para>
+ </listitem>
+ <listitem>
+ <para>listRegions (Get all the Regions. They can be filtered by using the ID or
+ Name.)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>User</title>
+ <itemizedlist>
+ <listitem>
+ <para>getUser (This API can only be used by the Admin. Get user account details by using
+ the API Key.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>API Throttling</title>
+ <itemizedlist>
+ <listitem>
+ <para>getApiLimit (Show number of remaining APIs for the invoking user in current
+ window)</para>
+ </listitem>
+ <listitem>
+ <para>resetApiLimit (For root admin, if accountId parameter is passed, it will reset
+ count for that particular account, otherwise it will reset all counters)</para>
+ </listitem>
+ <listitem>
+ <para>resetApiLimit (Reset the API count.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Locking</title>
+ <itemizedlist>
+ <listitem>
+ <para>lockAccount (Locks an account)</para>
+ </listitem>
+ <listitem>
+ <para>lockUser (Locks a user account)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>VM Scaling</title>
+ <itemizedlist>
+ <listitem>
+ <para>scaleVirtualMachine (Scales the virtual machine to a new service offering.)</para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Migrate Volume</title>
+ <itemizedlist>
+ <listitem>
+ <para>migrateVirtualMachineWithVolume (Attempts migrating VM with its volumes to a
+ different host.) </para>
+ </listitem>
+ <listitem>
+ <para>listStorageProviders (Lists storage providers.) </para>
+ </listitem>
+ <listitem>
+ <para>findStoragePoolsForMigration (Lists storage pools available for migrating a
+ volume.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Dedicated IP and VLAN</title>
+ <itemizedlist>
+ <listitem>
+ <para>dedicatePublicIpRange (Dedicates a Public IP range to an account.) </para>
+ </listitem>
+ <listitem>
+ <para>releasePublicIpRange (Releases a Public IP range back to the system pool.) </para>
+ </listitem>
+ <listitem>
+ <para>dedicateGuestVlanRange (Dedicates a guest VLAN range to an account.) </para>
+ </listitem>
+ <listitem>
+ <para>releaseDedicatedGuestVlanRange (Releases a dedicated guest VLAN range to the
+ system.) </para>
+ </listitem>
+ <listitem>
+ <para>listDedicatedGuestVlanRanges (Lists dedicated guest VLAN ranges.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Port Forwarding</title>
+ <itemizedlist>
+ <listitem>
+ <para>updatePortForwardingRule (Updates a port forwarding rule. Only the private port
+ and the VM can be updated.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Scale System VM</title>
+ <itemizedlist>
+ <listitem>
+ <para>scaleSystemVm (Scale the service offering for a systemVM, console proxy, or
+ secondary storage.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Deployment Planner</title>
+ <itemizedlist>
+ <listitem>
+ <para>listDeploymentPlanners (Lists all the deployment planners available.) </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>Archive and Delete Events and Alerts</title>
+ <itemizedlist>
+ <listitem>
+ <para>archiveEvents (Arc
<TRUNCATED>
[37/50] [abbrv] Automation: Resource Limits - memory limits test cases
Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f9467470/test/integration/component/memory_limits/test_project_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/memory_limits/test_project_limits.py b/test/integration/component/memory_limits/test_project_limits.py
new file mode 100644
index 0000000..1c0ed92
--- /dev/null
+++ b/test/integration/component/memory_limits/test_project_limits.py
@@ -0,0 +1,350 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+""" P1 tests for memory resource limits
+"""
+# Import Local Modules
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import cloudstackTestCase, unittest
+from marvin.integration.lib.base import (
+ Account,
+ ServiceOffering,
+ VirtualMachine,
+ Domain,
+ Project
+ )
+from marvin.integration.lib.common import (get_domain,
+ get_zone,
+ get_template,
+ cleanup_resources,
+ wait_for_cleanup,
+ find_suitable_host,
+ get_resource_type
+ )
+
+class Services:
+ """Test memory resource limit services
+ """
+
+ def __init__(self):
+ self.services = {
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "resource",
+ # Random characters are appended for unique
+ # username
+ "password": "password",
+ },
+ "service_offering": {
+ "name": "Tiny Instance",
+ "displaytext": "Tiny Instance",
+ "cpunumber": 1,
+ "cpuspeed": 100, # in MHz
+ "memory": 5120, # In MBs
+ },
+ "virtual_machine": {
+ "displayname": "TestVM",
+ "username": "root",
+ "password": "password",
+ "ssh_port": 22,
+ "hypervisor": 'KVM',
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": 'TCP',
+ },
+ "network": {
+ "name": "Test Network",
+ "displaytext": "Test Network",
+ "netmask": '255.255.255.0'
+ },
+ "project": {
+ "name": "Project",
+ "displaytext": "Test project",
+ },
+ "domain": {
+ "name": "Domain",
+ },
+ "ostype": 'CentOS 5.3 (64-bit)',
+ "sleep": 60,
+ "timeout": 10,
+ "mode": 'advanced',
+ # Networking mode: Advanced, Basic
+ }
+
+class TestProjectsMemoryLimits(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestProjectsMemoryLimits,
+ cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.services["mode"] = cls.zone.networktype
+
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+
+ cls._cleanup = [cls.service_offering, ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True
+ )
+ self.cleanup = [self.account, ]
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupProjectAccounts()
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.admin.name,
+ DomainName=self.admin.domain)
+
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+ self.vm = self.createInstance(project=self.project,
+ service_off=self.service_offering, api_client=api_client)
+ return
+
+ def tearDown(self):
+ try:
+ # Clean up, terminate the created instance, volumes and snapshots
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def createInstance(self, project, service_off, networks=None, api_client=None):
+ """Creates an instance in account"""
+ self.debug("Deploying an instance in account: %s" %
+ self.account.name)
+
+ if api_client is None:
+ api_client = self.apiclient
+
+ try:
+ vm = VirtualMachine.create(
+ api_client,
+ self.services["virtual_machine"],
+ templateid=self.template.id,
+ projectid=project.id,
+ networkids=networks,
+ serviceofferingid=service_off.id)
+ vms = VirtualMachine.list(api_client, id=vm.id, listall=True)
+ self.assertIsInstance(vms,
+ list,
+ "List VMs should return a valid response")
+ self.assertEqual(vms[0].state, "Running",
+ "Vm state should be running after deployment")
+ return vm
+ except Exception as e:
+ self.fail("Failed to deploy an instance: %s" % e)
+
+ def setupProjectAccounts(self):
+
+ self.debug("Creating a domain under: %s" % self.domain.name)
+ self.domain = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.domain.id)
+ self.admin = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.domain.id
+ )
+
+ # Create project as a domain admin
+ self.project = Project.create(self.apiclient,
+ self.services["project"],
+ account=self.admin.name,
+ domainid=self.admin.domainid)
+ # Cleanup created project at end of test
+ self.cleanup.append(self.project)
+ self.cleanup.append(self.admin)
+ self.cleanup.append(self.domain)
+ self.debug("Created project with domain admin with name: %s" %
+ self.project.name)
+
+ projects = Project.list(self.apiclient, id=self.project.id,
+ listall=True)
+
+ self.assertEqual(isinstance(projects, list), True,
+ "Check for a valid list projects response")
+ project = projects[0]
+ self.assertEqual(project.name, self.project.name,
+ "Check project name from list response")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_01_project_vmlifecycle_start_stop_instance(self):
+
+ # Validate the following
+ # 1. Assign account to projects and verify the resource updates
+ # 2. Deploy VM with the accounts added to the project
+ # 3. Stop VM of an accounts added to the project to a new host
+ # 4. Resource count should list properly
+ # 5. Start VM of an accounts added to the project to a new host
+ # 6. Resource count should list properly
+
+ self.debug("Checking memory resource count for project: %s" % self.project.name)
+ project_list = Project.list(self.apiclient, id=self.project.id, listall=True)
+ self.debug(project_list)
+ self.assertIsInstance(project_list,
+ list,
+ "List Projects should return a valid response"
+ )
+ resource_count = project_list[0].memorytotal
+
+ self.debug(resource_count)
+
+ self.debug("Stopping instance: %s" % self.vm.name)
+ try:
+ self.vm.stop(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to stop instance: %s" % e)
+
+ self.debug("Checking memory resource count for project: %s" % self.project.name)
+ project_list = Project.list(self.apiclient, id=self.project.id, listall=True)
+ self.assertIsInstance(project_list,
+ list,
+ "List Projects should return a valid response"
+ )
+ resource_count_after_stop = project_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_stop,
+ "Resource count should be same after stopping the instance")
+
+ self.debug("Starting instance: %s" % self.vm.name)
+ try:
+ self.vm.start(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to start instance: %s" % e)
+
+ self.debug("Checking memory resource count for project: %s" % self.project.name)
+ project_list = Project.list(self.apiclient, id=self.project.id, listall=True)
+ self.assertIsInstance(project_list,
+ list,
+ "List Projects should return a valid response"
+ )
+ resource_count_after_start = project_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_start,
+ "Resource count should be same after starting the instance")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_02_project_vmlifecycle_migrate_instance(self):
+
+ # Validate the following
+ # 1. Assign account to projects and verify the resource updates
+ # 2. Deploy VM with the accounts added to the project
+ # 3. Migrate VM of an accounts added to the project to a new host
+ # 4. Resource count should list properly.
+
+ self.debug("Checking memory resource count for project: %s" % self.project.name)
+ project_list = Project.list(self.apiclient, id=self.project.id, listall=True)
+ self.debug(project_list)
+ self.assertIsInstance(project_list,
+ list,
+ "List Projects should return a valid response"
+ )
+ resource_count = project_list[0].memorytotal
+ self.debug(resource_count)
+
+ host = find_suitable_host(self.apiclient, self.vm)
+ self.debug("Migrating instance: %s to host: %s" %
+ (self.vm.name, host.name))
+ try:
+ self.vm.migrate(self.apiclient, host.id)
+ except Exception as e:
+ self.fail("Failed to migrate instance: %s" % e)
+
+ self.debug("Checking memory resource count for project: %s" % self.project.name)
+ project_list = Project.list(self.apiclient, id=self.project.id, listall=True)
+ self.assertIsInstance(project_list,
+ list,
+ "List Projects should return a valid response"
+ )
+ resource_count_after_migrate = project_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_migrate,
+ "Resource count should be same after migrating the instance")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_03_project_vmlifecycle_delete_instance(self):
+
+ # Validate the following
+ # 1. Assign account to projects and verify the resource updates
+ # 2. Deploy VM with the accounts added to the project
+ # 3. Destroy VM of an accounts added to the project
+ # 4. Resource count should list as 0 after destroying the instance
+
+ self.debug("Checking memory resource count for project: %s" % self.project.name)
+ project_list = Project.list(self.apiclient, id=self.project.id, listall=True)
+ self.debug(project_list)
+ self.assertIsInstance(project_list,
+ list,
+ "List Projects should return a valid response"
+ )
+ resource_count = project_list[0].memorytotal
+ self.debug(resource_count)
+
+ self.debug("Destroying instance: %s" % self.vm.name)
+ try:
+ self.vm.delete(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to delete instance: %s" % e)
+
+ # Wait for expunge interval to cleanup Memory
+ wait_for_cleanup(self.apiclient, ["expunge.delay", "expunge.interval"])
+
+ self.debug("Checking memory resource count for project: %s" % self.project.name)
+ project_list = Project.list(self.apiclient, id=self.project.id, listall=True)
+ self.assertIsInstance(project_list,
+ list,
+ "List Projects should return a valid response"
+ )
+ resource_count_after_delete = project_list[0].memorytotal
+ self.assertEqual(resource_count_after_delete, 0 , "Resource count for %s should be 0" % get_resource_type(resource_id=9))#RAM
+ return
[19/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
vmware dvswitch update, UI has changed for traffic label CLOUDSTACK-4089 doc changes
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7c7faa62
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7c7faa62
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7c7faa62
Branch: refs/heads/kvm-vnc-listen
Commit: 7c7faa627aa125490320a78d5ded6eb5f64e428d
Parents: cb3a3da
Author: radhikap <ra...@citrix.com>
Authored: Thu Sep 12 11:23:47 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Thu Sep 12 11:32:01 2013 +0530
----------------------------------------------------------------------
docs/en-US/advanced-zone-configuration.xml | 17 +-
docs/en-US/basic-zone-configuration.xml | 414 +++++++++++++++------
docs/en-US/images/edit-traffic-type.png | Bin 0 -> 93662 bytes
docs/en-US/images/traffic-type.png | Bin 0 -> 19159 bytes
docs/en-US/vmware-cluster-config-dvswitch.xml | 78 ++--
5 files changed, 359 insertions(+), 150 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c7faa62/docs/en-US/advanced-zone-configuration.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/advanced-zone-configuration.xml b/docs/en-US/advanced-zone-configuration.xml
index 43b9391..451b545 100644
--- a/docs/en-US/advanced-zone-configuration.xml
+++ b/docs/en-US/advanced-zone-configuration.xml
@@ -84,6 +84,14 @@
<para>These traffic labels will be defined only for the hypervisor selected for the first
cluster. For all other hypervisors, the labels can be configured after the zone is
created.</para>
+ <para>(VMware only) If you have enabled Nexus dvSwitch in the environment, you must specify
+ the corresponding Ethernet port profile names as network traffic label for each traffic type
+ on the physical network. For more information on Nexus dvSwitch, see Configuring a vSphere
+ Cluster with Nexus 1000v Virtual Switch in the Installation Guide. If you have enabled
+ VMware dvSwitch in the environment, you must specify the corresponding Switch name as
+ network traffic label for each traffic type on the physical network. For more information,
+ see Configuring a VMware Datacenter with VMware Distributed Virtual Switch in the
+ Installation Guide. </para>
</listitem>
<listitem>
<para>Click Next.</para>
@@ -219,9 +227,9 @@
</listitem>
<listitem>
<para><emphasis role="bold">Protocol.</emphasis> For XenServer, choose either NFS, iSCSI,
- or PreSetup. For KVM, choose NFS, SharedMountPoint, CLVM, and RBD. For vSphere choose either VMFS
- (iSCSI or FiberChannel) or NFS. The remaining fields in the screen vary depending on
- what you choose here.</para>
+ or PreSetup. For KVM, choose NFS, SharedMountPoint, CLVM, and RBD. For vSphere choose
+ either VMFS (iSCSI or FiberChannel) or NFS. The remaining fields in the screen vary
+ depending on what you choose here.</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
@@ -362,7 +370,8 @@
Secondary Storage :</para>
<itemizedlist>
<listitem>
- <para><emphasis role="bold">NFS Server.</emphasis> The IP address of the server or fully qualified domain name of the server.</para>
+ <para><emphasis role="bold">NFS Server.</emphasis> The IP address of the server or fully
+ qualified domain name of the server.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Path.</emphasis> The exported path from the server.</para>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c7faa62/docs/en-US/basic-zone-configuration.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/basic-zone-configuration.xml b/docs/en-US/basic-zone-configuration.xml
index 965aff3..79d4ab8 100644
--- a/docs/en-US/basic-zone-configuration.xml
+++ b/docs/en-US/basic-zone-configuration.xml
@@ -22,124 +22,298 @@
under the License.
-->
<section id="basic-zone-configuration">
- <title>Basic Zone Configuration</title>
- <orderedlist>
- <listitem><para>After you select Basic in the Add Zone wizard and click Next, you will be asked to enter the following details. Then click Next.</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">Name.</emphasis> A name for the zone.</para></listitem>
- <listitem><para><emphasis role="bold">DNS 1 and 2.</emphasis> These are DNS servers for use by guest VMs in the zone. These DNS servers will be accessed via the public network you will add later. The public IP addresses for the zone must have a route to the DNS server named here.</para></listitem>
- <listitem><para><emphasis role="bold">Internal DNS 1 and Internal DNS 2.</emphasis> These are DNS servers for use by system VMs in the zone (these are VMs used by &PRODUCT; itself, such as virtual routers, console proxies, and Secondary Storage VMs.) These DNS servers will be accessed via the management traffic network interface of the System VMs. The private IP address you provide for the pods must have a route to the internal DNS server named here.</para></listitem>
- <listitem><para><emphasis role="bold">Hypervisor.</emphasis> (Introduced in version 3.0.1) Choose the hypervisor for the first cluster in the zone. You can add clusters with different hypervisors later, after you finish adding the zone.</para></listitem>
- <listitem><para><emphasis role="bold">Network Offering.</emphasis> Your choice here determines what network services will be available on the network for guest VMs.</para>
- <informaltable frame="all">
- <tgroup cols="2" align="left" colsep="1" rowsep="1">
- <colspec colname="c1" />
- <colspec colname="c2" />
- <thead>
- <row>
- <entry><para>Network Offering</para></entry>
- <entry><para>Description</para></entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><para>DefaultSharedNetworkOfferingWithSGService</para></entry>
- <entry><para>If you want to enable security groups for guest traffic isolation, choose this. (See Using Security Groups to Control Traffic to VMs.)</para></entry>
- </row>
- <row>
- <entry><para>DefaultSharedNetworkOffering</para></entry>
- <entry><para>If you do not need security groups, choose this.</para></entry>
- </row>
- <row>
- <entry><para>DefaultSharedNetscalerEIPandELBNetworkOffering</para></entry>
- <entry><para>If you have installed a Citrix NetScaler appliance as part of your zone network, and you will be using its Elastic IP and Elastic Load Balancing features, choose this. With the EIP and ELB features, a basic zone with security groups enabled can offer 1:1 static NAT and load balancing.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </listitem>
- <listitem><para><emphasis role="bold">Network Domain.</emphasis> (Optional) If you want to assign a special domain name to the guest VM network, specify the DNS suffix.</para></listitem>
- <listitem><para><emphasis role="bold">Public.</emphasis> A public zone is available to all users. A zone that is not public will be assigned to a particular domain. Only users in that domain will be allowed to create guest VMs in this zone.</para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>Choose which traffic types will be carried by the physical network.</para>
- <para>The traffic types are management, public, guest, and storage traffic. For more information about the types, roll over the icons to display their tool tips, or see Basic Zone Network Traffic Types. This screen starts out with some traffic types already assigned. To add more, drag and drop traffic types onto the network. You can also change the network name if desired.</para>
- </listitem>
- <listitem><para>Assign a network traffic label to each traffic type on the physical network. These labels must match the labels you have already defined on the hypervisor host. To assign each label, click the Edit button under the traffic type icon. A popup dialog appears where you can type the label, then click OK.</para>
- <para>These traffic labels will be defined only for the hypervisor selected for the first cluster. For all other hypervisors, the labels can be configured after the zone is created.</para>
- </listitem>
- <listitem><para>Click Next.</para></listitem>
- <listitem><para>(NetScaler only) If you chose the network offering for NetScaler, you have an additional screen to fill out. Provide the requested details to set up the NetScaler, then click Next.</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">IP address.</emphasis> The NSIP (NetScaler IP) address of the NetScaler device.</para></listitem>
- <listitem><para><emphasis role="bold">Username/Password.</emphasis> The authentication credentials to access the device. &PRODUCT; uses these credentials to access the device.</para></listitem>
- <listitem><para><emphasis role="bold">Type.</emphasis> NetScaler device type that is being added. It could be NetScaler VPX, NetScaler MPX, or NetScaler SDX. For a comparison of the types, see About Using a NetScaler Load Balancer.</para></listitem>
- <listitem><para><emphasis role="bold">Public interface.</emphasis> Interface of NetScaler that is configured to be part of the public network.</para></listitem>
- <listitem><para><emphasis role="bold">Private interface.</emphasis> Interface of NetScaler that is configured to be part of the private network.</para></listitem>
- <listitem><para><emphasis role="bold">Number of retries.</emphasis> Number of times to attempt a command on the device before considering the operation failed. Default is 2.</para></listitem>
- <listitem><para><emphasis role="bold">Capacity.</emphasis> Number of guest networks/accounts that will share this NetScaler device.</para></listitem>
- <listitem><para><emphasis role="bold">Dedicated.</emphasis> When marked as dedicated, this device will be dedicated to a single account. When Dedicated is checked, the value in the Capacity field has no significance – implicitly, its value is 1.</para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>(NetScaler only) Configure the IP range for public traffic. The IPs in this range will be used for the static NAT capability which you enabled by selecting the network offering for NetScaler with EIP and ELB. Enter the following details, then click Add. If desired, you can repeat this step to add more IP ranges. When done, click Next.</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">Gateway.</emphasis> The gateway in use for these IP addresses.</para></listitem>
- <listitem><para><emphasis role="bold">Netmask.</emphasis> The netmask associated with this IP range.</para></listitem>
- <listitem><para><emphasis role="bold">VLAN.</emphasis> The VLAN that will be used for public traffic.</para></listitem>
- <listitem><para><emphasis role="bold">Start IP/End IP.</emphasis> A range of IP addresses that are assumed to be accessible from the Internet and will be allocated for access to guest VMs.</para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>In a new zone, &PRODUCT; adds the first pod for you. You can always add more pods later. For an overview of what a pod is, see <xref linkend="about-pods" />.</para>
- <para>To configure the first pod, enter the following, then click Next:</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">Pod Name.</emphasis> A name for the pod.</para></listitem>
- <listitem><para><emphasis role="bold">Reserved system gateway.</emphasis> The gateway for the hosts in that pod.</para></listitem>
- <listitem><para><emphasis role="bold">Reserved system netmask.</emphasis> The network prefix that defines the pod's subnet. Use CIDR notation.</para></listitem>
- <listitem><para><emphasis role="bold">Start/End Reserved System IP.</emphasis> The IP range in the management network that &PRODUCT; uses to manage various system VMs, such as Secondary Storage VMs, Console Proxy VMs, and DHCP. For more information, see System Reserved IP Addresses.</para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>Configure the network for guest traffic. Provide the following, then click Next:</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">Guest gateway.</emphasis> The gateway that the guests should use.</para></listitem>
- <listitem><para><emphasis role="bold">Guest netmask.</emphasis> The netmask in use on the subnet the guests will use.</para></listitem>
- <listitem><para><emphasis role="bold">Guest start IP/End IP.</emphasis> Enter the first and last IP addresses that define a range that &PRODUCT; can assign to guests.</para>
- <itemizedlist>
- <listitem><para>We strongly recommend the use of multiple NICs. If multiple NICs are used, they may be in a different subnet.</para></listitem>
- <listitem><para>If one NIC is used, these IPs should be in the same CIDR as the pod CIDR.</para></listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>In a new pod, &PRODUCT; adds the first cluster for you. You can always add more clusters later. For an overview of what a cluster is, see About Clusters.</para>
- <para>To configure the first cluster, enter the following, then click Next:</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">Hypervisor.</emphasis> (Version 3.0.0 only; in 3.0.1, this field is read only) Choose the type of hypervisor software that all hosts in this cluster will run. If you choose VMware, additional fields appear so you can give information about a vSphere cluster. For vSphere servers, we recommend creating the cluster of hosts in vCenter and then adding the entire cluster to &PRODUCT;. See Add Cluster: vSphere.</para></listitem>
- <listitem><para><emphasis role="bold">Cluster name.</emphasis> Enter a name for the cluster. This can be text of your choosing and is not used by &PRODUCT;.</para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>In a new cluster, &PRODUCT; adds the first host for you. You can always add more hosts later. For an overview of what a host is, see About Hosts.</para>
- <note><para>When you add a hypervisor host to &PRODUCT;, the host must not have any VMs already running.</para></note>
- <para>Before you can configure the host, you need to install the hypervisor software on the host. You will need to know which version of the hypervisor software version is supported by &PRODUCT; and what additional configuration is required to ensure the host will work with &PRODUCT;. To find these installation details, see:</para>
- <itemizedlist>
- <listitem><para>Citrix XenServer Installation and Configuration</para></listitem>
- <listitem><para>VMware vSphere Installation and Configuration</para></listitem>
- <listitem><para>KVM vSphere Installation and Configuration</para></listitem>
- <!-- <listitem><para>Oracle VM (OVM) Installation and Configuration</para></listitem> -->
- </itemizedlist>
- <para>To configure the first host, enter the following, then click Next:</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">Host Name.</emphasis> The DNS name or IP address of the host.</para></listitem>
- <listitem><para><emphasis role="bold">Username.</emphasis> The username is root.</para></listitem>
- <listitem><para><emphasis role="bold">Password.</emphasis> This is the password for the user named above (from your XenServer or KVM install).</para></listitem>
- <listitem><para><emphasis role="bold">Host Tags.</emphasis> (Optional) Any labels that you use to categorize hosts for ease of maintenance. For example, you can set this to the cloud's HA tag (set in the ha.tag global configuration parameter) if you want this host to be used only for VMs with the "high availability" feature enabled. For more information, see HA-Enabled Virtual Machines as well as HA for Hosts.</para></listitem>
- </itemizedlist>
- </listitem>
- <listitem><para>In a new cluster, &PRODUCT; adds the first primary storage server for you. You can always add more servers later. For an overview of what primary storage is, see About Primary Storage.</para>
- <para>To configure the first primary storage server, enter the following, then click Next:</para>
- <itemizedlist>
- <listitem><para><emphasis role="bold">Name.</emphasis> The name of the storage device.</para></listitem>
- <listitem><para><emphasis role="bold">Protocol.</emphasis> For XenServer, choose either NFS, iSCSI, or PreSetup. For KVM, choose NFS, SharedMountPoint,CLVM, or RBD. For vSphere choose either VMFS (iSCSI or FiberChannel) or NFS. The remaining fields in the screen vary depending on what you choose here.</para></listitem>
- </itemizedlist>
- </listitem>
- </orderedlist>
+ <title>Basic Zone Configuration</title>
+ <orderedlist>
+ <listitem>
+ <para>After you select Basic in the Add Zone wizard and click Next, you will be asked to enter
+ the following details. Then click Next.</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Name.</emphasis> A name for the zone.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">DNS 1 and 2.</emphasis> These are DNS servers for use by guest
+ VMs in the zone. These DNS servers will be accessed via the public network you will add
+ later. The public IP addresses for the zone must have a route to the DNS server named
+ here.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Internal DNS 1 and Internal DNS 2.</emphasis> These are DNS
+ servers for use by system VMs in the zone (these are VMs used by &PRODUCT; itself, such
+ as virtual routers, console proxies, and Secondary Storage VMs.) These DNS servers will
+ be accessed via the management traffic network interface of the System VMs. The private
+ IP address you provide for the pods must have a route to the internal DNS server named
+ here.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Hypervisor.</emphasis> (Introduced in version 3.0.1) Choose
+ the hypervisor for the first cluster in the zone. You can add clusters with different
+ hypervisors later, after you finish adding the zone.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Network Offering.</emphasis> Your choice here determines what
+ network services will be available on the network for guest VMs.</para>
+ <informaltable frame="all">
+ <tgroup cols="2" align="left" colsep="1" rowsep="1">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <thead>
+ <row>
+ <entry><para>Network Offering</para></entry>
+ <entry><para>Description</para></entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><para>DefaultSharedNetworkOfferingWithSGService</para></entry>
+ <entry><para>If you want to enable security groups for guest traffic isolation,
+ choose this. (See Using Security Groups to Control Traffic to
+ VMs.)</para></entry>
+ </row>
+ <row>
+ <entry><para>DefaultSharedNetworkOffering</para></entry>
+ <entry><para>If you do not need security groups, choose this.</para></entry>
+ </row>
+ <row>
+ <entry><para>DefaultSharedNetscalerEIPandELBNetworkOffering</para></entry>
+ <entry><para>If you have installed a Citrix NetScaler appliance as part of your
+ zone network, and you will be using its Elastic IP and Elastic Load Balancing
+ features, choose this. With the EIP and ELB features, a basic zone with
+ security groups enabled can offer 1:1 static NAT and load
+ balancing.</para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Network Domain.</emphasis> (Optional) If you want to assign a
+ special domain name to the guest VM network, specify the DNS suffix.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Public.</emphasis> A public zone is available to all users. A
+ zone that is not public will be assigned to a particular domain. Only users in that
+ domain will be allowed to create guest VMs in this zone.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>Choose which traffic types will be carried by the physical network.</para>
+ <para>The traffic types are management, public, guest, and storage traffic. For more
+ information about the types, roll over the icons to display their tool tips, or see Basic
+ Zone Network Traffic Types. This screen starts out with some traffic types already assigned.
+ To add more, drag and drop traffic types onto the network. You can also change the network
+ name if desired.</para>
+ </listitem>
+ <listitem>
+ <para>Assign a network traffic label to each traffic type on the physical network. These
+ labels must match the labels you have already defined on the hypervisor host. To assign each
+ label, click the Edit button under the traffic type icon. A popup dialog appears where you
+ can type the label, then click OK.</para>
+ <para>These traffic labels will be defined only for the hypervisor selected for the first
+ cluster. For all other hypervisors, the labels can be configured after the zone is
+ created.</para>
+ </listitem>
+ <listitem>
+ <para>Click Next.</para>
+ </listitem>
+ <listitem>
+ <para>(NetScaler only) If you chose the network offering for NetScaler, you have an additional
+ screen to fill out. Provide the requested details to set up the NetScaler, then click
+ Next.</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">IP address.</emphasis> The NSIP (NetScaler IP) address of the
+ NetScaler device.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Username/Password.</emphasis> The authentication credentials
+ to access the device. &PRODUCT; uses these credentials to access the device.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Type.</emphasis> NetScaler device type that is being added. It
+ could be NetScaler VPX, NetScaler MPX, or NetScaler SDX. For a comparison of the types,
+ see About Using a NetScaler Load Balancer.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Public interface.</emphasis> Interface of NetScaler that is
+ configured to be part of the public network.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Private interface.</emphasis> Interface of NetScaler that is
+ configured to be part of the private network.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Number of retries.</emphasis> Number of times to attempt a
+ command on the device before considering the operation failed. Default is 2.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Capacity.</emphasis> Number of guest networks/accounts that
+ will share this NetScaler device.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Dedicated.</emphasis> When marked as dedicated, this device
+ will be dedicated to a single account. When Dedicated is checked, the value in the
+ Capacity field has no significance – implicitly, its value is 1.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>(NetScaler only) Configure the IP range for public traffic. The IPs in this range will
+ be used for the static NAT capability which you enabled by selecting the network offering
+ for NetScaler with EIP and ELB. Enter the following details, then click Add. If desired, you
+ can repeat this step to add more IP ranges. When done, click Next.</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Gateway.</emphasis> The gateway in use for these IP
+ addresses.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Netmask.</emphasis> The netmask associated with this IP
+ range.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">VLAN.</emphasis> The VLAN that will be used for public
+ traffic.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Start IP/End IP.</emphasis> A range of IP addresses that are
+ assumed to be accessible from the Internet and will be allocated for access to guest
+ VMs.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>In a new zone, &PRODUCT; adds the first pod for you. You can always add more pods later.
+ For an overview of what a pod is, see <xref linkend="about-pods"/>.</para>
+ <para>To configure the first pod, enter the following, then click Next:</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Pod Name.</emphasis> A name for the pod.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Reserved system gateway.</emphasis> The gateway for the hosts
+ in that pod.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Reserved system netmask.</emphasis> The network prefix that
+ defines the pod's subnet. Use CIDR notation.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Start/End Reserved System IP.</emphasis> The IP range in the
+ management network that &PRODUCT; uses to manage various system VMs, such as Secondary
+ Storage VMs, Console Proxy VMs, and DHCP. For more information, see System Reserved IP
+ Addresses.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>Configure the network for guest traffic. Provide the following, then click Next:</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Guest gateway.</emphasis> The gateway that the guests should
+ use.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Guest netmask.</emphasis> The netmask in use on the subnet the
+ guests will use.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Guest start IP/End IP.</emphasis> Enter the first and last IP
+ addresses that define a range that &PRODUCT; can assign to guests.</para>
+ <itemizedlist>
+ <listitem>
+ <para>We strongly recommend the use of multiple NICs. If multiple NICs are used, they
+ may be in a different subnet.</para>
+ </listitem>
+ <listitem>
+ <para>If one NIC is used, these IPs should be in the same CIDR as the pod CIDR.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>In a new pod, &PRODUCT; adds the first cluster for you. You can always add more clusters
+ later. For an overview of what a cluster is, see About Clusters.</para>
+ <para>To configure the first cluster, enter the following, then click Next:</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Hypervisor.</emphasis> (Version 3.0.0 only; in 3.0.1, this
+ field is read only) Choose the type of hypervisor software that all hosts in this
+ cluster will run. If you choose VMware, additional fields appear so you can give
+ information about a vSphere cluster. For vSphere servers, we recommend creating the
+ cluster of hosts in vCenter and then adding the entire cluster to &PRODUCT;. See Add
+ Cluster: vSphere.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Cluster name.</emphasis> Enter a name for the cluster. This
+ can be text of your choosing and is not used by &PRODUCT;.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>In a new cluster, &PRODUCT; adds the first host for you. You can always add more hosts
+ later. For an overview of what a host is, see About Hosts.</para>
+ <note>
+ <para>When you add a hypervisor host to &PRODUCT;, the host must not have any VMs already
+ running.</para>
+ </note>
+ <para>Before you can configure the host, you need to install the hypervisor software on the
+ host. You will need to know which version of the hypervisor software version is supported by
+ &PRODUCT; and what additional configuration is required to ensure the host will work with
+ &PRODUCT;. To find these installation details, see:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Citrix XenServer Installation and Configuration</para>
+ </listitem>
+ <listitem>
+ <para>VMware vSphere Installation and Configuration</para>
+ </listitem>
+ <listitem>
+ <para>KVM vSphere Installation and Configuration</para>
+ </listitem>
+ <!-- <listitem><para>Oracle VM (OVM) Installation and Configuration</para></listitem> -->
+ </itemizedlist>
+ <para>To configure the first host, enter the following, then click Next:</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Host Name.</emphasis> The DNS name or IP address of the
+ host.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Username.</emphasis> The username is root.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Password.</emphasis> This is the password for the user named
+ above (from your XenServer or KVM install).</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Host Tags.</emphasis> (Optional) Any labels that you use to
+ categorize hosts for ease of maintenance. For example, you can set this to the cloud's
+ HA tag (set in the ha.tag global configuration parameter) if you want this host to be
+ used only for VMs with the "high availability" feature enabled. For more information,
+ see HA-Enabled Virtual Machines as well as HA for Hosts.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>In a new cluster, &PRODUCT; adds the first primary storage server for you. You can
+ always add more servers later. For an overview of what primary storage is, see About Primary
+ Storage.</para>
+ <para>To configure the first primary storage server, enter the following, then click
+ Next:</para>
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="bold">Name.</emphasis> The name of the storage device.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="bold">Protocol.</emphasis> For XenServer, choose either NFS, iSCSI,
+ or PreSetup. For KVM, choose NFS, SharedMountPoint,CLVM, or RBD. For vSphere choose
+ either VMFS (iSCSI or FiberChannel) or NFS. The remaining fields in the screen vary
+ depending on what you choose here.</para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </orderedlist>
</section>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c7faa62/docs/en-US/images/edit-traffic-type.png
----------------------------------------------------------------------
diff --git a/docs/en-US/images/edit-traffic-type.png b/docs/en-US/images/edit-traffic-type.png
new file mode 100644
index 0000000..16cda94
Binary files /dev/null and b/docs/en-US/images/edit-traffic-type.png differ
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c7faa62/docs/en-US/images/traffic-type.png
----------------------------------------------------------------------
diff --git a/docs/en-US/images/traffic-type.png b/docs/en-US/images/traffic-type.png
new file mode 100644
index 0000000..10d5ddb
Binary files /dev/null and b/docs/en-US/images/traffic-type.png differ
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c7faa62/docs/en-US/vmware-cluster-config-dvswitch.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/vmware-cluster-config-dvswitch.xml b/docs/en-US/vmware-cluster-config-dvswitch.xml
index 311673a..2aeea2a 100644
--- a/docs/en-US/vmware-cluster-config-dvswitch.xml
+++ b/docs/en-US/vmware-cluster-config-dvswitch.xml
@@ -75,27 +75,52 @@
<phrase>vds-name.png: Name of the dvSwitch as specified in the vCenter.</phrase>
</textobject>
</mediaobject>
- <para>Use this VDS name when you specify the switch name in the traffic label while creating the
- zone. Traffic label format is [["Name of vSwitch/dvSwitch/EthernetPortProfile"][,"VLAN
- ID"[,"vSwitch Type"]]]</para>
+ <para>Use this VDS name in the following:</para>
+ <itemizedlist>
+ <listitem>
+ <para>The switch name in the Edit traffic label dialog while configuring a public and guest
+ traffic during zone creation.</para>
+ <para>During a zone creation, ensure that you select VMware vNetwork Distributed Virtual Switch
+ when you configure guest and public traffic type.</para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="./images/traffic-type.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>traffic-type.png: virtual switch type</phrase>
+ </textobject>
+ </mediaobject>
+ </listitem>
+ <listitem>
+ <para>The Public Traffic vSwitch Type field when you add a VMware VDS-enabled cluster. </para>
+ </listitem>
+ <listitem>
+ <para>The switch name in the traffic label while updating the switch type in a zone.</para>
+ </listitem>
+ </itemizedlist>
+ <para>Traffic label format in the last case is [["Name of
+ vSwitch/dvSwitch/EthernetPortProfile"][,"VLAN ID"[,"vSwitch Type"]]]</para>
<para>The possible values for traffic labels are:</para>
<itemizedlist>
- <listitem><para>empty string</para></listitem>
- <listitem><para>dvSwitch0</para></listitem>
- <listitem><para> dvSwitch0,200</para></listitem>
- <listitem><para>dvSwitch1,300,vmwaredvs</para></listitem>
- <listitem><para>myEthernetPortProfile,,nexusdvs</para></listitem>
- <listitem><para>dvSwitch0,,vmwaredvs</para></listitem>
+ <listitem>
+ <para>empty string</para>
+ </listitem>
+ <listitem>
+ <para>dvSwitch0</para>
+ </listitem>
+ <listitem>
+ <para> dvSwitch0,200</para>
+ </listitem>
+ <listitem>
+ <para>dvSwitch1,300,vmwaredvs</para>
+ </listitem>
+ <listitem>
+ <para>myEthernetPortProfile,,nexusdvs</para>
+ </listitem>
+ <listitem>
+ <para>dvSwitch0,,vmwaredvs</para>
+ </listitem>
</itemizedlist>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="./images/traffic-label.png"/>
- </imageobject>
- <textobject>
- <phrase>traffic-label.png: Traffic label specified while zone creation.</phrase>
- </textobject>
- </mediaobject>
<informaltable frame="all">
<tgroup cols="3" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
@@ -124,10 +149,10 @@
<row>
<entry><para>2</para></entry>
<entry><para>VLAN ID to be used for this traffic wherever applicable.</para></entry>
- <entry><para>This field would be used for only public traffic as of now. In case of guest traffic this
- field would be ignored and could be left empty for guest traffic. By default empty
- string would be assumed which translates to untagged VLAN for that specific traffic
- type.</para></entry>
+ <entry><para>This field would be used for only public traffic as of now. In case of
+ guest traffic this field would be ignored and could be left empty for guest traffic.
+ By default empty string would be assumed which translates to untagged VLAN for that
+ specific traffic type.</para></entry>
</row>
<row>
<entry><para>3</para></entry>
@@ -153,6 +178,7 @@
</tbody>
</tgroup>
</informaltable>
+
</section>
<section id="enable-dvswitch">
<title>Enabling Virtual Distributed Switch in &PRODUCT;</title>
@@ -171,6 +197,10 @@
<section id="config-dvswitch">
<title>Configuring Distributed Virtual Switch in &PRODUCT;</title>
<para>You can configure VDS by adding the necessary resources while a zone is created.</para>
+ <para>Alternatively, at the cluster level, you can create an additional cluster with VDS enabled
+ in the existing zone. Use the Add Cluster option. For information as given in <xref
+ linkend="add-clusters-vsphere"/>.</para>
+ <para>In both these cases, you must specify the following parameters to configure VDS:</para>
<mediaobject>
<imageobject>
<imagedata fileref="./images/dvSwitch-config.png"/>
@@ -179,10 +209,6 @@
<phrase>dvSwitchConfig.png: Configuring dvSwitch</phrase>
</textobject>
</mediaobject>
- <para>Alternatively, you can create an additional cluster with VDS enabled in the existing zone.
- Use the Add Cluster option. For information as given in <xref linkend="add-clusters-vsphere"
- />.</para>
- <para>In both these cases, you must specify the following parameters to configure VDS:</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
<colspec colname="c1"/>
[39/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Automation - Portable Ip feature test cases
Signed-off-by: venkataswamybabu budumuru <ve...@citrix.com>
(cherry picked from commit 23c759ec356d90801b7117cbb4b44e730bcad374)
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ae1cebf4
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ae1cebf4
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ae1cebf4
Branch: refs/heads/kvm-vnc-listen
Commit: ae1cebf4e92474d4bbe24890cb08d370b50dddec
Parents: f946747
Author: Gaurav Aradhye <ga...@clogeny.com>
Authored: Fri Sep 13 00:32:45 2013 -0400
Committer: venkataswamybabu budumuru <ve...@citrix.com>
Committed: Fri Sep 13 17:35:08 2013 +0530
----------------------------------------------------------------------
test/integration/component/test_portable_ip.py | 1309 +++++++++++++++++++
tools/marvin/marvin/integration/lib/base.py | 4 +-
tools/marvin/marvin/integration/lib/common.py | 35 +
3 files changed, 1347 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ae1cebf4/test/integration/component/test_portable_ip.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_portable_ip.py b/test/integration/component/test_portable_ip.py
new file mode 100644
index 0000000..55de60d
--- /dev/null
+++ b/test/integration/component/test_portable_ip.py
@@ -0,0 +1,1309 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+""" Tests for Portable public IP Ranges feature
+"""
+from marvin.cloudstackTestCase import *
+from marvin.cloudstackAPI import *
+from marvin.cloudstackException import cloudstackAPIException
+from marvin.integration.lib.utils import *
+from marvin.integration.lib.base import *
+from marvin.integration.lib.common import *
+from netaddr import *
+from marvin.remoteSSHClient import remoteSSHClient
+
+from nose.plugins.attrib import attr
+
+class Services:
+ """Test Multiple IP Ranges
+ """
+ def __init__(self):
+ self.services = {
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "test",
+ # Random characters are appended for unique
+ # username
+ "password": "password",
+ },
+ "service_offering": {
+ "name": "Tiny Instance",
+ "displaytext": "Tiny Instance",
+ "cpunumber": 1,
+ "cpuspeed": 200, # in MHz
+ "memory": 256, # In MBs
+ },
+ "network_offering": {
+ "name": 'Network offering portable ip',
+ "displaytext": 'Network offering-VR services',
+ "guestiptype": 'Isolated',
+ "supportedservices": 'Dhcp,Dns,SourceNat,PortForwarding,Vpn,Firewall,Lb,UserData,StaticNat',
+ "traffictype": 'GUEST',
+ "availability": 'Optional',
+ "serviceProviderList": {
+ "Dhcp": 'VirtualRouter',
+ "Dns": 'VirtualRouter',
+ "SourceNat": 'VirtualRouter',
+ "PortForwarding": 'VirtualRouter',
+ "Vpn": 'VirtualRouter',
+ "Firewall": 'VirtualRouter',
+ "Lb": 'VirtualRouter',
+ "UserData": 'VirtualRouter',
+ "StaticNat": 'VirtualRouter',
+ },
+ },
+ "network": {
+ "name": "Test Network - Portable IP",
+ "displaytext": "Test Network - Portable IP",
+ },
+ "disk_offering": {
+ "displaytext": "Small Disk",
+ "name": "Small Disk",
+ "disksize": 1
+ },
+ "natrule": {
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": "TCP",
+ "cidr" : '0.0.0.0/0',
+ },
+ "small":
+ # Create a small virtual machine instance with disk offering
+ {
+ "displayname": "testserver",
+ "username": "root", # VM creds for SSH
+ "password": "password",
+ "ssh_port": 22,
+ "hypervisor": 'XenServer',
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": 'TCP',
+ },
+ "ostype": 'CentOS 5.3 (64-bit)',
+ }
+
+class TestCreatePortablePublicIpRanges(cloudstackTestCase):
+ """Test Create Portable IP Ranges
+ """
+
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestCreatePortablePublicIpRanges, cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.region = get_region(cls.api_client, cls.services)
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["domainid"] = cls.domain.id
+ cls.services["zoneid"] = cls.zone.id
+ cls.services["regionid"] = cls.region.id
+
+ cls._cleanup = []
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+
+ self.cleanup = []
+ return
+
+ def tearDown(self):
+ try:
+ #Clean up, terminate the resources created
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ @attr(tags=["advanced"])
+ def test_create_portable_ip_range(self):
+ """Test create new portable ip range
+ """
+ # 1. Create new portable ip range with root admin api
+ # 2. Portable ip range should be created successfully
+
+ portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ self.debug(portable_ip_range_services)
+
+ if portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ portable_ip_range_services["regionid"] = self.region.id
+
+ self.debug("Creating new portable IP range with startip:%s and endip:%s" %
+ (str(portable_ip_range_services["startip"]),
+ str(portable_ip_range_services["endip"])))
+
+ #create new portable ip range
+ new_portable_ip_range = PortablePublicIpRange.create(self.apiclient,
+ portable_ip_range_services)
+
+ self.debug("Created new portable IP range with startip:%s and endip:%s and id:%s" %
+ (new_portable_ip_range.startip,
+ new_portable_ip_range.endip,
+ new_portable_ip_range.id))
+
+ self.cleanup.append(new_portable_ip_range)
+
+ return
+
+ @attr(tags=["advanced"])
+ def test_create_portable_ip_range_non_root_admin(self):
+ """Test create new portable ip range with non admin root account
+ """
+ # 1. Create new portable ip range with non root admin api client
+ # 2. Portable ip range should not be created
+
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ domainid=self.domain.id
+ )
+
+ self.api_client_user = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain
+ )
+
+ portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ if portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ portable_ip_range_services["regionid"] = self.region.id
+
+ self.debug("Trying to create portable ip range with non root-admin api client, should raise exception")
+ with self.assertRaises(Exception):
+ PortablePublicIpRange.create(self.api_client_user,
+ portable_ip_range_services)
+
+ return
+
+ @attr(tags=["advanced"])
+ def test_create_portable_ip_range_invalid_region(self):
+ """Test create portable ip range with invalid region id"""
+
+ # 1. Try to create new portable ip range with invalid region id
+ # 2. Portable ip range creation should fail
+
+ portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ if portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ portable_ip_range_services["regionid"] = -1
+
+ #create new portable ip range
+ self.debug("Trying to create portable ip range with wrong region id")
+
+ with self.assertRaises(Exception):
+ PortablePublicIpRange.create(self.apiclient,
+ portable_ip_range_services)
+
+ return
+
+class TestDeletePortablePublicIpRanges(cloudstackTestCase):
+ """Test delete Portable IP Ranges
+ """
+
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestDeletePortablePublicIpRanges, cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.region = get_region(cls.api_client, cls.services)
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["domainid"] = cls.domain.id
+ cls.services["zoneid"] = cls.zone.id
+ cls.services["regionid"] = cls.region.id
+
+ cls._cleanup = []
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+
+ portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ if portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ portable_ip_range_services["regionid"] = self.region.id
+
+ self.debug("Creating new portable IP range with startip:%s and endip:%s" %
+ (str(portable_ip_range_services["startip"]),
+ str(portable_ip_range_services["endip"])))
+
+ #create new portable ip range
+ self.portable_ip_range = PortablePublicIpRange.create(self.apiclient,
+ portable_ip_range_services)
+
+ self.debug("Created new portable IP range with startip:%s and endip:%s and id:%s" %
+ (self.portable_ip_range.startip,
+ self.portable_ip_range.endip,
+ self.portable_ip_range.id))
+
+ self.cleanup = []
+ return
+
+ def tearDown(self):
+ try:
+ #Clean up, terminate the resources created
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ @attr(tags=["advanced"])
+ def test_delete_portable_ip_range(self):
+ """Test delete ip range
+ """
+ # 1. Try to delete the created range with root admin api client
+ # 2. Portable range should be deleted successfully
+
+ self.debug("Deleting portable ip range with root-admin api")
+
+ self.portable_ip_range.delete(self.apiclient)
+
+ self.debug("Deleted portable ip range")
+
+ return
+
+ @attr(tags=["advanced"])
+ def test_delete_portable_ip_range_non_root_admin(self):
+ """Test delete ip range - non admin root
+ """
+ # 1. Try to delete the created range with non root admin api client
+ # 2. Portable range deletion should fail
+
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ domainid=self.domain.id
+ )
+
+ self.cleanup.append(self.account)
+
+ self.api_client_user = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain
+ )
+
+ with self.assertRaises(Exception):
+ self.portable_ip_range.delete(self.api_client_user)
+
+ self.portable_ip_range.delete(self.apiclient)
+ return
+
+ @attr(tags=["advanced"])
+ def test_delete_portable_ip_range_in_use(self):
+ """Test delete ip range
+ """
+ # 1. Associate a portable ip
+ # 2. Try to delete the portable ip range with root admin api client
+ # 3. Portable ip range should not be deleted unless currently used ip is disassociated
+
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ domainid=self.domain.id
+ )
+
+ self.cleanup.append(self.account)
+
+ self.debug(
+ "Creating n/w offering"
+ )
+ self.network_offering = NetworkOffering.create(
+ self.apiclient,
+ self.services["network_offering"],
+ conservemode=False
+ )
+
+ self.debug("Created n/w offering with ID: %s" %
+ self.network_offering.id)
+ # Enable Network offering
+ self.network_offering.update(self.apiclient, state='Enabled')
+ self.debug("Creating network")
+
+ self.network = Network.create(
+ self.apiclient,
+ self.services["network"],
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ networkofferingid=self.network_offering.id,
+ zoneid=self.zone.id
+ )
+
+ self.debug("Created network with id: %s" % self.network.id)
+ self.debug("Associating public ip address with network: %s with isportable=True" % self.network.id)
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("Associated public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ with self.assertRaises(Exception):
+ self.debug("Trying to Delete portable ip range with root-admin api, this should fail")
+ self.portable_ip_range.delete(self.apiclient)
+
+ self.debug("Deleting portable ip range failed")
+ self.debug("Disassociating portable ip")
+ portableip.delete(self.apiclient)
+
+ self.debug("Deleting portable ip range")
+ self.portable_ip_range.delete(self.apiclient)
+
+ return
+
+class TestListPortablePublicIpRanges(cloudstackTestCase):
+ """Test List Portable IP Ranges
+ """
+
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestListPortablePublicIpRanges, cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.region = get_region(cls.api_client, cls.services)
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["domainid"] = cls.domain.id
+ cls.services["zoneid"] = cls.zone.id
+ cls.services["regionid"] = cls.region.id
+
+ cls._cleanup = []
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+
+ #create new portable ip range
+ self.portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ if self.portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ self.portable_ip_range_services["regionid"] = self.region.id
+
+ self.debug("Creating new portable IP range with startip:%s and endip:%s" %
+ (str(self.portable_ip_range_services["startip"]),
+ str(self.portable_ip_range_services["endip"])))
+
+ #create new portable ip range
+ self.portable_ip_range = PortablePublicIpRange.create(self.apiclient,
+ self.portable_ip_range_services)
+
+ self.debug("Created new portable IP range with startip:%s and endip:%s and id:%s" %
+ (self.portable_ip_range.startip,
+ self.portable_ip_range.endip,
+ self.portable_ip_range.id))
+
+ self.cleanup = [self.portable_ip_range, ]
+ return
+
+ def tearDown(self):
+ try:
+ #Clean up, terminate the resources created
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ @attr(tags=["advanced"])
+ def test_list_portable_ip_range(self):
+ """Test list portable ip ranges
+ """
+ # 1. Create new portable ip range
+ # 2. Try to list ip ranges with root admin api client
+ # 3. Portable ip ranges should list properly
+
+ list_portable_ip_range = PortablePublicIpRange.list(self.apiclient,
+ id=self.portable_ip_range.id)
+
+ self.assertEqual(
+ isinstance(list_portable_ip_range, list),
+ True,
+ "List portable IP ranges should not return an empty response"
+ )
+
+ portable_ip_range = list_portable_ip_range[0]
+
+ self.assertEqual(str(portable_ip_range.startip), str(self.portable_ip_range_services["startip"]),
+ "Listed startip not matching with the startip of created public ip range")
+
+ self.assertEqual(str(portable_ip_range.endip), str(self.portable_ip_range_services["endip"]),
+ "Listed endip not matching with the endip of created public ip range")
+
+ self.assertEqual(str(portable_ip_range.gateway), str(self.portable_ip_range_services["gateway"]),
+ "Listed gateway not matching with the gateway of created public ip range")
+
+ self.assertEqual(str(portable_ip_range.netmask), str(self.portable_ip_range_services["netmask"]),
+ "Listed netmask not matching with the netmask of created public ip range")
+ return
+
+ @attr(tags=["advanced"])
+ def test_list_portable_ip_range_non_root_admin(self):
+ """Test list portable ip ranges with non admin root account
+ """
+ # 1. Create new portable ip range
+ # 2. Try to list ip ranges with root non admin api client
+ # 3. Portable ip ranges listing should fail
+
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ domainid=self.domain.id
+ )
+
+ self.cleanup.append(self.account)
+
+ self.api_client_user = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain
+ )
+
+ self.debug("Trying to list portable ip ranges with non root-admin api, should raise exception")
+ with self.assertRaises(Exception):
+ PortablePublicIpRange.list(self.api_client_user,
+ id=self.portable_ip_range.id)
+ return
+
+class TestAssociatePublicIp(cloudstackTestCase):
+ """Test associate Portable IP/ non portable public ip
+ """
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestAssociatePublicIp, cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.region = get_region(cls.api_client, cls.services)
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["domainid"] = cls.domain.id
+ cls.services["zoneid"] = cls.zone.id
+ cls.services["regionid"] = cls.region.id
+
+ template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+ # Set Zones and disk offerings
+ cls.services["small"]["zoneid"] = cls.zone.id
+ cls.services["small"]["template"] = template.id
+
+ cls.account = Account.create(
+ cls.api_client,
+ cls.services["account"],
+ domainid=cls.domain.id,
+ admin=True
+ )
+
+ cls.network_offering = NetworkOffering.create(
+ cls.api_client,
+ cls.services["network_offering"],
+ conservemode=False
+ )
+
+ # Enable Network offering
+ cls.network_offering.update(cls.api_client, state='Enabled')
+
+ cls.network = Network.create(
+ cls.api_client,
+ cls.services["network"],
+ accountid=cls.account.name,
+ domainid=cls.account.domainid,
+ networkofferingid=cls.network_offering.id,
+ zoneid=cls.zone.id
+ )
+
+ cls._cleanup = [cls.account]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Disable Network offering
+ cls.network_offering.update(cls.api_client, state='Disabled')
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+
+ self.cleanup = []
+
+ portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ if portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ portable_ip_range_services["regionid"] = self.region.id
+
+ self.debug("Creating new portable IP range with startip:%s and endip:%s" %
+ (str(portable_ip_range_services["startip"]),
+ str(portable_ip_range_services["endip"])))
+
+ #create new portable ip range
+ self.portable_ip_range = PortablePublicIpRange.create(self.apiclient,
+ portable_ip_range_services)
+
+ self.debug("Created new portable IP range with startip:%s and endip:%s and id:%s" %
+ (self.portable_ip_range.startip,
+ self.portable_ip_range.endip,
+ self.portable_ip_range.id))
+
+ self.cleanup.append(self.portable_ip_range)
+
+ return
+
+ def tearDown(self):
+ try:
+ #Clean up, terminate the resources created
+ self.network_offering.update(self.apiclient, state='Disabled')
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ @attr(tags=["advanced"])
+ def test_associate_ip_address(self):
+ """ Test assocoate public ip address
+ """
+
+ # 1. Create new portable ip range
+ # 2. Create a network and associate public ip without mentioning (isportable)
+ # 3. Create a network and associate public ip with isportable=False
+ # 4. Create a network and associate public ip with isPortable=True
+ # 5. All three public ip associations should succeed
+
+ self.debug("Associating default public ip address with network: %s" % self.network.id)
+ publicipaddress = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id
+ )
+
+ self.debug("Associated default public ip address: %s" % publicipaddress.ipaddress.ipaddress)
+
+
+
+ self.debug("Associating public ip address with network: %s with isportable=False" % self.network.id)
+ publicipaddressnotportable = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=False
+ )
+
+ self.debug("Associated public ip address (not portable): %s" % publicipaddressnotportable.ipaddress.ipaddress)
+ publicipaddressnotportable.delete(self.apiclient)
+
+ self.debug("Associating public ip address with network: %s with isportable=True" % self.network.id)
+ publicipaddressportable = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("Associated public ip address (portable): %s" % publicipaddressportable.ipaddress.ipaddress)
+ publicipaddressportable.delete(self.apiclient)
+
+ return
+
+ @attr(tags=["advanced"])
+ def test_associate_ip_address_invalid_zone(self):
+ """ Test Associate IP with invalid zone id
+ """
+ # 1. Create new portable ip range
+ # 2. try to associate a portable ip with invalid region id
+ # 3. IP association should fail
+
+ self.debug("Trying to associate portable public ip with invalid zone id, this should fail")
+
+ with self.assertRaises(Exception):
+ PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid = -1,
+ domainid=self.account.domainid,
+ regionid = self.region.id,
+ isportable=True
+ )
+ self.debug("Associating ip address failed")
+ return
+
+ @unittest.skip("SSH failing to portable ip, need to investigate the issue")
+ @attr(tags=["advanced"])
+ def test_associate_ip_address_services_enable_disable(self):
+ """ Test enabling and disabling NAT, Firewall services on portable ip
+ """
+ # 1. Create new portable ip range
+ # 2. Associate a portable ip
+ # 3. Enable NAT and Firewall rules on this portable ip
+ # 4. Disable NAT and Firewall rules created
+ # 5. Enabling and disabling ofthe rules should be successful
+
+ self.service_offering = ServiceOffering.create(
+ self.apiclient,
+ self.services["service_offering"]
+ )
+
+ self.cleanup.append(self.service_offering)
+
+ try:
+
+ self.debug("Deploying Virtual Machine")
+ self.virtual_machine = VirtualMachine.create(
+ self.apiclient,
+ self.services["small"],
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ serviceofferingid=self.service_offering.id,
+ networkids = [self.network.id],
+ mode=self.services['mode']
+ )
+ self.debug("Created virtual machine instance: %s with ssh_ip: %s" %
+ (self.virtual_machine.id, self.virtual_machine.ssh_ip))
+
+ except Exception as e:
+ self.fail("Exception while deploying vm : %s" % e)
+
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("created public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ # Open up firewall port for SSH
+ self.debug("Opening firewall on the portable public ip")
+ fw_rule = FireWallRule.create(
+ self.apiclient,
+ ipaddressid=portableip.ipaddress.id,
+ protocol=self.services["natrule"]["protocol"],
+ cidrlist=[self.services["natrule"]["cidr"]],
+ startport=self.services["natrule"]["publicport"],
+ endport=self.services["natrule"]["publicport"]
+ )
+
+ #Create NAT rule
+ self.debug("Creating NAT rule on the portable public ip")
+ nat_rule = NATRule.create(
+ self.apiclient,
+ self.virtual_machine,
+ self.services["natrule"],
+ portableip.ipaddress.id
+ )
+
+ try:
+
+ self.debug("Trying to SSH to ip: %s" % portableip.ipaddress.ipaddress)
+
+ remoteSSHClient(
+ portableip.ipaddress.ipaddress,
+ self.services['natrule']["publicport"],
+ self.virtual_machine.username,
+ self.virtual_machine.password
+ )
+ except Exception as e:
+ self.fail("Exception while SSHing : %s" % e)
+
+ self.debug("Deleting firewall rule")
+ fw_rule.delete(self.apiclient)
+
+ self.debug("Deleting NAT rule")
+ nat_rule.delete(self.apiclient)
+
+ self.debug("disassocoating portable ip: %s" % portableip.ipaddress.ipaddress)
+ portableip.delete(self.apiclient)
+ return
+
+ @attr(tags=["advanced"])
+ def test_associate_ip_address_no_free_ip(self):
+ """ Test assocoate public ip address
+ """
+
+ # 1. Create new portable ip range
+ # 2. Create a network and associate all available portbale public ips
+ # 5. Try to associate portable ip, it should fail
+
+ associatedipaddresses = []
+
+ startip_int = int(IPAddress(self.portable_ip_range.startip))
+ endip_int = int(IPAddress(self.portable_ip_range.endip))
+ totalportableips = ((endip_int - startip_int) + 1)
+
+ self.debug(totalportableips)
+
+ for x in range(0, totalportableips):
+
+ self.debug("Associating public ip address with network: %s with isportable=True" % self.network.id)
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ associatedipaddresses.append(portableip)
+ self.debug("Associated public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ self.debug("Trying to associate portable public ip when no free ips available, this should fail")
+ with self.assertRaises(Exception):
+ PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+
+ self.debug("Associating portable ip address failed")
+
+ self.debug("Disassociating previously associated ip addresses")
+
+ for x in range(0, totalportableips):
+ associatedipaddresses[x].delete(self.apiclient)
+
+ return
+
+class TestDisassociatePublicIp(cloudstackTestCase):
+ """Test Disassociate Portable IP/ non portable IP
+ """
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestDisassociatePublicIp, cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.region = get_region(cls.api_client, cls.services)
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["domainid"] = cls.domain.id
+ cls.services["zoneid"] = cls.zone.id
+ cls.services["regionid"] = cls.region.id
+
+ template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+ # Set Zones and disk offerings
+ cls.services["small"]["zoneid"] = cls.zone.id
+ cls.services["small"]["template"] = template.id
+
+ cls.account = Account.create(
+ cls.api_client,
+ cls.services["account"],
+ domainid=cls.domain.id,
+ admin=True
+ )
+
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+
+ cls.network_offering = NetworkOffering.create(
+ cls.api_client,
+ cls.services["network_offering"],
+ conservemode=False
+ )
+
+ # Enable Network offering
+ cls.network_offering.update(cls.api_client, state='Enabled')
+
+ cls.network = Network.create(
+ cls.api_client,
+ cls.services["network"],
+ accountid=cls.account.name,
+ domainid=cls.account.domainid,
+ networkofferingid=cls.network_offering.id,
+ zoneid=cls.zone.id
+ )
+
+ cls.virtual_machine = VirtualMachine.create(
+ cls.api_client,
+ cls.services["small"],
+ accountid=cls.account.name,
+ domainid=cls.account.domainid,
+ serviceofferingid=cls.service_offering.id,
+ networkids = [cls.network.id],
+ mode=cls.services['mode']
+ )
+
+ cls._cleanup = [
+ cls.account,
+ cls.service_offering,
+ cls.network_offering
+ ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Disable Network offering
+ cls.network_offering.update(cls.api_client, state='Disabled')
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.cleanup = []
+
+ portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ if portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ portable_ip_range_services["regionid"] = self.region.id
+
+ self.debug("Creating new portable IP range with startip:%s and endip:%s" %
+ (str(portable_ip_range_services["startip"]),
+ str(portable_ip_range_services["endip"])))
+
+ #create new portable ip range
+ new_portable_ip_range = PortablePublicIpRange.create(self.apiclient,
+ portable_ip_range_services)
+
+ self.debug("Created new portable IP range with startip:%s and endip:%s and id:%s" %
+ (new_portable_ip_range.startip,
+ new_portable_ip_range.endip,
+ new_portable_ip_range.id))
+
+ self.cleanup.append(new_portable_ip_range)
+
+ return
+
+ def tearDown(self):
+ try:
+ #Clean up, terminate the resources created
+ self.network_offering.update(self.apiclient, state='Disabled')
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ @attr(tags=["advanced"])
+ def test_disassociate_ip_address_no_services(self):
+ """ Test disassociating portable ip
+ """
+ # 1. Create new portable ip range
+ # 2. Associate a portable ip
+ # 3. Disassociate the portable ip with root admin api client
+ # 4. Disassociating should be successful
+
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("created public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ try:
+ self.debug("Disassociating portable ip: %s with id: %s" %
+ (portableip.ipaddress.ipaddress, portableip.ipaddress.id)
+ )
+
+ portableip.delete(self.apiclient)
+
+ except Exception as e:
+ raise Exception("Exception while disassociating portable ip: %s" % e)
+
+ return
+
+ @attr(tags=["advanced"])
+ def test_disassociate_ip_address_services_enabled(self):
+ """ Test disassociating portable ip
+ """
+ # 1. Create new portable ip range
+ # 2. Associate a portable ip
+ # 3. Enable NAT and Firewall services on this portable IP
+ # 4. Disassociate the portable ip with root admin api client
+ # 5. Disassociating should be successful
+
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("created public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ # Open up firewall port for SSH
+ self.debug("Opening firewall on the portable public ip")
+ FireWallRule.create(
+ self.apiclient,
+ ipaddressid=portableip.ipaddress.id,
+ protocol=self.services["natrule"]["protocol"],
+ cidrlist=[self.services["natrule"]["cidr"]],
+ startport=self.services["natrule"]["publicport"],
+ endport=self.services["natrule"]["publicport"]
+ )
+
+ #Create NAT rule
+ self.debug("Creating NAT rule on the portable public ip")
+ NATRule.create(
+ self.apiclient,
+ self.virtual_machine,
+ self.services["natrule"],
+ portableip.ipaddress.id
+ )
+
+ try:
+ self.debug("Disassociating portable ip: %s with id: %s" %
+ (portableip.ipaddress.ipaddress, portableip.ipaddress.id)
+ )
+
+ portableip.delete(self.apiclient)
+
+ except Exception as e:
+ raise Exception("Exception while disassociating portable ip: %s" % e)
+
+ return
+
+ @attr(tags=["advanced"])
+ def test_disassociate_ip_address_other_account(self):
+ """ Test disassociating portable IP with non-owner account
+ """
+
+ # 1. Create new portable ip range
+ # 2. Associate a portable ip
+ # 3. Try to Disassociate the portable ip with an account which is not owner of portable ip
+ # 4. Disassociating should fail
+
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("created public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ self.user_account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ domainid=self.domain.id
+ )
+
+ self.api_client_user = self.testClient.createUserApiClient(
+ UserName=self.user_account.name,
+ DomainName=self.user_account.domain
+ )
+ try:
+ self.debug("Disassociating portable ip: %s with id: %s with other account :%s" %
+ (portableip.ipaddress.ipaddress, portableip.ipaddress.id, self.user_account.name)
+ )
+
+ with self.assertRaises(Exception):
+ portableip.delete(self.api_client_user)
+
+ except Exception as e:
+ raise Exception("Exception while disassociating portable ip: %s" % e)
+
+ portableip.delete(self.apiclient)
+ return
+
+class TestDeleteAccount(cloudstackTestCase):
+ """ Test Delete Account having portable ip
+ """
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestDeleteAccount, cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.region = get_region(cls.api_client, cls.services)
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["domainid"] = cls.domain.id
+ cls.services["zoneid"] = cls.zone.id
+ cls.services["regionid"] = cls.region.id
+ template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+ # Set Zones and disk offerings
+ cls.services["small"]["zoneid"] = cls.zone.id
+ cls.services["small"]["template"] = template.id
+
+ cls._cleanup = []
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ domainid=self.domain.id,
+ admin=True
+ )
+ self.cleanup = []
+
+ portable_ip_range_services = get_portable_ip_range_services(self.config)
+
+ if portable_ip_range_services is None:
+ self.skipTest('Failed to read config values related to portable ip range')
+
+ portable_ip_range_services["regionid"] = self.region.id
+
+ self.debug("Creating new portable IP range with startip:%s and endip:%s" %
+ (str(portable_ip_range_services["startip"]),
+ str(portable_ip_range_services["endip"])))
+
+ #create new portable ip range
+ new_portable_ip_range = PortablePublicIpRange.create(self.apiclient,
+ portable_ip_range_services)
+
+ self.debug("Created new portable IP range with startip:%s and endip:%s and id:%s" %
+ (new_portable_ip_range.startip,
+ new_portable_ip_range.endip,
+ new_portable_ip_range.id))
+
+ self.cleanup.append(new_portable_ip_range)
+
+ self.debug(
+ "Creating n/w offering"
+ )
+ self.network_offering = NetworkOffering.create(
+ self.apiclient,
+ self.services["network_offering"],
+ conservemode=False
+ )
+
+ self.debug("Created n/w offering with ID: %s" %
+ self.network_offering.id)
+ # Enable Network offering
+ self.network_offering.update(self.apiclient, state='Enabled')
+ self.debug("Creating network")
+
+ self.network = Network.create(
+ self.apiclient,
+ self.services["network"],
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ networkofferingid=self.network_offering.id,
+ zoneid=self.zone.id
+ )
+
+ self.cleanup.append(self.network_offering)
+
+ self.debug("Created network with id: %s" % self.network.id)
+ return
+
+ def tearDown(self):
+ try:
+ # Disable Network offering
+ self.network_offering.update(self.apiclient, state='Enabled')
+
+ #Clean up, terminate the resources created
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ @attr(tags=["advanced"])
+ def test_delete_account_services_disabled(self):
+ """ test delete account with portable ip with no services enabled
+ """
+ # 1. Associate a portable ip to an account
+ # 2. Delete account
+ # 3. Account should get deleted successfully
+
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("created public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ self.debug("Deleting account: %s :" % self.account.name)
+
+ self.account.delete(self.apiclient)
+
+ self.debug("Account deleted successfully")
+
+ with self.assertRaises(Exception):
+ PublicIPAddress.list(self.apiclient,
+ id=portableip.ipaddress.id)
+
+ return
+
+ @attr(tags=["advanced"])
+ def test_delete_account_services_enabled(self):
+ """ test delete account with portable ip with PF and firewall services enabled
+ """
+ # 1. Associate a portable ip to an account
+ # 2. Enabled PF and Firewall rules on this IP
+ # 3. Delete account
+ # 4. Account should get deleted successfully
+
+ self.service_offering = ServiceOffering.create(
+ self.apiclient,
+ self.services["service_offering"]
+ )
+
+ self.cleanup.append(self.service_offering)
+
+ self.debug("Deploying Virtual Machine")
+ self.virtual_machine = VirtualMachine.create(
+ self.apiclient,
+ self.services["small"],
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ serviceofferingid=self.service_offering.id,
+ mode=self.services['mode']
+ )
+ self.debug("Created virtual machine instance: %s" % self.virtual_machine.id)
+
+ portableip = PublicIPAddress.create(
+ self.apiclient,
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ networkid=self.network.id,
+ isportable=True
+ )
+ self.debug("created public ip address (portable): %s" % portableip.ipaddress.ipaddress)
+
+ # Open up firewall port for SSH
+ self.debug("Opening firewall on the portable public ip")
+ FireWallRule.create(
+ self.apiclient,
+ ipaddressid=portableip.ipaddress.id,
+ protocol=self.services["natrule"]["protocol"],
+ cidrlist=[self.services["natrule"]["cidr"]],
+ startport=self.services["natrule"]["publicport"],
+ endport=self.services["natrule"]["publicport"]
+ )
+
+ #Create NAT rule
+ self.debug("Creating NAT rule on the portable public ip")
+ NATRule.create(
+ self.apiclient,
+ self.virtual_machine,
+ self.services["natrule"],
+ portableip.ipaddress.id
+ )
+
+ self.debug("Deleting account: %s :" % self.account.name)
+
+ self.account.delete(self.apiclient)
+
+ self.debug("Trying to list the ip address associated with deleted account, \
+ should throw exception")
+
+ with self.assertRaises(Exception):
+ PublicIPAddress.list(self.apiclient,
+ id=portableip.ipaddress.id)
+
+ return
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ae1cebf4/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index fa4cc82..9e46065 100755
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -2360,7 +2360,9 @@ class PortablePublicIpRange:
cmd.startip = services["startip"]
cmd.endip = services["endip"]
cmd.regionid = services["regionid"]
- cmd.vlan = services["vlan"]
+
+ if "vlan" in services:
+ cmd.vlan = services["vlan"]
return PortablePublicIpRange(apiclient.createPortableIpRange(cmd).__dict__)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ae1cebf4/tools/marvin/marvin/integration/lib/common.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/common.py b/tools/marvin/marvin/integration/lib/common.py
index 6ffe951..e895885 100644
--- a/tools/marvin/marvin/integration/lib/common.py
+++ b/tools/marvin/marvin/integration/lib/common.py
@@ -686,3 +686,38 @@ def get_resource_type(resource_id):
}
return lookup[resource_id]
+
+def get_portable_ip_range_services(config):
+ """ Reads config values related to portable ip and fills up
+ services accordingly"""
+
+ services = {}
+ attributeError = False
+
+ if config.portableIpRange.startip:
+ services["startip"] = config.portableIpRange.startip
+ else:
+ attributeError = True
+
+ if config.portableIpRange.endip:
+ services["endip"] = config.portableIpRange.endip
+ else:
+ attributeError = True
+
+ if config.portableIpRange.netmask:
+ services["netmask"] = config.portableIpRange.netmask
+ else:
+ attributeError = True
+
+ if config.portableIpRange.gateway:
+ services["gateway"] = config.portableIpRange.gateway
+ else:
+ attributeError = True
+
+ if config.portableIpRange.vlan:
+ services["vlan"] = config.portableIpRange.vlan
+
+ if attributeError:
+ services = None
+
+ return services
[49/50] [abbrv] Merge branch 'master' into kvm-vnc-listen
Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/895c51d0/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index e253cb5,94ee9ae..4916b7b
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@@ -2634,23 -2881,7 +2882,22 @@@ ServerResource
try {
conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
ifaces = getInterfaces(conn, vmName);
- dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName
- .getBytes()));
+ dm = conn.domainLookupByName(vmName);
+ /*
+ We replace the private IP address with the address of the destination host.
+ This is because the VNC listens on the private IP address of the hypervisor,
+ but that address is ofcourse different on the target host.
+
+ MigrateCommand.getDestinationIp() returns the private IP address of the target
+ hypervisor. So it's safe to use.
+
+ The Domain.migrate method from libvirt supports passing a different XML
+ description for the instance to be used on the target host.
+
- This is supported by libvirt-java from version 0.50.0
++ This is supported by libvirt-java from version 0.5.0
+ */
+ xmlDesc = dm.getXMLDesc(0).replace(_privateIp, cmd.getDestinationIp());
+
dconn = new Connect("qemu+tcp://" + cmd.getDestinationIp()
+ "/system");
/*
@@@ -3184,7 -3439,9 +3455,9 @@@
ConsoleDef console = new ConsoleDef("pty", null, null, (short) 0);
devices.addDevice(console);
- GraphicDef grap = new GraphicDef("vnc", (short) 0, true, vmTO.getVncAddr(), null,
+ //add the VNC port passwd here, get the passwd from the vmInstance.
+ String passwd = vmTO.getVncPassword();
- GraphicDef grap = new GraphicDef("vnc", (short) 0, true, null, passwd,
++ GraphicDef grap = new GraphicDef("vnc", (short) 0, true, vmTO.getVncAddr(), passwd,
null);
devices.addDevice(grap);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/895c51d0/pom.xml
----------------------------------------------------------------------
diff --cc pom.xml
index 6208124,4013fa6..6d9a30f
--- a/pom.xml
+++ b/pom.xml
@@@ -91,7 -81,11 +81,11 @@@
<cs.reflections.version>0.9.8</cs.reflections.version>
<cs.java-ipv6.version>0.10</cs.java-ipv6.version>
<cs.replace.properties>build/replace.properties</cs.replace.properties>
-- <cs.libvirt-java.version>0.4.9</cs.libvirt-java.version>
++ <cs.libvirt-java.version>0.5.0</cs.libvirt-java.version>
+ <cs.rados-java.version>0.1.3</cs.rados-java.version>
+ <cs.target.dir>target</cs.target.dir>
+ <cs.daemon.version>1.0.10</cs.daemon.version>
- <cs.jna.version>3.0.9</cs.jna.version>
++ <cs.jna.version>4.0.0</cs.jna.version>
</properties>
<distributionManagement>
[16/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4643
put host maintenance mode will not change XS master,
when you delete a host, and this host is master, master will be designated by CS
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/4adf1319
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/4adf1319
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/4adf1319
Branch: refs/heads/kvm-vnc-listen
Commit: 4adf13192fc215b05283dc82253758717256c835
Parents: 6b2bc93
Author: Anthony Xu <an...@citrix.com>
Authored: Wed Sep 11 15:43:42 2013 -0700
Committer: Anthony Xu <an...@citrix.com>
Committed: Wed Sep 11 15:52:09 2013 -0700
----------------------------------------------------------------------
.../xen/resource/CitrixResourceBase.java | 107 +++++++++----------
.../xen/resource/XenServer56Resource.java | 44 --------
2 files changed, 53 insertions(+), 98 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4adf1319/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index e2d1763..e983672 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -1818,37 +1818,19 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
protected MaintainAnswer execute(MaintainCommand cmd) {
Connection conn = getConnection();
try {
- Pool pool = Pool.getByUuid(conn, _host.pool);
- Pool.Record poolr = pool.getRecord(conn);
-
- Host.Record hostr = poolr.master.getRecord(conn);
- if (!_host.uuid.equals(hostr.uuid)) {
- s_logger.debug("Not the master node so just return ok: " + _host.ip);
- return new MaintainAnswer(cmd);
- }
- Map<Host, Host.Record> hostMap = Host.getAllRecords(conn);
- if (hostMap.size() == 1) {
- s_logger.debug("There is the last host in pool " + poolr.uuid );
- return new MaintainAnswer(cmd);
- }
- Host newMaster = null;
- Host.Record newMasterRecord = null;
- for (Map.Entry<Host, Host.Record> entry : hostMap.entrySet()) {
- if (!_host.uuid.equals(entry.getValue().uuid)) {
- newMaster = entry.getKey();
- newMasterRecord = entry.getValue();
- s_logger.debug("New master for the XenPool is " + newMasterRecord.uuid + " : " + newMasterRecord.address);
- try {
- _connPool.switchMaster(_host.ip, _host.pool, conn, newMaster, _username, _password, _wait);
- return new MaintainAnswer(cmd, "New Master is " + newMasterRecord.address);
- } catch (XenAPIException e) {
- s_logger.warn("Unable to switch the new master to " + newMasterRecord.uuid + ": " + newMasterRecord.address + " Trying again...");
- } catch (XmlRpcException e) {
- s_logger.warn("Unable to switch the new master to " + newMasterRecord.uuid + ": " + newMasterRecord.address + " Trying again...");
- }
+
+ Host host = Host.getByUuid(conn, _host.uuid);
+ // remove all tags cloud stack
+ Host.Record hr = host.getRecord(conn);
+ Iterator<String> it = hr.tags.iterator();
+ while (it.hasNext()) {
+ String tag = it.next();
+ if (tag.contains("cloud")) {
+ it.remove();
}
}
- return new MaintainAnswer(cmd, false, "Unable to find an appropriate host to set as the new master");
+ host.setTags(conn, hr.tags);
+ return new MaintainAnswer(cmd);
} catch (XenAPIException e) {
s_logger.warn("Unable to put server in maintainence mode", e);
return new MaintainAnswer(cmd, false, e.getMessage());
@@ -7739,37 +7721,58 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
Connection conn = getConnection();
String hostuuid = cmd.getHostuuid();
try {
- Map<Host, Host.Record> hostrs = Host.getAllRecords(conn);
- boolean found = false;
- for( Host.Record hr : hostrs.values() ) {
- if( hr.uuid.equals(hostuuid)) {
- found = true;
- }
- }
- if( ! found) {
+ Host host = Host.getByUuid(conn, hostuuid);
+ if( isRefNull(host) ) {
s_logger.debug("host " + hostuuid + " has already been ejected from pool " + _host.pool);
return new Answer(cmd);
}
-
- Pool pool = Pool.getAll(conn).iterator().next();
- Pool.Record poolr = pool.getRecord(conn);
-
- Host.Record masterRec = poolr.master.getRecord(conn);
- if (hostuuid.equals(masterRec.uuid)) {
- s_logger.debug("This is last host to eject, so don't need to eject: " + hostuuid);
- return new Answer(cmd);
- }
-
- Host host = Host.getByUuid(conn, hostuuid);
// remove all tags cloud stack add before eject
Host.Record hr = host.getRecord(conn);
Iterator<String> it = hr.tags.iterator();
while (it.hasNext()) {
String tag = it.next();
- if (tag.startsWith("vmops-version-")) {
+ if (tag.contains("cloud")) {
it.remove();
}
}
+ host.setTags(conn, hr.tags);
+ Pool pool = Pool.getByUuid(conn, _host.pool);
+ Pool.Record poolr = pool.getRecord(conn);
+
+ Host.Record hostr = poolr.master.getRecord(conn);
+ if (_host.uuid.equals(hostr.uuid)) {
+ boolean mastermigrated = false;
+ Map<Host, Host.Record> hostMap = Host.getAllRecords(conn);
+ if (hostMap.size() != 1) {
+ Host newMaster = null;
+ Host.Record newMasterRecord = null;
+ for (Map.Entry<Host, Host.Record> entry : hostMap.entrySet()) {
+ if (_host.uuid.equals(entry.getValue().uuid)) {
+ continue;
+ }
+ newMaster = entry.getKey();
+ newMasterRecord = entry.getValue();
+ s_logger.debug("New master for the XenPool is " + newMasterRecord.uuid + " : " + newMasterRecord.address);
+ try {
+ _connPool.switchMaster(_host.ip, _host.pool, conn, newMaster, _username, _password, _wait);
+ mastermigrated = true;
+ break;
+ } catch (Exception e) {
+ s_logger.warn("Unable to switch the new master to " + newMasterRecord.uuid + ": " + newMasterRecord.address + " due to " + e.toString());
+ }
+ }
+ } else {
+ s_logger.debug("This is last host to eject, so don't need to eject: " + hostuuid);
+ return new Answer(cmd);
+ }
+ if ( !mastermigrated ) {
+ String msg = "this host is master, and cannot designate a new master";
+ s_logger.debug(msg);
+ return new Answer(cmd, false, msg);
+
+ }
+ }
+
// eject from pool
try {
Pool.eject(conn, host);
@@ -7783,12 +7786,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
host.destroy(conn);
}
return new Answer(cmd);
- } catch (XenAPIException e) {
- String msg = "XenAPIException Unable to destroy host " + _host.uuid + " in xenserver database due to " + e.toString();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
} catch (Exception e) {
- String msg = "Exception Unable to destroy host " + _host.uuid + " in xenserver database due to " + e.getMessage();
+ String msg = "Exception Unable to destroy host " + _host.uuid + " in xenserver database due to " + e.toString();
s_logger.warn(msg, e);
return new Answer(cmd, false, msg);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4adf1319/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
index 716bb7c..24329e6 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56Resource.java
@@ -18,14 +18,9 @@ package com.cloud.hypervisor.xen.resource;
import java.io.File;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Set;
-
import javax.ejb.Local;
-import javax.naming.ConfigurationException;
-
import org.apache.log4j.Logger;
import org.apache.xmlrpc.XmlRpcException;
@@ -37,21 +32,14 @@ import com.cloud.agent.api.FenceAnswer;
import com.cloud.agent.api.FenceCommand;
import com.cloud.agent.api.NetworkUsageAnswer;
import com.cloud.agent.api.NetworkUsageCommand;
-import com.cloud.agent.api.PoolEjectCommand;
import com.cloud.agent.api.StartupCommand;
import com.cloud.resource.ServerResource;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.Pair;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
-import com.xensource.xenapi.Bond;
import com.xensource.xenapi.Connection;
import com.xensource.xenapi.Host;
import com.xensource.xenapi.Network;
-import com.xensource.xenapi.PBD;
import com.xensource.xenapi.PIF;
-import com.xensource.xenapi.SR;
-import com.xensource.xenapi.Types;
import com.xensource.xenapi.Types.IpConfigurationMode;
import com.xensource.xenapi.Types.XenAPIException;
import com.xensource.xenapi.VLAN;
@@ -65,8 +53,6 @@ public class XenServer56Resource extends CitrixResourceBase {
public Answer executeRequest(Command cmd) {
if (cmd instanceof FenceCommand) {
return execute((FenceCommand) cmd);
- } else if (cmd instanceof PoolEjectCommand) {
- return execute((PoolEjectCommand) cmd);
} else if (cmd instanceof NetworkUsageCommand) {
return execute((NetworkUsageCommand) cmd);
} else {
@@ -226,36 +212,6 @@ public class XenServer56Resource extends CitrixResourceBase {
}
}
- @Override
- protected Answer execute(PoolEjectCommand cmd) {
- Connection conn = getConnection();
- String hostuuid = cmd.getHostuuid();
- try {
- Host host = Host.getByUuid(conn, hostuuid);
- // remove all tags cloud stack add before eject
- Host.Record hr = host.getRecord(conn);
- Iterator<String> it = hr.tags.iterator();
- while (it.hasNext()) {
- String tag = it.next();
- if (tag.contains("cloud-heartbeat-")) {
- it.remove();
- }
- }
- return super.execute(cmd);
-
- } catch (XenAPIException e) {
- String msg = "Unable to eject host " + _host.uuid + " due to " + e.toString();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- } catch (Exception e) {
- s_logger.warn("Unable to eject host " + _host.uuid, e);
- String msg = "Unable to eject host " + _host.uuid + " due to " + e.getMessage();
- s_logger.warn(msg, e);
- return new Answer(cmd, false, msg);
- }
-
- }
-
protected FenceAnswer execute(FenceCommand cmd) {
Connection conn = getConnection();
try {
[03/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4466: Fix DHCP capability breaks in 4.2 for MidoNet
A recent code change in NetworkManager causes NullPointerExceptions when DHCP
capability list is null.
The commit which made the NetworkManager change also changed the VirtualRouter
to not use null for the capabilitylist, but didn't make this change for other
network devices, causing DHCP to fail on MidoNet.
This change also updates the MidoNet plugin to use the most recent MidoNet API.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/28af817f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/28af817f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/28af817f
Branch: refs/heads/kvm-vnc-listen
Commit: 28af817fcc835c10e4a21f08e971041325ad206d
Parents: 16a1f15
Author: Dave Cahill <dc...@midokura.com>
Authored: Tue Aug 27 11:55:49 2013 -0700
Committer: Dave Cahill <dc...@midokura.com>
Committed: Tue Sep 10 08:14:54 2013 +0000
----------------------------------------------------------------------
plugins/network-elements/midonet/pom.xml | 4 +-
.../cloud/network/element/MidoNetElement.java | 154 ++++++++++---------
.../network/element/SimpleFirewallRule.java | 20 ++-
.../network/guru/MidoNetGuestNetworkGuru.java | 11 --
.../network/resource/MidoNetVifDriver.java | 18 +--
.../network/element/MidoNetElementTest.java | 4 +-
6 files changed, 107 insertions(+), 104 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/28af817f/plugins/network-elements/midonet/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/network-elements/midonet/pom.xml b/plugins/network-elements/midonet/pom.xml
index 9d6588b..19103e0 100644
--- a/plugins/network-elements/midonet/pom.xml
+++ b/plugins/network-elements/midonet/pom.xml
@@ -35,9 +35,9 @@
</repositories>
<dependencies>
<dependency>
- <groupId>com.midokura</groupId>
+ <groupId>org.midonet</groupId>
<artifactId>midonet-client</artifactId>
- <version>12.12.2</version>
+ <version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.cloudstack</groupId>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/28af817f/plugins/network-elements/midonet/src/com/cloud/network/element/MidoNetElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/midonet/src/com/cloud/network/element/MidoNetElement.java b/plugins/network-elements/midonet/src/com/cloud/network/element/MidoNetElement.java
index 85814ef..20dbded 100644
--- a/plugins/network-elements/midonet/src/com/cloud/network/element/MidoNetElement.java
+++ b/plugins/network-elements/midonet/src/com/cloud/network/element/MidoNetElement.java
@@ -53,20 +53,21 @@ import com.cloud.vm.ReservationContext;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.NicDao;
-
-import com.midokura.midonet.client.MidonetApi;
-import com.midokura.midonet.client.dto.DtoRule;
-import com.midokura.midonet.client.resource.Bridge;
-import com.midokura.midonet.client.resource.BridgePort;
-import com.midokura.midonet.client.resource.DhcpHost;
-import com.midokura.midonet.client.resource.DhcpSubnet;
-import com.midokura.midonet.client.resource.Port;
-import com.midokura.midonet.client.resource.ResourceCollection;
-import com.midokura.midonet.client.resource.Route;
-import com.midokura.midonet.client.resource.Router;
-import com.midokura.midonet.client.resource.RouterPort;
-import com.midokura.midonet.client.resource.Rule;
-import com.midokura.midonet.client.resource.RuleChain;
+import org.midonet.client.MidonetApi;
+import org.midonet.client.exception.HttpInternalServerError;
+import org.midonet.client.dto.DtoRule;
+import org.midonet.client.dto.DtoRule.DtoRange;
+import org.midonet.client.resource.Bridge;
+import org.midonet.client.resource.BridgePort;
+import org.midonet.client.resource.DhcpHost;
+import org.midonet.client.resource.DhcpSubnet;
+import org.midonet.client.resource.Port;
+import org.midonet.client.resource.ResourceCollection;
+import org.midonet.client.resource.Route;
+import org.midonet.client.resource.Router;
+import org.midonet.client.resource.RouterPort;
+import org.midonet.client.resource.Rule;
+import org.midonet.client.resource.RuleChain;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
@@ -424,7 +425,9 @@ public class MidoNetElement extends AdapterBase implements
sub.subnetLength(cidrInfo.second());
sub.subnetPrefix(cidrInfo.first());
sub.defaultGateway(network.getGateway());
- sub.dnsServerAddr(dest.getDataCenter().getDns1());
+ List<String> dcs = new ArrayList<String>();
+ dcs.add(dest.getDataCenter().getDns1());
+ sub.dnsServerAddrs(dcs);
sub.create();
}
@@ -533,10 +536,8 @@ public class MidoNetElement extends AdapterBase implements
.nwDstAddress(floatingIp)
.nwDstLength(32)
.nwProto(SimpleFirewallRule.stringToProtocolNumber("icmp"))
- .tpSrcStart(0)
- .tpSrcEnd(0)
- .tpDstStart(0)
- .tpDstEnd(0)
+ .tpSrc(new DtoRange<Integer>(0,0))
+ .tpDst(new DtoRange<Integer>(0,0))
.position(2)
.create();
@@ -689,52 +690,56 @@ public class MidoNetElement extends AdapterBase implements
}
for (FirewallRule rule : rulesToApply) {
- IpAddress dstIp = _networkModel.getIp(rule.getSourceIpAddressId());
- FirewallRuleTO ruleTO = new FirewallRuleTO(rule, null, dstIp.getAddress().addr());
-
- // Convert to string representation
- SimpleFirewallRule fwRule = new SimpleFirewallRule(ruleTO);
- String[] ruleStrings = fwRule.toStringArray();
-
- if (rule.getState() == FirewallRule.State.Revoke) {
- // Lookup in existingRules, delete if present
- for(String revokeRuleString : ruleStrings){
- Rule foundRule = existingRules.get(revokeRuleString);
- if(foundRule != null){
- foundRule.delete();
+ if (rule.getState() == FirewallRule.State.Revoke || rule.getState() == FirewallRule.State.Add) {
+ IpAddress dstIp = _networkModel.getIp(rule.getSourceIpAddressId());
+ FirewallRuleTO ruleTO = new FirewallRuleTO(rule, null, dstIp.getAddress().addr());
+
+ // Convert to string representation
+ SimpleFirewallRule fwRule = new SimpleFirewallRule(ruleTO);
+ String[] ruleStrings = fwRule.toStringArray();
+
+ if (rule.getState() == FirewallRule.State.Revoke) {
+ // Lookup in existingRules, delete if present
+ for(String revokeRuleString : ruleStrings){
+ Rule foundRule = existingRules.get(revokeRuleString);
+ if(foundRule != null){
+ foundRule.delete();
+ }
}
- }
- } else if (rule.getState() == FirewallRule.State.Add) {
- // Lookup in existingRules, add if not present
- for(int i = 0; i < ruleStrings.length; i++){
- String ruleString = ruleStrings[i];
- Rule foundRule = existingRules.get(ruleString);
- if(foundRule == null){
- // Get the cidr for the related entry in the Source Cidrs list
- String relatedCidr = fwRule.sourceCidrs.get(i);
- Pair<String,Integer> cidrParts = NetUtils.getCidr(relatedCidr);
-
- // Create rule with correct proto, cidr, ACCEPT, dst IP
- Rule toApply = preFilter.addRule()
- .type(DtoRule.Jump)
- .jumpChainId(preNat.getId())
- .position(1)
- .nwSrcAddress(cidrParts.first())
- .nwSrcLength(cidrParts.second())
- .nwDstAddress(ruleTO.getSrcIp())
- .nwDstLength(32)
- .nwProto(SimpleFirewallRule.stringToProtocolNumber(rule.getProtocol()));
+ } else if (rule.getState() == FirewallRule.State.Add) {
+ // Lookup in existingRules, add if not present
+ for(int i = 0; i < ruleStrings.length; i++){
+ String ruleString = ruleStrings[i];
+ Rule foundRule = existingRules.get(ruleString);
+ if(foundRule == null){
+ // Get the cidr for the related entry in the Source Cidrs list
+ String relatedCidr = fwRule.sourceCidrs.get(i);
+ Pair<String,Integer> cidrParts = NetUtils.getCidr(relatedCidr);
+
+ // Create rule with correct proto, cidr, ACCEPT, dst IP
+ Rule toApply = preFilter.addRule()
+ .type(DtoRule.Jump)
+ .jumpChainId(preNat.getId())
+ .position(1)
+ .nwSrcAddress(cidrParts.first())
+ .nwSrcLength(cidrParts.second())
+ .nwDstAddress(ruleTO.getSrcIp())
+ .nwDstLength(32)
+ .nwProto(SimpleFirewallRule.stringToProtocolNumber(rule.getProtocol()));
+
+ if(rule.getProtocol().equals("icmp")){
+ // ICMP rules - reuse port fields
+ // (-1, -1) means "allow all ICMP", so we don't set tpSrc / tpDst
+ if(fwRule.icmpType != -1 | fwRule.icmpCode != -1){
+ toApply.tpSrc(new DtoRange(fwRule.icmpType, fwRule.icmpType))
+ .tpDst(new DtoRange(fwRule.icmpCode, fwRule.icmpCode));
+ }
+ } else {
+ toApply.tpDst(new DtoRange(fwRule.dstPortStart, fwRule.dstPortEnd));
+ }
- if(rule.getProtocol().equals("icmp")){
- // ICMP rules - reuse port fields
- toApply.tpSrcStart(fwRule.icmpType).tpSrcEnd(fwRule.icmpType)
- .tpDstStart(fwRule.icmpCode).tpDstEnd(fwRule.icmpCode);
- } else {
- toApply.tpDstStart(fwRule.dstPortStart)
- .tpDstEnd(fwRule.dstPortEnd);
+ toApply.create();
}
-
- toApply.create();
}
}
}
@@ -973,8 +978,11 @@ public class MidoNetElement extends AdapterBase implements
// Rules in the preNat table
Map<String, Rule> existingPreNatRules = new HashMap<String, Rule>();
for (Rule existingRule : preNat.getRules()) {
- String ruleString = new SimpleFirewallRule(existingRule).toStringArray()[0];
- existingPreNatRules.put(ruleString, existingRule);
+ // The "port forwarding" rules we're interested in are dnat rules where src / dst ports are specified
+ if(existingRule.getType().equals(DtoRule.DNAT) && existingRule.getTpDst() != null){
+ String ruleString = new SimpleFirewallRule(existingRule).toStringArray()[0];
+ existingPreNatRules.put(ruleString, existingRule);
+ }
}
/*
@@ -1058,8 +1066,7 @@ public class MidoNetElement extends AdapterBase implements
.flowAction(DtoRule.Accept)
.nwDstAddress(publicIp)
.nwDstLength(32)
- .tpDstStart(pubPortStart)
- .tpDstEnd(pubPortEnd)
+ .tpDst(new DtoRange(pubPortStart, pubPortEnd))
.natTargets(preTargets)
.nwProto(SimpleFirewallRule.stringToProtocolNumber(rule.getProtocol()))
.position(1);
@@ -1123,7 +1130,8 @@ public class MidoNetElement extends AdapterBase implements
capabilities.put(Service.Gateway, null);
// L3 Support : DHCP
- capabilities.put(Service.Dhcp, null);
+ Map<Capability, String> dhcpCapabilities = new HashMap<Capability, String>();
+ capabilities.put(Service.Dhcp, dhcpCapabilities);
// L3 Support : SourceNat
Map<Capability, String> sourceNatCapabilities = new HashMap<Capability, String>();
@@ -1364,7 +1372,7 @@ public class MidoNetElement extends AdapterBase implements
int pos = 1;
// If it is ARP, accept it
egressChain.addRule().type(DtoRule.Accept)
- .dlType((short)0x0806)
+ .dlType(0x0806)
.position(pos++)
.create();
@@ -1423,7 +1431,7 @@ public class MidoNetElement extends AdapterBase implements
// If it is ARP, accept it
inc.addRule().type(DtoRule.Accept)
- .dlType((short)0x0806)
+ .dlType(0x0806)
.position(pos++)
.create();
@@ -1487,7 +1495,13 @@ public class MidoNetElement extends AdapterBase implements
String networkUUIDStr = String.valueOf(networkID);
- netBridge = api.addBridge().tenantId(accountUuid).name(networkUUIDStr).create();
+ s_logger.debug("Attempting to create guest network bridge");
+ try {
+ netBridge = api.addBridge().tenantId(accountUuid).name(networkUUIDStr).create();
+ } catch (HttpInternalServerError ex) {
+ s_logger.warn("Bridge creation failed, retrying bridge get in case it now exists.", ex);
+ netBridge = getNetworkBridge(networkID, accountUuid);
+ }
}
return netBridge;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/28af817f/plugins/network-elements/midonet/src/com/cloud/network/element/SimpleFirewallRule.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/midonet/src/com/cloud/network/element/SimpleFirewallRule.java b/plugins/network-elements/midonet/src/com/cloud/network/element/SimpleFirewallRule.java
index a6b78d8..e8d81ef 100644
--- a/plugins/network-elements/midonet/src/com/cloud/network/element/SimpleFirewallRule.java
+++ b/plugins/network-elements/midonet/src/com/cloud/network/element/SimpleFirewallRule.java
@@ -21,9 +21,10 @@ package com.cloud.network.element;
import com.cloud.agent.api.to.FirewallRuleTO;
import com.cloud.agent.api.to.NetworkACLTO;
import com.cloud.agent.api.to.PortForwardingRuleTO;
-import com.midokura.midonet.client.dto.DtoRule;
+import org.midonet.client.dto.DtoRule;
+import org.midonet.client.resource.*;
import com.google.common.collect.*;
-import com.midokura.midonet.client.resource.*;
+
import java.util.*;
// Used for translation between MidoNet firewall rules and
@@ -147,8 +148,14 @@ public class SimpleFirewallRule {
dstIp = rule.getNwDstAddress();
if("icmp".equals(protocol)){
- icmpType = rule.getTpSrcStart();
- icmpCode = rule.getTpDstStart();
+ if(rule.getTpSrc() != null && rule.getTpDst() != null){
+ icmpType = rule.getTpSrc().start;
+ icmpCode = rule.getTpDst().start;
+ } else {
+ icmpType = -1;
+ icmpCode = -1;
+ }
+
} else {
/*
* If this is port forwarding, we want to take the start
@@ -158,9 +165,9 @@ public class SimpleFirewallRule {
if (targets != null) {
dstPortStart = targets[0].portFrom;
} else {
- dstPortStart = rule.getTpDstStart();
+ dstPortStart = rule.getTpDst().start;
}
- dstPortEnd = rule.getTpDstEnd();
+ dstPortEnd = rule.getTpDst().end;
}
// cidr, protocol, dstIp, dstPortStart, dstPortEnd, icmpType, icmpCode);
@@ -177,6 +184,7 @@ public class SimpleFirewallRule {
public int getFieldOne(){
if(protocol.equals("icmp")){
return icmpType;
+
} else {
return dstPortStart;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/28af817f/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java b/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java
index 891496a..2b7f4c9 100644
--- a/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java
+++ b/plugins/network-elements/midonet/src/com/cloud/network/guru/MidoNetGuestNetworkGuru.java
@@ -19,8 +19,6 @@
package com.cloud.network.guru;
-import com.cloud.network.element.MidoNetElement;
-import com.cloud.dc.DataCenter;
import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.deploy.DeployDestination;
import com.cloud.deploy.DeploymentPlan;
@@ -33,21 +31,12 @@ import com.cloud.user.Account;
import com.cloud.user.AccountVO;
import com.cloud.user.dao.AccountDao;
import com.cloud.vm.*;
-import com.midokura.midonet.client.resource.Bridge;
-import com.cloud.utils.net.NetUtils;
-
-import com.cloud.network.Networks.AddressFormat;
-import com.midokura.midonet.client.resource.BridgePort;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.dao.PhysicalNetworkVO;
-
-import com.cloud.vm.Nic.ReservationStrategy;
-
import javax.ejb.Local;
-import java.util.UUID;
import javax.inject.Inject;
@Component
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/28af817f/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java b/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
index 3c7c23d..9c21636 100644
--- a/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
+++ b/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
@@ -21,32 +21,24 @@ package com.cloud.network.resource;
import com.cloud.hypervisor.kvm.resource.*;
import com.cloud.agent.api.to.NicTO;
-import com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource;
import com.cloud.exception.InternalErrorException;
import com.cloud.network.Networks;
import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.net.NetUtils;
import com.cloud.utils.script.OutputInterpreter;
import com.cloud.utils.script.Script;
-import com.midokura.midonet.client.resource.Bridge;
-import com.midokura.midonet.client.resource.Router;
-import com.midokura.midonet.client.resource.BridgePort;
-import com.midokura.midonet.client.resource.RouterPort;
-import com.midokura.midonet.client.resource.Host;
import org.apache.log4j.Logger;
import org.libvirt.LibvirtException;
-
import com.sun.jersey.core.util.MultivaluedMapImpl;
-import com.midokura.midonet.client.MidonetApi;
-
import javax.ws.rs.core.MultivaluedMap;
-
import javax.naming.ConfigurationException;
-import javax.ws.rs.core.MultivaluedMap;
-import java.net.URI;
import java.util.Map;
import java.util.UUID;
+import org.midonet.client.resource.Bridge;
+import org.midonet.client.resource.BridgePort;
+import org.midonet.client.resource.Host;
+import org.midonet.client.MidonetApi;
+
public class MidoNetVifDriver extends VifDriverBase {
private static final Logger s_logger = Logger
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/28af817f/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java b/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
index 9023c6e..ef91872 100644
--- a/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
+++ b/plugins/network-elements/midonet/test/com/cloud/network/element/MidoNetElementTest.java
@@ -24,8 +24,8 @@ import com.cloud.user.dao.AccountDao;
import junit.framework.TestCase;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;
-import com.midokura.midonet.client.MidonetApi;
-import com.midokura.midonet.client.resource.*;
+import org.midonet.client.MidonetApi;
+import org.midonet.client.resource.*;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.cloud.network.*;
import com.cloud.vm.*;
[35/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
change return value of getvmId() from int to string in security_group.py
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/83d3f7d2
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/83d3f7d2
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/83d3f7d2
Branch: refs/heads/kvm-vnc-listen
Commit: 83d3f7d2f3dc94a6a826f0d6295e655f002f3174
Parents: 2e2d1ac
Author: Wei Zhou <w....@leaseweb.com>
Authored: Fri Sep 13 11:37:30 2013 +0200
Committer: Wei Zhou <w....@leaseweb.com>
Committed: Fri Sep 13 11:37:30 2013 +0200
----------------------------------------------------------------------
scripts/vm/network/security_group.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/83d3f7d2/scripts/vm/network/security_group.py
----------------------------------------------------------------------
diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py
index 3c4eb30..085a7f8 100755
--- a/scripts/vm/network/security_group.py
+++ b/scripts/vm/network/security_group.py
@@ -937,7 +937,7 @@ def getvmId(vmName):
conn.close()
- return dom.ID()
+ return str(dom.ID())
def addFWFramework(brname):
try:
[22/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4617. Add host succeeds but host goes to alert state and comes back to UP state
after a short while. Fixed the link local network creation part.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/63f8b3f6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/63f8b3f6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/63f8b3f6
Branch: refs/heads/kvm-vnc-listen
Commit: 63f8b3f69bd55f71abc4c9ae173571614637d5b6
Parents: c98817c
Author: Devdeep Singh <de...@gmail.com>
Authored: Thu Sep 12 16:14:21 2013 +0530
Committer: Devdeep Singh <de...@gmail.com>
Committed: Thu Sep 12 16:34:55 2013 +0530
----------------------------------------------------------------------
.../xen/resource/CitrixResourceBase.java | 10 +++++--
.../xen/resource/XenServer610Resource.java | 30 ++++++++++++--------
2 files changed, 26 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63f8b3f6/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index e983672..3cc60db 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -4746,6 +4746,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
+ protected void plugDom0Vif(Connection conn, VIF dom0Vif) throws XmlRpcException, XenAPIException {
+ if (dom0Vif != null) {
+ dom0Vif.plug(conn);
+ }
+ }
+
private void setupLinkLocalNetwork(Connection conn) {
try {
Network.Record rec = new Network.Record();
@@ -4800,11 +4806,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
vifr.network = linkLocal;
vifr.lockingMode = Types.VifLockingMode.NETWORK_DEFAULT;
dom0vif = VIF.create(conn, vifr);
- dom0vif.plug(conn);
+ plugDom0Vif(conn, dom0vif);
} else {
s_logger.debug("already have a vif on dom0 for link local network");
if (!dom0vif.getCurrentlyAttached(conn)) {
- dom0vif.plug(conn);
+ plugDom0Vif(conn, dom0vif);
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/63f8b3f6/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
index 20d9a3d..c3c0307 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer610Resource.java
@@ -19,8 +19,8 @@ package com.cloud.hypervisor.xen.resource;
import java.io.File;
import java.util.ArrayList;
-import java.util.List;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -28,35 +28,37 @@ import javax.ejb.Local;
import org.apache.cloudstack.storage.to.VolumeObjectTO;
import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
-import com.cloud.resource.ServerResource;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-import com.cloud.vm.VirtualMachine.State;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
-import com.cloud.agent.api.storage.MigrateVolumeAnswer;
-import com.cloud.agent.api.storage.MigrateVolumeCommand;
import com.cloud.agent.api.MigrateWithStorageAnswer;
import com.cloud.agent.api.MigrateWithStorageCommand;
+import com.cloud.agent.api.MigrateWithStorageCompleteAnswer;
+import com.cloud.agent.api.MigrateWithStorageCompleteCommand;
import com.cloud.agent.api.MigrateWithStorageReceiveAnswer;
import com.cloud.agent.api.MigrateWithStorageReceiveCommand;
import com.cloud.agent.api.MigrateWithStorageSendAnswer;
import com.cloud.agent.api.MigrateWithStorageSendCommand;
-import com.cloud.agent.api.MigrateWithStorageCompleteAnswer;
-import com.cloud.agent.api.MigrateWithStorageCompleteCommand;
-import com.cloud.agent.api.to.StorageFilerTO;
-import com.cloud.network.Networks.TrafficType;
+import com.cloud.agent.api.storage.MigrateVolumeAnswer;
+import com.cloud.agent.api.storage.MigrateVolumeCommand;
import com.cloud.agent.api.to.DiskTO;
+import com.cloud.agent.api.to.NicTO;
+import com.cloud.agent.api.to.StorageFilerTO;
import com.cloud.agent.api.to.VirtualMachineTO;
import com.cloud.agent.api.to.VolumeTO;
-import com.cloud.agent.api.to.NicTO;
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.resource.ServerResource;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.cloud.utils.script.Script;
+import com.cloud.vm.VirtualMachine.State;
import com.xensource.xenapi.Connection;
import com.xensource.xenapi.Host;
import com.xensource.xenapi.Network;
import com.xensource.xenapi.SR;
import com.xensource.xenapi.Task;
import com.xensource.xenapi.Types;
+import com.xensource.xenapi.Types.XenAPIException;
import com.xensource.xenapi.VBD;
import com.xensource.xenapi.VDI;
import com.xensource.xenapi.VIF;
@@ -447,4 +449,8 @@ public class XenServer610Resource extends XenServer56FP1Resource {
return dynamicMinRam;
}
+ @Override
+ protected void plugDom0Vif(Connection conn, VIF dom0Vif) throws XmlRpcException, XenAPIException {
+ // do nothing. In xenserver 6.1 and beyond this step isn't needed.
+ }
}
[29/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
The 'domain' variable should be 'vmName'.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/60e0873a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/60e0873a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/60e0873a
Branch: refs/heads/kvm-vnc-listen
Commit: 60e0873a9363e043d10a1e92fceb48b83839b34c
Parents: 2ea6612
Author: Mike Tutkowski <mi...@solidfire.com>
Authored: Thu Sep 12 09:17:48 2013 -0600
Committer: Mike Tutkowski <mi...@solidfire.com>
Committed: Thu Sep 12 09:17:48 2013 -0600
----------------------------------------------------------------------
scripts/vm/network/security_group.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/60e0873a/scripts/vm/network/security_group.py
----------------------------------------------------------------------
diff --git a/scripts/vm/network/security_group.py b/scripts/vm/network/security_group.py
index a23617e..3c4eb30 100755
--- a/scripts/vm/network/security_group.py
+++ b/scripts/vm/network/security_group.py
@@ -931,7 +931,7 @@ def getvmId(vmName):
sys.exit(3)
try:
- dom = (conn.lookupByName (domain))
+ dom = (conn.lookupByName (vmName))
except libvirt.libvirtError:
return None
[21/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
build fixed
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c98817c2
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c98817c2
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c98817c2
Branch: refs/heads/kvm-vnc-listen
Commit: c98817c2bafbb571e4aa0f663d6c8cfaacc0ca36
Parents: f8f7791
Author: radhikap <ra...@citrix.com>
Authored: Thu Sep 12 14:59:40 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Thu Sep 12 14:59:40 2013 +0530
----------------------------------------------------------------------
docs/en-US/manage-cloud.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c98817c2/docs/en-US/manage-cloud.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/manage-cloud.xml b/docs/en-US/manage-cloud.xml
index d356673..6bc45e2 100644
--- a/docs/en-US/manage-cloud.xml
+++ b/docs/en-US/manage-cloud.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8' ?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>
[46/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
known issues added, 4.1 reference removed
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/94377dd8
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/94377dd8
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/94377dd8
Branch: refs/heads/kvm-vnc-listen
Commit: 94377dd842b2671cfe9a723d4df24c4a72851d5d
Parents: f9fb940
Author: radhikap <ra...@citrix.com>
Authored: Sat Sep 14 09:16:45 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Sat Sep 14 10:39:53 2013 +0530
----------------------------------------------------------------------
----------------------------------------------------------------------
[12/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
add error message for ResourceAllocationException in DeployVMCmd.java
(cherry picked from commit e74d8a1d14c470baeb160bf1454636ca7dac7564)
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a7c91fea
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a7c91fea
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a7c91fea
Branch: refs/heads/kvm-vnc-listen
Commit: a7c91fea674309f88add5d0f4b991900598d30c8
Parents: 58d1e6f
Author: Wei Zhou <w....@leaseweb.com>
Authored: Wed Sep 11 10:06:03 2013 +0200
Committer: Wei Zhou <w....@leaseweb.com>
Committed: Wed Sep 11 10:06:48 2013 +0200
----------------------------------------------------------------------
.../org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a7c91fea/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
index c7bc587..8a6cea7 100755
--- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java
@@ -528,6 +528,9 @@ public class DeployVMCmd extends BaseAsyncCreateCmd {
} catch (ConcurrentOperationException ex) {
s_logger.warn("Exception: ", ex);
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
+ } catch (ResourceAllocationException ex) {
+ s_logger.warn("Exception: ", ex);
+ throw new ServerApiException(ApiErrorCode.RESOURCE_ALLOCATION_ERROR, ex.getMessage());
}
}
[32/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4128: UI > zone wizard > secondary storage step > check if S3 secondary storage (region-wide) exists. If yes, (1)Provider dropdown has only one option "S3". (2)Name input field is loaded with the existing S3 secondary storage name and disabled. (3)Create NFS Secondary Staging Store checkbox is checked and disabled. (4)NFS Server field and Path field are required.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/bc98bca7
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/bc98bca7
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/bc98bca7
Branch: refs/heads/kvm-vnc-listen
Commit: bc98bca7f2620f45063dccbc2e0c7492e250b8fe
Parents: 1f42153
Author: Jessica Wang <je...@apache.org>
Authored: Thu Sep 12 16:29:49 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Sep 12 16:38:59 2013 -0700
----------------------------------------------------------------------
ui/scripts/ui-custom/zoneWizard.js | 1 +
ui/scripts/zoneWizard.js | 235 +++++++++++++++++++-------------
2 files changed, 143 insertions(+), 93 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bc98bca7/ui/scripts/ui-custom/zoneWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/zoneWizard.js b/ui/scripts/ui-custom/zoneWizard.js
index bb33929..cf52107 100644
--- a/ui/scripts/ui-custom/zoneWizard.js
+++ b/ui/scripts/ui-custom/zoneWizard.js
@@ -1006,6 +1006,7 @@
args.action({
data: data,
+ wizard: $wizard,
startFn: $wizard.data('startfn'),
uiSteps: $.map(
$wizard.find('.steps > div'),
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/bc98bca7/ui/scripts/zoneWizard.js
----------------------------------------------------------------------
diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js
index 0ecddee..7b26790 100755
--- a/ui/scripts/zoneWizard.js
+++ b/ui/scripts/zoneWizard.js
@@ -1792,27 +1792,43 @@
provider: {
label: 'Provider',
select: function(args) {
- $.ajax({
- url: createURL('listStorageProviders'),
- data: {
- type: 'image'
- },
- success: function(json) {
- var objs = json.liststorageprovidersresponse.dataStoreProvider;
- var items = [{ id: '', description: ''}];
- if (objs != null) {
- for (var i = 0; i < objs.length; i++) {
- items.push({
- id: objs[i].name,
- description: objs[i].name
- });
- }
- }
+ var storageproviders = [];
+ $.ajax({
+ url: createURL('listImageStores'),
+ data: {
+ provider: 'S3'
+ },
+ async: true,
+ success: function(json) {
+ var s3stores = json.listimagestoresresponse.imagestore;
+ if(s3stores != null && s3stores.length > 0) {
+ storageproviders.push({ id: 'S3', description: 'S3'});
+ } else {
+ $.ajax({
+ url: createURL('listStorageProviders'),
+ data: {
+ type: 'image'
+ },
+ async: false,
+ success: function(json) {
+ var objs = json.liststorageprovidersresponse.dataStoreProvider;
+ storageproviders.push({ id: '', description: ''});
+ if (objs != null) {
+ for (var i = 0; i < objs.length; i++) {
+ storageproviders.push({
+ id: objs[i].name,
+ description: objs[i].name
+ });
+ }
+ }
+ }
+ });
+ }
args.response.success({
- data: items
- });
-
- args.$select.change(function() {
+ data: storageproviders
+ });
+
+ args.$select.change(function() {
var $form = $(this).closest('form');
var $fields = $form.find('.field');
@@ -1874,6 +1890,14 @@
$fields.filter('[rel=key]').hide();
} else if ($(this).val() == "S3") {
$fields.filter('[rel=name]').css('display', 'inline-block');
+
+ if(s3stores != null && s3stores.length > 0) {
+ $fields.filter('[rel=name]').find('input').val(s3stores[0].name);
+ $fields.filter('[rel=name]').find('input').attr("disabled", "disabled");
+ } else {
+ //$fields.filter('[rel=name]').find('input').val("");
+ $fields.filter('[rel=name]').find('input').removeAttr("disabled");
+ }
//NFS
$fields.filter('[rel=zoneid]').hide();
@@ -1881,19 +1905,36 @@
$fields.filter('[rel=path]').hide();
//S3
- $fields.filter('[rel=accesskey]').css('display', 'inline-block');
- $fields.filter('[rel=secretkey]').css('display', 'inline-block');
- $fields.filter('[rel=bucket]').css('display', 'inline-block');
- $fields.filter('[rel=endpoint]').css('display', 'inline-block');
- $fields.filter('[rel=usehttps]').css('display', 'inline-block');
- $fields.filter('[rel=connectiontimeout]').css('display', 'inline-block');
- $fields.filter('[rel=maxerrorretry]').css('display', 'inline-block');
- $fields.filter('[rel=sockettimeout]').css('display', 'inline-block');
-
- $fields.filter('[rel=createNfsCache]').find('input').attr('checked', 'checked');
- $fields.filter('[rel=createNfsCache]').css('display', 'inline-block');
- $fields.filter('[rel=nfsCacheNfsServer]').css('display', 'inline-block');
- $fields.filter('[rel=nfsCachePath]').css('display', 'inline-block');
+ if(s3stores != null && s3stores.length > 0) {
+ $fields.filter('[rel=accesskey]').hide();
+ $fields.filter('[rel=secretkey]').hide();
+ $fields.filter('[rel=bucket]').hide();
+ $fields.filter('[rel=endpoint]').hide();
+ $fields.filter('[rel=usehttps]').hide();
+ $fields.filter('[rel=connectiontimeout]').hide();
+ $fields.filter('[rel=maxerrorretry]').hide();
+ $fields.filter('[rel=sockettimeout]').hide();
+
+ $fields.filter('[rel=createNfsCache]').find('input').attr('checked', 'checked');
+ $fields.filter('[rel=createNfsCache]').find('input').attr("disabled", "disabled");
+ $fields.filter('[rel=createNfsCache]').css('display', 'inline-block');
+ $fields.filter('[rel=nfsCacheNfsServer]').css('display', 'inline-block');
+ $fields.filter('[rel=nfsCachePath]').css('display', 'inline-block');
+ } else {
+ $fields.filter('[rel=accesskey]').css('display', 'inline-block');
+ $fields.filter('[rel=secretkey]').css('display', 'inline-block');
+ $fields.filter('[rel=bucket]').css('display', 'inline-block');
+ $fields.filter('[rel=endpoint]').css('display', 'inline-block');
+ $fields.filter('[rel=usehttps]').css('display', 'inline-block');
+ $fields.filter('[rel=connectiontimeout]').css('display', 'inline-block');
+ $fields.filter('[rel=maxerrorretry]').css('display', 'inline-block');
+ $fields.filter('[rel=sockettimeout]').css('display', 'inline-block');
+
+ $fields.filter('[rel=createNfsCache]').find('input').attr('checked', 'checked');
+ $fields.filter('[rel=createNfsCache]').css('display', 'inline-block');
+ $fields.filter('[rel=nfsCacheNfsServer]').css('display', 'inline-block');
+ $fields.filter('[rel=nfsCachePath]').css('display', 'inline-block');
+ }
//Swift
$fields.filter('[rel=url]').hide();
@@ -1929,11 +1970,10 @@
$fields.filter('[rel=username]').css('display', 'inline-block');
$fields.filter('[rel=key]').css('display', 'inline-block');
}
- });
-
- args.$select.change();
- }
- });
+ });
+ args.$select.change();
+ }
+ });
}
},
@@ -2055,7 +2095,9 @@
}
},
- action: function(args) {
+ action: function(args) {
+ var $wizard = args.wizard;
+
var advZoneConfiguredVirtualRouterCount = 0; //for multiple physical networks in advanced zone. Each physical network has 2 virtual routers: regular one and VPC one.
var success = args.response.success;
@@ -4108,62 +4150,69 @@
});
}
});
- } else if (args.data.secondaryStorage.provider == 'S3') {
- $.extend(data, {
- provider: args.data.secondaryStorage.provider,
- 'details[0].key': 'accesskey',
- 'details[0].value': args.data.secondaryStorage.accesskey,
- 'details[1].key': 'secretkey',
- 'details[1].value': args.data.secondaryStorage.secretkey,
- 'details[2].key': 'bucket',
- 'details[2].value': args.data.secondaryStorage.bucket,
- 'details[3].key': 'usehttps',
- 'details[3].value': (args.data.secondaryStorage.usehttps != null && args.data.secondaryStorage.usehttps == 'on' ? 'true' : 'false')
- });
+ } else if (args.data.secondaryStorage.provider == 'S3') {
+ if($wizard.find('form[rel=secondaryStorage]').find('div[rel=name]').find('input').attr("disabled") == "disabled") { //Name textbox is disabled (and populated with S3 image setore name) when S3 image store exists. In this case, do not call addImageStore to create S3 image store.
+ complete({
+ data: args.data
+ });
+ } else { //Name textbox is not disabled when S3 image store does not exist. In this case, call addImageStore to create S3 image store.
+ $.extend(data, {
+ provider: args.data.secondaryStorage.provider,
+ 'details[0].key': 'accesskey',
+ 'details[0].value': args.data.secondaryStorage.accesskey,
+ 'details[1].key': 'secretkey',
+ 'details[1].value': args.data.secondaryStorage.secretkey,
+ 'details[2].key': 'bucket',
+ 'details[2].value': args.data.secondaryStorage.bucket,
+ 'details[3].key': 'usehttps',
+ 'details[3].value': (args.data.secondaryStorage.usehttps != null && args.data.secondaryStorage.usehttps == 'on' ? 'true' : 'false')
+ });
- var index = 4;
- if (args.data.secondaryStorage.endpoint != null && args.data.secondaryStorage.endpoint.length > 0) {
- data['details[' + index.toString() + '].key'] = 'endpoint';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.endpoint;
- index++;
- }
- if (args.data.secondaryStorage.connectiontimeout != null && args.data.secondaryStorage.connectiontimeout.length > 0) {
- data['details[' + index.toString() + '].key'] = 'connectiontimeout';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.connectiontimeout;
- index++;
- }
- if (args.data.secondaryStorage.maxerrorretry != null && args.data.secondaryStorage.maxerrorretry.length > 0) {
- data['details[' + index.toString() + '].key'] = 'maxerrorretry';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.maxerrorretry;
- index++;
- }
- if (args.data.secondaryStorage.sockettimeout != null && args.data.secondaryStorage.sockettimeout.length > 0) {
- data['details[' + index.toString() + '].key'] = 'sockettimeout';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.sockettimeout;
- index++;
- }
- $.ajax({
- url: createURL('addImageStore'),
- data: data,
- success: function(json) {
- g_regionsecondaryenabled = true;
-
- complete({
- data: $.extend(args.data, {
- returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
- })
- });
- },
- error: function(XMLHttpResponse) {
- var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
- error('addSecondaryStorage', errorMsg, {
- fn: 'addSecondaryStorage',
- args: args
- });
+ var index = 4;
+ if (args.data.secondaryStorage.endpoint != null && args.data.secondaryStorage.endpoint.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'endpoint';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.endpoint;
+ index++;
}
- });
-
- if (args.data.secondaryStorage.createNfsCache == 'on') {
+ if (args.data.secondaryStorage.connectiontimeout != null && args.data.secondaryStorage.connectiontimeout.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'connectiontimeout';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.connectiontimeout;
+ index++;
+ }
+ if (args.data.secondaryStorage.maxerrorretry != null && args.data.secondaryStorage.maxerrorretry.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'maxerrorretry';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.maxerrorretry;
+ index++;
+ }
+ if (args.data.secondaryStorage.sockettimeout != null && args.data.secondaryStorage.sockettimeout.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'sockettimeout';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.sockettimeout;
+ index++;
+ }
+ $.ajax({
+ url: createURL('addImageStore'),
+ data: data,
+ success: function(json) {
+ g_regionsecondaryenabled = true;
+
+ complete({
+ data: $.extend(args.data, {
+ returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
+ })
+ });
+ },
+ error: function(XMLHttpResponse) {
+ var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
+ error('addSecondaryStorage', errorMsg, {
+ fn: 'addSecondaryStorage',
+ args: args
+ });
+ }
+ });
+ }
+
+ //NFS Cache
+ if ($wizard.find('form[rel=secondaryStorage]').find('div[rel=createNfsCache]').find("input[type=checkbox]").is(':checked') == true) {
var zoneid = args.data.secondaryStorage.nfsCacheZoneid;
var nfs_server = args.data.secondaryStorage.nfsCacheNfsServer;
var path = args.data.secondaryStorage.nfsCachePath;
[13/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CIFS support for secondary storage is documented here: https://cwiki.apache.org/confluence/display/CLOUDSTACK/CIFS+Support
It was implemented by extending the NFS provider. Its validation was updated so that you can pass it a URL containing the
details of a CIFS share. The code that mounts NFS shares was extended to allow it do the same for CIFS shares. Otherwise,
the secondary storage code is left unchanged.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e958f22f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e958f22f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e958f22f
Branch: refs/heads/kvm-vnc-listen
Commit: e958f22ff34e089b4214ee5be68688540db5291a
Parents: a7c91fe
Author: Donal Lafferty <do...@citrix.com>
Authored: Wed Sep 11 14:20:33 2013 +0530
Committer: Devdeep Singh <de...@gmail.com>
Committed: Wed Sep 11 14:23:29 2013 +0530
----------------------------------------------------------------------
.../motion/AncientDataMotionStrategy.java | 12 +-
.../datastore/protocol/DataStoreProtocol.java | 2 +-
.../CloudStackImageStoreLifeCycleImpl.java | 43 ++-
...CloudStackPrimaryDataStoreLifeCycleImpl.java | 20 +-
.../com/cloud/resource/ResourceManagerImpl.java | 12 +-
.../com/cloud/storage/StorageManagerImpl.java | 10 +-
server/src/com/cloud/test/DatabaseConfig.java | 2 +-
.../secondary-storage/conf/agent.properties | 2 +
services/secondary-storage/conf/log4j.xml | 102 ++++++
services/secondary-storage/pom.xml | 10 +-
.../LocalNfsSecondaryStorageResource.java | 87 ++----
.../resource/NfsSecondaryStorageResource.java | 308 ++++++++++++++-----
.../resource/SecondaryStorageDiscoverer.java | 9 +-
.../storage/template/DownloadManagerImpl.java | 2 +-
.../LocalNfsSecondaryStorageResourceTest.java | 75 ++++-
.../NfsSecondaryStorageResourceTest.java | 120 ++++++++
utils/src/com/cloud/utils/UriUtils.java | 46 ++-
17 files changed, 666 insertions(+), 196 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
index c8a24c6..96d1f5a 100644
--- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
+++ b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
@@ -148,12 +148,6 @@ public class
if (srcData.getType() == DataObjectType.TEMPLATE) {
TemplateInfo template = (TemplateInfo)srcData;
- if (template.getHypervisorType() == HypervisorType.Hyperv) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("needCacheStorage false due to src TemplateInfo, which is DataObjectType.TEMPLATE of HypervisorType.Hyperv");
- }
- return false;
- }
}
if (s_logger.isDebugEnabled()) {
@@ -304,11 +298,11 @@ public class
Scope destScope = getZoneScope(destData.getDataStore().getScope());
DataStore cacheStore = cacheMgr.getCacheStorage(destScope);
if (cacheStore == null) {
- // need to find a nfs image store, assuming that can't copy volume
+ // need to find a nfs or cifs image store, assuming that can't copy volume
// directly to s3
ImageStoreEntity imageStore = (ImageStoreEntity) this.dataStoreMgr.getImageStore(destScope.getScopeId());
- if (!imageStore.getProtocol().equalsIgnoreCase("nfs")) {
- s_logger.debug("can't find a nfs image store");
+ if (!imageStore.getProtocol().equalsIgnoreCase("nfs") && !imageStore.getProtocol().equalsIgnoreCase("cifs")) {
+ s_logger.debug("can't find a nfs (or cifs) image store to satisfy the need for a staging store");
return null;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
index b27c96e..ee9f0fb 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/protocol/DataStoreProtocol.java
@@ -17,7 +17,7 @@
package org.apache.cloudstack.storage.datastore.protocol;
public enum DataStoreProtocol {
- NFS("nfs"), ISCSI("iscsi");
+ NFS("nfs"), CIFS("cifs"), ISCSI("iscsi");
private String name;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java
index 21a5e0a..ee6f47b 100644
--- a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java
+++ b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackImageStoreLifeCycleImpl.java
@@ -16,14 +16,16 @@
// under the License.
package org.apache.cloudstack.storage.datastore.lifecycle;
-import com.cloud.agent.api.StoragePoolInfo;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.resource.Discoverer;
-import com.cloud.resource.ResourceManager;
-import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.ScopeType;
-import com.cloud.utils.UriUtils;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.apache.log4j.Logger;
+
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.HostScope;
@@ -33,14 +35,15 @@ import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
import org.apache.cloudstack.storage.image.datastore.ImageStoreHelper;
import org.apache.cloudstack.storage.image.datastore.ImageStoreProviderManager;
import org.apache.cloudstack.storage.image.store.lifecycle.ImageStoreLifeCycle;
-import org.apache.log4j.Logger;
-import javax.inject.Inject;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import com.cloud.agent.api.StoragePoolInfo;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.resource.Discoverer;
+import com.cloud.resource.ResourceManager;
+import com.cloud.storage.DataStoreRole;
+import com.cloud.storage.ScopeType;
+import com.cloud.utils.UriUtils;
public class CloudStackImageStoreLifeCycleImpl implements ImageStoreLifeCycle {
@@ -87,13 +90,21 @@ public class CloudStackImageStoreLifeCycleImpl implements ImageStoreLifeCycle {
try {
uri = new URI(UriUtils.encodeURIComponent(url));
if (uri.getScheme() == null) {
- throw new InvalidParameterValueException("uri.scheme is null " + url + ", add nfs:// as a prefix");
+ throw new InvalidParameterValueException("uri.scheme is null " + url + ", add nfs:// (or cifs://) as a prefix");
} else if (uri.getScheme().equalsIgnoreCase("nfs")) {
if (uri.getHost() == null || uri.getHost().equalsIgnoreCase("") || uri.getPath() == null
|| uri.getPath().equalsIgnoreCase("")) {
throw new InvalidParameterValueException(
"Your host and/or path is wrong. Make sure it's of the format nfs://hostname/path");
}
+ } else if (uri.getScheme().equalsIgnoreCase("cifs")) {
+ // Don't validate against a URI encoded URI.
+ URI cifsUri = new URI(url);
+ String warnMsg = UriUtils.getCifsUriParametersProblems(cifsUri);
+ if (warnMsg != null)
+ {
+ throw new InvalidParameterValueException(warnMsg);
+ }
}
} catch (URISyntaxException e) {
throw new InvalidParameterValueException(url + " is not a valid uri");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
index b9b7424..9a70124 100644
--- a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
+++ b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/lifecycle/CloudStackPrimaryDataStoreLifeCycleImpl.java
@@ -143,13 +143,21 @@ public class CloudStackPrimaryDataStoreLifeCycleImpl implements PrimaryDataStore
try {
uri = new URI(UriUtils.encodeURIComponent(url));
if (uri.getScheme() == null) {
- throw new InvalidParameterValueException("scheme is null " + url + ", add nfs:// as a prefix");
+ throw new InvalidParameterValueException("scheme is null " + url + ", add nfs:// (or cifs://) as a prefix");
} else if (uri.getScheme().equalsIgnoreCase("nfs")) {
String uriHost = uri.getHost();
String uriPath = uri.getPath();
if (uriHost == null || uriPath == null || uriHost.trim().isEmpty() || uriPath.trim().isEmpty()) {
throw new InvalidParameterValueException("host or path is null, should be nfs://hostname/path");
}
+ } else if (uri.getScheme().equalsIgnoreCase("cifs")) {
+ // Don't validate against a URI encoded URI.
+ URI cifsUri = new URI(url);
+ String warnMsg = UriUtils.getCifsUriParametersProblems(cifsUri);
+ if (warnMsg != null)
+ {
+ throw new InvalidParameterValueException(warnMsg);
+ }
} else if (uri.getScheme().equalsIgnoreCase("sharedMountPoint")) {
String uriPath = uri.getPath();
if (uriPath == null) {
@@ -193,6 +201,16 @@ public class CloudStackPrimaryDataStoreLifeCycleImpl implements PrimaryDataStore
parameters.setHost(storageHost);
parameters.setPort(port);
parameters.setPath(hostPath);
+ } else if (scheme.equalsIgnoreCase("cifs")) {
+ if (port == -1) {
+ port = 445;
+ }
+ parameters.setType(StoragePoolType.NetworkFilesystem);
+ parameters.setHost(storageHost);
+ parameters.setPort(port);
+ parameters.setPath(hostPath);
+ parameters.setUserInfo(uri.getQuery());
+
} else if (scheme.equalsIgnoreCase("file")) {
if (port == -1) {
port = 0;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/server/src/com/cloud/resource/ResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java
index 69cbd5b..76d7cf9 100755
--- a/server/src/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/com/cloud/resource/ResourceManagerImpl.java
@@ -685,12 +685,20 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
try {
uri = new URI(UriUtils.encodeURIComponent(url));
if (uri.getScheme() == null) {
- throw new InvalidParameterValueException("uri.scheme is null " + url + ", add nfs:// as a prefix");
+ throw new InvalidParameterValueException("uri.scheme is null " + url + ", add nfs:// (or cifs://) as a prefix");
} else if (uri.getScheme().equalsIgnoreCase("nfs")) {
if (uri.getHost() == null || uri.getHost().equalsIgnoreCase("") || uri.getPath() == null || uri.getPath().equalsIgnoreCase("")) {
throw new InvalidParameterValueException("Your host and/or path is wrong. Make sure it's of the format nfs://hostname/path");
}
- }
+ } else if (uri.getScheme().equalsIgnoreCase("cifs")) {
+ // Don't validate against a URI encoded URI.
+ URI cifsUri = new URI(url);
+ String warnMsg = UriUtils.getCifsUriParametersProblems(cifsUri);
+ if (warnMsg != null)
+ {
+ throw new InvalidParameterValueException(warnMsg);
+ }
+ }
} catch (URISyntaxException e) {
throw new InvalidParameterValueException(url + " is not a valid uri");
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java
index b380692..8417066 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -1406,11 +1406,19 @@ public class StorageManagerImpl extends ManagerBase implements StorageManager, C
try {
uri = new URI(UriUtils.encodeURIComponent(newUrl));
if (uri.getScheme() == null) {
- throw new InvalidParameterValueException("uri.scheme is null " + newUrl + ", add nfs:// as a prefix");
+ throw new InvalidParameterValueException("uri.scheme is null " + newUrl + ", add nfs:// (or cifs://) as a prefix");
} else if (uri.getScheme().equalsIgnoreCase("nfs")) {
if (uri.getHost() == null || uri.getHost().equalsIgnoreCase("") || uri.getPath() == null || uri.getPath().equalsIgnoreCase("")) {
throw new InvalidParameterValueException("Your host and/or path is wrong. Make sure it's of the format nfs://hostname/path");
}
+ } else if (uri.getScheme().equalsIgnoreCase("cifs")) {
+ // Don't validate against a URI encoded URI.
+ URI cifsUri = new URI(newUrl);
+ String warnMsg = UriUtils.getCifsUriParametersProblems(cifsUri);
+ if (warnMsg != null)
+ {
+ throw new InvalidParameterValueException(warnMsg);
+ }
}
} catch (URISyntaxException e) {
throw new InvalidParameterValueException(newUrl + " is not a valid uri");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/server/src/com/cloud/test/DatabaseConfig.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/test/DatabaseConfig.java b/server/src/com/cloud/test/DatabaseConfig.java
index 63f77b6..38a1abf 100755
--- a/server/src/com/cloud/test/DatabaseConfig.java
+++ b/server/src/com/cloud/test/DatabaseConfig.java
@@ -505,7 +505,7 @@ public class DatabaseConfig {
stmt.setLong(14, 1238425896);
boolean nfs = false;
- if (url.startsWith("nfs")) {
+ if (url.startsWith("nfs") || url.startsWith("cifs")) {
nfs = true;
}
if (nfs) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/conf/agent.properties
----------------------------------------------------------------------
diff --git a/services/secondary-storage/conf/agent.properties b/services/secondary-storage/conf/agent.properties
index aab82b6..507ea4d 100644
--- a/services/secondary-storage/conf/agent.properties
+++ b/services/secondary-storage/conf/agent.properties
@@ -1,2 +1,4 @@
#mount.path=~/secondary-storage/
resource=org.apache.cloudstack.storage.resource.NfsSecondaryStorageResource
+testCifsMount=cifs://192.168.1.1/CSHV3?user=administrator&password=1pass%40word1
+#testLocalRoot=test
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/conf/log4j.xml
----------------------------------------------------------------------
diff --git a/services/secondary-storage/conf/log4j.xml b/services/secondary-storage/conf/log4j.xml
new file mode 100644
index 0000000..9511f30
--- /dev/null
+++ b/services/secondary-storage/conf/log4j.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+ <!-- ================================= -->
+ <!-- Preserve messages in a local file -->
+ <!-- ================================= -->
+
+ <!-- A time/date based rolling appender -->
+ <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
+ <param name="File" value="${ss.log.home}systemvm.log"/>
+ <param name="Append" value="true"/>
+ <param name="Threshold" value="DEBUG"/>
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %-5p [%c{3}] (%t:%x) %m%n"/>
+ </layout>
+ </appender>
+
+ <!-- ============================== -->
+ <!-- Append messages to the console -->
+ <!-- ============================== -->
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <param name="Target" value="System.out"/>
+ <param name="Threshold" value="DEBUG"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
+ </layout>
+ </appender>
+
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+
+ <category name="com.cloud.console.ConsoleCanvas">
+ <priority value="WARN"/>
+ </category>
+
+ <category name="com.cloud.consoleproxy.ConsoleProxyAjaxImageHandler">
+ <priority value="WARN"/>
+ </category>
+
+ <category name="com.cloud.consoleproxy.ConsoleProxyViewer">
+ <priority value="WARN"/>
+ </category>
+
+ <category name="com.cloud.consoleproxy">
+ <priority value="INFO"/>
+ </category>
+
+ <category name="com.cloud">
+ <priority value="DEBUG"/>
+ </category>
+
+ <!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
+ <category name="org.apache">
+ <priority value="DEBUG"/>
+ </category>
+
+ <category name="org">
+ <priority value="INFO"/>
+ </category>
+
+ <category name="net">
+ <priority value="INFO"/>
+ </category>
+
+ <!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <level value="DEBUG"/>
+ <appender-ref ref="CONSOLE"/>
+ <appender-ref ref="FILE"/>
+ </root>
+
+</log4j:configuration>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/pom.xml
----------------------------------------------------------------------
diff --git a/services/secondary-storage/pom.xml b/services/secondary-storage/pom.xml
index ea4bfca..9fe8da3 100644
--- a/services/secondary-storage/pom.xml
+++ b/services/secondary-storage/pom.xml
@@ -26,7 +26,10 @@
<version>4.3.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
- <dependencies>
+ <properties>
+ <skipTests>true</skipTests>
+ </properties>
+ <dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
@@ -64,7 +67,10 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration>
- <skipTests>true</skipTests>
+ <skipTests>${skipTests}</skipTests>
+ <systemPropertyVariables>
+ <log4j.configuration>file:${project.build.testSourceDirectory}/../conf/log4j.xml</log4j.configuration>
+ </systemPropertyVariables>
</configuration>
</plugin>
<plugin>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
index c55c236..926a1e8 100644
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResource.java
@@ -82,15 +82,8 @@ public class LocalNfsSecondaryStorageResource extends NfsSecondaryStorageResourc
synchronized public String getRootDir(String secUrl) {
try {
URI uri = new URI(secUrl);
- String nfsHost = uri.getHost();
-
- InetAddress nfsHostAddr = InetAddress.getByName(nfsHost);
- String nfsHostIp = nfsHostAddr.getHostAddress();
- String nfsPath = nfsHostIp + ":" + uri.getPath();
- String dir = UUID.nameUUIDFromBytes(nfsPath.getBytes()).toString();
- String root = _parent + "/" + dir;
- mount(root, nfsPath);
- return root;
+ String dir = mountUri(uri);
+ return _parent + "/" + dir;
} catch (Exception e) {
String msg = "GetRootDir for " + secUrl + " failed due to " + e.toString();
s_logger.error(msg, e);
@@ -99,74 +92,30 @@ public class LocalNfsSecondaryStorageResource extends NfsSecondaryStorageResourc
}
@Override
- protected String mount(String root, String nfsPath) {
- File file = new File(root);
- if (!file.exists()) {
- if (_storage.mkdir(root)) {
- s_logger.debug("create mount point: " + root);
- } else {
- s_logger.debug("Unable to create mount point: " + root);
- return null;
- }
+ protected void mount(String localRootPath, String remoteDevice, URI uri) {
+ ensureLocalRootPathExists(localRootPath, uri);
+
+ if (mountExists(localRootPath, uri)) {
+ return;
}
- Script script = null;
- String result = null;
- script = new Script(!_inSystemVM, "mount", _timeout, s_logger);
- List<String> res = new ArrayList<String>();
- ZfsPathParser parser = new ZfsPathParser(root);
- script.execute(parser);
- res.addAll(parser.getPaths());
- for (String s : res) {
- if (s.contains(root)) {
- s_logger.debug("mount point " + root + " already exists");
- return root;
- }
- }
-
- Script command = new Script(!_inSystemVM, "mount", _timeout, s_logger);
- command.add("-t", "nfs");
- if ("Mac OS X".equalsIgnoreCase(System.getProperty("os.name"))) {
- command.add("-o", "resvport");
- }
- if (_inSystemVM) {
- // Fedora Core 12 errors out with any -o option executed from java
- command.add("-o", "soft,timeo=133,retrans=2147483647,tcp,acdirmax=0,acdirmin=0");
- }
- command.add(nfsPath);
- command.add(root);
- result = command.execute();
- if (result != null) {
- s_logger.warn("Unable to mount " + nfsPath + " due to " + result);
- file = new File(root);
- if (file.exists())
- file.delete();
- return null;
- }
- s_logger.debug("Successfully mount " + nfsPath);
+ attemptMount(localRootPath, remoteDevice, uri);
- // Change permissions for the mountpoint
- script = new Script(true, "chmod", _timeout, s_logger);
- script.add("777", root);
- result = script.execute();
+ // Change permissions for the mountpoint - seems to bypass authentication
+ Script script = new Script(true, "chmod", _timeout, s_logger);
+ script.add("777", localRootPath);
+ String result = script.execute();
if (result != null) {
- s_logger.warn("Unable to set permissions for " + root + " due to " + result);
- return null;
+ String errMsg = "Unable to set permissions for " + localRootPath + " due to " + result;
+ s_logger.error(errMsg);
+ throw new CloudRuntimeException(errMsg);
}
- s_logger.debug("Successfully set 777 permission for " + root);
+ s_logger.debug("Successfully set 777 permission for " + localRootPath);
// XXX: Adding the check for creation of snapshots dir here. Might have
// to move it somewhere more logical later.
- if (!checkForSnapshotsDir(root)) {
- return null;
- }
-
- // Create the volumes dir
- if (!checkForVolumesDir(root)) {
- return null;
- }
-
- return root;
+ checkForSnapshotsDir(localRootPath);
+ checkForVolumesDir(localRootPath);
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index 3a563cb..3ef950b 100755
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -27,6 +27,7 @@ import java.io.*;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.URI;
+import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
@@ -59,8 +60,10 @@ import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;
@@ -156,6 +159,14 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
final private String _tmpltpp = "template.properties";
protected String createTemplateFromSnapshotXenScript;
+ public void setParentPath(String path) {
+ _parent = path;
+ }
+
+ public String getMountingRoot() {
+ return _parent;
+ }
+
@Override
public void disconnected() {
}
@@ -1205,16 +1216,10 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
String secUrl = cmd.getSecUrl();
try {
URI uri = new URI(secUrl);
- String nfsHost = uri.getHost();
-
- InetAddress nfsHostAddr = InetAddress.getByName(nfsHost);
- String nfsHostIp = nfsHostAddr.getHostAddress();
+ String nfsHostIp = getUriHostIp(uri);
addRouteToInternalIpOrCidr(_storageGateway, _storageIp, _storageNetmask, nfsHostIp);
- String nfsPath = nfsHostIp + ":" + uri.getPath();
- String dir = UUID.nameUUIDFromBytes(nfsPath.getBytes()).toString();
- String root = _parent + "/" + dir;
- mount(root, nfsPath);
+ String dir = mountUri(uri);
configCerts(cmd.getCerts());
@@ -1893,15 +1898,8 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
}
try {
URI uri = new URI(secUrl);
- String nfsHost = uri.getHost();
-
- InetAddress nfsHostAddr = InetAddress.getByName(nfsHost);
- String nfsHostIp = nfsHostAddr.getHostAddress();
- String nfsPath = nfsHostIp + ":" + uri.getPath();
- String dir = UUID.nameUUIDFromBytes(nfsPath.getBytes()).toString();
- String root = _parent + "/" + dir;
- mount(root, nfsPath);
- return root;
+ String dir = mountUri(uri);
+ return _parent + "/" + dir;
} catch (Exception e) {
String msg = "GetRootDir for " + secUrl + " failed due to " + e.toString();
s_logger.error(msg, e);
@@ -1968,6 +1966,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
String inSystemVM = (String) params.get("secondary.storage.vm");
if (inSystemVM == null || "true".equalsIgnoreCase(inSystemVM)) {
+ s_logger.debug("conf secondary.storage.vm is true, act as if executing in SSVM");
_inSystemVM = true;
}
@@ -1984,24 +1983,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
_timeout = NumbersUtil.parseInt(value, 1440) * 1000;
_storage = (StorageLayer) params.get(StorageLayer.InstanceConfigKey);
- if (_storage == null) {
- value = (String) params.get(StorageLayer.ClassConfigKey);
- if (value == null) {
- value = "com.cloud.storage.JavaStorageLayer";
- }
-
- try {
- Class<?> clazz = Class.forName(value);
- _storage = (StorageLayer) clazz.newInstance();
- _storage.configure("StorageLayer", params);
- } catch (ClassNotFoundException e) {
- throw new ConfigurationException("Unable to find class " + value);
- } catch (InstantiationException e) {
- throw new ConfigurationException("Unable to find class " + value);
- } catch (IllegalAccessException e) {
- throw new ConfigurationException("Unable to find class " + value);
- }
- }
+ configureStorageLayerClass(params);
if (_inSystemVM) {
_storage.mkdirs(_parent);
@@ -2090,6 +2072,28 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
return true;
}
+ protected void configureStorageLayerClass(Map<String, Object> params) throws ConfigurationException {
+ String value;
+ if (_storage == null) {
+ value = (String) params.get(StorageLayer.ClassConfigKey);
+ if (value == null) {
+ value = "com.cloud.storage.JavaStorageLayer";
+ }
+
+ try {
+ Class<?> clazz = Class.forName(value);
+ _storage = (StorageLayer) clazz.newInstance();
+ _storage.configure("StorageLayer", params);
+ } catch (ClassNotFoundException e) {
+ throw new ConfigurationException("Unable to find class " + value);
+ } catch (InstantiationException e) {
+ throw new ConfigurationException("Unable to find class " + value);
+ } catch (IllegalAccessException e) {
+ throw new ConfigurationException("Unable to find class " + value);
+ }
+ }
+ }
+
private void startAdditionalServices() {
if (!_inSystemVM) {
return;
@@ -2212,60 +2216,222 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
return result;
}
- protected String mount(String root, String nfsPath) {
- File file = new File(root);
- if (!file.exists()) {
- if (_storage.mkdir(root)) {
- s_logger.debug("create mount point: " + root);
- } else {
- s_logger.debug("Unable to create mount point: " + root);
- return null;
- }
+ /**
+ * Mount remote device named on local file system on subfolder of _parent
+ * field.
+ * <p>
+ *
+ * Supported schemes are "nfs" and "cifs".
+ * <p>
+ *
+ * CIFS parameters are documented with mount.cifs at
+ * http://linux.die.net/man/8/mount.cifs
+ * For simplicity, when a URI is used to specify a CIFS share,
+ * options such as domain,user,password are passed as query parameters.
+ *
+ * @param uri
+ * crresponding to the remote device. Will throw for unsupported
+ * scheme.
+ * @return name of folder in _parent that device was mounted.
+ * @throws UnknownHostException
+ */
+ protected String mountUri(URI uri) throws UnknownHostException {
+ String uriHostIp = getUriHostIp(uri);
+ String nfsPath = uriHostIp + ":" + uri.getPath();
+
+ // Single means of calculating mount directory regardless of scheme
+ String dir = UUID.nameUUIDFromBytes(nfsPath.getBytes()).toString();
+ String localRootPath = _parent + "/" + dir;
+
+ // remote device syntax varies by scheme.
+ String remoteDevice;
+ if (uri.getScheme().equals("cifs")) {
+ remoteDevice = "//" + uriHostIp + uri.getPath();
+ s_logger.debug("Mounting device with cifs-style path of "
+ + remoteDevice);
+ }
+ else
+ {
+ remoteDevice = nfsPath;
+ s_logger.debug("Mounting device with nfs-style path of "
+ + remoteDevice);
+ }
+
+ mount(localRootPath, remoteDevice, uri);
+
+ return dir;
+ }
+
+
+ protected void umount(String localRootPath, URI uri) {
+ ensureLocalRootPathExists(localRootPath, uri);
+
+ if (!mountExists(localRootPath, uri)) {
+ return;
}
- Script script = null;
- String result = null;
- script = new Script(!_inSystemVM, "mount", _timeout, s_logger);
- List<String> res = new ArrayList<String>();
- ZfsPathParser parser = new ZfsPathParser(root);
- script.execute(parser);
- res.addAll(parser.getPaths());
- for (String s : res) {
- if (s.contains(root)) {
- return root;
+ Script command = new Script(!_inSystemVM, "mount", _timeout, s_logger);
+ command.add(localRootPath);
+ String result = command.execute();
+ if (result != null) {
+ // Fedora Core 12 errors out with any -o option executed from java
+ String errMsg = "Unable to umount " + localRootPath + " due to "
+ + result;
+ s_logger.error(errMsg);
+ File file = new File(localRootPath);
+ if (file.exists()) {
+ file.delete();
}
+ throw new CloudRuntimeException(errMsg);
+ }
+ s_logger.debug("Successfully umounted " + localRootPath);
+ }
+
+ protected void mount(String localRootPath, String remoteDevice, URI uri) {
+ s_logger.debug("mount " + uri.toString() + " on " + localRootPath);
+ ensureLocalRootPathExists(localRootPath, uri);
+
+ if (mountExists(localRootPath, uri)) {
+ return;
}
+ attemptMount(localRootPath, remoteDevice, uri);
+
+ // XXX: Adding the check for creation of snapshots dir here. Might have
+ // to move it somewhere more logical later.
+ checkForSnapshotsDir(localRootPath);
+ checkForVolumesDir(localRootPath);
+ }
+
+ protected void attemptMount(String localRootPath, String remoteDevice, URI uri) {
+ String result;
+ s_logger.debug("Make cmdline call to mount " + remoteDevice + " at "
+ + localRootPath + " based on uri " + uri);
Script command = new Script(!_inSystemVM, "mount", _timeout, s_logger);
- command.add("-t", "nfs");
- if (_inSystemVM) {
- // Fedora Core 12 errors out with any -o option executed from java
- command.add("-o", "soft,timeo=133,retrans=2147483647,tcp,acdirmax=0,acdirmin=0");
+
+ String scheme = uri.getScheme().toLowerCase();
+ command.add("-t", scheme);
+
+ if (scheme.equals("nfs")) {
+ if ("Mac OS X".equalsIgnoreCase(System.getProperty("os.name"))) {
+ // See http://wiki.qnap.com/wiki/Mounting_an_NFS_share_from_OS_X
+ command.add("-o", "resvport");
+ }
+ if (_inSystemVM) {
+ command.add("-o",
+ "soft,timeo=133,retrans=2147483647,tcp,acdirmax=0,acdirmin=0");
+ }
+ } else if (scheme.equals("cifs")) {
+ String extraOpts = parseCifsMountOptions(uri);
+
+ // nfs acdirmax / acdirmin correspoonds to CIFS actimeo (see
+ // http://linux.die.net/man/8/mount.cifs)
+ // no equivalent to nfs timeo, retrans or tcp in CIFS
+ // todo: allow security mode to be set.
+ command.add("-o", extraOpts + "soft,actimeo=0");
+ } else {
+ String errMsg = "Unsupported storage device scheme " + scheme
+ + " in uri " + uri.toString();
+ s_logger.error(errMsg);
+ throw new CloudRuntimeException(errMsg);
}
- command.add(nfsPath);
- command.add(root);
+
+ command.add(remoteDevice);
+ command.add(localRootPath);
result = command.execute();
if (result != null) {
- s_logger.warn("Unable to mount " + nfsPath + " due to " + result);
- file = new File(root);
+ // Fedora Core 12 errors out with any -o option executed from java
+ String errMsg = "Unable to mount " + remoteDevice + " at "
+ + localRootPath + " due to " + result;
+ s_logger.error(errMsg);
+ File file = new File(localRootPath);
if (file.exists()) {
file.delete();
}
- return null;
+ throw new CloudRuntimeException(errMsg);
+ }
+ s_logger.debug("Successfully mounted " + remoteDevice + " at " + localRootPath);
+ }
+
+ protected String parseCifsMountOptions(URI uri) {
+ List<NameValuePair> args = URLEncodedUtils.parse(uri, "UTF-8");
+ boolean foundUser = false;
+ boolean foundPswd = false;
+ String extraOpts = "";
+ for (NameValuePair nvp : args) {
+ String name = nvp.getName();
+ if (name.equals("user")) {
+ foundUser = true;
+ s_logger.debug("foundUser is" + foundUser);
+ }
+ else if (name.equals("password")) {
+ foundPswd = true;
+ s_logger.debug("foundPswd is" + foundPswd);
+ }
+
+ extraOpts = extraOpts + name + "=" + nvp.getValue() + ",";
}
- // XXX: Adding the check for creation of snapshots dir here. Might have
- // to move it somewhere more logical later.
- if (!checkForSnapshotsDir(root)) {
- return null;
+ if (s_logger.isDebugEnabled())
+ {
+ s_logger.error("extraOpts now " + extraOpts);
}
- // Create the volumes dir
- if (!checkForVolumesDir(root)) {
- return null;
+ if (!foundUser || !foundPswd) {
+ String errMsg = "Missing user and password from URI. Make sure they"
+ + "are in the query string and separated by '&'. E.g. "
+ + "cifs://example.com/some_share?user=foo&password=bar";
+ s_logger.error(errMsg);
+ throw new CloudRuntimeException(errMsg);
}
+ return extraOpts;
+ }
+
+ protected boolean mountExists(String localRootPath, URI uri) {
+ Script script = null;
+ script = new Script(!_inSystemVM, "mount", _timeout, s_logger);
+
+ List<String> res = new ArrayList<String>();
+ ZfsPathParser parser = new ZfsPathParser(localRootPath);
+ script.execute(parser);
+ res.addAll(parser.getPaths());
+ for (String s : res) {
+ if (s.contains(localRootPath)) {
+ s_logger.debug("Some device already mounted at "
+ + localRootPath + ", no need to mount "
+ + uri.toString());
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected void ensureLocalRootPathExists(String localRootPath, URI uri) {
+ s_logger.debug("making available " + localRootPath + " on " + uri.toString());
+ File file = new File(localRootPath);
+ s_logger.debug("local folder for mount will be " + file.getPath());
+ if (!file.exists()) {
+ s_logger.debug("create mount point: " + file.getPath());
+ _storage.mkdir(file.getPath());
+
+ // Need to check after mkdir to allow O/S to complete operation
+ if (!file.exists()) {
+ String errMsg = "Unable to create local folder for: "
+ + localRootPath
+ + " in order to mount " + uri.toString();
+ s_logger.error(errMsg);
+ throw new CloudRuntimeException(errMsg);
+ }
+ }
+ }
- return root;
+ protected String getUriHostIp(URI uri) throws UnknownHostException {
+ String nfsHost = uri.getHost();
+ InetAddress nfsHostAddr = InetAddress.getByName(nfsHost);
+ String nfsHostIp = nfsHostAddr.getHostAddress();
+ s_logger.info("Determined host " + nfsHost + " corresponds to IP "
+ + nfsHostIp);
+ return nfsHostIp;
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
index 5d6d61f..0e5221b 100755
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
@@ -83,13 +83,16 @@ public class SecondaryStorageDiscoverer extends DiscovererBase implements Discov
@Override
public Map<? extends ServerResource, Map<String, String>> find(long dcId, Long podId, Long clusterId, URI uri, String username, String password, List<String> hostTags) {
- if (!uri.getScheme().equalsIgnoreCase("nfs") && !uri.getScheme().equalsIgnoreCase("file")
- && !uri.getScheme().equalsIgnoreCase("iso") && !uri.getScheme().equalsIgnoreCase("dummy")) {
+ if (!uri.getScheme().equalsIgnoreCase("nfs") && !uri.getScheme().equalsIgnoreCase("cifs")
+ && !uri.getScheme().equalsIgnoreCase("file")
+ && !uri.getScheme().equalsIgnoreCase("iso")
+ && !uri.getScheme().equalsIgnoreCase("dummy")) {
s_logger.debug("It's not NFS or file or ISO, so not a secondary storage server: " + uri.toString());
return null;
}
- if (uri.getScheme().equalsIgnoreCase("nfs") || uri.getScheme().equalsIgnoreCase("iso")) {
+ if (uri.getScheme().equalsIgnoreCase("nfs") || uri.getScheme().equalsIgnoreCase("cifs")
+ || uri.getScheme().equalsIgnoreCase("iso")) {
return createNfsSecondaryStorageResource(dcId, podId, uri);
} else if (uri.getScheme().equalsIgnoreCase("file")) {
return createLocalSecondaryStorageResource(dcId, podId, uri);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java b/services/secondary-storage/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
index bf68b29..20e39ee 100755
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/template/DownloadManagerImpl.java
@@ -566,7 +566,7 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
td = new LocalTemplateDownloader(_storage, url, tmpDir, maxTemplateSizeInBytes, new Completion(jobId));
} else if (uri.getScheme().equalsIgnoreCase("scp")) {
td = new ScpTemplateDownloader(_storage, url, tmpDir, maxTemplateSizeInBytes, new Completion(jobId));
- } else if (uri.getScheme().equalsIgnoreCase("nfs")) {
+ } else if (uri.getScheme().equalsIgnoreCase("nfs") || uri.getScheme().equalsIgnoreCase("cifs")) {
td = null;
// TODO: implement this.
throw new CloudRuntimeException("Scheme is not supported " + url);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
index 0c355ec..34d510d 100644
--- a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
+++ b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
@@ -18,7 +18,29 @@
*/
package org.apache.cloudstack.storage.resource;
-import com.cloud.agent.api.Answer;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Properties;
+import java.util.UUID;
+
+import javax.naming.ConfigurationException;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import org.apache.cloudstack.storage.command.CopyCmdAnswer;
+import org.apache.cloudstack.storage.command.CopyCommand;
+import org.apache.cloudstack.storage.command.DownloadCommand;
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
+
import com.cloud.agent.api.storage.DownloadAnswer;
import com.cloud.agent.api.storage.ListTemplateAnswer;
import com.cloud.agent.api.storage.ListTemplateCommand;
@@ -27,25 +49,15 @@ import com.cloud.agent.api.to.NfsTO;
import com.cloud.agent.api.to.SwiftTO;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.Storage;
-import com.cloud.utils.SwiftUtil;
-import junit.framework.Assert;
-import junit.framework.TestCase;
-import org.apache.cloudstack.api.command.user.tag.ListTagsCmd;
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.command.DownloadCommand;
-import org.apache.cloudstack.storage.to.SnapshotObjectTO;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
+import com.cloud.utils.PropertiesUtil;
+import com.cloud.utils.exception.CloudRuntimeException;
+public class LocalNfsSecondaryStorageResourceTest extends TestCase {
+ private static Map<String, Object> testParams;
-import javax.naming.ConfigurationException;
-import java.util.HashMap;
-import java.util.UUID;
+ private static final Logger s_logger = Logger
+ .getLogger(LocalNfsSecondaryStorageResourceTest.class.getName());
-public class LocalNfsSecondaryStorageResourceTest extends TestCase {
LocalNfsSecondaryStorageResource resource;
@Before
@Override
@@ -53,7 +65,15 @@ public class LocalNfsSecondaryStorageResourceTest extends TestCase {
resource = new LocalNfsSecondaryStorageResource();
resource.setInSystemVM(true);
+ testParams = PropertiesUtil.toMap(loadProperties());
+ resource.configureStorageLayerClass(testParams);
+ Object testLocalRoot = testParams.get("testLocalRoot");
resource.setParentPath("/mnt");
+
+ if (testLocalRoot != null) {
+ resource.setParentPath((String)testLocalRoot);
+ }
+
System.setProperty("paths.script", "/Users/edison/develop/asf-master/script");
//resource.configure("test", new HashMap<String, Object>());
}
@@ -101,4 +121,25 @@ public class LocalNfsSecondaryStorageResourceTest extends TestCase {
Assert.assertTrue(listAnswer.getTemplateInfo().size() > 0);
}
+ public static Properties loadProperties() throws ConfigurationException {
+ Properties properties = new Properties();
+ final File file = PropertiesUtil.findConfigFile("agent.properties");
+ if (file == null) {
+ throw new ConfigurationException(
+ "Unable to find agent.properties.");
+ }
+
+ s_logger.info("agent.properties found at " + file.getAbsolutePath());
+
+ try {
+ properties.load(new FileInputStream(file));
+ } catch (final FileNotFoundException ex) {
+ throw new CloudRuntimeException("Cannot find the file: "
+ + file.getAbsolutePath(), ex);
+ } catch (final IOException ex) {
+ throw new CloudRuntimeException("IOException in reading "
+ + file.getAbsolutePath(), ex);
+ }
+ return properties;
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
new file mode 100644
index 0000000..a805c78
--- /dev/null
+++ b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.resource;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.naming.ConfigurationException;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.cloud.utils.PropertiesUtil;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public class NfsSecondaryStorageResourceTest extends TestCase {
+ private static Map<String, Object> testParams;
+
+ private static final Logger s_logger = Logger
+ .getLogger(NfsSecondaryStorageResourceTest.class.getName());
+
+ NfsSecondaryStorageResource resource;
+ @Before
+ @Override
+ public void setUp() throws ConfigurationException {
+ s_logger.setLevel(Level.ALL);
+ resource = new NfsSecondaryStorageResource();
+ resource.setInSystemVM(true);
+ testParams = PropertiesUtil.toMap(loadProperties());
+ resource.configureStorageLayerClass(testParams);
+ Object testLocalRoot = testParams.get("testLocalRoot");
+ if (testLocalRoot != null) {
+ resource.setParentPath((String)testLocalRoot);
+ }
+ }
+
+ @Test
+ public void testMount() throws Exception {
+ String sampleUriStr = "cifs://192.168.1.128/CSHV3?user=administrator&password=1pass%40word1&foo=bar";
+ URI sampleUri = new URI(sampleUriStr);
+
+ s_logger.info("Check HostIp parsing");
+ String hostIpStr = resource.getUriHostIp(sampleUri);
+ Assert.assertEquals("Expected host IP " + sampleUri.getHost() +
+ " and actual host IP " + hostIpStr + " differ.",
+ sampleUri.getHost(), hostIpStr);
+
+ s_logger.info("Check option parsing");
+ String expected = "user=administrator,password=1pass@word1,foo=bar,";
+ String actualOpts = resource.parseCifsMountOptions(sampleUri);
+ Assert.assertEquals("Options should be " + expected + " and not "
+ + actualOpts, expected, actualOpts);
+
+ // attempt a configured mount
+ final Map<String, Object> params =
+ PropertiesUtil.toMap(loadProperties());
+ String sampleMount = (String)params.get("testCifsMount");
+ if ( !sampleMount.isEmpty())
+ {
+ s_logger.info("functional test, mount " + sampleMount);
+ URI realMntUri = new URI(sampleMount);
+ String mntSubDir = resource.mountUri(realMntUri);
+ s_logger.info("functional test, umount " + mntSubDir);
+ resource.umount(resource.getMountingRoot() + mntSubDir, realMntUri);
+ }
+ else {
+ s_logger.info("no entry for testCifsMount in "
+ + "./conf/agent.properties - skip functional test");
+ }
+ }
+
+ public static Properties loadProperties() throws ConfigurationException {
+ Properties properties = new Properties();
+ final File file = PropertiesUtil.findConfigFile("agent.properties");
+ if (file == null) {
+ throw new ConfigurationException(
+ "Unable to find agent.properties.");
+ }
+
+ s_logger.info("agent.properties found at " + file.getAbsolutePath());
+
+ try {
+ properties.load(new FileInputStream(file));
+ } catch (final FileNotFoundException ex) {
+ throw new CloudRuntimeException("Cannot find the file: "
+ + file.getAbsolutePath(), ex);
+ } catch (final IOException ex) {
+ throw new CloudRuntimeException("IOException in reading "
+ + file.getAbsolutePath(), ex);
+ }
+ return properties;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e958f22f/utils/src/com/cloud/utils/UriUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/UriUtils.java b/utils/src/com/cloud/utils/UriUtils.java
index 1ff4d72..4759710 100644
--- a/utils/src/com/cloud/utils/UriUtils.java
+++ b/utils/src/com/cloud/utils/UriUtils.java
@@ -26,6 +26,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.net.UnknownHostException;
+import java.util.List;
import javax.net.ssl.HttpsURLConnection;
@@ -36,8 +37,8 @@ import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.log4j.Logger;
import com.cloud.utils.exception.CloudRuntimeException;
@@ -101,6 +102,47 @@ public class UriUtils {
return url;
}
+ public static String getCifsUriParametersProblems(URI uri) {
+ if (!UriUtils.hostAndPathPresent(uri)) {
+ String errMsg = "cifs URI missing host and/or path. "
+ + " Make sure it's of the format "
+ + "cifs://hostname/path?user=<username>&password=<password>";
+ s_logger.warn(errMsg);
+ return errMsg;
+ }
+ if (!UriUtils.cifsCredentialsPresent(uri))
+ {
+ String errMsg = "cifs URI missing user and password details. "
+ + "Add them as query parameters, e.g. "
+ + "cifs://example.com/some_share?user=foo&password=bar";
+ s_logger.warn(errMsg);
+ return errMsg;
+ }
+ return null;
+ }
+
+ public static boolean hostAndPathPresent(URI uri) {
+ return !(uri.getHost() == null || uri.getHost().trim().isEmpty()
+ || uri.getPath() == null || uri.getPath().trim().isEmpty());
+ }
+
+ public static boolean cifsCredentialsPresent(URI uri) {
+ List<NameValuePair> args = URLEncodedUtils.parse(uri, "UTF-8");
+ boolean foundUser = false;
+ boolean foundPswd = false;
+ for (NameValuePair nvp : args) {
+ String name = nvp.getName();
+ if (name.equals("user")) {
+ foundUser = true;
+ s_logger.debug("foundUser is" + foundUser);
+ }
+ else if (name.equals("password")) {
+ foundPswd = true;
+ s_logger.debug("foundPswd is" + foundPswd);
+ }
+ }
+ return (foundUser && foundPswd);
+ }
// Get the size of a file from URL response header.
public static Long getRemoteSize(String url) {
Long remoteSize = (long) 0;
[20/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-2289 updated with all the granular parameter at cluster/zone level
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f8f77915
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f8f77915
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f8f77915
Branch: refs/heads/kvm-vnc-listen
Commit: f8f779158da056be7da669884ae4ddd109cec044
Parents: 7c7faa6
Author: radhikap <ra...@citrix.com>
Authored: Thu Sep 12 11:58:27 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Thu Sep 12 11:58:27 2013 +0530
----------------------------------------------------------------------
docs/en-US/global-config.xml | 362 ++++++++++++++++++++++++++++++--------
1 file changed, 287 insertions(+), 75 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f8f77915/docs/en-US/global-config.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/global-config.xml b/docs/en-US/global-config.xml
index 407d97d..59373de 100644
--- a/docs/en-US/global-config.xml
+++ b/docs/en-US/global-config.xml
@@ -1,40 +1,43 @@
<?xml version='1.0' encoding='utf-8' ?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>
+
<!-- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
-->
-<chapter id="global-config">
+<section id="global-config">
<title>Setting Configuration Parameters</title>
<section id="about-global-config-parameters">
<title>About Configuration Parameters</title>
- <para>&PRODUCT; provides a variety of settings you can use to set limits, configure features,
- and enable or disable features in the cloud. Once your Management Server is running, you might
- need to set some of these configuration parameters, depending on what optional features
- you are setting up.
- You can set default values at the global level, which will be in effect throughout the cloud unless you override them at a lower level.
- You can make local settings, which will override the global configuration parameter values, at the level of an account, zone, cluster, or primary storage.</para>
- <para>The documentation for each &PRODUCT; feature should direct you to the names of the applicable
- parameters. The following table
- shows a few of the more useful parameters.</para>
+ <para>&PRODUCT; provides a variety of settings you can use to set limits, configure features,
+ and enable or disable features in the cloud. Once your Management Server is running, you might
+ need to set some of these configuration parameters, depending on what optional features you
+ are setting up. You can set default values at the global level, which will be in effect
+ throughout the cloud unless you override them at a lower level. You can make local settings,
+ which will override the global configuration parameter values, at the level of an account,
+ zone, cluster, or primary storage.</para>
+ <para>The documentation for each &PRODUCT; feature should direct you to the names of the
+ applicable parameters. The following table shows a few of the more useful parameters.</para>
<informaltable frame="all">
<tgroup cols="2" align="left" colsep="1" rowsep="1">
- <colspec colnum="1" colname="c1" colwidth="2*"/>
- <colspec colnum="2" colname="c2" colwidth="1*"/>
+ <colspec colnum="1" colname="c1" colwidth="1.0*"/>
+ <colspec colnum="2" colname="c2" colwidth="5.22*"/>
<thead>
<row>
<entry><para>Field</para></entry>
@@ -44,53 +47,59 @@
<tbody>
<row>
<entry><para>management.network.cidr</para></entry>
- <entry><para>A CIDR that describes the network that the management CIDRs reside on. This
- variable must be set for deployments that use vSphere. It is recommended to be set for
- other deployments as well. Example: 192.168.3.0/24.</para></entry>
+ <entry><para>A CIDR that describes the network that the management CIDRs reside on. This
+ variable must be set for deployments that use vSphere. It is recommended to be set
+ for other deployments as well. Example: 192.168.3.0/24.</para></entry>
</row>
<row>
<entry><para>xen.setup.multipath</para></entry>
- <entry><para>For XenServer nodes, this is a true/false variable that instructs CloudStack to
- enable iSCSI multipath on the XenServer Hosts when they are added. This defaults to false.
- Set it to true if you would like CloudStack to enable multipath.</para>
- <para>If this is true for a NFS-based deployment multipath will still be enabled on the
- XenServer host. However, this does not impact NFS operation and is harmless.</para></entry>
+ <entry><para>For XenServer nodes, this is a true/false variable that instructs
+ CloudStack to enable iSCSI multipath on the XenServer Hosts when they are added.
+ This defaults to false. Set it to true if you would like CloudStack to enable
+ multipath.</para>
+ <para>If this is true for a NFS-based deployment multipath will still be enabled on
+ the XenServer host. However, this does not impact NFS operation and is
+ harmless.</para></entry>
</row>
<row>
<entry><para>secstorage.allowed.internal.sites</para></entry>
- <entry><para>This is used to protect your internal network from rogue attempts to download
- arbitrary files using the template download feature. This is a comma-separated list of CIDRs.
- If a requested URL matches any of these CIDRs the Secondary Storage VM will use the private
- network interface to fetch the URL. Other URLs will go through the public interface.
- We suggest you set this to 1 or 2 hardened internal machines where you keep your templates.
- For example, set it to 192.168.1.66/32.</para></entry>
+ <entry><para>This is used to protect your internal network from rogue attempts to
+ download arbitrary files using the template download feature. This is a
+ comma-separated list of CIDRs. If a requested URL matches any of these CIDRs the
+ Secondary Storage VM will use the private network interface to fetch the URL. Other
+ URLs will go through the public interface. We suggest you set this to 1 or 2
+ hardened internal machines where you keep your templates. For example, set it to
+ 192.168.1.66/32.</para></entry>
</row>
<row>
<entry><para>use.local.storage</para></entry>
- <entry><para>Determines whether CloudStack will use storage that is local to the Host for data
- disks, templates, and snapshots. By default CloudStack will not use this storage. You should
- change this to true if you want to use local storage and you understand the reliability and
- feature drawbacks to choosing local storage.</para></entry>
+ <entry><para>Determines whether CloudStack will use storage that is local to the Host
+ for data disks, templates, and snapshots. By default CloudStack will not use this
+ storage. You should change this to true if you want to use local storage and you
+ understand the reliability and feature drawbacks to choosing local
+ storage.</para></entry>
</row>
<row>
<entry><para>host</para></entry>
- <entry><para>This is the IP address of the Management Server. If you are using multiple
- Management Servers you should enter a load balanced IP address that is reachable via
- the private network.</para></entry>
+ <entry><para>This is the IP address of the Management Server. If you are using multiple
+ Management Servers you should enter a load balanced IP address that is reachable via
+ the private network.</para></entry>
</row>
<row>
<entry><para>default.page.size</para></entry>
- <entry><para>Maximum number of items per page that can be returned by a CloudStack API command.
- The limit applies at the cloud level and can vary from cloud to cloud. You can override this
- with a lower value on a particular API call by using the page and pagesize API command parameters.
- For more information, see the Developer's Guide. Default: 500.</para></entry>
+ <entry><para>Maximum number of items per page that can be returned by a CloudStack API
+ command. The limit applies at the cloud level and can vary from cloud to cloud. You
+ can override this with a lower value on a particular API call by using the page and
+ page size API command parameters. For more information, see the Developer's Guide.
+ Default: 500.</para></entry>
</row>
<row>
<entry><para>ha.tag</para></entry>
- <entry><para>The label you want to use throughout the cloud to designate certain hosts as dedicated
- HA hosts. These hosts will be used only for HA-enabled VMs that are restarting due to the failure
- of another host. For example, you could set this to ha_host. Specify the ha.tag value as a host tag
- when you add a new host to the cloud.</para></entry>
+ <entry><para>The label you want to use throughout the cloud to designate certain hosts
+ as dedicated HA hosts. These hosts will be used only for HA-enabled VMs that are
+ restarting due to the failure of another host. For example, you could set this to
+ ha_host. Specify the ha.tag value as a host tag when you add a new host to the
+ cloud.</para></entry>
</row>
</tbody>
</tgroup>
@@ -98,33 +107,236 @@
</section>
<section id="global-config-howto">
<title>Setting Global Configuration Parameters</title>
- <para>Use the following steps to set global configuration parameters. These values will be the defaults in effect throughout your &PRODUCT; deployment.</para>
+ <para>Use the following steps to set global configuration parameters. These values will be the
+ defaults in effect throughout your &PRODUCT; deployment.</para>
<orderedlist>
- <listitem><para>Log in to the UI as administrator.</para></listitem>
- <listitem><para>In the left navigation bar, click Global Settings.</para></listitem>
- <listitem><para>In Select View, choose one of the following:</para>
+ <listitem>
+ <para>Log in to the UI as administrator.</para>
+ </listitem>
+ <listitem>
+ <para>In the left navigation bar, click Global Settings.</para>
+ </listitem>
+ <listitem>
+ <para>In Select View, choose one of the following:</para>
<itemizedlist>
- <listitem><para>Global Settings. This displays a list of the parameters with brief descriptions and current values.</para></listitem>
- <listitem><para>Hypervisor Capabilities. This displays a list of hypervisor versions with the maximum number of guests supported for each.</para></listitem>
+ <listitem>
+ <para>Global Settings. This displays a list of the parameters with brief descriptions
+ and current values.</para>
+ </listitem>
+ <listitem>
+ <para>Hypervisor Capabilities. This displays a list of hypervisor versions with the
+ maximum number of guests supported for each.</para>
+ </listitem>
</itemizedlist>
</listitem>
- <listitem><para>Use the search box to narrow down the list to those you are interested in.</para></listitem>
- <listitem><para>In the Actions column, click the Edit icon to modify a value. If you are viewing Hypervisor Capabilities, you must click the name of the hypervisor first to display the editing screen.</para></listitem>
- </orderedlist>
+ <listitem>
+ <para>Use the search box to narrow down the list to those you are interested in.</para>
+ </listitem>
+ <listitem>
+ <para>In the Actions column, click the Edit icon to modify a value. If you are viewing
+ Hypervisor Capabilities, you must click the name of the hypervisor first to display the
+ editing screen.</para>
+ </listitem>
+ </orderedlist>
</section>
<section id="local-config-howto">
<title>Setting Local Configuration Parameters</title>
- <para>Use the following steps to set local configuration parameters for an account, zone, cluster, or primary storage.
- These values will override the global configuration settings.</para>
+ <para>Use the following steps to set local configuration parameters for an account, zone,
+ cluster, or primary storage. These values will override the global configuration
+ settings.</para>
<orderedlist>
- <listitem><para>Log in to the UI as administrator.</para></listitem>
- <listitem><para>In the left navigation bar, click Infrastructure or Accounts, depending on where you want to set a value.</para></listitem>
- <listitem><para>Find the name of the particular resource that you want to work with. For example, if you are in Infrastructure,
- click View All on the Zones, Clusters, or Primary Storage area.</para></listitem>
- <listitem><para>Click the name of the resource where you want to set a limit.</para></listitem>
- <listitem><para>Click the Settings tab.</para></listitem>
- <listitem><para>Use the search box to narrow down the list to those you are interested in.</para></listitem>
- <listitem><para>In the Actions column, click the Edit icon to modify a value.</para></listitem>
+ <listitem>
+ <para>Log in to the UI as administrator.</para>
+ </listitem>
+ <listitem>
+ <para>In the left navigation bar, click Infrastructure or Accounts, depending on where you
+ want to set a value.</para>
+ </listitem>
+ <listitem>
+ <para>Find the name of the particular resource that you want to work with. For example, if
+ you are in Infrastructure, click View All on the Zones, Clusters, or Primary Storage
+ area.</para>
+ </listitem>
+ <listitem>
+ <para>Click the name of the resource where you want to set a limit.</para>
+ </listitem>
+ <listitem>
+ <para>Click the Settings tab.</para>
+ </listitem>
+ <listitem>
+ <para>Use the search box to narrow down the list to those you are interested in.</para>
+ </listitem>
+ <listitem>
+ <para>In the Actions column, click the Edit icon to modify a value.</para>
+ </listitem>
</orderedlist>
</section>
-</chapter>
+ <section id="granular-param">
+ <title>Granular Global Configuration Parameters</title>
+ <para>The following global configuration parameters have been made more granular. The parameters
+ are listed under three different scopes: account, cluster, and zone. </para>
+ <informaltable frame="all">
+ <tgroup cols="3" align="left" colsep="1" rowsep="1">
+ <colspec colnum="1" colname="c1" colwidth="1.0*"/>
+ <colspec colnum="2" colname="c2" colwidth="2.08*"/>
+ <colspec colnum="3" colname="c3" colwidth="11.86*"/>
+ <thead>
+ <row>
+ <entry><para>Field</para></entry>
+ <entry><para>Field</para></entry>
+ <entry><para>Value</para></entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><para>account</para></entry>
+ <entry><para>remote.access.vpn.client.iprange </para></entry>
+ <entry><para>The range of IPs to be allocated to remotely access the VPN clients. The
+ first IP in the range is used by the VPN server.</para></entry>
+ </row>
+ <row>
+ <entry><para>account</para></entry>
+ <entry><para>allow.public.user.templates</para></entry>
+ <entry><para>If false, users will not be able to create public templates.</para></entry>
+ </row>
+ <row>
+ <entry><para>account</para></entry>
+ <entry><para>use.system.public.ips</para></entry>
+ <entry><para>If true and if an account has one or more dedicated public IP ranges, IPs
+ are acquired from the system pool after all the IPs dedicated to the account have
+ been consumed.</para></entry>
+ </row>
+ <row>
+ <entry><para>account</para></entry>
+ <entry><para>use.system.guest.vlans </para></entry>
+ <entry><para>If true and if an account has one or more dedicated guest VLAN ranges,
+ VLANs are allocated from the system pool after all the VLANs dedicated to the
+ account have been consumed.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>cluster.storage.allocated.capacity.notificationthreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of allocated storage utilization above which
+ alerts are sent that the storage is below the threshold.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>cluster.storage.capacity.notificationthreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of storage utilization above which alerts are sent
+ that the available storage is below the threshold.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>cluster.cpu.allocated.capacity.notificationthreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of cpu utilization above which alerts are sent
+ that the available CPU is below the threshold.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>cluster.memory.allocated.capacity.notificationthreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of memory utilization above which alerts are sent
+ that the available memory is below the threshold.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>cluster.cpu.allocated.capacity.disablethreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of CPU utilization above which allocators will
+ disable that cluster from further usage. Keep the corresponding notification
+ threshold lower than this value to be notified beforehand.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>cluster.memory.allocated.capacity.disablethreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of memory utilization above which allocators will
+ disable that cluster from further usage. Keep the corresponding notification
+ threshold lower than this value to be notified beforehand.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>cpu.overprovisioning.factor</para></entry>
+ <entry><para>Used for CPU over-provisioning calculation; the available CPU will be the mathematical product
+ of actualCpuCapacity and cpu.overprovisioning.factor.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>mem.overprovisioning.factor </para></entry>
+ <entry><para>Used for memory over-provisioning calculation.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>vmware.reserve.cpu </para></entry>
+ <entry><para>Specify whether or not to reserve CPU when not over-provisioning; In case of CPU
+ over-provisioning, CPU is always reserved.</para></entry>
+ </row>
+ <row>
+ <entry><para>cluster</para></entry>
+ <entry><para>vmware.reserve.mem </para></entry>
+ <entry><para>Specify whether or not to reserve memory when not over-provisioning; In case of memory
+ over-provisioning memory is always reserved.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>pool.storage.allocated.capacity.disablethreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of allocated storage utilization above which
+ allocators will disable that pool because the available allocated storage is below
+ the threshold.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>pool.storage.capacity.disablethreshold </para></entry>
+ <entry><para>The percentage, as a value between 0 and 1, of storage utilization above which allocators will
+ disable the pool because the available storage capacity is below the
+ threshold.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>storage.overprovisioning.factor </para></entry>
+ <entry><para>Used for storage over-provisioning calculation; available storage will be the mathematical
+ product of actualStorageSize and storage.overprovisioning.factor.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>network.throttling.rate </para></entry>
+ <entry><para>Default data transfer rate in megabits per second allowed in a network.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>guest.domain.suffix </para></entry>
+ <entry><para>Default domain name for VMs inside a virtual networks with a router.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>router.template.xen </para></entry>
+ <entry><para>Name of the default router template on Xenserver.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>router.template.kvm </para></entry>
+ <entry><para>Name of the default router template on KVM.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>router.template.vmware </para></entry>
+ <entry><para>Name of the default router template on VMware.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>enable.dynamic.scale.vm</para></entry>
+ <entry><para>Enable or diable dynamically scaling of a VM.</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>use.external.dns </para></entry>
+ <entry><para>Bypass internal DNS, and use the external DNS1 and DNS2</para></entry>
+ </row>
+ <row>
+ <entry><para>zone</para></entry>
+ <entry><para>blacklisted.routes </para></entry>
+ <entry><para>Routes that are blacklisted cannot be used for creating static routes for a VPC Private
+ Gateway.</para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </section>
+</section>
[30/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4649
use the same virtual hardware platform in XS 6.2 as that in XS 6.0.2
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1510139f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1510139f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1510139f
Branch: refs/heads/kvm-vnc-listen
Commit: 1510139f15c6c303310fccea9d28b56682b2b7b0
Parents: 60e0873
Author: Anthony Xu <an...@citrix.com>
Authored: Wed Sep 11 17:16:25 2013 -0700
Committer: Anthony Xu <an...@citrix.com>
Committed: Thu Sep 12 13:00:42 2013 -0700
----------------------------------------------------------------------
.../com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1510139f/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
index 214dbd4..b22910a 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
@@ -160,6 +160,7 @@ public class XenServer56FP1Resource extends XenServer56Resource {
VM template = templates.iterator().next();
VM.Record vmr = template.getRecord(conn);
+ vmr.platform.remove("device_id");
vmr.affinity = host;
vmr.otherConfig.remove("disks");
vmr.otherConfig.remove("default_template");
[50/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Merge branch 'master' into kvm-vnc-listen
Conflicts:
plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/895c51d0
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/895c51d0
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/895c51d0
Branch: refs/heads/kvm-vnc-listen
Commit: 895c51d0b11a8222bb74f56878b0a09a723731b9
Parents: 3890860 5410901
Author: Wido den Hollander <wi...@widodh.nl>
Authored: Mon Sep 16 10:44:53 2013 +0200
Committer: Wido den Hollander <wi...@widodh.nl>
Committed: Mon Sep 16 10:44:53 2013 +0200
----------------------------------------------------------------------
.gitignore | 8 +-
CHANGES | 385 +-
DISCLAIMER | 7 -
INSTALL.md | 26 +-
LICENSE | 77 +-
README.md | 8 +-
.../tomcatconf/commands-simulator.properties.in | 2 +-
.../tomcatconf/components-simulator.xml.in | 54 -
agent/bindir/cloud-setup-agent.in | 7 +-
agent/conf/agent.properties | 27 +-
agent/pom.xml | 22 +-
agent/src/com/cloud/agent/Agent.java | 45 -
agent/src/com/cloud/agent/AgentShell.java | 198 +-
agent/src/com/cloud/agent/IAgentShell.java | 2 -
agent/src/com/cloud/agent/VmmAgentShell.java | 504 -
.../consoleproxy/ConsoleProxyResource.java | 4 +-
agent/test/com/cloud/agent/TestAgentShell.java | 43 -
api/pom.xml | 30 +-
.../com/cloud/agent/api/AgentControlAnswer.java | 30 -
.../cloud/agent/api/AgentControlCommand.java | 27 -
api/src/com/cloud/agent/api/Answer.java | 1 +
.../com/cloud/agent/api/AttachIsoCommand.java | 59 -
.../com/cloud/agent/api/AttachVolumeAnswer.java | 58 -
.../cloud/agent/api/AttachVolumeCommand.java | 99 -
.../cloud/agent/api/BackupSnapshotAnswer.java | 44 -
.../cloud/agent/api/BackupSnapshotCommand.java | 121 -
.../cloud/agent/api/BumpUpPriorityCommand.java | 30 -
api/src/com/cloud/agent/api/CancelCommand.java | 45 -
.../com/cloud/agent/api/ChangeAgentAnswer.java | 26 -
.../com/cloud/agent/api/ChangeAgentCommand.java | 46 -
.../com/cloud/agent/api/CheckHealthAnswer.java | 26 -
.../com/cloud/agent/api/CheckHealthCommand.java | 30 -
.../com/cloud/agent/api/CheckNetworkAnswer.java | 38 -
.../cloud/agent/api/CheckNetworkCommand.java | 42 -
.../com/cloud/agent/api/CheckOnHostAnswer.java | 48 -
.../com/cloud/agent/api/CheckOnHostCommand.java | 42 -
.../com/cloud/agent/api/CheckRouterAnswer.java | 81 -
.../com/cloud/agent/api/CheckRouterCommand.java | 30 -
.../agent/api/CheckS2SVpnConnectionsAnswer.java | 71 -
.../api/CheckS2SVpnConnectionsCommand.java | 39 -
.../com/cloud/agent/api/CheckStateAnswer.java | 45 -
.../com/cloud/agent/api/CheckStateCommand.java | 40 -
.../agent/api/CheckVirtualMachineAnswer.java | 52 -
.../agent/api/CheckVirtualMachineCommand.java | 41 -
.../cloud/agent/api/CleanupNetworkRulesCmd.java | 47 -
.../agent/api/CleanupSnapshotBackupCommand.java | 75 -
.../com/cloud/agent/api/ClusterSyncAnswer.java | 55 -
.../com/cloud/agent/api/ClusterSyncCommand.java | 47 -
api/src/com/cloud/agent/api/Command.java | 4 +
.../cloud/agent/api/ComputeChecksumCommand.java | 40 -
.../api/ConsoleAccessAuthenticationAnswer.java | 88 -
.../api/ConsoleAccessAuthenticationCommand.java | 68 -
.../api/ConsoleProxyLoadReportCommand.java | 39 -
...reatePrivateTemplateFromSnapshotCommand.java | 82 -
.../CreatePrivateTemplateFromVolumeCommand.java | 93 -
.../agent/api/CreateStoragePoolCommand.java | 30 -
.../cloud/agent/api/CreateVMSnapshotAnswer.java | 62 -
.../agent/api/CreateVMSnapshotCommand.java | 42 -
.../api/CreateVolumeFromSnapshotAnswer.java | 38 -
.../api/CreateVolumeFromSnapshotCommand.java | 58 -
.../api/CreateVolumeFromVMSnapshotAnswer.java | 54 -
.../api/CreateVolumeFromVMSnapshotCommand.java | 88 -
api/src/com/cloud/agent/api/CronCommand.java | 24 -
.../agent/api/DeleteObjectFromSwiftCommand.java | 61 -
.../agent/api/DeleteSnapshotBackupAnswer.java | 32 -
.../agent/api/DeleteSnapshotBackupCommand.java | 94 -
.../agent/api/DeleteSnapshotsDirCommand.java | 63 -
.../agent/api/DeleteStoragePoolCommand.java | 61 -
.../agent/api/DeleteTemplateFromS3Command.java | 106 -
.../cloud/agent/api/DeleteVMSnapshotAnswer.java | 49 -
.../agent/api/DeleteVMSnapshotCommand.java | 28 -
.../api/DownloadSnapshotFromS3Command.java | 61 -
...TemplateFromS3ToSecondaryStorageCommand.java | 66 -
api/src/com/cloud/agent/api/FenceAnswer.java | 36 -
api/src/com/cloud/agent/api/FenceCommand.java | 61 -
.../cloud/agent/api/GetDomRVersionAnswer.java | 45 -
.../com/cloud/agent/api/GetDomRVersionCmd.java | 30 -
.../com/cloud/agent/api/GetFileStatsAnswer.java | 37 -
.../cloud/agent/api/GetFileStatsCommand.java | 41 -
.../com/cloud/agent/api/GetHostStatsAnswer.java | 88 -
.../cloud/agent/api/GetHostStatsCommand.java | 53 -
.../cloud/agent/api/GetStorageStatsAnswer.java | 51 -
.../cloud/agent/api/GetStorageStatsCommand.java | 76 -
.../com/cloud/agent/api/GetVmStatsAnswer.java | 40 -
.../com/cloud/agent/api/GetVmStatsCommand.java | 54 -
.../com/cloud/agent/api/GetVncPortAnswer.java | 48 -
.../com/cloud/agent/api/GetVncPortCommand.java | 43 -
api/src/com/cloud/agent/api/HostStatsEntry.java | 113 -
api/src/com/cloud/agent/api/MaintainAnswer.java | 46 -
.../com/cloud/agent/api/MaintainCommand.java | 28 -
.../cloud/agent/api/ManageSnapshotAnswer.java | 40 -
.../cloud/agent/api/ManageSnapshotCommand.java | 92 -
api/src/com/cloud/agent/api/MigrateAnswer.java | 33 -
api/src/com/cloud/agent/api/MigrateCommand.java | 59 -
.../cloud/agent/api/ModifySshKeysCommand.java | 44 -
.../agent/api/ModifyStoragePoolAnswer.java | 57 -
.../agent/api/ModifyStoragePoolCommand.java | 75 -
.../com/cloud/agent/api/NetworkUsageAnswer.java | 61 -
.../cloud/agent/api/NetworkUsageCommand.java | 98 -
api/src/com/cloud/agent/api/PingAnswer.java | 33 -
api/src/com/cloud/agent/api/PingCommand.java | 45 -
.../com/cloud/agent/api/PingRoutingCommand.java | 54 -
.../api/PingRoutingWithNwGroupsCommand.java | 46 -
.../agent/api/PingRoutingWithOvsCommand.java | 42 -
.../com/cloud/agent/api/PingStorageCommand.java | 37 -
.../com/cloud/agent/api/PingTestCommand.java | 54 -
api/src/com/cloud/agent/api/PlugNicAnswer.java | 25 -
api/src/com/cloud/agent/api/PlugNicCommand.java | 46 -
.../com/cloud/agent/api/PoolEjectCommand.java | 42 -
.../agent/api/PrepareForMigrationAnswer.java | 34 -
.../agent/api/PrepareForMigrationCommand.java | 39 -
.../agent/api/PrepareOCFS2NodesCommand.java | 44 -
.../api/PropagateResourceEventCommand.java | 48 -
.../com/cloud/agent/api/PvlanSetupCommand.java | 121 +
api/src/com/cloud/agent/api/ReadyAnswer.java | 31 -
api/src/com/cloud/agent/api/ReadyCommand.java | 58 -
api/src/com/cloud/agent/api/RebootAnswer.java | 42 -
api/src/com/cloud/agent/api/RebootCommand.java | 45 -
.../cloud/agent/api/RebootRouterCommand.java | 38 -
.../agent/api/RevertToVMSnapshotAnswer.java | 63 -
.../agent/api/RevertToVMSnapshotCommand.java | 29 -
api/src/com/cloud/agent/api/ScaleVmAnswer.java | 28 -
api/src/com/cloud/agent/api/ScaleVmCommand.java | 113 -
.../agent/api/ScheduleHostScanTaskCommand.java | 32 -
.../agent/api/SecStorageFirewallCfgCommand.java | 82 -
.../cloud/agent/api/SecStorageSetupAnswer.java | 33 -
.../cloud/agent/api/SecStorageSetupCommand.java | 83 -
.../agent/api/SecStorageVMSetupCommand.java | 57 -
.../agent/api/SecurityGroupRuleAnswer.java | 70 -
.../cloud/agent/api/SecurityGroupRulesCmd.java | 304 -
api/src/com/cloud/agent/api/SetupAnswer.java | 37 -
api/src/com/cloud/agent/api/SetupCommand.java | 60 -
.../agent/api/SetupGuestNetworkAnswer.java | 25 -
.../agent/api/SetupGuestNetworkCommand.java | 72 -
.../com/cloud/agent/api/ShutdownCommand.java | 56 -
.../com/cloud/agent/api/SnapshotCommand.java | 126 -
api/src/com/cloud/agent/api/StartAnswer.java | 57 -
api/src/com/cloud/agent/api/StartCommand.java | 52 -
api/src/com/cloud/agent/api/StartupAnswer.java | 44 -
api/src/com/cloud/agent/api/StartupCommand.java | 286 -
.../agent/api/StartupExternalDhcpCommand.java | 25 -
.../api/StartupExternalFirewallCommand.java | 26 -
.../api/StartupExternalLoadBalancerCommand.java | 26 -
.../cloud/agent/api/StartupProxyCommand.java | 49 -
.../agent/api/StartupPxeServerCommand.java | 25 -
.../cloud/agent/api/StartupRoutingCommand.java | 224 -
.../api/StartupSecondaryStorageCommand.java | 32 -
.../cloud/agent/api/StartupStorageCommand.java | 110 -
.../agent/api/StartupTrafficMonitorCommand.java | 26 -
api/src/com/cloud/agent/api/StopAnswer.java | 45 -
api/src/com/cloud/agent/api/StopCommand.java | 71 -
.../cloud/agent/api/TransferAgentCommand.java | 57 -
.../com/cloud/agent/api/UnPlugNicAnswer.java | 25 -
.../com/cloud/agent/api/UnPlugNicCommand.java | 45 -
.../agent/api/UpdateHostPasswordCommand.java | 48 -
api/src/com/cloud/agent/api/UpgradeAnswer.java | 26 -
api/src/com/cloud/agent/api/UpgradeCommand.java | 42 -
.../cloud/agent/api/UpgradeSnapshotCommand.java | 64 -
...TemplateToS3FromSecondaryStorageCommand.java | 121 -
.../cloud/agent/api/VMSnapshotBaseCommand.java | 74 -
api/src/com/cloud/agent/api/VMSnapshotTO.java | 90 -
.../cloud/agent/api/ValidateSnapshotAnswer.java | 53 -
.../agent/api/ValidateSnapshotCommand.java | 84 -
api/src/com/cloud/agent/api/VmStatsEntry.java | 82 -
.../api/baremetal/IpmISetBootDevCommand.java | 43 -
.../api/baremetal/IpmiBootorResetCommand.java | 28 -
.../api/baremetal/PreparePxeServerAnswer.java | 29 -
.../api/baremetal/PreparePxeServerCommand.java | 80 -
.../baremetal/prepareCreateTemplateCommand.java | 66 -
.../cloud/agent/api/check/CheckSshAnswer.java | 37 -
.../cloud/agent/api/check/CheckSshCommand.java | 65 -
.../api/downloadSnapshotFromSwiftCommand.java | 60 -
...plateFromSwiftToSecondaryStorageCommand.java | 90 -
.../api/proxy/CheckConsoleProxyLoadCommand.java | 60 -
.../agent/api/proxy/ConsoleProxyLoadAnswer.java | 44 -
.../com/cloud/agent/api/proxy/ProxyCommand.java | 25 -
...tartConsoleProxyAgentHttpHandlerCommand.java | 68 -
.../api/proxy/WatchConsoleProxyLoadCommand.java | 65 -
.../CreateLoadBalancerApplianceCommand.java | 48 -
.../DestroyLoadBalancerApplianceCommand.java | 32 -
.../agent/api/routing/DhcpEntryCommand.java | 142 -
.../routing/GlobalLoadBalancerConfigAnswer.java | 27 -
.../GlobalLoadBalancerConfigCommand.java | 100 -
.../api/routing/HealthCheckLBConfigAnswer.java | 42 -
.../api/routing/HealthCheckLBConfigCommand.java | 39 -
.../cloud/agent/api/routing/IpAssocAnswer.java | 48 -
.../cloud/agent/api/routing/IpAssocCommand.java | 42 -
.../agent/api/routing/IpAssocVpcCommand.java | 29 -
.../api/routing/LoadBalancerConfigCommand.java | 66 -
.../api/routing/NetworkElementCommand.java | 53 -
.../api/routing/RemoteAccessVpnCfgCommand.java | 78 -
.../agent/api/routing/SavePasswordCommand.java | 54 -
.../api/routing/SetFirewallRulesAnswer.java | 36 -
.../api/routing/SetFirewallRulesCommand.java | 98 -
.../agent/api/routing/SetNetworkACLAnswer.java | 36 -
.../agent/api/routing/SetNetworkACLCommand.java | 97 -
.../routing/SetPortForwardingRulesAnswer.java | 37 -
.../routing/SetPortForwardingRulesCommand.java | 40 -
.../SetPortForwardingRulesVpcCommand.java | 30 -
.../agent/api/routing/SetSourceNatAnswer.java | 27 -
.../agent/api/routing/SetSourceNatCommand.java | 42 -
.../api/routing/SetStaticNatRulesAnswer.java | 37 -
.../api/routing/SetStaticNatRulesCommand.java | 47 -
.../agent/api/routing/SetStaticRouteAnswer.java | 36 -
.../api/routing/SetStaticRouteCommand.java | 62 -
.../api/routing/Site2SiteVpnCfgCommand.java | 154 -
.../api/routing/SiteLoadBalancerConfig.java | 121 -
.../agent/api/routing/UserDataCommand.java | 63 -
.../cloud/agent/api/routing/VmDataCommand.java | 67 -
.../agent/api/routing/VpnUsersCfgCommand.java | 94 -
.../api/storage/AbstractDownloadCommand.java | 78 -
.../api/storage/AbstractUploadCommand.java | 68 -
.../CopyTemplateToPrimaryStorageAnswer.java | 17 +
.../agent/api/storage/CopyVolumeAnswer.java | 42 -
.../agent/api/storage/CopyVolumeCommand.java | 72 -
.../cloud/agent/api/storage/CreateAnswer.java | 53 -
.../cloud/agent/api/storage/CreateCommand.java | 96 -
.../storage/CreateEntityDownloadURLAnswer.java | 37 -
.../storage/CreateEntityDownloadURLCommand.java | 72 -
.../storage/CreatePrivateTemplateAnswer.java | 77 -
.../storage/CreatePrivateTemplateCommand.java | 90 -
.../api/storage/CreateVolumeOVAAnswer.java | 26 +
.../api/storage/CreateVolumeOVACommand.java | 60 +
.../storage/DeleteEntityDownloadURLAnswer.java | 37 -
.../storage/DeleteEntityDownloadURLCommand.java | 72 -
.../api/storage/DeleteTemplateCommand.java | 40 -
.../agent/api/storage/DeleteVolumeCommand.java | 38 -
.../cloud/agent/api/storage/DestroyAnswer.java | 31 -
.../cloud/agent/api/storage/DestroyCommand.java | 55 -
.../cloud/agent/api/storage/DownloadAnswer.java | 141 -
.../agent/api/storage/DownloadCommand.java | 219 -
.../api/storage/DownloadProgressCommand.java | 48 -
.../agent/api/storage/ListTemplateAnswer.java | 53 -
.../agent/api/storage/ListTemplateCommand.java | 54 -
.../agent/api/storage/ListVolumeAnswer.java | 53 -
.../agent/api/storage/ListVolumeCommand.java | 40 -
.../storage/ManageVolumeAvailabilityAnswer.java | 31 -
.../ManageVolumeAvailabilityCommand.java | 54 -
.../cloud/agent/api/storage/PasswordAuth.java | 39 +
.../api/storage/PrepareOVAPackingAnswer.java | 26 +
.../api/storage/PrepareOVAPackingCommand.java | 48 +
.../storage/PrimaryStorageDownloadAnswer.java | 54 -
.../storage/PrimaryStorageDownloadCommand.java | 87 -
api/src/com/cloud/agent/api/storage/Proxy.java | 72 +
.../agent/api/storage/ResizeVolumeAnswer.java | 40 -
.../agent/api/storage/ResizeVolumeCommand.java | 85 -
.../cloud/agent/api/storage/StorageCommand.java | 26 -
.../agent/api/storage/UpgradeDiskAnswer.java | 29 -
.../agent/api/storage/UpgradeDiskCommand.java | 50 -
.../cloud/agent/api/storage/UploadAnswer.java | 123 -
.../cloud/agent/api/storage/UploadCommand.java | 145 -
.../api/storage/UploadProgressCommand.java | 48 -
.../com/cloud/agent/api/storage/ssCommand.java | 48 -
.../com/cloud/agent/api/to/DataObjectType.java | 25 +
api/src/com/cloud/agent/api/to/DataStoreTO.java | 26 +
api/src/com/cloud/agent/api/to/DataTO.java | 33 +
api/src/com/cloud/agent/api/to/DhcpTO.java | 64 +
api/src/com/cloud/agent/api/to/DiskTO.java | 70 +
.../com/cloud/agent/api/to/FirewallRuleTO.java | 29 +
.../com/cloud/agent/api/to/NetworkACLTO.java | 49 +-
api/src/com/cloud/agent/api/to/NfsTO.java | 60 +
api/src/com/cloud/agent/api/to/S3TO.java | 37 +-
api/src/com/cloud/agent/api/to/SwiftTO.java | 16 +-
.../cloud/agent/api/to/VirtualMachineTO.java | 15 +-
api/src/com/cloud/agent/api/to/VolumeTO.java | 50 +
...plateToSwiftFromSecondaryStorageCommand.java | 80 -
.../agent/manager/allocator/HostAllocator.java | 85 +
.../agent/manager/allocator/PodAllocator.java | 33 +
api/src/com/cloud/alert/AlertAdapter.java | 22 +
.../api/commands/CreatePrivateNetworkCmd.java | 197 -
.../api/commands/DestroyConsoleProxyCmd.java | 93 -
.../cloud/async/AsyncInstanceCreateStatus.java | 24 -
api/src/com/cloud/async/AsyncJob.java | 100 -
api/src/com/cloud/async/SyncQueueItem.java | 26 -
.../com/cloud/cluster/ManagementServerHost.java | 32 -
.../com/cloud/configuration/Configuration.java | 33 -
.../configuration/ConfigurationService.java | 41 +-
.../consoleproxy/ConsoleProxyAllocator.java | 34 +
.../cloud/consoleproxy/ConsoleProxyService.java | 23 -
api/src/com/cloud/dao/EntityManager.java | 102 -
api/src/com/cloud/dc/DedicatedResources.java | 33 +
.../cloud/deploy/DeploymentClusterPlanner.java | 45 +
api/src/com/cloud/deploy/DeploymentPlanner.java | 47 +-
api/src/com/cloud/event/EventCategory.java | 1 +
api/src/com/cloud/event/EventTypes.java | 86 +-
api/src/com/cloud/event/UsageEvent.java | 33 +
.../exception/AffinityConflictException.java | 34 +
.../exception/AgentControlChannelException.java | 27 +
.../InsufficientServerCapacityException.java | 11 +
.../MissingParameterValueException.java | 25 +
.../exception/OperationTimedoutException.java | 62 +
api/src/com/cloud/ha/FenceBuilder.java | 31 +
api/src/com/cloud/ha/Investigator.java | 33 +
api/src/com/cloud/host/Status.java | 1 +
api/src/com/cloud/hypervisor/Hypervisor.java | 22 +
.../hypervisor/HypervisorCapabilities.java | 2 +
.../com/cloud/hypervisor/HypervisorGuru.java | 22 +-
.../com/cloud/info/ConsoleProxyLoadInfo.java | 48 +
.../com/cloud/info/RunningHostCountInfo.java | 48 +
api/src/com/cloud/network/GuestVlan.java | 31 +
api/src/com/cloud/network/IpAddress.java | 12 +-
api/src/com/cloud/network/Network.java | 46 +-
.../network/NetworkMigrationResponder.java | 70 +
api/src/com/cloud/network/NetworkModel.java | 26 +-
api/src/com/cloud/network/NetworkProfile.java | 130 +-
.../com/cloud/network/NetworkRuleApplier.java | 28 +
api/src/com/cloud/network/NetworkService.java | 34 +-
api/src/com/cloud/network/Networks.java | 204 +-
api/src/com/cloud/network/PhysicalNetwork.java | 9 +-
api/src/com/cloud/network/PublicIpAddress.java | 3 -
api/src/com/cloud/network/UserIpv6Address.java | 52 +
.../network/VirtualNetworkApplianceService.java | 2 +
.../cloud/network/VirtualRouterProvider.java | 3 +-
.../network/element/DhcpServiceProvider.java | 4 +-
.../com/cloud/network/element/IpDeployer.java | 6 +-
.../element/NetworkACLServiceProvider.java | 3 +-
.../cloud/network/element/NetworkElement.java | 4 +-
.../element/UserDataServiceProvider.java | 8 +-
.../com/cloud/network/element/VpcProvider.java | 3 +
.../network/firewall/NetworkACLService.java | 51 -
api/src/com/cloud/network/guru/NetworkGuru.java | 12 +-
.../com/cloud/network/lb/LoadBalancingRule.java | 83 +-
.../network/lb/LoadBalancingRulesService.java | 21 +-
.../com/cloud/network/router/VirtualRouter.java | 4 +-
.../com/cloud/network/rules/LoadBalancer.java | 10 +-
.../network/rules/LoadBalancerContainer.java | 33 +
.../com/cloud/network/rules/RulesService.java | 8 +-
.../network/security/SecurityGroupRules.java | 2 +
.../cloud/network/security/SecurityRule.java | 8 +-
api/src/com/cloud/network/vpc/NetworkACL.java | 36 +
.../com/cloud/network/vpc/NetworkACLItem.java | 80 +
.../cloud/network/vpc/NetworkACLService.java | 135 +
api/src/com/cloud/network/vpc/PrivateIp.java | 1 +
api/src/com/cloud/network/vpc/VpcGateway.java | 11 +-
api/src/com/cloud/network/vpc/VpcOffering.java | 1 +
api/src/com/cloud/network/vpc/VpcService.java | 74 +-
.../network/vpn/RemoteAccessVpnService.java | 3 +-
api/src/com/cloud/offering/DiskOffering.java | 41 +-
api/src/com/cloud/offering/NetworkOffering.java | 16 +
api/src/com/cloud/offering/ServiceOffering.java | 12 +-
.../ha/GlobalLoadBalancingRulesService.java | 6 +
api/src/com/cloud/resource/ResourceService.java | 17 +-
.../resource/UnableDeleteHostException.java | 28 +
api/src/com/cloud/server/ManagementService.java | 95 +-
.../cloud/server/ResourceMetaDataService.java | 47 +
api/src/com/cloud/server/ResourceTag.java | 1 +
.../com/cloud/server/TaggedResourceService.java | 5 +-
api/src/com/cloud/storage/DataStoreRole.java | 54 +
.../com/cloud/storage/GuestOSHypervisor.java | 28 +
api/src/com/cloud/storage/ImageStore.java | 47 +
api/src/com/cloud/storage/S3.java | 50 -
api/src/com/cloud/storage/ScopeType.java | 27 +
api/src/com/cloud/storage/Snapshot.java | 12 +-
api/src/com/cloud/storage/Storage.java | 19 +-
api/src/com/cloud/storage/StoragePool.java | 4 +-
.../cloud/storage/StoragePoolDiscoverer.java | 33 +
api/src/com/cloud/storage/StorageService.java | 15 +
api/src/com/cloud/storage/Swift.java | 37 -
api/src/com/cloud/storage/Upload.java | 2 +-
api/src/com/cloud/storage/Volume.java | 20 +-
api/src/com/cloud/storage/VolumeApiService.java | 38 +-
.../storage/snapshot/SnapshotApiService.java | 109 +
.../storage/snapshot/SnapshotSchedule.java | 11 +-
.../cloud/storage/snapshot/SnapshotService.java | 109 -
.../cloud/storage/template/TemplateInfo.java | 81 -
.../cloud/storage/template/TemplateProp.java | 81 +
.../com/cloud/template/TemplateApiService.java | 103 +
api/src/com/cloud/template/TemplateService.java | 100 -
.../cloud/template/VirtualMachineTemplate.java | 8 +
api/src/com/cloud/user/Account.java | 4 +
api/src/com/cloud/user/AccountService.java | 13 +-
api/src/com/cloud/user/User.java | 2 +
api/src/com/cloud/user/UserContext.java | 140 -
.../com/cloud/user/UserContextInitializer.java | 40 -
api/src/com/cloud/vm/ConsoleProxy.java | 27 +
api/src/com/cloud/vm/DiskProfile.java | 38 +-
api/src/com/cloud/vm/NicIpAlias.java | 45 +
api/src/com/cloud/vm/SecondaryStorageVm.java | 26 +
api/src/com/cloud/vm/SystemVm.java | 26 +
api/src/com/cloud/vm/UserVmService.java | 241 +-
api/src/com/cloud/vm/VirtualMachine.java | 70 +-
api/src/com/cloud/vm/VirtualMachineName.java | 186 +
api/src/com/cloud/vm/VirtualMachineProfile.java | 14 +-
api/src/com/cloud/vm/VmDetailConstants.java | 24 +
api/src/com/cloud/vm/VmDiskStats.java | 30 +
api/src/com/cloud/vm/VmStats.java | 8 +
.../cloudstack/affinity/AffinityGroup.java | 33 +
.../affinity/AffinityGroupProcessor.java | 91 +
.../affinity/AffinityGroupResponse.java | 158 +
.../affinity/AffinityGroupService.java | 85 +
.../affinity/AffinityGroupTypeResponse.java | 48 +
.../affinity/AffinityProcessorBase.java | 71 +
.../cloudstack/api/ApiCommandJobType.java | 52 +
.../org/apache/cloudstack/api/ApiConstants.java | 67 +-
.../org/apache/cloudstack/api/BaseAsyncCmd.java | 30 +-
.../cloudstack/api/BaseAsyncCreateCmd.java | 13 -
api/src/org/apache/cloudstack/api/BaseCmd.java | 60 +-
.../org/apache/cloudstack/api/BaseListCmd.java | 17 +-
.../BaseListTemplateOrIsoPermissionsCmd.java | 5 +-
.../api/BaseUpdateTemplateOrIsoCmd.java | 14 +
.../apache/cloudstack/api/LdapValidator.java | 21 +
.../cloudstack/api/ResponseGenerator.java | 128 +-
.../cloudstack/api/ServerApiException.java | 3 +-
.../command/admin/account/CreateAccountCmd.java | 16 +-
.../command/admin/account/DeleteAccountCmd.java | 13 +-
.../admin/account/DisableAccountCmd.java | 11 +-
.../admin/autoscale/CreateCounterCmd.java | 6 +-
.../admin/autoscale/DeleteCounterCmd.java | 6 +-
.../command/admin/cluster/AddClusterCmd.java | 31 +-
.../command/admin/cluster/UpdateClusterCmd.java | 29 +-
.../api/command/admin/config/ListCfgsByCmd.java | 61 +-
.../admin/config/ListDeploymentPlannersCmd.java | 71 +
.../api/command/admin/config/UpdateCfgCmd.java | 46 +-
.../config/UpdateHypervisorCapabilitiesCmd.java | 8 +-
.../command/admin/domain/CreateDomainCmd.java | 5 +-
.../command/admin/domain/DeleteDomainCmd.java | 5 +-
.../command/admin/domain/UpdateDomainCmd.java | 5 +-
.../admin/host/AddSecondaryStorageCmd.java | 40 +-
.../admin/host/CancelMaintenanceCmd.java | 11 +-
.../admin/host/FindHostsForMigrationCmd.java | 106 +
.../api/command/admin/host/ListHostsCmd.java | 20 +-
.../admin/host/PrepareForMaintenanceCmd.java | 11 +-
.../command/admin/host/ReconnectHostCmd.java | 11 +-
.../admin/host/ReleaseHostReservationCmd.java | 106 +
...ConfigureInternalLoadBalancerElementCmd.java | 112 +
.../CreateInternalLoadBalancerElementCmd.java | 117 +
.../admin/internallb/ListInternalLBVMsCmd.java | 145 +
.../ListInternalLoadBalancerElementsCmd.java | 99 +
.../admin/internallb/StartInternalLBVMCmd.java | 121 +
.../admin/internallb/StopInternalLBVMCmd.java | 124 +
.../api/command/admin/ldap/LDAPConfigCmd.java | 196 -
.../api/command/admin/ldap/LDAPRemoveCmd.java | 71 -
.../network/AddNetworkServiceProviderCmd.java | 11 +-
.../admin/network/CreateNetworkOfferingCmd.java | 32 +-
.../admin/network/CreatePhysicalNetworkCmd.java | 11 +-
.../network/DedicateGuestVlanRangeCmd.java | 118 +
.../DeleteNetworkServiceProviderCmd.java | 6 +-
.../admin/network/DeletePhysicalNetworkCmd.java | 11 +-
.../ListDedicatedGuestVlanRangesCmd.java | 129 +
.../network/ListNetworkIsolationMethodsCmd.java | 58 +
.../ReleaseDedicatedGuestVlanRangeCmd.java | 95 +
.../admin/network/UpdateNetworkOfferingCmd.java | 6 +
.../UpdateNetworkServiceProviderCmd.java | 6 +-
.../admin/network/UpdatePhysicalNetworkCmd.java | 6 +-
.../admin/offering/CreateDiskOfferingCmd.java | 60 +-
.../offering/CreateServiceOfferingCmd.java | 51 +
.../admin/region/CreatePortableIpRangeCmd.java | 156 +
.../admin/region/DeletePortableIpRangeCmd.java | 92 +
.../admin/region/ListPortableIpRangesCmd.java | 106 +
.../admin/resource/ArchiveAlertsCmd.java | 24 +-
.../admin/resource/CleanVMReservationsCmd.java | 80 +
.../command/admin/resource/DeleteAlertsCmd.java | 23 +-
.../ConfigureVirtualRouterElementCmd.java | 11 +-
.../router/CreateVirtualRouterElementCmd.java | 26 +-
.../command/admin/router/DestroyRouterCmd.java | 13 +-
.../command/admin/router/ListRoutersCmd.java | 13 +-
.../command/admin/router/RebootRouterCmd.java | 11 +-
.../command/admin/router/StartRouterCmd.java | 21 +-
.../api/command/admin/router/StopRouterCmd.java | 22 +-
.../command/admin/storage/AddImageStoreCmd.java | 154 +
.../api/command/admin/storage/AddS3Cmd.java | 74 +-
.../CancelPrimaryStorageMaintenanceCmd.java | 11 +-
.../storage/CreateSecondaryStagingStoreCmd.java | 135 +
.../admin/storage/CreateStoragePoolCmd.java | 46 +-
.../admin/storage/DeleteImageStoreCmd.java | 80 +
.../storage/DeleteSecondaryStagingStoreCmd.java | 79 +
.../FindStoragePoolsForMigrationCmd.java | 97 +
.../admin/storage/ListImageStoresCmd.java | 104 +
.../api/command/admin/storage/ListS3sCmd.java | 34 +-
.../storage/ListSecondaryStagingStoresCmd.java | 104 +
.../admin/storage/ListStoragePoolsCmd.java | 16 +-
.../PreparePrimaryStorageForMaintenanceCmd.java | 11 +-
.../admin/storage/UpdateStoragePoolCmd.java | 15 +
.../api/command/admin/swift/AddSwiftCmd.java | 47 +-
.../api/command/admin/swift/ListSwiftsCmd.java | 26 +-
.../admin/systemvm/DestroySystemVmCmd.java | 13 +-
.../admin/systemvm/ListSystemVMsCmd.java | 6 +-
.../admin/systemvm/MigrateSystemVMCmd.java | 30 +-
.../admin/systemvm/RebootSystemVmCmd.java | 13 +-
.../admin/systemvm/ScaleSystemVMCmd.java | 135 +
.../admin/systemvm/StartSystemVMCmd.java | 13 +-
.../command/admin/systemvm/StopSystemVmCmd.java | 13 +-
.../admin/systemvm/UpgradeSystemVMCmd.java | 13 +-
.../admin/template/PrepareTemplateCmd.java | 2 +-
.../command/admin/usage/AddTrafficTypeCmd.java | 11 +-
.../admin/usage/DeleteTrafficTypeCmd.java | 6 +-
.../admin/usage/UpdateTrafficTypeCmd.java | 6 +-
.../api/command/admin/user/CreateUserCmd.java | 7 +-
.../api/command/admin/user/DeleteUserCmd.java | 5 +-
.../api/command/admin/user/DisableUserCmd.java | 11 +-
.../api/command/admin/user/EnableUserCmd.java | 5 +-
.../api/command/admin/user/UpdateUserCmd.java | 5 +-
.../admin/vlan/DedicatePublicIpRangeCmd.java | 108 +
.../admin/vlan/ReleasePublicIpRangeCmd.java | 77 +
.../api/command/admin/vm/AssignVMCmd.java | 2 +-
.../api/command/admin/vm/MigrateVMCmd.java | 9 +-
.../vm/MigrateVirtualMachineWithVolumeCmd.java | 161 +
.../admin/vpc/CreatePrivateGatewayCmd.java | 42 +-
.../admin/vpc/DeletePrivateGatewayCmd.java | 11 +-
.../command/admin/vpc/UpdateVPCOfferingCmd.java | 2 +-
.../api/command/admin/zone/CreateZoneCmd.java | 5 +-
.../api/command/admin/zone/DeleteZoneCmd.java | 5 +-
.../zone/MarkDefaultZoneForAccountCmd.java | 6 +-
.../api/command/admin/zone/UpdateZoneCmd.java | 5 +-
.../user/account/AddAccountToProjectCmd.java | 7 +-
.../account/DeleteAccountFromProjectCmd.java | 5 +-
.../user/address/AssociateIPAddrCmd.java | 96 +-
.../user/address/DisassociateIPAddrCmd.java | 29 +-
.../user/address/ListPublicIpAddressesCmd.java | 6 +-
.../affinitygroup/CreateAffinityGroupCmd.java | 168 +
.../affinitygroup/DeleteAffinityGroupCmd.java | 149 +
.../ListAffinityGroupTypesCmd.java | 67 +
.../affinitygroup/ListAffinityGroupsCmd.java | 91 +
.../affinitygroup/UpdateVMAffinityGroupCmd.java | 165 +
.../autoscale/CreateAutoScalePolicyCmd.java | 6 +-
.../autoscale/CreateAutoScaleVmGroupCmd.java | 6 +-
.../autoscale/CreateAutoScaleVmProfileCmd.java | 15 +-
.../user/autoscale/CreateConditionCmd.java | 15 +-
.../autoscale/DeleteAutoScalePolicyCmd.java | 11 +-
.../autoscale/DeleteAutoScaleVmGroupCmd.java | 11 +-
.../autoscale/DeleteAutoScaleVmProfileCmd.java | 11 +-
.../user/autoscale/DeleteConditionCmd.java | 6 +-
.../autoscale/DisableAutoScaleVmGroupCmd.java | 6 +-
.../autoscale/EnableAutoScaleVmGroupCmd.java | 6 +-
.../user/autoscale/ListConditionsCmd.java | 9 +-
.../autoscale/UpdateAutoScalePolicyCmd.java | 11 +-
.../autoscale/UpdateAutoScaleVmGroupCmd.java | 11 +-
.../autoscale/UpdateAutoScaleVmProfileCmd.java | 11 +-
.../user/config/ListCapabilitiesCmd.java | 4 +-
.../command/user/event/ArchiveEventsCmd.java | 29 +-
.../api/command/user/event/DeleteEventsCmd.java | 27 +-
.../firewall/CreateEgressFirewallRuleCmd.java | 17 +-
.../user/firewall/CreateFirewallRuleCmd.java | 19 +-
.../firewall/CreatePortForwardingRuleCmd.java | 25 +-
.../firewall/DeleteEgressFirewallRuleCmd.java | 12 +-
.../user/firewall/DeleteFirewallRuleCmd.java | 11 +-
.../firewall/DeletePortForwardingRuleCmd.java | 17 +-
.../firewall/UpdatePortForwardingRuleCmd.java | 19 +
.../api/command/user/iso/AttachIsoCmd.java | 5 +-
.../api/command/user/iso/DeleteIsoCmd.java | 11 +-
.../api/command/user/iso/ExtractIsoCmd.java | 18 +-
.../api/command/user/iso/ListIsosCmd.java | 22 +-
.../api/command/user/iso/RegisterIsoCmd.java | 18 +-
.../api/command/user/iso/UpdateIsoCmd.java | 4 +-
.../AssignToLoadBalancerRuleCmd.java | 5 +-
.../CreateApplicationLoadBalancerCmd.java | 219 +
.../CreateLBHealthCheckPolicyCmd.java | 10 +-
.../CreateLBStickinessPolicyCmd.java | 22 +-
.../loadbalancer/CreateLoadBalancerRuleCmd.java | 37 +-
.../DeleteApplicationLoadBalancerCmd.java | 117 +
.../DeleteLBHealthCheckPolicyCmd.java | 8 +-
.../DeleteLBStickinessPolicyCmd.java | 7 +-
.../loadbalancer/DeleteLoadBalancerRuleCmd.java | 11 +-
.../ListApplicationLoadBalancersCmd.java | 131 +
.../ListLBHealthCheckPoliciesCmd.java | 3 +-
.../ListLBStickinessPoliciesCmd.java | 5 +-
.../ListLoadBalancerRuleInstancesCmd.java | 10 +-
.../loadbalancer/ListLoadBalancerRulesCmd.java | 9 +
.../RemoveFromLoadBalancerRuleCmd.java | 5 +-
.../loadbalancer/UpdateLoadBalancerRuleCmd.java | 20 +-
.../user/nat/CreateIpForwardingRuleCmd.java | 17 +-
.../user/nat/DeleteIpForwardingRuleCmd.java | 17 +-
.../command/user/nat/EnableStaticNatCmd.java | 8 +-
.../user/network/CreateNetworkACLCmd.java | 242 +-
.../user/network/CreateNetworkACLListCmd.java | 121 +
.../command/user/network/CreateNetworkCmd.java | 33 +-
.../user/network/DeleteNetworkACLCmd.java | 54 +-
.../user/network/DeleteNetworkACLListCmd.java | 93 +
.../command/user/network/DeleteNetworkCmd.java | 5 +-
.../user/network/ListNetworkACLListsCmd.java | 102 +
.../user/network/ListNetworkACLsCmd.java | 46 +-
.../user/network/ReplaceNetworkACLListCmd.java | 122 +
.../user/network/UpdateNetworkACLItemCmd.java | 175 +
.../command/user/network/UpdateNetworkCmd.java | 24 +-
.../user/project/ActivateProjectCmd.java | 5 +-
.../command/user/project/CreateProjectCmd.java | 11 +-
.../command/user/project/DeleteProjectCmd.java | 5 +-
.../project/DeleteProjectInvitationCmd.java | 5 +-
.../command/user/project/SuspendProjectCmd.java | 5 +-
.../command/user/project/UpdateProjectCmd.java | 5 +-
.../project/UpdateProjectInvitationCmd.java | 5 +-
.../gslb/AssignToGlobalLoadBalancerRuleCmd.java | 54 +-
.../gslb/CreateGlobalLoadBalancerRuleCmd.java | 26 +-
.../gslb/DeleteGlobalLoadBalancerRuleCmd.java | 25 +-
.../ha/gslb/ListGlobalLoadBalancerRuleCmd.java | 2 +-
.../RemoveFromGlobalLoadBalancerRuleCmd.java | 7 +-
.../gslb/UpdateGlobalLoadBalancerRuleCmd.java | 40 +-
.../user/resource/ListResourceLimitsCmd.java | 19 +-
.../user/resource/UpdateResourceCountCmd.java | 5 +-
.../user/resource/UpdateResourceLimitCmd.java | 5 +-
.../AuthorizeSecurityGroupEgressCmd.java | 15 +-
.../AuthorizeSecurityGroupIngressCmd.java | 22 +-
.../securitygroup/CreateSecurityGroupCmd.java | 9 +-
.../securitygroup/DeleteSecurityGroupCmd.java | 9 +-
.../securitygroup/ListSecurityGroupsCmd.java | 6 +-
.../RevokeSecurityGroupEgressCmd.java | 18 +-
.../RevokeSecurityGroupIngressCmd.java | 18 +-
.../user/snapshot/CreateSnapshotCmd.java | 31 +-
.../user/snapshot/CreateSnapshotPolicyCmd.java | 2 +-
.../user/snapshot/DeleteSnapshotCmd.java | 11 +-
.../command/user/snapshot/ListSnapshotsCmd.java | 15 +-
.../command/user/ssh/CreateSSHKeyPairCmd.java | 5 +-
.../command/user/ssh/DeleteSSHKeyPairCmd.java | 5 +-
.../command/user/ssh/RegisterSSHKeyPairCmd.java | 5 +-
.../api/command/user/tag/CreateTagsCmd.java | 2 +-
.../api/command/user/tag/DeleteTagsCmd.java | 2 +-
.../api/command/user/tag/ListTagsCmd.java | 2 +-
.../command/user/template/CopyTemplateCmd.java | 13 +-
.../user/template/CreateTemplateCmd.java | 47 +-
.../user/template/DeleteTemplateCmd.java | 10 +-
.../user/template/ExtractTemplateCmd.java | 17 +-
.../command/user/template/ListTemplatesCmd.java | 27 +-
.../user/template/RegisterTemplateCmd.java | 38 +-
.../user/template/UpdateTemplateCmd.java | 5 +-
.../api/command/user/vm/AddIpToVmNicCmd.java | 26 +-
.../api/command/user/vm/AddNicToVMCmd.java | 5 +-
.../api/command/user/vm/DeployVMCmd.java | 99 +-
.../api/command/user/vm/DestroyVMCmd.java | 11 +-
.../api/command/user/vm/ListNicsCmd.java | 14 +-
.../api/command/user/vm/ListVMsCmd.java | 26 +-
.../api/command/user/vm/RebootVMCmd.java | 11 +-
.../command/user/vm/RemoveIpFromVmNicCmd.java | 17 +-
.../api/command/user/vm/RemoveNicFromVMCmd.java | 5 +-
.../api/command/user/vm/ResetVMPasswordCmd.java | 11 +-
.../api/command/user/vm/ResetVMSSHKeyCmd.java | 11 +-
.../api/command/user/vm/RestoreVMCmd.java | 10 +-
.../api/command/user/vm/ScaleVMCmd.java | 28 +-
.../api/command/user/vm/StartVMCmd.java | 25 +-
.../api/command/user/vm/StopVMCmd.java | 11 +-
.../user/vm/UpdateDefaultNicForVMCmd.java | 5 +-
.../api/command/user/vm/UpdateVMCmd.java | 21 +-
.../api/command/user/vm/UpgradeVMCmd.java | 11 +-
.../command/user/vmgroup/CreateVMGroupCmd.java | 8 +-
.../user/vmsnapshot/CreateVMSnapshotCmd.java | 6 +-
.../user/vmsnapshot/DeleteVMSnapshotCmd.java | 7 +-
.../user/vmsnapshot/ListVMSnapshotCmd.java | 2 +-
.../user/vmsnapshot/RevertToSnapshotCmd.java | 92 -
.../user/vmsnapshot/RevertToVMSnapshotCmd.java | 92 +
.../user/volume/AddResourceDetailCmd.java | 112 +
.../command/user/volume/AttachVolumeCmd.java | 11 +-
.../command/user/volume/CreateVolumeCmd.java | 48 +-
.../command/user/volume/DeleteVolumeCmd.java | 7 +-
.../command/user/volume/DetachVolumeCmd.java | 11 +-
.../command/user/volume/ExtractVolumeCmd.java | 56 +-
.../user/volume/ListResourceDetailsCmd.java | 75 +
.../api/command/user/volume/ListVolumesCmd.java | 8 +-
.../command/user/volume/MigrateVolumeCmd.java | 30 +-
.../user/volume/RemoveResourceDetailCmd.java | 112 +
.../command/user/volume/ResizeVolumeCmd.java | 11 +-
.../command/user/volume/UpdateVolumeCmd.java | 113 +
.../command/user/volume/UploadVolumeCmd.java | 13 +-
.../command/user/vpc/CreateStaticRouteCmd.java | 20 +-
.../api/command/user/vpc/CreateVPCCmd.java | 17 +-
.../command/user/vpc/DeleteStaticRouteCmd.java | 11 +-
.../api/command/user/vpc/DeleteVPCCmd.java | 9 +
.../api/command/user/vpc/RestartVPCCmd.java | 12 +-
.../api/command/user/vpc/UpdateVPCCmd.java | 14 +-
.../api/command/user/vpn/AddVpnUserCmd.java | 5 +-
.../user/vpn/CreateVpnConnectionCmd.java | 13 +-
.../user/vpn/CreateVpnCustomerGatewayCmd.java | 5 +-
.../command/user/vpn/CreateVpnGatewayCmd.java | 7 +-
.../user/vpn/DeleteRemoteAccessVpnCmd.java | 5 +-
.../api/command/user/vpn/RemoveVpnUserCmd.java | 7 +-
.../command/user/vpn/ResetVpnConnectionCmd.java | 5 +-
.../user/vpn/UpdateVpnCustomerGatewayCmd.java | 5 +-
.../api/command/user/zone/ListZonesByCmd.java | 8 +
.../api/response/AccountResponse.java | 88 +-
...ApplicationLoadBalancerInstanceResponse.java | 63 +
.../ApplicationLoadBalancerResponse.java | 142 +
.../ApplicationLoadBalancerRuleResponse.java | 51 +
.../api/response/AsyncJobResponse.java | 8 +-
.../api/response/CapabilitiesResponse.java | 10 +-
.../api/response/ClusterResponse.java | 27 +-
.../api/response/ConfigurationResponse.java | 15 +
.../api/response/CreateCmdResponse.java | 5 +
.../response/DeploymentPlannersResponse.java | 37 +
.../api/response/DiskOfferingResponse.java | 73 +
.../api/response/DomainRouterResponse.java | 13 +-
.../api/response/ExceptionResponse.java | 12 +-
.../api/response/FirewallResponse.java | 8 +-
.../api/response/FirewallRuleResponse.java | 12 +
.../response/GlobalLoadBalancerResponse.java | 18 +
.../api/response/GuestVlanRangeResponse.java | 94 +
.../api/response/HostForMigrationResponse.java | 365 +
.../cloudstack/api/response/HostResponse.java | 1 -
.../HypervisorCapabilitiesResponse.java | 32 +
.../api/response/IPAddressResponse.java | 7 +
.../api/response/ImageStoreDetailResponse.java | 86 +
.../api/response/ImageStoreResponse.java | 149 +
.../InternalLoadBalancerElementResponse.java | 51 +
.../api/response/IsolationMethodResponse.java | 33 +
.../api/response/LDAPConfigResponse.java | 105 -
.../api/response/LDAPRemoveResponse.java | 26 -
.../api/response/LoadBalancerResponse.java | 11 +-
.../api/response/NetworkACLItemResponse.java | 122 +
.../api/response/NetworkACLResponse.java | 78 +-
.../api/response/NetworkOfferingResponse.java | 22 +
.../api/response/NetworkResponse.java | 34 +-
.../api/response/NicDetailResponse.java | 81 +
.../api/response/PortableIpRangeResponse.java | 93 +
.../api/response/PortableIpResponse.java | 106 +
.../api/response/PrivateGatewayResponse.java | 19 +
.../api/response/ProjectResponse.java | 290 +-
.../cloudstack/api/response/RegionResponse.java | 15 +-
.../api/response/ResourceDetailResponse.java | 81 +
.../response/ResourceLimitAndCountResponse.java | 96 +
.../cloudstack/api/response/S3Response.java | 218 -
.../api/response/SecurityGroupRuleResponse.java | 4 +-
.../api/response/ServiceOfferingResponse.java | 66 +-
.../api/response/SnapshotResponse.java | 8 +
.../api/response/StoragePoolResponse.java | 56 +-
.../cloudstack/api/response/SwiftResponse.java | 86 -
.../api/response/TemplateResponse.java | 38 +-
.../api/response/TemplateZoneResponse.java | 131 +
.../api/response/UsageRecordResponse.java | 7 +
.../cloudstack/api/response/UserResponse.java | 8 +
.../cloudstack/api/response/UserVmResponse.java | 797 +-
.../response/VirtualRouterProviderResponse.java | 1 +
.../api/response/VolumeDetailResponse.java | 82 +
.../cloudstack/api/response/VolumeResponse.java | 72 +
.../apache/cloudstack/context/CallContext.java | 222 +
api/src/org/apache/cloudstack/jobs/JobInfo.java | 81 +
.../network/ExternalNetworkDeviceManager.java | 2 +-
.../InternalLoadBalancerElementService.java | 56 +
.../lb/ApplicationLoadBalancerContainer.java | 28 +
.../network/lb/ApplicationLoadBalancerRule.java | 24 +
.../lb/ApplicationLoadBalancerService.java | 42 +
.../lb/InternalLoadBalancerVMService.java | 34 +
.../apache/cloudstack/query/QueryService.java | 45 +-
.../apache/cloudstack/region/PortableIp.java | 58 +
.../cloudstack/region/PortableIpRange.java | 38 +
.../org/apache/cloudstack/region/Region.java | 4 +-
api/src/org/apache/cloudstack/usage/Usage.java | 15 +-
.../org/apache/cloudstack/usage/UsageTypes.java | 10 +
api/test/com/cloud/network/NetworksTest.java | 87 +
.../api/agent/test/AgentControlAnswerTest.java | 35 -
.../api/agent/test/AgentControlCommandTest.java | 33 -
.../cloudstack/api/agent/test/AnswerTest.java | 73 -
.../api/agent/test/AttachIsoCommandTest.java | 80 -
.../api/agent/test/AttachVolumeAnswerTest.java | 65 -
.../api/agent/test/AttachVolumeCommandTest.java | 120 -
.../agent/test/BackupSnapshotAnswerTest.java | 75 -
.../agent/test/BackupSnapshotCommandTest.java | 301 -
.../agent/test/BumpUpPriorityCommandTest.java | 83 -
.../api/agent/test/CancelCommandTest.java | 46 -
.../api/agent/test/ChangeAgentAnswerTest.java | 44 -
.../api/agent/test/ChangeAgentCommandTest.java | 50 -
.../api/agent/test/CheckHealthAnswerTest.java | 49 -
.../api/agent/test/CheckHealthCommandTest.java | 40 -
.../api/agent/test/CheckNetworkAnswerTest.java | 62 -
.../api/agent/test/CheckNetworkCommandTest.java | 53 -
.../api/agent/test/CheckOnHostCommandTest.java | 483 -
.../api/agent/test/SnapshotCommandTest.java | 209 -
.../api/command/test/AddClusterCmdTest.java | 15 +-
.../api/command/test/AddHostCmdTest.java | 29 +-
.../api/command/test/AddIpToVmNicTest.java | 6 +-
.../test/AddSecondaryStorageCmdTest.java | 67 +-
.../api/command/test/AddSwiftCmdTest.java | 97 -
.../api/command/test/ListCfgCmdTest.java | 92 +
.../api/command/test/ScaleVMCmdTest.java | 48 +-
.../api/command/test/UpdateCfgCmdTest.java | 119 +
.../cloudstack/test/utils/SpringUtils.java | 114 +
.../agent/api/test/ResizeVolumeCommandTest.java | 229 -
awsapi-setup/setup/cloudstack-aws-api-register | 2 +-
awsapi/conf/applicationContext.xml.in | 2 +-
awsapi/conf/ec2-service.properties.in | 2 +-
awsapi/pom.xml | 202 +-
awsapi/resource/AmazonEC2/services.xml | 772 +-
awsapi/src/com/amazon/ec2/ActivateLicense.java | 8 +-
.../com/amazon/ec2/ActivateLicenseResponse.java | 8 +-
.../amazon/ec2/ActivateLicenseResponseType.java | 20 +-
.../src/com/amazon/ec2/ActivateLicenseType.java | 20 +-
awsapi/src/com/amazon/ec2/AllocateAddress.java | 8 +-
.../com/amazon/ec2/AllocateAddressResponse.java | 8 +-
.../amazon/ec2/AllocateAddressResponseType.java | 219 +-
.../src/com/amazon/ec2/AllocateAddressType.java | 124 +-
.../com/amazon/ec2/AllocationIdSetItemType.java | 499 +
.../src/com/amazon/ec2/AllocationIdSetType.java | 576 +
.../ec2/AmazonEC2MessageReceiverInOut.java | 10769 +-
.../src/com/amazon/ec2/AmazonEC2Skeleton.java | 1542 +-
.../amazon/ec2/AmazonEC2SkeletonInterface.java | 1258 +-
.../amazon/ec2/AssignPrivateIpAddresses.java | 378 +
.../ec2/AssignPrivateIpAddressesResponse.java | 378 +
.../AssignPrivateIpAddressesResponseType.java | 583 +
...ignPrivateIpAddressesSetItemRequestType.java | 499 +
.../AssignPrivateIpAddressesSetRequestType.java | 564 +
.../ec2/AssignPrivateIpAddressesType.java | 771 +
awsapi/src/com/amazon/ec2/AssociateAddress.java | 8 +-
.../amazon/ec2/AssociateAddressResponse.java | 8 +-
.../ec2/AssociateAddressResponseType.java | 131 +-
.../com/amazon/ec2/AssociateAddressType.java | 271 +-
.../ec2/AssociateAddressTypeChoice_type0.java | 561 +
.../ec2/AssociateAddressTypeChoice_type1.java | 561 +
.../com/amazon/ec2/AssociateDhcpOptions.java | 8 +-
.../ec2/AssociateDhcpOptionsResponse.java | 8 +-
.../ec2/AssociateDhcpOptionsResponseType.java | 20 +-
.../amazon/ec2/AssociateDhcpOptionsType.java | 20 +-
.../src/com/amazon/ec2/AssociateRouteTable.java | 378 +
.../amazon/ec2/AssociateRouteTableResponse.java | 378 +
.../ec2/AssociateRouteTableResponseType.java | 591 +
.../com/amazon/ec2/AssociateRouteTableType.java | 591 +
.../com/amazon/ec2/AttachInternetGateway.java | 378 +
.../ec2/AttachInternetGatewayResponse.java | 378 +
.../ec2/AttachInternetGatewayResponseType.java | 583 +
.../amazon/ec2/AttachInternetGatewayType.java | 591 +
.../com/amazon/ec2/AttachNetworkInterface.java | 378 +
.../ec2/AttachNetworkInterfaceResponse.java | 378 +
.../ec2/AttachNetworkInterfaceResponseType.java | 591 +
.../amazon/ec2/AttachNetworkInterfaceType.java | 675 +
awsapi/src/com/amazon/ec2/AttachVolume.java | 8 +-
.../com/amazon/ec2/AttachVolumeResponse.java | 8 +-
.../amazon/ec2/AttachVolumeResponseType.java | 44 +-
awsapi/src/com/amazon/ec2/AttachVolumeType.java | 26 +-
awsapi/src/com/amazon/ec2/AttachVpnGateway.java | 8 +-
.../amazon/ec2/AttachVpnGatewayResponse.java | 8 +-
.../ec2/AttachVpnGatewayResponseType.java | 20 +-
.../com/amazon/ec2/AttachVpnGatewayType.java | 20 +-
.../ec2/AttachmentSetItemResponseType.java | 44 +-
.../amazon/ec2/AttachmentSetResponseType.java | 16 +-
.../src/com/amazon/ec2/AttachmentSetType.java | 16 +-
awsapi/src/com/amazon/ec2/AttachmentType.java | 20 +-
.../amazon/ec2/AttributeBooleanValueType.java | 14 +-
.../src/com/amazon/ec2/AttributeValueType.java | 14 +-
.../ec2/AuthorizeSecurityGroupEgress.java | 378 +
.../AuthorizeSecurityGroupEgressResponse.java | 378 +
...uthorizeSecurityGroupEgressResponseType.java | 583 +
.../ec2/AuthorizeSecurityGroupEgressType.java | 560 +
.../ec2/AuthorizeSecurityGroupIngress.java | 8 +-
.../AuthorizeSecurityGroupIngressResponse.java | 8 +-
...thorizeSecurityGroupIngressResponseType.java | 20 +-
.../ec2/AuthorizeSecurityGroupIngressType.java | 138 +-
...izeSecurityGroupIngressTypeChoice_type0.java | 561 +
.../amazon/ec2/AvailabilityZoneItemType.java | 32 +-
.../ec2/AvailabilityZoneMessageSetType.java | 16 +-
.../amazon/ec2/AvailabilityZoneMessageType.java | 14 +-
.../com/amazon/ec2/AvailabilityZoneSetType.java | 16 +-
.../amazon/ec2/BlockDeviceMappingItemType.java | 16 +-
.../BlockDeviceMappingItemTypeChoice_type0.java | 26 +-
.../com/amazon/ec2/BlockDeviceMappingType.java | 16 +-
awsapi/src/com/amazon/ec2/BundleInstance.java | 8 +-
.../com/amazon/ec2/BundleInstanceResponse.java | 8 +-
.../amazon/ec2/BundleInstanceResponseType.java | 20 +-
.../amazon/ec2/BundleInstanceS3StorageType.java | 38 +-
.../amazon/ec2/BundleInstanceTaskErrorType.java | 20 +-
.../ec2/BundleInstanceTaskStorageType.java | 14 +-
.../com/amazon/ec2/BundleInstanceTaskType.java | 56 +-
.../amazon/ec2/BundleInstanceTasksSetType.java | 16 +-
.../src/com/amazon/ec2/BundleInstanceType.java | 20 +-
awsapi/src/com/amazon/ec2/CancelBundleTask.java | 8 +-
.../amazon/ec2/CancelBundleTaskResponse.java | 8 +-
.../ec2/CancelBundleTaskResponseType.java | 20 +-
.../com/amazon/ec2/CancelBundleTaskType.java | 14 +-
.../com/amazon/ec2/CancelConversionTask.java | 8 +-
.../ec2/CancelConversionTaskResponse.java | 8 +-
.../ec2/CancelConversionTaskResponseType.java | 20 +-
.../amazon/ec2/CancelConversionTaskType.java | 14 +-
awsapi/src/com/amazon/ec2/CancelExportTask.java | 378 +
.../amazon/ec2/CancelExportTaskResponse.java | 378 +
.../ec2/CancelExportTaskResponseType.java | 583 +
.../com/amazon/ec2/CancelExportTaskType.java | 499 +
.../ec2/CancelReservedInstancesListing.java | 378 +
.../CancelReservedInstancesListingResponse.java | 378 +
...celReservedInstancesListingResponseType.java | 560 +
.../ec2/CancelReservedInstancesListingType.java | 499 +
.../amazon/ec2/CancelSpotInstanceRequests.java | 8 +-
.../ec2/CancelSpotInstanceRequestsResponse.java | 8 +-
...SpotInstanceRequestsResponseSetItemType.java | 20 +-
...ncelSpotInstanceRequestsResponseSetType.java | 16 +-
.../CancelSpotInstanceRequestsResponseType.java | 20 +-
.../ec2/CancelSpotInstanceRequestsType.java | 14 +-
.../com/amazon/ec2/ConfirmProductInstance.java | 8 +-
.../ec2/ConfirmProductInstanceResponse.java | 8 +-
.../ec2/ConfirmProductInstanceResponseType.java | 26 +-
.../amazon/ec2/ConfirmProductInstanceType.java | 20 +-
.../amazon/ec2/ConversionTaskIdItemType.java | 45 +-
.../com/amazon/ec2/ConversionTaskIdSetType.java | 16 +-
.../com/amazon/ec2/ConversionTaskSetType.java | 16 +-
.../src/com/amazon/ec2/ConversionTaskType.java | 110 +-
.../ec2/ConversionTaskTypeChoice_type0.java | 20 +-
.../com/amazon/ec2/CreateCustomerGateway.java | 8 +-
.../ec2/CreateCustomerGatewayResponse.java | 8 +-
.../ec2/CreateCustomerGatewayResponseType.java | 20 +-
.../amazon/ec2/CreateCustomerGatewayType.java | 60 +-
.../src/com/amazon/ec2/CreateDhcpOptions.java | 8 +-
.../amazon/ec2/CreateDhcpOptionsResponse.java | 8 +-
.../ec2/CreateDhcpOptionsResponseType.java | 20 +-
.../com/amazon/ec2/CreateDhcpOptionsType.java | 14 +-
awsapi/src/com/amazon/ec2/CreateImage.java | 8 +-
.../src/com/amazon/ec2/CreateImageResponse.java | 8 +-
.../com/amazon/ec2/CreateImageResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/CreateImageType.java | 110 +-
.../amazon/ec2/CreateInstanceExportTask.java | 378 +
.../ec2/CreateInstanceExportTaskResponse.java | 378 +
.../CreateInstanceExportTaskResponseType.java | 560 +
.../ec2/CreateInstanceExportTaskType.java | 749 +
...reateInstanceExportTaskTypeChoice_type0.java | 426 +
.../com/amazon/ec2/CreateInternetGateway.java | 378 +
.../ec2/CreateInternetGatewayResponse.java | 378 +
.../ec2/CreateInternetGatewayResponseType.java | 560 +
.../amazon/ec2/CreateInternetGatewayType.java | 400 +
awsapi/src/com/amazon/ec2/CreateKeyPair.java | 8 +-
.../com/amazon/ec2/CreateKeyPairResponse.java | 8 +-
.../amazon/ec2/CreateKeyPairResponseType.java | 32 +-
.../src/com/amazon/ec2/CreateKeyPairType.java | 14 +-
awsapi/src/com/amazon/ec2/CreateNetworkAcl.java | 378 +
.../com/amazon/ec2/CreateNetworkAclEntry.java | 378 +
.../ec2/CreateNetworkAclEntryResponse.java | 378 +
.../ec2/CreateNetworkAclEntryResponseType.java | 583 +
.../amazon/ec2/CreateNetworkAclEntryType.java | 1091 +
.../amazon/ec2/CreateNetworkAclResponse.java | 378 +
.../ec2/CreateNetworkAclResponseType.java | 560 +
.../com/amazon/ec2/CreateNetworkAclType.java | 499 +
.../com/amazon/ec2/CreateNetworkInterface.java | 378 +
.../ec2/CreateNetworkInterfaceResponse.java | 378 +
.../ec2/CreateNetworkInterfaceResponseType.java | 560 +
.../amazon/ec2/CreateNetworkInterfaceType.java | 957 +
.../com/amazon/ec2/CreatePlacementGroup.java | 8 +-
.../ec2/CreatePlacementGroupResponse.java | 8 +-
.../ec2/CreatePlacementGroupResponseType.java | 20 +-
.../amazon/ec2/CreatePlacementGroupType.java | 20 +-
.../ec2/CreateReservedInstancesListing.java | 378 +
.../CreateReservedInstancesListingResponse.java | 378 +
...ateReservedInstancesListingResponseType.java | 560 +
.../ec2/CreateReservedInstancesListingType.java | 752 +
awsapi/src/com/amazon/ec2/CreateRoute.java | 378 +
.../src/com/amazon/ec2/CreateRouteResponse.java | 378 +
.../com/amazon/ec2/CreateRouteResponseType.java | 583 +
awsapi/src/com/amazon/ec2/CreateRouteTable.java | 378 +
.../amazon/ec2/CreateRouteTableResponse.java | 378 +
.../ec2/CreateRouteTableResponseType.java | 560 +
.../com/amazon/ec2/CreateRouteTableType.java | 499 +
awsapi/src/com/amazon/ec2/CreateRouteType.java | 644 +
.../amazon/ec2/CreateRouteTypeChoice_type0.java | 665 +
.../src/com/amazon/ec2/CreateSecurityGroup.java | 8 +-
.../amazon/ec2/CreateSecurityGroupResponse.java | 8 +-
.../ec2/CreateSecurityGroupResponseType.java | 112 +-
.../com/amazon/ec2/CreateSecurityGroupType.java | 131 +-
awsapi/src/com/amazon/ec2/CreateSnapshot.java | 8 +-
.../com/amazon/ec2/CreateSnapshotResponse.java | 8 +-
.../amazon/ec2/CreateSnapshotResponseType.java | 62 +-
.../src/com/amazon/ec2/CreateSnapshotType.java | 20 +-
.../ec2/CreateSpotDatafeedSubscription.java | 8 +-
.../CreateSpotDatafeedSubscriptionResponse.java | 8 +-
...ateSpotDatafeedSubscriptionResponseType.java | 20 +-
.../ec2/CreateSpotDatafeedSubscriptionType.java | 20 +-
awsapi/src/com/amazon/ec2/CreateSubnet.java | 8 +-
.../com/amazon/ec2/CreateSubnetResponse.java | 8 +-
.../amazon/ec2/CreateSubnetResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/CreateSubnetType.java | 26 +-
awsapi/src/com/amazon/ec2/CreateTags.java | 8 +-
.../src/com/amazon/ec2/CreateTagsResponse.java | 8 +-
.../com/amazon/ec2/CreateTagsResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/CreateTagsType.java | 20 +-
awsapi/src/com/amazon/ec2/CreateVolume.java | 8 +-
.../ec2/CreateVolumePermissionItemType.java | 20 +-
.../ec2/CreateVolumePermissionListType.java | 16 +-
.../CreateVolumePermissionOperationType.java | 20 +-
.../com/amazon/ec2/CreateVolumeResponse.java | 8 +-
.../amazon/ec2/CreateVolumeResponseType.java | 244 +-
awsapi/src/com/amazon/ec2/CreateVolumeType.java | 237 +-
awsapi/src/com/amazon/ec2/CreateVpc.java | 8 +-
.../src/com/amazon/ec2/CreateVpcResponse.java | 8 +-
.../com/amazon/ec2/CreateVpcResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/CreateVpcType.java | 125 +-
.../src/com/amazon/ec2/CreateVpnConnection.java | 8 +-
.../amazon/ec2/CreateVpnConnectionResponse.java | 8 +-
.../ec2/CreateVpnConnectionResponseType.java | 20 +-
.../amazon/ec2/CreateVpnConnectionRoute.java | 378 +
.../ec2/CreateVpnConnectionRouteResponse.java | 378 +
.../CreateVpnConnectionRouteResponseType.java | 583 +
.../ec2/CreateVpnConnectionRouteType.java | 591 +
.../com/amazon/ec2/CreateVpnConnectionType.java | 106 +-
awsapi/src/com/amazon/ec2/CreateVpnGateway.java | 8 +-
.../amazon/ec2/CreateVpnGatewayResponse.java | 8 +-
.../ec2/CreateVpnGatewayResponseType.java | 20 +-
.../com/amazon/ec2/CreateVpnGatewayType.java | 20 +-
.../ec2/CustomerGatewayIdSetItemType.java | 14 +-
.../amazon/ec2/CustomerGatewayIdSetType.java | 16 +-
.../com/amazon/ec2/CustomerGatewaySetType.java | 16 +-
.../src/com/amazon/ec2/CustomerGatewayType.java | 78 +-
.../src/com/amazon/ec2/DeactivateLicense.java | 8 +-
.../amazon/ec2/DeactivateLicenseResponse.java | 8 +-
.../ec2/DeactivateLicenseResponseType.java | 20 +-
.../com/amazon/ec2/DeactivateLicenseType.java | 20 +-
.../com/amazon/ec2/DeleteCustomerGateway.java | 8 +-
.../ec2/DeleteCustomerGatewayResponse.java | 8 +-
.../ec2/DeleteCustomerGatewayResponseType.java | 20 +-
.../amazon/ec2/DeleteCustomerGatewayType.java | 14 +-
.../src/com/amazon/ec2/DeleteDhcpOptions.java | 8 +-
.../amazon/ec2/DeleteDhcpOptionsResponse.java | 8 +-
.../ec2/DeleteDhcpOptionsResponseType.java | 20 +-
.../com/amazon/ec2/DeleteDhcpOptionsType.java | 14 +-
.../com/amazon/ec2/DeleteInternetGateway.java | 378 +
.../ec2/DeleteInternetGatewayResponse.java | 378 +
.../ec2/DeleteInternetGatewayResponseType.java | 583 +
.../amazon/ec2/DeleteInternetGatewayType.java | 499 +
awsapi/src/com/amazon/ec2/DeleteKeyPair.java | 8 +-
.../com/amazon/ec2/DeleteKeyPairResponse.java | 8 +-
.../amazon/ec2/DeleteKeyPairResponseType.java | 20 +-
.../src/com/amazon/ec2/DeleteKeyPairType.java | 14 +-
awsapi/src/com/amazon/ec2/DeleteNetworkAcl.java | 378 +
.../com/amazon/ec2/DeleteNetworkAclEntry.java | 378 +
.../ec2/DeleteNetworkAclEntryResponse.java | 378 +
.../ec2/DeleteNetworkAclEntryResponseType.java | 583 +
.../amazon/ec2/DeleteNetworkAclEntryType.java | 667 +
.../amazon/ec2/DeleteNetworkAclResponse.java | 378 +
.../ec2/DeleteNetworkAclResponseType.java | 583 +
.../com/amazon/ec2/DeleteNetworkAclType.java | 499 +
.../com/amazon/ec2/DeleteNetworkInterface.java | 378 +
.../ec2/DeleteNetworkInterfaceResponse.java | 378 +
.../ec2/DeleteNetworkInterfaceResponseType.java | 583 +
.../amazon/ec2/DeleteNetworkInterfaceType.java | 499 +
.../com/amazon/ec2/DeletePlacementGroup.java | 8 +-
.../ec2/DeletePlacementGroupResponse.java | 8 +-
.../ec2/DeletePlacementGroupResponseType.java | 20 +-
.../amazon/ec2/DeletePlacementGroupType.java | 14 +-
awsapi/src/com/amazon/ec2/DeleteRoute.java | 378 +
.../src/com/amazon/ec2/DeleteRouteResponse.java | 378 +
.../com/amazon/ec2/DeleteRouteResponseType.java | 583 +
awsapi/src/com/amazon/ec2/DeleteRouteTable.java | 378 +
.../amazon/ec2/DeleteRouteTableResponse.java | 378 +
.../ec2/DeleteRouteTableResponseType.java | 583 +
.../com/amazon/ec2/DeleteRouteTableType.java | 499 +
awsapi/src/com/amazon/ec2/DeleteRouteType.java | 591 +
.../src/com/amazon/ec2/DeleteSecurityGroup.java | 8 +-
.../amazon/ec2/DeleteSecurityGroupResponse.java | 8 +-
.../ec2/DeleteSecurityGroupResponseType.java | 20 +-
.../com/amazon/ec2/DeleteSecurityGroupType.java | 168 +-
awsapi/src/com/amazon/ec2/DeleteSnapshot.java | 8 +-
.../com/amazon/ec2/DeleteSnapshotResponse.java | 8 +-
.../amazon/ec2/DeleteSnapshotResponseType.java | 20 +-
.../src/com/amazon/ec2/DeleteSnapshotType.java | 14 +-
.../ec2/DeleteSpotDatafeedSubscription.java | 8 +-
.../DeleteSpotDatafeedSubscriptionResponse.java | 8 +-
...eteSpotDatafeedSubscriptionResponseType.java | 20 +-
.../ec2/DeleteSpotDatafeedSubscriptionType.java | 8 +-
awsapi/src/com/amazon/ec2/DeleteSubnet.java | 8 +-
.../com/amazon/ec2/DeleteSubnetResponse.java | 8 +-
.../amazon/ec2/DeleteSubnetResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/DeleteSubnetType.java | 14 +-
awsapi/src/com/amazon/ec2/DeleteTags.java | 8 +-
.../src/com/amazon/ec2/DeleteTagsResponse.java | 8 +-
.../com/amazon/ec2/DeleteTagsResponseType.java | 20 +-
.../com/amazon/ec2/DeleteTagsSetItemType.java | 20 +-
.../src/com/amazon/ec2/DeleteTagsSetType.java | 16 +-
awsapi/src/com/amazon/ec2/DeleteTagsType.java | 20 +-
awsapi/src/com/amazon/ec2/DeleteVolume.java | 8 +-
.../com/amazon/ec2/DeleteVolumeResponse.java | 8 +-
.../amazon/ec2/DeleteVolumeResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/DeleteVolumeType.java | 14 +-
awsapi/src/com/amazon/ec2/DeleteVpc.java | 8 +-
.../src/com/amazon/ec2/DeleteVpcResponse.java | 8 +-
.../com/amazon/ec2/DeleteVpcResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/DeleteVpcType.java | 14 +-
.../src/com/amazon/ec2/DeleteVpnConnection.java | 8 +-
.../amazon/ec2/DeleteVpnConnectionResponse.java | 8 +-
.../ec2/DeleteVpnConnectionResponseType.java | 20 +-
.../amazon/ec2/DeleteVpnConnectionRoute.java | 378 +
.../ec2/DeleteVpnConnectionRouteResponse.java | 378 +
.../DeleteVpnConnectionRouteResponseType.java | 583 +
.../ec2/DeleteVpnConnectionRouteType.java | 591 +
.../com/amazon/ec2/DeleteVpnConnectionType.java | 14 +-
awsapi/src/com/amazon/ec2/DeleteVpnGateway.java | 8 +-
.../amazon/ec2/DeleteVpnGatewayResponse.java | 8 +-
.../ec2/DeleteVpnGatewayResponseType.java | 20 +-
.../com/amazon/ec2/DeleteVpnGatewayType.java | 14 +-
awsapi/src/com/amazon/ec2/DeregisterImage.java | 8 +-
.../com/amazon/ec2/DeregisterImageResponse.java | 8 +-
.../amazon/ec2/DeregisterImageResponseType.java | 20 +-
.../src/com/amazon/ec2/DeregisterImageType.java | 14 +-
.../src/com/amazon/ec2/DescribeAddresses.java | 8 +-
.../amazon/ec2/DescribeAddressesInfoType.java | 16 +-
.../amazon/ec2/DescribeAddressesItemType.java | 14 +-
.../amazon/ec2/DescribeAddressesResponse.java | 8 +-
.../ec2/DescribeAddressesResponseInfoType.java | 16 +-
.../ec2/DescribeAddressesResponseItemType.java | 637 +-
.../ec2/DescribeAddressesResponseType.java | 20 +-
.../com/amazon/ec2/DescribeAddressesType.java | 81 +-
.../amazon/ec2/DescribeAvailabilityZones.java | 8 +-
.../ec2/DescribeAvailabilityZonesResponse.java | 8 +-
.../DescribeAvailabilityZonesResponseType.java | 20 +-
.../DescribeAvailabilityZonesSetItemType.java | 14 +-
.../ec2/DescribeAvailabilityZonesSetType.java | 16 +-
.../ec2/DescribeAvailabilityZonesType.java | 20 +-
.../src/com/amazon/ec2/DescribeBundleTasks.java | 8 +-
.../amazon/ec2/DescribeBundleTasksInfoType.java | 16 +-
.../amazon/ec2/DescribeBundleTasksItemType.java | 14 +-
.../amazon/ec2/DescribeBundleTasksResponse.java | 8 +-
.../ec2/DescribeBundleTasksResponseType.java | 20 +-
.../com/amazon/ec2/DescribeBundleTasksType.java | 20 +-
.../com/amazon/ec2/DescribeConversionTasks.java | 8 +-
.../ec2/DescribeConversionTasksResponse.java | 8 +-
.../DescribeConversionTasksResponseType.java | 106 +-
.../amazon/ec2/DescribeConversionTasksType.java | 14 +-
.../amazon/ec2/DescribeCustomerGateways.java | 8 +-
.../ec2/DescribeCustomerGatewaysResponse.java | 8 +-
.../DescribeCustomerGatewaysResponseType.java | 20 +-
.../ec2/DescribeCustomerGatewaysType.java | 20 +-
.../src/com/amazon/ec2/DescribeDhcpOptions.java | 8 +-
.../amazon/ec2/DescribeDhcpOptionsResponse.java | 8 +-
.../ec2/DescribeDhcpOptionsResponseType.java | 20 +-
.../com/amazon/ec2/DescribeDhcpOptionsType.java | 20 +-
.../src/com/amazon/ec2/DescribeExportTasks.java | 378 +
.../amazon/ec2/DescribeExportTasksResponse.java | 378 +
.../ec2/DescribeExportTasksResponseType.java | 560 +
.../com/amazon/ec2/DescribeExportTasksType.java | 468 +
.../com/amazon/ec2/DescribeImageAttribute.java | 8 +-
.../ec2/DescribeImageAttributeResponse.java | 8 +-
.../ec2/DescribeImageAttributeResponseType.java | 22 +-
...eImageAttributeResponseTypeChoice_type0.java | 54 +-
.../amazon/ec2/DescribeImageAttributeType.java | 16 +-
.../ec2/DescribeImageAttributesGroup.java | 117 +-
awsapi/src/com/amazon/ec2/DescribeImages.java | 8 +-
.../ec2/DescribeImagesExecutableBySetType.java | 16 +-
.../ec2/DescribeImagesExecutableByType.java | 14 +-
.../com/amazon/ec2/DescribeImagesInfoType.java | 16 +-
.../com/amazon/ec2/DescribeImagesItemType.java | 14 +-
.../com/amazon/ec2/DescribeImagesOwnerType.java | 14 +-
.../amazon/ec2/DescribeImagesOwnersType.java | 16 +-
.../com/amazon/ec2/DescribeImagesResponse.java | 8 +-
.../ec2/DescribeImagesResponseInfoType.java | 16 +-
.../ec2/DescribeImagesResponseItemType.java | 134 +-
.../amazon/ec2/DescribeImagesResponseType.java | 20 +-
.../src/com/amazon/ec2/DescribeImagesType.java | 32 +-
.../amazon/ec2/DescribeInstanceAttribute.java | 8 +-
.../ec2/DescribeInstanceAttributeResponse.java | 8 +-
.../DescribeInstanceAttributeResponseType.java | 22 +-
...stanceAttributeResponseTypeChoice_type0.java | 348 +-
.../ec2/DescribeInstanceAttributeType.java | 16 +-
.../ec2/DescribeInstanceAttributesGroup.java | 348 +-
.../com/amazon/ec2/DescribeInstanceStatus.java | 378 +
.../ec2/DescribeInstanceStatusResponse.java | 378 +
.../ec2/DescribeInstanceStatusResponseType.java | 665 +
.../amazon/ec2/DescribeInstanceStatusType.java | 845 +
.../src/com/amazon/ec2/DescribeInstances.java | 8 +-
.../amazon/ec2/DescribeInstancesInfoType.java | 16 +-
.../amazon/ec2/DescribeInstancesItemType.java | 14 +-
.../amazon/ec2/DescribeInstancesResponse.java | 8 +-
.../ec2/DescribeInstancesResponseType.java | 20 +-
.../com/amazon/ec2/DescribeInstancesType.java | 20 +-
.../amazon/ec2/DescribeInternetGateways.java | 378 +
.../ec2/DescribeInternetGatewaysResponse.java | 378 +
.../DescribeInternetGatewaysResponseType.java | 560 +
.../ec2/DescribeInternetGatewaysType.java | 542 +
awsapi/src/com/amazon/ec2/DescribeKeyPairs.java | 8 +-
.../amazon/ec2/DescribeKeyPairsInfoType.java | 16 +-
.../amazon/ec2/DescribeKeyPairsItemType.java | 14 +-
.../amazon/ec2/DescribeKeyPairsResponse.java | 8 +-
.../ec2/DescribeKeyPairsResponseInfoType.java | 16 +-
.../ec2/DescribeKeyPairsResponseItemType.java | 20 +-
.../ec2/DescribeKeyPairsResponseType.java | 20 +-
.../com/amazon/ec2/DescribeKeyPairsType.java | 20 +-
awsapi/src/com/amazon/ec2/DescribeLicenses.java | 8 +-
.../amazon/ec2/DescribeLicensesResponse.java | 8 +-
.../ec2/DescribeLicensesResponseType.java | 20 +-
.../com/amazon/ec2/DescribeLicensesType.java | 20 +-
.../src/com/amazon/ec2/DescribeNetworkAcls.java | 378 +
.../amazon/ec2/DescribeNetworkAclsResponse.java | 378 +
.../ec2/DescribeNetworkAclsResponseType.java | 560 +
.../com/amazon/ec2/DescribeNetworkAclsType.java | 542 +
.../ec2/DescribeNetworkInterfaceAttribute.java | 378 +
...scribeNetworkInterfaceAttributeResponse.java | 378 +
...beNetworkInterfaceAttributeResponseType.java | 644 +
...erfaceAttributeResponseTypeChoice_type0.java | 645 +
.../DescribeNetworkInterfaceAttributeType.java | 552 +
...DescribeNetworkInterfaceAttributesGroup.java | 645 +
.../amazon/ec2/DescribeNetworkInterfaces.java | 378 +
.../ec2/DescribeNetworkInterfacesResponse.java | 378 +
.../DescribeNetworkInterfacesResponseType.java | 560 +
.../ec2/DescribeNetworkInterfacesType.java | 555 +
.../ec2/DescribePlacementGroupItemType.java | 14 +-
.../com/amazon/ec2/DescribePlacementGroups.java | 8 +-
.../ec2/DescribePlacementGroupsInfoType.java | 16 +-
.../ec2/DescribePlacementGroupsResponse.java | 8 +-
.../DescribePlacementGroupsResponseType.java | 20 +-
.../amazon/ec2/DescribePlacementGroupsType.java | 20 +-
awsapi/src/com/amazon/ec2/DescribeRegions.java | 8 +-
.../com/amazon/ec2/DescribeRegionsResponse.java | 8 +-
.../amazon/ec2/DescribeRegionsResponseType.java | 20 +-
.../amazon/ec2/DescribeRegionsSetItemType.java | 14 +-
.../com/amazon/ec2/DescribeRegionsSetType.java | 16 +-
.../src/com/amazon/ec2/DescribeRegionsType.java | 20 +-
.../amazon/ec2/DescribeReservedInstances.java | 8 +-
...ribeReservedInstancesListingSetItemType.java | 499 +
...DescribeReservedInstancesListingSetType.java | 564 +
.../ec2/DescribeReservedInstancesListings.java | 378 +
...scribeReservedInstancesListingsResponse.java | 378 +
...vedInstancesListingsResponseSetItemType.java | 1260 +
...eservedInstancesListingsResponseSetType.java | 576 +
...beReservedInstancesListingsResponseType.java | 560 +
.../DescribeReservedInstancesListingsType.java | 629 +
.../ec2/DescribeReservedInstancesOfferings.java | 8 +-
...cribeReservedInstancesOfferingsResponse.java | 8 +-
...edInstancesOfferingsResponseSetItemType.java | 561 +-
...servedInstancesOfferingsResponseSetType.java | 16 +-
...eReservedInstancesOfferingsResponseType.java | 129 +-
...beReservedInstancesOfferingsSetItemType.java | 14 +-
...scribeReservedInstancesOfferingsSetType.java | 16 +-
.../DescribeReservedInstancesOfferingsType.java | 905 +-
.../ec2/DescribeReservedInstancesResponse.java | 8 +-
...ibeReservedInstancesResponseSetItemType.java | 424 +-
...escribeReservedInstancesResponseSetType.java | 16 +-
.../DescribeReservedInstancesResponseType.java | 20 +-
.../DescribeReservedInstancesSetItemType.java | 14 +-
.../ec2/DescribeReservedInstancesSetType.java | 16 +-
.../ec2/DescribeReservedInstancesType.java | 127 +-
.../src/com/amazon/ec2/DescribeRouteTables.java | 378 +
.../amazon/ec2/DescribeRouteTablesResponse.java | 378 +
.../ec2/DescribeRouteTablesResponseType.java | 560 +
.../com/amazon/ec2/DescribeRouteTablesType.java | 542 +
.../com/amazon/ec2/DescribeSecurityGroups.java | 8 +-
.../DescribeSecurityGroupsIdSetItemType.java | 499 +
.../ec2/DescribeSecurityGroupsIdSetType.java | 576 +
.../ec2/DescribeSecurityGroupsResponse.java | 8 +-
.../ec2/DescribeSecurityGroupsResponseType.java | 20 +-
.../ec2/DescribeSecurityGroupsSetItemType.java | 14 +-
.../ec2/DescribeSecurityGroupsSetType.java | 16 +-
.../amazon/ec2/DescribeSecurityGroupsType.java | 98 +-
.../amazon/ec2/DescribeSnapshotAttribute.java | 8 +-
.../ec2/DescribeSnapshotAttributeResponse.java | 8 +-
.../DescribeSnapshotAttributeResponseType.java | 68 +-
...apshotAttributeResponseTypeChoice_type0.java | 499 +
.../ec2/DescribeSnapshotAttributeType.java | 16 +-
.../ec2/DescribeSnapshotAttributesGroup.java | 87 +-
.../src/com/amazon/ec2/DescribeSnapshots.java | 8 +-
.../amazon/ec2/DescribeSnapshotsOwnerType.java | 14 +-
.../amazon/ec2/DescribeSnapshotsOwnersType.java | 16 +-
.../amazon/ec2/DescribeSnapshotsResponse.java | 8 +-
.../ec2/DescribeSnapshotsResponseType.java | 20 +-
.../DescribeSnapshotsRestorableBySetType.java | 16 +-
.../ec2/DescribeSnapshotsRestorableByType.java | 14 +-
.../DescribeSnapshotsSetItemResponseType.java | 68 +-
.../ec2/DescribeSnapshotsSetItemType.java | 14 +-
.../ec2/DescribeSnapshotsSetResponseType.java | 16 +-
.../amazon/ec2/DescribeSnapshotsSetType.java | 16 +-
.../com/amazon/ec2/DescribeSnapshotsType.java | 32 +-
.../ec2/DescribeSpotDatafeedSubscription.java | 8 +-
...escribeSpotDatafeedSubscriptionResponse.java | 8 +-
...ibeSpotDatafeedSubscriptionResponseType.java | 20 +-
.../DescribeSpotDatafeedSubscriptionType.java | 8 +-
.../ec2/DescribeSpotInstanceRequests.java | 8 +-
.../DescribeSpotInstanceRequestsResponse.java | 8 +-
...escribeSpotInstanceRequestsResponseType.java | 20 +-
.../ec2/DescribeSpotInstanceRequestsType.java | 20 +-
.../amazon/ec2/DescribeSpotPriceHistory.java | 8 +-
.../ec2/DescribeSpotPriceHistoryResponse.java | 8 +-
.../DescribeSpotPriceHistoryResponseType.java | 129 +-
.../ec2/DescribeSpotPriceHistoryType.java | 355 +-
awsapi/src/com/amazon/ec2/DescribeSubnets.java | 8 +-
.../com/amazon/ec2/DescribeSubnetsResponse.java | 8 +-
.../amazon/ec2/DescribeSubnetsResponseType.java | 20 +-
.../src/com/amazon/ec2/DescribeSubnetsType.java | 20 +-
awsapi/src/com/amazon/ec2/DescribeTags.java | 8 +-
.../com/amazon/ec2/DescribeTagsResponse.java | 8 +-
.../amazon/ec2/DescribeTagsResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/DescribeTagsType.java | 14 +-
.../com/amazon/ec2/DescribeVolumeAttribute.java | 378 +
.../ec2/DescribeVolumeAttributeResponse.java | 378 +
.../DescribeVolumeAttributeResponseType.java | 644 +
...VolumeAttributeResponseTypeChoice_type0.java | 499 +
.../amazon/ec2/DescribeVolumeAttributeType.java | 552 +
.../ec2/DescribeVolumeAttributesGroup.java | 499 +
.../com/amazon/ec2/DescribeVolumeStatus.java | 378 +
.../ec2/DescribeVolumeStatusResponse.java | 378 +
.../ec2/DescribeVolumeStatusResponseType.java | 665 +
.../amazon/ec2/DescribeVolumeStatusType.java | 752 +
awsapi/src/com/amazon/ec2/DescribeVolumes.java | 8 +-
.../com/amazon/ec2/DescribeVolumesResponse.java | 8 +-
.../amazon/ec2/DescribeVolumesResponseType.java | 20 +-
.../ec2/DescribeVolumesSetItemResponseType.java | 248 +-
.../amazon/ec2/DescribeVolumesSetItemType.java | 14 +-
.../ec2/DescribeVolumesSetResponseType.java | 16 +-
.../com/amazon/ec2/DescribeVolumesSetType.java | 16 +-
.../src/com/amazon/ec2/DescribeVolumesType.java | 20 +-
awsapi/src/com/amazon/ec2/DescribeVpcs.java | 8 +-
.../com/amazon/ec2/DescribeVpcsResponse.java | 8 +-
.../amazon/ec2/DescribeVpcsResponseType.java | 20 +-
awsapi/src/com/amazon/ec2/DescribeVpcsType.java | 20 +-
.../com/amazon/ec2/DescribeVpnConnections.java | 8 +-
.../ec2/DescribeVpnConnectionsResponse.java | 8 +-
.../ec2/DescribeVpnConnectionsResponseType.java | 20 +-
.../amazon/ec2/DescribeVpnConnectionsType.java | 20 +-
.../src/com/amazon/ec2/DescribeVpnGateways.java | 8 +-
.../amazon/ec2/DescribeVpnGatewaysResponse.java | 8 +-
.../ec2/DescribeVpnGatewaysResponseType.java | 20 +-
.../com/amazon/ec2/DescribeVpnGatewaysType.java | 20 +-
.../com/amazon/ec2/DetachInternetGateway.java | 378 +
.../ec2/DetachInternetGatewayResponse.java | 378 +
.../ec2/DetachInternetGatewayResponseType.java | 583 +
.../amazon/ec2/DetachInternetGatewayType.java | 591 +
.../com/amazon/ec2/DetachNetworkInterface.java | 378 +
.../ec2/DetachNetworkInterfaceResponse.java | 378 +
.../ec2/DetachNetworkInterfaceResponseType.java | 583 +
.../amazon/ec2/DetachNetworkInterfaceType.java | 597 +
awsapi/src/com/amazon/ec2/DetachVolume.java | 8 +-
.../com/amazon/ec2/DetachVolumeResponse.java | 8 +-
.../amazon/ec2/DetachVolumeResponseType.java | 44 +-
awsapi/src/com/amazon/ec2/DetachVolumeType.java | 32 +-
awsapi/src/com/amazon/ec2/DetachVpnGateway.java | 8 +-
.../amazon/ec2/DetachVpnGatewayResponse.java | 8 +-
.../ec2/DetachVpnGatewayResponseType.java | 20 +-
.../com/amazon/ec2/DetachVpnGatewayType.java | 20 +-
.../ec2/DhcpConfigurationItemSetType.java | 16 +-
.../amazon/ec2/DhcpConfigurationItemType.java | 20 +-
.../amazon/ec2/DhcpOptionsIdSetItemType.java | 14 +-
.../com/amazon/ec2/DhcpOptionsIdSetType.java | 16 +-
.../src/com/amazon/ec2/DhcpOptionsSetType.java | 16 +-
awsapi/src/com/amazon/ec2/DhcpOptionsType.java | 26 +-
awsapi/src/com/amazon/ec2/DhcpValueSetType.java | 16 +-
awsapi/src/com/amazon/ec2/DhcpValueType.java | 14 +-
.../amazon/ec2/DisableVgwRoutePropagation.java | 378 +
.../DisableVgwRoutePropagationRequestType.java | 591 +
.../ec2/DisableVgwRoutePropagationResponse.java | 378 +
.../DisableVgwRoutePropagationResponseType.java | 583 +
.../src/com/amazon/ec2/DisassociateAddress.java | 8 +-
.../amazon/ec2/DisassociateAddressResponse.java | 8 +-
.../ec2/DisassociateAddressResponseType.java | 20 +-
.../com/amazon/ec2/DisassociateAddressType.java | 170 +-
.../com/amazon/ec2/DisassociateRouteTable.java | 378 +
.../ec2/DisassociateRouteTableResponse.java | 378 +
.../ec2/DisassociateRouteTableResponseType.java | 583 +
.../amazon/ec2/DisassociateRouteTableType.java | 499 +
.../amazon/ec2/DiskImageDescriptionType.java | 32 +-
.../src/com/amazon/ec2/DiskImageDetailType.java | 26 +-
awsapi/src/com/amazon/ec2/DiskImageSetType.java | 16 +-
awsapi/src/com/amazon/ec2/DiskImageType.java | 26 +-
.../ec2/DiskImageVolumeDescriptionType.java | 20 +-
.../src/com/amazon/ec2/DiskImageVolumeType.java | 14 +-
.../src/com/amazon/ec2/EbsBlockDeviceType.java | 231 +-
...sInstanceBlockDeviceMappingResponseType.java | 32 +-
awsapi/src/com/amazon/ec2/EmptyElementType.java | 8 +-
.../amazon/ec2/EnableVgwRoutePropagation.java | 378 +
.../EnableVgwRoutePropagationRequestType.java | 591 +
.../ec2/EnableVgwRoutePropagationResponse.java | 378 +
.../EnableVgwRoutePropagationResponseType.java | 583 +
awsapi/src/com/amazon/ec2/EnableVolumeIO.java | 378 +
.../com/amazon/ec2/EnableVolumeIOResponse.java | 378 +
.../amazon/ec2/EnableVolumeIOResponseType.java | 583 +
.../src/com/amazon/ec2/EnableVolumeIOType.java | 499 +
.../src/com/amazon/ec2/ExportTaskIdSetType.java | 576 +
awsapi/src/com/amazon/ec2/ExportTaskIdType.java | 499 +
.../com/amazon/ec2/ExportTaskResponseType.java | 907 +
.../ec2/ExportTaskResponseTypeChoice_type0.java | 426 +
.../ec2/ExportTaskResponseTypeChoice_type1.java | 426 +
.../amazon/ec2/ExportTaskSetResponseType.java | 576 +
.../amazon/ec2/ExportToS3TaskResponseType.java | 788 +
.../src/com/amazon/ec2/ExportToS3TaskType.java | 801 +
awsapi/src/com/amazon/ec2/ExtensionMapper.java | 4352 +-
awsapi/src/com/amazon/ec2/FilterSetType.java | 16 +-
awsapi/src/com/amazon/ec2/FilterType.java | 20 +-
awsapi/src/com/amazon/ec2/GetConsoleOutput.java | 8 +-
.../amazon/ec2/GetConsoleOutputResponse.java | 8 +-
.../ec2/GetConsoleOutputResponseType.java | 32 +-
.../com/amazon/ec2/GetConsoleOutputType.java | 14 +-
awsapi/src/com/amazon/ec2/GetPasswordData.java | 8 +-
.../com/amazon/ec2/GetPasswordDataResponse.java | 8 +-
.../amazon/ec2/GetPasswordDataResponseType.java | 32 +-
.../src/com/amazon/ec2/GetPasswordDataType.java | 14 +-
awsapi/src/com/amazon/ec2/GroupItemType.java | 150 +-
awsapi/src/com/amazon/ec2/GroupSetType.java | 16 +-
.../ec2/IamInstanceProfileRequestType.java | 617 +
.../ec2/IamInstanceProfileResponseType.java | 591 +
awsapi/src/com/amazon/ec2/IcmpTypeCodeType.java | 575 +
awsapi/src/com/amazon/ec2/ImportInstance.java | 8 +-
.../amazon/ec2/ImportInstanceGroupItemType.java | 617 +
.../amazon/ec2/ImportInstanceGroupSetType.java | 576 +
.../ImportInstanceLaunchSpecificationType.java | 72 +-
.../com/amazon/ec2/ImportInstanceResponse.java | 8 +-
.../amazon/ec2/ImportInstanceResponseType.java | 106 +-
.../ec2/ImportInstanceTaskDetailsType.java | 32 +-
.../src/com/amazon/ec2/ImportInstanceType.java | 134 +-
.../ec2/ImportInstanceVolumeDetailItemType.java | 50 +-
.../ec2/ImportInstanceVolumeDetailSetType.java | 16 +-
awsapi/src/com/amazon/ec2/ImportKeyPair.java | 8 +-
.../com/amazon/ec2/ImportKeyPairResponse.java | 8 +-
.../amazon/ec2/ImportKeyPairResponseType.java | 26 +-
.../src/com/amazon/ec2/ImportKeyPairType.java | 20 +-
awsapi/src/com/amazon/ec2/ImportVolume.java | 8 +-
.../com/amazon/ec2/ImportVolumeResponse.java | 8 +-
.../amazon/ec2/ImportVolumeResponseType.java | 106 +-
.../amazon/ec2/ImportVolumeTaskDetailsType.java | 38 +-
awsapi/src/com/amazon/ec2/ImportVolumeType.java | 32 +-
.../ec2/InstanceBlockDeviceMappingItemType.java | 16 +-
...eBlockDeviceMappingItemTypeChoice_type0.java | 26 +-
...tanceBlockDeviceMappingResponseItemType.java | 16 +-
...viceMappingResponseItemTypeChoice_type0.java | 14 +-
.../InstanceBlockDeviceMappingResponseType.java | 16 +-
.../ec2/InstanceBlockDeviceMappingType.java | 16 +-
.../amazon/ec2/InstanceCountsSetItemType.java | 583 +
.../com/amazon/ec2/InstanceCountsSetType.java | 564 +
.../amazon/ec2/InstanceEbsBlockDeviceType.java | 20 +-
.../ec2/InstanceExportTaskResponseType.java | 604 +
.../src/com/amazon/ec2/InstanceIdSetType.java | 16 +-
awsapi/src/com/amazon/ec2/InstanceIdType.java | 14 +-
.../amazon/ec2/InstanceLicenseRequestType.java | 14 +-
.../amazon/ec2/InstanceLicenseResponseType.java | 14 +-
.../amazon/ec2/InstanceMonitoringStateType.java | 14 +-
...InstanceNetworkInterfaceAssociationType.java | 604 +
.../InstanceNetworkInterfaceAttachmentType.java | 851 +
...tanceNetworkInterfaceSetItemRequestType.java | 1257 +
.../InstanceNetworkInterfaceSetItemType.java | 1589 +
.../InstanceNetworkInterfaceSetRequestType.java | 576 +
.../ec2/InstanceNetworkInterfaceSetType.java | 576 +
.../com/amazon/ec2/InstancePlacementType.java | 20 +-
.../InstancePrivateIpAddressesSetItemType.java | 684 +
.../ec2/InstancePrivateIpAddressesSetType.java | 576 +
.../amazon/ec2/InstanceStateChangeSetType.java | 16 +-
.../com/amazon/ec2/InstanceStateChangeType.java | 26 +-
.../src/com/amazon/ec2/InstanceStateType.java | 20 +-
.../ec2/InstanceStatusDetailsSetItemType.java | 696 +
.../ec2/InstanceStatusDetailsSetType.java | 576 +
.../com/amazon/ec2/InstanceStatusEventType.java | 788 +
.../amazon/ec2/InstanceStatusEventsSetType.java | 576 +
.../com/amazon/ec2/InstanceStatusItemType.java | 848 +
.../com/amazon/ec2/InstanceStatusSetType.java | 576 +
.../src/com/amazon/ec2/InstanceStatusType.java | 573 +
.../com/amazon/ec2/InstanceTypeSetItemType.java | 14 +-
.../src/com/amazon/ec2/InstanceTypeSetType.java | 16 +-
.../ec2/InternetGatewayAttachmentSetType.java | 576 +
.../ec2/InternetGatewayAttachmentType.java | 591 +
.../ec2/InternetGatewayIdSetItemType.java | 499 +
.../amazon/ec2/InternetGatewayIdSetType.java | 576 +
.../com/amazon/ec2/InternetGatewaySetType.java | 576 +
.../src/com/amazon/ec2/InternetGatewayType.java | 634 +
.../src/com/amazon/ec2/IpPermissionSetType.java | 16 +-
awsapi/src/com/amazon/ec2/IpPermissionType.java | 102 +-
awsapi/src/com/amazon/ec2/IpRangeItemType.java | 14 +-
awsapi/src/com/amazon/ec2/IpRangeSetType.java | 16 +-
.../amazon/ec2/LaunchPermissionItemType.java | 20 +-
.../amazon/ec2/LaunchPermissionListType.java | 16 +-
.../ec2/LaunchPermissionOperationType.java | 20 +-
.../ec2/LaunchSpecificationRequestType.java | 336 +-
.../ec2/LaunchSpecificationResponseType.java | 330 +-
.../amazon/ec2/LicenseCapacitySetItemType.java | 32 +-
.../com/amazon/ec2/LicenseCapacitySetType.java | 16 +-
.../com/amazon/ec2/LicenseIdSetItemType.java | 14 +-
awsapi/src/com/amazon/ec2/LicenseIdSetType.java | 16 +-
.../src/com/amazon/ec2/LicenseSetItemType.java | 38 +-
awsapi/src/com/amazon/ec2/LicenseSetType.java | 16 +-
.../com/amazon/ec2/ModifyImageAttribute.java | 8 +-
.../ec2/ModifyImageAttributeResponse.java | 8 +-
.../ec2/ModifyImageAttributeResponseType.java | 20 +-
.../amazon/ec2/ModifyImageAttributeType.java | 16 +-
.../ModifyImageAttributeTypeChoice_type0.java | 26 +-
.../com/amazon/ec2/ModifyInstanceAttribute.java | 8 +-
.../ec2/ModifyInstanceAttributeResponse.java | 8 +-
.../ModifyInstanceAttributeResponseType.java | 20 +-
.../amazon/ec2/ModifyInstanceAttributeType.java | 16 +-
...ModifyInstanceAttributeTypeChoice_type0.java | 269 +-
.../ModifyNetworkInterfaceAttachmentType.java | 583 +
.../ec2/ModifyNetworkInterfaceAttribute.java | 378 +
...ModifyNetworkInterfaceAttributeResponse.java | 378 +
...fyNetworkInterfaceAttributeResponseType.java | 583 +
.../ModifyNetworkInterfaceAttributeType.java | 552 +
...tworkInterfaceAttributeTypeChoice_type0.java | 645 +
.../com/amazon/ec2/ModifySnapshotAttribute.java | 8 +-
.../ec2/ModifySnapshotAttributeResponse.java | 8 +-
.../ModifySnapshotAttributeResponseType.java | 20 +-
.../amazon/ec2/ModifySnapshotAttributeType.java | 20 +-
.../com/amazon/ec2/ModifyVolumeAttribute.java | 378 +
.../ec2/ModifyVolumeAttributeResponse.java | 378 +
.../ec2/ModifyVolumeAttributeResponseType.java | 583 +
.../amazon/ec2/ModifyVolumeAttributeType.java | 552 +
.../ModifyVolumeAttributeTypeChoice_type0.java | 426 +
awsapi/src/com/amazon/ec2/MonitorInstances.java | 8 +-
.../amazon/ec2/MonitorInstancesResponse.java | 8 +-
.../MonitorInstancesResponseSetItemType.java | 20 +-
.../ec2/MonitorInstancesResponseSetType.java | 16 +-
.../ec2/MonitorInstancesResponseType.java | 20 +-
.../amazon/ec2/MonitorInstancesSetItemType.java | 14 +-
.../com/amazon/ec2/MonitorInstancesSetType.java | 16 +-
.../com/amazon/ec2/MonitorInstancesType.java | 14 +-
.../com/amazon/ec2/MonitoringInstanceType.java | 14 +-
.../ec2/NetworkAclAssociationSetType.java | 576 +
.../amazon/ec2/NetworkAclAssociationType.java | 683 +
.../com/amazon/ec2/NetworkAclEntrySetType.java | 576 +
.../src/com/amazon/ec2/NetworkAclEntryType.java | 999 +
.../com/amazon/ec2/NetworkAclIdSetItemType.java | 499 +
.../src/com/amazon/ec2/NetworkAclIdSetType.java | 576 +
.../src/com/amazon/ec2/NetworkAclSetType.java | 576 +
awsapi/src/com/amazon/ec2/NetworkAclType.java | 871 +
.../ec2/NetworkInterfaceAssociationType.java | 814 +
.../ec2/NetworkInterfaceAttachmentType.java | 1061 +
.../ec2/NetworkInterfaceIdSetItemType.java | 499 +
.../amazon/ec2/NetworkInterfaceIdSetType.java | 576 +
...kInterfacePrivateIpAddressesSetItemType.java | 657 +
...tworkInterfacePrivateIpAddressesSetType.java | 576 +
.../com/amazon/ec2/NetworkInterfaceSetType.java | 576 +
.../com/amazon/ec2/NetworkInterfaceType.java | 2036 +
.../ec2/NullableAttributeBooleanValueType.java | 14 +-
.../amazon/ec2/NullableAttributeValueType.java | 14 +-
.../com/amazon/ec2/PlacementGroupInfoType.java | 26 +-
.../com/amazon/ec2/PlacementGroupSetType.java | 16 +-
.../com/amazon/ec2/PlacementRequestType.java | 125 +-
.../com/amazon/ec2/PlacementResponseType.java | 125 +-
awsapi/src/com/amazon/ec2/PortRangeType.java | 575 +
.../ec2/PriceScheduleRequestSetItemType.java | 680 +
.../amazon/ec2/PriceScheduleRequestSetType.java | 564 +
.../amazon/ec2/PriceScheduleSetItemType.java | 764 +
.../com/amazon/ec2/PriceScheduleSetType.java | 576 +
.../amazon/ec2/PricingDetailsSetItemType.java | 575 +
.../com/amazon/ec2/PricingDetailsSetType.java | 576 +
.../PrivateIpAddressesSetItemRequestType.java | 597 +
.../ec2/PrivateIpAddressesSetRequestType.java | 576 +
.../src/com/amazon/ec2/ProductCodeItemType.java | 68 +-
.../src/com/amazon/ec2/ProductCodeListType.java | 16 +-
.../src/com/amazon/ec2/ProductCodeSetType.java | 576 -
awsapi/src/com/amazon/ec2/ProductCodeType.java | 499 -
.../com/amazon/ec2/ProductCodesSetItemType.java | 106 +-
.../src/com/amazon/ec2/ProductCodesSetType.java | 16 +-
.../ec2/ProductDescriptionSetItemType.java | 14 +-
.../amazon/ec2/ProductDescriptionSetType.java | 16 +-
.../com/amazon/ec2/PropagatingVgwSetType.java | 576 +
.../src/com/amazon/ec2/PropagatingVgwType.java | 499 +
.../ec2/PurchaseReservedInstancesOffering.java | 8 +-
...rchaseReservedInstancesOfferingResponse.java | 8 +-
...seReservedInstancesOfferingResponseType.java | 20 +-
.../PurchaseReservedInstancesOfferingType.java | 98 +-
awsapi/src/com/amazon/ec2/RebootInstances.java | 8 +-
.../com/amazon/ec2/RebootInstancesInfoType.java | 16 +-
.../com/amazon/ec2/RebootInstancesItemType.java | 14 +-
.../com/amazon/ec2/RebootInstancesResponse.java | 8 +-
.../amazon/ec2/RebootInstancesResponseType.java | 20 +-
.../src/com/amazon/ec2/RebootInstancesType.java | 14 +-
.../amazon/ec2/RecurringChargesSetItemType.java | 583 +
.../com/amazon/ec2/RecurringChargesSetType.java | 576 +
awsapi/src/com/amazon/ec2/RegionItemType.java | 20 +-
awsapi/src/com/amazon/ec2/RegionSetType.java | 16 +-
awsapi/src/com/amazon/ec2/RegisterImage.java | 8 +-
.../com/amazon/ec2/RegisterImageResponse.java | 8 +-
.../amazon/ec2/RegisterImageResponseType.java | 20 +-
.../src/com/amazon/ec2/RegisterImageType.java | 56 +-
awsapi/src/com/amazon/ec2/ReleaseAddress.java | 8 +-
.../com/amazon/ec2/ReleaseAddressResponse.java | 8 +-
.../amazon/ec2/ReleaseAddressResponseType.java | 20 +-
.../src/com/amazon/ec2/ReleaseAddressType.java | 97 +-
.../ec2/ReleaseAddressTypeChoice_type0.java | 561 +
.../ec2/ReplaceNetworkAclAssociation.java | 378 +
.../ReplaceNetworkAclAssociationResponse.java | 378 +
...eplaceNetworkAclAssociationResponseType.java | 591 +
.../ec2/ReplaceNetworkAclAssociationType.java | 591 +
.../com/amazon/ec2/ReplaceNetworkAclEntry.java | 378 +
.../ec2/ReplaceNetworkAclEntryResponse.java | 378 +
.../ec2/ReplaceNetworkAclEntryResponseType.java | 583 +
.../amazon/ec2/ReplaceNetworkAclEntryType.java | 1091 +
awsapi/src/com/amazon/ec2/ReplaceRoute.java | 378 +
.../com/amazon/ec2/ReplaceRouteResponse.java | 378 +
.../amazon/ec2/ReplaceRouteResponseType.java | 583 +
.../ec2/ReplaceRouteTableAssociation.java | 378 +
.../ReplaceRouteTableAssociationResponse.java | 378 +
...eplaceRouteTableAssociationResponseType.java | 591 +
.../ec2/ReplaceRouteTableAssociationType.java | 591 +
awsapi/src/com/amazon/ec2/ReplaceRouteType.java | 644 +
.../ec2/ReplaceRouteTypeChoice_type0.java | 665 +
.../com/amazon/ec2/ReportInstanceStatus.java | 378 +
...portInstanceStatusReasonCodeSetItemType.java | 499 +
.../ReportInstanceStatusReasonCodesSetType.java | 564 +
.../ec2/ReportInstanceStatusResponse.java | 378 +
.../ec2/ReportInstanceStatusResponseType.java | 583 +
.../amazon/ec2/ReportInstanceStatusType.java | 936 +
.../com/amazon/ec2/RequestSpotInstances.java | 8 +-
.../ec2/RequestSpotInstancesResponse.java | 8 +-
.../ec2/RequestSpotInstancesResponseType.java | 20 +-
.../amazon/ec2/RequestSpotInstancesType.java | 56 +-
.../src/com/amazon/ec2/ReservationInfoType.java | 38 +-
.../src/com/amazon/ec2/ReservationSetType.java | 16 +-
.../ec2/ReservedInstanceLimitPriceType.java | 596 +
.../src/com/amazon/ec2/ResetImageAttribute.java | 8 +-
.../amazon/ec2/ResetImageAttributeResponse.java | 8 +-
.../ec2/ResetImageAttributeResponseType.java | 20 +-
.../com/amazon/ec2/ResetImageAttributeType.java | 16 +-
.../amazon/ec2/ResetImageAttributesGroup.java | 14 +-
.../com/amazon/ec2/ResetInstanceAttribute.java | 8 +-
.../ec2/ResetInstanceAttributeResponse.java | 8 +-
.../ec2/ResetInstanceAttributeResponseType.java | 20 +-
.../amazon/ec2/ResetInstanceAttributeType.java | 16 +-
.../ec2/ResetInstanceAttributesGroup.java | 93 +-
.../ec2/ResetNetworkInterfaceAttribute.java | 378 +
.../ResetNetworkInterfaceAttributeResponse.java | 378 +
...etNetworkInterfaceAttributeResponseType.java | 583 +
.../ec2/ResetNetworkInterfaceAttributeType.java | 552 +
.../ResetNetworkInterfaceAttributesGroup.java | 426 +
.../com/amazon/ec2/ResetSnapshotAttribute.java | 8 +-
.../ec2/ResetSnapshotAttributeResponse.java | 8 +-
.../ec2/ResetSnapshotAttributeResponseType.java | 20 +-
.../amazon/ec2/ResetSnapshotAttributeType.java | 16 +-
.../ec2/ResetSnapshotAttributesGroup.java | 14 +-
.../com/amazon/ec2/ResourceIdSetItemType.java | 14 +-
.../src/com/amazon/ec2/ResourceIdSetType.java | 16 +-
.../com/amazon/ec2/ResourceTagSetItemType.java | 20 +-
.../src/com/amazon/ec2/ResourceTagSetType.java | 16 +-
.../amazon/ec2/RevokeSecurityGroupEgress.java | 378 +
.../ec2/RevokeSecurityGroupEgressResponse.java | 378 +
.../RevokeSecurityGroupEgressResponseType.java | 583 +
.../ec2/RevokeSecurityGroupEgressType.java | 560 +
.../amazon/ec2/RevokeSecurityGroupIngress.java | 8 +-
.../ec2/RevokeSecurityGroupIngressResponse.java | 8 +-
.../RevokeSecurityGroupIngressResponseType.java | 20 +-
.../ec2/RevokeSecurityGroupIngressType.java | 138 +-
...okeSecurityGroupIngressTypeChoice_type0.java | 561 +
awsapi/src/com/amazon/ec2/RouteSetType.java | 576 +
.../ec2/RouteTableAssociationSetType.java | 576 +
.../amazon/ec2/RouteTableAssociationType.java | 644 +
.../RouteTableAssociationTypeChoice_type0.java | 554 +
.../com/amazon/ec2/RouteTableIdSetItemType.java | 499 +
.../src/com/amazon/ec2/RouteTableIdSetType.java | 576 +
.../src/com/amazon/ec2/RouteTableSetType.java | 576 +
awsapi/src/com/amazon/ec2/RouteTableType.java | 848 +
awsapi/src/com/amazon/ec2/RouteType.java | 1103 +
awsapi/src/com/amazon/ec2/RunInstances.java | 8 +-
.../com/amazon/ec2/RunInstancesResponse.java | 8 +-
.../amazon/ec2/RunInstancesResponseType.java | 44 +-
awsapi/src/com/amazon/ec2/RunInstancesType.java | 580 +-
.../amazon/ec2/RunningInstancesItemType.java | 609 +-
.../com/amazon/ec2/RunningInstancesSetType.java | 16 +-
.../amazon/ec2/SecurityGroupIdSetItemType.java | 499 +
.../com/amazon/ec2/SecurityGroupIdSetType.java | 576 +
.../com/amazon/ec2/SecurityGroupItemType.java | 387 +-
.../com/amazon/ec2/SecurityGroupSetType.java | 16 +-
.../ec2/SpotDatafeedSubscriptionType.java | 38 +-
.../ec2/SpotInstanceRequestIdSetItemType.java | 14 +-
.../ec2/SpotInstanceRequestIdSetType.java | 16 +-
.../ec2/SpotInstanceRequestSetItemType.java | 199 +-
.../amazon/ec2/SpotInstanceRequestSetType.java | 16 +-
.../amazon/ec2/SpotInstanceStateFaultType.java | 20 +-
.../amazon/ec2/SpotPlacementRequestType.java | 617 +
.../amazon/ec2/SpotPriceHistorySetItemType.java | 143 +-
.../com/amazon/ec2/SpotPriceHistorySetType.java | 16 +-
awsapi/src/com/amazon/ec2/StartInstances.java | 8 +-
.../com/amazon/ec2/StartInstancesResponse.java | 8 +-
.../amazon/ec2/StartInstancesResponseType.java | 20 +-
.../src/com/amazon/ec2/StartInstancesType.java | 14 +-
awsapi/src/com/amazon/ec2/StateReasonType.java | 20 +-
awsapi/src/com/amazon/ec2/StopInstances.java | 8 +-
.../com/amazon/ec2/StopInstancesResponse.java | 8 +-
.../amazon/ec2/StopInstancesResponseType.java | 20 +-
.../src/com/amazon/ec2/StopInstancesType.java | 20 +-
.../src/com/amazon/ec2/SubnetIdSetItemType.java | 14 +-
awsapi/src/com/amazon/ec2/SubnetIdSetType.java | 16 +-
awsapi/src/com/amazon/ec2/SubnetSetType.java | 16 +-
awsapi/src/com/amazon/ec2/SubnetType.java | 50 +-
awsapi/src/com/amazon/ec2/TagSetItemType.java | 32 +-
awsapi/src/com/amazon/ec2/TagSetType.java | 16 +-
.../src/com/amazon/ec2/TerminateInstances.java | 8 +-
.../amazon/ec2/TerminateInstancesResponse.java | 8 +-
.../ec2/TerminateInstancesResponseType.java | 20 +-
.../com/amazon/ec2/TerminateInstancesType.java | 14 +-
.../amazon/ec2/UnassignPrivateIpAddresses.java | 378 +
.../ec2/UnassignPrivateIpAddressesResponse.java | 378 +
.../UnassignPrivateIpAddressesResponseType.java | 583 +
.../ec2/UnassignPrivateIpAddressesType.java | 560 +
.../src/com/amazon/ec2/UnmonitorInstances.java | 8 +-
.../amazon/ec2/UnmonitorInstancesResponse.java | 8 +-
awsapi/src/com/amazon/ec2/UserDataType.java | 14 +-
.../com/amazon/ec2/UserIdGroupPairSetType.java | 16 +-
.../src/com/amazon/ec2/UserIdGroupPairType.java | 183 +-
awsapi/src/com/amazon/ec2/ValueSetType.java | 16 +-
awsapi/src/com/amazon/ec2/ValueType.java | 14 +-
awsapi/src/com/amazon/ec2/VgwTelemetryType.java | 576 +
.../amazon/ec2/VolumeStatusActionItemType.java | 775 +
.../amazon/ec2/VolumeStatusActionsSetType.java | 576 +
.../amazon/ec2/VolumeStatusDetailsItemType.java | 591 +
.../amazon/ec2/VolumeStatusDetailsSetType.java | 576 +
.../amazon/ec2/VolumeStatusEventItemType.java | 867 +
.../amazon/ec2/VolumeStatusEventsSetType.java | 576 +
.../com/amazon/ec2/VolumeStatusInfoType.java | 560 +
.../com/amazon/ec2/VolumeStatusItemType.java | 774 +
.../src/com/amazon/ec2/VolumeStatusSetType.java | 576 +
awsapi/src/com/amazon/ec2/VpcIdSetItemType.java | 14 +-
awsapi/src/com/amazon/ec2/VpcIdSetType.java | 16 +-
awsapi/src/com/amazon/ec2/VpcSetType.java | 16 +-
awsapi/src/com/amazon/ec2/VpcType.java | 145 +-
.../amazon/ec2/VpnConnectionIdSetItemType.java | 14 +-
.../com/amazon/ec2/VpnConnectionIdSetType.java | 16 +-
.../ec2/VpnConnectionOptionsRequestType.java | 505 +
.../ec2/VpnConnectionOptionsResponseType.java | 505 +
.../com/amazon/ec2/VpnConnectionSetType.java | 16 +-
.../src/com/amazon/ec2/VpnConnectionType.java | 272 +-
.../com/amazon/ec2/VpnGatewayIdSetItemType.java | 14 +-
.../src/com/amazon/ec2/VpnGatewayIdSetType.java | 16 +-
.../src/com/amazon/ec2/VpnGatewaySetType.java | 16 +-
awsapi/src/com/amazon/ec2/VpnGatewayType.java | 75 +-
.../src/com/amazon/ec2/VpnStaticRouteType.java | 683 +
.../com/amazon/ec2/VpnStaticRoutesSetType.java | 576 +
.../com/amazon/ec2/VpnTunnelTelemetryType.java | 872 +
.../ec2/client/AmazonEC2CallbackHandler.java | 1916 +-
.../com/amazon/ec2/client/AmazonEC2Stub.java | 387627 ++++++++++++----
.../bridge/auth/ec2/AuthenticationHandler.java | 6 +-
.../model/CloudStackServiceOfferingVO.java | 9 +-
.../dao/CloudStackConfigurationDaoImpl.java | 3 +-
.../dao/CloudStackSvcOfferingDaoImpl.java | 6 +-
.../persist/dao/CloudStackUserDaoImpl.java | 13 +-
.../cloud/bridge/persist/dao/MHostDaoImpl.java | 8 +-
.../bridge/persist/dao/OfferingDaoImpl.java | 8 +-
.../cloud/bridge/persist/dao/SHostDaoImpl.java | 8 +-
.../persist/dao/UserCredentialsDaoImpl.java | 1 +
.../cloud/bridge/service/EC2MainServlet.java | 2 +-
.../cloud/bridge/service/EC2RestServlet.java | 454 +-
.../cloud/bridge/service/EC2SoapService.java | 344 +-
.../bridge/service/EC2SoapServiceImpl.java | 623 +-
.../service/controller/s3/ServiceProvider.java | 6 +-
.../service/core/ec2/EC2AddressFilterSet.java | 16 +-
.../core/ec2/EC2AvailabilityZonesFilterSet.java | 9 +-
.../service/core/ec2/EC2DescribeImages.java | 10 +
.../bridge/service/core/ec2/EC2Engine.java | 1021 +-
.../service/core/ec2/EC2GroupFilterSet.java | 53 +-
.../cloud/bridge/service/core/ec2/EC2Image.java | 63 +-
.../service/core/ec2/EC2ImageFilterSet.java | 168 +
.../service/core/ec2/EC2InstanceFilterSet.java | 8 +-
.../service/core/ec2/EC2KeyPairFilterSet.java | 16 +-
.../core/ec2/EC2ModifyInstanceAttribute.java | 64 +
.../service/core/ec2/EC2RegisterImage.java | 5 +-
.../service/core/ec2/EC2RunInstances.java | 24 +-
.../service/core/ec2/EC2SecurityGroup.java | 11 +-
.../service/core/ec2/EC2SnapshotFilterSet.java | 10 +-
.../service/core/ec2/EC2TagsFilterSet.java | 9 +-
.../service/core/ec2/EC2VolumeFilterSet.java | 9 +-
.../cloud/bridge/service/core/s3/S3Engine.java | 2 +-
.../service/exception/EC2ServiceException.java | 120 +-
.../src/com/cloud/stack/CloudStackClient.java | 5 +-
.../stack/models/CloudStackDiskOffering.java | 9 +
.../stack/models/CloudStackSecurityGroup.java | 7 +
.../com/cloud/gate/model/ModelTestCase.java | 368 -
.../com/cloud/gate/persist/PersitTestCase.java | 73 -
awsapi/web/web.xml | 11 +-
build/replace.properties | 1 +
.../classes/resources/messages.properties | 1791 +-
.../classes/resources/messages_ar.properties | 285 +
.../classes/resources/messages_ca.properties | 306 +
.../classes/resources/messages_de_DE.properties | 747 +
.../classes/resources/messages_es.properties | 861 +
.../classes/resources/messages_fr_FR.properties | 1892 +-
.../classes/resources/messages_it_IT.properties | 811 +
.../classes/resources/messages_ja.properties | 2995 +-
.../classes/resources/messages_ko_KR.properties | 2885 +-
.../classes/resources/messages_nb_NO.properties | 365 +
.../classes/resources/messages_pt_BR.properties | 2092 +-
.../classes/resources/messages_ru_RU.properties | 2890 +-
.../classes/resources/messages_zh_CN.properties | 3040 +-
client/WEB-INF/web.xml | 2 +
client/pom.xml | 309 +-
client/tomcatconf/applicationContext.xml.in | 499 +-
client/tomcatconf/commands.properties.in | 126 +-
client/tomcatconf/componentContext.xml.in | 287 +-
client/tomcatconf/db-enc.properties.in | 68 -
client/tomcatconf/db.properties.in | 1 +
client/tomcatconf/log4j-cloud.xml.in | 22 +-
client/tomcatconf/nonossComponentContext.xml.in | 280 +-
client/tomcatconf/server.xml.in | 231 -
.../tomcatconf/simulatorComponentContext.xml.in | 312 +-
core/pom.xml | 21 +-
core/src/com/cloud/agent/Listener.java | 119 -
core/src/com/cloud/agent/RecoveryHandler.java | 31 -
.../com/cloud/agent/api/AgentControlAnswer.java | 30 +
.../cloud/agent/api/AgentControlCommand.java | 27 +
.../com/cloud/agent/api/AttachIsoCommand.java | 59 +
.../com/cloud/agent/api/AttachVolumeAnswer.java | 62 +
.../cloud/agent/api/AttachVolumeCommand.java | 199 +
.../cloud/agent/api/BackupSnapshotAnswer.java | 44 +
.../cloud/agent/api/BackupSnapshotCommand.java | 121 +
.../cloud/agent/api/BumpUpPriorityCommand.java | 30 +
core/src/com/cloud/agent/api/CancelCommand.java | 45 +
.../com/cloud/agent/api/ChangeAgentAnswer.java | 26 +
.../com/cloud/agent/api/ChangeAgentCommand.java | 46 +
.../com/cloud/agent/api/CheckHealthAnswer.java | 26 +
.../com/cloud/agent/api/CheckHealthCommand.java | 30 +
.../com/cloud/agent/api/CheckNetworkAnswer.java | 38 +
.../cloud/agent/api/CheckNetworkCommand.java | 42 +
.../com/cloud/agent/api/CheckOnHostAnswer.java | 48 +
.../com/cloud/agent/api/CheckOnHostCommand.java | 42 +
.../com/cloud/agent/api/CheckRouterAnswer.java | 81 +
.../com/cloud/agent/api/CheckRouterCommand.java | 30 +
.../agent/api/CheckS2SVpnConnectionsAnswer.java | 71 +
.../api/CheckS2SVpnConnectionsCommand.java | 39 +
.../com/cloud/agent/api/CheckStateAnswer.java | 45 +
.../com/cloud/agent/api/CheckStateCommand.java | 40 +
.../agent/api/CheckVirtualMachineAnswer.java | 52 +
.../agent/api/CheckVirtualMachineCommand.java | 41 +
.../cloud/agent/api/CleanupNetworkRulesCmd.java | 47 +
.../com/cloud/agent/api/ClusterSyncAnswer.java | 55 +
.../com/cloud/agent/api/ClusterSyncCommand.java | 47 +
.../cloud/agent/api/ComputeChecksumCommand.java | 48 +
.../api/ConsoleAccessAuthenticationAnswer.java | 88 +
.../api/ConsoleAccessAuthenticationCommand.java | 68 +
.../api/ConsoleProxyLoadReportCommand.java | 39 +
...reatePrivateTemplateFromSnapshotCommand.java | 82 +
.../CreatePrivateTemplateFromVolumeCommand.java | 93 +
.../agent/api/CreateStoragePoolCommand.java | 30 +
.../cloud/agent/api/CreateVMSnapshotAnswer.java | 62 +
.../agent/api/CreateVMSnapshotCommand.java | 42 +
.../api/CreateVolumeFromSnapshotAnswer.java | 38 +
.../api/CreateVolumeFromSnapshotCommand.java | 58 +
.../api/CreateVolumeFromVMSnapshotAnswer.java | 54 +
.../api/CreateVolumeFromVMSnapshotCommand.java | 88 +
core/src/com/cloud/agent/api/CronCommand.java | 24 +
.../agent/api/DeleteSnapshotsDirCommand.java | 51 +
.../agent/api/DeleteStoragePoolCommand.java | 61 +
.../cloud/agent/api/DeleteVMSnapshotAnswer.java | 49 +
.../agent/api/DeleteVMSnapshotCommand.java | 28 +
core/src/com/cloud/agent/api/FenceAnswer.java | 36 +
core/src/com/cloud/agent/api/FenceCommand.java | 61 +
.../cloud/agent/api/GetDomRVersionAnswer.java | 45 +
.../com/cloud/agent/api/GetDomRVersionCmd.java | 30 +
.../com/cloud/agent/api/GetFileStatsAnswer.java | 37 +
.../cloud/agent/api/GetFileStatsCommand.java | 41 +
.../com/cloud/agent/api/GetHostStatsAnswer.java | 88 +
.../cloud/agent/api/GetHostStatsCommand.java | 53 +
.../cloud/agent/api/GetStorageStatsAnswer.java | 51 +
.../cloud/agent/api/GetStorageStatsCommand.java | 86 +
.../cloud/agent/api/GetVmDiskStatsAnswer.java | 47 +
.../cloud/agent/api/GetVmDiskStatsCommand.java | 54 +
.../com/cloud/agent/api/GetVmStatsAnswer.java | 40 +
.../com/cloud/agent/api/GetVmStatsCommand.java | 54 +
.../com/cloud/agent/api/GetVncPortAnswer.java | 48 +
.../com/cloud/agent/api/GetVncPortCommand.java | 43 +
.../src/com/cloud/agent/api/HostStatsEntry.java | 113 +
.../src/com/cloud/agent/api/MaintainAnswer.java | 46 +
.../com/cloud/agent/api/MaintainCommand.java | 28 +
.../cloud/agent/api/ManageSnapshotAnswer.java | 40 +
.../cloud/agent/api/ManageSnapshotCommand.java | 92 +
core/src/com/cloud/agent/api/MigrateAnswer.java | 33 +
.../src/com/cloud/agent/api/MigrateCommand.java | 59 +
.../agent/api/MigrateWithStorageAnswer.java | 43 +
.../agent/api/MigrateWithStorageCommand.java | 57 +
.../api/MigrateWithStorageCompleteAnswer.java | 41 +
.../api/MigrateWithStorageCompleteCommand.java | 36 +
.../api/MigrateWithStorageReceiveAnswer.java | 55 +
.../api/MigrateWithStorageReceiveCommand.java | 45 +
.../agent/api/MigrateWithStorageSendAnswer.java | 39 +
.../api/MigrateWithStorageSendCommand.java | 58 +
.../cloud/agent/api/ModifySshKeysCommand.java | 44 +
.../agent/api/ModifyStoragePoolAnswer.java | 57 +
.../agent/api/ModifyStoragePoolCommand.java | 75 +
.../com/cloud/agent/api/NetworkUsageAnswer.java | 61 +
.../cloud/agent/api/NetworkUsageCommand.java | 98 +
core/src/com/cloud/agent/api/PingAnswer.java | 33 +
core/src/com/cloud/agent/api/PingCommand.java | 45 +
.../com/cloud/agent/api/PingRoutingCommand.java | 54 +
.../api/PingRoutingWithNwGroupsCommand.java | 46 +
.../agent/api/PingRoutingWithOvsCommand.java | 42 +
.../com/cloud/agent/api/PingStorageCommand.java | 37 +
.../com/cloud/agent/api/PingTestCommand.java | 54 +
core/src/com/cloud/agent/api/PlugNicAnswer.java | 25 +
.../src/com/cloud/agent/api/PlugNicCommand.java | 53 +
.../com/cloud/agent/api/PoolEjectCommand.java | 42 +
.../agent/api/PrepareForMigrationAnswer.java | 34 +
.../agent/api/PrepareForMigrationCommand.java | 39 +
.../agent/api/PrepareOCFS2NodesCommand.java | 44 +
.../api/PropagateResourceEventCommand.java | 48 +
core/src/com/cloud/agent/api/ReadyAnswer.java | 31 +
core/src/com/cloud/agent/api/ReadyCommand.java | 58 +
core/src/com/cloud/agent/api/RebootAnswer.java | 42 +
core/src/com/cloud/agent/api/RebootCommand.java | 45 +
.../cloud/agent/api/RebootRouterCommand.java | 38 +
.../agent/api/RevertToVMSnapshotAnswer.java | 63 +
.../agent/api/RevertToVMSnapshotCommand.java | 29 +
core/src/com/cloud/agent/api/ScaleVmAnswer.java | 28 +
.../src/com/cloud/agent/api/ScaleVmCommand.java | 123 +
.../agent/api/ScheduleHostScanTaskCommand.java | 32 +
.../agent/api/SecStorageFirewallCfgCommand.java | 82 +
.../cloud/agent/api/SecStorageSetupAnswer.java | 33 +
.../cloud/agent/api/SecStorageSetupCommand.java | 96 +
.../agent/api/SecStorageVMSetupCommand.java | 57 +
.../agent/api/SecurityGroupRuleAnswer.java | 70 +
.../cloud/agent/api/SecurityGroupRulesCmd.java | 304 +
core/src/com/cloud/agent/api/SetupAnswer.java | 37 +
core/src/com/cloud/agent/api/SetupCommand.java | 60 +
.../agent/api/SetupGuestNetworkAnswer.java | 25 +
.../agent/api/SetupGuestNetworkCommand.java | 72 +
.../com/cloud/agent/api/ShutdownCommand.java | 56 +
.../com/cloud/agent/api/SnapshotCommand.java | 126 +
core/src/com/cloud/agent/api/StartAnswer.java | 57 +
core/src/com/cloud/agent/api/StartCommand.java | 50 +
core/src/com/cloud/agent/api/StartupAnswer.java | 44 +
.../src/com/cloud/agent/api/StartupCommand.java | 286 +
.../agent/api/StartupExternalDhcpCommand.java | 25 +
.../api/StartupExternalFirewallCommand.java | 26 +
.../api/StartupExternalLoadBalancerCommand.java | 26 +
.../cloud/agent/api/StartupProxyCommand.java | 49 +
.../agent/api/StartupPxeServerCommand.java | 25 +
.../cloud/agent/api/StartupRoutingCommand.java | 224 +
.../api/StartupSecondaryStorageCommand.java | 32 +
.../cloud/agent/api/StartupStorageCommand.java | 110 +
.../agent/api/StartupTrafficMonitorCommand.java | 26 +
core/src/com/cloud/agent/api/StopAnswer.java | 56 +
core/src/com/cloud/agent/api/StopCommand.java | 65 +
.../cloud/agent/api/TransferAgentCommand.java | 57 +
.../com/cloud/agent/api/UnPlugNicAnswer.java | 25 +
.../com/cloud/agent/api/UnPlugNicCommand.java | 45 +
.../cloud/agent/api/UnregisterNicCommand.java | 55 +
.../cloud/agent/api/UnregisterVMCommand.java | 34 +
.../agent/api/UpdateHostPasswordCommand.java | 48 +
.../cloud/agent/api/UpgradeSnapshotCommand.java | 64 +
.../cloud/agent/api/VMSnapshotBaseCommand.java | 74 +
core/src/com/cloud/agent/api/VMSnapshotTO.java | 90 +
.../cloud/agent/api/ValidateSnapshotAnswer.java | 53 +
.../agent/api/ValidateSnapshotCommand.java | 84 +
.../com/cloud/agent/api/VmDiskStatsEntry.java | 90 +
core/src/com/cloud/agent/api/VmStatsEntry.java | 130 +
.../api/baremetal/IpmISetBootDevCommand.java | 43 +
.../api/baremetal/IpmiBootorResetCommand.java | 28 +
.../api/baremetal/PreparePxeServerAnswer.java | 29 +
.../api/baremetal/PreparePxeServerCommand.java | 80 +
.../baremetal/prepareCreateTemplateCommand.java | 66 +
.../cloud/agent/api/check/CheckSshAnswer.java | 37 +
.../cloud/agent/api/check/CheckSshCommand.java | 65 +
.../api/proxy/CheckConsoleProxyLoadCommand.java | 60 +
.../agent/api/proxy/ConsoleProxyLoadAnswer.java | 44 +
.../com/cloud/agent/api/proxy/ProxyCommand.java | 25 +
...tartConsoleProxyAgentHttpHandlerCommand.java | 68 +
.../api/proxy/WatchConsoleProxyLoadCommand.java | 65 +
.../agent/api/routing/CreateIpAliasCommand.java | 36 +
.../CreateLoadBalancerApplianceCommand.java | 48 +
.../agent/api/routing/DeleteIpAliasCommand.java | 50 +
.../DestroyLoadBalancerApplianceCommand.java | 32 +
.../agent/api/routing/DhcpEntryCommand.java | 144 +
.../agent/api/routing/DnsMasqConfigCommand.java | 35 +
.../routing/GlobalLoadBalancerConfigAnswer.java | 27 +
.../GlobalLoadBalancerConfigCommand.java | 104 +
.../api/routing/HealthCheckLBConfigAnswer.java | 42 +
.../api/routing/HealthCheckLBConfigCommand.java | 39 +
.../com/cloud/agent/api/routing/IpAliasTO.java | 42 +
.../cloud/agent/api/routing/IpAssocAnswer.java | 48 +
.../cloud/agent/api/routing/IpAssocCommand.java | 42 +
.../agent/api/routing/IpAssocVpcCommand.java | 29 +
.../api/routing/LoadBalancerConfigCommand.java | 68 +
.../api/routing/NetworkElementCommand.java | 56 +
.../api/routing/RemoteAccessVpnCfgCommand.java | 78 +
.../agent/api/routing/SavePasswordCommand.java | 56 +
.../api/routing/SetFirewallRulesAnswer.java | 36 +
.../api/routing/SetFirewallRulesCommand.java | 98 +
.../agent/api/routing/SetNetworkACLAnswer.java | 36 +
.../agent/api/routing/SetNetworkACLCommand.java | 103 +
.../routing/SetPortForwardingRulesAnswer.java | 37 +
.../routing/SetPortForwardingRulesCommand.java | 40 +
.../SetPortForwardingRulesVpcCommand.java | 30 +
.../agent/api/routing/SetSourceNatAnswer.java | 27 +
.../agent/api/routing/SetSourceNatCommand.java | 42 +
.../api/routing/SetStaticNatRulesAnswer.java | 37 +
.../api/routing/SetStaticNatRulesCommand.java | 47 +
.../agent/api/routing/SetStaticRouteAnswer.java | 36 +
.../api/routing/SetStaticRouteCommand.java | 62 +
.../api/routing/Site2SiteVpnCfgCommand.java | 154 +
.../api/routing/SiteLoadBalancerConfig.java | 134 +
.../agent/api/routing/UserDataCommand.java | 65 +
.../cloud/agent/api/routing/VmDataCommand.java | 69 +
.../agent/api/routing/VpnUsersCfgCommand.java | 94 +
.../api/storage/AbstractDownloadCommand.java | 78 +
.../api/storage/AbstractUploadCommand.java | 68 +
.../agent/api/storage/CopyVolumeAnswer.java | 43 +
.../agent/api/storage/CopyVolumeCommand.java | 74 +
.../cloud/agent/api/storage/CreateAnswer.java | 54 +
.../cloud/agent/api/storage/CreateCommand.java | 100 +
.../storage/CreateEntityDownloadURLAnswer.java | 37 +
.../storage/CreateEntityDownloadURLCommand.java | 84 +
.../storage/CreatePrivateTemplateAnswer.java | 79 +
.../storage/CreatePrivateTemplateCommand.java | 90 +
.../storage/DeleteEntityDownloadURLAnswer.java | 37 +
.../storage/DeleteEntityDownloadURLCommand.java | 72 +
.../cloud/agent/api/storage/DestroyAnswer.java | 31 +
.../cloud/agent/api/storage/DestroyCommand.java | 55 +
.../cloud/agent/api/storage/DownloadAnswer.java | 141 +
.../agent/api/storage/ListTemplateAnswer.java | 53 +
.../agent/api/storage/ListTemplateCommand.java | 47 +
.../agent/api/storage/ListVolumeAnswer.java | 53 +
.../agent/api/storage/ListVolumeCommand.java | 47 +
.../storage/ManageVolumeAvailabilityAnswer.java | 32 +
.../ManageVolumeAvailabilityCommand.java | 54 +
.../agent/api/storage/MigrateVolumeAnswer.java | 38 +
.../agent/api/storage/MigrateVolumeCommand.java | 51 +
.../storage/PrimaryStorageDownloadAnswer.java | 55 +
.../storage/PrimaryStorageDownloadCommand.java | 96 +
.../agent/api/storage/ResizeVolumeAnswer.java | 40 +
.../agent/api/storage/ResizeVolumeCommand.java | 85 +
.../cloud/agent/api/storage/StorageCommand.java | 26 +
.../agent/api/storage/UpgradeDiskAnswer.java | 31 +
.../agent/api/storage/UpgradeDiskCommand.java | 50 +
.../cloud/agent/api/storage/UploadAnswer.java | 123 +
.../cloud/agent/api/storage/UploadCommand.java | 144 +
.../api/storage/UploadProgressCommand.java | 48 +
.../com/cloud/agent/api/storage/ssCommand.java | 48 +
.../virtualnetwork/VirtualRoutingResource.java | 237 +-
.../cloud/agent/transport/ArrayTypeAdaptor.java | 8 +-
.../agent/transport/InterfaceTypeAdaptor.java | 66 +
core/src/com/cloud/alert/AlertAdapter.java | 22 -
core/src/com/cloud/alert/AlertManager.java | 58 -
core/src/com/cloud/alert/AlertVO.java | 183 -
core/src/com/cloud/async/AsyncJobVO.java | 400 -
core/src/com/cloud/async/SyncQueueItemVO.java | 141 -
core/src/com/cloud/async/SyncQueueVO.java | 137 -
core/src/com/cloud/capacity/CapacityVO.java | 204 -
.../com/cloud/certificate/CertificateVO.java | 63 -
.../cloud/configuration/ConfigurationVO.java | 107 -
.../cloud/configuration/ResourceCountVO.java | 131 -
.../cloud/configuration/ResourceLimitVO.java | 128 -
.../consoleproxy/ConsoleProxyAllocator.java | 27 -
core/src/com/cloud/event/EventVO.java | 194 -
core/src/com/cloud/event/UsageEvent.java | 33 -
core/src/com/cloud/event/UsageEventVO.java | 216 -
core/src/com/cloud/event/dao/EventDao.java | 38 -
core/src/com/cloud/event/dao/EventDaoImpl.java | 109 -
core/src/com/cloud/event/dao/UsageEventDao.java | 36 -
.../com/cloud/event/dao/UsageEventDaoImpl.java | 187 -
.../exception/AgentControlChannelException.java | 27 -
.../exception/OperationTimedoutException.java | 62 -
core/src/com/cloud/host/DetailVO.java | 73 -
core/src/com/cloud/host/HostTagVO.java | 65 -
core/src/com/cloud/host/HostVO.java | 732 -
.../hypervisor/HypervisorCapabilitiesVO.java | 181 -
.../hyperv/resource/HypervResource.java | 978 -
.../com/cloud/info/ConsoleProxyLoadInfo.java | 48 -
.../com/cloud/info/RunningHostCountInfo.java | 48 -
.../com/cloud/network/HAProxyConfigurator.java | 27 +-
core/src/com/cloud/network/VpnUserVO.java | 131 -
.../network/security/SecurityGroupRuleVO.java | 167 -
.../network/security/SecurityGroupRulesVO.java | 156 -
.../network/security/SecurityGroupVMMapVO.java | 89 -
.../cloud/network/security/SecurityGroupVO.java | 99 -
.../network/security/SecurityGroupWork.java | 40 -
.../network/security/SecurityGroupWorkVO.java | 135 -
.../cloud/network/security/VmRulesetLogVO.java | 81 -
.../com/cloud/resource/ResourceListener.java | 40 +-
.../com/cloud/resource/ServerResourceBase.java | 2 +-
.../resource/UnableDeleteHostException.java | 28 -
core/src/com/cloud/serializer/GsonHelper.java | 9 +
core/src/com/cloud/storage/DiskOfferingVO.java | 318 -
.../com/cloud/storage/GuestOSCategoryVO.java | 68 -
core/src/com/cloud/storage/GuestOSVO.java | 90 -
.../src/com/cloud/storage/JavaStorageLayer.java | 16 +
.../com/cloud/storage/LaunchPermissionVO.java | 57 -
core/src/com/cloud/storage/S3VO.java | 209 -
.../src/com/cloud/storage/SecondaryStorage.java | 30 -
.../cloud/storage/SecondaryStorageLayer.java | 39 -
.../src/com/cloud/storage/SnapshotPolicyVO.java | 133 -
.../com/cloud/storage/SnapshotScheduleVO.java | 125 -
core/src/com/cloud/storage/SnapshotVO.java | 298 -
core/src/com/cloud/storage/StorageLayer.java | 2 +
.../cloud/storage/StoragePoolDiscoverer.java | 35 -
.../com/cloud/storage/StoragePoolHostAssoc.java | 35 -
.../com/cloud/storage/StoragePoolHostVO.java | 109 -
.../com/cloud/storage/StoragePoolWorkVO.java | 118 -
core/src/com/cloud/storage/SwiftVO.java | 108 -
core/src/com/cloud/storage/UploadVO.java | 268 -
.../com/cloud/storage/VMTemplateDetailVO.java | 84 -
.../src/com/cloud/storage/VMTemplateHostVO.java | 322 -
core/src/com/cloud/storage/VMTemplateS3VO.java | 204 -
.../cloud/storage/VMTemplateStoragePoolVO.java | 275 -
.../com/cloud/storage/VMTemplateSwiftVO.java | 107 -
core/src/com/cloud/storage/VMTemplateVO.java | 534 -
.../src/com/cloud/storage/VMTemplateZoneVO.java | 116 -
core/src/com/cloud/storage/VolumeHostVO.java | 347 -
core/src/com/cloud/storage/VolumeVO.java | 454 -
.../resource/CifsSecondaryStorageResource.java | 755 -
.../resource/LocalSecondaryStorageResource.java | 246 -
.../resource/NfsSecondaryStorageResource.java | 1842 -
.../resource/SecondaryStorageResource.java | 28 -
.../SecondaryStorageResourceHandler.java | 24 -
.../storage/resource/StoragePoolResource.java | 4 +-
.../storage/resource/StorageProcessor.java | 46 +
.../StorageSubsystemCommandHandler.java | 27 +
.../StorageSubsystemCommandHandlerBase.java | 141 +
.../storage/snapshot/SnapshotSchedule.java | 46 -
.../cloud/storage/template/DownloadManager.java | 103 -
.../storage/template/DownloadManagerImpl.java | 1049 -
.../template/HttpTemplateDownloader.java | 101 +-
.../cloud/storage/template/IsoProcessor.java | 5 +
.../com/cloud/storage/template/Processor.java | 5 +
.../cloud/storage/template/QCOW2Processor.java | 23 +
.../storage/template/RawImageProcessor.java | 5 +
.../storage/template/S3TemplateDownloader.java | 418 +
.../storage/template/TemplateConstants.java | 11 +-
.../storage/template/TemplateLocation.java | 76 +-
.../cloud/storage/template/UploadManager.java | 85 -
.../storage/template/UploadManagerImpl.java | 645 -
.../cloud/storage/template/VhdProcessor.java | 28 +
.../cloud/storage/template/VmdkProcessor.java | 92 +-
core/src/com/cloud/user/AccountVO.java | 182 -
core/src/com/cloud/user/SSHKeyPairVO.java | 119 -
core/src/com/cloud/user/UserAccountVO.java | 284 -
core/src/com/cloud/user/UserStatisticsVO.java | 165 -
core/src/com/cloud/user/UserStatsLogVO.java | 132 -
core/src/com/cloud/user/UserVO.java | 265 -
core/src/com/cloud/vm/ConsoleProxy.java | 27 -
core/src/com/cloud/vm/ConsoleProxyVO.java | 151 -
core/src/com/cloud/vm/DomainRouterVO.java | 246 -
core/src/com/cloud/vm/InstanceGroupVMMapVO.java | 71 -
core/src/com/cloud/vm/InstanceGroupVO.java | 120 -
core/src/com/cloud/vm/SecondaryStorageVm.java | 26 -
core/src/com/cloud/vm/SecondaryStorageVmVO.java | 135 -
core/src/com/cloud/vm/SystemVm.java | 26 -
core/src/com/cloud/vm/UserVmCloneSettingVO.java | 50 -
core/src/com/cloud/vm/UserVmDetailVO.java | 85 -
core/src/com/cloud/vm/UserVmVO.java | 137 -
core/src/com/cloud/vm/VMInstanceVO.java | 483 -
core/src/com/cloud/vm/VirtualDisk.java | 31 -
core/src/com/cloud/vm/VirtualMachineName.java | 190 -
core/src/com/cloud/vm/VmDetailConstants.java | 23 -
.../src/com/cloud/vm/snapshot/VMSnapshotVO.java | 224 -
.../storage/command/AttachAnswer.java | 47 +
.../storage/command/AttachCommand.java | 126 +
.../command/AttachPrimaryDataStoreAnswer.java | 56 +
.../command/AttachPrimaryDataStoreCmd.java | 39 +
.../storage/command/CopyCmdAnswer.java | 37 +
.../cloudstack/storage/command/CopyCommand.java | 66 +
.../storage/command/CreateObjectAnswer.java | 43 +
.../storage/command/CreateObjectCommand.java | 45 +
.../command/CreatePrimaryDataStoreCmd.java | 38 +
.../storage/command/DeleteCommand.java | 45 +
.../storage/command/DettachAnswer.java | 47 +
.../storage/command/DettachCommand.java | 90 +
.../storage/command/DownloadCommand.java | 189 +
.../command/DownloadProgressCommand.java | 49 +
.../command/StorageSubSystemCommand.java | 23 +
.../cloudstack/storage/to/ImageStoreTO.java | 79 +
.../storage/to/PrimaryDataStoreTO.java | 103 +
.../cloudstack/storage/to/SnapshotObjectTO.java | 137 +
.../cloudstack/storage/to/TemplateObjectTO.java | 217 +
.../cloudstack/storage/to/VolumeObjectTO.java | 223 +
.../com/cloud/agent/transport/RequestTest.java | 72 +-
.../api/agent/test/AgentControlAnswerTest.java | 35 +
.../api/agent/test/AgentControlCommandTest.java | 33 +
.../cloudstack/api/agent/test/AnswerTest.java | 73 +
.../api/agent/test/AttachIsoCommandTest.java | 80 +
.../api/agent/test/AttachVolumeAnswerTest.java | 65 +
.../api/agent/test/AttachVolumeCommandTest.java | 114 +
.../agent/test/BackupSnapshotAnswerTest.java | 75 +
.../agent/test/BackupSnapshotCommandTest.java | 270 +
.../agent/test/BumpUpPriorityCommandTest.java | 83 +
.../api/agent/test/CancelCommandTest.java | 46 +
.../api/agent/test/ChangeAgentAnswerTest.java | 44 +
.../api/agent/test/ChangeAgentCommandTest.java | 50 +
.../api/agent/test/CheckHealthAnswerTest.java | 49 +
.../api/agent/test/CheckHealthCommandTest.java | 40 +
.../api/agent/test/CheckNetworkAnswerTest.java | 272 +
.../api/agent/test/CheckNetworkCommandTest.java | 53 +
.../api/agent/test/CheckOnHostCommandTest.java | 483 +
.../api/agent/test/SnapshotCommandTest.java | 207 +
debian/changelog | 12 +
debian/cloudstack-agent.install | 6 +-
debian/cloudstack-awsapi.install | 10 +-
debian/cloudstack-common.install | 8 +-
debian/cloudstack-management.install | 35 +-
debian/cloudstack-management.postinst | 11 +-
debian/cloudstack-usage.postinst | 12 +-
debian/control | 6 +-
debian/rules | 60 +-
deps/XenServerJava/pom.xml | 2 +-
deps/install-non-oss.sh | 13 -
developer/pom.xml | 19 +-
docs/en-US/Admin_Guide.xml | 2 +-
docs/en-US/Book_Info.xml | 39 +-
docs/en-US/Book_Info_Release_Notes_4-0.xml | 39 -
docs/en-US/Book_Info_Release_Notes_4.xml | 38 +
docs/en-US/CloudStack_GSoC_Guide.ent | 22 +
docs/en-US/CloudStack_GSoC_Guide.xml | 52 +
docs/en-US/CloudStack_Nicira_NVP_Guide.xml | 3 +-
docs/en-US/Common_Content/Legal_Notice.xml | 6 -
docs/en-US/Common_Content/feedback.xml | 24 +
docs/en-US/Developers_Guide.xml | 4 +-
docs/en-US/Installation_Guide.xml | 6 +-
docs/en-US/LDAP-for-user-authentication.xml | 51 +
.../LDAPserver-for-user-authentication.xml | 39 -
docs/en-US/MidoNet_Plugin_Guide.ent | 22 +
docs/en-US/MidoNet_Plugin_Guide.xml | 52 +
docs/en-US/Preface.xml | 2 +-
docs/en-US/Release_Notes.xml | 4948 +-
docs/en-US/about-password-encryption.xml | 2 +-
docs/en-US/about-primary-storage.xml | 5 +-
docs/en-US/about-regions.xml | 5 +-
docs/en-US/about-secondary-storage.xml | 22 +-
docs/en-US/about-working-with-vms.xml | 85 +-
docs/en-US/about-zones.xml | 22 +-
docs/en-US/accessing-system-vms.xml | 66 +
docs/en-US/accounts-users-domains.xml | 88 +-
docs/en-US/accounts.xml | 6 +-
docs/en-US/acquire-new-ip-address.xml | 38 +-
docs/en-US/acquire-new-ip-for-vpc.xml | 33 +-
docs/en-US/add-clusters-vsphere.xml | 11 +-
docs/en-US/add-gateway-vpc.xml | 133 +-
docs/en-US/add-ip-range.xml | 124 +
docs/en-US/add-load-balancer-rule.xml | 20 +-
docs/en-US/add-loadbalancer-rule-vpc.xml | 481 +-
.../add-password-management-to-templates.xml | 25 +-
docs/en-US/add-portforward-rule-vpc.xml | 36 +-
docs/en-US/add-remove-nic-ui.xml | 152 +
docs/en-US/add-remove-nic.xml | 14 +-
docs/en-US/add-tier.xml | 15 +-
docs/en-US/add-vm-tier-sharednw.xml | 62 +
docs/en-US/add-vm-to-tier.xml | 14 +-
docs/en-US/add-vpc.xml | 7 +-
docs/en-US/added-API-commands-4-1.xml | 1 -
docs/en-US/added-API-commands-4.2.xml | 554 +
docs/en-US/added-API-commands.xml | 2 +-
docs/en-US/admin-alerts.xml | 95 +-
docs/en-US/advanced-zone-configuration.xml | 17 +-
.../advanced-zone-network-traffic-types.xml | 2 +-
...nced-zone-physical-network-configuration.xml | 1 +
docs/en-US/append-displayname-vms.xml | 84 +
docs/en-US/attaching-volume.xml | 57 +-
docs/en-US/aws-ec2-configuration.xml | 6 +-
docs/en-US/aws-ec2-introduction.xml | 2 +-
docs/en-US/basic-zone-configuration.xml | 414 +-
docs/en-US/basic-zone-network-traffic-types.xml | 4 +-
docs/en-US/best-practices-for-vms.xml | 30 +-
docs/en-US/best-practices-primary-storage.xml | 6 +-
docs/en-US/build-nonoss.xml | 49 +
docs/en-US/build-rpm.xml | 22 +-
docs/en-US/building-devcloud.xml | 2 +-
docs/en-US/building-documentation.xml | 2 +-
docs/en-US/building-marvin.xml | 2 +-
docs/en-US/building-translation.xml | 2 +-
...nge-console-proxy-ssl-certificate-domain.xml | 2 +-
docs/en-US/change-database-config.xml | 2 +-
docs/en-US/change-database-password.xml | 16 +-
...change-network-offering-on-guest-network.xml | 75 +-
docs/en-US/changed-API-commands-4.2.xml | 1129 +
docs/en-US/changing-service-offering-for-vm.xml | 194 +-
docs/en-US/choosing-a-hypervisor.xml | 136 +
docs/en-US/citrix-xenserver-installation.xml | 27 +-
docs/en-US/configure-acl.xml | 378 +-
docs/en-US/configure-package-repository.xml | 6 +-
docs/en-US/configure-usage-server.xml | 4 +-
docs/en-US/configure-vpc.xml | 1 +
docs/en-US/configure-vpn.xml | 4 +-
docs/en-US/console-proxy.xml | 2 +-
docs/en-US/create-linux-template.xml | 41 +
docs/en-US/create-vpn-connection-vpc.xml | 31 +-
docs/en-US/create-vpn-gateway-for-vpc.xml | 30 +-
docs/en-US/creating-a-plugin.xml | 29 +
docs/en-US/creating-compute-offerings.xml | 4 +
docs/en-US/creating-disk-offerings.xml | 10 +-
docs/en-US/creating-my-first-plugin.xml | 216 +
docs/en-US/creating-network-offerings.xml | 66 +-
docs/en-US/creating-new-volumes.xml | 99 +-
docs/en-US/creating-shared-network.xml | 132 +
docs/en-US/creating-vms.xml | 124 +-
docs/en-US/database-replication.xml | 18 +-
docs/en-US/delete-event-alerts.xml | 89 +
docs/en-US/delete-reset-vpn.xml | 28 +-
docs/en-US/deployment-architecture-overview.xml | 2 +-
docs/en-US/detach-move-volumes.xml | 57 +-
docs/en-US/egress-firewall-rule.xml | 220 +-
docs/en-US/elastic-ip.xml | 103 +
docs/en-US/enable-disable-static-nat-vpc.xml | 35 +-
docs/en-US/event-framework.xml | 2 +-
docs/en-US/events.xml | 5 +-
.../example-LDAP-configuration-commands.xml | 47 -
.../example-activedirectory-configuration.xml | 43 +
docs/en-US/example-openldap-configuration.xml | 44 +
.../external-firewalls-and-load-balancers.xml | 1 +
docs/en-US/feedback.xml | 24 +
docs/en-US/first_ms_node_install.xml | 4 +-
docs/en-US/getting-release.xml | 2 +-
docs/en-US/global-config.xml | 380 +-
docs/en-US/gslb.xml | 487 +
docs/en-US/gsoc-dharmesh.xml | 149 +
docs/en-US/gsoc-imduffy15.xml | 395 +
docs/en-US/gsoc-meng.xml | 235 +
docs/en-US/gsoc-midsummer-dharmesh.xml | 193 +
docs/en-US/gsoc-midsummer-ian.xml | 344 +
docs/en-US/gsoc-midsummer-meng.xml | 216 +
docs/en-US/gsoc-midsummer-nguyen.xml | 480 +
docs/en-US/gsoc-midsummer-shiva.xml | 283 +
docs/en-US/gsoc-midsummer.xml | 35 +
docs/en-US/gsoc-proposals.xml | 35 +
docs/en-US/gsoc-shiva.xml | 70 +
docs/en-US/gsoc-tuna.xml | 231 +
docs/en-US/guest-ip-ranges.xml | 10 +-
docs/en-US/guest-traffic.xml | 24 +-
docs/en-US/hardware-firewall.xml | 7 +-
docs/en-US/health-checks-for-lb-rules.xml | 51 +
docs/en-US/host-add-xenserver-kvm-ovm.xml | 6 +-
docs/en-US/host-allocation.xml | 105 +-
docs/en-US/hypervisor-host-install-agent.xml | 51 +-
docs/en-US/hypervisor-host-install-firewall.xml | 4 +-
docs/en-US/hypervisor-host-install-libvirt.xml | 9 +-
...ervisor-host-install-network-openvswitch.xml | 2 +-
docs/en-US/hypervisor-host-install-network.xml | 12 +-
docs/en-US/hypervisor-installation.xml | 1 +
docs/en-US/hypervisor-kvm-install-flow.xml | 1 +
.../hypervisor-support-for-primarystorage.xml | 148 +-
docs/en-US/images/VMSnapshotButton.png | Bin 0 -> 967 bytes
docs/en-US/images/Workloads.png | Bin 0 -> 39846 bytes
docs/en-US/images/add-account-screen.png | Bin 0 -> 71491 bytes
docs/en-US/images/add-cluster.png | Bin 35697 -> 37800 bytes
docs/en-US/images/add-gslb.png | Bin 0 -> 17665 bytes
docs/en-US/images/add-guest-network.png | Bin 20547 -> 24669 bytes
docs/en-US/images/add-ip-range.png | Bin 0 -> 16572 bytes
docs/en-US/images/add-ldap-configuration-ad.png | Bin 0 -> 70112 bytes
.../images/add-ldap-configuration-failure.png | Bin 0 -> 84858 bytes
.../images/add-ldap-configuration-openldap.png | Bin 0 -> 65270 bytes
docs/en-US/images/add-ldap-configuration.png | Bin 0 -> 78542 bytes
docs/en-US/images/add-new-gateway-vpc.png | Bin 23184 -> 21912 bytes
docs/en-US/images/add-tier.png | Bin 14891 -> 19054 bytes
docs/en-US/images/add-vlan-icon.png | Bin 0 -> 860 bytes
docs/en-US/images/add-vm-vpc.png | Bin 0 -> 8596 bytes
docs/en-US/images/add-vpc.png | Bin 16597 -> 20392 bytes
docs/en-US/images/addAccount-icon.png | Bin 0 -> 605 bytes
docs/en-US/images/addvm-tier-sharednw.png | Bin 0 -> 111465 bytes
docs/en-US/images/async-calls.png | Bin 0 -> 126157 bytes
docs/en-US/images/change-affinity-button.png | Bin 0 -> 7300 bytes
docs/en-US/images/clusterDefinition.png | Bin 0 -> 52607 bytes
.../en-US/images/configuration-edit-success.png | Bin 0 -> 86909 bytes
docs/en-US/images/configurations-screen.png | Bin 0 -> 85285 bytes
docs/en-US/images/create-account-post.png | Bin 0 -> 116063 bytes
docs/en-US/images/create-account-request.png | Bin 0 -> 169834 bytes
docs/en-US/images/dedicate-resource-button.png | Bin 0 -> 7144 bytes
docs/en-US/images/del-tier.png | Bin 0 -> 815 bytes
.../delete-ldap-configuration-failure.png | Bin 0 -> 39952 bytes
docs/en-US/images/delete-ldap-configuration.png | Bin 0 -> 69084 bytes
docs/en-US/images/delete-ldap.png | Bin 0 -> 27832 bytes
docs/en-US/images/edit-configuration.png | Bin 0 -> 86589 bytes
docs/en-US/images/edit-traffic-type.png | Bin 0 -> 93662 bytes
docs/en-US/images/eip-ns-basiczone.png | Bin 0 -> 63227 bytes
docs/en-US/images/gslb.png | Bin 0 -> 68556 bytes
docs/en-US/images/instances-screen.png | Bin 0 -> 66865 bytes
docs/en-US/images/jenkins-pipeline.png | Bin 0 -> 29136 bytes
docs/en-US/images/l3_services.png | Bin 0 -> 30362 bytes
docs/en-US/images/launchHadoopClusterApi.png | Bin 0 -> 13427 bytes
docs/en-US/images/launchHadoopClusterCmd.png | Bin 0 -> 83972 bytes
docs/en-US/images/ldap-account-addition.png | Bin 0 -> 69225 bytes
docs/en-US/images/ldap-configuration.png | Bin 0 -> 33360 bytes
docs/en-US/images/ldap-global-settings.png | Bin 0 -> 31145 bytes
docs/en-US/images/ldap-list-users.png | Bin 0 -> 85922 bytes
docs/en-US/images/list-domain-vms.png | Bin 0 -> 130442 bytes
docs/en-US/images/list-ldap-configuration.png | Bin 0 -> 38909 bytes
docs/en-US/images/list-specific-vm.png | Bin 0 -> 86323 bytes
docs/en-US/images/list-virtualmachines.png | Bin 0 -> 124665 bytes
docs/en-US/images/mesos-integration-arch.jpg | 0
docs/en-US/images/network_service.png | Bin 0 -> 28162 bytes
docs/en-US/images/nvp-add-controller.png | Bin 0 -> 35928 bytes
docs/en-US/images/nvp-enable-provider.png | Bin 0 -> 32158 bytes
docs/en-US/images/nvp-network-offering.png | Bin 0 -> 104060 bytes
docs/en-US/images/nvp-physical-network-stt.png | Bin 0 -> 27317 bytes
docs/en-US/images/nvp-vpc-offering-edit.png | Bin 0 -> 29279 bytes
docs/en-US/images/odl_structure.jpg | Bin 0 -> 116542 bytes
docs/en-US/images/plugin1.jpg | Bin 0 -> 32999 bytes
docs/en-US/images/plugin2.jpg | Bin 0 -> 35149 bytes
docs/en-US/images/plugin3.jpg | Bin 0 -> 41983 bytes
docs/en-US/images/plugin4.jpg | Bin 0 -> 32125 bytes
docs/en-US/images/plugin_intro.jpg | Bin 0 -> 22247 bytes
docs/en-US/images/remove-nic.png | Bin 0 -> 735 bytes
docs/en-US/images/replace-acl-icon.png | Bin 0 -> 982 bytes
docs/en-US/images/replace-acl-list.png | Bin 0 -> 7706 bytes
docs/en-US/images/revert-vm.png | Bin 0 -> 860 bytes
docs/en-US/images/set-default-nic.png | Bin 0 -> 1012 bytes
docs/en-US/images/start-vm-screen.png | Bin 0 -> 65228 bytes
docs/en-US/images/traffic-label.png | Bin 0 -> 15520 bytes
docs/en-US/images/traffic-type.png | Bin 0 -> 19159 bytes
docs/en-US/images/vds-name.png | Bin 0 -> 64739 bytes
docs/en-US/images/view-systemvm-details.png | Bin 0 -> 25483 bytes
docs/en-US/images/vm-running.png | Bin 0 -> 67708 bytes
docs/en-US/images/vpc-lb.png | Bin 0 -> 181811 bytes
docs/en-US/images/whirrDependency.png | Bin 0 -> 10794 bytes
docs/en-US/images/whirrOutput.png | Bin 0 -> 61831 bytes
.../increase-management-server-max-memory.xml | 4 +-
docs/en-US/install-usage-server.xml | 2 +-
docs/en-US/inter-vlan-routing.xml | 30 +-
docs/en-US/ip-forwarding-firewalling.xml | 9 +-
docs/en-US/ip-vlan-tenant.xml | 212 +
docs/en-US/ipv6-support.xml | 6 +-
docs/en-US/isolated-networks.xml | 25 +-
docs/en-US/libcloud-examples.xml | 75 +
docs/en-US/limit-accounts-domains.xml | 371 +
docs/en-US/linux-installation.xml | 89 +-
docs/en-US/load-balancer-rules.xml | 1 +
docs/en-US/lxc-install.xml | 110 +
docs/en-US/lxc-topology-req.xml | 24 +
docs/en-US/manage-cloud.xml | 2 +-
docs/en-US/management-server-install-client.xml | 8 +-
.../management-server-install-db-external.xml | 2 +-
.../management-server-install-db-local.xml | 12 +-
docs/en-US/management-server-install-flow.xml | 28 +-
.../management-server-install-multi-node.xml | 10 +-
.../management-server-install-prepare-os.xml | 2 +-
.../management-server-install-systemvm.xml | 6 +-
docs/en-US/management-server-lb.xml | 2 +-
docs/en-US/manual-live-migration.xml | 13 +-
...migrate-datadisk-volume-new-storage-pool.xml | 61 +-
...te-vm-rootvolume-volume-new-storage-pool.xml | 34 +-
docs/en-US/minimum-system-requirements.xml | 3 +-
docs/en-US/multiple-ip-nic.xml | 95 +
docs/en-US/multiple-ip-range.xml | 42 +
docs/en-US/network-offerings.xml | 83 +-
docs/en-US/network-service-providers.xml | 233 +-
docs/en-US/networks.xml | 10 +-
docs/en-US/non-contiguous-vlan.xml | 67 +
...ver-provisioning-service-offering-limits.xml | 140 +-
docs/en-US/password-storage-engine.xml | 74 +
docs/en-US/plugin-development.xml | 28 +
docs/en-US/plugin-midonet-about.xml | 27 +
docs/en-US/plugin-midonet-features.xml | 57 +
docs/en-US/plugin-midonet-introduction.xml | 26 +
docs/en-US/plugin-midonet-preparations.xml | 90 +
docs/en-US/plugin-midonet-provider.xml | 39 +
docs/en-US/plugin-midonet-revisions.xml | 45 +
docs/en-US/plugin-midonet-ui.xml | 65 +
docs/en-US/plugin-midonet-usage.xml | 29 +
docs/en-US/plugin-niciranvp-about.xml | 2 +-
.../en-US/plugin-niciranvp-devicemanagement.xml | 32 +-
docs/en-US/plugin-niciranvp-features.xml | 67 +-
docs/en-US/plugin-niciranvp-guide.xml | 31 -
docs/en-US/plugin-niciranvp-introduction.xml | 5 +-
.../en-US/plugin-niciranvp-networkofferings.xml | 131 +
docs/en-US/plugin-niciranvp-physicalnet.xml | 37 +
docs/en-US/plugin-niciranvp-preparations.xml | 11 +-
docs/en-US/plugin-niciranvp-provider.xml | 28 +-
docs/en-US/plugin-niciranvp-revisions.xml | 14 +
docs/en-US/plugin-niciranvp-tables.xml | 105 +-
docs/en-US/plugin-niciranvp-usage.xml | 11 +-
docs/en-US/plugin-niciranvp-vpc.xml | 30 +
docs/en-US/plugin-niciranvp-vpcfeatures.xml | 28 +
.../plugin-niciranvp-vpcnetworkoffering.xml | 81 +
docs/en-US/plugin-niciranvp-vpcoffering.xml | 38 +
docs/en-US/portable-ip.xml | 145 +
docs/en-US/prepare-linux-template.xml | 190 +
docs/en-US/prepare-system-vm-template.xml | 4 +
docs/en-US/primary-storage-add.xml | 99 +-
docs/en-US/pvlan.xml | 247 +
docs/en-US/query-filter.xml | 60 -
docs/en-US/region-add.xml | 73 +-
docs/en-US/release-ip-for-vpc.xml | 31 +-
docs/en-US/remove-tier.xml | 22 +-
docs/en-US/remove-vpc.xml | 5 +-
docs/en-US/removed-api-4.2.xml | 144 +
docs/en-US/reserved-ip-addresses-non-csvms.xml | 7 +-
docs/en-US/reset-volume-on-reboot.xml | 32 +
.../runtime-behavior-of-primary-storage.xml | 5 +-
docs/en-US/search-user-bind-dn.xml | 47 -
docs/en-US/secondary-storage-add.xml | 45 +-
docs/en-US/set-database-buffer-pool-size.xml | 2 +-
.../set-global-project-resource-limits.xml | 2 +-
docs/en-US/set-projects-creator-permissions.xml | 2 +-
docs/en-US/set-up-invitations.xml | 2 +-
docs/en-US/set-up-network-for-users.xml | 13 +-
docs/en-US/shared-networks.xml | 40 +-
docs/en-US/signing-api-calls-python.xml | 101 +
docs/en-US/signing-api-requests.xml | 7 +-
docs/en-US/site-to-site-vpn.xml | 11 +-
docs/en-US/snapshot-performance-vmware.xml | 39 +
docs/en-US/source-build.xml | 6 +-
docs/en-US/source.xml | 1 +
docs/en-US/stop-restart-management-server.xml | 6 +-
docs/en-US/stopping-and-starting-vms.xml | 2 +-
docs/en-US/storage-plugins.xml | 144 +
docs/en-US/storage-setup.xml | 192 +
docs/en-US/storage.xml | 15 +-
docs/en-US/sys-offering-sysvm.xml | 2 +-
docs/en-US/third-party-ui-plugin.xml | 364 +
docs/en-US/tools.xml | 1 +
docs/en-US/topology-req.xml | 3 +-
docs/en-US/translating-documentation.xml | 2 +-
...troubleshooting-working-with-server-logs.xml | 6 +-
docs/en-US/update-iso-vm.xml | 47 +
docs/en-US/upload-existing-volume-to-vm.xml | 129 +-
docs/en-US/user-data-and-meta-data.xml | 2 +-
docs/en-US/user-services-overview.xml | 6 +-
docs/en-US/using-multiple-guest-networks.xml | 1 +
docs/en-US/using-netscaler-load-balancers.xml | 132 +-
docs/en-US/using-sshkeys.xml | 2 +-
docs/en-US/using-vpn-with-mac.xml | 2 +-
docs/en-US/using-vpn-with-windows.xml | 2 +-
docs/en-US/verifying-source.xml | 2 +-
docs/en-US/virtual-machines.xml | 8 +
docs/en-US/vlan-assign-isolated-nw.xml | 66 +
docs/en-US/vlan-provisioning.xml | 3 +
docs/en-US/vm-snapshots.xml | 148 +
docs/en-US/vm-storage-migration.xml | 35 +-
docs/en-US/vmware-cluster-config-dvswitch.xml | 227 +-
docs/en-US/vmware-install.xml | 6 +-
docs/en-US/vmware-requirements.xml | 2 +-
docs/en-US/vnmc-cisco.xml | 400 +
.../volume-deletion-garbage-collection.xml | 29 +-
docs/en-US/vpc.xml | 10 +-
docs/en-US/vpn.xml | 57 +-
docs/en-US/whats-new.xml | 8 +-
docs/en-US/windows-installation.xml | 9 +-
docs/en-US/work-with-usage.xml | 26 +-
docs/en-US/working-with-hosts.xml | 2 +-
docs/en-US/working-with-iso.xml | 1 +
docs/en-US/working-with-snapshots.xml | 3 +-
docs/en-US/working-with-system-vm.xml | 1 +
docs/en-US/working-with-templates.xml | 1 +
docs/en-US/working-with-volumes.xml | 52 +-
docs/en-US/writing-new-documentation.xml | 4 +-
docs/en-US/zone-add.xml | 33 +-
docs/pot/configure-package-repository.pot | 4 +-
docs/publican-cloudstack/defaults.cfg | 4 +-
docs/publican-cloudstack/en-US/Feedback.xml | 56 +-
docs/publican-gsoc-2013.cfg | 27 +
docs/publican-plugin-midonet.cfg | 28 +
docs/qig/en-US/Author_Group.xml | 32 +
docs/qig/en-US/Book_Info.xml | 52 +
docs/qig/en-US/Chapter.xml | 53 +
docs/qig/en-US/Environment.xml | 258 +
docs/qig/en-US/Management.xml | 99 +
docs/qig/en-US/Overview.xml | 93 +
docs/qig/en-US/Preface.xml | 33 +
docs/qig/en-US/Revision_History.xml | 42 +
docs/qig/en-US/config.xml | 177 +
docs/qig/en-US/kvm.xml | 142 +
docs/qig/en-US/qig.ent | 22 +
docs/qig/en-US/qig.xml | 36 +
docs/qig/publican.cfg | 22 +
engine/api/pom.xml | 21 +-
.../src/com/cloud/vm/VirtualMachineGuru.java | 62 +
.../src/com/cloud/vm/VirtualMachineManager.java | 198 +
.../datacenter/entity/api/HostEntity.java | 89 +-
.../service/NetworkOrchestrationService.java | 216 +
.../service/VolumeOrchestrationService.java | 100 +
.../rest/service/api/ClusterRestService.java | 168 +-
.../rest/service/api/NetworkRestService.java | 120 +-
.../engine/rest/service/api/PodRestService.java | 154 +-
.../service/api/VirtualMachineRestService.java | 108 +-
.../rest/service/api/VolumeRestService.java | 148 +-
.../rest/service/api/ZoneRestService.java | 170 +-
.../engine/service/api/OperationsServices.java | 19 +-
.../subsystem/api/storage/AbstractScope.java | 6 +-
.../engine/subsystem/api/storage/ChapInfo.java | 26 +
.../subsystem/api/storage/ClusterScope.java | 10 +-
.../subsystem/api/storage/CommandResult.java | 52 -
.../api/storage/CopyCommandResult.java | 9 +-
.../subsystem/api/storage/CreateCmdResult.java | 24 +-
.../api/storage/DataMigrationSubSystem.java | 29 -
.../api/storage/DataMotionService.java | 34 +
.../api/storage/DataMotionStrategy.java | 38 +
.../subsystem/api/storage/DataObject.java | 37 +-
.../api/storage/DataObjectInStore.java | 12 +-
.../subsystem/api/storage/DataObjectType.java | 25 -
.../engine/subsystem/api/storage/DataStore.java | 14 +
.../subsystem/api/storage/DataStoreDriver.java | 20 +-
.../api/storage/DataStoreLifeCycle.java | 20 +-
.../subsystem/api/storage/DataStoreManager.java | 23 +-
.../api/storage/DataStoreProvider.java | 33 +-
.../api/storage/DataStoreProviderManager.java | 9 +-
.../subsystem/api/storage/DataStoreRole.java | 54 -
.../subsystem/api/storage/DataStoreStatus.java | 23 -
.../engine/subsystem/api/storage/EndPoint.java | 12 +-
.../subsystem/api/storage/EndPointSelector.java | 31 +
.../engine/subsystem/api/storage/HostScope.java | 21 +-
.../api/storage/HypervisorHostListener.java | 1 +
.../subsystem/api/storage/ImageDataFactory.java | 26 -
.../api/storage/ImageDataStoreProvider.java | 24 -
.../subsystem/api/storage/ImageService.java | 29 -
.../api/storage/ImageStoreProvider.java | 28 +
.../storage/ObjectInDataStoreStateMachine.java | 7 +-
.../api/storage/PrimaryDataStoreDriver.java | 2 +
.../api/storage/PrimaryDataStoreInfo.java | 16 +-
.../api/storage/PrimaryDataStoreLifeCycle.java | 1 -
.../api/storage/PrimaryDataStoreParameters.java | 90 +-
.../engine/subsystem/api/storage/Scope.java | 10 +-
.../engine/subsystem/api/storage/ScopeType.java | 27 -
.../api/storage/SnapshotDataFactory.java | 9 +-
.../subsystem/api/storage/SnapshotInfo.java | 17 +-
.../subsystem/api/storage/SnapshotProfile.java | 9 +-
.../subsystem/api/storage/SnapshotResult.java | 48 +
.../subsystem/api/storage/SnapshotService.java | 28 +
.../subsystem/api/storage/SnapshotStrategy.java | 16 +-
.../api/storage/StorageCacheManager.java | 40 +
.../subsystem/api/storage/StorageEvent.java | 4 +-
.../api/storage/StorageOrchestrator.java | 68 -
.../api/storage/StoragePoolAllocator.java | 33 +-
.../subsystem/api/storage/StorageSubSystem.java | 29 -
.../api/storage/TemplateDataFactory.java | 31 +
.../subsystem/api/storage/TemplateEvent.java | 5 +-
.../subsystem/api/storage/TemplateInfo.java | 7 +-
.../subsystem/api/storage/TemplateProfile.java | 287 -
.../subsystem/api/storage/TemplateService.java | 66 +
.../subsystem/api/storage/TemplateState.java | 6 +-
.../api/storage/VolumeDataFactory.java | 5 +
.../subsystem/api/storage/VolumeInfo.java | 28 +-
.../subsystem/api/storage/VolumeProfile.java | 34 -
.../subsystem/api/storage/VolumeService.java | 37 +-
.../engine/subsystem/api/storage/ZoneScope.java | 6 +-
.../api/storage/disktype/DiskFormat.java | 7 +-
.../subsystem/api/storage/disktype/VHDX.java | 16 +
.../subsystem/api/storage/type/BaseImage.java | 6 +-
.../subsystem/api/storage/type/DataDisk.java | 8 +-
.../engine/subsystem/api/storage/type/Iso.java | 8 +-
.../subsystem/api/storage/type/RootDisk.java | 8 +-
.../subsystem/api/storage/type/Unknown.java | 6 +-
.../api/storage/type/VolumeTypeBase.java | 54 +-
.../api/storage/type/VolumeTypeHelper.java | 37 +-
.../storage/command/CommandResult.java | 52 +
.../datastore/db/DataStoreProviderDao.java | 25 -
.../datastore/db/DataStoreProviderDaoImpl.java | 38 -
.../datastore/db/DataStoreProviderVO.java | 60 -
.../datastore/db/PrimaryDataStoreDao.java | 112 -
.../datastore/db/PrimaryDataStoreDaoImpl.java | 430 -
.../datastore/db/PrimaryDataStoreDetailVO.java | 79 -
.../db/PrimaryDataStoreDetailsDao.java | 27 -
.../db/PrimaryDataStoreDetailsDaoImpl.java | 71 -
.../datastore/db/StoragePoolDetailVO.java | 81 -
.../datastore/db/StoragePoolDetailsDao.java | 28 -
.../storage/datastore/db/StoragePoolVO.java | 311 -
.../image/datastore/ImageStoreEntity.java | 46 +
.../storage/image/datastore/ImageStoreInfo.java | 27 +
.../engine/subsystem/api/storage/ScopeTest.java | 18 +-
engine/components-api/pom.xml | 27 +-
.../src/com/cloud/agent/AgentManager.java | 148 +
.../src/com/cloud/agent/Listener.java | 119 +
.../src/com/cloud/alert/AlertManager.java | 69 +
.../src/com/cloud/capacity/CapacityManager.java | 78 +
.../configuration/ConfigurationManager.java | 242 +
.../cloud/deploy/DeploymentPlanningManager.java | 50 +
.../src/com/cloud/event/UsageEventUtils.java | 168 +
.../com/cloud/ha/HighAvailabilityManager.java | 114 +
.../cloud/hypervisor/HypervisorGuruManager.java | 27 +
.../src/com/cloud/network/IpAddressManager.java | 187 +
.../com/cloud/network/NetworkStateListener.java | 107 +
.../src/com/cloud/network/addr/PublicIp.java | 235 +
.../network/lb/LoadBalancingRulesManager.java | 62 +
.../cloud/network/rules/FirewallManager.java | 89 +
.../com/cloud/network/rules/RulesManager.java | 66 +
.../cloud/network/rules/StaticNatRuleImpl.java | 147 +
.../cloud/network/vpc/NetworkACLManager.java | 155 +
.../src/com/cloud/network/vpc/VpcManager.java | 177 +
.../src/com/cloud/resource/Discoverer.java | 51 +
.../src/com/cloud/resource/ResourceManager.java | 138 +
.../cloud/resource/ResourceStateAdapter.java | 63 +
.../src/com/cloud/template/TemplateManager.java | 119 +
.../com/cloud/vm/ReservationContextImpl.java | 96 +
.../com/cloud/vm/VirtualMachineProfileImpl.java | 258 +
.../cloud/vm/snapshot/VMSnapshotManager.java | 47 +
.../apache/cloudstack/compute/ComputeGuru.java | 68 +-
.../cloudstack/context/ServerContexts.java | 67 +
engine/compute/pom.xml | 52 -
.../cloudstack/compute/ComputeOrchestrator.java | 34 -
.../compute/ComputeOrchestratorImpl.java | 42 -
engine/network/pom.xml | 2 +-
engine/orchestration/pom.xml | 27 +-
.../com/cloud/agent/manager/AgentAttache.java | 519 +
.../cloud/agent/manager/AgentManagerImpl.java | 1584 +
.../agent/manager/ClusteredAgentAttache.java | 260 +
.../manager/ClusteredAgentManagerImpl.java | 1421 +
.../manager/ClusteredDirectAgentAttache.java | 69 +
.../agent/manager/ConnectedAgentAttache.java | 95 +
.../cloud/agent/manager/DirectAgentAttache.java | 219 +
.../com/cloud/agent/manager/DummyAttache.java | 48 +
.../src/com/cloud/agent/manager/Routable.java | 29 +
.../agent/manager/SynchronousListener.java | 135 +
.../cluster/ClusteredAgentRebalanceService.java | 30 +
.../agentlb/AgentLoadBalancerPlanner.java | 29 +
.../ClusterBasedAgentLoadBalancerPlanner.java | 150 +
.../vm/ClusteredVirtualMachineManagerImpl.java | 64 +
.../com/cloud/vm/VirtualMachineManagerImpl.java | 3276 +
.../cloud/entity/api/VMEntityManager.java | 52 +-
.../cloud/entity/api/VMEntityManagerImpl.java | 179 +-
.../entity/api/VirtualMachineEntityFactory.java | 41 -
.../entity/api/VirtualMachineEntityImpl.java | 446 +-
.../cloud/entity/api/db/VMComputeTagVO.java | 67 -
.../engine/cloud/entity/api/db/VMEntityVO.java | 577 -
.../cloud/entity/api/db/VMNetworkMapVO.java | 71 -
.../cloud/entity/api/db/VMReservationVO.java | 127 -
.../cloud/entity/api/db/VMRootDiskTagVO.java | 67 -
.../entity/api/db/VolumeReservationVO.java | 100 -
.../entity/api/db/dao/VMComputeTagDao.java | 31 -
.../entity/api/db/dao/VMComputeTagDaoImpl.java | 89 -
.../cloud/entity/api/db/dao/VMEntityDao.java | 41 -
.../entity/api/db/dao/VMEntityDaoImpl.java | 169 -
.../entity/api/db/dao/VMNetworkMapDao.java | 31 -
.../entity/api/db/dao/VMNetworkMapDaoImpl.java | 85 -
.../entity/api/db/dao/VMReservationDao.java | 34 -
.../entity/api/db/dao/VMReservationDaoImpl.java | 111 -
.../entity/api/db/dao/VMRootDiskTagDao.java | 31 -
.../entity/api/db/dao/VMRootDiskTagDaoImpl.java | 88 -
.../entity/api/db/dao/VolumeReservationDao.java | 31 -
.../api/db/dao/VolumeReservationDaoImpl.java | 68 -
.../entity/api/ClusterEntityImpl.java | 386 +-
.../entity/api/DataCenterResourceManager.java | 68 +-
.../api/DataCenterResourceManagerImpl.java | 226 +-
.../datacenter/entity/api/HostEntityImpl.java | 398 +-
.../datacenter/entity/api/PodEntityImpl.java | 422 +-
.../datacenter/entity/api/ZoneEntityImpl.java | 402 +-
.../entity/api/db/ClusterDetailsVO.java | 38 +-
.../datacenter/entity/api/db/DcDetailVO.java | 38 +-
.../datacenter/entity/api/db/EngineCluster.java | 46 +-
.../entity/api/db/EngineClusterVO.java | 38 +-
.../entity/api/db/EngineDataCenter.java | 46 +-
.../entity/api/db/EngineDataCenterVO.java | 254 +-
.../datacenter/entity/api/db/EngineHost.java | 48 +-
.../entity/api/db/EngineHostPodVO.java | 202 +-
.../datacenter/entity/api/db/EngineHostVO.java | 12 +-
.../datacenter/entity/api/db/EnginePod.java | 46 +-
.../entity/api/db/dao/DcDetailsDao.java | 34 +-
.../entity/api/db/dao/DcDetailsDaoImpl.java | 42 +-
.../entity/api/db/dao/EngineClusterDao.java | 28 +-
.../entity/api/db/dao/EngineClusterDaoImpl.java | 36 +-
.../entity/api/db/dao/EngineDataCenterDao.java | 36 +-
.../api/db/dao/EngineDataCenterDaoImpl.java | 40 +-
.../entity/api/db/dao/EngineHostDao.java | 2 +-
.../entity/api/db/dao/EngineHostDaoImpl.java | 9 +-
.../entity/api/db/dao/EngineHostPodDao.java | 46 +-
.../entity/api/db/dao/EngineHostPodDaoImpl.java | 182 +-
.../entity/api/db/dao/HostDetailsDaoImpl.java | 43 +-
.../engine/orchestration/CloudOrchestrator.java | 293 +
.../orchestration/NetworkOrchestrator.java | 3087 +
.../orchestration/VolumeOrchestrator.java | 1183 +
.../service/api/ProvisioningServiceImpl.java | 340 +-
.../orchestration/CloudOrchestrator.java | 284 -
.../cloud/vm/VirtualMachineManagerImplTest.java | 465 +
.../provisioning/test/ProvisioningTest.java | 242 +-
.../cloudstack/platform/planning/Concierge.java | 36 -
engine/pom.xml | 18 +-
engine/schema/pom.xml | 14 +-
engine/schema/src/com/cloud/alert/AlertVO.java | 183 +
.../src/com/cloud/alert/dao/AlertDao.java | 33 +
.../src/com/cloud/alert/dao/AlertDaoImpl.java | 171 +
.../src/com/cloud/capacity/CapacityVO.java | 204 +
.../src/com/cloud/capacity/dao/CapacityDao.java | 45 +
.../com/cloud/capacity/dao/CapacityDaoImpl.java | 871 +
.../com/cloud/certificate/CertificateVO.java | 63 +
.../cloud/certificate/dao/CertificateDao.java | 24 +
.../certificate/dao/CertificateDaoImpl.java | 63 +
.../cluster/agentlb/HostTransferMapVO.java | 98 +
.../cluster/agentlb/dao/HostTransferMapDao.java | 45 +
.../agentlb/dao/HostTransferMapDaoImpl.java | 146 +
.../cloud/configuration/ResourceCountVO.java | 131 +
.../cloud/configuration/ResourceLimitVO.java | 128 +
.../configuration/dao/ResourceCountDao.java | 60 +
.../configuration/dao/ResourceCountDaoImpl.java | 238 +
.../configuration/dao/ResourceLimitDao.java | 37 +
.../configuration/dao/ResourceLimitDaoImpl.java | 114 +
.../src/com/cloud/dc/AccountVlanMapVO.java | 65 +
.../src/com/cloud/dc/ClusterDetailsDao.java | 32 +
.../src/com/cloud/dc/ClusterDetailsDaoImpl.java | 144 +
.../src/com/cloud/dc/ClusterDetailsVO.java | 74 +
engine/schema/src/com/cloud/dc/ClusterVO.java | 189 +
.../src/com/cloud/dc/ClusterVSMMapVO.java | 62 +
.../src/com/cloud/dc/DataCenterIpAddressVO.java | 115 +
.../dc/DataCenterLinkLocalIpAddressVO.java | 108 +
.../schema/src/com/cloud/dc/DataCenterVO.java | 460 +
.../src/com/cloud/dc/DataCenterVnetVO.java | 120 +
engine/schema/src/com/cloud/dc/DcDetailVO.java | 73 +
engine/schema/src/com/cloud/dc/HostPodVO.java | 197 +
engine/schema/src/com/cloud/dc/PodCluster.java | 67 +
.../schema/src/com/cloud/dc/PodVlanMapVO.java | 62 +
engine/schema/src/com/cloud/dc/PodVlanVO.java | 98 +
.../com/cloud/dc/StorageNetworkIpAddressVO.java | 120 +
.../com/cloud/dc/StorageNetworkIpRangeVO.java | 184 +
engine/schema/src/com/cloud/dc/VlanVO.java | 204 +
.../src/com/cloud/dc/dao/AccountVlanMapDao.java | 30 +
.../com/cloud/dc/dao/AccountVlanMapDaoImpl.java | 75 +
.../schema/src/com/cloud/dc/dao/ClusterDao.java | 39 +
.../src/com/cloud/dc/dao/ClusterDaoImpl.java | 265 +
.../src/com/cloud/dc/dao/ClusterVSMMapDao.java | 29 +
.../com/cloud/dc/dao/ClusterVSMMapDaoImpl.java | 95 +
.../src/com/cloud/dc/dao/DataCenterDao.java | 82 +
.../src/com/cloud/dc/dao/DataCenterDaoImpl.java | 430 +
.../cloud/dc/dao/DataCenterIpAddressDao.java | 38 +
.../dc/dao/DataCenterIpAddressDaoImpl.java | 225 +
.../dc/dao/DataCenterLinkLocalIpAddressDao.java | 32 +
.../DataCenterLinkLocalIpAddressDaoImpl.java | 188 +
.../src/com/cloud/dc/dao/DataCenterVnetDao.java | 53 +
.../com/cloud/dc/dao/DataCenterVnetDaoImpl.java | 340 +
.../src/com/cloud/dc/dao/DcDetailsDao.java | 32 +
.../src/com/cloud/dc/dao/DcDetailsDaoImpl.java | 110 +
.../schema/src/com/cloud/dc/dao/HostPodDao.java | 36 +
.../src/com/cloud/dc/dao/HostPodDaoImpl.java | 140 +
.../schema/src/com/cloud/dc/dao/PodVlanDao.java | 30 +
.../src/com/cloud/dc/dao/PodVlanDaoImpl.java | 139 +
.../src/com/cloud/dc/dao/PodVlanMapDao.java | 30 +
.../src/com/cloud/dc/dao/PodVlanMapDaoImpl.java | 75 +
.../dc/dao/StorageNetworkIpAddressDao.java | 32 +
.../dc/dao/StorageNetworkIpAddressDaoImpl.java | 114 +
.../cloud/dc/dao/StorageNetworkIpRangeDao.java | 32 +
.../dc/dao/StorageNetworkIpRangeDaoImpl.java | 78 +
engine/schema/src/com/cloud/dc/dao/VlanDao.java | 59 +
.../src/com/cloud/dc/dao/VlanDaoImpl.java | 361 +
.../schema/src/com/cloud/domain/DomainVO.java | 215 +
.../src/com/cloud/domain/dao/DomainDao.java | 35 +
.../src/com/cloud/domain/dao/DomainDaoImpl.java | 292 +
engine/schema/src/com/cloud/event/EventVO.java | 194 +
.../src/com/cloud/event/UsageEventVO.java | 240 +
.../src/com/cloud/event/dao/EventDao.java | 38 +
.../src/com/cloud/event/dao/EventDaoImpl.java | 118 +
.../src/com/cloud/event/dao/UsageEventDao.java | 35 +
.../com/cloud/event/dao/UsageEventDaoImpl.java | 187 +
engine/schema/src/com/cloud/host/DetailVO.java | 73 +
engine/schema/src/com/cloud/host/HostTagVO.java | 65 +
engine/schema/src/com/cloud/host/HostVO.java | 732 +
.../schema/src/com/cloud/host/dao/HostDao.java | 90 +
.../src/com/cloud/host/dao/HostDaoImpl.java | 1040 +
.../src/com/cloud/host/dao/HostDetailsDao.java | 32 +
.../com/cloud/host/dao/HostDetailsDaoImpl.java | 121 +
.../src/com/cloud/host/dao/HostTagsDao.java | 30 +
.../src/com/cloud/host/dao/HostTagsDaoImpl.java | 75 +
.../hypervisor/HypervisorCapabilitiesVO.java | 212 +
.../dao/HypervisorCapabilitiesDao.java | 38 +
.../dao/HypervisorCapabilitiesDaoImpl.java | 105 +
.../src/com/cloud/keystore/KeystoreDao.java | 29 +
.../src/com/cloud/keystore/KeystoreDaoImpl.java | 118 +
.../src/com/cloud/keystore/KeystoreVO.java | 101 +
.../cloud/network/LBHealthCheckPolicyVO.java | 157 +
.../com/cloud/network/UserIpv6AddressVO.java | 188 +
.../schema/src/com/cloud/network/VpnUserVO.java | 131 +
.../as/AutoScalePolicyConditionMapVO.java | 61 +
.../com/cloud/network/as/AutoScalePolicyVO.java | 134 +
.../network/as/AutoScaleVmGroupPolicyMapVO.java | 64 +
.../cloud/network/as/AutoScaleVmGroupVO.java | 191 +
.../cloud/network/as/AutoScaleVmProfileVO.java | 218 +
.../src/com/cloud/network/as/ConditionVO.java | 129 +
.../src/com/cloud/network/as/CounterVO.java | 111 +
.../as/dao/AutoScalePolicyConditionMapDao.java | 28 +
.../dao/AutoScalePolicyConditionMapDaoImpl.java | 61 +
.../network/as/dao/AutoScalePolicyDao.java | 24 +
.../network/as/dao/AutoScalePolicyDaoImpl.java | 38 +
.../network/as/dao/AutoScaleVmGroupDao.java | 28 +
.../network/as/dao/AutoScaleVmGroupDaoImpl.java | 65 +
.../as/dao/AutoScaleVmGroupPolicyMapDao.java | 30 +
.../dao/AutoScaleVmGroupPolicyMapDaoImpl.java | 77 +
.../network/as/dao/AutoScaleVmProfileDao.java | 25 +
.../as/dao/AutoScaleVmProfileDaoImpl.java | 38 +
.../com/cloud/network/as/dao/ConditionDao.java | 28 +
.../cloud/network/as/dao/ConditionDaoImpl.java | 56 +
.../com/cloud/network/as/dao/CounterDao.java | 29 +
.../cloud/network/as/dao/CounterDaoImpl.java | 70 +
.../network/dao/AccountGuestVlanMapDao.java | 34 +
.../network/dao/AccountGuestVlanMapDaoImpl.java | 83 +
.../network/dao/AccountGuestVlanMapVO.java | 94 +
.../network/dao/ExternalFirewallDeviceDao.java | 58 +
.../dao/ExternalFirewallDeviceDaoImpl.java | 96 +
.../network/dao/ExternalFirewallDeviceVO.java | 161 +
.../dao/ExternalLoadBalancerDeviceDao.java | 74 +
.../dao/ExternalLoadBalancerDeviceDaoImpl.java | 127 +
.../dao/ExternalLoadBalancerDeviceVO.java | 227 +
.../network/dao/FirewallRulesCidrsDao.java | 29 +
.../network/dao/FirewallRulesCidrsDaoImpl.java | 70 +
.../cloud/network/dao/FirewallRulesCidrsVO.java | 65 +
.../com/cloud/network/dao/FirewallRulesDao.java | 66 +
.../cloud/network/dao/FirewallRulesDaoImpl.java | 363 +
.../src/com/cloud/network/dao/IPAddressDao.java | 83 +
.../com/cloud/network/dao/IPAddressDaoImpl.java | 418 +
.../src/com/cloud/network/dao/IPAddressVO.java | 336 +
.../dao/InlineLoadBalancerNicMapDao.java | 24 +
.../dao/InlineLoadBalancerNicMapDaoImpl.java | 46 +
.../network/dao/InlineLoadBalancerNicMapVO.java | 60 +
.../network/dao/LBHealthCheckPolicyDao.java | 35 +
.../network/dao/LBHealthCheckPolicyDaoImpl.java | 71 +
.../network/dao/LBStickinessPolicyDao.java | 34 +
.../network/dao/LBStickinessPolicyDaoImpl.java | 69 +
.../cloud/network/dao/LBStickinessPolicyVO.java | 145 +
.../com/cloud/network/dao/LoadBalancerDao.java | 32 +
.../cloud/network/dao/LoadBalancerDaoImpl.java | 79 +
.../cloud/network/dao/LoadBalancerVMMapDao.java | 31 +
.../network/dao/LoadBalancerVMMapDaoImpl.java | 97 +
.../cloud/network/dao/LoadBalancerVMMapVO.java | 89 +
.../com/cloud/network/dao/LoadBalancerVO.java | 116 +
.../cloud/network/dao/NetworkAccountDao.java | 23 +
.../network/dao/NetworkAccountDaoImpl.java | 44 +
.../com/cloud/network/dao/NetworkAccountVO.java | 72 +
.../src/com/cloud/network/dao/NetworkDao.java | 118 +
.../com/cloud/network/dao/NetworkDaoImpl.java | 648 +
.../com/cloud/network/dao/NetworkDomainDao.java | 27 +
.../cloud/network/dao/NetworkDomainDaoImpl.java | 75 +
.../com/cloud/network/dao/NetworkDomainVO.java | 72 +
.../network/dao/NetworkExternalFirewallDao.java | 38 +
.../dao/NetworkExternalFirewallDaoImpl.java | 61 +
.../network/dao/NetworkExternalFirewallVO.java | 88 +
.../dao/NetworkExternalLoadBalancerDao.java | 38 +
.../dao/NetworkExternalLoadBalancerDaoImpl.java | 62 +
.../dao/NetworkExternalLoadBalancerVO.java | 89 +
.../src/com/cloud/network/dao/NetworkOpDao.java | 26 +
.../com/cloud/network/dao/NetworkOpDaoImpl.java | 84 +
.../src/com/cloud/network/dao/NetworkOpVO.java | 76 +
.../cloud/network/dao/NetworkRuleConfigDao.java | 26 +
.../network/dao/NetworkRuleConfigDaoImpl.java | 51 +
.../cloud/network/dao/NetworkRuleConfigVO.java | 77 +
.../cloud/network/dao/NetworkServiceMapDao.java | 39 +
.../network/dao/NetworkServiceMapDaoImpl.java | 176 +
.../cloud/network/dao/NetworkServiceMapVO.java | 92 +
.../src/com/cloud/network/dao/NetworkVO.java | 565 +
.../cloud/network/dao/PhysicalNetworkDao.java | 28 +
.../network/dao/PhysicalNetworkDaoImpl.java | 79 +
.../PhysicalNetworkIsolationMethodDaoImpl.java | 70 +
.../dao/PhysicalNetworkIsolationMethodVO.java | 68 +
.../dao/PhysicalNetworkServiceProviderDao.java | 28 +
.../PhysicalNetworkServiceProviderDaoImpl.java | 131 +
.../dao/PhysicalNetworkServiceProviderVO.java | 322 +
.../network/dao/PhysicalNetworkTagDaoImpl.java | 63 +
.../cloud/network/dao/PhysicalNetworkTagVO.java | 68 +
.../dao/PhysicalNetworkTrafficTypeDao.java | 33 +
.../dao/PhysicalNetworkTrafficTypeDaoImpl.java | 143 +
.../dao/PhysicalNetworkTrafficTypeVO.java | 149 +
.../cloud/network/dao/PhysicalNetworkVO.java | 246 +
.../com/cloud/network/dao/PortProfileDao.java | 50 +
.../cloud/network/dao/PortProfileDaoImpl.java | 89 +
.../com/cloud/network/dao/PortProfileVO.java | 204 +
.../cloud/network/dao/RemoteAccessVpnDao.java | 30 +
.../network/dao/RemoteAccessVpnDaoImpl.java | 84 +
.../cloud/network/dao/RemoteAccessVpnVO.java | 142 +
.../com/cloud/network/dao/RouterNetworkDao.java | 26 +
.../cloud/network/dao/RouterNetworkDaoImpl.java | 62 +
.../com/cloud/network/dao/RouterNetworkVO.java | 75 +
.../dao/Site2SiteCustomerGatewayDao.java | 27 +
.../dao/Site2SiteCustomerGatewayDaoImpl.java | 67 +
.../network/dao/Site2SiteCustomerGatewayVO.java | 208 +
.../network/dao/Site2SiteVpnConnectionDao.java | 29 +
.../dao/Site2SiteVpnConnectionDaoImpl.java | 97 +
.../network/dao/Site2SiteVpnConnectionVO.java | 143 +
.../network/dao/Site2SiteVpnGatewayDao.java | 23 +
.../network/dao/Site2SiteVpnGatewayDaoImpl.java | 50 +
.../network/dao/Site2SiteVpnGatewayVO.java | 114 +
.../cloud/network/dao/UserIpv6AddressDao.java | 41 +
.../network/dao/UserIpv6AddressDaoImpl.java | 122 +
.../network/dao/VirtualRouterProviderDao.java | 31 +
.../dao/VirtualRouterProviderDaoImpl.java | 79 +
.../src/com/cloud/network/dao/VpnUserDao.java | 28 +
.../com/cloud/network/dao/VpnUserDaoImpl.java | 87 +
.../element/VirtualRouterProviderVO.java | 120 +
.../com/cloud/network/rules/FirewallRuleVO.java | 275 +
.../network/rules/PortForwardingRuleVO.java | 96 +
.../rules/dao/PortForwardingRulesDao.java | 47 +
.../rules/dao/PortForwardingRulesDaoImpl.java | 169 +
.../network/security/SecurityGroupRuleVO.java | 148 +
.../network/security/SecurityGroupRulesVO.java | 169 +
.../network/security/SecurityGroupVMMapVO.java | 89 +
.../cloud/network/security/SecurityGroupVO.java | 99 +
.../network/security/SecurityGroupWork.java | 40 +
.../network/security/SecurityGroupWorkVO.java | 135 +
.../cloud/network/security/VmRulesetLogVO.java | 81 +
.../network/security/dao/SecurityGroupDao.java | 30 +
.../security/dao/SecurityGroupDaoImpl.java | 136 +
.../security/dao/SecurityGroupRuleDao.java | 35 +
.../security/dao/SecurityGroupRuleDaoImpl.java | 176 +
.../security/dao/SecurityGroupRulesDao.java | 48 +
.../security/dao/SecurityGroupRulesDaoImpl.java | 88 +
.../security/dao/SecurityGroupVMMapDao.java | 38 +
.../security/dao/SecurityGroupVMMapDaoImpl.java | 166 +
.../security/dao/SecurityGroupWorkDao.java | 49 +
.../security/dao/SecurityGroupWorkDaoImpl.java | 241 +
.../network/security/dao/VmRulesetLogDao.java | 29 +
.../security/dao/VmRulesetLogDaoImpl.java | 200 +
.../cloud/network/vpc/NetworkACLItemDao.java | 37 +
.../com/cloud/network/vpc/NetworkACLItemVO.java | 237 +
.../src/com/cloud/network/vpc/NetworkACLVO.java | 79 +
.../src/com/cloud/network/vpc/PrivateIpVO.java | 103 +
.../com/cloud/network/vpc/StaticRouteVO.java | 141 +
.../src/com/cloud/network/vpc/VpcGatewayVO.java | 221 +
.../network/vpc/VpcOfferingServiceMapVO.java | 89 +
.../com/cloud/network/vpc/VpcOfferingVO.java | 151 +
.../com/cloud/network/vpc/VpcServiceMapVO.java | 90 +
.../schema/src/com/cloud/network/vpc/VpcVO.java | 181 +
.../cloud/network/vpc/dao/NetworkACLDao.java | 23 +
.../network/vpc/dao/NetworkACLDaoImpl.java | 35 +
.../network/vpc/dao/NetworkACLItemDaoImpl.java | 113 +
.../com/cloud/network/vpc/dao/PrivateIpDao.java | 76 +
.../cloud/network/vpc/dao/PrivateIpDaoImpl.java | 165 +
.../cloud/network/vpc/dao/StaticRouteDao.java | 35 +
.../network/vpc/dao/StaticRouteDaoImpl.java | 119 +
.../src/com/cloud/network/vpc/dao/VpcDao.java | 47 +
.../com/cloud/network/vpc/dao/VpcDaoImpl.java | 152 +
.../cloud/network/vpc/dao/VpcGatewayDao.java | 34 +
.../network/vpc/dao/VpcGatewayDaoImpl.java | 89 +
.../cloud/network/vpc/dao/VpcOfferingDao.java | 32 +
.../network/vpc/dao/VpcOfferingDaoImpl.java | 71 +
.../vpc/dao/VpcOfferingServiceMapDao.java | 41 +
.../vpc/dao/VpcOfferingServiceMapDaoImpl.java | 119 +
.../cloud/network/vpc/dao/VpcServiceMapDao.java | 40 +
.../network/vpc/dao/VpcServiceMapDaoImpl.java | 115 +
.../offerings/NetworkOfferingDetailsVO.java | 90 +
.../offerings/NetworkOfferingServiceMapVO.java | 94 +
.../com/cloud/offerings/NetworkOfferingVO.java | 444 +
.../cloud/offerings/dao/NetworkOfferingDao.java | 64 +
.../offerings/dao/NetworkOfferingDaoImpl.java | 193 +
.../dao/NetworkOfferingDetailsDao.java | 31 +
.../dao/NetworkOfferingDetailsDaoImpl.java | 79 +
.../dao/NetworkOfferingServiceMapDao.java | 50 +
.../dao/NetworkOfferingServiceMapDaoImpl.java | 171 +
.../com/cloud/projects/ProjectAccountVO.java | 96 +
.../com/cloud/projects/ProjectInvitationVO.java | 150 +
.../src/com/cloud/projects/ProjectVO.java | 163 +
.../cloud/projects/dao/ProjectAccountDao.java | 43 +
.../projects/dao/ProjectAccountDaoImpl.java | 157 +
.../src/com/cloud/projects/dao/ProjectDao.java | 37 +
.../com/cloud/projects/dao/ProjectDaoImpl.java | 124 +
.../projects/dao/ProjectInvitationDao.java | 44 +
.../projects/dao/ProjectInvitationDaoImpl.java | 171 +
.../com/cloud/secstorage/CommandExecLogDao.java | 25 +
.../cloud/secstorage/CommandExecLogDaoImpl.java | 49 +
.../com/cloud/secstorage/CommandExecLogVO.java | 112 +
.../cloud/service/ServiceOfferingDetailsVO.java | 73 +
.../com/cloud/service/ServiceOfferingVO.java | 255 +
.../cloud/service/dao/ServiceOfferingDao.java | 36 +
.../service/dao/ServiceOfferingDaoImpl.java | 174 +
.../service/dao/ServiceOfferingDetailsDao.java | 29 +
.../dao/ServiceOfferingDetailsDaoImpl.java | 98 +
.../src/com/cloud/storage/DiskOfferingVO.java | 443 +
.../com/cloud/storage/GuestOSCategoryVO.java | 65 +
.../com/cloud/storage/GuestOSHypervisorVO.java | 73 +
.../schema/src/com/cloud/storage/GuestOSVO.java | 87 +
.../com/cloud/storage/LaunchPermissionVO.java | 58 +
.../src/com/cloud/storage/SnapshotPolicyVO.java | 131 +
.../com/cloud/storage/SnapshotScheduleVO.java | 125 +
.../src/com/cloud/storage/SnapshotVO.java | 229 +
.../com/cloud/storage/StoragePoolHostAssoc.java | 35 +
.../com/cloud/storage/StoragePoolHostVO.java | 103 +
.../com/cloud/storage/StoragePoolWorkVO.java | 114 +
.../schema/src/com/cloud/storage/UploadVO.java | 266 +
.../com/cloud/storage/VMTemplateDetailVO.java | 85 +
.../src/com/cloud/storage/VMTemplateHostVO.java | 335 +
.../cloud/storage/VMTemplateStoragePoolVO.java | 305 +
.../src/com/cloud/storage/VMTemplateVO.java | 576 +
.../src/com/cloud/storage/VMTemplateZoneVO.java | 116 +
.../src/com/cloud/storage/VolumeDetailVO.java | 85 +
.../src/com/cloud/storage/VolumeHostVO.java | 342 +
.../schema/src/com/cloud/storage/VolumeVO.java | 576 +
.../com/cloud/storage/dao/DiskOfferingDao.java | 35 +
.../cloud/storage/dao/DiskOfferingDaoImpl.java | 153 +
.../cloud/storage/dao/GuestOSCategoryDao.java | 24 +
.../storage/dao/GuestOSCategoryDaoImpl.java | 34 +
.../src/com/cloud/storage/dao/GuestOSDao.java | 26 +
.../com/cloud/storage/dao/GuestOSDaoImpl.java | 47 +
.../cloud/storage/dao/GuestOSHypervisorDao.java | 27 +
.../storage/dao/GuestOSHypervisorDaoImpl.java | 49 +
.../cloud/storage/dao/LaunchPermissionDao.java | 73 +
.../storage/dao/LaunchPermissionDaoImpl.java | 163 +
.../src/com/cloud/storage/dao/SnapshotDao.java | 69 +
.../com/cloud/storage/dao/SnapshotDaoImpl.java | 347 +
.../cloud/storage/dao/SnapshotPolicyDao.java | 44 +
.../storage/dao/SnapshotPolicyDaoImpl.java | 103 +
.../cloud/storage/dao/SnapshotScheduleDao.java | 40 +
.../storage/dao/SnapshotScheduleDaoImpl.java | 139 +
.../storage/dao/StoragePoolDetailsDaoImpl.java | 97 +
.../cloud/storage/dao/StoragePoolHostDao.java | 42 +
.../storage/dao/StoragePoolHostDaoImpl.java | 188 +
.../cloud/storage/dao/StoragePoolWorkDao.java | 39 +
.../storage/dao/StoragePoolWorkDaoImpl.java | 146 +
.../src/com/cloud/storage/dao/UploadDao.java | 35 +
.../com/cloud/storage/dao/UploadDaoImpl.java | 93 +
.../com/cloud/storage/dao/VMTemplateDao.java | 79 +
.../cloud/storage/dao/VMTemplateDaoImpl.java | 974 +
.../cloud/storage/dao/VMTemplateDetailsDao.java | 32 +
.../storage/dao/VMTemplateDetailsDaoImpl.java | 99 +
.../cloud/storage/dao/VMTemplateHostDao.java | 70 +
.../storage/dao/VMTemplateHostDaoImpl.java | 437 +
.../cloud/storage/dao/VMTemplatePoolDao.java | 53 +
.../storage/dao/VMTemplatePoolDaoImpl.java | 311 +
.../cloud/storage/dao/VMTemplateZoneDao.java | 35 +
.../storage/dao/VMTemplateZoneDaoImpl.java | 99 +
.../src/com/cloud/storage/dao/VolumeDao.java | 104 +
.../com/cloud/storage/dao/VolumeDaoImpl.java | 561 +
.../com/cloud/storage/dao/VolumeDetailsDao.java | 36 +
.../cloud/storage/dao/VolumeDetailsDaoImpl.java | 114 +
.../com/cloud/storage/dao/VolumeHostDao.java | 41 +
.../cloud/storage/dao/VolumeHostDaoImpl.java | 164 +
.../src/com/cloud/tags/ResourceTagVO.java | 160 +
.../src/com/cloud/tags/dao/ResourceTagDao.java | 37 +
.../com/cloud/tags/dao/ResourceTagsDaoImpl.java | 62 +
.../src/com/cloud/upgrade/DatabaseCreator.java | 240 +
.../cloud/upgrade/DatabaseIntegrityChecker.java | 264 +
.../cloud/upgrade/DatabaseUpgradeChecker.java | 400 +
.../upgrade/PremiumDatabaseUpgradeChecker.java | 144 +
.../src/com/cloud/upgrade/dao/DbUpgrade.java | 45 +
.../com/cloud/upgrade/dao/DbUpgradeUtils.java | 106 +
.../com/cloud/upgrade/dao/Upgrade217to218.java | 66 +
.../com/cloud/upgrade/dao/Upgrade218to22.java | 2382 +
.../upgrade/dao/Upgrade218to224DomainVlans.java | 140 +
.../upgrade/dao/Upgrade218to22Premium.java | 100 +
.../cloud/upgrade/dao/Upgrade2210to2211.java | 64 +
.../cloud/upgrade/dao/Upgrade2211to2212.java | 139 +
.../upgrade/dao/Upgrade2211to2212Premium.java | 55 +
.../cloud/upgrade/dao/Upgrade2212to2213.java | 104 +
.../cloud/upgrade/dao/Upgrade2213to2214.java | 308 +
.../com/cloud/upgrade/dao/Upgrade2214to30.java | 1193 +
.../com/cloud/upgrade/dao/Upgrade221to222.java | 66 +
.../upgrade/dao/Upgrade221to222Premium.java | 61 +
.../com/cloud/upgrade/dao/Upgrade222to224.java | 610 +
.../upgrade/dao/Upgrade222to224Premium.java | 87 +
.../com/cloud/upgrade/dao/Upgrade224to225.java | 351 +
.../com/cloud/upgrade/dao/Upgrade225to226.java | 108 +
.../com/cloud/upgrade/dao/Upgrade227to228.java | 157 +
.../upgrade/dao/Upgrade227to228Premium.java | 132 +
.../com/cloud/upgrade/dao/Upgrade228to229.java | 138 +
.../com/cloud/upgrade/dao/Upgrade229to2210.java | 194 +
.../com/cloud/upgrade/dao/Upgrade301to302.java | 229 +
.../com/cloud/upgrade/dao/Upgrade302to303.java | 312 +
.../com/cloud/upgrade/dao/Upgrade302to40.java | 1114 +
.../com/cloud/upgrade/dao/Upgrade303to304.java | 492 +
.../com/cloud/upgrade/dao/Upgrade304to305.java | 499 +
.../com/cloud/upgrade/dao/Upgrade305to306.java | 312 +
.../com/cloud/upgrade/dao/Upgrade306to307.java | 119 +
.../com/cloud/upgrade/dao/Upgrade307to410.java | 96 +
.../com/cloud/upgrade/dao/Upgrade30to301.java | 124 +
.../com/cloud/upgrade/dao/Upgrade30xBase.java | 311 +
.../com/cloud/upgrade/dao/Upgrade40to41.java | 164 +
.../com/cloud/upgrade/dao/Upgrade410to420.java | 2956 +
.../com/cloud/upgrade/dao/Upgrade420to430.java | 70 +
.../upgrade/dao/UpgradeSnapshot217to224.java | 60 +
.../upgrade/dao/UpgradeSnapshot223to224.java | 60 +
.../src/com/cloud/upgrade/dao/VersionDao.java | 25 +
.../com/cloud/upgrade/dao/VersionDaoImpl.java | 173 +
.../src/com/cloud/upgrade/dao/VersionVO.java | 91 +
.../usage/ExternalPublicIpStatisticsVO.java | 98 +
.../src/com/cloud/usage/UsageIPAddressVO.java | 121 +
.../schema/src/com/cloud/usage/UsageJobVO.java | 180 +
.../cloud/usage/UsageLoadBalancerPolicyVO.java | 91 +
.../com/cloud/usage/UsageNetworkOfferingVO.java | 117 +
.../src/com/cloud/usage/UsageNetworkVO.java | 144 +
.../cloud/usage/UsagePortForwardingRuleVO.java | 91 +
.../com/cloud/usage/UsageSecurityGroupVO.java | 97 +
.../src/com/cloud/usage/UsageStorageVO.java | 135 +
.../src/com/cloud/usage/UsageVMInstanceVO.java | 129 +
.../src/com/cloud/usage/UsageVMSnapshotVO.java | 122 +
engine/schema/src/com/cloud/usage/UsageVO.java | 288 +
.../src/com/cloud/usage/UsageVPNUserVO.java | 105 +
.../src/com/cloud/usage/UsageVmDiskVO.java | 180 +
.../src/com/cloud/usage/UsageVolumeVO.java | 115 +
.../dao/ExternalPublicIpStatisticsDao.java | 33 +
.../dao/ExternalPublicIpStatisticsDaoImpl.java | 77 +
.../src/com/cloud/usage/dao/UsageDao.java | 44 +
.../src/com/cloud/usage/dao/UsageDaoImpl.java | 447 +
.../com/cloud/usage/dao/UsageIPAddressDao.java | 28 +
.../cloud/usage/dao/UsageIPAddressDaoImpl.java | 145 +
.../src/com/cloud/usage/dao/UsageJobDao.java | 34 +
.../com/cloud/usage/dao/UsageJobDaoImpl.java | 200 +
.../usage/dao/UsageLoadBalancerPolicyDao.java | 29 +
.../dao/UsageLoadBalancerPolicyDaoImpl.java | 169 +
.../com/cloud/usage/dao/UsageNetworkDao.java | 29 +
.../cloud/usage/dao/UsageNetworkDaoImpl.java | 132 +
.../usage/dao/UsageNetworkOfferingDao.java | 28 +
.../usage/dao/UsageNetworkOfferingDaoImpl.java | 153 +
.../usage/dao/UsagePortForwardingRuleDao.java | 29 +
.../dao/UsagePortForwardingRuleDaoImpl.java | 169 +
.../cloud/usage/dao/UsageSecurityGroupDao.java | 28 +
.../usage/dao/UsageSecurityGroupDaoImpl.java | 151 +
.../com/cloud/usage/dao/UsageStorageDao.java | 31 +
.../cloud/usage/dao/UsageStorageDaoImpl.java | 212 +
.../com/cloud/usage/dao/UsageVMInstanceDao.java | 29 +
.../cloud/usage/dao/UsageVMInstanceDaoImpl.java | 137 +
.../com/cloud/usage/dao/UsageVMSnapshotDao.java | 29 +
.../cloud/usage/dao/UsageVMSnapshotDaoImpl.java | 182 +
.../com/cloud/usage/dao/UsageVPNUserDao.java | 28 +
.../cloud/usage/dao/UsageVPNUserDaoImpl.java | 150 +
.../src/com/cloud/usage/dao/UsageVmDiskDao.java | 29 +
.../com/cloud/usage/dao/UsageVmDiskDaoImpl.java | 139 +
.../src/com/cloud/usage/dao/UsageVolumeDao.java | 29 +
.../com/cloud/usage/dao/UsageVolumeDaoImpl.java | 178 +
.../src/com/cloud/user/AccountDetailVO.java | 75 +
.../src/com/cloud/user/AccountDetailsDao.java | 38 +
.../com/cloud/user/AccountDetailsDaoImpl.java | 108 +
engine/schema/src/com/cloud/user/AccountVO.java | 189 +
.../schema/src/com/cloud/user/SSHKeyPairVO.java | 119 +
.../src/com/cloud/user/UserAccountVO.java | 284 +
.../src/com/cloud/user/UserStatisticsVO.java | 165 +
.../src/com/cloud/user/UserStatsLogVO.java | 132 +
engine/schema/src/com/cloud/user/UserVO.java | 274 +
.../src/com/cloud/user/VmDiskStatisticsVO.java | 216 +
.../src/com/cloud/user/dao/AccountDao.java | 53 +
.../src/com/cloud/user/dao/AccountDaoImpl.java | 282 +
.../src/com/cloud/user/dao/SSHKeyPairDao.java | 38 +
.../com/cloud/user/dao/SSHKeyPairDaoImpl.java | 85 +
.../src/com/cloud/user/dao/UserAccountDao.java | 27 +
.../com/cloud/user/dao/UserAccountDaoImpl.java | 69 +
.../schema/src/com/cloud/user/dao/UserDao.java | 52 +
.../src/com/cloud/user/dao/UserDaoImpl.java | 131 +
.../com/cloud/user/dao/UserStatisticsDao.java | 35 +
.../cloud/user/dao/UserStatisticsDaoImpl.java | 137 +
.../src/com/cloud/user/dao/UserStatsLogDao.java | 23 +
.../com/cloud/user/dao/UserStatsLogDaoImpl.java | 31 +
.../com/cloud/user/dao/VmDiskStatisticsDao.java | 35 +
.../cloud/user/dao/VmDiskStatisticsDaoImpl.java | 134 +
.../schema/src/com/cloud/vm/ConsoleProxyVO.java | 287 +
.../schema/src/com/cloud/vm/DomainRouterVO.java | 246 +
.../src/com/cloud/vm/InstanceGroupVMMapVO.java | 71 +
.../src/com/cloud/vm/InstanceGroupVO.java | 120 +
engine/schema/src/com/cloud/vm/ItWorkDao.java | 45 +
.../schema/src/com/cloud/vm/ItWorkDaoImpl.java | 108 +
engine/schema/src/com/cloud/vm/ItWorkVO.java | 179 +
engine/schema/src/com/cloud/vm/NicDetailVO.java | 85 +
engine/schema/src/com/cloud/vm/NicVO.java | 365 +
.../src/com/cloud/vm/SecondaryStorageVmVO.java | 135 +
.../src/com/cloud/vm/UserVmCloneSettingVO.java | 50 +
.../schema/src/com/cloud/vm/UserVmDetailVO.java | 85 +
engine/schema/src/com/cloud/vm/UserVmVO.java | 141 +
.../schema/src/com/cloud/vm/VMInstanceVO.java | 504 +
.../src/com/cloud/vm/dao/ConsoleProxyDao.java | 47 +
.../com/cloud/vm/dao/ConsoleProxyDaoImpl.java | 353 +
.../src/com/cloud/vm/dao/DomainRouterDao.java | 149 +
.../com/cloud/vm/dao/DomainRouterDaoImpl.java | 372 +
.../src/com/cloud/vm/dao/InstanceGroupDao.java | 36 +
.../com/cloud/vm/dao/InstanceGroupDaoImpl.java | 80 +
.../com/cloud/vm/dao/InstanceGroupVMMapDao.java | 28 +
.../cloud/vm/dao/InstanceGroupVMMapDaoImpl.java | 75 +
engine/schema/src/com/cloud/vm/dao/NicDao.java | 76 +
.../schema/src/com/cloud/vm/dao/NicDaoImpl.java | 290 +
.../src/com/cloud/vm/dao/NicDetailDao.java | 35 +
.../src/com/cloud/vm/dao/NicDetailDaoImpl.java | 110 +
.../src/com/cloud/vm/dao/NicIpAliasDao.java | 60 +
.../src/com/cloud/vm/dao/NicIpAliasDaoImpl.java | 177 +
.../src/com/cloud/vm/dao/NicIpAliasVO.java | 226 +
.../src/com/cloud/vm/dao/NicSecondaryIpDao.java | 53 +
.../com/cloud/vm/dao/NicSecondaryIpDaoImpl.java | 138 +
.../src/com/cloud/vm/dao/NicSecondaryIpVO.java | 160 +
.../com/cloud/vm/dao/SecondaryStorageVmDao.java | 42 +
.../cloud/vm/dao/SecondaryStorageVmDaoImpl.java | 269 +
.../com/cloud/vm/dao/UserVmCloneSettingDao.java | 37 +
.../cloud/vm/dao/UserVmCloneSettingDaoImpl.java | 74 +
.../schema/src/com/cloud/vm/dao/UserVmDao.java | 76 +
.../src/com/cloud/vm/dao/UserVmDaoImpl.java | 586 +
.../schema/src/com/cloud/vm/dao/UserVmData.java | 759 +
.../src/com/cloud/vm/dao/UserVmDetailsDao.java | 32 +
.../com/cloud/vm/dao/UserVmDetailsDaoImpl.java | 99 +
.../src/com/cloud/vm/dao/VMInstanceDao.java | 125 +
.../src/com/cloud/vm/dao/VMInstanceDaoImpl.java | 683 +
.../src/com/cloud/vm/snapshot/VMSnapshotVO.java | 224 +
.../cloud/vm/snapshot/dao/VMSnapshotDao.java | 39 +
.../vm/snapshot/dao/VMSnapshotDaoImpl.java | 161 +
.../affinity/AffinityGroupDomainMapVO.java | 73 +
.../affinity/AffinityGroupVMMapVO.java | 66 +
.../cloudstack/affinity/AffinityGroupVO.java | 127 +
.../affinity/dao/AffinityGroupDao.java | 38 +
.../affinity/dao/AffinityGroupDaoImpl.java | 164 +
.../affinity/dao/AffinityGroupDomainMapDao.java | 31 +
.../dao/AffinityGroupDomainMapDaoImpl.java | 67 +
.../affinity/dao/AffinityGroupVMMapDao.java | 48 +
.../affinity/dao/AffinityGroupVMMapDaoImpl.java | 178 +
.../cloud/entity/api/db/VMComputeTagVO.java | 67 +
.../engine/cloud/entity/api/db/VMEntityVO.java | 577 +
.../cloud/entity/api/db/VMNetworkMapVO.java | 71 +
.../cloud/entity/api/db/VMReservationVO.java | 127 +
.../cloud/entity/api/db/VMRootDiskTagVO.java | 67 +
.../entity/api/db/VolumeReservationVO.java | 84 +
.../entity/api/db/dao/VMComputeTagDao.java | 31 +
.../entity/api/db/dao/VMComputeTagDaoImpl.java | 89 +
.../cloud/entity/api/db/dao/VMEntityDao.java | 41 +
.../entity/api/db/dao/VMEntityDaoImpl.java | 169 +
.../entity/api/db/dao/VMNetworkMapDao.java | 31 +
.../entity/api/db/dao/VMNetworkMapDaoImpl.java | 85 +
.../entity/api/db/dao/VMReservationDao.java | 34 +
.../entity/api/db/dao/VMReservationDaoImpl.java | 111 +
.../entity/api/db/dao/VMRootDiskTagDao.java | 31 +
.../entity/api/db/dao/VMRootDiskTagDaoImpl.java | 88 +
.../entity/api/db/dao/VolumeReservationDao.java | 31 +
.../api/db/dao/VolumeReservationDaoImpl.java | 68 +
.../lb/ApplicationLoadBalancerRuleVO.java | 133 +
.../lb/dao/ApplicationLoadBalancerRuleDao.java | 37 +
.../dao/ApplicationLoadBalancerRuleDaoImpl.java | 151 +
.../apache/cloudstack/region/PortableIpDao.java | 39 +
.../cloudstack/region/PortableIpDaoImpl.java | 131 +
.../cloudstack/region/PortableIpRangeDao.java | 30 +
.../region/PortableIpRangeDaoImpl.java | 65 +
.../cloudstack/region/PortableIpRangeVO.java | 119 +
.../apache/cloudstack/region/PortableIpVO.java | 222 +
.../apache/cloudstack/region/RegionSyncVO.java | 93 +
.../org/apache/cloudstack/region/RegionVO.java | 114 +
.../apache/cloudstack/region/dao/RegionDao.java | 27 +
.../cloudstack/region/dao/RegionDaoImpl.java | 48 +
.../region/gslb/GlobalLoadBalancerDaoImpl.java | 70 +
.../gslb/GlobalLoadBalancerLbRuleMapDao.java | 30 +
.../GlobalLoadBalancerLbRuleMapDaoImpl.java | 63 +
.../gslb/GlobalLoadBalancerLbRuleMapVO.java | 95 +
.../region/gslb/GlobalLoadBalancerRuleDao.java | 31 +
.../region/gslb/GlobalLoadBalancerRuleVO.java | 183 +
.../storage/datastore/db/ImageStoreDao.java | 39 +
.../datastore/db/ImageStoreDetailVO.java | 82 +
.../datastore/db/ImageStoreDetailsDao.java | 30 +
.../storage/datastore/db/ImageStoreVO.java | 193 +
.../datastore/db/PrimaryDataStoreDao.java | 117 +
.../datastore/db/PrimaryDataStoreDaoImpl.java | 431 +
.../datastore/db/PrimaryDataStoreDetailVO.java | 79 +
.../db/PrimaryDataStoreDetailsDao.java | 28 +
.../datastore/db/SnapshotDataStoreDao.java | 43 +
.../datastore/db/SnapshotDataStoreVO.java | 271 +
.../datastore/db/StoragePoolDetailVO.java | 81 +
.../datastore/db/StoragePoolDetailsDao.java | 30 +
.../storage/datastore/db/StoragePoolVO.java | 345 +
.../datastore/db/TemplateDataStoreDao.java | 65 +
.../datastore/db/TemplateDataStoreVO.java | 372 +
.../datastore/db/VolumeDataStoreDao.java | 43 +
.../storage/datastore/db/VolumeDataStoreVO.java | 358 +
engine/service/pom.xml | 15 +-
engine/storage/backup/pom.xml | 50 -
.../storage/backup/BackupMotionService.java | 23 -
.../storage/backup/BackupService.java | 26 -
engine/storage/cache/pom.xml | 33 +
.../cache/allocator/StorageCacheAllocator.java | 26 +
.../allocator/StorageCacheRandomAllocator.java | 56 +
.../cache/manager/StorageCacheManagerImpl.java | 263 +
.../StorageCacheReplacementAlgorithm.java | 26 +
.../StorageCacheReplacementAlgorithmLRU.java | 109 +
engine/storage/datamotion/pom.xml | 41 +
.../motion/AncientDataMotionStrategy.java | 494 +
.../storage/motion/DataMotionServiceImpl.java | 77 +
engine/storage/image/pom.xml | 23 +-
.../storage/image/ImageDataFactoryImpl.java | 93 -
.../storage/image/ImageOrchestrator.java | 29 -
.../storage/image/ImageServiceImpl.java | 156 -
.../storage/image/TemplateDataFactoryImpl.java | 112 +
.../storage/image/TemplateServiceImpl.java | 753 +
.../image/downloader/ImageDownloader.java | 25 -
.../driver/AncientImageDataStoreDriverImpl.java | 250 -
.../driver/DefaultImageDataStoreDriverImpl.java | 126 -
.../storage/image/manager/ImageDataManager.java | 30 -
.../image/manager/ImageDataManagerImpl.java | 50 -
.../manager/ImageDataStoreManagerImpl.java | 94 -
.../manager/ImageStoreProviderManagerImpl.java | 130 +
.../store/AncientImageDataStoreProvider.java | 101 -
.../image/store/DefaultImageDataStoreImpl.java | 145 -
.../store/DefaultImageDataStoreProvider.java | 82 -
.../storage/image/store/ImageStoreImpl.java | 198 +
.../storage/image/store/TemplateObject.java | 404 +-
.../DefaultImageDataStoreLifeCycle.java | 107 -
.../lifecycle/ImageDataStoreLifeCycle.java | 24 -
.../store/lifecycle/ImageStoreLifeCycle.java | 24 +
engine/storage/imagemotion/pom.xml | 62 -
.../motion/DefaultImageMotionStrategy.java | 140 -
.../image/motion/ImageMotionServiceImpl.java | 70 -
.../image/motion/ImageMotionStrategy.java | 24 -
engine/storage/integration-test/pom.xml | 81 +-
.../MockLocalNfsSecondaryStorageResource.java | 82 +
.../storage/allocator/StorageAllocatorTest.java | 816 +-
.../StorageAllocatorTestConfiguration.java | 49 +-
...StorageCacheReplacementAlgorithmLRUTest.java | 226 +
.../apache/cloudstack/storage/test/AopTest.java | 2 +-
.../cloudstack/storage/test/AopTestAdvice.java | 20 +-
.../storage/test/ChildTestConfiguration.java | 173 +-
.../storage/test/CloudStackTestNGBase.java | 132 +-
.../test/DirectAgentManagerSimpleImpl.java | 162 +-
.../storage/test/DirectAgentTest.java | 66 +-
.../storage/test/EndpointSelectorTest.java | 327 +
.../test/FakeDriverTestConfiguration.java | 67 +
.../test/FakePrimaryDataStoreDriver.java | 107 +
...HostEndpointRpcServerDirectCallResource.java | 70 -
.../MockHypervsiorHostEndPointRpcServer.java | 72 -
.../storage/test/MockLocalHostEndPoint.java | 39 +
.../storage/test/MockRpcCallBack.java | 12 +-
.../storage/test/MockStorageMotionStrategy.java | 24 +-
.../cloudstack/storage/test/S3TemplateTest.java | 180 +
.../cloudstack/storage/test/SnapshotTest.java | 500 +
.../storage/test/SnapshotTestWithFakeData.java | 194 +
.../storage/test/StorageFactoryBean.java | 11 +-
.../cloudstack/storage/test/StorageTest.java | 11 +-
.../cloudstack/storage/test/TemplateTest.java | 167 +
.../cloudstack/storage/test/TestHttp.java | 17 +-
.../apache/cloudstack/storage/test/TestNG.java | 5 +-
.../cloudstack/storage/test/TestNGAop.java | 6 +-
.../cloudstack/storage/test/VolumeTest.java | 433 +
.../storage/test/VolumeTestVmware.java | 444 +
.../storage/test/volumeServiceTest.java | 618 +-
.../resource/StorageAllocatorTestContext.xml | 45 -
.../test/resource/component.xml | 201 -
.../test/resource/fakeDriverTestContext.xml | 87 +
.../test/resource/storageContext.xml | 43 -
.../integration-test/test/resource/testng.xml | 40 -
.../resources/StorageAllocatorTestContext.xml | 45 +
.../test/resources/component.xml | 192 +
.../test/resources/s3_testng.xml | 47 +
.../test/resources/storageContext.xml | 88 +
.../integration-test/test/resources/testng.xml | 53 +
engine/storage/pom.xml | 25 +-
engine/storage/snapshot/pom.xml | 28 +-
.../snapshot/SnapshotDataFactoryImpl.java | 51 +-
.../storage/snapshot/SnapshotObject.java | 376 +-
.../storage/snapshot/SnapshotServiceImpl.java | 398 +-
.../snapshot/SnapshotStateMachineManager.java | 2 +-
.../SnapshotStateMachineManagerImpl.java | 48 +-
.../storage/snapshot/SnapshotStrategyBase.java | 38 +
.../snapshot/XenserverSnapshotStrategy.java | 278 +
.../storage/snapshot/db/SnapshotDao2.java | 25 -
.../storage/snapshot/db/SnapshotDao2Impl.java | 28 -
.../storage/snapshot/db/SnapshotVO.java | 296 -
.../strategy/AncientSnapshotStrategy.java | 608 -
.../resource/SnapshotManagerTestContext.xml | 42 -
.../resources/SnapshotManagerTestContext.xml | 42 +
.../test/src/SnapshotDataFactoryTest.java | 23 +-
.../org/apache/cloudstack/storage/BaseType.java | 1 +
.../storage/HostEndpointRpcServer.java | 29 -
.../storage/HypervisorHostEndPoint.java | 75 -
.../HypervsiorHostEndPointRpcServer.java | 119 -
.../cloudstack/storage/LocalHostEndpoint.java | 129 +
.../cloudstack/storage/RemoteHostEndPoint.java | 182 +
.../allocator/AbstractStoragePoolAllocator.java | 177 +-
.../ClusterScopeStoragePoolAllocator.java | 81 +-
.../GarbageCollectingStoragePoolAllocator.java | 22 +-
.../allocator/LocalStoragePoolAllocator.java | 65 +-
.../allocator/UseLocalForRootAllocator.java | 10 +-
.../allocator/ZoneWideStoragePoolAllocator.java | 124 +-
.../backup/SnapshotOnBackupStoreInfo.java | 5 +-
.../backup/datastore/BackupStoreInfo.java | 5 +-
.../command/AttachPrimaryDataStoreAnswer.java | 55 -
.../command/AttachPrimaryDataStoreCmd.java | 38 -
.../cloudstack/storage/command/CopyCmd.java | 45 -
.../storage/command/CopyCmdAnswer.java | 33 -
.../CopyTemplateToPrimaryStorageAnswer.java | 16 -
.../storage/command/CreateObjectAnswer.java | 48 -
.../storage/command/CreateObjectCommand.java | 45 -
.../command/CreatePrimaryDataStoreCmd.java | 37 -
.../CreateVolumeFromBaseImageCommand.java | 49 -
.../storage/command/DeleteCommand.java | 44 -
.../command/StorageSubSystemCommand.java | 23 -
.../storage/datastore/DataObjectManager.java | 11 +-
.../datastore/DataObjectManagerImpl.java | 254 +-
.../storage/datastore/DataStoreManagerImpl.java | 83 +-
.../datastore/ObjectInDataStoreManager.java | 23 +-
.../datastore/ObjectInDataStoreManagerImpl.java | 405 +-
.../storage/datastore/PrimaryDataStore.java | 3 +-
.../datastore/PrimaryDataStoreEntityImpl.java | 257 -
.../PrimaryDataStoreProviderManager.java | 3 +-
.../datastore/protocol/DataStoreProtocol.java | 8 +-
.../provider/DataStoreProviderManagerImpl.java | 111 +-
.../storage/db/ObjectInDataStoreDao.java | 3 +-
.../storage/db/ObjectInDataStoreDaoImpl.java | 29 +-
.../storage/db/ObjectInDataStoreVO.java | 100 +-
.../endpoint/DefaultEndPointSelector.java | 159 +-
.../storage/endpoint/EndPointSelector.java | 40 -
.../storage/image/BaseImageStoreDriverImpl.java | 265 +
.../storage/image/ImageDataStoreDriver.java | 24 -
.../storage/image/ImageStoreDriver.java | 29 +
.../storage/image/TemplateEntityImpl.java | 23 +-
.../storage/image/datastore/ImageDataStore.java | 35 -
.../image/datastore/ImageDataStoreHelper.java | 60 -
.../image/datastore/ImageDataStoreInfo.java | 26 -
.../image/datastore/ImageDataStoreManager.java | 31 -
.../image/datastore/ImageStoreHelper.java | 118 +
.../datastore/ImageStoreProviderManager.java | 42 +
.../storage/image/db/ImageDaoStoreDaoImpl.java | 38 -
.../storage/image/db/ImageDataStoreDao.java | 25 -
.../image/db/ImageDataStoreProviderDao.java | 25 -
.../image/db/ImageDataStoreProviderDaoImpl.java | 40 -
.../image/db/ImageDataStoreProviderVO.java | 49 -
.../storage/image/db/ImageDataStoreVO.java | 110 -
.../storage/image/db/ImageStoreDaoImpl.java | 121 +
.../image/db/ImageStoreDetailsDaoImpl.java | 88 +
.../image/db/SnapshotDataStoreDaoImpl.java | 226 +
.../image/db/TemplateDataStoreDaoImpl.java | 344 +
.../image/db/VolumeDataStoreDaoImpl.java | 189 +
.../cloudstack/storage/image/format/ISO.java | 2 -
.../cloudstack/storage/image/format/RAW.java | 32 +
.../cloudstack/storage/image/format/VHDX.java | 32 +
.../image/motion/ImageMotionService.java | 8 +-
.../motion/AncientDataMotionStrategy.java | 725 -
.../storage/motion/DataMotionDriver.java | 25 -
.../storage/motion/DataMotionService.java | 28 -
.../storage/motion/DataMotionServiceImpl.java | 61 -
.../storage/motion/DataMotionStrategy.java | 30 -
.../storage/snapshot/SnapshotEntityImpl.java | 316 +-
.../storage/snapshot/SnapshotService.java | 27 -
.../cloudstack/storage/to/ImageDataStoreTO.java | 36 -
.../storage/to/ImageOnPrimayDataStoreTO.java | 44 -
.../storage/to/NfsPrimaryDataStoreTO.java | 44 -
.../storage/to/PrimaryDataStoreTO.java | 48 -
.../cloudstack/storage/to/TemplateTO.java | 51 -
.../apache/cloudstack/storage/to/VolumeTO.java | 77 -
.../datastore/PrimaryDataStoreHelper.java | 79 +-
.../db/PrimaryDataStoreDetailsDaoImpl.java | 74 +
.../volume/db/TemplatePrimaryDataStoreDao.java | 4 +-
.../db/TemplatePrimaryDataStoreDaoImpl.java | 43 +-
.../volume/db/TemplatePrimaryDataStoreVO.java | 18 +-
.../storage/volume/db/VolumeDao2.java | 82 -
.../storage/volume/db/VolumeDao2Impl.java | 440 -
.../cloudstack/storage/volume/db/VolumeVO.java | 416 -
engine/storage/volume/pom.xml | 21 +-
.../datastore/DefaultPrimaryDataStore.java | 343 -
.../storage/datastore/PrimaryDataStoreImpl.java | 384 +
.../DefaultPrimaryDataStoreDriverImpl.java | 249 -
.../driver/PrimaryDataStoreDriver.java | 16 -
.../DefaultPrimaryDataStoreLifeCycleImpl.java | 147 -
...aultPrimaryDataStoreProviderManagerImpl.java | 85 -
.../PrimaryDataStoreProviderManagerImpl.java | 88 +
.../datastore/provider/DefaultHostListener.java | 38 +-
.../DefaultPrimaryDatastoreProviderImpl.java | 83 -
.../PrimaryDataStoreProviderManager.java | 16 -
.../storage/volume/TemplateInstallStrategy.java | 28 -
.../volume/TemplateInstallStrategyImpl.java | 289 -
.../storage/volume/VolumeDataFactoryImpl.java | 48 +-
.../storage/volume/VolumeEntityImpl.java | 204 -
.../storage/volume/VolumeMotionService.java | 23 -
.../cloudstack/storage/volume/VolumeObject.java | 405 +-
.../storage/volume/VolumeServiceImpl.java | 1275 +-
.../storage/volume/test/ConfiguratorTest.java | 64 +-
.../cloudstack/storage/volume/test/Server.java | 17 +-
.../storage/volume/test/TestConfiguration.java | 2 +-
.../storage/volume/test/TestInProcessAsync.java | 7 +-
.../volume/test/resource/testContext.xml | 2 +-
framework/api/pom.xml | 42 -
.../framework/async/AsyncCallFuture.java | 84 -
.../async/AsyncCompletionCallback.java | 23 -
framework/cluster/pom.xml | 45 +
.../cloud/cluster/ActiveFencingException.java | 30 +
.../com/cloud/cluster/ClusterFenceManager.java | 23 +
.../cloud/cluster/ClusterFenceManagerImpl.java | 58 +
.../cluster/ClusterInvalidSessionException.java | 32 +
.../src/com/cloud/cluster/ClusterManager.java | 63 +
.../com/cloud/cluster/ClusterManagerImpl.java | 1193 +
.../cloud/cluster/ClusterManagerListener.java | 26 +
.../com/cloud/cluster/ClusterManagerMBean.java | 26 +
.../cloud/cluster/ClusterManagerMBeanImpl.java | 67 +
.../cloud/cluster/ClusterManagerMessage.java | 44 +
.../cloud/cluster/ClusterNodeJoinEventArgs.java | 43 +
.../cloud/cluster/ClusterNodeLeftEventArgs.java | 44 +
.../src/com/cloud/cluster/ClusterService.java | 25 +
.../cloud/cluster/ClusterServiceAdapter.java | 32 +
.../com/cloud/cluster/ClusterServicePdu.java | 112 +
.../cloud/cluster/ClusterServiceRequestPdu.java | 54 +
.../cluster/ClusterServiceServletAdapter.java | 140 +
.../cluster/ClusterServiceServletContainer.java | 179 +
.../ClusterServiceServletHttpHandler.java | 192 +
.../cluster/ClusterServiceServletImpl.java | 142 +
.../com/cloud/cluster/ManagementServerHost.java | 34 +
.../cluster/ManagementServerHostPeerVO.java | 119 +
.../cloud/cluster/ManagementServerHostVO.java | 182 +
.../cloud/cluster/RemoteMethodConstants.java | 23 +
.../cluster/dao/ManagementServerHostDao.java | 48 +
.../dao/ManagementServerHostDaoImpl.java | 274 +
.../dao/ManagementServerHostPeerDao.java | 27 +
.../dao/ManagementServerHostPeerDaoImpl.java | 106 +
framework/config/pom.xml | 33 +
.../apache/cloudstack/config/Configuration.java | 84 +
.../framework/config/ConfigDepot.java | 26 +
.../framework/config/ConfigDepotAdmin.java | 36 +
.../cloudstack/framework/config/ConfigKey.java | 187 +
.../framework/config/Configurable.java | 40 +
.../framework/config/ScopedConfigStorage.java | 30 +
.../framework/config/dao/ConfigurationDao.java | 70 +
.../config/dao/ConfigurationDaoImpl.java | 203 +
.../framework/config/impl/ConfigDepotImpl.java | 149 +
.../framework/config/impl/ConfigurationVO.java | 176 +
.../config/impl/ConfigDepotAdminTest.java | 102 +
framework/db/pom.xml | 62 +
.../db/src/com/cloud/dao/EntityManagerImpl.java | 125 +
.../utils/crypt/EncryptionSecretKeyChanger.java | 427 +
.../db/src/com/cloud/utils/db/Attribute.java | 253 +
.../com/cloud/utils/db/ConnectionConcierge.java | 223 +
.../utils/db/ConnectionConciergeMBean.java | 30 +
framework/db/src/com/cloud/utils/db/DB.java | 59 +
framework/db/src/com/cloud/utils/db/DbUtil.java | 342 +
framework/db/src/com/cloud/utils/db/EcInfo.java | 106 +
.../db/src/com/cloud/utils/db/Encrypt.java | 32 +
framework/db/src/com/cloud/utils/db/Filter.java | 115 +
.../db/src/com/cloud/utils/db/GenericDao.java | 282 +
.../src/com/cloud/utils/db/GenericDaoBase.java | 1891 +
.../cloud/utils/db/GenericSearchBuilder.java | 548 +
.../db/src/com/cloud/utils/db/GlobalLock.java | 244 +
.../db/src/com/cloud/utils/db/GroupBy.java | 108 +
.../db/src/com/cloud/utils/db/JoinBuilder.java | 79 +
.../db/src/com/cloud/utils/db/JoinType.java | 32 +
.../db/src/com/cloud/utils/db/Merovingian2.java | 461 +
.../com/cloud/utils/db/MerovingianMBean.java | 32 +
.../db/src/com/cloud/utils/db/ScriptRunner.java | 233 +
.../src/com/cloud/utils/db/SearchBuilder.java | 64 +
.../src/com/cloud/utils/db/SearchCriteria.java | 364 +
.../src/com/cloud/utils/db/SearchCriteria2.java | 213 +
.../cloud/utils/db/SearchCriteriaService.java | 29 +
.../src/com/cloud/utils/db/SequenceFetcher.java | 171 +
.../db/src/com/cloud/utils/db/SqlGenerator.java | 668 +
.../db/src/com/cloud/utils/db/StateMachine.java | 30 +
.../db/src/com/cloud/utils/db/Transaction.java | 1180 +
.../cloud/utils/db/TransactionAttachment.java | 34 +
.../utils/db/TransactionContextBuilder.java | 65 +
.../com/cloud/utils/db/TransactionMBean.java | 33 +
.../cloud/utils/db/TransactionMBeanImpl.java | 113 +
.../src/com/cloud/utils/db/UpdateBuilder.java | 147 +
.../db/src/com/cloud/utils/db/UpdateFilter.java | 29 +
.../com/cloud/utils/db/DbAnnotatedBase.java | 44 +
.../cloud/utils/db/DbAnnotatedBaseDerived.java | 27 +
.../db/test/com/cloud/utils/db/DbTestDao.java | 66 +
.../db/test/com/cloud/utils/db/DbTestUtils.java | 90 +
.../db/test/com/cloud/utils/db/DbTestVO.java | 56 +
.../test/com/cloud/utils/db/DummyComponent.java | 27 +
.../cloud/utils/db/ElementCollectionTest.java | 72 +
.../test/com/cloud/utils/db/GlobalLockTest.java | 81 +
.../com/cloud/utils/db/Merovingian2Test.java | 77 +
.../utils/db/TransactionContextBuilderTest.java | 63 +
.../com/cloud/utils/db/TransactionTest.java | 214 +
framework/events/pom.xml | 51 +-
framework/ipc/pom.xml | 33 +-
.../src/com/cloud/agent/manager/Commands.java | 153 +
.../framework/async/AsyncCallFuture.java | 84 +
.../async/AsyncCallbackDispatcher.java | 57 +-
.../async/AsyncCompletionCallback.java | 23 +
.../framework/async/AsyncRpcConext.java | 30 -
.../framework/async/AsyncRpcContext.java | 30 +
.../framework/client/ClientEventBus.java | 31 -
.../framework/client/ClientMessageBus.java | 31 +
.../client/ClientTransportProvider.java | 2 +-
.../cloudstack/framework/eventbus/EventBus.java | 32 -
.../framework/eventbus/EventBusBase.java | 308 -
.../framework/eventbus/EventBusEndpoint.java | 61 -
.../framework/eventbus/EventDispatcher.java | 104 -
.../framework/eventbus/EventHandler.java | 30 -
.../framework/eventbus/PublishScope.java | 24 -
.../framework/eventbus/Subscriber.java | 24 -
.../framework/messagebus/MessageBus.java | 34 +
.../framework/messagebus/MessageBusBase.java | 406 +
.../messagebus/MessageBusEndpoint.java | 61 +
.../framework/messagebus/MessageDetector.java | 75 +
.../framework/messagebus/MessageDispatcher.java | 104 +
.../framework/messagebus/MessageHandler.java | 30 +
.../framework/messagebus/MessageSubscriber.java | 24 +
.../framework/messagebus/PublishScope.java | 24 +
.../framework/server/ServerEventBus.java | 31 -
.../framework/server/ServerMessageBus.java | 31 +
.../AsyncSampleEventDrivenStyleCaller.java | 4 +-
.../sampleserver/SampleManagementServer.java | 3 -
.../sampleserver/SampleManagerComponent.java | 12 +-
.../sampleserver/SampleManagerComponent2.java | 12 +-
.../cloudstack/messagebus/TestMessageBus.java | 155 +
.../test/resources/MessageBusTestContext.xml | 51 +
.../SampleManagementServerAppContext.xml | 3 +-
framework/jobs/pom.xml | 46 +-
.../apache/cloudstack/framework/job/Job.java | 32 -
.../framework/job/JobInterceptor.java | 23 -
.../cloudstack/framework/jobs/AsyncJob.java | 117 +
.../framework/jobs/AsyncJobDispatcher.java | 28 +
.../jobs/AsyncJobExecutionContext.java | 167 +
.../framework/jobs/AsyncJobMBean.java | 37 +
.../framework/jobs/AsyncJobManager.java | 125 +
.../jobs/JobCancellationException.java | 49 +
.../cloudstack/framework/jobs/Outcome.java | 62 +
.../framework/jobs/dao/AsyncJobDao.java | 37 +
.../framework/jobs/dao/AsyncJobDaoImpl.java | 198 +
.../framework/jobs/dao/AsyncJobJoinMapDao.java | 46 +
.../jobs/dao/AsyncJobJoinMapDaoImpl.java | 303 +
.../framework/jobs/dao/AsyncJobJournalDao.java | 27 +
.../jobs/dao/AsyncJobJournalDaoImpl.java | 45 +
.../framework/jobs/dao/SyncQueueDao.java | 26 +
.../framework/jobs/dao/SyncQueueDaoImpl.java | 78 +
.../framework/jobs/dao/SyncQueueItemDao.java | 31 +
.../jobs/dao/SyncQueueItemDaoImpl.java | 155 +
.../framework/jobs/impl/AsyncJobJoinMapVO.java | 215 +
.../framework/jobs/impl/AsyncJobJournalVO.java | 111 +
.../framework/jobs/impl/AsyncJobMBeanImpl.java | 165 +
.../jobs/impl/AsyncJobManagerImpl.java | 992 +
.../framework/jobs/impl/AsyncJobMonitor.java | 185 +
.../framework/jobs/impl/AsyncJobVO.java | 398 +
.../jobs/impl/JobSerializerHelper.java | 203 +
.../framework/jobs/impl/OutcomeImpl.java | 124 +
.../framework/jobs/impl/SyncQueueItem.java | 41 +
.../framework/jobs/impl/SyncQueueItemVO.java | 143 +
.../framework/jobs/impl/SyncQueueManager.java | 34 +
.../jobs/impl/SyncQueueManagerImpl.java | 258 +
.../framework/jobs/impl/SyncQueueVO.java | 137 +
framework/pom.xml | 7 +-
framework/rest/pom.xml | 5 +-
.../CSJacksonAnnotationIntrospector.java | 120 +-
.../ws/jackson/CSJacksonAnnotationModule.java | 94 +-
.../framework/ws/jackson/UriSerializer.java | 116 +-
.../framework/ws/jackson/UrisSerializer.java | 142 +-
.../cloudstack/framework/ws/jackson/Url.java | 106 +-
.../ws/jackson/CSJacksonAnnotationTest.java | 166 +-
packaging/centos63/cloud-agent.rc | 3 +-
packaging/centos63/cloud-management.rc | 10 +-
packaging/centos63/cloud-usage.rc | 2 +-
packaging/centos63/cloud.spec | 193 +-
packaging/centos63/package.sh | 224 +-
packaging/centos63/replace.properties | 2 +-
packaging/debian/init/cloud-agent | 2 +-
packaging/debian/init/cloud-management | 3 +-
packaging/debian/replace.properties | 2 +-
patches/pom.xml | 9 +-
patches/systemvm/debian/README | 5 +
patches/systemvm/debian/buildsystemvm.sh | 45 +-
patches/systemvm/debian/config/etc/dnsmasq.conf | 634 -
.../debian/config/etc/dnsmasq.conf.tmpl | 636 +
.../debian/config/etc/init.d/cloud-early-config | 369 +-
.../debian/config/etc/init.d/cloud-passwd-srvr | 2 +-
.../debian/config/etc/iptables/iptables-ilbvm | 33 +
patches/systemvm/debian/config/etc/rc.local | 3 +
.../systemvm/debian/config/etc/ssh/sshd_config | 4 +-
.../systemvm/debian/config/etc/vpcdnsmasq.conf | 3 -
.../opt/cloud/bin/get_template_version.sh | 26 +
.../systemvm/debian/config/opt/cloud/bin/ilb.sh | 211 +
.../debian/config/opt/cloud/bin/ipassoc.sh | 59 +-
.../config/opt/cloud/bin/passwd_server_ip | 2 +-
.../config/opt/cloud/bin/patchsystemvm.sh | 23 +
.../config/opt/cloud/bin/serve_password.sh | 2 +-
.../debian/config/opt/cloud/bin/vmdata.py | 204 +
.../debian/config/opt/cloud/bin/vpc_acl.sh | 11 +-
.../debian/config/opt/cloud/bin/vpc_func.sh | 2 +-
.../debian/config/opt/cloud/bin/vpc_guestnw.sh | 44 +
.../debian/config/opt/cloud/bin/vpc_ipassoc.sh | 48 +-
.../config/opt/cloud/bin/vpc_loadbalancer.sh | 23 +
.../config/opt/cloud/bin/vpc_privateGateway.sh | 2 +-
.../config/opt/cloud/bin/vpc_privategw_acl.sh | 224 +
.../debian/config/root/createIpAlias.sh | 100 +
.../debian/config/root/deleteIpAlias.sh | 60 +
patches/systemvm/debian/config/root/dnsmasq.sh | 130 +
.../systemvm/debian/config/root/edithosts.sh | 44 +-
.../debian/config/root/firewallRule_egress.sh | 26 +-
patches/systemvm/debian/config/root/func.sh | 64 +-
.../root/redundant_router/backup.sh.templ | 2 +
.../redundant_router/check_heartbeat.sh.templ | 2 +-
.../root/redundant_router/enable_pubip.sh.templ | 8 +-
.../systemvm/debian/config/root/savepassword.sh | 4 +-
patches/systemvm/debian/config/root/userdata.sh | 59 +-
plugins/acl/static-role-based/pom.xml | 2 +-
.../explicit-dedication/pom.xml | 33 +
.../affinity/ExplicitDedicationProcessor.java | 450 +
.../host-anti-affinity/pom.xml | 33 +
.../affinity/HostAntiAffinityProcessor.java | 156 +
plugins/alert-handlers/snmp-alerts/pom.xml | 4 +-
plugins/alert-handlers/syslog-alerts/pom.xml | 3 +-
.../cloudstack/syslog/AlertsSyslogAppender.java | 4 +-
plugins/api/discovery/pom.xml | 10 +-
.../api/command/user/discovery/ListApisCmd.java | 5 +-
.../discovery/ApiDiscoveryServiceImpl.java | 4 +
plugins/api/rate-limit/pom.xml | 10 +-
.../admin/ratelimit/ResetApiLimitCmd.java | 7 +-
.../command/user/ratelimit/GetApiLimitCmd.java | 9 +-
.../ratelimit/ApiRateLimitServiceImpl.java | 5 +-
.../cloudstack/ratelimit/ApiRateLimitTest.java | 3 +-
plugins/dedicated-resources/pom.xml | 29 +
.../api/commands/DedicateClusterCmd.java | 115 +
.../api/commands/DedicateHostCmd.java | 118 +
.../cloudstack/api/commands/DedicatePodCmd.java | 120 +
.../api/commands/DedicateZoneCmd.java | 120 +
.../api/commands/ListDedicatedClustersCmd.java | 114 +
.../api/commands/ListDedicatedHostsCmd.java | 114 +
.../api/commands/ListDedicatedPodsCmd.java | 114 +
.../api/commands/ListDedicatedZonesCmd.java | 114 +
.../commands/ReleaseDedicatedClusterCmd.java | 91 +
.../api/commands/ReleaseDedicatedHostCmd.java | 91 +
.../api/commands/ReleaseDedicatedPodCmd.java | 91 +
.../api/commands/ReleaseDedicatedZoneCmd.java | 91 +
.../api/response/DedicateClusterResponse.java | 93 +
.../api/response/DedicateHostResponse.java | 91 +
.../api/response/DedicatePodResponse.java | 94 +
.../api/response/DedicateZoneResponse.java | 94 +
.../dedicated/DedicatedResourceManagerImpl.java | 943 +
.../cloudstack/dedicated/DedicatedService.java | 63 +
.../dedicated/manager/DedicatedApiUnitTest.java | 335 +
.../test/resource/dedicatedContext.xml | 45 +
.../implicit-dedication/pom.xml | 29 +
.../cloud/deploy/ImplicitDedicationPlanner.java | 334 +
.../implicitplanner/ImplicitPlannerTest.java | 589 +
.../user-concentrated-pod/pom.xml | 2 +-
.../deploy/UserConcentratedPodPlanner.java | 38 +-
.../deployment-planners/user-dispersing/pom.xml | 2 +-
.../com/cloud/deploy/UserDispersingPlanner.java | 18 +-
plugins/event-bus/rabbitmq/pom.xml | 3 +-
plugins/file-systems/netapp/pom.xml | 2 +-
plugins/host-allocators/random/pom.xml | 2 +-
.../manager/allocator/impl/RandomAllocator.java | 63 +-
plugins/hypervisors/baremetal/pom.xml | 2 +-
.../baremetal/manager/AddBaremetalHostCmd.java | 48 -
.../baremetal/manager/BareMetalDiscoverer.java | 8 +-
.../cloud/baremetal/manager/BareMetalGuru.java | 11 +-
.../baremetal/manager/BareMetalPlanner.java | 21 +-
.../manager/BareMetalTemplateAdapter.java | 128 +-
.../baremetal/manager/BaremetalManager.java | 2 +-
.../baremetal/manager/BaremetalManagerImpl.java | 1 +
.../manager/BaremetalPlannerSelector.java | 39 -
.../networkservice/AddBaremetalDhcpCmd.java | 153 -
.../AddBaremetalKickStartPxeCmd.java | 37 -
.../networkservice/AddBaremetalPxeCmd.java | 147 -
.../AddBaremetalPxePingServerCmd.java | 82 -
.../BareMetalPingServiceImpl.java | 49 +-
.../networkservice/BareMetalResourceBase.java | 75 +-
.../networkservice/BaremetaNetworkGuru.java | 224 +-
.../networkservice/BaremetalDhcpElement.java | 52 +-
.../networkservice/BaremetalDhcpManager.java | 5 +-
.../BaremetalDhcpManagerImpl.java | 52 +-
.../BaremetalDhcpResourceBase.java | 13 -
.../networkservice/BaremetalDhcpResponse.java | 11 +
.../BaremetalDnsmasqResource.java | 4 +-
.../BaremetalKickStartPxeResource.java | 322 +-
.../BaremetalKickStartServiceImpl.java | 412 +-
.../networkservice/BaremetalPxeElement.java | 4 +-
.../BaremetalPxeKickStartResponse.java | 32 +-
.../networkservice/BaremetalPxeManager.java | 18 +-
.../networkservice/BaremetalPxeManagerImpl.java | 34 +-
.../networkservice/BaremetalPxeResponse.java | 18 +-
.../networkservice/BaremetalPxeService.java | 19 +-
.../BaremetalUserdataElement.java | 260 +-
.../networkservice/ListBaremetalDhcpCmd.java | 104 -
.../ListBaremetalPxePingServersCmd.java | 94 -
.../PrepareKickstartPxeServerCommand.java | 92 +-
.../networkservice/SecurityGroupHttpClient.java | 76 +-
.../cloudstack/api/AddBaremetalDhcpCmd.java | 144 +
.../cloudstack/api/AddBaremetalHostCmd.java | 50 +
.../api/AddBaremetalKickStartPxeCmd.java | 39 +
.../cloudstack/api/AddBaremetalPxeCmd.java | 153 +
.../api/AddBaremetalPxePingServerCmd.java | 84 +
.../cloudstack/api/ListBaremetalDhcpCmd.java | 96 +
.../api/ListBaremetalPxeServersCmd.java | 79 +
plugins/hypervisors/kvm/agent-descriptor.xml | 2 +-
plugins/hypervisors/kvm/pom.xml | 143 +-
.../kvm/src/com/cloud/ha/KVMInvestigator.java | 74 +
.../kvm/resource/BridgeVifDriver.java | 107 +-
.../kvm/resource/DirectVifDriver.java | 8 +-
.../hypervisor/kvm/resource/KVMHAMonitor.java | 54 +-
.../kvm/resource/LibvirtComputingResource.java | 1113 +-
.../kvm/resource/LibvirtConnection.java | 31 +-
.../kvm/resource/LibvirtDomainXMLParser.java | 98 +-
.../kvm/resource/LibvirtStorageVolumeDef.java | 2 +-
.../hypervisor/kvm/resource/LibvirtVMDef.java | 124 +-
.../hypervisor/kvm/resource/OvsVifDriver.java | 33 +-
.../hypervisor/kvm/storage/KVMPhysicalDisk.java | 6 +-
.../kvm/storage/KVMStoragePoolManager.java | 17 +-
.../kvm/storage/KVMStorageProcessor.java | 1216 +
.../kvm/storage/KVMStorageResource.java | 87 +
.../kvm/storage/LibvirtStorageAdaptor.java | 529 +-
.../hypervisor/kvm/storage/StorageAdaptor.java | 2 -
.../resource/LibvirtComputingResourceTest.java | 36 +-
.../kvm/resource/LibvirtVMDefTest.java | 20 +
.../kvm/storage/KVMStorageProcessorTest.java | 42 +
plugins/hypervisors/ovm/pom.xml | 2 +-
.../src/com/cloud/ovm/hypervisor/OvmFencer.java | 7 +-
.../src/com/cloud/ovm/hypervisor/OvmGuru.java | 6 +-
.../cloud/ovm/hypervisor/OvmResourceBase.java | 34 +-
plugins/hypervisors/simulator/pom.xml | 70 +-
.../resources/components-simulator.xml | 66 -
.../src/com/cloud/agent/MetricsCollector.java | 107 -
.../src/com/cloud/agent/MockVmMetrics.java | 204 -
.../src/com/cloud/agent/MultiCaster.java | 152 -
.../com/cloud/agent/MultiCasterListener.java | 22 -
.../src/com/cloud/agent/SimulatorCmd.java | 37 -
.../com/cloud/agent/SimulatorMigrateVmCmd.java | 83 -
.../cloud/agent/manager/MockAgentManager.java | 15 +-
.../agent/manager/MockAgentManagerImpl.java | 87 +-
.../cloud/agent/manager/MockNetworkManager.java | 91 +
.../agent/manager/MockNetworkManagerImpl.java | 236 +
.../cloud/agent/manager/MockStorageManager.java | 13 +-
.../agent/manager/MockStorageManagerImpl.java | 215 +-
.../com/cloud/agent/manager/MockVmManager.java | 72 +-
.../cloud/agent/manager/MockVmManagerImpl.java | 142 +-
.../cloud/agent/manager/SimulatorManager.java | 0
.../agent/manager/SimulatorManagerImpl.java | 176 +-
.../cloud/api/commands/ConfigureSimulator.java | 84 -
.../api/commands/ConfigureSimulatorCmd.java | 84 +
.../commands/SimulatorAddSecondaryAgent.java | 28 +
.../SimulatorComponentLibrary.java | 40 -
.../com/cloud/resource/AgentResourceBase.java | 29 +-
.../cloud/resource/AgentRoutingResource.java | 4 +-
.../cloud/resource/AgentStorageResource.java | 6 +-
.../com/cloud/resource/SimulatorDiscoverer.java | 6 +-
.../resource/SimulatorSecondaryDiscoverer.java | 57 +-
.../resource/SimulatorStorageProcessor.java | 217 +
.../server/ManagementServerSimulatorImpl.java | 31 -
.../com/cloud/simulator/MockSecStorageVO.java | 3 +-
.../com/cloud/simulator/MockStoragePoolVO.java | 3 +-
.../src/com/cloud/simulator/MockVolumeVO.java | 3 +-
.../src/com/cloud/simulator/SimulatorGuru.java | 9 +-
.../driver/SimulatorImageStoreDriverImpl.java | 123 +
.../SimulatorImageStoreLifeCycleImpl.java | 132 +
.../SimulatorImageStoreProviderImpl.java | 98 +
.../motion/SimulatorDataMotionStrategy.java | 52 +
.../SimulatorSecondaryStorageResource.java | 23 +
plugins/hypervisors/ucs/pom.xml | 43 +-
.../src/com/cloud/ucs/database/UcsBladeDao.java | 16 +-
.../com/cloud/ucs/database/UcsBladeDaoImpl.java | 22 +-
.../src/com/cloud/ucs/database/UcsBladeVO.java | 140 +-
.../com/cloud/ucs/database/UcsManagerDao.java | 32 +-
.../cloud/ucs/database/UcsManagerDaoImpl.java | 21 +-
.../com/cloud/ucs/database/UcsManagerVO.java | 149 +-
.../com/cloud/ucs/manager/AddUcsManagerCmd.java | 126 -
.../manager/AssociateUcsProfileToBladeCmd.java | 96 -
.../com/cloud/ucs/manager/ListUcsBladeCmd.java | 87 -
.../cloud/ucs/manager/ListUcsManagerCmd.java | 88 -
.../cloud/ucs/manager/ListUcsProfileCmd.java | 81 -
.../com/cloud/ucs/manager/StringTemplate.java | 46 +-
.../com/cloud/ucs/manager/UcsBladeResponse.java | 84 -
.../src/com/cloud/ucs/manager/UcsCommands.java | 180 +-
.../com/cloud/ucs/manager/UcsHttpClient.java | 96 +-
.../src/com/cloud/ucs/manager/UcsManager.java | 40 +-
.../com/cloud/ucs/manager/UcsManagerImpl.java | 708 +-
.../cloud/ucs/manager/UcsManagerResponse.java | 73 -
.../cloud/ucs/manager/UcsProfileResponse.java | 37 -
.../com/cloud/ucs/structure/ComputeBlade.java | 332 +-
.../src/com/cloud/ucs/structure/UcsCookie.java | 38 +
.../src/com/cloud/ucs/structure/UcsProfile.java | 76 +-
.../apache/cloudstack/api/AddUcsManagerCmd.java | 128 +
.../api/AssociateUcsProfileToBladeCmd.java | 110 +
.../cloudstack/api/DeleteUcsManagerCmd.java | 74 +
.../apache/cloudstack/api/ListUcsBladeCmd.java | 90 +
.../cloudstack/api/ListUcsManagerCmd.java | 105 +
.../cloudstack/api/ListUcsProfileCmd.java | 84 +
.../api/response/UcsBladeResponse.java | 84 +
.../api/response/UcsManagerResponse.java | 73 +
.../api/response/UcsProfileResponse.java | 37 +
plugins/hypervisors/vmware/pom.xml | 21 +-
.../vmware/src/com/cloud/ha/VmwareFencer.java | 11 +-
.../src/com/cloud/ha/VmwareInvestigator.java | 10 +-
.../com/cloud/hypervisor/guru/VMwareGuru.java | 233 +-
.../com/cloud/hypervisor/vmware/LegacyZone.java | 28 +
.../cloud/hypervisor/vmware/LegacyZoneVO.java | 81 +
.../hypervisor/vmware/VmwareDatacenter.java | 36 +
.../vmware/VmwareDatacenterService.java | 38 +
.../hypervisor/vmware/VmwareDatacenterVO.java | 160 +
.../vmware/VmwareDatacenterZoneMap.java | 30 +
.../vmware/VmwareDatacenterZoneMapVO.java | 78 +
.../vmware/VmwareServerDiscoverer.java | 186 +-
.../hypervisor/vmware/dao/LegacyZoneDao.java | 37 +
.../vmware/dao/LegacyZoneDaoImpl.java | 66 +
.../vmware/dao/VmwareDatacenterDao.java | 65 +
.../vmware/dao/VmwareDatacenterDaoImpl.java | 104 +
.../vmware/dao/VmwareDatacenterZoneMapDao.java | 35 +
.../dao/VmwareDatacenterZoneMapDaoImpl.java | 61 +
.../vmware/manager/VmwareHostService.java | 13 +-
.../vmware/manager/VmwareManager.java | 3 +
.../vmware/manager/VmwareManagerImpl.java | 451 +-
.../vmware/manager/VmwareStorageManager.java | 5 +-
.../manager/VmwareStorageManagerImpl.java | 1162 +-
.../vmware/resource/VmwareContextFactory.java | 25 +-
.../vmware/resource/VmwareResource.java | 3135 +-
.../com/cloud/network/VmwareTrafficLabel.java | 21 +-
.../network/element/CiscoNexusVSMElement.java | 40 +-
.../element/CiscoNexusVSMElementService.java | 7 +-
.../PremiumSecondaryStorageResource.java | 2 +
.../VmwareSecondaryStorageContextFactory.java | 58 +-
.../VmwareSecondaryStorageResourceHandler.java | 208 +-
.../resource/VmwareStorageLayoutHelper.java | 299 +
.../resource/VmwareStorageLayoutType.java | 22 +
.../resource/VmwareStorageProcessor.java | 1689 +
.../VmwareStorageSubsystemCommandHandler.java | 158 +
.../api/command/admin/zone/AddVmwareDcCmd.java | 123 +
.../command/admin/zone/ListVmwareDcsCmd.java | 118 +
.../command/admin/zone/RemoveVmwareDcCmd.java | 92 +
.../api/response/VmwareDatacenterResponse.java | 76 +
.../motion/VmwareStorageMotionStrategy.java | 205 +
.../vmware/VmwareDatacenterApiUnitTest.java | 437 +
.../vmware/resource/VmwareResourceTest.java | 83 +
.../motion/VmwareStorageMotionStrategyTest.java | 271 +
plugins/hypervisors/xen/pom.xml | 8 +-
.../xen/src/com/cloud/ha/XenServerFencer.java | 7 +-
.../src/com/cloud/hypervisor/XenServerGuru.java | 5 +-
.../xen/discoverer/XcpServerDiscoverer.java | 261 +-
.../hypervisor/xen/resource/CitrixHelper.java | 1412 +-
.../xen/resource/CitrixResourceBase.java | 1324 +-
.../hypervisor/xen/resource/XcpOssResource.java | 38 +-
.../xen/resource/XcpServer16Resource.java | 32 +
.../xen/resource/XcpServerResource.java | 113 +-
.../xen/resource/XenServer56FP1Resource.java | 155 +-
.../xen/resource/XenServer56Resource.java | 44 -
.../xen/resource/XenServer56SP2Resource.java | 29 +
.../xen/resource/XenServer600Resource.java | 29 +
.../xen/resource/XenServer602Resource.java | 28 +
.../xen/resource/XenServer610Resource.java | 400 +-
.../xen/resource/XenServer620Resource.java | 86 +
.../xen/resource/XenServerConnectionPool.java | 4 +-
.../xen/resource/XenServerStorageProcessor.java | 1506 +
.../xen/resource/XenServerStorageResource.java | 662 -
.../motion/XenServerStorageMotionStrategy.java | 248 +
.../xen/resource/CitrixResourceBaseTest.java | 25 +-
plugins/network-elements/bigswitch-vns/pom.xml | 2 +-
.../api/commands/AddBigSwitchVnsDeviceCmd.java | 4 +-
.../commands/DeleteBigSwitchVnsDeviceCmd.java | 4 +-
.../network/element/BigSwitchVnsElement.java | 38 +-
.../guru/BigSwitchVnsGuestNetworkGuru.java | 35 +-
plugins/network-elements/cisco-vnmc/pom.xml | 42 +
.../scripts/network/cisco/assoc-asa1000v.xml | 34 +
.../network/cisco/associate-acl-policy-set.xml | 37 +
.../network/cisco/associate-dhcp-policy.xml | 34 +
.../network/cisco/associate-dhcp-server.xml | 32 +
.../network/cisco/associate-nat-policy-set.xml | 35 +
.../network/cisco/associate-route-policy.xml | 33 +
.../network/cisco/create-acl-policy-ref.xml | 38 +
.../network/cisco/create-acl-policy-set.xml | 36 +
.../scripts/network/cisco/create-acl-policy.xml | 35 +
.../network/cisco/create-acl-rule-for-dnat.xml | 82 +
.../network/cisco/create-acl-rule-for-pf.xml | 156 +
.../network/cisco/create-dhcp-policy.xml | 72 +
.../scripts/network/cisco/create-dnat-rule.xml | 91 +
.../cisco/create-edge-device-profile.xml | 32 +
.../cisco/create-edge-device-route-policy.xml | 30 +
.../network/cisco/create-edge-device-route.xml | 35 +
.../network/cisco/create-edge-firewall.xml | 89 +
.../cisco/create-edge-security-profile.xml | 41 +
.../network/cisco/create-egress-acl-rule.xml | 168 +
...eate-generic-egress-acl-no-protocol-rule.xml | 94 +
.../cisco/create-generic-egress-acl-rule.xml | 121 +
.../cisco/create-generic-ingress-acl-rule.xml | 121 +
.../network/cisco/create-ingress-acl-rule.xml | 168 +
.../scripts/network/cisco/create-ip-pool.xml | 58 +
.../network/cisco/create-nat-policy-ref.xml | 38 +
.../network/cisco/create-nat-policy-set.xml | 37 +
.../scripts/network/cisco/create-nat-policy.xml | 33 +
.../scripts/network/cisco/create-pf-rule.xml | 166 +
.../scripts/network/cisco/create-port-pool.xml | 72 +
.../network/cisco/create-source-nat-pool.xml | 58 +
.../network/cisco/create-source-nat-rule.xml | 103 +
.../scripts/network/cisco/create-tenant.xml | 29 +
.../scripts/network/cisco/create-vdc.xml | 30 +
.../network/cisco/delete-acl-policy-set.xml | 30 +
.../scripts/network/cisco/delete-acl-policy.xml | 33 +
.../network/cisco/delete-edge-firewall.xml | 30 +
.../cisco/delete-edge-security-profile.xml | 38 +
.../network/cisco/delete-nat-policy-set.xml | 30 +
.../scripts/network/cisco/delete-nat-policy.xml | 33 +
.../scripts/network/cisco/delete-rule.xml | 31 +
.../scripts/network/cisco/delete-tenant.xml | 30 +
.../scripts/network/cisco/delete-vdc.xml | 30 +
.../scripts/network/cisco/disassoc-asa1000v.xml | 30 +
.../scripts/network/cisco/list-acl-policies.xml | 31 +
.../scripts/network/cisco/list-children.xml | 27 +
.../scripts/network/cisco/list-nat-policies.xml | 31 +
.../cisco/list-policyrefs-in-policyset.xml | 31 +
.../scripts/network/cisco/list-tenants.xml | 26 +
.../network/cisco/list-unassigned-asa1000v.xml | 39 +
.../cisco-vnmc/scripts/network/cisco/login.xml | 20 +
...ociateAsaWithLogicalEdgeFirewallCommand.java | 53 +
.../api/CleanupLogicalEdgeFirewallCommand.java | 43 +
.../api/ConfigureNexusVsmForAsaCommand.java | 95 +
.../api/CreateLogicalEdgeFirewallCommand.java | 94 +
.../commands/AddCiscoAsa1000vResourceCmd.java | 117 +
.../api/commands/AddCiscoVnmcResourceCmd.java | 116 +
.../DeleteCiscoAsa1000vResourceCmd.java | 94 +
.../commands/DeleteCiscoVnmcResourceCmd.java | 94 +
.../commands/ListCiscoAsa1000vResourcesCmd.java | 111 +
.../api/commands/ListCiscoVnmcResourcesCmd.java | 107 +
.../response/CiscoAsa1000vResourceResponse.java | 97 +
.../api/response/CiscoVnmcResourceResponse.java | 85 +
.../network/cisco/CiscoAsa1000vDevice.java | 39 +
.../network/cisco/CiscoAsa1000vDeviceVO.java | 101 +
.../network/cisco/CiscoVnmcConnection.java | 196 +
.../network/cisco/CiscoVnmcConnectionImpl.java | 1402 +
.../network/cisco/CiscoVnmcController.java | 40 +
.../network/cisco/CiscoVnmcControllerVO.java | 102 +
.../cloud/network/cisco/NetworkAsa1000vMap.java | 31 +
.../network/cisco/NetworkAsa1000vMapVO.java | 73 +
.../com/cloud/network/dao/CiscoAsa1000vDao.java | 33 +
.../cloud/network/dao/CiscoAsa1000vDaoImpl.java | 63 +
.../src/com/cloud/network/dao/CiscoVnmcDao.java | 32 +
.../com/cloud/network/dao/CiscoVnmcDaoImpl.java | 51 +
.../network/dao/NetworkAsa1000vMapDao.java | 28 +
.../network/dao/NetworkAsa1000vMapDaoImpl.java | 61 +
.../network/element/CiscoAsa1000vService.java | 43 +
.../cloud/network/element/CiscoVnmcElement.java | 972 +
.../element/CiscoVnmcElementService.java | 42 +
.../network/resource/CiscoVnmcResource.java | 763 +
.../network/cisco/CiscoVnmcConnectionTest.java | 248 +
.../network/element/CiscoVnmcElementTest.java | 409 +
.../network/resource/CiscoVnmcResourceTest.java | 278 +
plugins/network-elements/dns-notifier/pom.xml | 2 +-
.../resources/components-example.xml | 12 +-
.../cloudstack/network/element/DnsNotifier.java | 244 +-
.../elastic-loadbalancer/pom.xml | 2 +-
.../element/ElasticLoadBalancerElement.java | 29 +-
.../network/lb/ElasticLoadBalancerManager.java | 4 +-
.../lb/ElasticLoadBalancerManagerImpl.java | 216 +-
plugins/network-elements/f5/pom.xml | 3 +-
.../api/commands/AddF5LoadBalancerCmd.java | 6 +-
.../commands/ConfigureF5LoadBalancerCmd.java | 6 +-
.../api/commands/DeleteF5LoadBalancerCmd.java | 6 +-
.../element/F5ExternalLoadBalancerElement.java | 84 +-
.../cloud/network/resource/F5BigIpResource.java | 1 +
.../internal-loadbalancer/pom.xml | 50 +
.../element/InternalLoadBalancerElement.java | 536 +
.../lb/InternalLoadBalancerVMManager.java | 89 +
.../lb/InternalLoadBalancerVMManagerImpl.java | 928 +
.../ElementChildTestConfiguration.java | 135 +
.../InternalLbElementServiceTest.java | 189 +
.../InternalLbElementTest.java | 231 +
.../InternalLBVMManagerTest.java | 386 +
.../InternalLBVMServiceTest.java | 256 +
.../LbChildTestConfiguration.java | 186 +
.../test/resources/lb_element.xml | 46 +
.../test/resources/lb_mgr.xml | 46 +
.../test/resources/lb_svc.xml | 46 +
plugins/network-elements/juniper-srx/pom.xml | 3 +-
.../cloud/api/commands/AddSrxFirewallCmd.java | 6 +-
.../api/commands/ConfigureSrxFirewallCmd.java | 5 +-
.../api/commands/DeleteSrxFirewallCmd.java | 5 +-
.../JuniperSRXExternalFirewallElement.java | 34 +-
.../network/resource/JuniperSrxResource.java | 412 +-
.../network-elements/midokura-midonet/pom.xml | 30 -
.../network/element/MidokuraMidonetElement.java | 131 -
.../guru/MidokuraMidonetGuestNetworkGuru.java | 48 -
plugins/network-elements/midonet/pom.xml | 60 +
.../cloud/network/element/MidoNetElement.java | 1747 +
.../network/element/SimpleFirewallRule.java | 218 +
.../network/guru/MidoNetGuestNetworkGuru.java | 167 +
.../network/guru/MidoNetPublicNetworkGuru.java | 257 +
.../network/resource/MidoNetVifDriver.java | 171 +
.../network/element/MidoNetElementTest.java | 188 +
plugins/network-elements/netscaler/pom.xml | 8 +-
.../commands/AddNetscalerLoadBalancerCmd.java | 6 +-
.../ConfigureNetscalerLoadBalancerCmd.java | 6 +-
.../DeleteNetscalerLoadBalancerCmd.java | 5 +-
.../response/NetscalerLoadBalancerResponse.java | 21 +
.../cloud/network/element/NetscalerElement.java | 225 +-
.../network/resource/NetscalerResource.java | 335 +-
plugins/network-elements/nicira-nvp/pom.xml | 2 +-
.../api/commands/AddNiciraNvpDeviceCmd.java | 6 +-
.../api/commands/DeleteNiciraNvpDeviceCmd.java | 8 +-
.../cloud/network/element/NiciraNvpElement.java | 57 +-
.../network/guru/NiciraNvpGuestNetworkGuru.java | 11 +-
.../network/nicira/DestinationNatRule.java | 105 +
.../src/com/cloud/network/nicira/Match.java | 146 +-
.../src/com/cloud/network/nicira/NatRule.java | 363 +-
.../com/cloud/network/nicira/NiciraNvpApi.java | 67 +-
.../com/cloud/network/nicira/NiciraNvpTag.java | 17 +-
.../com/cloud/network/nicira/SourceNatRule.java | 123 +
.../network/resource/NiciraNvpResource.java | 57 +-
.../network/element/NiciraNvpElementTest.java | 241 +-
.../guru/NiciraNvpGuestNetworkGuruTest.java | 8 +-
.../com/cloud/network/nicira/NatRuleTest.java | 43 +-
.../com/cloud/network/nicira/NiciraTagTest.java | 54 +
.../network/resource/NiciraNvpResourceTest.java | 113 +-
plugins/network-elements/ovs/pom.xml | 2 +-
.../com/cloud/network/element/OvsElement.java | 4 +-
.../cloud/network/guru/OvsGuestNetworkGuru.java | 17 +-
.../com/cloud/network/ovs/OvsTunnelManager.java | 2 +-
.../cloud/network/ovs/OvsTunnelManagerImpl.java | 15 +-
.../network-elements/stratosphere-ssp/pom.xml | 31 +
.../cloudstack/api/commands/AddSspCmd.java | 139 +
.../cloudstack/api/commands/DeleteSspCmd.java | 75 +
.../cloudstack/api/response/SspResponse.java | 77 +
.../network/dao/SspCredentialDao.java | 33 +
.../network/dao/SspCredentialDaoImpl.java | 42 +
.../cloudstack/network/dao/SspCredentialVO.java | 67 +
.../cloudstack/network/dao/SspTenantDao.java | 34 +
.../network/dao/SspTenantDaoImpl.java | 48 +
.../cloudstack/network/dao/SspTenantVO.java | 55 +
.../cloudstack/network/dao/SspUuidDao.java | 36 +
.../cloudstack/network/dao/SspUuidDaoImpl.java | 116 +
.../cloudstack/network/dao/SspUuidVO.java | 73 +
.../cloudstack/network/element/SspClient.java | 272 +
.../cloudstack/network/element/SspElement.java | 620 +
.../cloudstack/network/element/SspManager.java | 71 +
.../cloudstack/network/element/SspService.java | 47 +
.../network/guru/SspGuestNetworkGuru.java | 173 +
.../stratosphere-ssp/sspmock/sspmock.py | 85 +
.../network/element/SspClientTest.java | 93 +
.../network/element/SspElementTest.java | 154 +
plugins/pom.xml | 73 +-
plugins/storage-allocators/random/pom.xml | 2 +-
.../allocator/RandomStoragePoolAllocator.java | 56 +-
plugins/storage/image/default/pom.xml | 62 +
.../driver/CloudStackImageStoreDriverImpl.java | 98 +
.../CloudStackImageStoreLifeCycleImpl.java | 164 +
.../CloudStackImageStoreProviderImpl.java | 103 +
plugins/storage/image/s3/pom.xml | 22 +-
.../driver/S3ImageStoreDriverImpl.java | 100 +
.../lifecycle/S3ImageStoreLifeCycleImpl.java | 134 +
.../provider/S3ImageStoreProviderImpl.java | 100 +
plugins/storage/image/sample/pom.xml | 62 +
.../driver/SampleImageStoreDriverImpl.java | 52 +
.../SampleImageStoreLifeCycleImpl.java | 82 +
.../provider/SampleImageStoreProviderImpl.java | 96 +
plugins/storage/image/swift/pom.xml | 62 +
.../driver/SwiftImageStoreDriverImpl.java | 102 +
.../lifecycle/SwiftImageStoreLifeCycleImpl.java | 116 +
.../provider/SwiftImageStoreProviderImpl.java | 102 +
plugins/storage/volume/default/pom.xml | 11 +-
.../CloudStackPrimaryDataStoreDriverImpl.java | 519 +-
...CloudStackPrimaryDataStoreLifeCycleImpl.java | 266 +-
.../CloudStackPrimaryDataStoreProviderImpl.java | 20 +-
plugins/storage/volume/sample/pom.xml | 47 +
.../SamplePrimaryDataStoreDriverImpl.java | 186 +
.../SamplePrimaryDataStoreLifeCycleImpl.java | 122 +
.../SamplePrimaryDatastoreProviderImpl.java | 79 +
plugins/storage/volume/solidfire/pom.xml | 18 +-
.../driver/SolidfirePrimaryDataStoreDriver.java | 546 +-
.../SolidFirePrimaryDataStoreLifeCycle.java | 333 +
.../SolidfirePrimaryDataStoreProvider.java | 117 +-
.../storage/datastore/util/SolidFireUtil.java | 957 +
.../cloudstack/storage/test/AopTestAdvice.java | 20 +-
.../storage/test/ChildTestConfiguration.java | 47 +-
.../storage/test/TestConfiguration.java | 17 +-
.../cloudstack/storage/test/VolumeTest.java | 169 +-
plugins/user-authenticators/ldap/pom.xml | 121 +-
.../server/auth/LDAPUserAuthenticator.java | 173 -
.../api/command/LdapAddConfigurationCmd.java | 99 +
.../api/command/LdapCreateAccountCmd.java | 167 +
.../api/command/LdapDeleteConfigurationCmd.java | 78 +
.../api/command/LdapListConfigurationCmd.java | 110 +
.../api/command/LdapListUsersCmd.java | 123 +
.../api/command/LdapUserSearchCmd.java | 98 +
.../api/response/LdapConfigurationResponse.java | 62 +
.../api/response/LdapUserResponse.java | 99 +
.../cloudstack/ldap/LdapAuthenticator.java | 81 +
.../cloudstack/ldap/LdapConfiguration.java | 145 +
.../cloudstack/ldap/LdapConfigurationVO.java | 66 +
.../cloudstack/ldap/LdapContextFactory.java | 136 +
.../org/apache/cloudstack/ldap/LdapManager.java | 57 +
.../apache/cloudstack/ldap/LdapManagerImpl.java | 232 +
.../org/apache/cloudstack/ldap/LdapUser.java | 77 +
.../apache/cloudstack/ldap/LdapUserManager.java | 140 +
.../org/apache/cloudstack/ldap/LdapUtils.java | 62 +
.../ldap/NoLdapUserMatchingQueryException.java | 32 +
.../ldap/NoSuchLdapUserException.java | 31 +
.../ldap/dao/LdapConfigurationDao.java | 32 +
.../ldap/dao/LdapConfigurationDaoImpl.java | 72 +
.../ldap/BasicNamingEnumerationImpl.groovy | 56 +
.../ldap/LdapAddConfigurationCmdSpec.groovy | 89 +
.../ldap/LdapAuthenticatorSpec.groovy | 99 +
.../ldap/LdapConfigurationDaoImplSpec.groovy | 29 +
.../ldap/LdapConfigurationResponseSpec.groovy | 49 +
.../ldap/LdapConfigurationSpec.groovy | 223 +
.../ldap/LdapConfigurationVOSpec.groovy | 36 +
.../ldap/LdapContextFactorySpec.groovy | 127 +
.../ldap/LdapCreateAccountCmdSpec.groovy | 155 +
.../ldap/LdapDeleteConfigurationCmdSpec.groovy | 68 +
.../ldap/LdapListConfigurationCmdSpec.groovy | 98 +
.../cloudstack/ldap/LdapListUsersCmdSpec.groovy | 123 +
.../cloudstack/ldap/LdapManagerImplSpec.groovy | 336 +
.../ldap/LdapSearchUserCmdSpec.groovy | 72 +
.../cloudstack/ldap/LdapUserManagerSpec.groovy | 206 +
.../cloudstack/ldap/LdapUserResponseSpec.groovy | 67 +
.../apache/cloudstack/ldap/LdapUserSpec.groovy | 101 +
.../apache/cloudstack/ldap/LdapUtilsSpec.groovy | 68 +
.../NoLdapUserMatchingQueryExceptionSpec.groovy | 30 +
.../ldap/NoSuchLdapUserExceptionSpec.groovy | 30 +
.../ldap/test/resources/cloudstack.org.ldif | 311 +
plugins/user-authenticators/md5/pom.xml | 2 +-
plugins/user-authenticators/plain-text/pom.xml | 2 +-
.../user-authenticators/sha256salted/pom.xml | 2 +-
.../auth/SHA256SaltedUserAuthenticator.java | 39 +-
.../server/auth/test/AuthenticatorTest.java | 78 +-
pom.xml | 399 +-
python/lib/cloudutils/globalEnv.py | 2 +
python/lib/cloudutils/networkConfig.py | 16 +-
python/lib/cloudutils/serviceConfig.py | 66 +-
scripts/network/domr/call_dnsmasq.sh | 27 +
scripts/network/domr/createipAlias.sh | 26 +
scripts/network/domr/deleteipAlias.sh | 25 +
scripts/network/domr/save_password_to_domr.sh | 2 +-
scripts/network/domr/vm_data.sh | 147 -
scripts/network/exdhcp/dnsmasq_edithosts.sh | 19 +-
scripts/network/juniper/application-add.xml | 2 +-
scripts/network/juniper/security-policy-add.xml | 7 +-
scripts/storage/qcow2/cleanupmyvms.sh | 83 -
scripts/storage/qcow2/createtmplt.sh | 4 +-
scripts/storage/qcow2/managesnapshot.sh | 15 +-
scripts/storage/qcow2/modifyvlan.sh | 269 -
.../storage/secondary/cloud-install-sys-tmplt | 2 +-
.../create_privatetemplate_from_snapshot_xen.sh | 98 +
scripts/storage/secondary/createtmplt.sh | 2 +-
scripts/vm/hypervisor/kvm/patchviasocket.pl | 2 +-
.../xenserver/Add-To-VCPUs-Params-Live.sh | 33 -
.../xenserver/add_to_vcpus_params_live.sh | 33 +
.../vm/hypervisor/xenserver/createipAlias.sh | 25 +
.../vm/hypervisor/xenserver/deleteipAlias.sh | 24 +
.../vm/hypervisor/xenserver/ovs-get-bridge.sh | 27 +
.../hypervisor/xenserver/ovs-get-dhcp-iface.sh | 25 +
scripts/vm/hypervisor/xenserver/ovs-pvlan | 145 +
.../vm/hypervisor/xenserver/ovs-vif-flows.py | 23 +-
scripts/vm/hypervisor/xenserver/s3xen | 161 +-
.../vm/hypervisor/xenserver/setupxenserver.sh | 2 +-
scripts/vm/hypervisor/xenserver/vmops | 155 +-
scripts/vm/hypervisor/xenserver/vmopsSnapshot | 30 +-
scripts/vm/hypervisor/xenserver/xcposs/patch | 3 +-
scripts/vm/hypervisor/xenserver/xcposs/vmops | 82 +-
.../hypervisor/xenserver/xcposs/vmopsSnapshot | 77 +-
scripts/vm/hypervisor/xenserver/xcpserver/patch | 4 +-
.../vm/hypervisor/xenserver/xenserver56/patch | 4 +-
.../hypervisor/xenserver/xenserver56fp1/patch | 4 +-
.../vm/hypervisor/xenserver/xenserver60/patch | 11 +-
scripts/vm/network/ovs-pvlan-cleanup.sh | 23 +
scripts/vm/network/ovs-pvlan-dhcp-host.sh | 123 +
scripts/vm/network/ovs-pvlan-vm.sh | 100 +
scripts/vm/network/security_group.py | 483 +-
scripts/vm/systemvm/injectkeys.sh | 26 +-
server/conf/cloudstack-limits.conf.in | 4 +-
server/conf/cloudstack-sudoers.in | 2 +-
server/conf/log4j-cloud.xml.in | 12 +-
server/pom.xml | 168 +-
.../cloud/acl/AffinityGroupAccessChecker.java | 82 +
server/src/com/cloud/acl/DomainChecker.java | 32 +-
server/src/com/cloud/agent/AgentManager.java | 161 -
.../com/cloud/agent/manager/AgentAttache.java | 524 -
.../cloud/agent/manager/AgentManagerImpl.java | 1531 -
.../com/cloud/agent/manager/AgentMonitor.java | 304 -
.../agent/manager/AgentMonitorService.java | 28 -
.../agent/manager/ClusteredAgentAttache.java | 260 -
.../manager/ClusteredAgentManagerImpl.java | 1139 -
.../manager/ClusteredDirectAgentAttache.java | 69 -
.../src/com/cloud/agent/manager/Commands.java | 153 -
.../agent/manager/ConnectedAgentAttache.java | 101 -
.../cloud/agent/manager/DirectAgentAttache.java | 220 -
.../com/cloud/agent/manager/DummyAttache.java | 56 -
.../src/com/cloud/agent/manager/Routable.java | 29 -
.../agent/manager/SynchronousListener.java | 135 -
.../agent/manager/allocator/HostAllocator.java | 70 -
.../agent/manager/allocator/PodAllocator.java | 35 -
.../allocator/impl/FirstFitAllocator.java | 496 +-
.../impl/FirstFitRoutingAllocator.java | 2 +-
.../allocator/impl/RecreateHostAllocator.java | 2 +-
.../allocator/impl/TestingAllocator.java | 15 +-
.../impl/UserConcentratedAllocator.java | 79 +-
.../authn/impl/BasicAgentAuthManager.java | 3 +-
.../src/com/cloud/alert/AlertManagerImpl.java | 149 +-
server/src/com/cloud/alert/dao/AlertDao.java | 33 -
.../src/com/cloud/alert/dao/AlertDaoImpl.java | 156 -
.../com/cloud/api/ApiAsyncJobDispatcher.java | 126 +
server/src/com/cloud/api/ApiDBUtils.java | 395 +-
server/src/com/cloud/api/ApiDispatcher.java | 164 +-
server/src/com/cloud/api/ApiResponseHelper.java | 1502 +-
.../src/com/cloud/api/ApiSerializerHelper.java | 5 +-
server/src/com/cloud/api/ApiServer.java | 341 +-
server/src/com/cloud/api/ApiServerService.java | 1 +
server/src/com/cloud/api/ApiServlet.java | 54 +-
.../src/com/cloud/api/doc/ApiXmlDocWriter.java | 44 +-
.../com/cloud/api/query/QueryManagerImpl.java | 1579 +-
.../com/cloud/api/query/ViewResponseHelper.java | 195 +-
.../com/cloud/api/query/dao/AccountJoinDao.java | 6 +-
.../cloud/api/query/dao/AccountJoinDaoImpl.java | 140 +-
.../api/query/dao/AffinityGroupJoinDao.java | 37 +
.../api/query/dao/AffinityGroupJoinDaoImpl.java | 144 +
.../cloud/api/query/dao/AsyncJobJoinDao.java | 4 +-
.../api/query/dao/AsyncJobJoinDaoImpl.java | 14 +-
.../api/query/dao/DataCenterJoinDaoImpl.java | 7 +-
.../api/query/dao/DiskOfferingJoinDaoImpl.java | 13 +-
.../api/query/dao/DomainRouterJoinDaoImpl.java | 18 +-
.../com/cloud/api/query/dao/HostJoinDao.java | 5 +
.../cloud/api/query/dao/HostJoinDaoImpl.java | 144 +-
.../cloud/api/query/dao/ImageStoreJoinDao.java | 36 +
.../api/query/dao/ImageStoreJoinDaoImpl.java | 163 +
.../cloud/api/query/dao/ProjectJoinDaoImpl.java | 17 +-
.../api/query/dao/ResourceTagJoinDaoImpl.java | 3 +-
.../api/query/dao/SecurityGroupJoinDaoImpl.java | 9 +-
.../query/dao/ServiceOfferingJoinDaoImpl.java | 10 +
.../cloud/api/query/dao/StoragePoolJoinDao.java | 12 +-
.../api/query/dao/StoragePoolJoinDaoImpl.java | 105 +-
.../cloud/api/query/dao/TemplateJoinDao.java | 45 +
.../api/query/dao/TemplateJoinDaoImpl.java | 450 +
.../api/query/dao/UserAccountJoinDaoImpl.java | 7 +-
.../com/cloud/api/query/dao/UserVmJoinDao.java | 2 +
.../cloud/api/query/dao/UserVmJoinDaoImpl.java | 86 +-
.../cloud/api/query/dao/VolumeJoinDaoImpl.java | 43 +-
.../com/cloud/api/query/vo/AccountJoinVO.java | 16 +-
.../cloud/api/query/vo/AffinityGroupJoinVO.java | 275 +
.../com/cloud/api/query/vo/AsyncJobJoinVO.java | 9 +-
.../cloud/api/query/vo/DataCenterJoinVO.java | 20 +
.../cloud/api/query/vo/DiskOfferingJoinVO.java | 86 +
.../cloud/api/query/vo/DomainRouterJoinVO.java | 23 +-
.../src/com/cloud/api/query/vo/HostJoinVO.java | 6 +-
.../cloud/api/query/vo/ImageStoreJoinVO.java | 207 +
.../com/cloud/api/query/vo/ProjectJoinVO.java | 8 +-
.../cloud/api/query/vo/SecurityGroupJoinVO.java | 6 +-
.../api/query/vo/ServiceOfferingJoinVO.java | 63 +
.../cloud/api/query/vo/StoragePoolJoinVO.java | 54 +-
.../com/cloud/api/query/vo/TemplateJoinVO.java | 1075 +
.../cloud/api/query/vo/UserAccountJoinVO.java | 22 +-
.../com/cloud/api/query/vo/UserVmJoinVO.java | 66 +-
.../com/cloud/api/query/vo/VolumeJoinVO.java | 114 +-
.../api/response/ApiResponseSerializer.java | 23 +-
.../src/com/cloud/async/AsyncCommandQueued.java | 35 -
.../src/com/cloud/async/AsyncJobExecutor.java | 39 -
.../cloud/async/AsyncJobExecutorContext.java | 54 -
.../async/AsyncJobExecutorContextImpl.java | 146 -
server/src/com/cloud/async/AsyncJobMBean.java | 37 -
.../src/com/cloud/async/AsyncJobMBeanImpl.java | 144 -
server/src/com/cloud/async/AsyncJobManager.java | 51 -
.../com/cloud/async/AsyncJobManagerImpl.java | 783 -
server/src/com/cloud/async/AsyncJobResult.java | 28 +-
.../com/cloud/async/BaseAsyncJobExecutor.java | 69 -
.../src/com/cloud/async/SyncQueueManager.java | 35 -
.../com/cloud/async/SyncQueueManagerImpl.java | 253 -
server/src/com/cloud/async/dao/AsyncJobDao.java | 31 -
.../com/cloud/async/dao/AsyncJobDaoImpl.java | 127 -
.../src/com/cloud/async/dao/SyncQueueDao.java | 25 -
.../com/cloud/async/dao/SyncQueueDaoImpl.java | 81 -
.../com/cloud/async/dao/SyncQueueItemDao.java | 30 -
.../cloud/async/dao/SyncQueueItemDaoImpl.java | 163 -
.../async/executor/ExtractJobResultObject.java | 183 -
.../src/com/cloud/capacity/CapacityManager.java | 59 -
.../com/cloud/capacity/CapacityManagerImpl.java | 268 +-
.../cloud/capacity/ComputeCapacityListener.java | 4 +-
.../cloud/capacity/StorageCapacityListener.java | 20 +-
.../src/com/cloud/capacity/dao/CapacityDao.java | 45 -
.../com/cloud/capacity/dao/CapacityDaoImpl.java | 806 -
.../cloud/certificate/dao/CertificateDao.java | 24 -
.../certificate/dao/CertificateDaoImpl.java | 63 -
.../cloud/cluster/ActiveFencingException.java | 31 -
server/src/com/cloud/cluster/CheckPointVO.java | 121 -
.../com/cloud/cluster/ClusterFenceManager.java | 23 -
.../cloud/cluster/ClusterFenceManagerImpl.java | 58 -
.../cluster/ClusterInvalidSessionException.java | 33 -
.../src/com/cloud/cluster/ClusterManager.java | 67 -
.../com/cloud/cluster/ClusterManagerImpl.java | 1514 -
.../cloud/cluster/ClusterManagerListener.java | 25 -
.../com/cloud/cluster/ClusterManagerMBean.java | 27 -
.../cloud/cluster/ClusterManagerMBeanImpl.java | 67 -
.../cloud/cluster/ClusterManagerMessage.java | 44 -
.../cloud/cluster/ClusterNodeJoinEventArgs.java | 43 -
.../cloud/cluster/ClusterNodeLeftEventArgs.java | 44 -
.../src/com/cloud/cluster/ClusterService.java | 25 -
.../cloud/cluster/ClusterServiceAdapter.java | 28 -
.../com/cloud/cluster/ClusterServicePdu.java | 112 -
.../cloud/cluster/ClusterServiceRequestPdu.java | 54 -
.../cluster/ClusterServiceServletAdapter.java | 148 -
.../cluster/ClusterServiceServletContainer.java | 179 -
.../ClusterServiceServletHttpHandler.java | 192 -
.../cluster/ClusterServiceServletImpl.java | 146 -
.../cluster/ClusteredAgentRebalanceService.java | 30 -
.../cloud/cluster/DummyClusterManagerImpl.java | 179 -
.../com/cloud/cluster/LockMasterListener.java | 49 -
.../cluster/ManagementServerHostPeerVO.java | 120 -
.../cloud/cluster/ManagementServerHostVO.java | 182 -
.../com/cloud/cluster/ManagementServerNode.java | 64 -
.../cloud/cluster/RemoteMethodConstants.java | 23 -
.../agentlb/AgentLoadBalancerPlanner.java | 29 -
.../ClusterBasedAgentLoadBalancerPlanner.java | 150 -
.../cluster/agentlb/HostTransferMapVO.java | 98 -
.../cluster/agentlb/dao/HostTransferMapDao.java | 45 -
.../agentlb/dao/HostTransferMapDaoImpl.java | 146 -
.../cluster/dao/ManagementServerHostDao.java | 48 -
.../dao/ManagementServerHostDaoImpl.java | 276 -
.../dao/ManagementServerHostPeerDao.java | 27 -
.../dao/ManagementServerHostPeerDaoImpl.java | 108 -
.../src/com/cloud/cluster/dao/StackMaidDao.java | 44 -
.../com/cloud/cluster/dao/StackMaidDaoImpl.java | 208 -
server/src/com/cloud/configuration/Config.java | 197 +-
.../configuration/ConfigurationManager.java | 243 -
.../configuration/ConfigurationManagerImpl.java | 2794 +-
.../configuration/dao/ConfigurationDao.java | 68 -
.../configuration/dao/ConfigurationDaoImpl.java | 225 -
.../configuration/dao/ResourceCountDao.java | 58 -
.../configuration/dao/ResourceCountDaoImpl.java | 222 -
.../configuration/dao/ResourceLimitDao.java | 35 -
.../configuration/dao/ResourceLimitDaoImpl.java | 100 -
.../AgentBasedConsoleProxyManager.java | 191 +-
...AgentBasedStandaloneConsoleProxyManager.java | 2 +-
.../src/com/cloud/consoleproxy/AgentHook.java | 9 +-
.../com/cloud/consoleproxy/AgentHookBase.java | 284 +
.../ConsoleProxyBalanceAllocator.java | 55 +-
.../consoleproxy/ConsoleProxyListener.java | 4 +-
.../cloud/consoleproxy/ConsoleProxyManager.java | 18 +-
.../consoleproxy/ConsoleProxyManagerImpl.java | 833 +-
.../cloud/consoleproxy/ConsoleProxyService.java | 25 +
.../consoleproxy/StaticConsoleProxyManager.java | 87 +-
server/src/com/cloud/dao/EntityManagerImpl.java | 149 -
server/src/com/cloud/dc/AccountVlanMapVO.java | 65 -
server/src/com/cloud/dc/ClusterDetailsDao.java | 32 -
.../src/com/cloud/dc/ClusterDetailsDaoImpl.java | 125 -
server/src/com/cloud/dc/ClusterDetailsVO.java | 74 -
server/src/com/cloud/dc/ClusterVO.java | 189 -
server/src/com/cloud/dc/ClusterVSMMapVO.java | 62 -
.../src/com/cloud/dc/DataCenterIpAddressVO.java | 115 -
.../dc/DataCenterLinkLocalIpAddressVO.java | 108 -
server/src/com/cloud/dc/DataCenterVO.java | 460 -
server/src/com/cloud/dc/DataCenterVnetVO.java | 109 -
server/src/com/cloud/dc/DcDetailVO.java | 73 -
.../src/com/cloud/dc/DedicatedResourceVO.java | 155 +
server/src/com/cloud/dc/HostPodVO.java | 197 -
server/src/com/cloud/dc/PodCluster.java | 67 -
server/src/com/cloud/dc/PodVlanMapVO.java | 62 -
server/src/com/cloud/dc/PodVlanVO.java | 98 -
.../com/cloud/dc/StorageNetworkIpAddressVO.java | 120 -
.../com/cloud/dc/StorageNetworkIpRangeVO.java | 184 -
server/src/com/cloud/dc/VlanVO.java | 196 -
.../src/com/cloud/dc/dao/AccountVlanMapDao.java | 30 -
.../com/cloud/dc/dao/AccountVlanMapDaoImpl.java | 75 -
server/src/com/cloud/dc/dao/ClusterDao.java | 37 -
server/src/com/cloud/dc/dao/ClusterDaoImpl.java | 241 -
.../src/com/cloud/dc/dao/ClusterVSMMapDao.java | 29 -
.../com/cloud/dc/dao/ClusterVSMMapDaoImpl.java | 95 -
server/src/com/cloud/dc/dao/DataCenterDao.java | 80 -
.../src/com/cloud/dc/dao/DataCenterDaoImpl.java | 404 -
.../cloud/dc/dao/DataCenterIpAddressDao.java | 38 -
.../dc/dao/DataCenterIpAddressDaoImpl.java | 225 -
.../dc/dao/DataCenterLinkLocalIpAddressDao.java | 32 -
.../DataCenterLinkLocalIpAddressDaoImpl.java | 188 -
.../src/com/cloud/dc/dao/DataCenterVnetDao.java | 38 -
.../com/cloud/dc/dao/DataCenterVnetDaoImpl.java | 186 -
server/src/com/cloud/dc/dao/DcDetailsDao.java | 32 -
.../src/com/cloud/dc/dao/DcDetailsDaoImpl.java | 97 -
.../com/cloud/dc/dao/DedicatedResourceDao.java | 58 +
.../cloud/dc/dao/DedicatedResourceDaoImpl.java | 376 +
server/src/com/cloud/dc/dao/HostPodDao.java | 35 -
server/src/com/cloud/dc/dao/HostPodDaoImpl.java | 134 -
server/src/com/cloud/dc/dao/PodVlanDao.java | 30 -
server/src/com/cloud/dc/dao/PodVlanDaoImpl.java | 139 -
server/src/com/cloud/dc/dao/PodVlanMapDao.java | 30 -
.../src/com/cloud/dc/dao/PodVlanMapDaoImpl.java | 75 -
.../dc/dao/StorageNetworkIpAddressDao.java | 32 -
.../dc/dao/StorageNetworkIpAddressDaoImpl.java | 114 -
.../cloud/dc/dao/StorageNetworkIpRangeDao.java | 32 -
.../dc/dao/StorageNetworkIpRangeDaoImpl.java | 78 -
server/src/com/cloud/dc/dao/VlanDao.java | 53 -
server/src/com/cloud/dc/dao/VlanDaoImpl.java | 315 -
.../deploy/AbstractDeployPlannerSelector.java | 84 -
.../com/cloud/deploy/DeployPlannerSelector.java | 24 -
.../deploy/DeploymentPlanningManagerImpl.java | 1281 +
.../src/com/cloud/deploy/FirstFitPlanner.java | 643 +-
.../deploy/HypervisorVmPlannerSelector.java | 54 -
.../cloud/deploy/PlannerHostReservationVO.java | 117 +
.../deploy/dao/PlannerHostReservationDao.java | 32 +
.../dao/PlannerHostReservationDaoImpl.java | 76 +
server/src/com/cloud/domain/DomainVO.java | 215 -
server/src/com/cloud/domain/dao/DomainDao.java | 34 -
.../src/com/cloud/domain/dao/DomainDaoImpl.java | 275 -
.../com/cloud/event/ActionEventInterceptor.java | 31 +-
.../src/com/cloud/event/ActionEventUtils.java | 69 +-
server/src/com/cloud/event/AlertGenerator.java | 8 +
server/src/com/cloud/event/EventUtils.java | 118 -
server/src/com/cloud/event/UsageEventUtils.java | 144 -
.../com/cloud/ha/CheckOnAgentInvestigator.java | 8 +-
server/src/com/cloud/ha/FenceBuilder.java | 31 -
.../com/cloud/ha/HighAvailabilityManager.java | 114 -
.../ha/HighAvailabilityManagerExtImpl.java | 3 +-
.../cloud/ha/HighAvailabilityManagerImpl.java | 207 +-
server/src/com/cloud/ha/Investigator.java | 33 -
server/src/com/cloud/ha/KVMFencer.java | 6 +-
.../ha/ManagementIPSystemVMInvestigator.java | 12 +-
server/src/com/cloud/ha/RecreatableFencer.java | 8 +-
.../com/cloud/ha/UserVmDomRInvestigator.java | 18 +-
.../src/com/cloud/ha/XenServerInvestigator.java | 9 +-
server/src/com/cloud/host/dao/HostDao.java | 83 -
server/src/com/cloud/host/dao/HostDaoImpl.java | 920 -
.../src/com/cloud/host/dao/HostDetailsDao.java | 32 -
.../com/cloud/host/dao/HostDetailsDaoImpl.java | 110 -
server/src/com/cloud/host/dao/HostTagsDao.java | 30 -
.../src/com/cloud/host/dao/HostTagsDaoImpl.java | 75 -
.../hypervisor/CloudZonesStartupProcessor.java | 3 +-
.../cloud/hypervisor/HypervisorGuruBase.java | 49 +-
.../cloud/hypervisor/HypervisorGuruManager.java | 27 -
.../hypervisor/HypervisorGuruManagerImpl.java | 14 +-
server/src/com/cloud/hypervisor/KVMGuru.java | 4 +-
server/src/com/cloud/hypervisor/LXCGuru.java | 4 +-
.../dao/HypervisorCapabilitiesDao.java | 36 -
.../dao/HypervisorCapabilitiesDaoImpl.java | 98 -
.../com/cloud/hypervisor/guru/HypervGuru.java | 73 -
.../hyperv/HypervServerDiscoverer.java | 243 -
.../kvm/discoverer/LibvirtServerDiscoverer.java | 102 +-
server/src/com/cloud/keystore/KeystoreDao.java | 29 -
.../src/com/cloud/keystore/KeystoreDaoImpl.java | 118 -
server/src/com/cloud/keystore/KeystoreVO.java | 101 -
server/src/com/cloud/maint/AgentUpgradeVO.java | 63 -
server/src/com/cloud/maint/UpgradeManager.java | 47 -
.../src/com/cloud/maint/UpgradeManagerImpl.java | 189 -
.../com/cloud/maint/UpgradeManagerMBean.java | 23 -
server/src/com/cloud/maint/UpgradeMonitor.java | 34 -
server/src/com/cloud/maint/Version.java | 66 -
.../com/cloud/maint/dao/AgentUpgradeDao.java | 23 -
.../cloud/maint/dao/AgentUpgradeDaoImpl.java | 29 -
.../cloud/metadata/ResourceMetaDataManager.java | 22 +
.../metadata/ResourceMetaDataManagerImpl.java | 250 +
.../cloud/migration/Db21to22MigrationUtil.java | 228 -
.../migration/Db22beta4to22GAMigrationUtil.java | 128 -
.../com/cloud/migration/DiskOffering20Dao.java | 22 -
.../cloud/migration/DiskOffering20DaoImpl.java | 27 -
.../com/cloud/migration/DiskOffering20VO.java | 113 -
.../com/cloud/migration/DiskOffering21Dao.java | 23 -
.../cloud/migration/DiskOffering21DaoImpl.java | 27 -
.../com/cloud/migration/DiskOffering21VO.java | 257 -
.../cloud/migration/ServiceOffering20Dao.java | 22 -
.../migration/ServiceOffering20DaoImpl.java | 27 -
.../cloud/migration/ServiceOffering20VO.java | 199 -
.../cloud/migration/ServiceOffering21Dao.java | 22 -
.../migration/ServiceOffering21DaoImpl.java | 27 -
.../cloud/migration/ServiceOffering21VO.java | 178 -
.../network/ExteralIpAddressAllocator.java | 165 -
.../network/ExternalDeviceUsageManager.java | 33 +
.../network/ExternalDeviceUsageManagerImpl.java | 675 +
.../ExternalFirewallDeviceManagerImpl.java | 85 +-
.../network/ExternalIpAddressAllocator.java | 166 +
.../ExternalLoadBalancerDeviceManager.java | 6 +-
.../ExternalLoadBalancerDeviceManagerImpl.java | 139 +-
.../ExternalLoadBalancerUsageManager.java | 33 -
.../ExternalLoadBalancerUsageManagerImpl.java | 669 -
.../ExternalNetworkDeviceManagerImpl.java | 3 +-
.../src/com/cloud/network/IpAddrAllocator.java | 2 +-
.../com/cloud/network/IpAddressManagerImpl.java | 1925 +
.../cloud/network/Ipv6AddressManagerImpl.java | 3 +-
.../cloud/network/LBHealthCheckPolicyVO.java | 157 -
.../src/com/cloud/network/NetworkManager.java | 350 -
.../com/cloud/network/NetworkManagerImpl.java | 3747 -
.../src/com/cloud/network/NetworkModelImpl.java | 317 +-
.../com/cloud/network/NetworkRuleApplier.java | 28 -
.../com/cloud/network/NetworkServiceImpl.java | 1436 +-
.../com/cloud/network/NetworkStateListener.java | 99 -
.../cloud/network/NetworkUsageManagerImpl.java | 36 +-
.../com/cloud/network/SshKeysDistriMonitor.java | 7 +-
.../network/StorageNetworkManagerImpl.java | 5 +-
.../src/com/cloud/network/UserIpv6Address.java | 52 -
.../com/cloud/network/UserIpv6AddressVO.java | 188 -
server/src/com/cloud/network/addr/PublicIp.java | 238 -
.../com/cloud/network/as/AutoScaleManager.java | 32 +-
.../cloud/network/as/AutoScaleManagerImpl.java | 69 +-
.../as/AutoScalePolicyConditionMapVO.java | 61 -
.../com/cloud/network/as/AutoScalePolicyVO.java | 134 -
.../network/as/AutoScaleVmGroupPolicyMapVO.java | 64 -
.../cloud/network/as/AutoScaleVmGroupVO.java | 191 -
.../cloud/network/as/AutoScaleVmProfileVO.java | 218 -
.../src/com/cloud/network/as/ConditionVO.java | 129 -
server/src/com/cloud/network/as/CounterVO.java | 111 -
.../as/dao/AutoScalePolicyConditionMapDao.java | 28 -
.../dao/AutoScalePolicyConditionMapDaoImpl.java | 61 -
.../network/as/dao/AutoScalePolicyDao.java | 24 -
.../network/as/dao/AutoScalePolicyDaoImpl.java | 38 -
.../network/as/dao/AutoScaleVmGroupDao.java | 28 -
.../network/as/dao/AutoScaleVmGroupDaoImpl.java | 65 -
.../as/dao/AutoScaleVmGroupPolicyMapDao.java | 30 -
.../dao/AutoScaleVmGroupPolicyMapDaoImpl.java | 77 -
.../network/as/dao/AutoScaleVmProfileDao.java | 25 -
.../as/dao/AutoScaleVmProfileDaoImpl.java | 38 -
.../com/cloud/network/as/dao/ConditionDao.java | 28 -
.../cloud/network/as/dao/ConditionDaoImpl.java | 56 -
.../com/cloud/network/as/dao/CounterDao.java | 29 -
.../cloud/network/as/dao/CounterDaoImpl.java | 70 -
.../network/dao/ExternalFirewallDeviceDao.java | 58 -
.../dao/ExternalFirewallDeviceDaoImpl.java | 96 -
.../network/dao/ExternalFirewallDeviceVO.java | 161 -
.../dao/ExternalLoadBalancerDeviceDao.java | 74 -
.../dao/ExternalLoadBalancerDeviceDaoImpl.java | 127 -
.../dao/ExternalLoadBalancerDeviceVO.java | 227 -
.../network/dao/FirewallRulesCidrsDao.java | 29 -
.../network/dao/FirewallRulesCidrsDaoImpl.java | 70 -
.../cloud/network/dao/FirewallRulesCidrsVO.java | 65 -
.../com/cloud/network/dao/FirewallRulesDao.java | 65 -
.../cloud/network/dao/FirewallRulesDaoImpl.java | 352 -
.../src/com/cloud/network/dao/IPAddressDao.java | 71 -
.../com/cloud/network/dao/IPAddressDaoImpl.java | 376 -
.../src/com/cloud/network/dao/IPAddressVO.java | 309 -
.../dao/InlineLoadBalancerNicMapDao.java | 24 -
.../dao/InlineLoadBalancerNicMapDaoImpl.java | 46 -
.../network/dao/InlineLoadBalancerNicMapVO.java | 60 -
.../network/dao/LBHealthCheckPolicyDao.java | 35 -
.../network/dao/LBHealthCheckPolicyDaoImpl.java | 71 -
.../network/dao/LBStickinessPolicyDao.java | 34 -
.../network/dao/LBStickinessPolicyDaoImpl.java | 69 -
.../cloud/network/dao/LBStickinessPolicyVO.java | 145 -
.../com/cloud/network/dao/LoadBalancerDao.java | 36 -
.../cloud/network/dao/LoadBalancerDaoImpl.java | 137 -
.../cloud/network/dao/LoadBalancerVMMapDao.java | 31 -
.../network/dao/LoadBalancerVMMapDaoImpl.java | 97 -
.../cloud/network/dao/LoadBalancerVMMapVO.java | 89 -
.../com/cloud/network/dao/LoadBalancerVO.java | 98 -
.../cloud/network/dao/NetworkAccountDao.java | 22 -
.../network/dao/NetworkAccountDaoImpl.java | 29 -
.../com/cloud/network/dao/NetworkAccountVO.java | 72 -
.../src/com/cloud/network/dao/NetworkDao.java | 114 -
.../com/cloud/network/dao/NetworkDaoImpl.java | 621 -
.../com/cloud/network/dao/NetworkDomainDao.java | 27 -
.../cloud/network/dao/NetworkDomainDaoImpl.java | 75 -
.../com/cloud/network/dao/NetworkDomainVO.java | 72 -
.../network/dao/NetworkExternalFirewallDao.java | 38 -
.../dao/NetworkExternalFirewallDaoImpl.java | 61 -
.../network/dao/NetworkExternalFirewallVO.java | 88 -
.../dao/NetworkExternalLoadBalancerDao.java | 38 -
.../dao/NetworkExternalLoadBalancerDaoImpl.java | 62 -
.../dao/NetworkExternalLoadBalancerVO.java | 89 -
.../src/com/cloud/network/dao/NetworkOpDao.java | 26 -
.../com/cloud/network/dao/NetworkOpDaoImpl.java | 84 -
.../src/com/cloud/network/dao/NetworkOpVO.java | 76 -
.../cloud/network/dao/NetworkRuleConfigDao.java | 26 -
.../network/dao/NetworkRuleConfigDaoImpl.java | 51 -
.../cloud/network/dao/NetworkRuleConfigVO.java | 93 -
.../cloud/network/dao/NetworkServiceMapDao.java | 38 -
.../network/dao/NetworkServiceMapDaoImpl.java | 167 -
.../cloud/network/dao/NetworkServiceMapVO.java | 92 -
server/src/com/cloud/network/dao/NetworkVO.java | 543 -
.../cloud/network/dao/PhysicalNetworkDao.java | 28 -
.../network/dao/PhysicalNetworkDaoImpl.java | 79 -
.../PhysicalNetworkIsolationMethodDaoImpl.java | 70 -
.../dao/PhysicalNetworkIsolationMethodVO.java | 68 -
.../dao/PhysicalNetworkServiceProviderDao.java | 28 -
.../PhysicalNetworkServiceProviderDaoImpl.java | 131 -
.../dao/PhysicalNetworkServiceProviderVO.java | 322 -
.../network/dao/PhysicalNetworkTagDaoImpl.java | 63 -
.../cloud/network/dao/PhysicalNetworkTagVO.java | 68 -
.../dao/PhysicalNetworkTrafficTypeDao.java | 33 -
.../dao/PhysicalNetworkTrafficTypeDaoImpl.java | 143 -
.../dao/PhysicalNetworkTrafficTypeVO.java | 149 -
.../cloud/network/dao/PhysicalNetworkVO.java | 234 -
.../com/cloud/network/dao/PortProfileDao.java | 50 -
.../cloud/network/dao/PortProfileDaoImpl.java | 89 -
.../com/cloud/network/dao/PortProfileVO.java | 204 -
.../cloud/network/dao/RemoteAccessVpnDao.java | 30 -
.../network/dao/RemoteAccessVpnDaoImpl.java | 84 -
.../cloud/network/dao/RemoteAccessVpnVO.java | 142 -
.../com/cloud/network/dao/RouterNetworkDao.java | 26 -
.../cloud/network/dao/RouterNetworkDaoImpl.java | 62 -
.../com/cloud/network/dao/RouterNetworkVO.java | 75 -
.../dao/Site2SiteCustomerGatewayDao.java | 27 -
.../dao/Site2SiteCustomerGatewayDaoImpl.java | 66 -
.../network/dao/Site2SiteCustomerGatewayVO.java | 206 -
.../network/dao/Site2SiteVpnConnectionDao.java | 29 -
.../dao/Site2SiteVpnConnectionDaoImpl.java | 97 -
.../network/dao/Site2SiteVpnConnectionVO.java | 143 -
.../network/dao/Site2SiteVpnGatewayDao.java | 23 -
.../network/dao/Site2SiteVpnGatewayDaoImpl.java | 50 -
.../network/dao/Site2SiteVpnGatewayVO.java | 114 -
.../cloud/network/dao/UserIpv6AddressDao.java | 41 -
.../network/dao/UserIpv6AddressDaoImpl.java | 122 -
.../network/dao/VirtualRouterProviderDao.java | 31 -
.../dao/VirtualRouterProviderDaoImpl.java | 79 -
.../src/com/cloud/network/dao/VpnUserDao.java | 28 -
.../com/cloud/network/dao/VpnUserDaoImpl.java | 87 -
.../element/CloudZonesNetworkElement.java | 38 +-
.../network/element/SecurityGroupElement.java | 4 +-
.../network/element/VirtualRouterElement.java | 204 +-
.../element/VirtualRouterProviderVO.java | 120 -
.../element/VpcVirtualRouterElement.java | 91 +-
.../network/firewall/FirewallManagerImpl.java | 182 +-
.../cloud/network/guru/ControlNetworkGuru.java | 25 +-
.../cloud/network/guru/DirectNetworkGuru.java | 46 +-
.../network/guru/DirectPodBasedNetworkGuru.java | 35 +-
.../network/guru/ExternalGuestNetworkGuru.java | 93 +-
.../cloud/network/guru/GuestNetworkGuru.java | 143 +-
.../cloud/network/guru/PodBasedNetworkGuru.java | 10 +-
.../cloud/network/guru/PrivateNetworkGuru.java | 36 +-
.../cloud/network/guru/PublicNetworkGuru.java | 30 +-
.../cloud/network/guru/StorageNetworkGuru.java | 10 +-
.../cloud/network/lb/LBHealthCheckManager.java | 4 +-
.../network/lb/LBHealthCheckManagerImpl.java | 12 +-
.../network/lb/LoadBalancingRulesManager.java | 55 -
.../lb/LoadBalancingRulesManagerImpl.java | 578 +-
.../router/VirtualNetworkApplianceManager.java | 58 +-
.../VirtualNetworkApplianceManagerImpl.java | 1100 +-
.../VpcVirtualNetworkApplianceManager.java | 9 +-
.../VpcVirtualNetworkApplianceManagerImpl.java | 387 +-
.../cloud/network/rules/FirewallManager.java | 88 -
.../com/cloud/network/rules/FirewallRuleVO.java | 270 -
.../network/rules/PortForwardingRuleVO.java | 96 -
.../com/cloud/network/rules/RulesManager.java | 90 -
.../cloud/network/rules/RulesManagerImpl.java | 363 +-
.../cloud/network/rules/StaticNatRuleImpl.java | 147 -
.../rules/dao/PortForwardingRulesDao.java | 47 -
.../rules/dao/PortForwardingRulesDaoImpl.java | 162 -
.../network/security/SecurityGroupListener.java | 4 +-
.../security/SecurityGroupManagerImpl.java | 74 +-
.../network/security/dao/SecurityGroupDao.java | 30 -
.../security/dao/SecurityGroupDaoImpl.java | 136 -
.../security/dao/SecurityGroupRuleDao.java | 35 -
.../security/dao/SecurityGroupRuleDaoImpl.java | 176 -
.../security/dao/SecurityGroupRulesDao.java | 48 -
.../security/dao/SecurityGroupRulesDaoImpl.java | 87 -
.../security/dao/SecurityGroupVMMapDao.java | 38 -
.../security/dao/SecurityGroupVMMapDaoImpl.java | 166 -
.../security/dao/SecurityGroupWorkDao.java | 49 -
.../security/dao/SecurityGroupWorkDaoImpl.java | 242 -
.../network/security/dao/VmRulesetLogDao.java | 29 -
.../security/dao/VmRulesetLogDaoImpl.java | 200 -
.../cloud/network/vpc/NetworkACLManager.java | 40 -
.../network/vpc/NetworkACLManagerImpl.java | 647 +-
.../network/vpc/NetworkACLServiceImpl.java | 546 +
.../network/vpc/PrivateGatewayProfile.java | 13 +-
.../com/cloud/network/vpc/PrivateIpAddress.java | 7 +
.../src/com/cloud/network/vpc/PrivateIpVO.java | 95 -
.../com/cloud/network/vpc/StaticRouteVO.java | 141 -
.../src/com/cloud/network/vpc/VpcGatewayVO.java | 196 -
.../src/com/cloud/network/vpc/VpcManager.java | 165 -
.../com/cloud/network/vpc/VpcManagerImpl.java | 410 +-
.../network/vpc/VpcOfferingServiceMapVO.java | 89 -
.../com/cloud/network/vpc/VpcOfferingVO.java | 151 -
.../com/cloud/network/vpc/VpcServiceMapVO.java | 90 -
server/src/com/cloud/network/vpc/VpcVO.java | 181 -
.../com/cloud/network/vpc/dao/PrivateIpDao.java | 75 -
.../cloud/network/vpc/dao/PrivateIpDaoImpl.java | 156 -
.../cloud/network/vpc/dao/StaticRouteDao.java | 35 -
.../network/vpc/dao/StaticRouteDaoImpl.java | 119 -
.../src/com/cloud/network/vpc/dao/VpcDao.java | 47 -
.../com/cloud/network/vpc/dao/VpcDaoImpl.java | 152 -
.../cloud/network/vpc/dao/VpcGatewayDao.java | 26 -
.../network/vpc/dao/VpcGatewayDaoImpl.java | 62 -
.../cloud/network/vpc/dao/VpcOfferingDao.java | 32 -
.../network/vpc/dao/VpcOfferingDaoImpl.java | 71 -
.../vpc/dao/VpcOfferingServiceMapDao.java | 41 -
.../vpc/dao/VpcOfferingServiceMapDaoImpl.java | 119 -
.../cloud/network/vpc/dao/VpcServiceMapDao.java | 40 -
.../network/vpc/dao/VpcServiceMapDaoImpl.java | 115 -
.../network/vpn/RemoteAccessVpnManagerImpl.java | 85 +-
.../network/vpn/Site2SiteVpnManagerImpl.java | 41 +-
.../offerings/NetworkOfferingServiceMapVO.java | 94 -
.../com/cloud/offerings/NetworkOfferingVO.java | 381 -
.../cloud/offerings/dao/NetworkOfferingDao.java | 60 -
.../offerings/dao/NetworkOfferingDaoImpl.java | 169 -
.../dao/NetworkOfferingServiceMapDao.java | 50 -
.../dao/NetworkOfferingServiceMapDaoImpl.java | 171 -
.../com/cloud/projects/ProjectAccountVO.java | 96 -
.../com/cloud/projects/ProjectInvitationVO.java | 150 -
.../com/cloud/projects/ProjectManagerImpl.java | 66 +-
server/src/com/cloud/projects/ProjectVO.java | 163 -
.../cloud/projects/dao/ProjectAccountDao.java | 43 -
.../projects/dao/ProjectAccountDaoImpl.java | 157 -
.../src/com/cloud/projects/dao/ProjectDao.java | 37 -
.../com/cloud/projects/dao/ProjectDaoImpl.java | 124 -
.../projects/dao/ProjectInvitationDao.java | 44 -
.../projects/dao/ProjectInvitationDaoImpl.java | 171 -
server/src/com/cloud/resource/Discoverer.java | 51 -
.../src/com/cloud/resource/DiscovererBase.java | 4 +-
.../src/com/cloud/resource/ResourceManager.java | 153 -
.../com/cloud/resource/ResourceManagerImpl.java | 1691 +-
.../cloud/resource/ResourceStateAdapter.java | 63 -
.../resourcelimit/ResourceLimitManagerImpl.java | 62 +-
.../com/cloud/secstorage/CommandExecLogDao.java | 25 -
.../cloud/secstorage/CommandExecLogDaoImpl.java | 49 -
.../com/cloud/secstorage/CommandExecLogVO.java | 112 -
.../PremiumSecondaryStorageManagerImpl.java | 6 +-
.../com/cloud/server/ConfigurationServer.java | 5 +
.../cloud/server/ConfigurationServerImpl.java | 160 +-
server/src/com/cloud/server/Criteria.java | 12 +-
.../com/cloud/server/LockMasterListener.java | 51 +
.../src/com/cloud/server/ManagementServer.java | 33 +-
.../com/cloud/server/ManagementServerImpl.java | 1949 +-
server/src/com/cloud/server/StatsCollector.java | 421 +-
.../com/cloud/service/ServiceOfferingVO.java | 211 -
.../cloud/service/dao/ServiceOfferingDao.java | 34 -
.../service/dao/ServiceOfferingDaoImpl.java | 157 -
.../com/cloud/servlet/CloudStartupServlet.java | 9 +-
.../ConsoleProxyPasswordBasedEncryptor.java | 99 +-
.../com/cloud/servlet/ConsoleProxyServlet.java | 65 +-
.../cloud/servlet/RegisterCompleteServlet.java | 5 +-
.../cloud/storage/CreateSnapshotPayload.java | 50 +
.../cloud/storage/LocalStoragePoolListener.java | 4 +-
.../src/com/cloud/storage/OCFS2ManagerImpl.java | 48 +-
.../src/com/cloud/storage/StorageManager.java | 22 +-
.../com/cloud/storage/StorageManagerImpl.java | 1643 +-
.../storage/StoragePoolAutomationImpl.java | 258 +-
.../src/com/cloud/storage/TemplateProfile.java | 89 +-
.../com/cloud/storage/VolumeApiServiceImpl.java | 1682 +
server/src/com/cloud/storage/VolumeManager.java | 100 -
.../com/cloud/storage/VolumeManagerImpl.java | 2496 -
.../com/cloud/storage/dao/DiskOfferingDao.java | 31 -
.../cloud/storage/dao/DiskOfferingDaoImpl.java | 152 -
.../cloud/storage/dao/GuestOSCategoryDao.java | 24 -
.../storage/dao/GuestOSCategoryDaoImpl.java | 34 -
.../src/com/cloud/storage/dao/GuestOSDao.java | 26 -
.../com/cloud/storage/dao/GuestOSDaoImpl.java | 51 -
.../cloud/storage/dao/LaunchPermissionDao.java | 61 -
.../storage/dao/LaunchPermissionDaoImpl.java | 158 -
server/src/com/cloud/storage/dao/S3Dao.java | 29 -
server/src/com/cloud/storage/dao/S3DaoImpl.java | 50 -
.../src/com/cloud/storage/dao/SnapshotDao.java | 54 -
.../com/cloud/storage/dao/SnapshotDaoImpl.java | 357 -
.../cloud/storage/dao/SnapshotPolicyDao.java | 38 -
.../storage/dao/SnapshotPolicyDaoImpl.java | 105 -
.../cloud/storage/dao/SnapshotScheduleDao.java | 41 -
.../storage/dao/SnapshotScheduleDaoImpl.java | 134 -
.../storage/dao/StoragePoolDetailsDaoImpl.java | 75 -
.../cloud/storage/dao/StoragePoolHostDao.java | 42 -
.../storage/dao/StoragePoolHostDaoImpl.java | 184 -
.../cloud/storage/dao/StoragePoolWorkDao.java | 38 -
.../storage/dao/StoragePoolWorkDaoImpl.java | 136 -
server/src/com/cloud/storage/dao/SwiftDao.java | 31 -
.../src/com/cloud/storage/dao/SwiftDaoImpl.java | 58 -
server/src/com/cloud/storage/dao/UploadDao.java | 36 -
.../com/cloud/storage/dao/UploadDaoImpl.java | 92 -
.../com/cloud/storage/dao/VMTemplateDao.java | 84 -
.../cloud/storage/dao/VMTemplateDaoImpl.java | 1122 -
.../cloud/storage/dao/VMTemplateDetailsDao.java | 32 -
.../storage/dao/VMTemplateDetailsDaoImpl.java | 99 -
.../cloud/storage/dao/VMTemplateHostDao.java | 67 -
.../storage/dao/VMTemplateHostDaoImpl.java | 427 -
.../cloud/storage/dao/VMTemplatePoolDao.java | 49 -
.../storage/dao/VMTemplatePoolDaoImpl.java | 304 -
.../com/cloud/storage/dao/VMTemplateS3Dao.java | 36 -
.../cloud/storage/dao/VMTemplateS3DaoImpl.java | 105 -
.../cloud/storage/dao/VMTemplateSwiftDao.java | 37 -
.../storage/dao/VMTemplateSwiftDaoImpl.java | 87 -
.../cloud/storage/dao/VMTemplateZoneDao.java | 33 -
.../storage/dao/VMTemplateZoneDaoImpl.java | 89 -
server/src/com/cloud/storage/dao/VolumeDao.java | 92 -
.../com/cloud/storage/dao/VolumeDaoImpl.java | 459 -
.../com/cloud/storage/dao/VolumeHostDao.java | 40 -
.../cloud/storage/dao/VolumeHostDaoImpl.java | 165 -
.../download/DownloadAbandonedState.java | 7 +-
.../storage/download/DownloadActiveState.java | 4 +-
.../storage/download/DownloadCompleteState.java | 3 +-
.../storage/download/DownloadErrorState.java | 8 +-
.../storage/download/DownloadListener.java | 432 +-
.../cloud/storage/download/DownloadMonitor.java | 29 +-
.../storage/download/DownloadMonitorImpl.java | 1132 +-
.../cloud/storage/download/DownloadState.java | 2 +-
.../storage/download/NotDownloadedState.java | 3 +-
.../storage/listener/SnapshotStateListener.java | 6 +
.../storage/listener/StoragePoolMonitor.java | 11 +-
.../storage/listener/StorageSyncListener.java | 4 +-
.../storage/listener/VolumeStateListener.java | 6 +
.../resource/DummySecondaryStorageResource.java | 14 +-
server/src/com/cloud/storage/s3/S3Manager.java | 64 -
.../src/com/cloud/storage/s3/S3ManagerImpl.java | 657 -
.../secondary/SecondaryStorageDiscoverer.java | 322 -
.../secondary/SecondaryStorageListener.java | 4 +-
.../secondary/SecondaryStorageManagerImpl.java | 576 +-
.../secondary/SecondaryStorageVmManager.java | 14 +-
.../cloud/storage/snapshot/SnapshotManager.java | 18 +-
.../storage/snapshot/SnapshotManagerImpl.java | 600 +-
.../storage/snapshot/SnapshotSchedulerImpl.java | 48 +-
.../com/cloud/storage/swift/SwiftManager.java | 57 -
.../cloud/storage/swift/SwiftManagerImpl.java | 291 -
.../cloud/storage/upload/UploadListener.java | 824 +-
.../com/cloud/storage/upload/UploadMonitor.java | 20 +-
.../cloud/storage/upload/UploadMonitorImpl.java | 305 +-
server/src/com/cloud/tags/ResourceTagVO.java | 160 -
.../cloud/tags/TaggedResourceManagerImpl.java | 35 +-
.../src/com/cloud/tags/dao/ResourceTagDao.java | 37 -
.../com/cloud/tags/dao/ResourceTagsDaoImpl.java | 62 -
.../template/HypervisorTemplateAdapter.java | 600 +-
server/src/com/cloud/template/S3SyncTask.java | 94 -
.../src/com/cloud/template/TemplateAdapter.java | 20 +-
.../com/cloud/template/TemplateAdapterBase.java | 562 +-
.../src/com/cloud/template/TemplateManager.java | 120 -
.../com/cloud/template/TemplateManagerImpl.java | 2233 +-
server/src/com/cloud/test/DatabaseConfig.java | 36 +-
.../src/com/cloud/upgrade/DatabaseCreator.java | 233 -
.../cloud/upgrade/DatabaseIntegrityChecker.java | 264 -
.../cloud/upgrade/DatabaseUpgradeChecker.java | 369 -
.../upgrade/PremiumDatabaseUpgradeChecker.java | 139 -
server/src/com/cloud/upgrade/dao/DbUpgrade.java | 45 -
.../com/cloud/upgrade/dao/DbUpgradeUtils.java | 106 -
.../com/cloud/upgrade/dao/Upgrade217to218.java | 66 -
.../com/cloud/upgrade/dao/Upgrade218to22.java | 2385 -
.../upgrade/dao/Upgrade218to224DomainVlans.java | 140 -
.../upgrade/dao/Upgrade218to22Premium.java | 100 -
.../cloud/upgrade/dao/Upgrade2210to2211.java | 64 -
.../cloud/upgrade/dao/Upgrade2211to2212.java | 139 -
.../upgrade/dao/Upgrade2211to2212Premium.java | 55 -
.../cloud/upgrade/dao/Upgrade2212to2213.java | 104 -
.../cloud/upgrade/dao/Upgrade2213to2214.java | 308 -
.../com/cloud/upgrade/dao/Upgrade2214to30.java | 1326 -
.../com/cloud/upgrade/dao/Upgrade221to222.java | 66 -
.../upgrade/dao/Upgrade221to222Premium.java | 61 -
.../com/cloud/upgrade/dao/Upgrade222to224.java | 610 -
.../upgrade/dao/Upgrade222to224Premium.java | 87 -
.../com/cloud/upgrade/dao/Upgrade224to225.java | 351 -
.../com/cloud/upgrade/dao/Upgrade225to226.java | 108 -
.../com/cloud/upgrade/dao/Upgrade227to228.java | 157 -
.../upgrade/dao/Upgrade227to228Premium.java | 132 -
.../com/cloud/upgrade/dao/Upgrade228to229.java | 138 -
.../com/cloud/upgrade/dao/Upgrade229to2210.java | 194 -
.../com/cloud/upgrade/dao/Upgrade301to302.java | 229 -
.../com/cloud/upgrade/dao/Upgrade302to40.java | 1033 -
.../com/cloud/upgrade/dao/Upgrade30to301.java | 124 -
.../com/cloud/upgrade/dao/Upgrade30xBase.java | 311 -
.../com/cloud/upgrade/dao/Upgrade40to41.java | 164 -
.../com/cloud/upgrade/dao/Upgrade410to420.java | 271 -
.../upgrade/dao/UpgradeSnapshot217to224.java | 60 -
.../upgrade/dao/UpgradeSnapshot223to224.java | 60 -
.../src/com/cloud/upgrade/dao/VersionDao.java | 25 -
.../com/cloud/upgrade/dao/VersionDaoImpl.java | 172 -
server/src/com/cloud/upgrade/dao/VersionVO.java | 91 -
.../usage/ExternalPublicIpStatisticsVO.java | 98 -
.../src/com/cloud/usage/UsageIPAddressVO.java | 121 -
server/src/com/cloud/usage/UsageJobVO.java | 180 -
.../cloud/usage/UsageLoadBalancerPolicyVO.java | 91 -
.../com/cloud/usage/UsageNetworkOfferingVO.java | 105 -
server/src/com/cloud/usage/UsageNetworkVO.java | 144 -
.../cloud/usage/UsagePortForwardingRuleVO.java | 91 -
.../com/cloud/usage/UsageSecurityGroupVO.java | 97 -
.../src/com/cloud/usage/UsageServiceImpl.java | 7 +-
server/src/com/cloud/usage/UsageStorageVO.java | 115 -
.../src/com/cloud/usage/UsageVMInstanceVO.java | 121 -
server/src/com/cloud/usage/UsageVO.java | 260 -
server/src/com/cloud/usage/UsageVPNUserVO.java | 105 -
server/src/com/cloud/usage/UsageVolumeVO.java | 115 -
.../dao/ExternalPublicIpStatisticsDao.java | 33 -
.../dao/ExternalPublicIpStatisticsDaoImpl.java | 77 -
server/src/com/cloud/usage/dao/UsageDao.java | 41 -
.../src/com/cloud/usage/dao/UsageDaoImpl.java | 272 -
.../com/cloud/usage/dao/UsageIPAddressDao.java | 28 -
.../cloud/usage/dao/UsageIPAddressDaoImpl.java | 145 -
server/src/com/cloud/usage/dao/UsageJobDao.java | 34 -
.../com/cloud/usage/dao/UsageJobDaoImpl.java | 200 -
.../usage/dao/UsageLoadBalancerPolicyDao.java | 29 -
.../dao/UsageLoadBalancerPolicyDaoImpl.java | 169 -
.../com/cloud/usage/dao/UsageNetworkDao.java | 27 -
.../cloud/usage/dao/UsageNetworkDaoImpl.java | 98 -
.../usage/dao/UsageNetworkOfferingDao.java | 28 -
.../usage/dao/UsageNetworkOfferingDaoImpl.java | 152 -
.../usage/dao/UsagePortForwardingRuleDao.java | 29 -
.../dao/UsagePortForwardingRuleDaoImpl.java | 169 -
.../cloud/usage/dao/UsageSecurityGroupDao.java | 28 -
.../usage/dao/UsageSecurityGroupDaoImpl.java | 151 -
.../com/cloud/usage/dao/UsageStorageDao.java | 31 -
.../cloud/usage/dao/UsageStorageDaoImpl.java | 211 -
.../com/cloud/usage/dao/UsageVMInstanceDao.java | 29 -
.../cloud/usage/dao/UsageVMInstanceDaoImpl.java | 137 -
.../com/cloud/usage/dao/UsageVPNUserDao.java | 28 -
.../cloud/usage/dao/UsageVPNUserDaoImpl.java | 150 -
.../src/com/cloud/usage/dao/UsageVolumeDao.java | 29 -
.../com/cloud/usage/dao/UsageVolumeDaoImpl.java | 178 -
server/src/com/cloud/user/AccountDetailVO.java | 75 -
.../src/com/cloud/user/AccountDetailsDao.java | 37 -
.../com/cloud/user/AccountDetailsDaoImpl.java | 96 -
server/src/com/cloud/user/AccountManager.java | 16 +-
.../src/com/cloud/user/AccountManagerImpl.java | 331 +-
.../src/com/cloud/user/DomainManagerImpl.java | 125 +-
server/src/com/cloud/user/dao/AccountDao.java | 52 -
.../src/com/cloud/user/dao/AccountDaoImpl.java | 267 -
.../src/com/cloud/user/dao/SSHKeyPairDao.java | 38 -
.../com/cloud/user/dao/SSHKeyPairDaoImpl.java | 85 -
.../src/com/cloud/user/dao/UserAccountDao.java | 27 -
.../com/cloud/user/dao/UserAccountDaoImpl.java | 69 -
server/src/com/cloud/user/dao/UserDao.java | 52 -
server/src/com/cloud/user/dao/UserDaoImpl.java | 131 -
.../com/cloud/user/dao/UserStatisticsDao.java | 35 -
.../cloud/user/dao/UserStatisticsDaoImpl.java | 137 -
.../src/com/cloud/user/dao/UserStatsLogDao.java | 23 -
.../com/cloud/user/dao/UserStatsLogDaoImpl.java | 31 -
.../cloud/uuididentity/dao/IdentityDaoImpl.java | 4 +-
.../vm/ClusteredVirtualMachineManagerImpl.java | 62 -
server/src/com/cloud/vm/ItWorkDao.java | 45 -
server/src/com/cloud/vm/ItWorkDaoImpl.java | 108 -
server/src/com/cloud/vm/ItWorkVO.java | 179 -
server/src/com/cloud/vm/NicVO.java | 363 -
.../com/cloud/vm/ReservationContextImpl.java | 102 -
.../src/com/cloud/vm/SystemVmLoadScanner.java | 7 +-
server/src/com/cloud/vm/UserVmManager.java | 18 +-
server/src/com/cloud/vm/UserVmManagerImpl.java | 1883 +-
.../src/com/cloud/vm/UserVmStateListener.java | 29 +-
server/src/com/cloud/vm/VirtualMachineGuru.java | 118 -
.../src/com/cloud/vm/VirtualMachineManager.java | 201 -
.../com/cloud/vm/VirtualMachineManagerImpl.java | 2950 -
.../com/cloud/vm/VirtualMachineProfileImpl.java | 266 -
.../src/com/cloud/vm/dao/ConsoleProxyDao.java | 47 -
.../com/cloud/vm/dao/ConsoleProxyDaoImpl.java | 353 -
.../src/com/cloud/vm/dao/DomainRouterDao.java | 149 -
.../com/cloud/vm/dao/DomainRouterDaoImpl.java | 358 -
.../src/com/cloud/vm/dao/InstanceGroupDao.java | 36 -
.../com/cloud/vm/dao/InstanceGroupDaoImpl.java | 80 -
.../com/cloud/vm/dao/InstanceGroupVMMapDao.java | 28 -
.../cloud/vm/dao/InstanceGroupVMMapDaoImpl.java | 75 -
server/src/com/cloud/vm/dao/NicDao.java | 68 -
server/src/com/cloud/vm/dao/NicDaoImpl.java | 232 -
.../src/com/cloud/vm/dao/NicSecondaryIpDao.java | 53 -
.../com/cloud/vm/dao/NicSecondaryIpDaoImpl.java | 138 -
.../src/com/cloud/vm/dao/NicSecondaryIpVO.java | 160 -
.../com/cloud/vm/dao/SecondaryStorageVmDao.java | 42 -
.../cloud/vm/dao/SecondaryStorageVmDaoImpl.java | 269 -
.../com/cloud/vm/dao/UserVmCloneSettingDao.java | 37 -
.../cloud/vm/dao/UserVmCloneSettingDaoImpl.java | 74 -
server/src/com/cloud/vm/dao/UserVmDao.java | 76 -
server/src/com/cloud/vm/dao/UserVmDaoImpl.java | 585 -
server/src/com/cloud/vm/dao/UserVmData.java | 723 -
.../src/com/cloud/vm/dao/UserVmDetailsDao.java | 32 -
.../com/cloud/vm/dao/UserVmDetailsDaoImpl.java | 99 -
server/src/com/cloud/vm/dao/VMInstanceDao.java | 119 -
.../src/com/cloud/vm/dao/VMInstanceDaoImpl.java | 628 -
.../cloud/vm/snapshot/VMSnapshotManager.java | 47 -
.../vm/snapshot/VMSnapshotManagerImpl.java | 104 +-
.../src/com/cloud/vm/snapshot/VMSnapshotVO.java | 224 -
.../cloud/vm/snapshot/dao/VMSnapshotDao.java | 39 -
.../vm/snapshot/dao/VMSnapshotDaoImpl.java | 161 -
.../affinity/AffinityGroupServiceImpl.java | 548 +
.../lb/ApplicationLoadBalancerManagerImpl.java | 531 +
.../apache/cloudstack/region/RegionSyncVO.java | 93 -
.../org/apache/cloudstack/region/RegionVO.java | 87 -
.../apache/cloudstack/region/dao/RegionDao.java | 27 -
.../cloudstack/region/dao/RegionDaoImpl.java | 48 -
.../region/gslb/GlobalLoadBalancerDaoImpl.java | 58 -
.../gslb/GlobalLoadBalancerLbRuleMapDao.java | 30 -
.../GlobalLoadBalancerLbRuleMapDaoImpl.java | 63 -
.../gslb/GlobalLoadBalancerLbRuleMapVO.java | 83 -
.../region/gslb/GlobalLoadBalancerRuleDao.java | 28 -
.../region/gslb/GlobalLoadBalancerRuleVO.java | 183 -
.../GlobalLoadBalancingRulesServiceImpl.java | 236 +-
.../region/gslb/GslbServiceProvider.java | 8 +-
server/test/async-job-component.xml | 1 +
.../com/cloud/agent/MockAgentManagerImpl.java | 197 -
.../com/cloud/alert/AlertControlsUnitTest.java | 10 +-
.../test/com/cloud/async/CleanupDelegate.java | 29 -
server/test/com/cloud/async/TestAsync.java | 281 -
.../com/cloud/async/TestAsyncJobManager.java | 252 -
.../com/cloud/async/TestSyncQueueManager.java | 208 -
.../configuration/ConfigurationManagerTest.java | 432 +
.../configuration/ValidateIpRangeTest.java | 72 +
.../com/cloud/event/EventControlsUnitTest.java | 3 +-
.../test/com/cloud/keystore/KeystoreTest.java | 4 +-
.../metadata/ResourceMetaDataManagerTest.java | 117 +
.../cloud/network/CreatePrivateNetworkTest.java | 193 +
.../network/DedicateGuestVlanRangesTest.java | 393 +
.../cloud/network/MockFirewallManagerImpl.java | 5 +
.../cloud/network/MockNetworkManagerImpl.java | 891 -
.../com/cloud/network/MockNetworkModelImpl.java | 62 +-
.../com/cloud/network/MockRulesManagerImpl.java | 314 -
.../com/cloud/network/NetworkManagerTest.java | 67 -
.../network/UpdatePhysicalNetworkTest.java | 74 +
.../network/firewall/FirewallManagerTest.java | 27 +-
.../security/SecurityGroupManagerImplTest.java | 76 +
.../SecurityGroupManagerTestConfiguration.java | 317 +-
.../security/SecurityGroupQueueTest.java | 2 +-
.../cloud/resource/MockResourceManagerImpl.java | 84 +-
.../server/ConfigurationServerImplTest.java | 61 +
.../snapshot/SnapshotDaoTestConfiguration.java | 144 +-
.../dao/StoragePoolDaoTestConfiguration.java | 106 +-
.../upgrade/AdvanceZone217To224UpgradeTest.java | 117 -
.../upgrade/AdvanceZone223To224UpgradeTest.java | 57 -
.../upgrade/BasicZone218To224UpgradeTest.java | 211 -
.../test/com/cloud/upgrade/DbUpgrade22Test.java | 29 -
.../cloud/upgrade/HostCapacity218to22Test.java | 66 -
.../InstanceGroup218To224UpgradeTest.java | 216 -
.../PortForwarding218To224UpgradeTest.java | 132 -
.../upgrade/Sanity220To224UpgradeTest.java | 95 -
.../upgrade/Sanity222To224UpgradeTest.java | 96 -
.../upgrade/Sanity223To225UpgradeTest.java | 94 -
.../upgrade/Sanity224To225UpgradeTest.java | 95 -
.../upgrade/Template2214To30UpgradeTest.java | 123 -
.../cloud/upgrade/Test2214To30DBUpgrade.java | 199 -
.../cloud/upgrade/Usage217To224UpgradeTest.java | 94 -
.../upgrade/UsageEvents218To224UpgradeTest.java | 91 -
.../com/cloud/user/MockAccountManagerImpl.java | 54 +-
.../vm/DeploymentPlanningManagerImplTest.java | 384 +
.../com/cloud/vm/MockUserVmManagerImpl.java | 425 -
.../cloud/vm/MockVirtualMachineManagerImpl.java | 312 -
server/test/com/cloud/vm/UserVmManagerTest.java | 336 +-
.../cloud/vm/VirtualMachineManagerImplTest.java | 208 -
.../UserVmCloneSettingDaoTestConfiguration.java | 4 +-
.../com/cloud/vm/dao/UserVmDaoImplTest.java | 43 +-
.../vm/dao/UserVmDaoTestConfiguration.java | 50 +
.../vm/snapshot/VMSnapshotManagerTest.java | 390 +-
.../cloud/vpc/MockConfigurationManagerImpl.java | 163 +-
.../com/cloud/vpc/MockNetworkManagerImpl.java | 500 +-
.../com/cloud/vpc/MockNetworkModelImpl.java | 62 +-
.../test/com/cloud/vpc/MockVpcManagerImpl.java | 386 -
.../MockVpcVirtualNetworkApplianceManager.java | 50 +-
.../com/cloud/vpc/NetworkACLManagerTest.java | 232 +
.../com/cloud/vpc/NetworkACLServiceTest.java | 259 +
server/test/com/cloud/vpc/Site2SiteVpnTest.java | 2 +-
server/test/com/cloud/vpc/VpcApiUnitTest.java | 181 +-
.../com/cloud/vpc/VpcTestConfiguration.java | 474 +-
.../cloud/vpc/dao/MockConfigurationDaoImpl.java | 5 +-
.../com/cloud/vpc/dao/MockNetworkDaoImpl.java | 10 +
.../vpc/dao/MockNetworkOfferingDaoImpl.java | 12 +-
.../vpc/dao/MockNetworkServiceMapDaoImpl.java | 6 +
.../affinity/AffinityApiUnitTest.java | 294 +
.../lb/ApplicationLoadBalancerTest.java | 380 +
.../networkoffering/ChildTestConfiguration.java | 185 +-
.../CreateNetworkOfferingTest.java | 78 +-
.../privategw/AclOnPrivateGwTest.java | 290 +
.../cloudstack/region/RegionManagerTest.java | 3 +-
...GlobalLoadBalancingRulesServiceImplTest.java | 136 +-
server/test/resources/UserVMDaoTestContext.xml | 44 +
server/test/resources/appLoadBalancer.xml | 43 +
server/test/resources/createNetworkOffering.xml | 21 +-
server/test/resources/network-mgr-component.xml | 2 +-
services/console-proxy/plugin/pom.xml | 12 +-
services/console-proxy/pom.xml | 10 +-
.../console-proxy/server/conf/agent.properties | 17 -
.../server/conf/environment.properties | 2 +
.../console-proxy/server/conf/log4j-cloud.xml | 2 +-
.../console-proxy/server/css/ajaxviewer.css | 6 +-
services/console-proxy/server/js/ajaxkeys.js | 338 +-
services/console-proxy/server/js/ajaxviewer.js | 139 +-
services/console-proxy/server/pom.xml | 68 +-
services/console-proxy/server/scripts/_run.sh | 3 +-
.../console-proxy/server/scripts/config_ssl.sh | 9 +
.../server/scripts/consoleproxy.sh | 33 +
.../console-proxy/server/scripts/secstorage.sh | 33 +
.../console-proxy/server/scripts/ssvm-check.sh | 136 -
.../com/cloud/consoleproxy/ConsoleProxy.java | 16 +-
.../consoleproxy/ConsoleProxyClientBase.java | 5 +-
.../consoleproxy/ConsoleProxyGCThread.java | 5 +-
.../ConsoleProxyPasswordBasedEncryptor.java | 253 +-
.../consoleproxy/ConsoleProxyVncClient.java | 5 +-
.../consoleproxy/vnc/VncClientPacketSender.java | 4 +-
.../vnc/VncServerPacketReceiver.java | 4 +-
.../server/systemvm-descriptor.xml | 9 +
services/pom.xml | 5 +-
.../secondary-storage/conf/agent.properties | 4 +
.../conf/environment.properties | 2 +
services/secondary-storage/conf/log4j-cloud.xml | 102 +
services/secondary-storage/conf/log4j.xml | 102 +
services/secondary-storage/pom.xml | 112 +
services/secondary-storage/scripts/_run.sh | 64 +
.../secondary-storage/scripts/config_auth.sh | 69 +
.../secondary-storage/scripts/config_ssl.sh | 183 +
.../secondary-storage/scripts/ipfirewall.sh | 50 +
services/secondary-storage/scripts/run-proxy.sh | 48 +
services/secondary-storage/scripts/run.bat | 18 +
services/secondary-storage/scripts/run.sh | 45 +
.../secondary-storage/scripts/ssvm-check.sh | 136 +
.../LocalNfsSecondaryStorageResource.java | 121 +
.../resource/LocalSecondaryStorageResource.java | 246 +
.../resource/NfsSecondaryStorageResource.java | 2556 +
.../resource/SecondaryStorageDiscoverer.java | 321 +
.../resource/SecondaryStorageResource.java | 27 +
.../SecondaryStorageResourceHandler.java | 24 +
.../storage/template/DownloadManager.java | 112 +
.../storage/template/DownloadManagerImpl.java | 1157 +
.../storage/template/UploadManager.java | 87 +
.../storage/template/UploadManagerImpl.java | 648 +
.../LocalNfsSecondaryStorageResourceTest.java | 145 +
.../NfsSecondaryStorageResourceTest.java | 120 +
setup/bindir/cloud-set-guest-sshkey.in | 63 +-
setup/bindir/cloud-setup-databases.in | 2 +-
setup/bindir/cloud-setup-encryption.in | 2 +-
setup/bindir/cloud-sysvmadm.in | 50 +-
setup/db/create-schema.sql | 83 +-
setup/db/db/schema-2214to30.sql | 2 +
setup/db/db/schema-302to303.sql | 196 +
setup/db/db/schema-302to40.sql | 19 +-
setup/db/db/schema-304to305-cleanup.sql | 22 +
setup/db/db/schema-304to305.sql | 389 +
setup/db/db/schema-305to306-cleanup.sql | 26 +
setup/db/db/schema-305to306.sql | 96 +
setup/db/db/schema-306to307.sql | 22 +
setup/db/db/schema-307to410-cleanup.sql | 43 +
setup/db/db/schema-307to410.sql | 1587 +
setup/db/db/schema-40to410.sql | 71 +-
setup/db/db/schema-410to420.sql | 2224 +-
setup/db/db/schema-420to430-cleanup.sql | 22 +
setup/db/db/schema-420to430.sql | 283 +
setup/db/templates.simulator.sql | 8 +-
setup/db/templates.sql | 96 +-
setup/dev/advanced.cfg | 37 +-
setup/dev/advancedsg.cfg | 186 +
setup/dev/basic.cfg | 12 +-
setup/dev/local.cfg | 44 +
setup/dev/s3.cfg | 140 +
.../component/cpu_limits/__init__.py | 16 +
.../component/cpu_limits/test_cpu_limits.py | 745 +
.../component/cpu_limits/test_domain_limits.py | 764 +
.../component/cpu_limits/test_maximum_limits.py | 377 +
.../component/cpu_limits/test_project_limits.py | 347 +
test/integration/component/maint/__init__.py | 21 +
.../component/maint/test_high_availability.py | 1079 +
.../maint/test_host_high_availability.py | 810 +
.../component/maint/test_redundant_router.py | 1589 +
...test_redundant_router_deployment_planning.py | 1012 +
.../test_redundant_router_network_rules.py | 1427 +
.../maint/test_vpc_host_maintenance.py | 557 +
.../maint/test_vpc_on_host_maintenance.py | 323 +
.../memory_limits/test_domain_limits.py | 761 +
.../memory_limits/test_maximum_limits.py | 352 +
.../memory_limits/test_memory_limits.py | 764 +
.../memory_limits/test_project_limits.py | 350 +
test/integration/component/test_accounts.py | 393 +-
.../component/test_advancedsg_networks.py | 756 +
.../component/test_affinity_groups.py | 1729 +
.../component/test_allocation_states.py | 4 +-
test/integration/component/test_asa1000v_fw.py | 136 +
test/integration/component/test_assign_vm.py | 479 +
test/integration/component/test_baremetal.py | 123 +
test/integration/component/test_blocker_bugs.py | 557 +-
.../component/test_custom_hostname.py | 855 +
.../component/test_egress_fw_rules.py | 952 +
test/integration/component/test_egress_rules.py | 310 +-
test/integration/component/test_eip_elb.py | 137 +-
.../component/test_explicit_dedication.py | 232 +
.../component/test_implicit_planner.py | 267 +
test/integration/component/test_ldap.py | 261 +
.../component/test_multiple_ip_ranges.py | 559 +
.../component/test_netscaler_configs.py | 3016 +
test/integration/component/test_netscaler_lb.py | 2973 +
.../component/test_netscaler_lb_algo.py | 1998 +
.../component/test_netscaler_lb_sticky.py | 1023 +
.../component/test_netscaler_nw_off.py | 3007 +
.../component/test_network_offering.py | 1186 +-
test/integration/component/test_portable_ip.py | 1309 +
.../component/test_project_configs.py | 150 +-
.../component/test_project_limits.py | 129 +-
.../component/test_project_resources.py | 79 +-
.../integration/component/test_project_usage.py | 80 +-
test/integration/component/test_projects.py | 176 +-
.../component/test_recurring_snapshots.py | 405 +
.../component/test_redundant_router_cleanups.py | 674 +
.../component/test_redundant_router_services.py | 384 +
.../component/test_redundant_router_upgrades.py | 494 +
test/integration/component/test_regions.py | 139 +
.../component/test_regions_accounts.py | 206 +
.../component/test_resource_limits.py | 258 +-
test/integration/component/test_routers.py | 302 +-
.../component/test_security_groups.py | 242 +-
.../component/test_shared_network_offering.py | 213 +
.../component/test_shared_networks.py | 2871 +
test/integration/component/test_snapshot_gc.py | 311 +
.../component/test_snapshot_limits.py | 293 +
test/integration/component/test_snapshots.py | 1981 +-
test/integration/component/test_stopped_vm.py | 1984 +
.../component/test_storage_motion.py | 305 +
test/integration/component/test_tags.py | 2326 +
test/integration/component/test_templates.py | 215 +-
test/integration/component/test_update_vm.py | 159 +
test/integration/component/test_usage.py | 154 +-
.../component/test_vm_passwdenabled.py | 68 +-
test/integration/component/test_volumes.py | 385 +-
test/integration/component/test_vpc.py | 2418 +
test/integration/component/test_vpc_network.py | 2550 +
.../component/test_vpc_network_lbrules.py | 984 +
.../component/test_vpc_network_pfrules.py | 852 +
.../component/test_vpc_network_staticnatrule.py | 714 +
.../integration/component/test_vpc_offerings.py | 1116 +
test/integration/component/test_vpc_routers.py | 1324 +
.../component/test_vpc_vm_life_cycle.py | 2707 +
.../component/test_vpc_vms_deployment.py | 2373 +
test/integration/component/test_vpn_users.py | 452 +
test/integration/smoke/test_ScaleVm.py | 221 -
test/integration/smoke/test_affinity_groups.py | 194 +
test/integration/smoke/test_deploy_vm.py | 156 +
.../smoke/test_deploy_vm_with_userdata.py | 147 +
...deploy_vms_with_varied_deploymentplanners.py | 257 +
test/integration/smoke/test_global_settings.py | 77 +
test/integration/smoke/test_guest_vlan_range.py | 168 +
test/integration/smoke/test_internal_lb.py | 187 +
test/integration/smoke/test_iso.py | 31 +-
test/integration/smoke/test_loadbalance.py | 598 +
.../smoke/test_multipleips_per_nic.py | 181 +
test/integration/smoke/test_network.py | 957 +-
test/integration/smoke/test_network_acl.py | 177 +
test/integration/smoke/test_nic.py | 75 +-
.../smoke/test_non_contigiousvlan.py | 87 +
.../integration/smoke/test_portable_publicip.py | 237 +
test/integration/smoke/test_primary_storage.py | 134 +-
test/integration/smoke/test_privategw_acl.py | 151 +
test/integration/smoke/test_public_ip_range.py | 173 +
test/integration/smoke/test_pvlan.py | 87 +
test/integration/smoke/test_regions.py | 93 +
test/integration/smoke/test_resource_detail.py | 185 +
test/integration/smoke/test_routers.py | 294 +-
test/integration/smoke/test_scale_vm.py | 226 +
.../integration/smoke/test_service_offerings.py | 379 +-
test/integration/smoke/test_snapshots.py | 345 +
test/integration/smoke/test_ssvm.py | 95 +-
test/integration/smoke/test_templates.py | 59 +-
test/integration/smoke/test_vm_life_cycle.py | 436 +-
test/integration/smoke/test_vm_snapshots.py | 311 +
test/integration/smoke/test_volumes.py | 183 +-
test/pom.xml | 4 +-
test/selenium/ReadMe.txt | 36 +-
test/selenium/lib/initialize.py | 17 +-
test/selenium/smoke/Login_and_Accounts.py | 5 +-
test/selenium/smoke/main.py | 2 +-
test/setup-test-data.sh | 102 -
tools/apidoc/build-apidoc.sh | 13 +-
tools/apidoc/gen_toc.py | 23 +-
tools/apidoc/generateadmincommands.xsl | 6 +-
tools/apidoc/generatecommand.xsl | 4 +-
tools/apidoc/generatedomainadmincommands.xsl | 4 +-
tools/apidoc/generatetoc_footer.xsl | 4 +-
tools/apidoc/generatetoc_header.xsl | 2 +-
tools/apidoc/generateusercommands.xsl | 4 +-
tools/apidoc/images/cloudstack.png | Bin 3893 -> 8575 bytes
tools/apidoc/images/ins_buttonshadow.gif | Bin 1683 -> 0 bytes
tools/apidoc/images/insdownload_button.gif | Bin 2531 -> 0 bytes
.../apidoc/images/insdownload_button_hover.gif | Bin 2569 -> 0 bytes
tools/apidoc/images/insjoincomm_button.gif | Bin 2627 -> 0 bytes
.../apidoc/images/insjoincomm_button_hover.gif | Bin 2620 -> 0 bytes
tools/apidoc/includes/main.css | 2 +-
tools/apidoc/pom.xml | 7 +-
tools/appliance/README.md | 18 +
tools/appliance/build.sh | 41 +-
tools/appliance/definitions/builtin/base.sh | 14 +
tools/appliance/definitions/builtin/cleanup.sh | 21 +
.../appliance/definitions/builtin/definition.rb | 33 +
.../definitions/builtin/install-xs-tools.sh | 10 +
tools/appliance/definitions/builtin/ks.cfg | 35 +
.../definitions/builtin/postinstall.sh | 54 +
tools/appliance/definitions/builtin/zerodisk.sh | 3 +
.../definitions/devcloud/definition.rb | 6 +-
.../definitions/systemvmtemplate/cleanup.sh | 1 -
.../definitions/systemvmtemplate/definition.rb | 6 +-
.../definitions/systemvmtemplate/postinstall.sh | 46 +-
.../definitions/systemvmtemplate/preseed.cfg | 14 +-
.../definitions/systemvmtemplate64/cleanup.sh | 1 -
.../systemvmtemplate64/definition.rb | 6 +-
.../systemvmtemplate64/postinstall.sh | 46 +-
.../definitions/systemvmtemplate64/preseed.cfg | 14 +-
tools/build/build_asf.sh | 101 +-
tools/build/build_docs.sh | 19 +-
tools/build/setnextversion.sh | 75 +
tools/cli/README | 1 +
tools/cli/cloudmonkey/__init__.py | 23 -
tools/cli/cloudmonkey/cachemaker.py | 181 -
tools/cli/cloudmonkey/cloudmonkey.py | 499 -
tools/cli/cloudmonkey/config.py | 122 -
tools/cli/cloudmonkey/printer.py | 120 -
tools/cli/cloudmonkey/requester.py | 153 -
tools/cli/pom.xml | 73 -
tools/cli/setup.py | 68 -
tools/devcloud-kvm/devcloud-kvm-advanced.cfg | 7 +-
tools/devcloud-kvm/devcloud-kvm.cfg | 5 +-
tools/devcloud-kvm/pom.xml | 2 +-
tools/devcloud/devcloud-advancedsg.cfg | 119 +
tools/devcloud/devcloud.cfg | 11 +-
tools/devcloud/devcloud_internal-mgt.cfg | 2 +-
tools/devcloud/devcloud_s3.cfg | 141 +
tools/devcloud/pom.xml | 35 +-
tools/devcloud/quickcloud.cfg | 121 +
tools/eclipse/eclipse.epf | 616 +
tools/marvin/marvin/TestCaseExecuteEngine.py | 45 +-
tools/marvin/marvin/__init__.py | 4 +-
tools/marvin/marvin/asyncJobMgr.py | 106 +-
tools/marvin/marvin/cloudstackConnection.py | 288 +-
tools/marvin/marvin/cloudstackException.py | 22 +-
tools/marvin/marvin/cloudstackTestCase.py | 25 +-
tools/marvin/marvin/cloudstackTestClient.py | 123 +-
tools/marvin/marvin/codegenerator.py | 193 +-
tools/marvin/marvin/configGenerator.py | 503 +-
tools/marvin/marvin/dbConnection.py | 37 +-
tools/marvin/marvin/deployAndRun.py | 53 +-
tools/marvin/marvin/deployDataCenter.py | 311 +-
tools/marvin/marvin/integration/lib/base.py | 1451 +-
tools/marvin/marvin/integration/lib/common.py | 160 +-
tools/marvin/marvin/integration/lib/utils.py | 244 +-
tools/marvin/marvin/jsonHelper.py | 290 +-
tools/marvin/marvin/marvinPlugin.py | 100 +-
tools/marvin/marvin/remoteSSHClient.py | 61 +-
.../marvin/sandbox/advanced/advanced_env.py | 9 +
.../marvin/sandbox/advancedsg/__init__.py | 18 +
.../marvin/sandbox/advancedsg/advancedsg_env.py | 151 +
.../marvin/sandbox/advancedsg/setup.properties | 61 +
tools/marvin/marvin/sandbox/basic/basic_env.py | 2 +
.../sandbox/demo/simulator/simulator_setup.py | 2 +
tools/marvin/marvin/settings.py | 10 +-
tools/marvin/marvin/testSetupSuccess.py | 40 +-
tools/marvin/pom.xml | 93 +-
tools/marvin/setup.py | 17 +-
tools/ngui/README.md | 17 +
tools/ngui/api.py | 37 +
tools/ngui/app.py | 38 +
tools/ngui/config.py | 21 +
tools/ngui/precache.py | 19 +
tools/ngui/requester.py | 153 +
.../bootstrap/css/bootstrap-responsive.css | 1109 +
.../bootstrap/css/bootstrap-responsive.min.css | 9 +
tools/ngui/static/bootstrap/css/bootstrap.css | 6315 +
.../ngui/static/bootstrap/css/bootstrap.min.css | 874 +
.../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes
.../bootstrap/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes
tools/ngui/static/bootstrap/js/bootstrap.js | 2291 +
tools/ngui/static/bootstrap/js/bootstrap.min.js | 7 +
tools/ngui/static/css/app.css | 45 +
tools/ngui/static/images/ajax-inverse.gif | Bin 0 -> 6488 bytes
tools/ngui/static/images/ajax-loader.gif | Bin 0 -> 3208 bytes
tools/ngui/static/js/app/accounts/accounts.js | 102 +
.../static/js/app/accounts/accounts.tpl.html | 36 +
tools/ngui/static/js/app/app.js | 77 +
tools/ngui/static/js/app/dashboard/dashboard.js | 17 +
tools/ngui/static/js/app/domains/domains.js | 37 +
tools/ngui/static/js/app/events/events.js | 37 +
.../js/app/globalsettings/globalsettings.js | 38 +
.../app/globalsettings/globalsettings.tpl.html | 37 +
.../js/app/infrastructure/infrastructure.js | 17 +
.../js/app/instances/instance-details.tpl.html | 24 +
tools/ngui/static/js/app/instances/instances.js | 54 +
.../static/js/app/instances/instances.tpl.html | 54 +
tools/ngui/static/js/app/networks/networks.js | 37 +
tools/ngui/static/js/app/projects/projects.js | 37 +
.../js/app/serviceofferings/serviceofferings.js | 37 +
tools/ngui/static/js/app/storage/storage.js | 153 +
.../ngui/static/js/app/storage/storage.tpl.html | 51 +
.../js/app/storage/upload-volume.tpl.html | 18 +
tools/ngui/static/js/app/templates/templates.js | 37 +
tools/ngui/static/js/common/dictionary.js | 68 +
.../ngui/static/js/common/directives/confirm.js | 43 +
.../js/common/directives/edit-in-place.js | 49 +
.../js/common/directives/edit-in-place.tpl.html | 26 +
tools/ngui/static/js/common/directives/label.js | 42 +
.../static/js/common/directives/modal-form.js | 70 +
.../js/common/directives/modal-form.tpl.html | 42 +
.../ngui/static/js/common/resources/accounts.js | 41 +
.../js/common/resources/configurations.js | 44 +
.../static/js/common/resources/diskofferings.js | 33 +
.../ngui/static/js/common/resources/domains.js | 33 +
tools/ngui/static/js/common/resources/events.js | 33 +
.../ngui/static/js/common/resources/networks.js | 33 +
.../ngui/static/js/common/resources/projects.js | 33 +
.../js/common/resources/serviceofferings.js | 33 +
.../static/js/common/resources/snapshots.js | 33 +
.../static/js/common/resources/templates.js | 33 +
tools/ngui/static/js/common/resources/users.js | 40 +
.../js/common/resources/virtualmachines.js | 75 +
.../ngui/static/js/common/resources/volumes.js | 33 +
tools/ngui/static/js/common/resources/zones.js | 33 +
.../static/js/common/services/breadcrumbs.js | 32 +
.../js/common/services/helperfunctions.js | 39 +
.../static/js/common/services/notifications.js | 34 +
.../ngui/static/js/common/services/requester.js | 46 +
tools/ngui/static/js/lib/angular-ui.min.js | 2 +
tools/ngui/static/js/lib/angular.js | 14847 +
tools/ngui/static/js/lib/jquery-1.7.2.js | 9404 +
tools/ngui/templates/index.html | 142 +
tools/pom.xml | 3 +-
tools/transifex/.tx/config | 32 +
tools/transifex/README-transifex.txt | 71 +
tools/transifex/sync-transifex-ui.sh | 160 +
tools/waf/javadir.py | 38 -
tools/waf/mkisofs.py | 84 -
tools/waf/tar.py | 79 -
tools/waf/tomcat.py | 57 -
tools/waf/usermgmt.py | 140 -
tools/whisker/LICENSE | 71 +-
tools/whisker/descriptor-for-packaging.xml | 35 +-
tools/whisker/descriptor.xml | 37 +-
ui/css/cloudstack3.css | 544 +-
ui/dictionary.jsp | 1748 +-
ui/images/bg-system-chart-compute.png | Bin 85957 -> 94812 bytes
ui/images/icons.png | Bin 50745 -> 50052 bytes
ui/images/sprites.png | Bin 188552 -> 193277 bytes
ui/index.jsp | 182 +-
ui/modules/infrastructure/infrastructure.css | 19 +
ui/modules/infrastructure/infrastructure.js | 75 +
ui/modules/modules.js | 24 +
ui/modules/vnmcAsa1000v/vnmcAsa1000v.css | 19 +
ui/modules/vnmcAsa1000v/vnmcAsa1000v.js | 183 +
.../vnmcNetworkProvider/vnmcNetworkProvider.css | 19 +
.../vnmcNetworkProvider/vnmcNetworkProvider.js | 615 +
ui/modules/vpc/vpc.css | 384 +
ui/modules/vpc/vpc.js | 427 +
ui/scripts/accounts.js | 2732 +-
ui/scripts/accountsWizard.js | 288 +
ui/scripts/affinity.js | 218 +
ui/scripts/autoscaler.js | 2817 +-
ui/scripts/cloud.core.callbacks.js | 84 +-
ui/scripts/cloudStack.js | 889 +-
ui/scripts/configuration.js | 4873 +-
ui/scripts/dashboard.js | 434 +-
ui/scripts/docs.js | 2040 +-
ui/scripts/domains.js | 1097 +-
ui/scripts/events.js | 1107 +-
ui/scripts/globalSettings.js | 624 +-
ui/scripts/installWizard.js | 664 +-
ui/scripts/instanceWizard.js | 1444 +-
ui/scripts/instances.js | 3142 +-
ui/scripts/lbStickyPolicy.js | 559 +-
ui/scripts/network.js | 10183 +-
ui/scripts/plugins.js | 174 +-
ui/scripts/projects.js | 2278 +-
ui/scripts/regions.js | 1145 +-
ui/scripts/sharedFunctions.js | 2613 +-
ui/scripts/storage.js | 3368 +-
ui/scripts/system.js | 26520 +-
ui/scripts/templates.js | 3103 +-
ui/scripts/ui-custom/accountsWizard.js | 169 +
ui/scripts/ui-custom/affinity.js | 174 +
ui/scripts/ui-custom/autoscaler.js | 763 +-
ui/scripts/ui-custom/dashboard.js | 343 +-
ui/scripts/ui-custom/enableStaticNAT.js | 299 +-
ui/scripts/ui-custom/granularSettings.js | 54 +
ui/scripts/ui-custom/healthCheck.js | 677 +-
ui/scripts/ui-custom/installWizard.js | 1632 +-
ui/scripts/ui-custom/instanceWizard.js | 1898 +-
ui/scripts/ui-custom/ipRules.js | 275 +-
ui/scripts/ui-custom/login.js | 245 +-
ui/scripts/ui-custom/physicalResources.js | 238 +-
ui/scripts/ui-custom/pluginListing.js | 121 +
ui/scripts/ui-custom/plugins.js | 109 -
ui/scripts/ui-custom/projectSelect.js | 67 +
ui/scripts/ui-custom/projects.js | 1375 +-
ui/scripts/ui-custom/recurringSnapshots.js | 385 +-
ui/scripts/ui-custom/regions.js | 217 +-
ui/scripts/ui-custom/securityRules.js | 98 +-
ui/scripts/ui-custom/uploadVolume.js | 301 +-
ui/scripts/ui-custom/vpc.js | 1698 +-
ui/scripts/ui-custom/zoneChart.js | 769 +-
ui/scripts/ui-custom/zoneFilter.js | 38 +
ui/scripts/ui-custom/zoneWizard.js | 2397 +-
ui/scripts/ui/core.js | 819 +-
ui/scripts/ui/dialog.js | 1331 +-
ui/scripts/ui/events.js | 72 +-
ui/scripts/ui/utils.js | 214 +-
ui/scripts/ui/widgets/cloudBrowser.js | 795 +-
ui/scripts/ui/widgets/dataTable.js | 504 +-
ui/scripts/ui/widgets/detailView.js | 2533 +-
ui/scripts/ui/widgets/listView.js | 3726 +-
ui/scripts/ui/widgets/multiEdit.js | 2086 +-
ui/scripts/ui/widgets/notifications.js | 667 +-
ui/scripts/ui/widgets/overlay.js | 58 +-
ui/scripts/ui/widgets/tagger.js | 430 +-
ui/scripts/ui/widgets/toolTip.js | 266 +-
ui/scripts/ui/widgets/treeView.js | 226 +-
ui/scripts/vm_snapshots.js | 337 +-
ui/scripts/vpc.js | 6253 +-
ui/scripts/zoneWizard.js | 7357 +-
usage/pom.xml | 87 +-
.../com/cloud/usage/UsageAlertManagerImpl.java | 3 +-
usage/src/com/cloud/usage/UsageManagerImpl.java | 287 +-
usage/src/com/cloud/usage/UsageServer.java | 16 +-
.../cloud/usage/parser/NetworkUsageParser.java | 8 +-
.../cloud/usage/parser/StorageUsageParser.java | 21 +-
.../usage/parser/VMSnapshotUsageParser.java | 153 +
.../cloud/usage/parser/VmDiskUsageParser.java | 213 +
.../test/com/cloud/usage/UsageManagerTest.java | 3 +
.../usage/UsageManagerTestConfiguration.java | 10 +-
utils/pom.xml | 95 +-
utils/src/com/cloud/maint/Version.java | 66 +
utils/src/com/cloud/utils/AnnotationHelper.java | 59 -
utils/src/com/cloud/utils/CleanupDelegate.java | 22 -
utils/src/com/cloud/utils/EnumUtils.java | 26 +
utils/src/com/cloud/utils/EnumerationImpl.java | 61 -
utils/src/com/cloud/utils/FileUtil.java | 41 +-
utils/src/com/cloud/utils/MethodCapturer.java | 113 +
utils/src/com/cloud/utils/Predicate.java | 21 +
utils/src/com/cloud/utils/ProcessUtil.java | 22 +-
utils/src/com/cloud/utils/ReflectUtil.java | 90 +-
utils/src/com/cloud/utils/S3Utils.java | 106 +-
utils/src/com/cloud/utils/SerialVersionUID.java | 2 +
utils/src/com/cloud/utils/StringUtils.java | 51 +-
utils/src/com/cloud/utils/SwiftUtil.java | 241 +
utils/src/com/cloud/utils/Ternary.java | 2 +-
utils/src/com/cloud/utils/UriUtils.java | 151 +-
utils/src/com/cloud/utils/UuidUtils.java | 23 +
.../utils/cisco/n1kv/vsm/NetconfHelper.java | 22 +
.../cloud/utils/cisco/n1kv/vsm/VsmCommand.java | 218 +
.../com/cloud/utils/component/AdapterBase.java | 15 +-
.../com/cloud/utils/component/AdapterList.java | 34 +
.../cloud/utils/component/ComponentContext.java | 198 +-
.../utils/component/ComponentLifecycleBase.java | 94 +-
.../com/cloud/utils/component/ManagerBase.java | 9 +-
.../component/SpringComponentScanUtils.java | 41 -
.../utils/crypt/EncryptionSecretKeyChanger.java | 427 -
utils/src/com/cloud/utils/db/Attribute.java | 253 -
utils/src/com/cloud/utils/db/Condition.java | 100 -
.../com/cloud/utils/db/ConnectionConcierge.java | 223 -
.../utils/db/ConnectionConciergeMBean.java | 30 -
utils/src/com/cloud/utils/db/DB.java | 59 -
utils/src/com/cloud/utils/db/DbUtil.java | 342 -
utils/src/com/cloud/utils/db/EcInfo.java | 106 -
utils/src/com/cloud/utils/db/Encrypt.java | 32 -
utils/src/com/cloud/utils/db/EntityManager.java | 65 +
utils/src/com/cloud/utils/db/Filter.java | 115 -
utils/src/com/cloud/utils/db/FirstWhere.java | 29 -
utils/src/com/cloud/utils/db/GenericDao.java | 282 -
.../src/com/cloud/utils/db/GenericDaoBase.java | 1879 -
.../cloud/utils/db/GenericSearchBuilder.java | 444 -
utils/src/com/cloud/utils/db/GlobalLock.java | 244 -
utils/src/com/cloud/utils/db/GroupBy.java | 108 -
utils/src/com/cloud/utils/db/JoinBuilder.java | 79 -
.../com/cloud/utils/db/JoinQueryBuilder.java | 31 -
utils/src/com/cloud/utils/db/JoinType.java | 32 -
utils/src/com/cloud/utils/db/Merovingian2.java | 461 -
.../com/cloud/utils/db/MerovingianMBean.java | 32 -
utils/src/com/cloud/utils/db/NextWhere.java | 27 -
utils/src/com/cloud/utils/db/On.java | 21 -
utils/src/com/cloud/utils/db/QueryBuilder.java | 194 -
utils/src/com/cloud/utils/db/ScriptRunner.java | 233 -
utils/src/com/cloud/utils/db/SearchBuilder.java | 64 -
.../src/com/cloud/utils/db/SearchCriteria.java | 358 -
.../src/com/cloud/utils/db/SearchCriteria2.java | 213 -
.../cloud/utils/db/SearchCriteriaService.java | 29 -
utils/src/com/cloud/utils/db/Select.java | 52 -
.../com/cloud/utils/db/SelectQueryBuilder.java | 28 -
.../src/com/cloud/utils/db/SequenceFetcher.java | 171 -
.../com/cloud/utils/db/SimpleQueryBuilder.java | 47 -
utils/src/com/cloud/utils/db/SqlGenerator.java | 669 -
utils/src/com/cloud/utils/db/StateMachine.java | 30 -
utils/src/com/cloud/utils/db/Transaction.java | 1173 -
.../cloud/utils/db/TransactionAttachment.java | 34 -
.../utils/db/TransactionContextBuilder.java | 65 -
.../com/cloud/utils/db/TransactionMBean.java | 33 -
.../cloud/utils/db/TransactionMBeanImpl.java | 113 -
utils/src/com/cloud/utils/db/UpdateBuilder.java | 147 -
utils/src/com/cloud/utils/db/UpdateFilter.java | 29 -
utils/src/com/cloud/utils/db/Where.java | 81 -
.../utils/exception/CloudRuntimeException.java | 49 +-
.../com/cloud/utils/exception/ErrorContext.java | 28 +
.../utils/exception/ExceptionProxyObject.java | 50 +
utils/src/com/cloud/utils/net/NetUtils.java | 151 +-
utils/src/com/cloud/utils/nio/NioClient.java | 3 +-
.../src/com/cloud/utils/nio/NioConnection.java | 2 +-
utils/src/com/cloud/utils/script/Executor.java | 27 -
utils/src/com/cloud/utils/script/Script.java | 16 +-
.../com/cloud/utils/script/ScriptBuilder.java | 73 -
.../src/com/cloud/utils/ssh/SSHKeysHelper.java | 2 +-
utils/src/com/cloud/utils/ssh/SshHelper.java | 4 -
.../cloud/utils/storage/encoding/Decoder.java | 2 +-
.../com/cloud/utils/xmlobject/XmlObject.java | 353 +-
.../cloud/utils/xmlobject/XmlObjectParser.java | 214 +-
.../utils/identity/ManagementServerNode.java | 60 +
.../ssl/EasySSLProtocolSocketFactory.java | 232 +
.../contrib/ssl/EasyX509TrustManager.java | 118 +
utils/test/com/cloud/utils/ProcessUtilTest.java | 73 +
utils/test/com/cloud/utils/ReflectUtilTest.java | 91 +
utils/test/com/cloud/utils/ScriptTest.java | 100 +
utils/test/com/cloud/utils/StringUtilsTest.java | 109 +-
utils/test/com/cloud/utils/TernaryTest.java | 35 +
.../com/cloud/utils/crypto/RSAHelperTest.java | 50 +
.../com/cloud/utils/db/DbAnnotatedBase.java | 44 -
.../cloud/utils/db/DbAnnotatedBaseDerived.java | 27 -
utils/test/com/cloud/utils/db/DbTestDao.java | 66 -
utils/test/com/cloud/utils/db/DbTestUtils.java | 90 -
utils/test/com/cloud/utils/db/DbTestVO.java | 56 -
.../test/com/cloud/utils/db/DummyComponent.java | 27 -
.../cloud/utils/db/ElementCollectionTest.java | 72 -
.../test/com/cloud/utils/db/GlobalLockTest.java | 83 -
.../com/cloud/utils/db/Merovingian2Test.java | 77 -
.../utils/db/TransactionContextBuilderTest.java | 63 -
.../com/cloud/utils/db/TransactionTest.java | 214 -
.../utils/log/CglibThrowableRendererTest.java | 104 -
.../test/com/cloud/utils/net/NetUtilsTest.java | 45 +
.../com/cloud/utils/ssh/SSHKeysHelperTest.java | 69 +
.../test/com/cloud/utils/testcase/NioTest.java | 14 +-
.../cloud/utils/xmlobject/TestXmlObject.java | 66 +-
.../cloud/utils/xmlobject/TestXmlObject2.java | 74 +-
.../com/cloud/utils/QualifierTestContext.xml | 3 +-
.../utils/db/transactionContextBuilderTest.xml | 3 +-
vmware-base/pom.xml | 20 +-
.../cloud/hypervisor/vmware/mo/ClusterMO.java | 49 +-
.../vmware/mo/CustomFieldConstants.java | 2 +
.../hypervisor/vmware/mo/DatacenterMO.java | 7 +-
.../cloud/hypervisor/vmware/mo/DatastoreMO.java | 84 +-
.../vmware/mo/DistributedVirtualSwitchMO.java | 77 +
.../vmware/mo/FeatureKeyConstants.java | 26 +
.../vmware/mo/HostDatastoreBrowserMO.java | 20 +-
.../vmware/mo/HostDatastoreSystemMO.java | 39 +-
.../com/cloud/hypervisor/vmware/mo/HostMO.java | 166 +-
.../vmware/mo/HostStorageSystemMO.java | 55 +
.../vmware/mo/HypervisorHostHelper.java | 1286 +-
.../vmware/mo/LicenseAssignmentManagerMO.java | 87 +
.../hypervisor/vmware/mo/LicenseManagerMO.java | 45 +
.../hypervisor/vmware/mo/PerfManagerMO.java | 2 +-
.../vmware/mo/VirtualDiskManagerMO.java | 4 +
.../vmware/mo/VirtualMachineDiskInfo.java | 42 +
.../mo/VirtualMachineDiskInfoBuilder.java | 97 +
.../hypervisor/vmware/mo/VirtualMachineMO.java | 374 +-
.../vmware/mo/VmwareHypervisorHost.java | 11 +-
.../hypervisor/vmware/util/VmwareClient.java | 55 +-
.../hypervisor/vmware/util/VmwareContext.java | 92 +-
.../vmware/util/VmwareContextPool.java | 202 +
.../vmware/util/VmwareGuestOsMapper.java | 11 +-
.../hypervisor/vmware/util/VmwareHelper.java | 128 +-
.../vmware/mo/TestVmwareContextFactory.java | 61 +-
.../hypervisor/vmware/mo/TestVmwareMO.java | 39 -
.../hypervisor/vmware/mo/VmwareMOTest.java | 45 +
.../hypervisor/vmware/util/TestVmwareUtil.java | 107 -
.../test/com/cloud/vmware/TestVMWare.java | 1342 -
5692 files changed, 989097 insertions(+), 376894 deletions(-)
----------------------------------------------------------------------
[33/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4661:[DB Upgrade] SecondaryStorage entry in host table before
upgrade is not marked as removed after migrating them to image_store
table.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1042136c
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1042136c
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1042136c
Branch: refs/heads/kvm-vnc-listen
Commit: 1042136c23834f7eff87227fd2818b56f6e8197e
Parents: bc98bca
Author: Min Chen <mi...@citrix.com>
Authored: Thu Sep 12 18:52:40 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Sep 12 18:55:41 2013 -0700
----------------------------------------------------------------------
engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java | 5 +++++
1 file changed, 5 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1042136c/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
index d27dfa7..02dd9c5 100755
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
+++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade410to420.java
@@ -2197,6 +2197,11 @@ public class Upgrade410to420 implements DbUpgrade {
storeInsert.setDate(9, nfs_created);
storeInsert.executeUpdate();
}
+
+ s_logger.debug("Marking NFS secondary storage in host table as removed");
+ pstmt = conn.prepareStatement("UPDATE `cloud`.`host` SET removed = now() WHERE type = 'SecondaryStorage' and removed is null");
+ pstmt.executeUpdate();
+ pstmt.close();
}
catch (SQLException e) {
String msg = "Unable to migrate secondary storages." + e.getMessage();
[31/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Revert "CLOUDSTACK-4649"
This reverts commit c82ef422b47fe2909ff79b7f91d2ba76bf007457.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1f421536
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1f421536
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1f421536
Branch: refs/heads/kvm-vnc-listen
Commit: 1f42153630ca332b367b069f77ee01bcd2395803
Parents: 1510139
Author: Anthony Xu <an...@citrix.com>
Authored: Thu Sep 12 13:00:32 2013 -0700
Committer: Anthony Xu <an...@citrix.com>
Committed: Thu Sep 12 13:00:42 2013 -0700
----------------------------------------------------------------------
.../com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1f421536/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
index b22910a..214dbd4 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServer56FP1Resource.java
@@ -160,7 +160,6 @@ public class XenServer56FP1Resource extends XenServer56Resource {
VM template = templates.iterator().next();
VM.Record vmr = template.getRecord(conn);
- vmr.platform.remove("device_id");
vmr.affinity = host;
vmr.otherConfig.remove("disks");
vmr.otherConfig.remove("default_template");
[06/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4642: UI > storage > volume > recurring snapshot > timezone dropdown > remove hardcoding dropdown option from index.jsp since dropdown option is generated on the fly from timezoneMap variable in JavaScript file.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/343ca473
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/343ca473
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/343ca473
Branch: refs/heads/kvm-vnc-listen
Commit: 343ca473e754b17772e4de8637df495b3ac45c39
Parents: 44c9e80
Author: Jessica Wang <je...@apache.org>
Authored: Tue Sep 10 16:15:39 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Tue Sep 10 16:21:02 2013 -0700
----------------------------------------------------------------------
ui/index.jsp | 61 +------------------------------------------------------
1 file changed, 1 insertion(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/343ca473/ui/index.jsp
----------------------------------------------------------------------
diff --git a/ui/index.jsp b/ui/index.jsp
index 086495a..848adce 100644
--- a/ui/index.jsp
+++ b/ui/index.jsp
@@ -1418,66 +1418,7 @@ under the License.
<div class="field timezone">
<div class="name"></div>
<div class="value">
- <select name="timezone">
- <option value="Etc/GMT+12">[UTC-12:00] GMT-12:00</option>
- <option value="Etc/GMT+11">[UTC-11:00] GMT-11:00</option>
- <option value="Pacific/Samoa">[UTC-11:00] Samoa Standard Time</option>
- <option value="Pacific/Honolulu">[UTC-10:00] Hawaii Standard Time</option>
- <option value="US/Alaska">[UTC-09:00] Alaska Standard Time</option>
- <option value="America/Los_Angeles">[UTC-08:00] Pacific Standard Time</option>
- <option value="Mexico/BajaNorte">[UTC-08:00] Baja California</option>
- <option value="US/Arizona">[UTC-07:00] Arizona</option>
- <option value="US/Mountain">[UTC-07:00] Mountain Standard Time</option>
- <option value="America/Chihuahua">[UTC-07:00] Chihuahua, La Paz</option>
- <option value="America/Chicago">[UTC-06:00] Central Standard Time</option>
- <option value="America/Costa_Rica">[UTC-06:00] Central America</option>
- <option value="America/Mexico_City">[UTC-06:00] Mexico City, Monterrey</option>
- <option value="Canada/Saskatchewan">[UTC-06:00] Saskatchewan</option>
- <option value="America/Bogota">[UTC-05:00] Bogota, Lima</option>
- <option value="America/New_York">[UTC-05:00] Eastern Standard Time</option>
- <option value="America/Caracas">[UTC-04:00] Venezuela Time</option>
- <option value="America/Asuncion">[UTC-04:00] Paraguay Time</option>
- <option value="America/Cuiaba">[UTC-04:00] Amazon Time</option>
- <option value="America/Halifax">[UTC-04:00] Atlantic Standard Time</option>
- <option value="America/La_Paz">[UTC-04:00] Bolivia Time</option>
- <option value="America/Santiago">[UTC-04:00] Chile Time</option>
- <option value="America/St_Johns">[UTC-03:30] Newfoundland Standard Time</option>
- <option value="America/Araguaina">[UTC-03:00] Brasilia Time</option>
- <option value="America/Argentina/Buenos_Aires">[UTC-03:00] Argentine Time</option>
- <option value="America/Cayenne">[UTC-03:00] French Guiana Time</option>
- <option value="America/Godthab">[UTC-03:00] Greenland Time</option>
- <option value="America/Montevideo">[UTC-03:00] Uruguay Time]</option>
- <option value="Etc/GMT+2">[UTC-02:00] GMT-02:00</option>
- <option value="Atlantic/Azores">[UTC-01:00] Azores Time</option>
- <option value="Atlantic/Cape_Verde">[UTC-01:00] Cape Verde Time</option>
- <option value="Africa/Casablanca">[UTC] Casablanca</option>
- <option value="Etc/UTC">[UTC] Coordinated Universal Time</option>
- <option value="Atlantic/Reykjavik">[UTC] Reykjavik</option>
- <option value="Europe/London">[UTC] Western European Time</option>
- <option value="CET">[UTC+01:00] Central European Time</option>
- <option value="Europe/Bucharest">[UTC+02:00] Eastern European Time</option>
- <option value="Africa/Johannesburg">[UTC+02:00] South Africa Standard Time</option>
- <option value="Asia/Beirut">[UTC+02:00] Beirut</option>
- <option value="Africa/Cairo">[UTC+02:00] Cairo</option>
- <option value="Asia/Jerusalem">[UTC+02:00] Israel Standard Time</option>
- <option value="Europe/Minsk">[UTC+02:00] Minsk</option>
- <option value="Europe/Moscow">[UTC+03:00] Moscow Standard Time</option>
- <option value="Africa/Nairobi">[UTC+03:00] Eastern African Time</option>
- <option value="Asia/Karachi">[UTC+05:00] Pakistan Time</option>
- <option value="Asia/Kolkata">[UTC+05:30] India Standard Time</option>
- <option value="Asia/Bangkok">[UTC+05:30] Indochina Time</option>
- <option value="Asia/Shanghai">[UTC+08:00] China Standard Time</option>
- <option value="Asia/Kuala_Lumpur">[UTC+08:00] Malaysia Time</option>
- <option value="Australia/Perth">[UTC+08:00] Western Standard Time (Australia)</option>
- <option value="Asia/Taipei">[UTC+08:00] Taiwan</option>
- <option value="Asia/Tokyo">[UTC+09:00] Japan Standard Time</option>
- <option value="Asia/Seoul">[UTC+09:00] Korea Standard Time</option>
- <option value="Australia/Adelaide">[UTC+09:30] Central Standard Time (South Australia)</option>
- <option value="Australia/Darwin">[UTC+09:30] Central Standard Time (Northern Territory)</option>
- <option value="Australia/Brisbane">[UTC+10:00] Eastern Standard Time (Queensland)</option>
- <option value="Australia/Canberra">[UTC+10:00] Eastern Standard Time (New South Wales)</option>
- <option value="Pacific/Guam">[UTC+10:00] Chamorro Standard Time</option>
- <option value="Pacific/Auckland">[UTC+12:00] New Zealand Standard Time</option>
+ <select name="timezone">
</select>
</div>
</div>
[05/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4642: UI > get complete timezone list from Java class TimeZone
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/44c9e80a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/44c9e80a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/44c9e80a
Branch: refs/heads/kvm-vnc-listen
Commit: 44c9e80a4e762e4192916eae7a2dc5c6b6ba00bc
Parents: ae181af
Author: Jessica Wang <je...@apache.org>
Authored: Tue Sep 10 15:52:08 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Tue Sep 10 16:20:31 2013 -0700
----------------------------------------------------------------------
ui/scripts/sharedFunctions.js | 678 +++++++++++++++++++++++++++++++++----
1 file changed, 619 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/44c9e80a/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index c70ab0b..88f62ef 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -1275,65 +1275,625 @@ var addExtraPropertiesToGuestNetworkObject = function(jsonObj) {
}
var timezoneMap = new Object();
-timezoneMap['Etc/GMT+12'] = '[UTC-12:00] GMT-12:00';
-timezoneMap['Etc/GMT+11'] = '[UTC-11:00] GMT-11:00';
-timezoneMap['Pacific/Samoa'] = '[UTC-11:00] Samoa Standard Time';
-timezoneMap['Pacific/Honolulu'] = '[UTC-10:00] Hawaii Standard Time';
-timezoneMap['US/Alaska'] = '[UTC-09:00] Alaska Standard Time';
-timezoneMap['America/Los_Angeles'] = '[UTC-08:00] Pacific Standard Time';
-timezoneMap['Mexico/BajaNorte'] = '[UTC-08:00] Baja California';
-timezoneMap['US/Arizona'] = '[UTC-07:00] Arizona';
-timezoneMap['US/Mountain'] = '[UTC-07:00] Mountain Standard Time';
-timezoneMap['America/Chihuahua'] = '[UTC-07:00] Chihuahua, La Paz';
-timezoneMap['America/Chicago'] = '[UTC-06:00] Central Standard Time';
-timezoneMap['America/Costa_Rica'] = '[UTC-06:00] Central America';
-timezoneMap['America/Mexico_City'] = '[UTC-06:00] Mexico City, Monterrey';
-timezoneMap['Canada/Saskatchewan'] = '[UTC-06:00] Saskatchewan';
-timezoneMap['America/Bogota'] = '[UTC-05:00] Bogota, Lima';
-timezoneMap['America/New_York'] = '[UTC-05:00] Eastern Standard Time';
-timezoneMap['America/Caracas'] = '[UTC-04:00] Venezuela Time';
-timezoneMap['America/Asuncion'] = '[UTC-04:00] Paraguay Time';
-timezoneMap['America/Cuiaba'] = '[UTC-04:00] Amazon Time';
-timezoneMap['America/Halifax'] = '[UTC-04:00] Atlantic Standard Time';
-timezoneMap['America/La_Paz'] = '[UTC-04:00] Bolivia Time';
-timezoneMap['America/Santiago'] = '[UTC-04:00] Chile Time';
-timezoneMap['America/St_Johns'] = '[UTC-03:30] Newfoundland Standard Time';
-timezoneMap['America/Araguaina'] = '[UTC-03:00] Brasilia Time';
-timezoneMap['America/Argentina/Buenos_Aires'] = '[UTC-03:00] Argentine Time';
-timezoneMap['America/Cayenne'] = '[UTC-03:00] French Guiana Time';
-timezoneMap['America/Godthab'] = '[UTC-03:00] Greenland Time';
-timezoneMap['America/Montevideo'] = '[UTC-03:00] Uruguay Time]';
-timezoneMap['Etc/GMT+2'] = '[UTC-02:00] GMT-02:00';
-timezoneMap['Atlantic/Azores'] = '[UTC-01:00] Azores Time';
-timezoneMap['Atlantic/Cape_Verde'] = '[UTC-01:00] Cape Verde Time';
-timezoneMap['Africa/Casablanca'] = '[UTC] Casablanca';
-timezoneMap['Etc/UTC'] = '[UTC] Coordinated Universal Time';
-timezoneMap['Atlantic/Reykjavik'] = '[UTC] Reykjavik';
-timezoneMap['Europe/London'] = '[UTC] Western European Time';
-timezoneMap['CET'] = '[UTC+01:00] Central European Time';
-timezoneMap['Europe/Bucharest'] = '[UTC+02:00] Eastern European Time';
-timezoneMap['Africa/Johannesburg'] = '[UTC+02:00] South Africa Standard Time';
-timezoneMap['Asia/Beirut'] = '[UTC+02:00] Beirut';
-timezoneMap['Africa/Cairo'] = '[UTC+02:00] Cairo';
-timezoneMap['Asia/Jerusalem'] = '[UTC+02:00] Israel Standard Time';
-timezoneMap['Europe/Minsk'] = '[UTC+02:00] Minsk';
-timezoneMap['Europe/Moscow'] = '[UTC+03:00] Moscow Standard Time';
-timezoneMap['Africa/Nairobi'] = '[UTC+03:00] Eastern African Time';
-timezoneMap['Asia/Karachi'] = '[UTC+05:00] Pakistan Time';
-timezoneMap['Asia/Kolkata'] = '[UTC+05:30] India Standard Time';
-timezoneMap['Asia/Bangkok'] = '[UTC+05:30] Indochina Time';
-timezoneMap['Asia/Shanghai'] = '[UTC+08:00] China Standard Time';
-timezoneMap['Asia/Kuala_Lumpur'] = '[UTC+08:00] Malaysia Time';
-timezoneMap['Australia/Perth'] = '[UTC+08:00] Western Standard Time (Australia)';
-timezoneMap['Asia/Taipei'] = '[UTC+08:00] Taiwan';
-timezoneMap['Asia/Tokyo'] = '[UTC+09:00] Japan Standard Time';
-timezoneMap['Asia/Seoul'] = '[UTC+09:00] Korea Standard Time';
-timezoneMap['Australia/Adelaide'] = '[UTC+09:30] Central Standard Time (South Australia)';
-timezoneMap['Australia/Darwin'] = '[UTC+09:30] Central Standard Time (Northern Territory)';
-timezoneMap['Australia/Brisbane'] = '[UTC+10:00] Eastern Standard Time (Queensland)';
-timezoneMap['Australia/Canberra'] = '[UTC+10:00] Eastern Standard Time (New South Wales)';
-timezoneMap['Pacific/Guam'] = '[UTC+10:00] Chamorro Standard Time';
-timezoneMap['Pacific/Auckland'] = '[UTC+12:00] New Zealand Standard Time';
+timezoneMap["Etc/GMT+12"] = "Etc/GMT+12 [GMT-12:00]";
+timezoneMap["Etc/GMT+11"] = "Etc/GMT+11 [GMT-11:00]";
+timezoneMap["Pacific/Midway"] = "Pacific/Midway [Samoa Standard Time]";
+timezoneMap["Pacific/Niue"] = "Pacific/Niue [Niue Time]";
+timezoneMap["Pacific/Pago_Pago"] = "Pacific/Pago_Pago [Samoa Standard Time]";
+timezoneMap["Pacific/Samoa"] = "Pacific/Samoa [Samoa Standard Time]";
+timezoneMap["US/Samoa"] = "US/Samoa [Samoa Standard Time]";
+timezoneMap["America/Adak"] = "America/Adak [Hawaii-Aleutian Standard Time]";
+timezoneMap["America/Atka"] = "America/Atka [Hawaii-Aleutian Standard Time]";
+timezoneMap["Etc/GMT+10"] = "Etc/GMT+10 [GMT-10:00]";
+timezoneMap["HST"] = "HST [Hawaii Standard Time]";
+timezoneMap["Pacific/Honolulu"] = "Pacific/Honolulu [Hawaii Standard Time]";
+timezoneMap["Pacific/Johnston"] = "Pacific/Johnston [Hawaii Standard Time]";
+timezoneMap["Pacific/Rarotonga"] = "Pacific/Rarotonga [Cook Is. Time]";
+timezoneMap["Pacific/Tahiti"] = "Pacific/Tahiti [Tahiti Time]";
+timezoneMap["SystemV/HST10"] = "SystemV/HST10 [Hawaii Standard Time]";
+timezoneMap["US/Aleutian"] = "US/Aleutian [Hawaii-Aleutian Standard Time]";
+timezoneMap["US/Hawaii"] = "US/Hawaii [Hawaii Standard Time]";
+timezoneMap["Pacific/Marquesas"] = "Pacific/Marquesas [Marquesas Time]";
+timezoneMap["AST"] = "AST [Alaska Standard Time]";
+timezoneMap["America/Anchorage"] = "America/Anchorage [Alaska Standard Time]";
+timezoneMap["America/Juneau"] = "America/Juneau [Alaska Standard Time]";
+timezoneMap["America/Nome"] = "America/Nome [Alaska Standard Time]";
+timezoneMap["America/Sitka"] = "America/Sitka [GMT-09:00]";
+timezoneMap["America/Yakutat"] = "America/Yakutat [Alaska Standard Time]";
+timezoneMap["Etc/GMT+9"] = "Etc/GMT+9 [GMT-09:00]";
+timezoneMap["Pacific/Gambier"] = "Pacific/Gambier [Gambier Time]";
+timezoneMap["SystemV/YST9"] = "SystemV/YST9 [Alaska Standard Time]";
+timezoneMap["SystemV/YST9YDT"] = "SystemV/YST9YDT [Alaska Standard Time]";
+timezoneMap["US/Alaska"] = "US/Alaska [Alaska Standard Time]";
+timezoneMap["America/Dawson"] = "America/Dawson [Pacific Standard Time]";
+timezoneMap["America/Ensenada"] = "America/Ensenada [Pacific Standard Time]";
+timezoneMap["America/Los_Angeles"] = "America/Los_Angeles [Pacific Standard Time]";
+timezoneMap["America/Metlakatla"] = "America/Metlakatla [GMT-08:00]";
+timezoneMap["America/Santa_Isabel"] = "America/Santa_Isabel [Pacific Standard Time]";
+timezoneMap["America/Tijuana"] = "America/Tijuana [Pacific Standard Time]";
+timezoneMap["America/Vancouver"] = "America/Vancouver [Pacific Standard Time]";
+timezoneMap["America/Whitehorse"] = "America/Whitehorse [Pacific Standard Time]";
+timezoneMap["Canada/Pacific"] = "Canada/Pacific [Pacific Standard Time]";
+timezoneMap["Canada/Yukon"] = "Canada/Yukon [Pacific Standard Time]";
+timezoneMap["Etc/GMT+8"] = "Etc/GMT+8 [GMT-08:00]";
+timezoneMap["Mexico/BajaNorte"] = "Mexico/BajaNorte [Pacific Standard Time]";
+timezoneMap["PST"] = "PST [Pacific Standard Time]";
+timezoneMap["PST8PDT"] = "PST8PDT [Pacific Standard Time]";
+timezoneMap["Pacific/Pitcairn"] = "Pacific/Pitcairn [Pitcairn Standard Time]";
+timezoneMap["SystemV/PST8"] = "SystemV/PST8 [Pacific Standard Time]";
+timezoneMap["SystemV/PST8PDT"] = "SystemV/PST8PDT [Pacific Standard Time]";
+timezoneMap["US/Pacific"] = "US/Pacific [Pacific Standard Time]";
+timezoneMap["US/Pacific-New"] = "US/Pacific-New [Pacific Standard Time]";
+timezoneMap["America/Boise"] = "America/Boise [Mountain Standard Time]";
+timezoneMap["America/Cambridge_Bay"] = "America/Cambridge_Bay [Mountain Standard Time]";
+timezoneMap["America/Chihuahua"] = "America/Chihuahua [Mountain Standard Time]";
+timezoneMap["America/Creston"] = "America/Creston [GMT-07:00]";
+timezoneMap["America/Dawson_Creek"] = "America/Dawson_Creek [Mountain Standard Time]";
+timezoneMap["America/Denver"] = "America/Denver [Mountain Standard Time]";
+timezoneMap["America/Edmonton"] = "America/Edmonton [Mountain Standard Time]";
+timezoneMap["America/Hermosillo"] = "America/Hermosillo [Mountain Standard Time]";
+timezoneMap["America/Inuvik"] = "America/Inuvik [Mountain Standard Time]";
+timezoneMap["America/Mazatlan"] = "America/Mazatlan [Mountain Standard Time]";
+timezoneMap["America/Ojinaga"] = "America/Ojinaga [Mountain Standard Time]";
+timezoneMap["America/Phoenix"] = "America/Phoenix [Mountain Standard Time]";
+timezoneMap["America/Shiprock"] = "America/Shiprock [Mountain Standard Time]";
+timezoneMap["America/Yellowknife"] = "America/Yellowknife [Mountain Standard Time]";
+timezoneMap["Canada/Mountain"] = "Canada/Mountain [Mountain Standard Time]";
+timezoneMap["Etc/GMT+7"] = "Etc/GMT+7 [GMT-07:00]";
+timezoneMap["MST"] = "MST [Mountain Standard Time]";
+timezoneMap["MST7MDT"] = "MST7MDT [Mountain Standard Time]";
+timezoneMap["Mexico/BajaSur"] = "Mexico/BajaSur [Mountain Standard Time]";
+timezoneMap["Navajo"] = "Navajo [Mountain Standard Time]";
+timezoneMap["PNT"] = "PNT [Mountain Standard Time]";
+timezoneMap["SystemV/MST7"] = "SystemV/MST7 [Mountain Standard Time]";
+timezoneMap["SystemV/MST7MDT"] = "SystemV/MST7MDT [Mountain Standard Time]";
+timezoneMap["US/Arizona"] = "US/Arizona [Mountain Standard Time]";
+timezoneMap["US/Mountain"] = "US/Mountain [Mountain Standard Time]";
+timezoneMap["America/Bahia_Banderas"] = "America/Bahia_Banderas [GMT-06:00]";
+timezoneMap["America/Belize"] = "America/Belize [Central Standard Time]";
+timezoneMap["America/Cancun"] = "America/Cancun [Central Standard Time]";
+timezoneMap["America/Chicago"] = "America/Chicago [Central Standard Time]";
+timezoneMap["America/Costa_Rica"] = "America/Costa_Rica [Central Standard Time]";
+timezoneMap["America/El_Salvador"] = "America/El_Salvador [Central Standard Time]";
+timezoneMap["America/Guatemala"] = "America/Guatemala [Central Standard Time]";
+timezoneMap["America/Indiana/Knox"] = "America/Indiana/Knox [Central Standard Time]";
+timezoneMap["America/Indiana/Tell_City"] = "America/Indiana/Tell_City [Central Standard Time]";
+timezoneMap["America/Knox_IN"] = "America/Knox_IN [Central Standard Time]";
+timezoneMap["America/Managua"] = "America/Managua [Central Standard Time]";
+timezoneMap["America/Matamoros"] = "America/Matamoros [Central Standard Time]";
+timezoneMap["America/Menominee"] = "America/Menominee [Central Standard Time]";
+timezoneMap["America/Merida"] = "America/Merida [Central Standard Time]";
+timezoneMap["America/Mexico_City"] = "America/Mexico_City [Central Standard Time]";
+timezoneMap["America/Monterrey"] = "America/Monterrey [Central Standard Time]";
+timezoneMap["America/North_Dakota/Beulah"] = "America/North_Dakota/Beulah [GMT-06:00]";
+timezoneMap["America/North_Dakota/Center"] = "America/North_Dakota/Center [Central Standard Time]";
+timezoneMap["America/North_Dakota/New_Salem"] = "America/North_Dakota/New_Salem [Central Standard Time]";
+timezoneMap["America/Rainy_River"] = "America/Rainy_River [Central Standard Time]";
+timezoneMap["America/Rankin_Inlet"] = "America/Rankin_Inlet [Central Standard Time]";
+timezoneMap["America/Regina"] = "America/Regina [Central Standard Time]";
+timezoneMap["America/Resolute"] = "America/Resolute [Eastern Standard Time]";
+timezoneMap["America/Swift_Current"] = "America/Swift_Current [Central Standard Time]";
+timezoneMap["America/Tegucigalpa"] = "America/Tegucigalpa [Central Standard Time]";
+timezoneMap["America/Winnipeg"] = "America/Winnipeg [Central Standard Time]";
+timezoneMap["CST"] = "CST [Central Standard Time]";
+timezoneMap["CST6CDT"] = "CST6CDT [Central Standard Time]";
+timezoneMap["Canada/Central"] = "Canada/Central [Central Standard Time]";
+timezoneMap["Canada/East-Saskatchewan"] = "Canada/East-Saskatchewan [Central Standard Time]";
+timezoneMap["Canada/Saskatchewan"] = "Canada/Saskatchewan [Central Standard Time]";
+timezoneMap["Chile/EasterIsland"] = "Chile/EasterIsland [Easter Is. Time]";
+timezoneMap["Etc/GMT+6"] = "Etc/GMT+6 [GMT-06:00]";
+timezoneMap["Mexico/General"] = "Mexico/General [Central Standard Time]";
+timezoneMap["Pacific/Easter"] = "Pacific/Easter [Easter Is. Time]";
+timezoneMap["Pacific/Galapagos"] = "Pacific/Galapagos [Galapagos Time]";
+timezoneMap["SystemV/CST6"] = "SystemV/CST6 [Central Standard Time]";
+timezoneMap["SystemV/CST6CDT"] = "SystemV/CST6CDT [Central Standard Time]";
+timezoneMap["US/Central"] = "US/Central [Central Standard Time]";
+timezoneMap["US/Indiana-Starke"] = "US/Indiana-Starke [Central Standard Time]";
+timezoneMap["America/Atikokan"] = "America/Atikokan [Eastern Standard Time]";
+timezoneMap["America/Bogota"] = "America/Bogota [Colombia Time]";
+timezoneMap["America/Cayman"] = "America/Cayman [Eastern Standard Time]";
+timezoneMap["America/Coral_Harbour"] = "America/Coral_Harbour [Eastern Standard Time]";
+timezoneMap["America/Detroit"] = "America/Detroit [Eastern Standard Time]";
+timezoneMap["America/Fort_Wayne"] = "America/Fort_Wayne [Eastern Standard Time]";
+timezoneMap["America/Grand_Turk"] = "America/Grand_Turk [Eastern Standard Time]";
+timezoneMap["America/Guayaquil"] = "America/Guayaquil [Ecuador Time]";
+timezoneMap["America/Havana"] = "America/Havana [Cuba Standard Time]";
+timezoneMap["America/Indiana/Indianapolis"] = "America/Indiana/Indianapolis [Eastern Standard Time]";
+timezoneMap["America/Indiana/Marengo"] = "America/Indiana/Marengo [Eastern Standard Time]";
+timezoneMap["America/Indiana/Petersburg"] = "America/Indiana/Petersburg [Eastern Standard Time]";
+timezoneMap["America/Indiana/Vevay"] = "America/Indiana/Vevay [Eastern Standard Time]";
+timezoneMap["America/Indiana/Vincennes"] = "America/Indiana/Vincennes [Eastern Standard Time]";
+timezoneMap["America/Indiana/Winamac"] = "America/Indiana/Winamac [Eastern Standard Time]";
+timezoneMap["America/Indianapolis"] = "America/Indianapolis [Eastern Standard Time]";
+timezoneMap["America/Iqaluit"] = "America/Iqaluit [Eastern Standard Time]";
+timezoneMap["America/Jamaica"] = "America/Jamaica [Eastern Standard Time]";
+timezoneMap["America/Kentucky/Louisville"] = "America/Kentucky/Louisville [Eastern Standard Time]";
+timezoneMap["America/Kentucky/Monticello"] = "America/Kentucky/Monticello [Eastern Standard Time]";
+timezoneMap["America/Lima"] = "America/Lima [Peru Time]";
+timezoneMap["America/Louisville"] = "America/Louisville [Eastern Standard Time]";
+timezoneMap["America/Montreal"] = "America/Montreal [Eastern Standard Time]";
+timezoneMap["America/Nassau"] = "America/Nassau [Eastern Standard Time]";
+timezoneMap["America/New_York"] = "America/New_York [Eastern Standard Time]";
+timezoneMap["America/Nipigon"] = "America/Nipigon [Eastern Standard Time]";
+timezoneMap["America/Panama"] = "America/Panama [Eastern Standard Time]";
+timezoneMap["America/Pangnirtung"] = "America/Pangnirtung [Eastern Standard Time]";
+timezoneMap["America/Port-au-Prince"] = "America/Port-au-Prince [Eastern Standard Time]";
+timezoneMap["America/Thunder_Bay"] = "America/Thunder_Bay [Eastern Standard Time]";
+timezoneMap["America/Toronto"] = "America/Toronto [Eastern Standard Time]";
+timezoneMap["Canada/Eastern"] = "Canada/Eastern [Eastern Standard Time]";
+timezoneMap["Cuba"] = "Cuba [Cuba Standard Time]";
+timezoneMap["EST"] = "EST [Eastern Standard Time]";
+timezoneMap["EST5EDT"] = "EST5EDT [Eastern Standard Time]";
+timezoneMap["Etc/GMT+5"] = "Etc/GMT+5 [GMT-05:00]";
+timezoneMap["IET"] = "IET [Eastern Standard Time]";
+timezoneMap["Jamaica"] = "Jamaica [Eastern Standard Time]";
+timezoneMap["SystemV/EST5"] = "SystemV/EST5 [Eastern Standard Time]";
+timezoneMap["SystemV/EST5EDT"] = "SystemV/EST5EDT [Eastern Standard Time]";
+timezoneMap["US/East-Indiana"] = "US/East-Indiana [Eastern Standard Time]";
+timezoneMap["US/Eastern"] = "US/Eastern [Eastern Standard Time]";
+timezoneMap["US/Michigan"] = "US/Michigan [Eastern Standard Time]";
+timezoneMap["America/Caracas"] = "America/Caracas [Venezuela Time]";
+timezoneMap["America/Anguilla"] = "America/Anguilla [Atlantic Standard Time]";
+timezoneMap["America/Antigua"] = "America/Antigua [Atlantic Standard Time]";
+timezoneMap["America/Argentina/San_Luis"] = "America/Argentina/San_Luis [Western Argentine Time]";
+timezoneMap["America/Aruba"] = "America/Aruba [Atlantic Standard Time]";
+timezoneMap["America/Asuncion"] = "America/Asuncion [Paraguay Time]";
+timezoneMap["America/Barbados"] = "America/Barbados [Atlantic Standard Time]";
+timezoneMap["America/Blanc-Sablon"] = "America/Blanc-Sablon [Atlantic Standard Time]";
+timezoneMap["America/Boa_Vista"] = "America/Boa_Vista [Amazon Time]";
+timezoneMap["America/Campo_Grande"] = "America/Campo_Grande [Amazon Time]";
+timezoneMap["America/Cuiaba"] = "America/Cuiaba [Amazon Time]";
+timezoneMap["America/Curacao"] = "America/Curacao [Atlantic Standard Time]";
+timezoneMap["America/Dominica"] = "America/Dominica [Atlantic Standard Time]";
+timezoneMap["America/Eirunepe"] = "America/Eirunepe [Amazon Time]";
+timezoneMap["America/Glace_Bay"] = "America/Glace_Bay [Atlantic Standard Time]";
+timezoneMap["America/Goose_Bay"] = "America/Goose_Bay [Atlantic Standard Time]";
+timezoneMap["America/Grenada"] = "America/Grenada [Atlantic Standard Time]";
+timezoneMap["America/Guadeloupe"] = "America/Guadeloupe [Atlantic Standard Time]";
+timezoneMap["America/Guyana"] = "America/Guyana [Guyana Time]";
+timezoneMap["America/Halifax"] = "America/Halifax [Atlantic Standard Time]";
+timezoneMap["America/Kralendijk"] = "America/Kralendijk [GMT-04:00]";
+timezoneMap["America/La_Paz"] = "America/La_Paz [Bolivia Time]";
+timezoneMap["America/Lower_Princes"] = "America/Lower_Princes [GMT-04:00]";
+timezoneMap["America/Manaus"] = "America/Manaus [Amazon Time]";
+timezoneMap["America/Marigot"] = "America/Marigot [Atlantic Standard Time]";
+timezoneMap["America/Martinique"] = "America/Martinique [Atlantic Standard Time]";
+timezoneMap["America/Moncton"] = "America/Moncton [Atlantic Standard Time]";
+timezoneMap["America/Montserrat"] = "America/Montserrat [Atlantic Standard Time]";
+timezoneMap["America/Port_of_Spain"] = "America/Port_of_Spain [Atlantic Standard Time]";
+timezoneMap["America/Porto_Acre"] = "America/Porto_Acre [Amazon Time]";
+timezoneMap["America/Porto_Velho"] = "America/Porto_Velho [Amazon Time]";
+timezoneMap["America/Puerto_Rico"] = "America/Puerto_Rico [Atlantic Standard Time]";
+timezoneMap["America/Rio_Branco"] = "America/Rio_Branco [Amazon Time]";
+timezoneMap["America/Santiago"] = "America/Santiago [Chile Time]";
+timezoneMap["America/Santo_Domingo"] = "America/Santo_Domingo [Atlantic Standard Time]";
+timezoneMap["America/St_Barthelemy"] = "America/St_Barthelemy [Atlantic Standard Time]";
+timezoneMap["America/St_Kitts"] = "America/St_Kitts [Atlantic Standard Time]";
+timezoneMap["America/St_Lucia"] = "America/St_Lucia [Atlantic Standard Time]";
+timezoneMap["America/St_Thomas"] = "America/St_Thomas [Atlantic Standard Time]";
+timezoneMap["America/St_Vincent"] = "America/St_Vincent [Atlantic Standard Time]";
+timezoneMap["America/Thule"] = "America/Thule [Atlantic Standard Time]";
+timezoneMap["America/Tortola"] = "America/Tortola [Atlantic Standard Time]";
+timezoneMap["America/Virgin"] = "America/Virgin [Atlantic Standard Time]";
+timezoneMap["Antarctica/Palmer"] = "Antarctica/Palmer [Chile Time]";
+timezoneMap["Atlantic/Bermuda"] = "Atlantic/Bermuda [Atlantic Standard Time]";
+timezoneMap["Brazil/Acre"] = "Brazil/Acre [Amazon Time]";
+timezoneMap["Brazil/West"] = "Brazil/West [Amazon Time]";
+timezoneMap["Canada/Atlantic"] = "Canada/Atlantic [Atlantic Standard Time]";
+timezoneMap["Chile/Continental"] = "Chile/Continental [Chile Time]";
+timezoneMap["Etc/GMT+4"] = "Etc/GMT+4 [GMT-04:00]";
+timezoneMap["PRT"] = "PRT [Atlantic Standard Time]";
+timezoneMap["SystemV/AST4"] = "SystemV/AST4 [Atlantic Standard Time]";
+timezoneMap["SystemV/AST4ADT"] = "SystemV/AST4ADT [Atlantic Standard Time]";
+timezoneMap["America/St_Johns"] = "America/St_Johns [Newfoundland Standard Time]";
+timezoneMap["CNT"] = "CNT [Newfoundland Standard Time]";
+timezoneMap["Canada/Newfoundland"] = "Canada/Newfoundland [Newfoundland Standard Time]";
+timezoneMap["AGT"] = "AGT [Argentine Time]";
+timezoneMap["America/Araguaina"] = "America/Araguaina [Brasilia Time]";
+timezoneMap["America/Argentina/Buenos_Aires"] = "America/Argentina/Buenos_Aires [Argentine Time]";
+timezoneMap["America/Argentina/Catamarca"] = "America/Argentina/Catamarca [Argentine Time]";
+timezoneMap["America/Argentina/ComodRivadavia"] = "America/Argentina/ComodRivadavia [Argentine Time]";
+timezoneMap["America/Argentina/Cordoba"] = "America/Argentina/Cordoba [Argentine Time]";
+timezoneMap["America/Argentina/Jujuy"] = "America/Argentina/Jujuy [Argentine Time]";
+timezoneMap["America/Argentina/La_Rioja"] = "America/Argentina/La_Rioja [Argentine Time]";
+timezoneMap["America/Argentina/Mendoza"] = "America/Argentina/Mendoza [Argentine Time]";
+timezoneMap["America/Argentina/Rio_Gallegos"] = "America/Argentina/Rio_Gallegos [Argentine Time]";
+timezoneMap["America/Argentina/Salta"] = "America/Argentina/Salta [Argentine Time]";
+timezoneMap["America/Argentina/San_Juan"] = "America/Argentina/San_Juan [Argentine Time]";
+timezoneMap["America/Argentina/Tucuman"] = "America/Argentina/Tucuman [Argentine Time]";
+timezoneMap["America/Argentina/Ushuaia"] = "America/Argentina/Ushuaia [Argentine Time]";
+timezoneMap["America/Bahia"] = "America/Bahia [Brasilia Time]";
+timezoneMap["America/Belem"] = "America/Belem [Brasilia Time]";
+timezoneMap["America/Buenos_Aires"] = "America/Buenos_Aires [Argentine Time]";
+timezoneMap["America/Catamarca"] = "America/Catamarca [Argentine Time]";
+timezoneMap["America/Cayenne"] = "America/Cayenne [French Guiana Time]";
+timezoneMap["America/Cordoba"] = "America/Cordoba [Argentine Time]";
+timezoneMap["America/Fortaleza"] = "America/Fortaleza [Brasilia Time]";
+timezoneMap["America/Godthab"] = "America/Godthab [Western Greenland Time]";
+timezoneMap["America/Jujuy"] = "America/Jujuy [Argentine Time]";
+timezoneMap["America/Maceio"] = "America/Maceio [Brasilia Time]";
+timezoneMap["America/Mendoza"] = "America/Mendoza [Argentine Time]";
+timezoneMap["America/Miquelon"] = "America/Miquelon [Pierre & Miquelon Standard Time]";
+timezoneMap["America/Montevideo"] = "America/Montevideo [Uruguay Time]";
+timezoneMap["America/Paramaribo"] = "America/Paramaribo [Suriname Time]";
+timezoneMap["America/Recife"] = "America/Recife [Brasilia Time]";
+timezoneMap["America/Rosario"] = "America/Rosario [Argentine Time]";
+timezoneMap["America/Santarem"] = "America/Santarem [Brasilia Time]";
+timezoneMap["America/Sao_Paulo"] = "America/Sao_Paulo [Brasilia Time]";
+timezoneMap["Antarctica/Rothera"] = "Antarctica/Rothera [Rothera Time]";
+timezoneMap["Atlantic/Stanley"] = "Atlantic/Stanley [Falkland Is. Time]";
+timezoneMap["BET"] = "BET [Brasilia Time]";
+timezoneMap["Brazil/East"] = "Brazil/East [Brasilia Time]";
+timezoneMap["Etc/GMT+3"] = "Etc/GMT+3 [GMT-03:00]";
+timezoneMap["America/Noronha"] = "America/Noronha [Fernando de Noronha Time]";
+timezoneMap["Atlantic/South_Georgia"] = "Atlantic/South_Georgia [South Georgia Standard Time]";
+timezoneMap["Brazil/DeNoronha"] = "Brazil/DeNoronha [Fernando de Noronha Time]";
+timezoneMap["Etc/GMT+2"] = "Etc/GMT+2 [GMT-02:00]";
+timezoneMap["America/Scoresbysund"] = "America/Scoresbysund [Eastern Greenland Time]";
+timezoneMap["Atlantic/Azores"] = "Atlantic/Azores [Azores Time]";
+timezoneMap["Atlantic/Cape_Verde"] = "Atlantic/Cape_Verde [Cape Verde Time]";
+timezoneMap["Etc/GMT+1"] = "Etc/GMT+1 [GMT-01:00]";
+timezoneMap["Africa/Abidjan"] = "Africa/Abidjan [Greenwich Mean Time]";
+timezoneMap["Africa/Accra"] = "Africa/Accra [Ghana Mean Time]";
+timezoneMap["Africa/Bamako"] = "Africa/Bamako [Greenwich Mean Time]";
+timezoneMap["Africa/Banjul"] = "Africa/Banjul [Greenwich Mean Time]";
+timezoneMap["Africa/Bissau"] = "Africa/Bissau [Greenwich Mean Time]";
+timezoneMap["Africa/Casablanca"] = "Africa/Casablanca [Western European Time]";
+timezoneMap["Africa/Conakry"] = "Africa/Conakry [Greenwich Mean Time]";
+timezoneMap["Africa/Dakar"] = "Africa/Dakar [Greenwich Mean Time]";
+timezoneMap["Africa/El_Aaiun"] = "Africa/El_Aaiun [Western European Time]";
+timezoneMap["Africa/Freetown"] = "Africa/Freetown [Greenwich Mean Time]";
+timezoneMap["Africa/Lome"] = "Africa/Lome [Greenwich Mean Time]";
+timezoneMap["Africa/Monrovia"] = "Africa/Monrovia [Greenwich Mean Time]";
+timezoneMap["Africa/Nouakchott"] = "Africa/Nouakchott [Greenwich Mean Time]";
+timezoneMap["Africa/Ouagadougou"] = "Africa/Ouagadougou [Greenwich Mean Time]";
+timezoneMap["Africa/Sao_Tome"] = "Africa/Sao_Tome [Greenwich Mean Time]";
+timezoneMap["Africa/Timbuktu"] = "Africa/Timbuktu [Greenwich Mean Time]";
+timezoneMap["America/Danmarkshavn"] = "America/Danmarkshavn [Greenwich Mean Time]";
+timezoneMap["Atlantic/Canary"] = "Atlantic/Canary [Western European Time]";
+timezoneMap["Atlantic/Faeroe"] = "Atlantic/Faeroe [Western European Time]";
+timezoneMap["Atlantic/Faroe"] = "Atlantic/Faroe [Western European Time]";
+timezoneMap["Atlantic/Madeira"] = "Atlantic/Madeira [Western European Time]";
+timezoneMap["Atlantic/Reykjavik"] = "Atlantic/Reykjavik [Greenwich Mean Time]";
+timezoneMap["Atlantic/St_Helena"] = "Atlantic/St_Helena [Greenwich Mean Time]";
+timezoneMap["Eire"] = "Eire [Greenwich Mean Time]";
+timezoneMap["Etc/GMT"] = "Etc/GMT [GMT+00:00]";
+timezoneMap["Etc/GMT+0"] = "Etc/GMT+0 [GMT+00:00]";
+timezoneMap["Etc/GMT-0"] = "Etc/GMT-0 [GMT+00:00]";
+timezoneMap["Etc/GMT0"] = "Etc/GMT0 [GMT+00:00]";
+timezoneMap["Etc/Greenwich"] = "Etc/Greenwich [Greenwich Mean Time]";
+timezoneMap["Etc/UCT"] = "Etc/UCT [Coordinated Universal Time]";
+timezoneMap["Etc/UTC"] = "Etc/UTC [Coordinated Universal Time]";
+timezoneMap["Etc/Universal"] = "Etc/Universal [Coordinated Universal Time]";
+timezoneMap["Etc/Zulu"] = "Etc/Zulu [Coordinated Universal Time]";
+timezoneMap["Europe/Belfast"] = "Europe/Belfast [Greenwich Mean Time]";
+timezoneMap["Europe/Dublin"] = "Europe/Dublin [Greenwich Mean Time]";
+timezoneMap["Europe/Guernsey"] = "Europe/Guernsey [Greenwich Mean Time]";
+timezoneMap["Europe/Isle_of_Man"] = "Europe/Isle_of_Man [Greenwich Mean Time]";
+timezoneMap["Europe/Jersey"] = "Europe/Jersey [Greenwich Mean Time]";
+timezoneMap["Europe/Lisbon"] = "Europe/Lisbon [Western European Time]";
+timezoneMap["Europe/London"] = "Europe/London [Greenwich Mean Time]";
+timezoneMap["GB"] = "GB [Greenwich Mean Time]";
+timezoneMap["GB-Eire"] = "GB-Eire [Greenwich Mean Time]";
+timezoneMap["GMT"] = "GMT [Greenwich Mean Time]";
+timezoneMap["GMT0"] = "GMT0 [GMT+00:00]";
+timezoneMap["Greenwich"] = "Greenwich [Greenwich Mean Time]";
+timezoneMap["Iceland"] = "Iceland [Greenwich Mean Time]";
+timezoneMap["Portugal"] = "Portugal [Western European Time]";
+timezoneMap["UCT"] = "UCT [Coordinated Universal Time]";
+timezoneMap["UTC"] = "UTC [Coordinated Universal Time]";
+timezoneMap["Universal"] = "Universal [Coordinated Universal Time]";
+timezoneMap["WET"] = "WET [Western European Time]";
+timezoneMap["Zulu"] = "Zulu [Coordinated Universal Time]";
+timezoneMap["Africa/Algiers"] = "Africa/Algiers [Central European Time]";
+timezoneMap["Africa/Bangui"] = "Africa/Bangui [Western African Time]";
+timezoneMap["Africa/Brazzaville"] = "Africa/Brazzaville [Western African Time]";
+timezoneMap["Africa/Ceuta"] = "Africa/Ceuta [Central European Time]";
+timezoneMap["Africa/Douala"] = "Africa/Douala [Western African Time]";
+timezoneMap["Africa/Kinshasa"] = "Africa/Kinshasa [Western African Time]";
+timezoneMap["Africa/Lagos"] = "Africa/Lagos [Western African Time]";
+timezoneMap["Africa/Libreville"] = "Africa/Libreville [Western African Time]";
+timezoneMap["Africa/Luanda"] = "Africa/Luanda [Western African Time]";
+timezoneMap["Africa/Malabo"] = "Africa/Malabo [Western African Time]";
+timezoneMap["Africa/Ndjamena"] = "Africa/Ndjamena [Western African Time]";
+timezoneMap["Africa/Niamey"] = "Africa/Niamey [Western African Time]";
+timezoneMap["Africa/Porto-Novo"] = "Africa/Porto-Novo [Western African Time]";
+timezoneMap["Africa/Tripoli"] = "Africa/Tripoli [Eastern European Time]";
+timezoneMap["Africa/Tunis"] = "Africa/Tunis [Central European Time]";
+timezoneMap["Africa/Windhoek"] = "Africa/Windhoek [Western African Time]";
+timezoneMap["Arctic/Longyearbyen"] = "Arctic/Longyearbyen [Central European Time]";
+timezoneMap["Atlantic/Jan_Mayen"] = "Atlantic/Jan_Mayen [Central European Time]";
+timezoneMap["CET"] = "CET [Central European Time]";
+timezoneMap["ECT"] = "ECT [Central European Time]";
+timezoneMap["Etc/GMT-1"] = "Etc/GMT-1 [GMT+01:00]";
+timezoneMap["Europe/Amsterdam"] = "Europe/Amsterdam [Central European Time]";
+timezoneMap["Europe/Andorra"] = "Europe/Andorra [Central European Time]";
+timezoneMap["Europe/Belgrade"] = "Europe/Belgrade [Central European Time]";
+timezoneMap["Europe/Berlin"] = "Europe/Berlin [Central European Time]";
+timezoneMap["Europe/Bratislava"] = "Europe/Bratislava [Central European Time]";
+timezoneMap["Europe/Brussels"] = "Europe/Brussels [Central European Time]";
+timezoneMap["Europe/Budapest"] = "Europe/Budapest [Central European Time]";
+timezoneMap["Europe/Busingen"] = "Europe/Busingen [GMT+01:00]";
+timezoneMap["Europe/Copenhagen"] = "Europe/Copenhagen [Central European Time]";
+timezoneMap["Europe/Gibraltar"] = "Europe/Gibraltar [Central European Time]";
+timezoneMap["Europe/Ljubljana"] = "Europe/Ljubljana [Central European Time]";
+timezoneMap["Europe/Luxembourg"] = "Europe/Luxembourg [Central European Time]";
+timezoneMap["Europe/Madrid"] = "Europe/Madrid [Central European Time]";
+timezoneMap["Europe/Malta"] = "Europe/Malta [Central European Time]";
+timezoneMap["Europe/Monaco"] = "Europe/Monaco [Central European Time]";
+timezoneMap["Europe/Oslo"] = "Europe/Oslo [Central European Time]";
+timezoneMap["Europe/Paris"] = "Europe/Paris [Central European Time]";
+timezoneMap["Europe/Podgorica"] = "Europe/Podgorica [Central European Time]";
+timezoneMap["Europe/Prague"] = "Europe/Prague [Central European Time]";
+timezoneMap["Europe/Rome"] = "Europe/Rome [Central European Time]";
+timezoneMap["Europe/San_Marino"] = "Europe/San_Marino [Central European Time]";
+timezoneMap["Europe/Sarajevo"] = "Europe/Sarajevo [Central European Time]";
+timezoneMap["Europe/Skopje"] = "Europe/Skopje [Central European Time]";
+timezoneMap["Europe/Stockholm"] = "Europe/Stockholm [Central European Time]";
+timezoneMap["Europe/Tirane"] = "Europe/Tirane [Central European Time]";
+timezoneMap["Europe/Vaduz"] = "Europe/Vaduz [Central European Time]";
+timezoneMap["Europe/Vatican"] = "Europe/Vatican [Central European Time]";
+timezoneMap["Europe/Vienna"] = "Europe/Vienna [Central European Time]";
+timezoneMap["Europe/Warsaw"] = "Europe/Warsaw [Central European Time]";
+timezoneMap["Europe/Zagreb"] = "Europe/Zagreb [Central European Time]";
+timezoneMap["Europe/Zurich"] = "Europe/Zurich [Central European Time]";
+timezoneMap["Libya"] = "Libya [Eastern European Time]";
+timezoneMap["MET"] = "MET [Middle Europe Time]";
+timezoneMap["ART"] = "ART [Eastern European Time]";
+timezoneMap["Africa/Blantyre"] = "Africa/Blantyre [Central African Time]";
+timezoneMap["Africa/Bujumbura"] = "Africa/Bujumbura [Central African Time]";
+timezoneMap["Africa/Cairo"] = "Africa/Cairo [Eastern European Time]";
+timezoneMap["Africa/Gaborone"] = "Africa/Gaborone [Central African Time]";
+timezoneMap["Africa/Harare"] = "Africa/Harare [Central African Time]";
+timezoneMap["Africa/Johannesburg"] = "Africa/Johannesburg [South Africa Standard Time]";
+timezoneMap["Africa/Kigali"] = "Africa/Kigali [Central African Time]";
+timezoneMap["Africa/Lubumbashi"] = "Africa/Lubumbashi [Central African Time]";
+timezoneMap["Africa/Lusaka"] = "Africa/Lusaka [Central African Time]";
+timezoneMap["Africa/Maputo"] = "Africa/Maputo [Central African Time]";
+timezoneMap["Africa/Maseru"] = "Africa/Maseru [South Africa Standard Time]";
+timezoneMap["Africa/Mbabane"] = "Africa/Mbabane [South Africa Standard Time]";
+timezoneMap["Asia/Amman"] = "Asia/Amman [Eastern European Time]";
+timezoneMap["Asia/Beirut"] = "Asia/Beirut [Eastern European Time]";
+timezoneMap["Asia/Damascus"] = "Asia/Damascus [Eastern European Time]";
+timezoneMap["Asia/Gaza"] = "Asia/Gaza [Eastern European Time]";
+timezoneMap["Asia/Hebron"] = "Asia/Hebron [GMT+02:00]";
+timezoneMap["Asia/Istanbul"] = "Asia/Istanbul [Eastern European Time]";
+timezoneMap["Asia/Jerusalem"] = "Asia/Jerusalem [Israel Standard Time]";
+timezoneMap["Asia/Nicosia"] = "Asia/Nicosia [Eastern European Time]";
+timezoneMap["Asia/Tel_Aviv"] = "Asia/Tel_Aviv [Israel Standard Time]";
+timezoneMap["CAT"] = "CAT [Central African Time]";
+timezoneMap["EET"] = "EET [Eastern European Time]";
+timezoneMap["Egypt"] = "Egypt [Eastern European Time]";
+timezoneMap["Etc/GMT-2"] = "Etc/GMT-2 [GMT+02:00]";
+timezoneMap["Europe/Athens"] = "Europe/Athens [Eastern European Time]";
+timezoneMap["Europe/Bucharest"] = "Europe/Bucharest [Eastern European Time]";
+timezoneMap["Europe/Chisinau"] = "Europe/Chisinau [Eastern European Time]";
+timezoneMap["Europe/Helsinki"] = "Europe/Helsinki [Eastern European Time]";
+timezoneMap["Europe/Istanbul"] = "Europe/Istanbul [Eastern European Time]";
+timezoneMap["Europe/Kiev"] = "Europe/Kiev [Eastern European Time]";
+timezoneMap["Europe/Mariehamn"] = "Europe/Mariehamn [Eastern European Time]";
+timezoneMap["Europe/Nicosia"] = "Europe/Nicosia [Eastern European Time]";
+timezoneMap["Europe/Riga"] = "Europe/Riga [Eastern European Time]";
+timezoneMap["Europe/Simferopol"] = "Europe/Simferopol [Eastern European Time]";
+timezoneMap["Europe/Sofia"] = "Europe/Sofia [Eastern European Time]";
+timezoneMap["Europe/Tallinn"] = "Europe/Tallinn [Eastern European Time]";
+timezoneMap["Europe/Tiraspol"] = "Europe/Tiraspol [Eastern European Time]";
+timezoneMap["Europe/Uzhgorod"] = "Europe/Uzhgorod [Eastern European Time]";
+timezoneMap["Europe/Vilnius"] = "Europe/Vilnius [Eastern European Time]";
+timezoneMap["Europe/Zaporozhye"] = "Europe/Zaporozhye [Eastern European Time]";
+timezoneMap["Israel"] = "Israel [Israel Standard Time]";
+timezoneMap["Turkey"] = "Turkey [Eastern European Time]";
+timezoneMap["Africa/Addis_Ababa"] = "Africa/Addis_Ababa [Eastern African Time]";
+timezoneMap["Africa/Asmara"] = "Africa/Asmara [Eastern African Time]";
+timezoneMap["Africa/Asmera"] = "Africa/Asmera [Eastern African Time]";
+timezoneMap["Africa/Dar_es_Salaam"] = "Africa/Dar_es_Salaam [Eastern African Time]";
+timezoneMap["Africa/Djibouti"] = "Africa/Djibouti [Eastern African Time]";
+timezoneMap["Africa/Juba"] = "Africa/Juba [GMT+03:00]";
+timezoneMap["Africa/Kampala"] = "Africa/Kampala [Eastern African Time]";
+timezoneMap["Africa/Khartoum"] = "Africa/Khartoum [Eastern African Time]";
+timezoneMap["Africa/Mogadishu"] = "Africa/Mogadishu [Eastern African Time]";
+timezoneMap["Africa/Nairobi"] = "Africa/Nairobi [Eastern African Time]";
+timezoneMap["Antarctica/Syowa"] = "Antarctica/Syowa [Syowa Time]";
+timezoneMap["Asia/Aden"] = "Asia/Aden [Arabia Standard Time]";
+timezoneMap["Asia/Baghdad"] = "Asia/Baghdad [Arabia Standard Time]";
+timezoneMap["Asia/Bahrain"] = "Asia/Bahrain [Arabia Standard Time]";
+timezoneMap["Asia/Kuwait"] = "Asia/Kuwait [Arabia Standard Time]";
+timezoneMap["Asia/Qatar"] = "Asia/Qatar [Arabia Standard Time]";
+timezoneMap["Asia/Riyadh"] = "Asia/Riyadh [Arabia Standard Time]";
+timezoneMap["EAT"] = "EAT [Eastern African Time]";
+timezoneMap["Etc/GMT-3"] = "Etc/GMT-3 [GMT+03:00]";
+timezoneMap["Europe/Kaliningrad"] = "Europe/Kaliningrad [Eastern European Time]";
+timezoneMap["Europe/Minsk"] = "Europe/Minsk [Eastern European Time]";
+timezoneMap["Indian/Antananarivo"] = "Indian/Antananarivo [Eastern African Time]";
+timezoneMap["Indian/Comoro"] = "Indian/Comoro [Eastern African Time]";
+timezoneMap["Indian/Mayotte"] = "Indian/Mayotte [Eastern African Time]";
+timezoneMap["Asia/Riyadh87"] = "Asia/Riyadh87 [GMT+03:07]";
+timezoneMap["Asia/Riyadh88"] = "Asia/Riyadh88 [GMT+03:07]";
+timezoneMap["Asia/Riyadh89"] = "Asia/Riyadh89 [GMT+03:07]";
+timezoneMap["Mideast/Riyadh87"] = "Mideast/Riyadh87 [GMT+03:07]";
+timezoneMap["Mideast/Riyadh88"] = "Mideast/Riyadh88 [GMT+03:07]";
+timezoneMap["Mideast/Riyadh89"] = "Mideast/Riyadh89 [GMT+03:07]";
+timezoneMap["Asia/Tehran"] = "Asia/Tehran [Iran Standard Time]";
+timezoneMap["Iran"] = "Iran [Iran Standard Time]";
+timezoneMap["Asia/Baku"] = "Asia/Baku [Azerbaijan Time]";
+timezoneMap["Asia/Dubai"] = "Asia/Dubai [Gulf Standard Time]";
+timezoneMap["Asia/Muscat"] = "Asia/Muscat [Gulf Standard Time]";
+timezoneMap["Asia/Tbilisi"] = "Asia/Tbilisi [Georgia Time]";
+timezoneMap["Asia/Yerevan"] = "Asia/Yerevan [Armenia Time]";
+timezoneMap["Etc/GMT-4"] = "Etc/GMT-4 [GMT+04:00]";
+timezoneMap["Europe/Moscow"] = "Europe/Moscow [Moscow Standard Time]";
+timezoneMap["Europe/Samara"] = "Europe/Samara [Samara Time]";
+timezoneMap["Europe/Volgograd"] = "Europe/Volgograd [Volgograd Time]";
+timezoneMap["Indian/Mahe"] = "Indian/Mahe [Seychelles Time]";
+timezoneMap["Indian/Mauritius"] = "Indian/Mauritius [Mauritius Time]";
+timezoneMap["Indian/Reunion"] = "Indian/Reunion [Reunion Time]";
+timezoneMap["NET"] = "NET [Armenia Time]";
+timezoneMap["W-SU"] = "W-SU [Moscow Standard Time]";
+timezoneMap["Asia/Kabul"] = "Asia/Kabul [Afghanistan Time]";
+timezoneMap["Antarctica/Mawson"] = "Antarctica/Mawson [Mawson Time]";
+timezoneMap["Asia/Aqtau"] = "Asia/Aqtau [Aqtau Time]";
+timezoneMap["Asia/Aqtobe"] = "Asia/Aqtobe [Aqtobe Time]";
+timezoneMap["Asia/Ashgabat"] = "Asia/Ashgabat [Turkmenistan Time]";
+timezoneMap["Asia/Ashkhabad"] = "Asia/Ashkhabad [Turkmenistan Time]";
+timezoneMap["Asia/Dushanbe"] = "Asia/Dushanbe [Tajikistan Time]";
+timezoneMap["Asia/Karachi"] = "Asia/Karachi [Pakistan Time]";
+timezoneMap["Asia/Oral"] = "Asia/Oral [Oral Time]";
+timezoneMap["Asia/Samarkand"] = "Asia/Samarkand [Uzbekistan Time]";
+timezoneMap["Asia/Tashkent"] = "Asia/Tashkent [Uzbekistan Time]";
+timezoneMap["Etc/GMT-5"] = "Etc/GMT-5 [GMT+05:00]";
+timezoneMap["Indian/Kerguelen"] = "Indian/Kerguelen [French Southern & Antarctic Lands Time]";
+timezoneMap["Indian/Maldives"] = "Indian/Maldives [Maldives Time]";
+timezoneMap["PLT"] = "PLT [Pakistan Time]";
+timezoneMap["Asia/Calcutta"] = "Asia/Calcutta [India Standard Time]";
+timezoneMap["Asia/Colombo"] = "Asia/Colombo [India Standard Time]";
+timezoneMap["Asia/Kolkata"] = "Asia/Kolkata [India Standard Time]";
+timezoneMap["IST"] = "IST [India Standard Time]";
+timezoneMap["Asia/Kathmandu"] = "Asia/Kathmandu [Nepal Time]";
+timezoneMap["Asia/Katmandu"] = "Asia/Katmandu [Nepal Time]";
+timezoneMap["Antarctica/Vostok"] = "Antarctica/Vostok [Vostok Time]";
+timezoneMap["Asia/Almaty"] = "Asia/Almaty [Alma-Ata Time]";
+timezoneMap["Asia/Bishkek"] = "Asia/Bishkek [Kirgizstan Time]";
+timezoneMap["Asia/Dacca"] = "Asia/Dacca [Bangladesh Time]";
+timezoneMap["Asia/Dhaka"] = "Asia/Dhaka [Bangladesh Time]";
+timezoneMap["Asia/Qyzylorda"] = "Asia/Qyzylorda [Qyzylorda Time]";
+timezoneMap["Asia/Thimbu"] = "Asia/Thimbu [Bhutan Time]";
+timezoneMap["Asia/Thimphu"] = "Asia/Thimphu [Bhutan Time]";
+timezoneMap["Asia/Yekaterinburg"] = "Asia/Yekaterinburg [Yekaterinburg Time]";
+timezoneMap["BST"] = "BST [Bangladesh Time]";
+timezoneMap["Etc/GMT-6"] = "Etc/GMT-6 [GMT+06:00]";
+timezoneMap["Indian/Chagos"] = "Indian/Chagos [Indian Ocean Territory Time]";
+timezoneMap["Asia/Rangoon"] = "Asia/Rangoon [Myanmar Time]";
+timezoneMap["Indian/Cocos"] = "Indian/Cocos [Cocos Islands Time]";
+timezoneMap["Antarctica/Davis"] = "Antarctica/Davis [Davis Time]";
+timezoneMap["Asia/Bangkok"] = "Asia/Bangkok [Indochina Time]";
+timezoneMap["Asia/Ho_Chi_Minh"] = "Asia/Ho_Chi_Minh [Indochina Time]";
+timezoneMap["Asia/Hovd"] = "Asia/Hovd [Hovd Time]";
+timezoneMap["Asia/Jakarta"] = "Asia/Jakarta [West Indonesia Time]";
+timezoneMap["Asia/Novokuznetsk"] = "Asia/Novokuznetsk [Novosibirsk Time]";
+timezoneMap["Asia/Novosibirsk"] = "Asia/Novosibirsk [Novosibirsk Time]";
+timezoneMap["Asia/Omsk"] = "Asia/Omsk [Omsk Time]";
+timezoneMap["Asia/Phnom_Penh"] = "Asia/Phnom_Penh [Indochina Time]";
+timezoneMap["Asia/Pontianak"] = "Asia/Pontianak [West Indonesia Time]";
+timezoneMap["Asia/Saigon"] = "Asia/Saigon [Indochina Time]";
+timezoneMap["Asia/Vientiane"] = "Asia/Vientiane [Indochina Time]";
+timezoneMap["Etc/GMT-7"] = "Etc/GMT-7 [GMT+07:00]";
+timezoneMap["Indian/Christmas"] = "Indian/Christmas [Christmas Island Time]";
+timezoneMap["VST"] = "VST [Indochina Time]";
+timezoneMap["Antarctica/Casey"] = "Antarctica/Casey [Western Standard Time (Australia)]";
+timezoneMap["Asia/Brunei"] = "Asia/Brunei [Brunei Time]";
+timezoneMap["Asia/Choibalsan"] = "Asia/Choibalsan [Choibalsan Time]";
+timezoneMap["Asia/Chongqing"] = "Asia/Chongqing [China Standard Time]";
+timezoneMap["Asia/Chungking"] = "Asia/Chungking [China Standard Time]";
+timezoneMap["Asia/Harbin"] = "Asia/Harbin [China Standard Time]";
+timezoneMap["Asia/Hong_Kong"] = "Asia/Hong_Kong [Hong Kong Time]";
+timezoneMap["Asia/Kashgar"] = "Asia/Kashgar [China Standard Time]";
+timezoneMap["Asia/Krasnoyarsk"] = "Asia/Krasnoyarsk [Krasnoyarsk Time]";
+timezoneMap["Asia/Kuala_Lumpur"] = "Asia/Kuala_Lumpur [Malaysia Time]";
+timezoneMap["Asia/Kuching"] = "Asia/Kuching [Malaysia Time]";
+timezoneMap["Asia/Macao"] = "Asia/Macao [China Standard Time]";
+timezoneMap["Asia/Macau"] = "Asia/Macau [China Standard Time]";
+timezoneMap["Asia/Makassar"] = "Asia/Makassar [Central Indonesia Time]";
+timezoneMap["Asia/Manila"] = "Asia/Manila [Philippines Time]";
+timezoneMap["Asia/Shanghai"] = "Asia/Shanghai [China Standard Time]";
+timezoneMap["Asia/Singapore"] = "Asia/Singapore [Singapore Time]";
+timezoneMap["Asia/Taipei"] = "Asia/Taipei [China Standard Time]";
+timezoneMap["Asia/Ujung_Pandang"] = "Asia/Ujung_Pandang [Central Indonesia Time]";
+timezoneMap["Asia/Ulaanbaatar"] = "Asia/Ulaanbaatar [Ulaanbaatar Time]";
+timezoneMap["Asia/Ulan_Bator"] = "Asia/Ulan_Bator [Ulaanbaatar Time]";
+timezoneMap["Asia/Urumqi"] = "Asia/Urumqi [China Standard Time]";
+timezoneMap["Australia/Perth"] = "Australia/Perth [Western Standard Time (Australia)]";
+timezoneMap["Australia/West"] = "Australia/West [Western Standard Time (Australia)]";
+timezoneMap["CTT"] = "CTT [China Standard Time]";
+timezoneMap["Etc/GMT-8"] = "Etc/GMT-8 [GMT+08:00]";
+timezoneMap["Hongkong"] = "Hongkong [Hong Kong Time]";
+timezoneMap["PRC"] = "PRC [China Standard Time]";
+timezoneMap["Singapore"] = "Singapore [Singapore Time]";
+timezoneMap["Australia/Eucla"] = "Australia/Eucla [Central Western Standard Time (Australia)]";
+timezoneMap["Asia/Dili"] = "Asia/Dili [Timor-Leste Time]";
+timezoneMap["Asia/Irkutsk"] = "Asia/Irkutsk [Irkutsk Time]";
+timezoneMap["Asia/Jayapura"] = "Asia/Jayapura [East Indonesia Time]";
+timezoneMap["Asia/Pyongyang"] = "Asia/Pyongyang [Korea Standard Time]";
+timezoneMap["Asia/Seoul"] = "Asia/Seoul [Korea Standard Time]";
+timezoneMap["Asia/Tokyo"] = "Asia/Tokyo [Japan Standard Time]";
+timezoneMap["Etc/GMT-9"] = "Etc/GMT-9 [GMT+09:00]";
+timezoneMap["JST"] = "JST [Japan Standard Time]";
+timezoneMap["Japan"] = "Japan [Japan Standard Time]";
+timezoneMap["Pacific/Palau"] = "Pacific/Palau [Palau Time]";
+timezoneMap["ROK"] = "ROK [Korea Standard Time]";
+timezoneMap["ACT"] = "ACT [Central Standard Time (Northern Territory)]";
+timezoneMap["Australia/Adelaide"] = "Australia/Adelaide [Central Standard Time (South Australia)]";
+timezoneMap["Australia/Broken_Hill"] = "Australia/Broken_Hill [Central Standard Time (South Australia/New South Wales)]";
+timezoneMap["Australia/Darwin"] = "Australia/Darwin [Central Standard Time (Northern Territory)]";
+timezoneMap["Australia/North"] = "Australia/North [Central Standard Time (Northern Territory)]";
+timezoneMap["Australia/South"] = "Australia/South [Central Standard Time (South Australia)]";
+timezoneMap["Australia/Yancowinna"] = "Australia/Yancowinna [Central Standard Time (South Australia/New South Wales)]";
+timezoneMap["AET"] = "AET [Eastern Standard Time (New South Wales)]";
+timezoneMap["Antarctica/DumontDUrville"] = "Antarctica/DumontDUrville [Dumont-d'Urville Time]";
+timezoneMap["Asia/Khandyga"] = "Asia/Khandyga [GMT+10:00]";
+timezoneMap["Asia/Yakutsk"] = "Asia/Yakutsk [Yakutsk Time]";
+timezoneMap["Australia/ACT"] = "Australia/ACT [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Brisbane"] = "Australia/Brisbane [Eastern Standard Time (Queensland)]";
+timezoneMap["Australia/Canberra"] = "Australia/Canberra [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Currie"] = "Australia/Currie [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Hobart"] = "Australia/Hobart [Eastern Standard Time (Tasmania)]";
+timezoneMap["Australia/Lindeman"] = "Australia/Lindeman [Eastern Standard Time (Queensland)]";
+timezoneMap["Australia/Melbourne"] = "Australia/Melbourne [Eastern Standard Time (Victoria)]";
+timezoneMap["Australia/NSW"] = "Australia/NSW [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Queensland"] = "Australia/Queensland [Eastern Standard Time (Queensland)]";
+timezoneMap["Australia/Sydney"] = "Australia/Sydney [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Tasmania"] = "Australia/Tasmania [Eastern Standard Time (Tasmania)]";
+timezoneMap["Australia/Victoria"] = "Australia/Victoria [Eastern Standard Time (Victoria)]";
+timezoneMap["Etc/GMT-10"] = "Etc/GMT-10 [GMT+10:00]";
+timezoneMap["Pacific/Chuuk"] = "Pacific/Chuuk [GMT+10:00]";
+timezoneMap["Pacific/Guam"] = "Pacific/Guam [Chamorro Standard Time]";
+timezoneMap["Pacific/Port_Moresby"] = "Pacific/Port_Moresby [Papua New Guinea Time]";
+timezoneMap["Pacific/Saipan"] = "Pacific/Saipan [Chamorro Standard Time]";
+timezoneMap["Pacific/Truk"] = "Pacific/Truk [Truk Time]";
+timezoneMap["Pacific/Yap"] = "Pacific/Yap [Truk Time]";
+timezoneMap["Australia/LHI"] = "Australia/LHI [Lord Howe Standard Time]";
+timezoneMap["Australia/Lord_Howe"] = "Australia/Lord_Howe [Lord Howe Standard Time]";
+timezoneMap["Antarctica/Macquarie"] = "Antarctica/Macquarie [Macquarie Island Time]";
+timezoneMap["Asia/Sakhalin"] = "Asia/Sakhalin [Sakhalin Time]";
+timezoneMap["Asia/Ust-Nera"] = "Asia/Ust-Nera [GMT+11:00]";
+timezoneMap["Asia/Vladivostok"] = "Asia/Vladivostok [Vladivostok Time]";
+timezoneMap["Etc/GMT-11"] = "Etc/GMT-11 [GMT+11:00]";
+timezoneMap["Pacific/Efate"] = "Pacific/Efate [Vanuatu Time]";
+timezoneMap["Pacific/Guadalcanal"] = "Pacific/Guadalcanal [Solomon Is. Time]";
+timezoneMap["Pacific/Kosrae"] = "Pacific/Kosrae [Kosrae Time]";
+timezoneMap["Pacific/Noumea"] = "Pacific/Noumea [New Caledonia Time]";
+timezoneMap["Pacific/Pohnpei"] = "Pacific/Pohnpei [GMT+11:00]";
+timezoneMap["Pacific/Ponape"] = "Pacific/Ponape [Ponape Time]";
+timezoneMap["SST"] = "SST [Solomon Is. Time]";
+timezoneMap["Pacific/Norfolk"] = "Pacific/Norfolk [Norfolk Time]";
+timezoneMap["Antarctica/McMurdo"] = "Antarctica/McMurdo [New Zealand Standard Time]";
+timezoneMap["Antarctica/South_Pole"] = "Antarctica/South_Pole [New Zealand Standard Time]";
+timezoneMap["Asia/Anadyr"] = "Asia/Anadyr [Anadyr Time]";
+timezoneMap["Asia/Kamchatka"] = "Asia/Kamchatka [Petropavlovsk-Kamchatski Time]";
+timezoneMap["Asia/Magadan"] = "Asia/Magadan [Magadan Time]";
+timezoneMap["Etc/GMT-12"] = "Etc/GMT-12 [GMT+12:00]";
+timezoneMap["Kwajalein"] = "Kwajalein [Marshall Islands Time]";
+timezoneMap["NST"] = "NST [New Zealand Standard Time]";
+timezoneMap["NZ"] = "NZ [New Zealand Standard Time]";
+timezoneMap["Pacific/Auckland"] = "Pacific/Auckland [New Zealand Standard Time]";
+timezoneMap["Pacific/Fiji"] = "Pacific/Fiji [Fiji Time]";
+timezoneMap["Pacific/Funafuti"] = "Pacific/Funafuti [Tuvalu Time]";
+timezoneMap["Pacific/Kwajalein"] = "Pacific/Kwajalein [Marshall Islands Time]";
+timezoneMap["Pacific/Majuro"] = "Pacific/Majuro [Marshall Islands Time]";
+timezoneMap["Pacific/Nauru"] = "Pacific/Nauru [Nauru Time]";
+timezoneMap["Pacific/Tarawa"] = "Pacific/Tarawa [Gilbert Is. Time]";
+timezoneMap["Pacific/Wake"] = "Pacific/Wake [Wake Time]";
+timezoneMap["Pacific/Wallis"] = "Pacific/Wallis [Wallis & Futuna Time]";
+timezoneMap["NZ-CHAT"] = "NZ-CHAT [Chatham Standard Time]";
+timezoneMap["Pacific/Chatham"] = "Pacific/Chatham [Chatham Standard Time]";
+timezoneMap["Etc/GMT-13"] = "Etc/GMT-13 [GMT+13:00]";
+timezoneMap["MIT"] = "MIT [West Samoa Time]";
+timezoneMap["Pacific/Apia"] = "Pacific/Apia [West Samoa Time]";
+timezoneMap["Pacific/Enderbury"] = "Pacific/Enderbury [Phoenix Is. Time]";
+timezoneMap["Pacific/Fakaofo"] = "Pacific/Fakaofo [Tokelau Time]";
+timezoneMap["Pacific/Tongatapu"] = "Pacific/Tongatapu [Tonga Time]";
+timezoneMap["Etc/GMT-14"] = "Etc/GMT-14 [GMT+14:00]";
+timezoneMap["Pacific/Kiritimati"] = "Pacific/Kiritimati [Line Is. Time]";
+
// CloudStack common API helpers
cloudStack.api = {
[34/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4662: UI > Network > IP Address > select a portable IP Address > Port Forwarding > VM grid - select a VM - dropdown of VM NIC IP appears - dropdown option value is networkID + VmGuestIp, split it and pass only VmGuestIp to API call.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2e2d1ace
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2e2d1ace
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2e2d1ace
Branch: refs/heads/kvm-vnc-listen
Commit: 2e2d1acefc89e157539fe2b2e3b846848dc1e427
Parents: 1042136
Author: Jessica Wang <je...@apache.org>
Authored: Thu Sep 12 19:11:13 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Sep 12 19:21:57 2013 -0700
----------------------------------------------------------------------
ui/scripts/network.js | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2e2d1ace/ui/scripts/network.js
----------------------------------------------------------------------
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index 0afa360..a09e565 100755
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -3842,10 +3842,20 @@
virtualmachineid: args.itemData[0].id,
openfirewall: false
};
+
+ if (args.context.ipAddresses[0].isportable) {
+ var subselect = args.itemData[0]._subselect.split(',');
+ //var networkid = subselect[0];
+ var vmguestip = subselect[1];
- if (args.itemData[0]._subselect && args.itemData[0]._subselect != -1) {
+ //data.networkid = networkid;
+
+ if (parseInt(vmguestip) !== -1) {
+ data.vmguestip = vmguestip;
+ }
+ } else if (args.itemData[0]._subselect && args.itemData[0]._subselect != -1) {
data.vmguestip = args.itemData[0]._subselect;
- }
+ }
if ('vpc' in args.context) { //from VPC section
if (args.data.tier == null) {
[48/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
release notes structure issue fixed, links to known issues and fixed issues have been added
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5410901a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5410901a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5410901a
Branch: refs/heads/kvm-vnc-listen
Commit: 5410901aebed4ada581b853e0ca02d9f855a68f1
Parents: 94377dd
Author: radhikap <ra...@citrix.com>
Authored: Sat Sep 14 10:48:56 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Sat Sep 14 10:48:56 2013 +0530
----------------------------------------------------------------------
docs/en-US/Release_Notes.xml | 2607 ++++++++++++++-----------------------
1 file changed, 961 insertions(+), 1646 deletions(-)
----------------------------------------------------------------------
[10/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
new features section updated, api section added CLOUDSTACK-4245
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b12f3d6b
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b12f3d6b
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b12f3d6b
Branch: refs/heads/kvm-vnc-listen
Commit: b12f3d6bad652c651ec0fe1968ccf8f889543b00
Parents: a987a8a
Author: radhikap <ra...@citrix.com>
Authored: Wed Sep 11 11:26:40 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Wed Sep 11 11:26:40 2013 +0530
----------------------------------------------------------------------
docs/en-US/Release_Notes.xml | 2980 +++++++++++++++++++++++++++++++++--
docs/en-US/removed-api-4.2.xml | 2 +-
2 files changed, 2854 insertions(+), 128 deletions(-)
----------------------------------------------------------------------
[07/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Fix apidoc build
Signed-off-by: Prasanna Santhanam <ts...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a987a8ac
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a987a8ac
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a987a8ac
Branch: refs/heads/kvm-vnc-listen
Commit: a987a8aca1b816025c14463081530c50baae33e5
Parents: 343ca47
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Tue Sep 10 22:23:56 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Wed Sep 11 09:40:48 2013 +0530
----------------------------------------------------------------------
tools/apidoc/gen_toc.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a987a8ac/tools/apidoc/gen_toc.py
----------------------------------------------------------------------
diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py
index 2d96b1b..9c53a48 100644
--- a/tools/apidoc/gen_toc.py
+++ b/tools/apidoc/gen_toc.py
@@ -118,7 +118,7 @@ known_categories = {
'TrafficType': 'Usage',
'Product': 'Product',
'LB': 'Load Balancer',
- 'Ldap': 'LDAP',
+ 'ldap': 'LDAP',
'Swift': 'Swift',
'S3' : 'S3',
'SecondaryStorage': 'Host',
[02/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4628:[Automation] Failed to create template from snapshot
with same name; after deleting the first one.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/16a1f150
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/16a1f150
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/16a1f150
Branch: refs/heads/kvm-vnc-listen
Commit: 16a1f150eb3fd6f9633b9926a153575d34076787
Parents: 771b837
Author: Min Chen <mi...@citrix.com>
Authored: Mon Sep 9 16:07:46 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Mon Sep 9 16:10:33 2013 -0700
----------------------------------------------------------------------
.../cloudstack/storage/motion/AncientDataMotionStrategy.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/16a1f150/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
----------------------------------------------------------------------
diff --git a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
index 4bcaedb..c8a24c6 100644
--- a/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
+++ b/engine/storage/datamotion/src/org/apache/cloudstack/storage/motion/AncientDataMotionStrategy.java
@@ -432,7 +432,9 @@ public class
int _createprivatetemplatefromsnapshotwait = NumbersUtil.parseInt(value,
Integer.parseInt(Config.CreatePrivateTemplateFromSnapshotWait.getDefaultValue()));
+ boolean needCache = false;
if (needCacheStorage(srcData, destData)) {
+ needCache = true;
SnapshotInfo snapshot = (SnapshotInfo) srcData;
srcData = cacheSnapshotChain(snapshot);
}
@@ -442,7 +444,7 @@ public class
Answer answer = ep.sendMessage(cmd);
// clean up snapshot copied to staging
- if (srcData != null) {
+ if (needCache && srcData != null) {
cacheMgr.deleteCacheObject(srcData);
}
return answer;
[40/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Return name for getName() on LdapAuthenticator
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/9febf4c4
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/9febf4c4
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/9febf4c4
Branch: refs/heads/kvm-vnc-listen
Commit: 9febf4c43e06b8a977d6c7a2764df611f23923f6
Parents: ae1cebf
Author: Ian Duffy <ia...@ianduffy.ie>
Authored: Fri Sep 13 17:22:52 2013 +0100
Committer: Ian Duffy <ia...@ianduffy.ie>
Committed: Fri Sep 13 17:22:52 2013 +0100
----------------------------------------------------------------------
.../src/org/apache/cloudstack/ldap/LdapAuthenticator.java | 10 ++++++++++
1 file changed, 10 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9febf4c4/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapAuthenticator.java
----------------------------------------------------------------------
diff --git a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapAuthenticator.java b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapAuthenticator.java
index 559a979..e62a3d8 100644
--- a/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapAuthenticator.java
+++ b/plugins/user-authenticators/ldap/src/org/apache/cloudstack/ldap/LdapAuthenticator.java
@@ -19,6 +19,7 @@ package org.apache.cloudstack.ldap;
import java.util.Map;
import javax.inject.Inject;
+import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
@@ -47,6 +48,15 @@ public class LdapAuthenticator extends DefaultUserAuthenticator {
}
@Override
+ public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+ if (name == null) {
+ name = "LDAP";
+ }
+ super.configure(name, params);
+ return true;
+ }
+
+ @Override
public boolean authenticate(final String username, final String password,
final Long domainId, final Map<String, Object[]> requestParameters) {
[43/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4671:ListZone API failed with Assertion error if assertion is
turned on for MS.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/22c5ea0e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/22c5ea0e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/22c5ea0e
Branch: refs/heads/kvm-vnc-listen
Commit: 22c5ea0ebe3e2e037451832f688fd7e6404a36dc
Parents: fea5ba7
Author: Min Chen <mi...@citrix.com>
Authored: Fri Sep 13 16:53:11 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Fri Sep 13 17:21:24 2013 -0700
----------------------------------------------------------------------
server/src/com/cloud/api/query/QueryManagerImpl.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/22c5ea0e/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index 0d6faef..3bf929a 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -2510,7 +2510,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
sdc.addOr("accountId", SearchCriteria.Op.EQ, account.getId());
sdc.addOr("accountId", SearchCriteria.Op.NULL);
- sc.addAnd("account", SearchCriteria.Op.SC, sdc);
+ sc.addAnd("accountId", SearchCriteria.Op.SC, sdc);
}
} else if (account.getType() == Account.ACCOUNT_TYPE_NORMAL) {
@@ -2539,7 +2539,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
SearchCriteria<DataCenterJoinVO> sdc = _dcJoinDao.createSearchCriteria();
sdc.addOr("domainId", SearchCriteria.Op.IN, domainIds.toArray());
sdc.addOr("domainId", SearchCriteria.Op.NULL);
- sc.addAnd("domain", SearchCriteria.Op.SC, sdc);
+ sc.addAnd("domainId", SearchCriteria.Op.SC, sdc);
// remove disabled zones
sc.addAnd("allocationState", SearchCriteria.Op.NEQ, Grouping.AllocationState.Disabled);
@@ -2550,7 +2550,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
sdc2.addOr("accountId", SearchCriteria.Op.EQ, account.getId());
sdc2.addOr("accountId", SearchCriteria.Op.NULL);
- sc.addAnd("account", SearchCriteria.Op.SC, sdc2);
+ sc.addAnd("accountId", SearchCriteria.Op.SC, sdc2);
// remove Dedicated zones not dedicated to this domainId or
// subdomainId
@@ -2590,7 +2590,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
SearchCriteria<DataCenterJoinVO> sdc = _dcJoinDao.createSearchCriteria();
sdc.addOr("domainId", SearchCriteria.Op.IN, domainIds.toArray());
sdc.addOr("domainId", SearchCriteria.Op.NULL);
- sc.addAnd("domain", SearchCriteria.Op.SC, sdc);
+ sc.addAnd("domainId", SearchCriteria.Op.SC, sdc);
// remove disabled zones
sc.addAnd("allocationState", SearchCriteria.Op.NEQ, Grouping.AllocationState.Disabled);
@@ -2619,7 +2619,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
if (dcIds.size() == 0) {
return new Pair<List<DataCenterJoinVO>, Integer>(new ArrayList<DataCenterJoinVO>(), 0);
} else {
- sc.addAnd("idIn", SearchCriteria.Op.IN, dcIds.toArray());
+ sc.addAnd("id", SearchCriteria.Op.IN, dcIds.toArray());
}
}
[42/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4669: Fix disassociateProfileFromBlade action icon
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/fea5ba72
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/fea5ba72
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/fea5ba72
Branch: refs/heads/kvm-vnc-listen
Commit: fea5ba72e24a08ec8ea49c851b2ad86e207df896
Parents: 6751a81
Author: Brian Federle <br...@citrix.com>
Authored: Fri Sep 13 16:08:23 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Fri Sep 13 16:10:29 2013 -0700
----------------------------------------------------------------------
ui/css/cloudstack3.css | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/fea5ba72/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index e9d9559..6510d0e 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -11890,14 +11890,15 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
.detach .icon,
.detachISO .icon,
-.detachDisk .icon
-.disassociateProfileFromBlade .icon{
+.detachDisk .icon,
+.disassociateProfileFromBlade .icon {
background-position: -101px -65px;
}
.detach:hover .icon,
.detachISO:hover .icon,
-.detachDisk:hover .icon {
+.detachDisk:hover .icon,
+.disassociateProfileFromBlade:hover .icon {
background-position: -101px -647px;
}
[08/50] [abbrv] new features section updated,
api section added CLOUDSTACK-4245
Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b12f3d6b/docs/en-US/removed-api-4.2.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/removed-api-4.2.xml b/docs/en-US/removed-api-4.2.xml
index cf4ab74..596d316 100644
--- a/docs/en-US/removed-api-4.2.xml
+++ b/docs/en-US/removed-api-4.2.xml
@@ -19,7 +19,7 @@
under the License.
-->
<section id="removed-api-4.2">
- <title>Removed APIs</title>
+ <title>Deprecated APIs</title>
<itemizedlist>
<listitem>
<para>deleteCiscoNexusVSM (Deletes a Cisco Nexus VSM device) </para>
[45/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
known issues added, 4.1 reference removed
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f9fb940e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f9fb940e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f9fb940e
Branch: refs/heads/kvm-vnc-listen
Commit: f9fb940e7f454b403cf3a29c51b670edd6c79c3a
Parents: 22c5ea0
Author: radhikap <ra...@citrix.com>
Authored: Sat Sep 14 09:12:33 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Sat Sep 14 09:12:33 2013 +0530
----------------------------------------------------------------------
docs/en-US/Release_Notes.xml | 6079 +------------------------------------
1 file changed, 4 insertions(+), 6075 deletions(-)
----------------------------------------------------------------------
[26/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
build fixed, global parameter and manage cloud were sections, changed to chapter as per adminguide.xml
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f2a360fa
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f2a360fa
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f2a360fa
Branch: refs/heads/kvm-vnc-listen
Commit: f2a360fa0127b942bb002ddb11e82233f6a99618
Parents: c377c15
Author: radhikap <ra...@citrix.com>
Authored: Thu Sep 12 18:06:30 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Thu Sep 12 18:06:30 2013 +0530
----------------------------------------------------------------------
docs/en-US/global-config.xml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f2a360fa/docs/en-US/global-config.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/global-config.xml b/docs/en-US/global-config.xml
index 59373de..237614d 100644
--- a/docs/en-US/global-config.xml
+++ b/docs/en-US/global-config.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8' ?>
-<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>
@@ -21,7 +21,7 @@
specific language governing permissions and limitations
under the License.
-->
-<section id="global-config">
+<chapter id="global-config">
<title>Setting Configuration Parameters</title>
<section id="about-global-config-parameters">
<title>About Configuration Parameters</title>
@@ -339,4 +339,4 @@
</tgroup>
</informaltable>
</section>
-</section>
+</chapter>
[41/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4669: UI > Infrastructure > zone > UCS manager > UCS blade > implement new action disassociateProfileFromBlade.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6751a81a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6751a81a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6751a81a
Branch: refs/heads/kvm-vnc-listen
Commit: 6751a81a7e05f8e4afd204573146944fe2adbb38
Parents: 9febf4c
Author: Jessica Wang <je...@apache.org>
Authored: Fri Sep 13 15:38:21 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Fri Sep 13 15:40:09 2013 -0700
----------------------------------------------------------------------
ui/css/cloudstack3.css | 3 +-
ui/scripts/system.js | 86 +++++++++++++++++++++++++++++++++++++++------
2 files changed, 78 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6751a81a/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 6e706fd..e9d9559 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -11890,7 +11890,8 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
.detach .icon,
.detachISO .icon,
-.detachDisk .icon {
+.detachDisk .icon
+.disassociateProfileFromBlade .icon{
background-position: -101px -65px;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6751a81a/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 3f5a5d4..a3643f3 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -6129,14 +6129,7 @@
}
}
});
- // for testing only (begin)
- /*
- selectedZoneObj.vmwaredcName = "datacenter";
- selectedZoneObj.vmwaredcVcenter = "10.10.20.20";
- selectedZoneObj.vmwaredcId = "c3c2562d-65e9-4fc7-92e2-773c2efe8f37";
- */
- // for testing only (end)
-
+
args.response.success({
actionFilter: zoneActionfilter,
data: selectedZoneObj
@@ -13999,7 +13992,78 @@
notification: {
poll: pollAsyncJobResult
}
- }
+ },
+
+ disassociateProfileFromBlade: {
+ label: 'Disassociate Profile from Blade',
+ addRow: 'false',
+ messages: {
+ confirm: function(args) {
+ return 'Please confirm that you want to disassociate Profile from Blade.';
+ },
+ notification: function(args) {
+ return 'Disassociate Profile from Blade';
+ }
+ },
+ action: function(args) {
+ $.ajax({
+ url: createURL('disassociateUcsProfileFromBlade'),
+ data: {
+ //ucsmanagerid: args.context.ucsManagers[0].id,
+ bladeid: args.context.blades[0].id
+ },
+ success: function(json) {
+ //for testing only (begin)
+ /*
+ json = {
+ "disassociateucsprofilefrombladeresponse": {
+ "jobid": "e371592e-31be-4e53-9346-a5c565d420df"
+ }
+ }
+ */
+ //for testing only (end)
+
+ var jid = json.disassociateucsprofilefrombladeresponse.jobid;
+ args.response.success({
+ _custom: {
+ jobId: jid,
+ getUpdatedItem: function(json) {
+ //for testing only (begin)
+ /*
+ json = {
+ "queryasyncjobresultresponse": {
+ "accountid": "b24f6e36-f0ca-11e2-8c16-d637902e3581",
+ "userid": "b24f7d8d-f0ca-11e2-8c16-d637902e3581",
+ "cmd": "org.apache.cloudstack.api.AssociateUcsProfileToBladeCmd",
+ "jobstatus": 1,
+ "jobprocstatus": 0,
+ "jobresultcode": 0,
+ "jobresulttype": "object",
+ "jobresult": {
+ "ucsblade": {
+ "id": "80ab25c8-3dcf-400e-8849-84dc5e1e6594",
+ "ucsmanagerid": "07b5b813-83ed-4859-952c-c95cafb63ac4",
+ "bladedn": "sys/chassis-1/blade-4"
+ }
+ },
+ "created": "2013-07-26T13:53:01-0700",
+ "jobid": "770bec68-7739-4127-8609-4b87bd7867d2"
+ }
+ };
+ */
+ //for testing only (end)
+
+ return json.queryasyncjobresultresponse.jobresult.ucsblade;
+ }
+ }
+ });
+ }
+ });
+ },
+ notification: {
+ poll: pollAsyncJobResult
+ }
+ }
}
}
}
@@ -16091,7 +16155,9 @@
var allowedActions = [];
if(jsonObj.profiledn == null) {
allowedActions.push("associateProfileToBlade");
- }
+ } else {
+ allowedActions.push("disassociateProfileFromBlade");
+ }
return allowedActions;
}
[15/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4642: Fix width of drop-down
Fix width of timezone select drop-down to support longer time zone text
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6b2bc932
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6b2bc932
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6b2bc932
Branch: refs/heads/kvm-vnc-listen
Commit: 6b2bc932061caf553a09e459886f18ece737ed43
Parents: a20097b
Author: Brian Federle <br...@citrix.com>
Authored: Wed Sep 11 11:10:23 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Wed Sep 11 11:10:23 2013 -0700
----------------------------------------------------------------------
ui/css/cloudstack3.css | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b2bc932/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 19b9b41..6e706fd 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -8129,6 +8129,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
.recurring-snapshots .schedule .forms form select {
float: left;
margin: 3px 10px 3px 3px;
+ max-width: 100%;
}
.recurring-snapshots .schedule .forms form input {
@@ -8166,7 +8167,7 @@ div.ui-dialog div.multi-edit-add-list div.view div.data-table table.body tbody t
}
.recurring-snapshots .schedule .forms form .value {
- width: 370px;
+ width: 470px;
float: left;
text-align: left;
}
[11/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
new workload image for RN
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/58d1e6fd
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/58d1e6fd
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/58d1e6fd
Branch: refs/heads/kvm-vnc-listen
Commit: 58d1e6fd5b1b63f8fdf651883ea579416df87b70
Parents: b12f3d6
Author: radhikap <ra...@citrix.com>
Authored: Wed Sep 11 11:45:47 2013 +0530
Committer: radhikap <ra...@citrix.com>
Committed: Wed Sep 11 11:45:47 2013 +0530
----------------------------------------------------------------------
docs/en-US/images/Workloads.png | Bin 0 -> 39846 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/58d1e6fd/docs/en-US/images/Workloads.png
----------------------------------------------------------------------
diff --git a/docs/en-US/images/Workloads.png b/docs/en-US/images/Workloads.png
new file mode 100644
index 0000000..9282f57
Binary files /dev/null and b/docs/en-US/images/Workloads.png differ
[44/50] [abbrv] known issues added, 4.1 reference removed
Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f9fb940e/docs/en-US/Release_Notes.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/Release_Notes.xml b/docs/en-US/Release_Notes.xml
index 96cf6e6..ce2a737 100644
--- a/docs/en-US/Release_Notes.xml
+++ b/docs/en-US/Release_Notes.xml
@@ -56,7 +56,7 @@ under the License.
We hope you enjoy working with &PRODUCT;!</para>
</chapter>
<chapter id="version-4.2">
- <title>Version 4.2.0</title>
+ <title>What's New in 4.2.0</title>
<section id="whats-new-in-4.2">
<para>&PRODUCT; 4.2 includes the following new features.</para>
<section id="workloads">
@@ -81,14 +81,6 @@ under the License.
from a single central Management Server.</para>
<para>Usage records can also be consolidated and tracked at the region level, creating
reports or invoices for each geographic region.</para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="./images/region-overview.png"/>
- </imageobject>
- <textobject>
- <phrase>region-overview.png: Nested structure of a region.</phrase>
- </textobject>
- </mediaobject>
</section>
<section id="object-store">
<title>Object Storage Plugin Architecture</title>
@@ -106,7 +98,7 @@ under the License.
that uses the object storage plugin capability introduced in &PRODUCT; 4.2. Several new
pluggable service interfaces are available so that different storage providers can
develop vendor-specific plugins based on the well-defined contracts that can be
- seemlessly managed by &PRODUCT;.</para>
+ seamlessly managed by &PRODUCT;.</para>
</section>
<section id="zone-wide-primary-storage">
<title>Zone-Wide Primary Storage</title>
@@ -153,14 +145,6 @@ under the License.
a configuration file (plugins.js).</para>
<para>The next time the user refreshes the UI in the browser, the plugin will appear under
the Plugins button in the left navigation bar.</para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="./images/plugin4.jpg"/>
- </imageobject>
- <textobject>
- <phrase>plugin4.jpg: The plugin appears in the UI</phrase>
- </textobject>
- </mediaobject>
</section>
<section id="networking">
<title>Networking Enhancements</title>
@@ -194,9 +178,6 @@ under the License.
<para><xref linkend="kvm-vpc"/></para>
</listitem>
<listitem>
- <para><xref linkend="deploy-vm-vpc"/></para>
- </listitem>
- <listitem>
<para><xref linkend="add-loadbalancer-rule-vpc"/></para>
</listitem>
<listitem>
@@ -239,16 +220,8 @@ under the License.
<para><xref linkend="blacklist-route"/></para>
</listitem>
</itemizedlist>
- <section id="kvm-vpc">
- <title>Support for KVM</title>
- <para>VPC is now supported on KVM hypervisors.</para>
- </section>
- <section id="deploy-vm-vpc">
- <title>Support for Simultaneously Deploying a VM on VPC and Multiple Shared
- Networks</title>
- <para>Support for the ability to simultaneously deploy a VM on a VPC tier and one or
- more Shared networks is supported.</para>
- </section>
+ <section id="kvm-vpc"><title>Support for KVM</title>VPC is now supported on KVM
+ hypervisors.</section>
<section id="add-loadbalancer-rule-vpc">
<title>Load Balancing Support for VPC</title>
<para>In a VPC, you can configure two types of load balancing—external LB and
@@ -5291,6048 +5264,4 @@ service cloudstack-agent start
</itemizedlist>
</section>
</chapter>
- <chapter id="version-4.1">
- <title>Version 4.1.0</title>
- <section id="what-new-in-4.1">
- <title>What’s New in 4.1</title>
- <para>Apache CloudStack 4.1.0 includes many new features. This section covers the most
- prominent new features and changes.</para>
- <section id="localization">
- <title>Localization</title>
- <para>The 4.1.0 release adds partial User Interface (UI) support for Catalan, Chinese,
- French, German, Italian, Japanese, Korean, Norwegian, Portuguese, Russian, and Spanish.
- Not all languages are complete.</para>
- <para>The 4.1.0 release also adds documentation translations for Chinese, Chinese (Taiwan),
- Italian, Japanese, Korean, and Portuguese.</para>
- </section>
- <section id="aws-style-regions">
- <title>Added Region Support</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-241"
- >CLOUDSTACK-241</ulink>: This feature adds a "region" construct that spans several
- management servers. The objective of this feature is to add AWS EC2 like Regions
- implementation into CloudStack. Regions are dispersed and located in separate geographic
- areas. Availability Zones (or Zones in CloudStack) are distinct locations within a Region
- that are engineered to be isolated from failures in other Zones and provide inexpensive,
- low latency network connectivity to other Zones in the same Region.</para>
- <para>Regions are expected to add the following benefits</para>
- <itemizedlist>
- <listitem>
- <para>Higher availability of the services: users can deploy services across AZs and even
- if one of the AZ goes down the services are still available to the end-user through
- VMs deployed in other zones.</para>
- </listitem>
- <listitem>
- <para>Higher availability of the Management Server (MS): Since each MS Cluster only
- manages a single Region, if that MS Cluster goes down, only that particular Region is
- impacted. Admin should be able to access all the other Regions.</para>
- </listitem>
- <listitem>
- <para>Scalability: The scalability limit of CloudStack dramatically improves, as the
- scalability limit of MS Cluster is limited to a single Region.</para>
- </listitem>
- <listitem>
- <para>Object Store: With Regions construct, CloudStack would also allow users to define
- Object Store (Secondary Storage) across AZs. This helps users easily deploy VMs in
- different AZs using the same template, offerings.</para>
- </listitem>
- <listitem>
- <para>Geographical Grouping: Regions allow admins to group AZs (that have low latency
- and are geographically located nearby) into a broader region construct.</para>
- </listitem>
- </itemizedlist>
- <para>Currently the Region feature is exposed in the API, but does not have a UI
- component.</para>
- </section>
- <section id="ec2-query-api">
- <title>Support for EC2 Query API</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-197"
- >CLOUDSTACK-197</ulink>: This introduces a query API for the AWS APIs that are currently
- only supported by SOAP. The AWS Java SDK and AWS PHP SDK should now be supported by the
- AWSAPI in CloudStack.</para>
- <para>Supported Query APIs in 4.1.0:</para>
- <itemizedlist>
- <listitem>
- <para><command>AllocateAddress</command></para>
- </listitem>
- <listitem>
- <para><command>AssociateAddress</command></para>
- </listitem>
- <listitem>
- <para><command>AttachVolume</command></para>
- </listitem>
- <listitem>
- <para><command>AuthorizeSecurityGroupIngress</command></para>
- </listitem>
- <listitem>
- <para><command>CreateImage</command></para>
- </listitem>
- <listitem>
- <para><command>CreateKeyPair</command></para>
- </listitem>
- <listitem>
- <para><command>CreateSecurityGroup</command></para>
- </listitem>
- <listitem>
- <para><command>CreateSnapshot</command></para>
- </listitem>
- <listitem>
- <para><command>CreateTags</command></para>
- </listitem>
- <listitem>
- <para><command>CreateVolume</command></para>
- </listitem>
- <listitem>
- <para><command>DeleteKeyPair</command></para>
- </listitem>
- <listitem>
- <para><command>DeleteSecurityGroup</command></para>
- </listitem>
- <listitem>
- <para><command>DeleteSnapshot</command></para>
- </listitem>
- <listitem>
- <para><command>DeleteTags</command></para>
- </listitem>
- <listitem>
- <para><command>DeleteVolume</command></para>
- </listitem>
- <listitem>
- <para><command>DeregisterImage</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeAddresses</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeAvailabilityZones</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeImageAttribute</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeImages</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeInstanceAttribute</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeInstances</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeKeyPairs</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeSecurityGroups</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeSnapshots</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeTags</command></para>
- </listitem>
- <listitem>
- <para><command>DescribeVolumes</command></para>
- </listitem>
- <listitem>
- <para><command>DetachVolume</command></para>
- </listitem>
- <listitem>
- <para><command>DisassociateAddress</command></para>
- </listitem>
- <listitem>
- <para><command>GetPasswordData</command></para>
- </listitem>
- <listitem>
- <para><command>ImportkeyPair</command></para>
- </listitem>
- <listitem>
- <para><command>ModifyImageAttribute</command></para>
- </listitem>
- <listitem>
- <para><command>RebootInstances</command></para>
- </listitem>
- <listitem>
- <para><command>RegisterImage</command></para>
- </listitem>
- <listitem>
- <para><command>ReleaseAddress</command></para>
- </listitem>
- <listitem>
- <para><command>ResetImageAttribute</command></para>
- </listitem>
- <listitem>
- <para><command>RevokeSecurityGroupIngress</command></para>
- </listitem>
- <listitem>
- <para><command>RunInstances</command></para>
- </listitem>
- <listitem>
- <para><command>StartInstances</command></para>
- </listitem>
- <listitem>
- <para><command>StopInstances</command></para>
- </listitem>
- <listitem>
- <para><command>TerminateInstances</command></para>
- </listitem>
- </itemizedlist>
- <para>See the <ulink
- url="https://cwiki.apache.org/CLOUDSTACK/ec2-functional-spec-for-query-api-support.html"
- >Feature Specification</ulink> for more information on the Query API support.</para>
- </section>
- <section id="cloudmonkey">
- <title>Auto-Completing Shell for CloudStack (CloudMonkey)</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-132"
- >CLOUDSTACK-132</ulink>: Adds a auto-completing shell and command-line tool for
- &PRODUCT; written in Python, called <application>CloudMonkey</application>.</para>
- <para>CloudMonkey includes the following features:</para>
- <itemizedlist>
- <listitem>
- <para>Usable as a command line tool and interactive shell.</para>
- </listitem>
- <listitem>
- <para>All commands are lowercase unlike API.</para>
- </listitem>
- <listitem>
- <para>Api Discovery using sync feature, with build time api precaching for failsafe
- sync.</para>
- </listitem>
- <listitem>
- <para>Raw api execution support.</para>
- </listitem>
- <listitem>
- <para>Auto-completion via double <command>tab</command>.</para>
- </listitem>
- <listitem>
- <para>Reverse search using <command>Ctrl+R</command></para>
- </listitem>
- <listitem>
- <para>Emacs compatible key bindings.</para>
- </listitem>
- <listitem>
- <para>Output that's "pipeable" to other *nix programs.</para>
- </listitem>
- <listitem>
- <para>Unix shell execution.</para>
- </listitem>
- <listitem>
- <para>Support to handle asynchronous jobs using user defined blocking or non-blocking
- way.</para>
- </listitem>
- <listitem>
- <para>Tabular or JSON output with filtering of table columns.</para>
- </listitem>
- <listitem>
- <para>Colored output.</para>
- </listitem>
- <listitem>
- <para>API parameter value completion (based on predication, fuzzy results may fail
- sometimes).</para>
- </listitem>
- </itemizedlist>
- <para>CloudMonkey has a few requirements above and beyond CloudStack, and does not need to
- be run on the same machine as a management server. If you wish to run
- <application>CloudMonkey</application> you'll need Python 2.5 or later,
- <application>readline</application>, <application>Pygments</application>, and
- <application>prettytable</application>. CloudMonkey can be installed with
- <application>pip</application>:</para>
- <programlisting language="Bash"><prompt>$</prompt> pip install cloudmonkey</programlisting>
- <para>See the Developer's Guide and <ulink
- url="https://cwiki.apache.org/CLOUDSTACK/cloudstack-cloudmonkey-cli.html">the CloudStack
- wiki</ulink> for the latest information on <application>CloudMonkey</application>
- installation and use.</para>
- </section>
- <section id="apidiscover">
- <title>API Discovery Service</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-926"
- >CLOUDSTACK-926</ulink>: CloudStack has more than 300 APIs and more are added in each
- major release. CloudStack admins can enable or disable APIs, or add plugins which provide
- more APIs. The API Discovery Service is a plugin which will help users discover the APIs
- available to them on a CloudStack Management Server.</para>
- <para>The discovery service implements a method called <command>listApis</command> which
- will return information about APIs for a user. It currently accepts an apiName to list api
- information of that particular API. The method ensures that user can only list APIs they
- are entitled to.</para>
- <para>All CloudStack APIs are implemented by annotated command class and PluggableService is
- a contract implemented by all the components such as the Management Server and all the
- plugins which provide an API. During load time, API discovery service asks all the
- pluggable services to return list of API cmd classes from whose fields and annotations it
- gathers information about each API, the information consists of name, description,
- parameter name, parameter description, etc.</para>
- <para>For more information on the implementation of the API Discovery Service for 4.1.0, see
- the <ulink url="https://cwiki.apache.org/CLOUDSTACK/api-discovery-service.html">CloudStack
- wiki</ulink>.</para>
- </section>
- <section id="events-framework">
- <title>Events Framework</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-820"
- >CLOUDSTACK-820</ulink>: The Events Framework provides a mechanism to publish and
- subscribe to events in &PRODUCT;.</para>
- </section>
- <section id="additional-vmx-settings">
- <title>Additional VMX Settings</title>
- <para>###</para>
- </section>
- <section id="l3-nicira">
- <title>L3 Router Functionality in Nicira Nvp Plugin</title>
- <para>###</para>
- </section>
- <section id="persistent-networks">
- <title>Persistent Networks without Running VM</title>
- <para>###</para>
- </section>
- <section id="add-remove-network-vm">
- <title>Add/Remove Network on VM</title>
- <para>###</para>
- </section>
- <section id="resize-volumes">
- <title>Resize Volumes Feature</title>
- <para>###</para>
- </section>
- <section id="autoscale">
- <title>Autoscale</title>
- <para>###</para>
- </section>
- <section id="api-throttling">
- <title>API Request Throttling</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-618"
- >CLOUDSTACK-618</ulink>: Limits the number of API requests per second that can be placed
- against a management server to avoid DoS attacks via API requests.</para>
- <para>The throttling is controlled by the <command>api.throttling.enabled</command>,
- <command>api.throttling.interval</command>, and <command>api.throttling.max</command>
- configuration settings. Note that <command>api.throttling.enabled</command> is set to
- <emphasis>false</emphasis> by default.</para>
- </section>
- <section id="s3-backed-storage">
- <title>S3 Backed Secondary Storage</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-509"
- >CLOUDSTACK-509</ulink>: This enhancement backs NFS secondary storage with an
- S3-compatible object store. Periodically, a reaper thread synchronizes the templates,
- ISOs, and snapshots stored on a NFS secondary storage mount with a configured S3 object
- store. In addition to permitting the use of commodity or IaaS storage solutions for static
- assets, it provides a means of automatically synchronizing template and ISO assets across
- multiple zones.</para>
- <para>See the <ulink
- url="https://cwiki.apache.org/CLOUDSTACK/s3-backed-secondary-storage.html">&PRODUCT;
- wiki</ulink> for more information on this feature, currently the <ulink
- url="https://issues.apache.org/jira/browse/CLOUDSTACK-878">documentation is
- incomplete</ulink>.</para>
- </section>
- <section id="user-domain-admin-create-key">
- <title>User and Domain Admin Can Create API Key and Secret</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-437"
- >CLOUDSTACK-437</ulink>: This feature adds the ability for domain admins and users to
- create their own API Key and Secret. Domain admins can create keys for themselves,
- subdomain admins, and for regular users, but not for other domain admins.</para>
- </section>
- <section id="inline-srx-f5-mode">
- <title>Support Inline Mode for F5 and SRX</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-306"
- >CLOUDSTACK-306</ulink>: For &PRODUCT; deployments using the Juniper SRX (firewall) and
- F5 Big IP (load balancer), &PRODUCT; 4.1.0 supports putting the firewall in front of the
- load balancer, making the firewall device the gateway and putting the load balancer behind
- the public network.</para>
- </section>
- <section id="egress-firewall">
- <title>Egress Firewall Rules for Guest Networks</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-299"
- >CLOUDSTACK-299</ulink>: This feature allows users to create egress (exit) traffic rules
- from private networks to public networks (<emphasis>e.g.</emphasis> from your internal
- network to the public Internet). By default all traffic is blocked from internal networks
- to the public networks, this allows you to open ports as necessary.</para>
- <para>Egress traffic rules are suppored only on virtual routers at this time, physical
- devices are not supported.</para>
- </section>
- <section id="reset-ssh-key">
- <title>Reset SSH Key to Access VM</title>
- <para><ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK-297"
- >CLOUDSTACK-297</ulink>: &PRODUCT; 4.1.0 introduces a new API
- <command>resetSSHKeyForVirtualMachine</command>, that can allow them to set or reset the
- SSH keypair assigned to a virtual machine.</para>
- </section>
- </section>
- <section id="issues-fixed-4.1">
- <title>Issues Fixed in 4.1.0</title>
- <para>Apache CloudStack uses <ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK"
- >Jira</ulink> to track its issues. All new features and bugs for 4.1.0 have been tracked
- in Jira, and have a standard naming convention of "CLOUDSTACK-NNNN" where "NNNN" is the
- issue number.</para>
- <para>This section includes a summary of known issues against 4.0.0 that were fixed in 4.1.0.
- Approximately 470 bugs were resolved or closed in the 4.1.0 cycle.</para>
- <informaltable>
- <tgroup cols="2" align="left" colsep="1" rowsep="1">
- <colspec colwidth="1*" colname="1" colnum="1"/>
- <colspec colwidth="2*" colname="2" colnum="2"/>
- <thead>
- <row>
- <entry>
- <para>Defect</para>
- </entry>
- <entry>
- <para>Description</para>
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <para>CLOUDSTACK-46</para>
- </entry>
- <entry>
- <para>Remnants of mycloud remain.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-70</para>
- </entry>
- <entry>
- <para>Improve Network Restart Behaviour for Basic Zone: Restarting Network
- Fail</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-94</para>
- </entry>
- <entry>
- <para>"API command, listIsos documentation clarity</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-95</para>
- </entry>
- <entry>
- <para>IP address allocation not working when a user tries to allocate IP addresses
- in a Project</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-97</para>
- </entry>
- <entry>
- <para>Vmware network labels are ignored when creating a Zone using basic
- networking</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-108</para>
- </entry>
- <entry>
- <para>VM should not be allowed to be deployed on two Isolated Networks of an Account
- that were created from DefaultNetworkOfferingwithSourceNATService</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-118</para>
- </entry>
- <entry>
- <para>Status of host resorce stuck in "ErrorInMaintenance"</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-119</para>
- </entry>
- <entry>
- <para>Move Agent-Simulator in to the hypervisor plugin model</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-130</para>
- </entry>
- <entry>
- <para>Clarify docs on tags parameter in API reference</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-152</para>
- </entry>
- <entry>
- <para>Routes on the User VM are programmed incorrectly on a VM present on both
- Isolated and Shared Guest Network</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-178</para>
- </entry>
- <entry>
- <para>Expose name parameter of VM in list Vm view.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-198</para>
- </entry>
- <entry>
- <para>vpn:failto add VPN Users deletes all the existing Vpn user</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-222</para>
- </entry>
- <entry>
- <para>Admin UI prompts to restart Management server with cancel edit
- operation</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-225</para>
- </entry>
- <entry>
- <para>API Docs: Request params repeated with different description</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-226</para>
- </entry>
- <entry>
- <para>UpdatePhysicalNetworkcommand failed due to java.sql.BatchUpdateException ;
- Tried to extend the existing Guest VLAN Range of one physical network into the
- Guest VLAN range of the other physical network</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-227</para>
- </entry>
- <entry>
- <para>ReconnectHostCmd: NullPointerException: Unable to get host Information for
- XenServer 6.0.2 host - on intentionally changing the traffic labels on the
- physical network</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-228</para>
- </entry>
- <entry>
- <para>UI provides an option to reconnect a disconnected host - ServerApiException is
- thrown on an attempt</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-232</para>
- </entry>
- <entry>
- <para>Zone infrastructure chart -- disable resource total display</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-235</para>
- </entry>
- <entry>
- <para>Network rate can be set in 2 places. Clarify docs on how this works</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-249</para>
- </entry>
- <entry>
- <para>Add host id to failed VM deploy alerts</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-250</para>
- </entry>
- <entry>
- <para>Incorrect description of maintenance mode in admin guide</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-256</para>
- </entry>
- <entry>
- <para>"vpn:As an admin user, not able to delete VPN user which is present in a
- regular user's network.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-271</para>
- </entry>
- <entry>
- <para>updatePhysicalNetwork dies with an NPE when the vlan range is empty</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-274</para>
- </entry>
- <entry>
- <para>Two error codes mapped to same value in API</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-275</para>
- </entry>
- <entry>
- <para>hostid not always a UUID</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-277</para>
- </entry>
- <entry>
- <para>Message during CloudStack management server Installation: cannot access
- /usr/share/cloud/bridge/lib: No such file or directory</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-279</para>
- </entry>
- <entry>
- <para>deleteProject fails when executed by the regular user (works fine for
- root/domain admin)</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-284</para>
- </entry>
- <entry>
- <para>listVirtualMachines does not return deleted machines when zone is
- specified</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-290</para>
- </entry>
- <entry>
- <para>3.0.0 template also needed for 2.2.14 to 3.0.5 direct upgrade.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-293</para>
- </entry>
- <entry>
- <para>"We do awful, hacky things in our spec file for client"</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-304</para>
- </entry>
- <entry>
- <para>Add synchronization for createSnapshot command per host basis</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-309</para>
- </entry>
- <entry>
- <para>iptables rules being deleted from wrong VM after a migration</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-318</para>
- </entry>
- <entry>
- <para>Adding XenServer Host Fails - 6.0.2 fails with 4.0.0</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-320</para>
- </entry>
- <entry>
- <para>"sessionKey query parameter should be case-insensitive, now only sessionkey is
- accepted"</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-322</para>
- </entry>
- <entry>
- <para>During upgrade displays error - a foreign key constraint fails
- (`cloud/#sql-f34_6e`..</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-332</para>
- </entry>
- <entry>
- <para>"count" property in list* API response should be equal to how many entries in
- database, not how many objects in API response</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-333</para>
- </entry>
- <entry>
- <para>When Datacenter name in VCenter has spaces Primary Storage (VMFS) discovery
- will fail</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-335</para>
- </entry>
- <entry>
- <para>KVM VPC load balancer not working</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-336</para>
- </entry>
- <entry>
- <para>listZones doesn't honour paging</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-343</para>
- </entry>
- <entry>
- <para>"Document what tools and packages are required to build, package and install
- CloudStack 4.0</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-346</para>
- </entry>
- <entry>
- <para>Cannot add Vmware cluster with class loader conflict exception</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-347</para>
- </entry>
- <entry>
- <para>listNetworks API: return vlan information only when the caller is ROOT
- admin</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-348</para>
- </entry>
- <entry>
- <para>deleteNetwork does not clean up network resource count correctly</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-354</para>
- </entry>
- <entry>
- <para>Display of storage statistics is wrong</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-355</para>
- </entry>
- <entry>
- <para>"Fix ""count"" in a bunch of API commands</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-357</para>
- </entry>
- <entry>
- <para>"ISOs can be deleted while still attached to a running VM, and they
- subsequently cannot be detached from a running VM</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-359</para>
- </entry>
- <entry>
- <para>PropagateResourceEventCommand failes in cluster configuration</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-361</para>
- </entry>
- <entry>
- <para>Wrong creation of guest networks on a KVM host in Multiple Physical Networks
- with guest traffic</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-364</para>
- </entry>
- <entry>
- <para>Docs point to download.cloud.com for AWS API script</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-368</para>
- </entry>
- <entry>
- <para>OVM - cannot create guest VM</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-369</para>
- </entry>
- <entry>
- <para>ASF 4.0 - unable to support XenServer 6.1 host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-373</para>
- </entry>
- <entry>
- <para>"static NAT and Firewall is not working on external firewall device SRX, it
- needs to be implemented</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-377</para>
- </entry>
- <entry>
- <para>provide deployment config access to marvin's testcase</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-378</para>
- </entry>
- <entry>
- <para>mavenize marvin on master</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-390</para>
- </entry>
- <entry>
- <para>Install Guide: Section 4.5.7 (Prepare the System VM Template): Links go to
- cloud.com</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-397</para>
- </entry>
- <entry>
- <para>Install Guide: Section 11.1 (Guest Traffic): Diagram is the wrong
- diagram</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-398</para>
- </entry>
- <entry>
- <para>Install Guide: Section 11.17.3 (Using VPN with Mac OSX): Not complete</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-404</para>
- </entry>
- <entry>
- <para>Update docs on the usage of cloud-setup-database</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-412</para>
- </entry>
- <entry>
- <para>Data truncation: Out of range value for column 'ram' at row </para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-415</para>
- </entry>
- <entry>
- <para>restartNetwork call causes VM to be unreachable when Nicira based SDN is
- used</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-416</para>
- </entry>
- <entry>
- <para>XCP 1.6beta2 (61002c) - can't add a host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-417</para>
- </entry>
- <entry>
- <para>Handle password server securely to run on port 8080 on VR</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-424</para>
- </entry>
- <entry>
- <para>Updated userdata not propagating to the VR</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-427</para>
- </entry>
- <entry>
- <para>Change hardcoded step number references to dynamic link</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-428</para>
- </entry>
- <entry>
- <para>Storage capacity shown in UI is incorrect</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-435</para>
- </entry>
- <entry>
- <para>Vmware network labels are ignored when creating a Zone using basic
- networking</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-441</para>
- </entry>
- <entry>
- <para>Running mgmt server using jetty fails to start api server</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-446</para>
- </entry>
- <entry>
- <para>"Host going to alert state, if you are adding already added host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-448</para>
- </entry>
- <entry>
- <para>SSVM bootstrap failure on XenServer hosts with E3 CPU</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-456</para>
- </entry>
- <entry>
- <para>License tag in SPEC isn't what RPM is expecting</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-459</para>
- </entry>
- <entry>
- <para>[Optional Public IP assignment for EIP with Basic Zone] Associate IP Checkbox
- in Create Network Offering Dialog is Displayed When Elastic LB is Selected</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-462</para>
- </entry>
- <entry>
- <para>A few corrections to make to the 4.0.0 installation guide</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-464</para>
- </entry>
- <entry>
- <para>"Regression in AWSAPI docs, entire sections removed</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-465</para>
- </entry>
- <entry>
- <para>French language file quotes are dropping javascript syntax error</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-467</para>
- </entry>
- <entry>
- <para>Developer's Guide points to cloud.com for API reference</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-479</para>
- </entry>
- <entry>
- <para>UpdateVirtualMachine api fails to propagate userdata to domr</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-481</para>
- </entry>
- <entry>
- <para>Installation Guide Doc Error</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-493</para>
- </entry>
- <entry>
- <para>2.2.x-3.0 DB upgrade support for Advance SG enabled network</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-499</para>
- </entry>
- <entry>
- <para>cloudmonkey CLI can't accept complex parameter</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-500</para>
- </entry>
- <entry>
- <para>Passwd-server iptables rules are dropped on domr on fresh start or on
- reboot.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-501</para>
- </entry>
- <entry>
- <para>Apidocs and marvin does not know how to handle Autoscaling docs.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-504</para>
- </entry>
- <entry>
- <para>Duplicate guest password scripts in codebase.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-507</para>
- </entry>
- <entry>
- <para>fix api docs for listSSHKeyPair</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-508</para>
- </entry>
- <entry>
- <para>CLVM copies template to primary storage unnecessarily.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-510</para>
- </entry>
- <entry>
- <para>Add button not visible when adding public IPs to physical network.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-514</para>
- </entry>
- <entry>
- <para>Marvin and Cloudmonkey don't work when an API target uses https or an
- alternate path.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-518</para>
- </entry>
- <entry>
- <para>API refactoring -- change @Parameter annotation and remove the @IdentityMapper
- annotation.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-520</para>
- </entry>
- <entry>
- <para>Dependency jar names mismatch with install-non-oss.sh</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-521</para>
- </entry>
- <entry>
- <para>Build will hung up when doing test for TestAgentShell</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-522</para>
- </entry>
- <entry>
- <para>Log requests in cloudmonkey's log file.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-527</para>
- </entry>
- <entry>
- <para>List API performance optimization by using DB views and removing UUID
- conversion.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-534</para>
- </entry>
- <entry>
- <para>Failed to add host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-536</para>
- </entry>
- <entry>
- <para>remove citrix cloudpatform from 4.0 build - CloudStack is ASF project.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-539</para>
- </entry>
- <entry>
- <para>Cropped Text in UI under Quick View.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-552</para>
- </entry>
- <entry>
- <para>]Quick view details for a volume displays scroll bar in place of name of the
- volume when the name of the volume has more no of characters.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-553</para>
- </entry>
- <entry>
- <para>"SRX - When adding SRX device make "Public Network" - default to "untrusted"
- and "Private Network" - default to "trusted" as un-editable fields.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-556</para>
- </entry>
- <entry>
- <para>Erratic window behavior in Quick View tooltip.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-559</para>
- </entry>
- <entry>
- <para>source code import problem</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-560</para>
- </entry>
- <entry>
- <para>Usage server doesn't work in 4.0.0 due to missing db changes</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-572</para>
- </entry>
- <entry>
- <para>SG Enabled Advanced Zone - Not able to deploy a VM in an account specific
- shared network</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-573</para>
- </entry>
- <entry>
- <para>"NPE at
- ""com.cloud.network.NetworkManagerImpl.networkOfferingIsConfiguredForExternalNetworking(NetworkManagerImpl.java:4345)""
- when create network from the network offering having NULL provider for the
- service</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-578</para>
- </entry>
- <entry>
- <para>The already deleted same hostname is not deleted from /etc/hosts of
- vRouter</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-584</para>
- </entry>
- <entry>
- <para>"typos in
- ""Apache_CloudStack-4.0.0-incubating-CloudStack_Nicira_NVP_Guide-en-US""</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-590</para>
- </entry>
- <entry>
- <para>Incorrect Network Gateways Assigned to System VM</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-592</para>
- </entry>
- <entry>
- <para>"API bloat, unknown apis cmd classes</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-593</para>
- </entry>
- <entry>
- <para>"2 guest network, auto create vlan error</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-596</para>
- </entry>
- <entry>
- <para>DeployVM command takes a lot of time to return job id.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-599</para>
- </entry>
- <entry>
- <para>DhcpEntryCommand fails on Router VM on CS4.0 and vSphere5 with Advanced
- Network Zone.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-600</para>
- </entry>
- <entry>
- <para>When rebooting KVM local storage VM host, libvirt definitions deleted</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-605</para>
- </entry>
- <entry>
- <para>Host physical CPU is incorrectly calculated for Vmware host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-606</para>
- </entry>
- <entry>
- <para>Starting VM fails with 'ConcurrentOperationException' in a clustered MS
- scenario</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-614</para>
- </entry>
- <entry>
- <para>"ListTemplates API is not returning ""Enable SSH Key"" attribute for any given
- template</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-617</para>
- </entry>
- <entry>
- <para>Unable to edit a Sub domain</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-639</para>
- </entry>
- <entry>
- <para>API Refactoring: Adapters for ACL</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-648</para>
- </entry>
- <entry>
- <para>The normal users could change their own login password.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-660</para>
- </entry>
- <entry>
- <para>Network Traffic Labels are not functional in Marvin</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-683</para>
- </entry>
- <entry>
- <para>Image Is Missing in the Accessing VM Section</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-689</para>
- </entry>
- <entry>
- <para>RVR: Stop pending flag is not cleared when user start the disconnected router
- from another host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-691</para>
- </entry>
- <entry>
- <para>A warning dialog box shows after reloading the welcome page.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-693</para>
- </entry>
- <entry>
- <para>Adding a VPC virtual router to a NiciraNVP enabled network fails.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-694</para>
- </entry>
- <entry>
- <para>"Create a new VPC network offering with "connectivity" option needed for SDN
- networking) is not allowed / VPC support for SDN networks</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-717</para>
- </entry>
- <entry>
- <para>cloudmonkey fails to parse/print response.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-720</para>
- </entry>
- <entry>
- <para>Fail to load a png image when accessing the web console.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-721</para>
- </entry>
- <entry>
- <para>Bytes sent/received in user statistics is empty (CloudStack 4.0)</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-725</para>
- </entry>
- <entry>
- <para>UI: Error when the Egress rules tab is selected for a network.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-734</para>
- </entry>
- <entry>
- <para>api_refactoring: CreateAccountCmd fails to send response due to NPE in service
- layer</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-735</para>
- </entry>
- <entry>
- <para>Integration smoke tests: Fix expunge vm test on api_refactoring</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-736</para>
- </entry>
- <entry>
- <para>Integration smoke tests: Fix check for vm name for the deployvm smoke
- test.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-793</para>
- </entry>
- <entry>
- <para>"Create cloudmonkey-helper, a plugin that helps autodiscover and sync api info
- via an api over some endpoint</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-798</para>
- </entry>
- <entry>
- <para>Move usage related cmd classes from cloud-server to cloud-api</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-799</para>
- </entry>
- <entry>
- <para>[Load Test] Check router statistics falls behind in gathering stats by more
- than 2 times the set value</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-819</para>
- </entry>
- <entry>
- <para>Create Account/User API logging password in access log</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-863</para>
- </entry>
- <entry>
- <para>Non-printable characters (ASCII control character) such as %00 or %0025 are
- getting stored in raw/non encoded form in the database</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-870</para>
- </entry>
- <entry>
- <para>Client UI: Wrong character encoding for some language</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-928</para>
- </entry>
- <entry>
- <para>[Simulator] Latency for Agent Commands - change unit of wait from seconds to
- milliseconds</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-938</para>
- </entry>
- <entry>
- <para>s2s VPN trouble</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-959</para>
- </entry>
- <entry>
- <para>Missing sub-sections in document section System Service Offering</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-968</para>
- </entry>
- <entry>
- <para>marvin: vlan should be an attribute of the physical_network and not the
- zone</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-977</para>
- </entry>
- <entry>
- <para>Document how to use openvswitch with KVM hypervisor</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-978</para>
- </entry>
- <entry>
- <para>TypeError: instance.displayname is undefined while adding VM's to the LB
- rule</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-985</para>
- </entry>
- <entry>
- <para>Different MAC address for RvR caused issue in short term network outage</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-987</para>
- </entry>
- <entry>
- <para>Sections missing in Working With Snapshots</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-993</para>
- </entry>
- <entry>
- <para>"admin"" user is not getting created when management server is started.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-995</para>
- </entry>
- <entry>
- <para>Not able to add the KVM host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1002</para>
- </entry>
- <entry>
- <para>Not able to start VM</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1006</para>
- </entry>
- <entry>
- <para>need to disable service libvirt-guests in CentOS packaging RPMs, or in
- installation docs</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1008</para>
- </entry>
- <entry>
- <para>"Egress"" tab should not be presented in the UI for Shared Networks</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1010</para>
- </entry>
- <entry>
- <para>Host count and Secondary storage count always shows 1 in UI</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1011</para>
- </entry>
- <entry>
- <para>KVM host getting disconnected in cluster environment</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1013</para>
- </entry>
- <entry>
- <para>running cloudstack overwrites default public/private ssh key</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1014</para>
- </entry>
- <entry>
- <para>Merge ManagementServer and ManagementServerEx</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1016</para>
- </entry>
- <entry>
- <para>Not able to deploy VM</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1021</para>
- </entry>
- <entry>
- <para>the vlan is not creat to right nic. when i creat multi guest network</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1024</para>
- </entry>
- <entry>
- <para>Regression: Unable to add Xenserver host with latest build.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1027</para>
- </entry>
- <entry>
- <para>"Update SSL certificate" button should properly reflect its
- functionality</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1029</para>
- </entry>
- <entry>
- <para>Enter the token to specified project is malfunctioned</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1037</para>
- </entry>
- <entry>
- <para>"Make cloudmonkey awesome-er: Online help docs and api discovery, better
- colored output, parameter value autocompletion</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1050</para>
- </entry>
- <entry>
- <para>No Documentation on Adding a Load Balancer Rule</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1051</para>
- </entry>
- <entry>
- <para>API dispatcher unable to find objectVO corresponding to
- DeleteTemplatecmd</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1055</para>
- </entry>
- <entry>
- <para>"The overlay still exists when the ""Recurring Snapshots"" dialog is canceled
- by pressing esc key.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1056</para>
- </entry>
- <entry>
- <para>S3 secondary storage fails to upload systemvm template due to KVMHA
- directory</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1057</para>
- </entry>
- <entry>
- <para>regression of changeServiceForVirtualMachine API - fails to find service
- offering by serviceOfferingId parameter</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1063</para>
- </entry>
- <entry>
- <para>"SG Enabled Advanced Zone - "Add Guest Networks" - When user tries to add a
- guest Network with scope as "Account" he should NOT be presented with "Offering
- for shared security group enabled"</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1064</para>
- </entry>
- <entry>
- <para>A type error occurs when trying to add account/register template...</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1068</para>
- </entry>
- <entry>
- <para>Names in VR list is useless</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1070</para>
- </entry>
- <entry>
- <para>javelin: NPE on executing registerIso API</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1071</para>
- </entry>
- <entry>
- <para>Netscaler element is not getting loaded as part of LoadBalancing Service
- Providers</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1078</para>
- </entry>
- <entry>
- <para>Not able to start System Vms on Rhel 6.3 KVM host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1079</para>
- </entry>
- <entry>
- <para>Deploying AWSAPI with mvn -pl :cloud-awsapi jetty:run fail</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1082</para>
- </entry>
- <entry>
- <para>UI doesn't throw any error message when trying to delete ip range from a
- network that is in use.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1083</para>
- </entry>
- <entry>
- <para>listUsageRecords api: removed project results in NPE</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1087</para>
- </entry>
- <entry>
- <para>Update the Developer Guide for ASFCS 4.1 Release</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1088</para>
- </entry>
- <entry>
- <para>EnableStaticNat error will clear the data in database</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1094</para>
- </entry>
- <entry>
- <para>Ipv6 - hostname/hostname --fqdn does not return the name of the VM. But i am
- able to reach the Vm using their names</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1095</para>
- </entry>
- <entry>
- <para>Ipv6 - dhclient command needs to be run manually on the Vms to get the Ipv6
- address</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1100</para>
- </entry>
- <entry>
- <para>Expunge thread is not kicked off based on global configuration if the global
- setting is less than 60 seconds</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1103</para>
- </entry>
- <entry>
- <para>"IpV6 - listNetwork() command does not retrun gateway,netmask,cidr</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1104</para>
- </entry>
- <entry>
- <para>Ipv6 - listVlanIpRanges() returns error 530</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1105</para>
- </entry>
- <entry>
- <para>"IpV6 - listVirtualMachines() does not return netmask,
- gateway,ipaddress.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1107</para>
- </entry>
- <entry>
- <para>Ipv6 - Unable to extend Ip range for a Ipv6 network using craeteVlanIpRange()
- command - Error code 530 returned</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1108</para>
- </entry>
- <entry>
- <para>Ipv6 - Not able to restart Networks</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1109</para>
- </entry>
- <entry>
- <para>"Ipv6 - Unable to expunge User Vms that are "Destroyed".</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1111</para>
- </entry>
- <entry>
- <para>Ipv6 - listRouters() does not return guestipaddress/</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1112</para>
- </entry>
- <entry>
- <para>"Errors in "Prepare the System VM Template"</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1113</para>
- </entry>
- <entry>
- <para>"Ipv6 - Not able to deploy a new VM in this network because of "Unable to
- allocate Unique Ipv6 address"</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1114</para>
- </entry>
- <entry>
- <para>unable to execute listegressfirewallrules API due invalid value id</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1115</para>
- </entry>
- <entry>
- <para>In multiple shared network unable to login with default nic - KVM</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1123</para>
- </entry>
- <entry>
- <para>ListStoragePools API broken by refactor</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1138</para>
- </entry>
- <entry>
- <para>"Providing invalid values for gateway, netmask etc in the zoneWizard blocks
- the VLAN container to load, throwing an error</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1139</para>
- </entry>
- <entry>
- <para>"After the Vm is "Expunged" we see the entry still being present in the router
- in /etc/dhcphosts.txt</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1141</para>
- </entry>
- <entry>
- <para>"Ipv6 - After network restart (and reboot router), we do not see the existing
- vms dnsentries not being programmed in the router.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1152</para>
- </entry>
- <entry>
- <para>Missing tag in host-add.xml</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1153</para>
- </entry>
- <entry>
- <para>"Ipv6 - Vm deployment fails with "n must be positive" error.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1154</para>
- </entry>
- <entry>
- <para>Account/Users related API failed due to RegionService inject exception.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1157</para>
- </entry>
- <entry>
- <para>No API Documentation on Listing Custom User Templates Using CS4 API</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1160</para>
- </entry>
- <entry>
- <para>References to version=3.0.3|4|5|6 in API classes needs to be removed.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1161</para>
- </entry>
- <entry>
- <para>Differences between 4.1 and master in
- ongoing-config-of-external-firewalls-lb.xml</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1163</para>
- </entry>
- <entry>
- <para>Failed with NPE while creating firewall rule</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1168</para>
- </entry>
- <entry>
- <para>Create firewall rule broke</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1173</para>
- </entry>
- <entry>
- <para>ConsoleProxyResource instantiation exception.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1174</para>
- </entry>
- <entry>
- <para>Snapshots related SQL error.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1176</para>
- </entry>
- <entry>
- <para>Issue with snapshots(create/list)</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1181</para>
- </entry>
- <entry>
- <para>mvn deploy db failing with NPE</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1190</para>
- </entry>
- <entry>
- <para>Make APIChecker interface throw a single sensible exception.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1200</para>
- </entry>
- <entry>
- <para>"Unknown column 'vm_instance.disk_offering_id' in table vm_instance, db
- exception shown in MS log</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1201</para>
- </entry>
- <entry>
- <para>"Failed to create ssh key for user "cloud"
- /var/lib/cloud/management/.ssh/id_rsa and failed to start management server</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1202</para>
- </entry>
- <entry>
- <para>Fail to install KVM cloud-agent.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1203</para>
- </entry>
- <entry>
- <para>Fail to create advance zone with SG enabled when UI allows SG enabled
- option.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1204</para>
- </entry>
- <entry>
- <para>Fail to create advance zone due to fail to add host</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1205</para>
- </entry>
- <entry>
- <para>Ipv6 - Ubuntu 12.10 guest Vms loses default route (after it expiration time ~
- 30 mts) when ipv6.autoconfig parameters are disabled except for
- net.ipv6.conf.lo.autoconf which is enabled.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1206</para>
- </entry>
- <entry>
- <para>Failure in Copy of System template</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1210</para>
- </entry>
- <entry>
- <para>Make all pluggable services return list of api cmd classes</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1216</para>
- </entry>
- <entry>
- <para>UUID is null for admin and failed to register user key with 4.0</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1218</para>
- </entry>
- <entry>
- <para>"IPv6: Shared Network - After network restart with clean option, router is
- assigned a different address. Name resolution for the existing guest Vms in the
- network fails.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1219</para>
- </entry>
- <entry>
- <para>Ipv6 - Provide better error messages when deploying a Vm with Ip an address
- that is outside the network's ip range / if the ip address already is assigned to
- another Vm</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1220</para>
- </entry>
- <entry>
- <para>Ipv6 - Better error message when deploy Vm fails to get a free Ip
- address</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1222</para>
- </entry>
- <entry>
- <para>API rate limit configs: removed double quote in upgrade script</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1223</para>
- </entry>
- <entry>
- <para>Exception while starting jetty server:
- org.springframework.beans.factory.BeanCreationException Error creating bean with
- name 'apiServer'</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1224</para>
- </entry>
- <entry>
- <para>Volume snapshot creation failing</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1226</para>
- </entry>
- <entry>
- <para>Error while running Cloudstack-setup-database</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1228</para>
- </entry>
- <entry>
- <para>Unable to Create System Vm's in the VMware Hypervisor setup</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1229</para>
- </entry>
- <entry>
- <para>Incorrect SQL syntax to insert api limit related configuration items in
- upgrade path script.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1231</para>
- </entry>
- <entry>
- <para>cloud-install-sys-tmplt failed due to missing path</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1232</para>
- </entry>
- <entry>
- <para>"Ipv6 - Guest Vms are not able to get Ipaddress when executing dhclient
- command when using ""/96"" network.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1233</para>
- </entry>
- <entry>
- <para>Veewee configuration files are inappropriately identified as ASLv2 licensed
- file</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1234</para>
- </entry>
- <entry>
- <para>Unable to start KVM agent with 4.1 build.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1237</para>
- </entry>
- <entry>
- <para>"Register Template fails with ""Cannot find template adapter for
- XenServer""</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1239</para>
- </entry>
- <entry>
- <para>Unable to registerISO :unhandled exception executing api command:
- registerIso</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1240</para>
- </entry>
- <entry>
- <para>Unable to registerTemplate : Cannot find template adapter for
- XenServer.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1241</para>
- </entry>
- <entry>
- <para>Network apply rules logic is broken.</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1242</para>
- </entry>
- <entry>
- <para>[F5-SRX-InlineMode] Failed to create LB rule with F5-SRX inlinemode
- deployment</para>
- </entry>
- </row>
- <row>
- <entry>
- <para>CLOUDSTACK-1243</para>
- </entry>
- <entry>
- <para>Failed t
<TRUNCATED>
[04/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
CLOUDSTACK-4636: In a scaled up setup all Vm's in a cluster were stopped and/or started after management server restart
Issue happens as there are more than one thread processing connect for a host simultaneously. The VM full sync. is not designed to work in this scenario and as a result user VMs may get stopped incorrectly.
Direct agent scan task runs at regular intervals (direct.agent.scan.interval defaulted to 90 secs) and identifies hosts that needs to be processed for connect. In a normal scenario hosts mostly get connected within that interval and there are no issues. But if due to some reason the connect process takes more time and is not completed by the time next agent scan runs. In this case, based on the db. state same hosts may get picked up again. And then there will be situations where more than one thread is processing connect for the same host.
The fix is to check if there is a thread already processing connect for a host and in this case all subsequent threads for that host will simply bail out. Also there may be a scenario where one thread already completed processing connect but another thread already got scheduled before that and will again repeat the same. This is also prevented by putting appropriate checks.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ae181afb
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ae181afb
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ae181afb
Branch: refs/heads/kvm-vnc-listen
Commit: ae181afb005bd26af5503665c5c08883759ffecf
Parents: 28af817
Author: Koushik Das <ko...@apache.org>
Authored: Tue Sep 10 17:21:36 2013 +0530
Committer: Koushik Das <ko...@apache.org>
Committed: Tue Sep 10 17:21:36 2013 +0530
----------------------------------------------------------------------
.../cloud/agent/manager/AgentManagerImpl.java | 24 ++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ae181afb/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
index 811ff13..6c88f6e 100755
--- a/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/agent/manager/AgentManagerImpl.java
@@ -1037,9 +1037,22 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
s_logger.debug("Simulating start for resource " + resource.getName() + " id " + id);
}
- tapLoadingAgents(id, TapAgentsAction.Add);
- _resourceMgr.createHostAndAgent(id, resource, details, false, null, false);
- tapLoadingAgents(id, TapAgentsAction.Del);
+ if (tapLoadingAgents(id, TapAgentsAction.Add)) {
+ try {
+ AgentAttache agentattache = findAttache(id);
+ if (agentattache == null) {
+ s_logger.debug("Creating agent for host " + id);
+ _resourceMgr.createHostAndAgent(id, resource, details, false, null, false);
+ s_logger.debug("Completed creating agent for host " + id);
+ } else {
+ s_logger.debug("Agent already created in another thread for host " + id + ", ignore this");
+ }
+ } finally {
+ tapLoadingAgents(id, TapAgentsAction.Del);
+ }
+ } else {
+ s_logger.debug("Agent creation already getting processed in another thread for host " + id + ", ignore this");
+ }
} catch (Exception e) {
s_logger.warn("Unable to simulate start on resource " + id + " name " + resource.getName(), e);
} finally {
@@ -1290,7 +1303,10 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl
public boolean tapLoadingAgents(Long hostId, TapAgentsAction action) {
synchronized (_loadingAgents) {
if (action == TapAgentsAction.Add) {
- _loadingAgents.add(hostId);
+ if (_loadingAgents.contains(hostId))
+ return false;
+ else
+ _loadingAgents.add(hostId);
} else if (action == TapAgentsAction.Del) {
_loadingAgents.remove(hostId);
} else if (action == TapAgentsAction.Contains) {
[18/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
simplify setCpuUsed
- variables inlined
- cpu utilization is not cast to float from double
Signed-off-by: Laszlo Hornyak <la...@gmail.com>
Signed-off-by: Min Chen <mi...@citrix.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/cb3a3da7
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/cb3a3da7
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/cb3a3da7
Branch: refs/heads/kvm-vnc-listen
Commit: cb3a3da75dc9cd450eb484af8841b2c52ac52fae
Parents: d3237e7
Author: Laszlo Hornyak <la...@gmail.com>
Authored: Thu Aug 29 11:37:26 2013 +0200
Committer: Min Chen <mi...@citrix.com>
Committed: Wed Sep 11 21:33:02 2013 -0700
----------------------------------------------------------------------
server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cb3a3da7/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
index 55726a2..7fe3c1d 100644
--- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@ -166,14 +166,10 @@ public class UserVmJoinDaoImpl extends GenericDaoBase<UserVmJoinVO, Long> implem
userVmResponse.setKeyPairName(userVm.getKeypairName());
if (details.contains(VMDetails.all) || details.contains(VMDetails.stats)) {
- DecimalFormat decimalFormat = new DecimalFormat("#.##");
// stats calculation
- String cpuUsed = null;
VmStats vmStats = ApiDBUtils.getVmStatistics(userVm.getId());
if (vmStats != null) {
- float cpuUtil = (float) vmStats.getCPUUtilization();
- cpuUsed = decimalFormat.format(cpuUtil) + "%";
- userVmResponse.setCpuUsed(cpuUsed);
+ userVmResponse.setCpuUsed(new DecimalFormat("#.##").format(vmStats.getCPUUtilization()) + "%");
userVmResponse.setNetworkKbsRead((long) vmStats.getNetworkReadKBs());
[17/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
simplified casting
double values do not need a Double object to be casted to long
Signed-off-by: Laszlo Hornyak <la...@gmail.com>
Signed-off-by: Min Chen <mi...@citrix.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d3237e75
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d3237e75
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d3237e75
Branch: refs/heads/kvm-vnc-listen
Commit: d3237e75b2b2d4ba9872c76a5666f7cd2c44db03
Parents: 4adf131
Author: Laszlo Hornyak <la...@gmail.com>
Authored: Thu Aug 29 09:23:06 2013 +0200
Committer: Min Chen <mi...@citrix.com>
Committed: Wed Sep 11 18:27:54 2013 -0700
----------------------------------------------------------------------
.../cloud/api/query/dao/UserVmJoinDaoImpl.java | 19 ++++++-------------
1 file changed, 6 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d3237e75/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
index 7f16974..55726a2 100644
--- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@ -45,7 +45,6 @@ import com.cloud.uservm.UserVm;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
-import com.cloud.vm.UserVmVO;
import com.cloud.vm.VmStats;
import com.cloud.vm.VirtualMachine.State;
@@ -176,26 +175,20 @@ public class UserVmJoinDaoImpl extends GenericDaoBase<UserVmJoinVO, Long> implem
cpuUsed = decimalFormat.format(cpuUtil) + "%";
userVmResponse.setCpuUsed(cpuUsed);
- Double networkKbRead = Double.valueOf(vmStats.getNetworkReadKBs());
- userVmResponse.setNetworkKbsRead(networkKbRead.longValue());
+ userVmResponse.setNetworkKbsRead((long) vmStats.getNetworkReadKBs());
- Double networkKbWrite = Double.valueOf(vmStats.getNetworkWriteKBs());
- userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue());
+ userVmResponse.setNetworkKbsWrite((long) vmStats.getNetworkWriteKBs());
if ((userVm.getHypervisorType() != null)
&& (userVm.getHypervisorType().equals(HypervisorType.KVM)
|| userVm.getHypervisorType().equals(HypervisorType.XenServer))) { // support KVM and XenServer only util 2013.06.25
- Double diskKbsRead = Double.valueOf(vmStats.getDiskReadKBs());
- userVmResponse.setDiskKbsRead(diskKbsRead.longValue());
+ userVmResponse.setDiskKbsRead((long) vmStats.getDiskReadKBs());
- Double diskKbsWrite = Double.valueOf(vmStats.getDiskWriteKBs());
- userVmResponse.setDiskKbsWrite(diskKbsWrite.longValue());
+ userVmResponse.setDiskKbsWrite((long) vmStats.getDiskWriteKBs());
- Double diskIORead = Double.valueOf(vmStats.getDiskReadIOs());
- userVmResponse.setDiskIORead(diskIORead.longValue());
+ userVmResponse.setDiskIORead((long) vmStats.getDiskReadIOs());
- Double diskIOWrite = Double.valueOf(vmStats.getDiskWriteIOs());
- userVmResponse.setDiskIOWrite(diskIOWrite.longValue());
+ userVmResponse.setDiskIOWrite((long) vmStats.getDiskWriteIOs());
}
}
}
[24/50] [abbrv] heading changes for release notes CLOUDSTACK-4245
Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c377c156/docs/en-US/Release_Notes.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/Release_Notes.xml b/docs/en-US/Release_Notes.xml
index 97f776b..96cf6e6 100644
--- a/docs/en-US/Release_Notes.xml
+++ b/docs/en-US/Release_Notes.xml
@@ -55,836 +55,848 @@ under the License.
<para>If you find any errors or problems in this guide, please see <xref linkend="feedback"/>.
We hope you enjoy working with &PRODUCT;!</para>
</chapter>
- <chapter id="whats-new-in-4.2">
- <title>What's New in 4.2</title>
- <para>&PRODUCT; 4.2 includes the following new features.</para>
- <section id="workloads">
- <title>Features to Support Heterogeneous Workloads</title>
- <para>The following new features help &PRODUCT; 4.2 better support both legacy and cloud-era
- style zones.</para>
- <section id="regions">
- <title>Regions</title>
- <para>To increase reliability of the cloud, you can optionally group resources into
- geographic regions. A region is the largest available organizational unit within a cloud
- deployment. A region is made up of several availability zones, where each zone is
- equivalent to a datacenter. Each region is controlled by its own cluster of Management
- Servers, running in one of the zones. The zones in a region are typically located in close
- geographical proximity. Regions are a useful technique for providing fault tolerance and
- disaster recovery.</para>
- <para>By grouping zones into regions, the cloud can achieve higher availability and
- scalability. User accounts can span regions, so that users can deploy VMs in multiple,
- widely-dispersed regions. Even if one of the regions becomes unavailable, the services are
- still available to the end-user through VMs deployed in another region. And by grouping
- communities of zones under their own nearby Management Servers, the latency of
- communications within the cloud is reduced compared to managing widely-dispersed zones
- from a single central Management Server.</para>
- <para>Usage records can also be consolidated and tracked at the region level, creating
- reports or invoices for each geographic region.</para>
+ <chapter id="version-4.2">
+ <title>Version 4.2.0</title>
+ <section id="whats-new-in-4.2">
+ <para>&PRODUCT; 4.2 includes the following new features.</para>
+ <section id="workloads">
+ <title>Features to Support Heterogeneous Workloads</title>
+ <para>The following new features help &PRODUCT; 4.2 better support both legacy and cloud-era
+ style zones.</para>
+ <section id="regions">
+ <title>Regions</title>
+ <para>To increase reliability of the cloud, you can optionally group resources into
+ geographic regions. A region is the largest available organizational unit within a cloud
+ deployment. A region is made up of several availability zones, where each zone is
+ equivalent to a datacenter. Each region is controlled by its own cluster of Management
+ Servers, running in one of the zones. The zones in a region are typically located in
+ close geographical proximity. Regions are a useful technique for providing fault
+ tolerance and disaster recovery.</para>
+ <para>By grouping zones into regions, the cloud can achieve higher availability and
+ scalability. User accounts can span regions, so that users can deploy VMs in multiple,
+ widely-dispersed regions. Even if one of the regions becomes unavailable, the services
+ are still available to the end-user through VMs deployed in another region. And by
+ grouping communities of zones under their own nearby Management Servers, the latency of
+ communications within the cloud is reduced compared to managing widely-dispersed zones
+ from a single central Management Server.</para>
+ <para>Usage records can also be consolidated and tracked at the region level, creating
+ reports or invoices for each geographic region.</para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="./images/region-overview.png"/>
+ </imageobject>
+ <textobject>
+ <phrase>region-overview.png: Nested structure of a region.</phrase>
+ </textobject>
+ </mediaobject>
+ </section>
+ <section id="object-store">
+ <title>Object Storage Plugin Architecture</title>
+ <para>Artifacts such as templates, ISOs and snapshots are kept in storage which &PRODUCT;
+ refers to as secondary storage. To improve scalability and performance, as when a number
+ of hosts access secondary storage concurrently, object storage can be used for secondary
+ storage. Object storage can also provide built-in high availability capability. When
+ using object storage, access to secondary storage data can be made available across
+ multiple zones in a region. This is a huge benefit, as it is no longer necessary to copy
+ templates, snapshots etc. across zones as would be needed in an NFS-only
+ environment.</para>
+ <para>Object storage is provided through third-party software such as Amazon Simple
+ Storage Service (S3) or any other object storage that supports the S3 interface. These
+ third party object storages can be integrated with &PRODUCT; by writing plugin software
+ that uses the object storage plugin capability introduced in &PRODUCT; 4.2. Several new
+ pluggable service interfaces are available so that different storage providers can
+ develop vendor-specific plugins based on the well-defined contracts that can be
+ seemlessly managed by &PRODUCT;.</para>
+ </section>
+ <section id="zone-wide-primary-storage">
+ <title>Zone-Wide Primary Storage</title>
+ <para>(Supported on KVM and VMware)</para>
+ <para>In &PRODUCT; 4.2, you can provision primary storage on a per-zone basis. Data
+ volumes in the primary storage can be attached to any VM on any host in the zone.</para>
+ <para>In previous &PRODUCT; versions, each cluster had its own primary storage. Data in
+ the primary storage was directly available only to VMs within that cluster. If a VM in a
+ different cluster needed some of the data, it must be copied from one cluster to
+ another, using the zone's secondary storage as an intermediate step. This operation was
+ unnecessarily time-consuming.</para>
+ </section>
+ <section id="vmware-datacenter">
+ <title>VMware Datacenter Now Visible As a &PRODUCT; Zone</title>
+ <para>In order to support zone-wide functions for VMware, changes have been made so that
+ &PRODUCT; is now aware of VMware Datacenters and can map each Datacenter to a &PRODUCT;
+ zone. Previously, &PRODUCT; was only aware of VMware Clusters, a smaller organizational
+ unit than Datacenters. This implies that a single &PRODUCT; zone could possibly contain
+ clusters from different VMware Datacenters. In order for zone-wide functions, such as
+ zone-wide primary storage, to work for VMware hosts, &PRODUCT; has to make sure that a
+ zone contains only a single VMware Datacenter. Therefore, when you are creating a new
+ &PRODUCT; zone, you will now be able to select a VMware Datacenter for the zone. If you
+ are provisioning multiple VMware Datacenters, each one will be set up as a single zone
+ in &PRODUCT;. </para>
+ <note>
+ <para>If you are upgrading from a previous &PRODUCT; version, and your existing
+ deployment contains a zone with clusters from multiple VMware Datacenters, that zone
+ will not be forcibly migrated to the new model. It will continue to function as
+ before. However, any new zone-wide operations, such as zone-wide primary storage, will
+ not be available in that zone.</para>
+ </note>
+ <para/>
+ </section>
+ </section>
+ <section id="third-party-plugin">
+ <title>Third-Party UI Plugin Framework</title>
+ <para>Using the new third-party plugin framework, you can write and install extensions to
+ &PRODUCT;. The installed and enabled plugins will appear in the UI alongside the
+ Citrix-provided features.</para>
+ <para>The basic procedure for adding a UI plugin is explained in the Developer Guide. In
+ summary, the plugin developer creates the plugin code itself (in Javascript), a thumbnail
+ image, the plugin listing, and a CSS file. The &PRODUCT; administrator adds the folder
+ containing the plugin code under the &PRODUCT; PLUGINS folder and adds the plugin name to
+ a configuration file (plugins.js).</para>
+ <para>The next time the user refreshes the UI in the browser, the plugin will appear under
+ the Plugins button in the left navigation bar.</para>
<mediaobject>
<imageobject>
- <imagedata fileref="./images/region-overview.png"/>
+ <imagedata fileref="./images/plugin4.jpg"/>
</imageobject>
<textobject>
- <phrase>region-overview.png: Nested structure of a region.</phrase>
+ <phrase>plugin4.jpg: The plugin appears in the UI</phrase>
</textobject>
</mediaobject>
</section>
- <section id="object-store">
- <title>Object Storage Plugin Architecture</title>
- <para>Artifacts such as templates, ISOs and snapshots are kept in storage which &PRODUCT;
- refers to as secondary storage. To improve scalability and performance, as when a number
- of hosts access secondary storage concurrently, object storage can be used for secondary
- storage. Object storage can also provide built-in high availability capability. When using
- object storage, access to secondary storage data can be made available across multiple
- zones in a region. This is a huge benefit, as it is no longer necessary to copy templates,
- snapshots etc. across zones as would be needed in an NFS-only environment.</para>
- <para>Object storage is provided through third-party software such as Amazon Simple Storage
- Service (S3) or any other object storage that supports the S3 interface. These third party
- object storages can be integrated with &PRODUCT; by writing plugin software that uses the
- object storage plugin capability introduced in &PRODUCT; 4.2. Several new pluggable
- service interfaces are available so that different storage providers can develop
- vendor-specific plugins based on the well-defined contracts that can be seemlessly managed
- by &PRODUCT;.</para>
- </section>
- <section id="zone-wide-primary-storage">
- <title>Zone-Wide Primary Storage</title>
- <para>(Supported on KVM and VMware)</para>
- <para>In &PRODUCT; 4.2, you can provision primary storage on a per-zone basis. Data volumes
- in the primary storage can be attached to any VM on any host in the zone.</para>
- <para>In previous &PRODUCT; versions, each cluster had its own primary storage. Data in the
- primary storage was directly available only to VMs within that cluster. If a VM in a
- different cluster needed some of the data, it must be copied from one cluster to another,
- using the zone's secondary storage as an intermediate step. This operation was
- unnecessarily time-consuming.</para>
- </section>
- <section id="vmware-datacenter">
- <title>VMware Datacenter Now Visible As a &PRODUCT; Zone</title>
- <para>In order to support zone-wide functions for VMware, changes have been made so that
- &PRODUCT; is now aware of VMware Datacenters and can map each Datacenter to a &PRODUCT;
- zone. Previously, &PRODUCT; was only aware of VMware Clusters, a smaller organizational
- unit than Datacenters. This implies that a single &PRODUCT; zone could possibly contain
- clusters from different VMware Datacenters. In order for zone-wide functions, such as
- zone-wide primary storage, to work for VMware hosts, &PRODUCT; has to make sure that a
- zone contains only a single VMware Datacenter. Therefore, when you are creating a new
- &PRODUCT; zone, you will now be able to select a VMware Datacenter for the zone. If you
- are provisioning multiple VMware Datacenters, each one will be set up as a single zone in
- &PRODUCT;. </para>
- <note>
- <para>If you are upgrading from a previous &PRODUCT; version, and your existing deployment
- contains a zone with clusters from multiple VMware Datacenters, that zone will not be
- forcibly migrated to the new model. It will continue to function as before. However, any
- new zone-wide operations, such as zone-wide primary storage, will not be available in
- that zone.</para>
- </note>
- <para/>
- </section>
- </section>
- <section id="third-party-plugin">
- <title>Third-Party UI Plugin Framework</title>
- <para>Using the new third-party plugin framework, you can write and install extensions to
- &PRODUCT;. The installed and enabled plugins will appear in the UI alongside the
- Citrix-provided features.</para>
- <para>The basic procedure for adding a UI plugin is explained in the Developer Guide. In
- summary, the plugin developer creates the plugin code itself (in Javascript), a thumbnail
- image, the plugin listing, and a CSS file. The &PRODUCT; administrator adds the folder
- containing the plugin code under the &PRODUCT; PLUGINS folder and adds the plugin name to a
- configuration file (plugins.js).</para>
- <para>The next time the user refreshes the UI in the browser, the plugin will appear under the
- Plugins button in the left navigation bar.</para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="./images/plugin4.jpg"/>
- </imageobject>
- <textobject>
- <phrase>plugin4.jpg: The plugin appears in the UI</phrase>
- </textobject>
- </mediaobject>
- </section>
- <section id="networking">
- <title>Networking Enhancements</title>
- <para>The following new features provide additional networking functionality in &PRODUCT;
- 4.2.</para>
- <section id="ipv6">
- <title>IPv6 (Technical Preview)</title>
- <para>&PRODUCT; 4.2 introduces initial support for IPv6. This feature is provided as a
- technical preview only. Full support is planned for a future release.</para>
- </section>
- <section id="portable-ip">
- <title>Portable IPs</title>
- <para>Portable IPs in &PRODUCT; are elastic IPs that can be transferred across
- geographically separated zones. As an administrator, you can provision a pool of portable
- IPs at region level and are available for user consumption. The users can acquire portable
- IPs if admin has provisioned portable public IPs at the region level they are part of.
- These IPs can be used for any service within an advanced zone. You can also use portable
- IPs for EIP service in Basic zones. Additionally, a portable IP can be transferred from
- one network to another network.</para>
- </section>
- <section id="ntier-apps">
- <title>N-Tier Applications</title>
- <para>In &PRODUCT; 3.0.6, a functionality was added to allow users to create a multi-tier
- application connected to a single instance of a Virtual Router that supports inter-VLAN
- routing. Such a multi-tier application is called a virtual private cloud (VPC). Users were
- also able to connect their multi-tier applications to a private Gateway or a Site-to-Site
- VPN tunnel and route certain traffic to those gateways. For &PRODUCT; 4.2, additional
- features are implemented to enhance VPC applications.</para>
- <itemizedlist>
- <listitem>
- <para><xref linkend="kvm-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="deploy-vm-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="add-loadbalancer-rule-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="current-lb-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="across-tiers-lb"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="ns-support"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="configure-acl"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="acl-private-gateway"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="allow-acl"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="acl-deny"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="add-vm-tier-sharednw"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="add-gateway-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="sourcenat-private-gateway"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="eightvpn"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="static-route"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="blacklist-route"/></para>
- </listitem>
- </itemizedlist>
- <section id="kvm-vpc">
- <title>Support for KVM</title>
- <para>VPC is now supported on KVM hypervisors.</para>
+ <section id="networking">
+ <title>Networking Enhancements</title>
+ <para>The following new features provide additional networking functionality in &PRODUCT;
+ 4.2.</para>
+ <section id="ipv6">
+ <title>IPv6 (Technical Preview)</title>
+ <para>&PRODUCT; 4.2 introduces initial support for IPv6. This feature is provided as a
+ technical preview only. Full support is planned for a future release.</para>
</section>
- <section id="deploy-vm-vpc">
- <title>Support for Simultaneously Deploying a VM on VPC and Multiple Shared
- Networks</title>
- <para>Support for the ability to simultaneously deploy a VM on a VPC tier and one or more
- Shared networks is supported.</para>
+ <section id="portable-ip">
+ <title>Portable IPs</title>
+ <para>Portable IPs in &PRODUCT; are elastic IPs that can be transferred across
+ geographically separated zones. As an administrator, you can provision a pool of
+ portable IPs at region level and are available for user consumption. The users can
+ acquire portable IPs if admin has provisioned portable public IPs at the region level
+ they are part of. These IPs can be used for any service within an advanced zone. You can
+ also use portable IPs for EIP service in Basic zones. Additionally, a portable IP can be
+ transferred from one network to another network.</para>
</section>
- <section id="add-loadbalancer-rule-vpc">
- <title>Load Balancing Support for VPC</title>
- <para>In a VPC, you can configure two types of load balancing—external LB and
- internal LB. External LB is nothing but a LB rule created to redirect the traffic
- received at a public IP of the VPC virtual router. The traffic is load balanced within a
- tier based on your configuration. Citrix NetScaler and VPC virtual router are supported
- for external LB. When you use internal LB service, traffic received at a tier is load
- balanced across different VMs within that tier. For example, traffic reached at Web tier
- is redirected to another VM in that tier. External load balancing devices are not
- supported for internal LB. The service is provided by a internal LB VM configured on the
- target tier.</para>
- <section id="current-lb-vpc">
- <title>Load Balancing Within a Tier (External LB)</title>
- <para>A &PRODUCT; user or administrator may create load balancing rules that balance
- traffic received at a public IP to one or more VMs that belong to a network tier that
- provides load balancing service in a VPC. A user creates a rule, specifies an
- algorithm, and assigns the rule to a set of VMs within a tier.</para>
+ <section id="ntier-apps">
+ <title>N-Tier Applications</title>
+ <para>In &PRODUCT; 3.0.6, a functionality was added to allow users to create a multi-tier
+ application connected to a single instance of a Virtual Router that supports inter-VLAN
+ routing. Such a multi-tier application is called a virtual private cloud (VPC). Users
+ were also able to connect their multi-tier applications to a private Gateway or a
+ Site-to-Site VPN tunnel and route certain traffic to those gateways. For &PRODUCT; 4.2,
+ additional features are implemented to enhance VPC applications.</para>
+ <itemizedlist>
+ <listitem>
+ <para><xref linkend="kvm-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="deploy-vm-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="add-loadbalancer-rule-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="current-lb-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="across-tiers-lb"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="ns-support"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="configure-acl"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="acl-private-gateway"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="allow-acl"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="acl-deny"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="add-vm-tier-sharednw"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="add-gateway-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="sourcenat-private-gateway"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="eightvpn"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="static-route"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="blacklist-route"/></para>
+ </listitem>
+ </itemizedlist>
+ <section id="kvm-vpc">
+ <title>Support for KVM</title>
+ <para>VPC is now supported on KVM hypervisors.</para>
</section>
- <section id="across-tiers-lb">
- <title>Load Balancing Across Tiers</title>
- <para>&PRODUCT; supports sharing workload across different tiers within your VPC. Assume
- that multiple tiers are set up in your environment, such as Web tier and Application
- tier. Traffic to each tier is balanced on the VPC virtual router on the public side.
- If you want the traffic coming from the Web tier to the Application tier to be
- balanced, use the internal load balancing feature offered by &PRODUCT;.</para>
+ <section id="deploy-vm-vpc">
+ <title>Support for Simultaneously Deploying a VM on VPC and Multiple Shared
+ Networks</title>
+ <para>Support for the ability to simultaneously deploy a VM on a VPC tier and one or
+ more Shared networks is supported.</para>
</section>
- <section id="ns-support">
- <title>Netscaler Support for VPC</title>
- <para>Citrix NetScaler is supported for external LB. Certified version for this feature
- is NetScaler 10.0 Build 74.4006.e.</para>
+ <section id="add-loadbalancer-rule-vpc">
+ <title>Load Balancing Support for VPC</title>
+ <para>In a VPC, you can configure two types of load balancing—external LB and
+ internal LB. External LB is nothing but a LB rule created to redirect the traffic
+ received at a public IP of the VPC virtual router. The traffic is load balanced within
+ a tier based on your configuration. Citrix NetScaler and VPC virtual router are
+ supported for external LB. When you use internal LB service, traffic received at a
+ tier is load balanced across different VMs within that tier. For example, traffic
+ reached at Web tier is redirected to another VM in that tier. External load balancing
+ devices are not supported for internal LB. The service is provided by a internal LB VM
+ configured on the target tier.</para>
+ <section id="current-lb-vpc">
+ <title>Load Balancing Within a Tier (External LB)</title>
+ <para>A &PRODUCT; user or administrator may create load balancing rules that balance
+ traffic received at a public IP to one or more VMs that belong to a network tier
+ that provides load balancing service in a VPC. A user creates a rule, specifies an
+ algorithm, and assigns the rule to a set of VMs within a tier.</para>
+ </section>
+ <section id="across-tiers-lb">
+ <title>Load Balancing Across Tiers</title>
+ <para>&PRODUCT; supports sharing workload across different tiers within your VPC.
+ Assume that multiple tiers are set up in your environment, such as Web tier and
+ Application tier. Traffic to each tier is balanced on the VPC virtual router on the
+ public side. If you want the traffic coming from the Web tier to the Application
+ tier to be balanced, use the internal load balancing feature offered by
+ &PRODUCT;.</para>
+ </section>
+ <section id="ns-support">
+ <title>Netscaler Support for VPC</title>
+ <para>Citrix NetScaler is supported for external LB. Certified version for this
+ feature is NetScaler 10.0 Build 74.4006.e.</para>
+ </section>
</section>
- </section>
- <section id="configure-acl">
- <title>Enhanced Access Control List</title>
- <para>Network Access Control List (ACL) on the VPC virtual router is enhanced. The network
- ACLs can be created for the tiers only if the NetworkACL service is supported. In
- &PRODUCT; terminology, Network ACL is a group of Network ACL items. Network ACL items
- are nothing but numbered rules that are evaluated in order, starting with the lowest
- numbered rule. These rules determine whether traffic is allowed in or out of any tier
- associated with the network ACL. You need to add the Network ACL items to the Network
- ACL, then associate the Network ACL with a tier. Network ACL is associated with a VPC
- and can be assigned to multiple VPC tiers within a VPC. A Tier is associated with a
- Network ACL at all the times. Each tier can be associated with only one ACL. </para>
- <para>The default Network ACL is used when no ACL is associated. Default behavior is all
- incoming traffic to guest networks is blocked and all outgoing traffic from guest
- networks is allowed. Default network ACL cannot be removed or modified.</para>
- <section id="acl-private-gateway">
- <title>ACL on Private Gateway</title>
- <para>The traffic on the VPC private gateway is controlled by creating both ingress and
- egress network ACL rules. The ACLs contains both allow and deny rules. As per the
- rule, all the ingress traffic to the private gateway interface and all the egress
- traffic out from the private gateway interface are blocked. You can change this
- default behaviour while creating a private gateway.</para>
+ <section id="configure-acl">
+ <title>Enhanced Access Control List</title>
+ <para>Network Access Control List (ACL) on the VPC virtual router is enhanced. The
+ network ACLs can be created for the tiers only if the NetworkACL service is supported.
+ In &PRODUCT; terminology, Network ACL is a group of Network ACL items. Network ACL
+ items are nothing but numbered rules that are evaluated in order, starting with the
+ lowest numbered rule. These rules determine whether traffic is allowed in or out of
+ any tier associated with the network ACL. You need to add the Network ACL items to the
+ Network ACL, then associate the Network ACL with a tier. Network ACL is associated
+ with a VPC and can be assigned to multiple VPC tiers within a VPC. A Tier is
+ associated with a Network ACL at all the times. Each tier can be associated with only
+ one ACL. </para>
+ <para>The default Network ACL is used when no ACL is associated. Default behavior is all
+ incoming traffic to guest networks is blocked and all outgoing traffic from guest
+ networks is allowed. Default network ACL cannot be removed or modified.</para>
+ <section id="acl-private-gateway">
+ <title>ACL on Private Gateway</title>
+ <para>The traffic on the VPC private gateway is controlled by creating both ingress
+ and egress network ACL rules. The ACLs contains both allow and deny rules. As per
+ the rule, all the ingress traffic to the private gateway interface and all the
+ egress traffic out from the private gateway interface are blocked. You can change
+ this default behaviour while creating a private gateway.</para>
+ </section>
+ <section id="allow-acl">
+ <title>Allow ACL on All Level 4 Protocols</title>
+ <para>In addition to the existing protocol support for ICMP, TCP, UDP, support for All
+ Level 4 protocols is added. The protocol numbers from 0 to 255 are supported.</para>
+ </section>
+ <section id="acl-deny">
+ <title>Support for ACL Deny Rules</title>
+ <para>In addition to the existing support for ACL Allow rules, support for ACL Deny
+ rules has been added in &PRODUCT; 4.2. As part of this, two operations are
+ supported: Number and Action. You can configure a rule, allow or deny, by using
+ action. Use Number to add a rule number.</para>
+ </section>
</section>
- <section id="allow-acl">
- <title>Allow ACL on All Level 4 Protocols</title>
- <para>In addition to the existing protocol support for ICMP, TCP, UDP, support for All
- Level 4 protocols is added. The protocol numbers from 0 to 255 are supported.</para>
+ <section id="add-vm-tier-sharednw">
+ <title>Deploying VMs to a VPC Tier and Shared Networks</title>
+ <para>&PRODUCT; allows you to deploy VMs on a VPC tier and one or more shared networks.
+ With this feature, the VMs deployed in a multi-tier application can receive services
+ offered by a service provider over the shared network. One example of such a service
+ is monitoring service.</para>
</section>
- <section id="acl-deny">
- <title>Support for ACL Deny Rules</title>
- <para>In addition to the existing support for ACL Allow rules, support for ACL Deny
- rules has been added in &PRODUCT; 4.2. As part of this, two operations are supported:
- Number and Action. You can configure a rule, allow or deny, by using action. Use
- Number to add a rule number.</para>
+ <section id="add-gateway-vpc">
+ <title>Adding a Private Gateway to a VPC</title>
+ <para>A private gateway can be added by the root admin only. The VPC private network has
+ 1:1 relationship with the NIC of the physical network. You can configure multiple
+ private gateways to a single VPC. No gateways with duplicated VLAN and IP are allowed
+ in the same data center.</para>
+ <section id="sourcenat-private-gateway">
+ <title>Source NAT on Private Gateway</title>
+ <para>You might want to deploy multiple VPCs with the same super CIDR and guest tier
+ CIDR. Therefore, multiple guest VMs from different VPCs can have the same IPs to
+ reach a enterprise data center through the private gateway. In such cases, a NAT
+ service need to be configured on the private gateway. If Source NAT is enabled, the
+ guest VMs in VPC reaches the enterprise network via private gateway IP address by
+ using the NAT service. </para>
+ <para>The Source NAT service on a private gateway can be enabled while adding the
+ private gateway. On deletion of a private gateway, source NAT rules specific to the
+ private gateway are deleted.</para>
+ </section>
+ <section id="eightvpn">
+ <title>VPN Gateways</title>
+ <para>Support up to 8 VPN Gateways is added.</para>
+ </section>
+ <section id="static-route">
+ <title>Creating a Static Route</title>
+ <para>&PRODUCT; enables you to specify routing for the VPN connection you create. You
+ can enter one or CIDR addresses to indicate which traffic is to be routed back to
+ the gateway.</para>
+ </section>
+ <section id="blacklist-route">
+ <title>Blacklisting Routes</title>
+ <para>&PRODUCT; enables you to block a list of routes so that they are not assigned to
+ any of the VPC private gateways. Specify the list of routes that you want to
+ blacklist in the <code>blacklisted.routes</code> global parameter. Note that the
+ parameter update affects only new static route creations. If you block an existing
+ static route, it remains intact and continue functioning. You cannot add a static
+ route if the route is blacklisted for the zone. </para>
+ </section>
</section>
</section>
- <section id="add-vm-tier-sharednw">
- <title>Deploying VMs to a VPC Tier and Shared Networks</title>
- <para>&PRODUCT; allows you to deploy VMs on a VPC tier and one or more shared networks.
- With this feature, the VMs deployed in a multi-tier application can receive services
- offered by a service provider over the shared network. One example of such a service is
- monitoring service.</para>
+ <section id="vlan-assign-isolated-nw">
+ <title>Assigning VLANs to Isolated Networks</title>
+ <para>&PRODUCT; provides you the ability to control VLAN assignment to Isolated networks.
+ You can assign a VLAN ID when a network is created, just the way it's done for Shared
+ networks.</para>
+ <para>The former behaviour also is supported — VLAN is randomly allocated to a
+ network from the VNET range of the physical network when the network turns to
+ Implemented state. The VLAN is released back to the VNET pool when the network shuts
+ down as a part of the Network Garbage Collection. The VLAN can be re-used either by the
+ same network when it is implemented again, or by any other network. On each subsequent
+ implementation of a network, a new VLAN can be assigned.</para>
+ <note>
+ <para>You cannot change a VLAN once it's assigned to the network. The VLAN remains with
+ the network for its entire life cycle.</para>
+ </note>
</section>
- <section id="add-gateway-vpc">
- <title>Adding a Private Gateway to a VPC</title>
- <para>A private gateway can be added by the root admin only. The VPC private network has
- 1:1 relationship with the NIC of the physical network. You can configure multiple
- private gateways to a single VPC. No gateways with duplicated VLAN and IP are allowed in
- the same data center.</para>
- <section id="sourcenat-private-gateway">
- <title>Source NAT on Private Gateway</title>
- <para>You might want to deploy multiple VPCs with the same super CIDR and guest tier
- CIDR. Therefore, multiple guest VMs from different VPCs can have the same IPs to reach
- a enterprise data center through the private gateway. In such cases, a NAT service
- need to be configured on the private gateway. If Source NAT is enabled, the guest VMs
- in VPC reaches the enterprise network via private gateway IP address by using the NAT
- service. </para>
- <para>The Source NAT service on a private gateway can be enabled while adding the
- private gateway. On deletion of a private gateway, source NAT rules specific to the
- private gateway are deleted.</para>
- </section>
- <section id="eightvpn">
- <title>VPN Gateways</title>
- <para>Support up to 8 VPN Gateways is added.</para>
- </section>
- <section id="static-route">
- <title>Creating a Static Route</title>
- <para>&PRODUCT; enables you to specify routing for the VPN connection you create. You
- can enter one or CIDR addresses to indicate which traffic is to be routed back to the
- gateway.</para>
- </section>
- <section id="blacklist-route">
- <title>Blacklisting Routes</title>
- <para>&PRODUCT; enables you to block a list of routes so that they are not assigned to
- any of the VPC private gateways. Specify the list of routes that you want to blacklist
- in the <code>blacklisted.routes</code> global parameter. Note that the parameter
- update affects only new static route creations. If you block an existing static route,
- it remains intact and continue functioning. You cannot add a static route if the route
- is blacklisted for the zone. </para>
- </section>
+ <section id="persistent-network">
+ <title>Persistent Networks</title>
+ <para>&PRODUCT; 4.2 supports Persistent Networks. The network that you can provision
+ without having to deploy any VMs on it is called a Persistent Network. A Persistent
+ Network can be part of a VPC or a non-VPC environment. With the addition of this
+ feature, you will have the ability to create a network in &PRODUCT; in which physical
+ devices can be deployed without having to run any VMs. Additionally, you can deploy
+ physical devices on that network. Another advantages is that you can create a VPC with a
+ tier that consists only physical devices. For example, you might create a VPC for a
+ three-tier application, deploy VMs for Web and Application tier, and use physical
+ machines for the Database tier. Another use case is that if you are providing services
+ by using physical hardware, you can define the network as persistent and therefore even
+ if all its VMs are destroyed the services will not be discontinued.</para>
+ </section>
+ <section id="vnmc-cisco">
+ <title>Cisco VNMC Support</title>
+ <para>Cisco Virtual Network Management Center (VNMC) provides centralized multi-device and
+ policy management for Cisco Network Virtual Services. When Cisco VNMC is integrated with
+ ASA 1000v Cloud Firewall and Cisco Nexus 1000v dvSwitch in &PRODUCT; you will be able
+ to: </para>
+ <itemizedlist>
+ <listitem>
+ <para>Configure Cisco ASA 1000v Firewalls</para>
+ </listitem>
+ <listitem>
+ <para>Create and apply security profiles that contain ACL policy sets for both ingress
+ and egress traffic, and NAT policy sets</para>
+ </listitem>
+ </itemizedlist>
+ <para>&PRODUCT; supports Cisco VNMC on Cisco Nexus 1000v dvSwich-enabled VMware
+ hypervisors.</para>
+ </section>
+ <section id="vmware-vswitch">
+ <title>VMware vNetwork Distributed vSwitch</title>
+ <para>&PRODUCT; supports VMware vSphere Distributed Switch (VDS) for virtual network
+ configuration in a VMware vSphere environment. Each vCenter server instance can support
+ up to 128 VDSs and each VDS can manage up to 500 VMware hosts. &PRODUCT; supports
+ configuring virtual networks in a deployment with a mix of Virtual Distributed Switch,
+ Standard Virtual Switch and Nexus 1000v Virtual Switch. </para>
+ </section>
+ <section id="reserved-ip-addresses-non-csvms">
+ <title>IP Reservation in Isolated Guest Networks</title>
+ <para>In Isolated guest networks in &PRODUCT; 4.2, a part of the guest IP address space
+ can be reserved for non-&PRODUCT; VMs or physical servers. To do so, you configure a
+ range of Reserved IP addresses by specifying the CIDR when a guest network is in
+ Implemented state. The advantage of having this feature is that if your customers wish
+ to have non-&PRODUCT; controlled VMs or physical servers on the same network, they can
+ use a part of the IP address space that is primarily provided to the guest network. When
+ IP reservation is configured, the administrator can add additional VMs or physical
+ servers that are not part of &PRODUCT; to the same network and assign them the Reserved
+ IP addresses. &PRODUCT; guest VMs cannot acquire IPs from the Reserved IP Range.</para>
+ </section>
+ <section id="ip-vlan-tenant">
+ <title>Dedicated Resources: Public IP Addresses and VLANs Per Account</title>
+ <para>&PRODUCT; provides you the ability to reserve a set of public IP addresses and VLANs
+ exclusively for an account. During zone creation, you can continue to define a set of
+ VLANs and multiple public IP ranges. This feature extends the functionality to enable
+ you to dedicate a fixed set of VLANs and guest IP addresses for a tenant.</para>
+ <para>This feature provides you the following capabilities:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Reserve a VLAN range and public IP address range from an Advanced zone and
+ assign it to an account</para>
+ </listitem>
+ <listitem>
+ <para>Disassociate a VLAN and public IP address range from an account</para>
+ </listitem>
+ </itemizedlist>
+ <note>
+ <para>Ensure that you check whether the required range is available and conforms to
+ account limits. The maximum IPs per account limit cannot be superseded.</para>
+ </note>
+ </section>
+ <section id="egress-firewall">
+ <title>Enhanced Juniper SRX Support for Egress Firewall Rules</title>
+ <para>Egress firewall rules were previously supported on virtual routers, and now they are
+ also supported on Juniper SRX external networking devices.</para>
+ <para>Egress traffic originates from a private network to a public network, such as the
+ Internet. By default, the egress traffic is blocked, so no outgoing traffic is allowed
+ from a guest network to the Internet. However, you can control the egress traffic in an
+ Advanced zone by creating egress firewall rules. When an egress firewall rule is
+ applied, the traffic specific to the rule is allowed and the remaining traffic is
+ blocked. When all the firewall rules are removed the default policy, Block, is
+ applied.</para>
+ <note>
+ <para>Egress firewall rules are not supported on Shared networks. They are supported
+ only on Isolated guest networks.</para>
+ </note>
+ </section>
+ <section id="default-egress-policy">
+ <title>Configuring the Default Egress Policy</title>
+ <para>The default egress policy for Isolated guest network can be configured by using
+ Network offering. Use the create network offering option to determine whether the
+ default policy should be block or allow all the traffic to the public network from a
+ guest network. Use this network offering to create the network. If no policy is
+ specified, by default all the traffic is allowed from the guest network that you create
+ by using this network offering.</para>
+ <para>You have two options: Allow and Deny.</para>
+ <para>If you select Allow for a network offering, by default egress traffic is allowed.
+ However, when an egress rule is configured for a guest network, rules are applied to
+ block the specified traffic and rest are allowed. If no egress rules are configured for
+ the network, egress traffic is accepted. If you select Deny for a network offering, by
+ default egress traffic for the guest network is blocked. However, when an egress rules
+ is configured for a guest network, rules are applied to allow the specified traffic.
+ While implementing a guest network, &PRODUCT; adds the firewall egress rule specific to
+ the default egress policy for the guest network.</para>
+ <para>This feature is supported only on virtual router and Juniper SRX.</para>
+ </section>
+ <section id="non-contiguous-vlan">
+ <title>Non-Contiguous VLAN Ranges</title>
+ <para>&PRODUCT; provides you with the flexibility to add non contiguous VLAN ranges to
+ your network. The administrator can either update an existing VLAN range or add multiple
+ non contiguous VLAN ranges while creating a zone. You can also use the
+ UpdatephysicalNetwork API to extend the VLAN range.</para>
+ </section>
+ <section id="pvlan">
+ <title>Isolation in Advanced Zone Using Private VLAN</title>
+ <para>Isolation of guest traffic in shared networks can be achieved by using Private VLANs
+ (PVLAN). PVLANs provide Layer 2 isolation between ports within the same VLAN. In a
+ PVLAN-enabled shared network, a user VM cannot reach other user VM though they can reach
+ the DHCP server and gateway, this would in turn allow users to control traffic within a
+ network and help them deploy multiple applications without communication between
+ application as well as prevent communication with other users’ VMs.</para>
+ <itemizedlist>
+ <listitem>
+ <para>Isolate VMs in a shared networks by using Private VLANs.</para>
+ </listitem>
+ <listitem>
+ <para>Supported on KVM, XenServer, and VMware hypervisors.</para>
+ </listitem>
+ <listitem>
+ <para>PVLAN-enabled shared network can be a part of multiple networks of a guest VM.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>For further reading:</para>
+ <itemizedlist>
+ <listitem>
+ <para><ulink
+ url="http://www.cisco.com/en/US/docs/switches/lan/catalyst3750/software/release/12.2_25_see/configuration/guide/swpvlan.html#wp1038379"
+ >Understanding Private VLANs</ulink></para>
+ </listitem>
+ <listitem>
+ <para><ulink url="http://tools.ietf.org/html/rfc5517">Cisco Systems' Private VLANs:
+ Scalable Security in a Multi-Client Environment</ulink></para>
+ </listitem>
+ <listitem>
+ <para><ulink url="http://kb.vmware.com">Private VLAN (PVLAN) on vNetwork Distributed
+ Switch - Concept Overview (1010691)</ulink></para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section id="multiple-ip-nic">
+ <title>Configuring Multiple IP Addresses on a Single NIC</title>
+ <para>(Supported on XenServer, KVM, and VMware hypervisors)</para>
+ <para>&PRODUCT; now provides you the ability to associate multiple private IP addresses
+ per guest VM NIC. This feature is supported on all the network
+ configurations—Basic, Advanced, and VPC. Security Groups, Static NAT and Port
+ forwarding services are supported on these additional IPs. In addition to the primary
+ IP, you can assign additional IPs to the guest VM NIC. Up to 256 IP addresses are
+ allowed per NIC.</para>
+ <para>As always, you can specify an IP from the guest subnet; if not specified, an IP is
+ automatically picked up from the guest VM subnet. You can view the IPs associated with
+ for each guest VM NICs on the UI. You can apply NAT on these additional guest IPs by
+ using firewall configuration in the &PRODUCT; UI. You must specify the NIC to which the
+ IP should be associated.</para>
+ </section>
+ <section id="multiple-ip-range">
+ <title>Adding Multiple IP Ranges</title>
+ <para>(Supported on KVM, xenServer, and VMware hypervisors)</para>
+ <para>&PRODUCT; 4.2 provides you with the flexibility to add guest IP ranges from
+ different subnets in Basic zones and security groups-enabled Advanced zones. For
+ security groups-enabled Advanced zones, it implies multiple subnets can be added to the
+ same VLAN. With the addition of this feature, you will be able to add IP address ranges
+ from the same subnet or from a different one when IP address are exhausted. This would
+ in turn allows you to employ higher number of subnets and thus reduce the address
+ management overhead.</para>
+ <para>Ensure that you manually configure the gateway of the new subnet before adding the
+ IP range. Note that &PRODUCT; supports only one gateway for a subnet; overlapping
+ subnets are not currently supported.</para>
+ <para>You can also delete IP ranges. This operation fails if an IP from the remove range
+ is in use. If the remove range contains the IP address on which the DHCP server is
+ running, &PRODUCT; acquires a new IP from the same subnet. If no IP is available in the
+ subnet, the remove operation fails.</para>
+ <note>
+ <para>The feature can only be implemented on IPv4 addresses.</para>
+ </note>
+ </section>
+ <section id="add-remove-network-vm">
+ <title>Support for Multiple Networks in VMs</title>
+ <para>(Supported on XenServer, VMware and KVM hypervisors)</para>
+ <para>&PRODUCT; 4.2 provides you the ability to add and remove multiple networks to a VM.
+ You can remove a network from a VM and add a new network. You can also change the
+ default network of a VM. With this functionality, hybrid or traditional server loads can
+ be accommodated with ease. </para>
+ <para>For adding or removing a NIC to work on VMware, ensure that vm-tools are running on
+ guest VMs.</para>
+ </section>
+ <section id="gslb">
+ <title>Global Server Load Balancing</title>
+ <para>&PRODUCT; 4.2 supports Global Server Load Balancing (GSLB) functionalities to
+ provide business continuity by load balancing traffic to an instance on active zones
+ only in case of zone failures . &PRODUCT; achieve this by extending its functionality of
+ integrating with NetScaler Application Delivery Controller (ADC), which also provides
+ various GSLB capabilities, such as disaster recovery and load balancing. The DNS
+ redirection technique is used to achieve GSLB in &PRODUCT;. In order to support this
+ functionality, region level services and service provider are introduced. A new service
+ 'GSLB' is introduced as a region level service. The GSLB service provider is introduced
+ that will provider the GSLB service. Currently, NetScaler is the supported GSLB provider
+ in &PRODUCT;. GSLB functionality works in an Active-Active data center environment.
+ </para>
+ </section>
+ <section id="lb-on-shared-vlan">
+ <title>Enhanced Load Balancing Services Using External Provider on Shared VLANs</title>
+ <para>Network services like Firewall, Load Balancing, and NAT are now supported in shared
+ networks created in an advanced zone. In effect, the following network services shall be
+ made available to a VM in a shared network: Source NAT, Static NAT, Port Forwarding,
+ Firewall and Load balancing. Subset of these service can be chosen while creating a
+ network offering for shared networks. Services available in a shared network is defined
+ by the network offering and the service chosen in the network offering. For example, if
+ network offering for a shared network has source NAT service enabled, a public IP shall
+ be provisioned and source NAT is configured on the firewall device to provide public
+ access to the VMs on the shared network. Static NAT, Port Forwarding, Load Balancing,
+ and Firewall services shall be available only on the acquired public IPs associated with
+ a shared network.</para>
+ <para>Additionally, Netscaler and Juniper SRX firewall device can be configured inline or
+ side-by-side mode.</para>
+ </section>
+ <section id="health-check">
+ <title>Health Checks for Load Balanced Instances</title>
+ <note>
+ <para>This feature is supported only on NetScaler version 10.0 and beyond.</para>
+ </note>
+ <para>(NetScaler load balancer only) A load balancer rule distributes requests among a
+ pool of services (a service in this context means an application running on a virtual
+ machine). When creating a load balancer rule, you can specify a health check which will
+ ensure that the rule forwards requests only to services that are healthy (running and
+ available). When a health check is in effect, the load balancer will stop forwarding
+ requests to any resources that it has found to be unhealthy. If the resource later
+ becomes available again, the periodic health check (periodicity is configurable) will
+ discover it and the resource will once again be made available to the load
+ balancer.</para>
+ <para>To configure how often the health check is performed by default, use the global
+ configuration setting healthcheck.update.interval. This default applies to all the
+ health check policies in the cloud. You can override this value for an individual health
+ check policy.</para>
</section>
</section>
- <section id="vlan-assign-isolated-nw">
- <title>Assigning VLANs to Isolated Networks</title>
- <para>&PRODUCT; provides you the ability to control VLAN assignment to Isolated networks.
- You can assign a VLAN ID when a network is created, just the way it's done for Shared
- networks.</para>
- <para>The former behaviour also is supported — VLAN is randomly allocated to a network
- from the VNET range of the physical network when the network turns to Implemented state.
- The VLAN is released back to the VNET pool when the network shuts down as a part of the
- Network Garbage Collection. The VLAN can be re-used either by the same network when it is
- implemented again, or by any other network. On each subsequent implementation of a
- network, a new VLAN can be assigned.</para>
- <note>
- <para>You cannot change a VLAN once it's assigned to the network. The VLAN remains with
- the network for its entire life cycle.</para>
- </note>
- </section>
- <section id="persistent-network">
- <title>Persistent Networks</title>
- <para>&PRODUCT; 4.2 supports Persistent Networks. The network that you can provision without
- having to deploy any VMs on it is called a Persistent Network. A Persistent Network can be
- part of a VPC or a non-VPC environment. With the addition of this feature, you will have
- the ability to create a network in &PRODUCT; in which physical devices can be deployed
- without having to run any VMs. Additionally, you can deploy physical devices on that
- network. Another advantages is that you can create a VPC with a tier that consists only
- physical devices. For example, you might create a VPC for a three-tier application, deploy
- VMs for Web and Application tier, and use physical machines for the Database tier. Another
- use case is that if you are providing services by using physical hardware, you can define
- the network as persistent and therefore even if all its VMs are destroyed the services
- will not be discontinued.</para>
- </section>
- <section id="vnmc-cisco">
- <title>Cisco VNMC Support</title>
- <para>Cisco Virtual Network Management Center (VNMC) provides centralized multi-device and
- policy management for Cisco Network Virtual Services. When Cisco VNMC is integrated with
- ASA 1000v Cloud Firewall and Cisco Nexus 1000v dvSwitch in &PRODUCT; you will be able to: </para>
- <itemizedlist>
- <listitem>
- <para>Configure Cisco ASA 1000v Firewalls</para>
- </listitem>
- <listitem>
- <para>Create and apply security profiles that contain ACL policy sets for both ingress
- and egress traffic, and NAT policy sets</para>
- </listitem>
- </itemizedlist>
- <para>&PRODUCT; supports Cisco VNMC on Cisco Nexus 1000v dvSwich-enabled VMware
- hypervisors.</para>
- </section>
- <section id="vmware-vswitch">
- <title>VMware vNetwork Distributed vSwitch</title>
- <para>&PRODUCT; supports VMware vSphere Distributed Switch (VDS) for virtual network
- configuration in a VMware vSphere environment. Each vCenter server instance can support up
- to 128 VDSs and each VDS can manage up to 500 VMware hosts. &PRODUCT; supports configuring
- virtual networks in a deployment with a mix of Virtual Distributed Switch, Standard
- Virtual Switch and Nexus 1000v Virtual Switch. </para>
- </section>
- <section id="reserved-ip-addresses-non-csvms">
- <title>IP Reservation in Isolated Guest Networks</title>
- <para>In Isolated guest networks in &PRODUCT; 4.2, a part of the guest IP address space can
- be reserved for non-&PRODUCT; VMs or physical servers. To do so, you configure a range of
- Reserved IP addresses by specifying the CIDR when a guest network is in Implemented state.
- The advantage of having this feature is that if your customers wish to have non-&PRODUCT;
- controlled VMs or physical servers on the same network, they can use a part of the IP
- address space that is primarily provided to the guest network. When IP reservation is
- configured, the administrator can add additional VMs or physical servers that are not part
- of &PRODUCT; to the same network and assign them the Reserved IP addresses. &PRODUCT;
- guest VMs cannot acquire IPs from the Reserved IP Range.</para>
- </section>
- <section id="ip-vlan-tenant">
- <title>Dedicated Resources: Public IP Addresses and VLANs Per Account</title>
- <para>&PRODUCT; provides you the ability to reserve a set of public IP addresses and VLANs
- exclusively for an account. During zone creation, you can continue to define a set of
- VLANs and multiple public IP ranges. This feature extends the functionality to enable you
- to dedicate a fixed set of VLANs and guest IP addresses for a tenant.</para>
- <para>This feature provides you the following capabilities:</para>
- <itemizedlist>
- <listitem>
- <para>Reserve a VLAN range and public IP address range from an Advanced zone and assign
- it to an account</para>
- </listitem>
- <listitem>
- <para>Disassociate a VLAN and public IP address range from an account</para>
- </listitem>
- </itemizedlist>
- <note>
- <para>Ensure that you check whether the required range is available and conforms to
- account limits. The maximum IPs per account limit cannot be superseded.</para>
- </note>
- </section>
- <section id="egress-firewall">
- <title>Enhanced Juniper SRX Support for Egress Firewall Rules</title>
- <para>Egress firewall rules were previously supported on virtual routers, and now they are
- also supported on Juniper SRX external networking devices.</para>
- <para>Egress traffic originates from a private network to a public network, such as the
- Internet. By default, the egress traffic is blocked, so no outgoing traffic is allowed
- from a guest network to the Internet. However, you can control the egress traffic in an
- Advanced zone by creating egress firewall rules. When an egress firewall rule is applied,
- the traffic specific to the rule is allowed and the remaining traffic is blocked. When all
- the firewall rules are removed the default policy, Block, is applied.</para>
- <note>
- <para>Egress firewall rules are not supported on Shared networks. They are supported only
- on Isolated guest networks.</para>
- </note>
- </section>
- <section id="default-egress-policy">
- <title>Configuring the Default Egress Policy</title>
- <para>The default egress policy for Isolated guest network can be configured by using
- Network offering. Use the create network offering option to determine whether the default
- policy should be block or allow all the traffic to the public network from a guest
- network. Use this network offering to create the network. If no policy is specified, by
- default all the traffic is allowed from the guest network that you create by using this
- network offering.</para>
- <para>You have two options: Allow and Deny.</para>
- <para>If you select Allow for a network offering, by default egress traffic is allowed.
- However, when an egress rule is configured for a guest network, rules are applied to block
- the specified traffic and rest are allowed. If no egress rules are configured for the
- network, egress traffic is accepted. If you select Deny for a network offering, by default
- egress traffic for the guest network is blocked. However, when an egress rules is
- configured for a guest network, rules are applied to allow the specified traffic. While
- implementing a guest network, &PRODUCT; adds the firewall egress rule specific to the
- default egress policy for the guest network.</para>
- <para>This feature is supported only on virtual router and Juniper SRX.</para>
- </section>
- <section id="non-contiguous-vlan">
- <title>Non-Contiguous VLAN Ranges</title>
- <para>&PRODUCT; provides you with the flexibility to add non contiguous VLAN ranges to your
- network. The administrator can either update an existing VLAN range or add multiple non
- contiguous VLAN ranges while creating a zone. You can also use the UpdatephysicalNetwork
- API to extend the VLAN range.</para>
- </section>
- <section id="pvlan">
- <title>Isolation in Advanced Zone Using Private VLAN</title>
- <para>Isolation of guest traffic in shared networks can be achieved by using Private VLANs
- (PVLAN). PVLANs provide Layer 2 isolation between ports within the same VLAN. In a
- PVLAN-enabled shared network, a user VM cannot reach other user VM though they can reach
- the DHCP server and gateway, this would in turn allow users to control traffic within a
- network and help them deploy multiple applications without communication between
- application as well as prevent communication with other users’ VMs.</para>
- <itemizedlist>
- <listitem>
- <para>Isolate VMs in a shared networks by using Private VLANs.</para>
- </listitem>
- <listitem>
- <para>Supported on KVM, XenServer, and VMware hypervisors.</para>
- </listitem>
- <listitem>
- <para>PVLAN-enabled shared network can be a part of multiple networks of a guest VM.
- </para>
- </listitem>
- </itemizedlist>
- <para>For further reading:</para>
- <itemizedlist>
- <listitem>
- <para><ulink
- url="http://www.cisco.com/en/US/docs/switches/lan/catalyst3750/software/release/12.2_25_see/configuration/guide/swpvlan.html#wp1038379"
- >Understanding Private VLANs</ulink></para>
- </listitem>
- <listitem>
- <para><ulink url="http://tools.ietf.org/html/rfc5517">Cisco Systems' Private VLANs:
- Scalable Security in a Multi-Client Environment</ulink></para>
- </listitem>
- <listitem>
- <para><ulink url="http://kb.vmware.com">Private VLAN (PVLAN) on vNetwork Distributed
- Switch - Concept Overview (1010691)</ulink></para>
- </listitem>
- </itemizedlist>
- </section>
- <section id="multiple-ip-nic">
- <title>Configuring Multiple IP Addresses on a Single NIC</title>
- <para>(Supported on XenServer, KVM, and VMware hypervisors)</para>
- <para>&PRODUCT; now provides you the ability to associate multiple private IP addresses per
- guest VM NIC. This feature is supported on all the network configurations—Basic,
- Advanced, and VPC. Security Groups, Static NAT and Port forwarding services are supported
- on these additional IPs. In addition to the primary IP, you can assign additional IPs to
- the guest VM NIC. Up to 256 IP addresses are allowed per NIC.</para>
- <para>As always, you can specify an IP from the guest subnet; if not specified, an IP is
- automatically picked up from the guest VM subnet. You can view the IPs associated with for
- each guest VM NICs on the UI. You can apply NAT on these additional guest IPs by using
- firewall configuration in the &PRODUCT; UI. You must specify the NIC to which the IP
- should be associated.</para>
- </section>
- <section id="multiple-ip-range">
- <title>Adding Multiple IP Ranges</title>
- <para>(Supported on KVM, xenServer, and VMware hypervisors)</para>
- <para>&PRODUCT; 4.2 provides you with the flexibility to add guest IP ranges from different
- subnets in Basic zones and security groups-enabled Advanced zones. For security
- groups-enabled Advanced zones, it implies multiple subnets can be added to the same VLAN.
- With the addition of this feature, you will be able to add IP address ranges from the same
- subnet or from a different one when IP address are exhausted. This would in turn allows
- you to employ higher number of subnets and thus reduce the address management
- overhead.</para>
- <para>Ensure that you manually configure the gateway of the new subnet before adding the IP
- range. Note that &PRODUCT; supports only one gateway for a subnet; overlapping subnets are
- not currently supported.</para>
- <para>You can also delete IP ranges. This operation fails if an IP from the remove range is
- in use. If the remove range contains the IP address on which the DHCP server is running,
- &PRODUCT; acquires a new IP from the same subnet. If no IP is available in the subnet, the
- remove operation fails.</para>
- <note>
- <para>The feature can only be implemented on IPv4 addresses.</para>
- </note>
- </section>
- <section id="add-remove-network-vm">
- <title>Support for Multiple Networks in VMs</title>
- <para>(Supported on XenServer, VMware and KVM hypervisors)</para>
- <para>&PRODUCT; 4.2 provides you the ability to add and remove multiple networks to a VM.
- You can remove a network from a VM and add a new network. You can also change the default
- network of a VM. With this functionality, hybrid or traditional server loads can be
- accommodated with ease. </para>
- <para>For adding or removing a NIC to work on VMware, ensure that vm-tools are running on
- guest VMs.</para>
- </section>
- <section id="gslb">
- <title>Global Server Load Balancing</title>
- <para>&PRODUCT; 4.2 supports Global Server Load Balancing (GSLB) functionalities to provide
- business continuity by load balancing traffic to an instance on active zones only in case
- of zone failures . &PRODUCT; achieve this by extending its functionality of integrating
- with NetScaler Application Delivery Controller (ADC), which also provides various GSLB
- capabilities, such as disaster recovery and load balancing. The DNS redirection technique
- is used to achieve GSLB in &PRODUCT;. In order to support this functionality, region level
- services and service provider are introduced. A new service 'GSLB' is introduced as a
- region level service. The GSLB service provider is introduced that will provider the GSLB
- service. Currently, NetScaler is the supported GSLB provider in &PRODUCT;. GSLB
- functionality works in an Active-Active data center environment. </para>
- </section>
- <section id="lb-on-shared-vlan">
- <title>Enhanced Load Balancing Services Using External Provider on Shared VLANs</title>
- <para>Network services like Firewall, Load Balancing, and NAT are now supported in shared
- networks created in an advanced zone. In effect, the following network services shall be
- made available to a VM in a shared network: Source NAT, Static NAT, Port Forwarding,
- Firewall and Load balancing. Subset of these service can be chosen while creating a
- network offering for shared networks. Services available in a shared network is defined by
- the network offering and the service chosen in the network offering. For example, if
- network offering for a shared network has source NAT service enabled, a public IP shall be
- provisioned and source NAT is configured on the firewall device to provide public access
- to the VMs on the shared network. Static NAT, Port Forwarding, Load Balancing, and
- Firewall services shall be available only on the acquired public IPs associated with a
- shared network.</para>
- <para>Additionally, Netscaler and Juniper SRX firewall device can be configured inline or
- side-by-side mode.</para>
- </section>
- <section id="health-check">
- <title>Health Checks for Load Balanced Instances</title>
- <note>
- <para>This feature is supported only on NetScaler version 10.0 and beyond.</para>
- </note>
- <para>(NetScaler load balancer only) A load balancer rule distributes requests among a pool
- of services (a service in this context means an application running on a virtual machine).
- When creating a load balancer rule, you can specify a health check which will ensure that
- the rule forwards requests only to services that are healthy (running and available). When
- a health check is in effect, the load balancer will stop forwarding requests to any
- resources that it has found to be unhealthy. If the resource later becomes available
- again, the periodic health check (periodicity is configurable) will discover it and the
- resource will once again be made available to the load balancer.</para>
- <para>To configure how often the health check is performed by default, use the global
- configuration setting healthcheck.update.interval. This default applies to all the health
- check policies in the cloud. You can override this value for an individual health check
- policy.</para>
- </section>
- </section>
- <section id="host-and-vm-enhancements">
- <title>Host and Virtual Machine Enhancements</title>
- <para>The following new features expand the ways you can use hosts and virtual
- machines.</para>
- <section id="vmware-drs">
- <title>VMware DRS Support</title>
- <para>The VMware vSphere Distributed Resources Scheduler (DRS) is supported.</para>
- </section>
- <section id="windows-8">
- <title>Windows 8 and Windows Server 2012 as VM Guest OS</title>
- <para>(Supported on XenServer, VMware, and KVM)</para>
- <para>Windows 8 and Windows Server 2012 can now be used as OS types on guest virtual
- machines. The OS would be made available the same as any other, by uploading an ISO or a
- template. The instructions for uploading ISOs and templates are given in the
- Administrator's Guide. </para>
- <note>
- <para><emphasis role="bold">Limitation:</emphasis> When used with VMware hosts, this
- feature works only for the following versions: vSphere ESXi 5.1 and ESXi 5.0 Patch
- 4.</para>
- </note>
- <para/>
- </section>
- <section id="change-account">
- <title>Change Account Ownership of Virtual Machines</title>
- <para>A root administrator can now change the ownership of any virtual machine from one
- account to any other account. A domain or sub-domain administrator can do the same for VMs
- within the domain from one account to any other account in the domain.</para>
- </section>
- <section id="dedicated-resources">
- <title>Private Pod, Cluster, or Host</title>
- <para>Dedicating pod, cluster or host to a specific domain/account means that the
- domain/account will have sole access to the dedicated pod, cluster or hosts such that
- scalability, security and manageability within a domain/account can be improved. The
- resources which belong to that tenant will be placed into that dedicated pod, cluster or
- host.</para>
- </section>
- <section id="resize-volume">
- <title>Resizing Volumes</title>
- <para>&PRODUCT; provides the ability to resize data disks; &PRODUCT; controls volume size by
- using disk offerings. This provides &PRODUCT; administrators with the flexibility to
- choose how much space they want to make available to the end users. Volumes within the
- disk offerings with the same storage tag can be resized. For example, if you only want to
- offer 10, 50, and 100 GB offerings, the allowed resize should stay within those limits.
- That implies if you define a 10 GB, a 50 GB and a 100 GB disk offerings, a user can
- upgrade from 10 GB to 50 GB, or 50 GB to 100 GB. If you create a custom-sized disk
- offering, then you have the option to resize the volume by specifying a new, larger size.
- Additionally, using the resizeVolume API, a data volume can be moved from a static disk
- offering to a custom disk offering with the size specified. This functionality allows
- those who might be billing by certain volume sizes or disk offerings to stick to that
- model, while providing the flexibility to migrate to whatever custom size necessary. This
- feature is supported on KVM, XenServer, and VMware hosts. However, shrinking volumes is
- not supported on VMware hosts</para>
- </section>
- <section id="volume-snapshot-enhancement">
- <title>VMware Volume Snapshot Improved Performance</title>
- <para>When you take a snapshot of a data volume on VMware, &PRODUCT; will now use a more
- efficient storage technique to improve performance.</para>
- <para>Previously, every snapshot was immediately exported from vCenter to a mounted NFS
- share and packaged into an OVA file format. This operation consumed time and resources.
- Starting from 4.2, the original file formats (e.g., VMDK) provided by vCenter will be
- retained. An OVA file will only be created as needed, on demand.</para>
- <para>The new process applies only to newly created snapshots after upgrade to &PRODUCT;
- 4.2. Snapshots that have already been taken and stored in OVA format will continue to
- exist in that format, and will continue to work as expected.</para>
- </section>
- <section id="storage-migration">
- <title>Storage Migration: XenMotion and vMotion</title>
- <para>(Supported on XenServer and VMware)</para>
- <para>Storage migration allows VMs to be moved from one host to another, where the VMs are
- not located on storage shared between the two hosts. It provides the option to live
- migrate a VM’s disks along with the VM itself. It is now possible to migrate a VM from one
- XenServer resource pool / VMware cluster to another, or to migrate a VM whose disks are on
- local storage, or even to migrate a VM’s disks from one storage repository to another, all
- while the VM is running.</para>
- </section>
- <section id="vmware-configure-linked-clones">
- <title>Configuring Usage of Linked Clones on VMware</title>
- <para>(For ESX hypervisor in conjunction with vCenter)</para>
- <para>In &PRODUCT; 4.2, the creation of VMs as full clones is allowed. In previous versions,
- only linked clones were possible.</para>
- <para>For a full description of clone types, refer to VMware documentation. In summary: A
- full clone is a copy of an existing virtual machine which, once created, does not depend
- in any way on the original virtual machine. A linked clone is also a copy of an existing
- virtual machine, but it has ongoing dependency on the original. A linked clone shares the
- virtual disk of the original VM, and retains access to all files that were present at the
- time the clone was created.</para>
- <para>A new global configuration setting has been added, vmware.create.full.clone. When the
- administrator sets this to true, end users can create guest VMs only as full clones. The
- default value is true for new installations. For customers upgrading from a previous
- version of &PRODUCT;, the default value of vmware.create.full.clone is false.</para>
- </section>
- <section id="host-deployment-rules">
- <title>VM Deployment Rules</title>
- <para>Rules can be set up to ensure that particular VMs are not placed on the same physical
- host. These "anti-affinity rules" can increase the reliability of applications by ensuring
- that the failure of a single host can not take down the entire group of VMs supporting a
- given application. See Affinity Groups in the &PRODUCT; 4.2 Administration Guide.</para>
- </section>
- <section id="cpu-ram-dynamic-scaling">
- <title>CPU and Memory Scaling for Running VMs</title>
- <para>(Supported on VMware and XenServer)</para>
- <para>You can now change the CPU and RAM values for a running virtual machine. In previous
- versions of &PRODUCT;, this could only be done on a stopped VM.</para>
- <para>It is not always possible to accurately predict the CPU and RAM requirements when you
- first deploy a VM. You might need to increase or decrease these resources at any time
- during the life of a VM. With the new ability to dynamically modify CPU and RAM levels,
- you can change these resources for a running VM without incurring any downtime.</para>
- <para>Dynamic CPU and RAM scaling can be used in the following cases:</para>
- <itemizedlist>
- <listitem>
- <para>New VMs that are created after the installation of &PRODUCT; 4.2. If you are
- upgrading from a previous version of &PRODUCT;, your existing VMs created with
- previous versions will not have the dynamic scaling capability.</para>
- </listitem>
- <listitem>
- <para>User VMs on hosts running VMware and XenServer.</para>
- </listitem>
- <listitem>
- <para>System VMs on VMware.</para>
- </listitem>
- <listitem>
- <para>VM Tools or XenServer Tools must be installed on the virtual machine.</para>
- </listitem>
- <listitem>
- <para>The new requested CPU and RAM values must be within the constraints allowed by the
- hypervisor and the VM operating system.</para>
- </listitem>
- </itemizedlist>
- <para>To configure this feature, use the following new global configuration
- variables:</para>
- <itemizedlist>
- <listitem>
- <para>enable.dynamic.scale.vm: Set to True to enable the feature. By default, the
- feature is turned off.</para>
- </listitem>
- <listitem>
- <para>scale.retry: How many times to attempt the scaling operation. Default = 2.</para>
- </listitem>
- </itemizedlist>
- </section>
- <section id="cpu-ram-overcommit">
- <title>CPU and Memory Over-Provisioning</title>
- <para>(Supported for XenServer, KVM, and VMware)</para>
- <para>In &PRODUCT; 4.2, CPU and memory (RAM) over-provisioning factors can be set for each
- cluster to change the number of VMs that can run on each host in the cluster. This helps
- optimize the use of resources. By increasing the over-provisioning ratio, more resource
- capacity will be used. If the ratio is set to 1, no over-provisioning is done.</para>
- <para>In previous releases, &PRODUCT; did not perform memory over-provisioning. It performed
- CPU over-provisioning based on a ratio configured by the administrator in the global
- configuration setting cpu.overprovisioning.factor. Starting in 4.2, the administrator can
- specify a memory over-provisioning ratio, and can specify both CPU and memory
- over-provisioning ratios on a per-cluster basis, rather than only on a global
- basis.</para>
- <para>In any given cloud, the optimum number of VMs for each host is affected by such things
- as the hypervisor, storage, and hardware configuration. These may be different for each
- cluster in the same cloud. A single global over-provisioning setting could not provide the
- best utilization for all the different clusters in the cloud. It had to be set for the
- lowest common denominator. The new per-cluster setting provides a finer granularity for
- better utilization of resources, no matter where the &PRODUCT; placement algorithm decides
- to place a VM.</para>
- </section>
- <section id="baremetal">
- <title>Kickstart Installation for Bare Metal Provisioning</title>
- <para>&PRODUCT; 4.2 supports the kick start installation method for RPM-based Linux
- operating systems on baremetal hosts in basic zones. Users can provision a baremetal host
- managed by &PRODUCT; as long as they have the kick start file and corresponding OS
- installation ISO ready.</para>
- <para>Tested on CentOS 5.5, CentOS 6.2, CentOS 6.3, Ubuntu 12.04.</para>
- <para>For more information, see the Baremetal Installation Guide.</para>
- </section>
- <section id="baremetal-ucs">
- <title>Enhanced Bare Metal Support on Cisco UCS</title>
- <para>You can now more easily provision new Cisco UCS server blades into &PRODUCT; for use
- as bare metal hosts. The goal is to enable easy expansion of the cloud by leveraging the
- programmability of the UCS converged infrastructure and &PRODUCT;’s knowledge of the cloud
- architecture and ability to orchestrate. With this new feature, &PRODUCT; can
- automatically understand the UCS environment, server profiles, etc. to make it easy to
- deploy a bare metal OS on a Cisco UCS.</para>
- </section>
- <section id="update-vm-image">
- <title>Changing a VM's Base Image</title>
- <para>Every VM is created from a base image, which is a template or ISO which has been
- created and stored in &PRODUCT;. Both cloud administrators and end users can create and
- modify templates, ISOs, and VMs.</para>
- <para>In &PRODUCT; 4.2, there is a new way to modify an existing VM. You can change an
- existing VM from one base image to another. For example, suppose there is a template based
- on a particular operating system, and the OS vendor releases a software patch. The
- administrator or user naturally wants to apply the patch and then make sure existing VMs
- start using it. Whether a software update is involved or not, it's also possible to simply
- switch a VM from its current template to any other desired template.</para>
- </section>
- <section id="reset-vm-reboot">
- <title>Reset VM on Reboot</title>
- <para>In &PRODUCT; 4.2, you can specify that you want to discard the root disk and create a
- new one whenever a given VM is rebooted. This is useful for secure environments that need
- a fresh start on every boot and for desktops that should not retain state. The IP address
- of the VM will not change due to this operation.</para>
- </section>
- <section id=
<TRUNCATED>
[47/50] [abbrv] release notes structure issue fixed,
links to known issues and fixed issues have been added
Posted by wi...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5410901a/docs/en-US/Release_Notes.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/Release_Notes.xml b/docs/en-US/Release_Notes.xml
index ce2a737..d1def44 100644
--- a/docs/en-US/Release_Notes.xml
+++ b/docs/en-US/Release_Notes.xml
@@ -57,1667 +57,982 @@ under the License.
</chapter>
<chapter id="version-4.2">
<title>What's New in 4.2.0</title>
- <section id="whats-new-in-4.2">
- <para>&PRODUCT; 4.2 includes the following new features.</para>
- <section id="workloads">
- <title>Features to Support Heterogeneous Workloads</title>
- <para>The following new features help &PRODUCT; 4.2 better support both legacy and cloud-era
- style zones.</para>
- <section id="regions">
- <title>Regions</title>
- <para>To increase reliability of the cloud, you can optionally group resources into
- geographic regions. A region is the largest available organizational unit within a cloud
- deployment. A region is made up of several availability zones, where each zone is
- equivalent to a datacenter. Each region is controlled by its own cluster of Management
- Servers, running in one of the zones. The zones in a region are typically located in
- close geographical proximity. Regions are a useful technique for providing fault
- tolerance and disaster recovery.</para>
- <para>By grouping zones into regions, the cloud can achieve higher availability and
- scalability. User accounts can span regions, so that users can deploy VMs in multiple,
- widely-dispersed regions. Even if one of the regions becomes unavailable, the services
- are still available to the end-user through VMs deployed in another region. And by
- grouping communities of zones under their own nearby Management Servers, the latency of
- communications within the cloud is reduced compared to managing widely-dispersed zones
- from a single central Management Server.</para>
- <para>Usage records can also be consolidated and tracked at the region level, creating
- reports or invoices for each geographic region.</para>
- </section>
- <section id="object-store">
- <title>Object Storage Plugin Architecture</title>
- <para>Artifacts such as templates, ISOs and snapshots are kept in storage which &PRODUCT;
- refers to as secondary storage. To improve scalability and performance, as when a number
- of hosts access secondary storage concurrently, object storage can be used for secondary
- storage. Object storage can also provide built-in high availability capability. When
- using object storage, access to secondary storage data can be made available across
- multiple zones in a region. This is a huge benefit, as it is no longer necessary to copy
- templates, snapshots etc. across zones as would be needed in an NFS-only
- environment.</para>
- <para>Object storage is provided through third-party software such as Amazon Simple
- Storage Service (S3) or any other object storage that supports the S3 interface. These
- third party object storages can be integrated with &PRODUCT; by writing plugin software
- that uses the object storage plugin capability introduced in &PRODUCT; 4.2. Several new
- pluggable service interfaces are available so that different storage providers can
- develop vendor-specific plugins based on the well-defined contracts that can be
- seamlessly managed by &PRODUCT;.</para>
- </section>
- <section id="zone-wide-primary-storage">
- <title>Zone-Wide Primary Storage</title>
- <para>(Supported on KVM and VMware)</para>
- <para>In &PRODUCT; 4.2, you can provision primary storage on a per-zone basis. Data
- volumes in the primary storage can be attached to any VM on any host in the zone.</para>
- <para>In previous &PRODUCT; versions, each cluster had its own primary storage. Data in
- the primary storage was directly available only to VMs within that cluster. If a VM in a
- different cluster needed some of the data, it must be copied from one cluster to
- another, using the zone's secondary storage as an intermediate step. This operation was
- unnecessarily time-consuming.</para>
- </section>
- <section id="vmware-datacenter">
- <title>VMware Datacenter Now Visible As a &PRODUCT; Zone</title>
- <para>In order to support zone-wide functions for VMware, changes have been made so that
- &PRODUCT; is now aware of VMware Datacenters and can map each Datacenter to a &PRODUCT;
- zone. Previously, &PRODUCT; was only aware of VMware Clusters, a smaller organizational
- unit than Datacenters. This implies that a single &PRODUCT; zone could possibly contain
- clusters from different VMware Datacenters. In order for zone-wide functions, such as
- zone-wide primary storage, to work for VMware hosts, &PRODUCT; has to make sure that a
- zone contains only a single VMware Datacenter. Therefore, when you are creating a new
- &PRODUCT; zone, you will now be able to select a VMware Datacenter for the zone. If you
- are provisioning multiple VMware Datacenters, each one will be set up as a single zone
- in &PRODUCT;. </para>
- <note>
- <para>If you are upgrading from a previous &PRODUCT; version, and your existing
- deployment contains a zone with clusters from multiple VMware Datacenters, that zone
- will not be forcibly migrated to the new model. It will continue to function as
- before. However, any new zone-wide operations, such as zone-wide primary storage, will
- not be available in that zone.</para>
- </note>
- <para/>
- </section>
+ <para>&PRODUCT; 4.2 includes the following new features.</para>
+ <section id="workloads">
+ <title>Features to Support Heterogeneous Workloads</title>
+ <para>The following new features help &PRODUCT; 4.2 better support both legacy and cloud-era
+ style zones.</para>
+ <section id="regions">
+ <title>Regions</title>
+ <para>To increase reliability of the cloud, you can optionally group resources into
+ geographic regions. A region is the largest available organizational unit within a cloud
+ deployment. A region is made up of several availability zones, where each zone is
+ equivalent to a datacenter. Each region is controlled by its own cluster of Management
+ Servers, running in one of the zones. The zones in a region are typically located in close
+ geographical proximity. Regions are a useful technique for providing fault tolerance and
+ disaster recovery.</para>
+ <para>By grouping zones into regions, the cloud can achieve higher availability and
+ scalability. User accounts can span regions, so that users can deploy VMs in multiple,
+ widely-dispersed regions. Even if one of the regions becomes unavailable, the services are
+ still available to the end-user through VMs deployed in another region. And by grouping
+ communities of zones under their own nearby Management Servers, the latency of
+ communications within the cloud is reduced compared to managing widely-dispersed zones
+ from a single central Management Server.</para>
+ <para>Usage records can also be consolidated and tracked at the region level, creating
+ reports or invoices for each geographic region.</para>
</section>
- <section id="third-party-plugin">
- <title>Third-Party UI Plugin Framework</title>
- <para>Using the new third-party plugin framework, you can write and install extensions to
- &PRODUCT;. The installed and enabled plugins will appear in the UI alongside the
- Citrix-provided features.</para>
- <para>The basic procedure for adding a UI plugin is explained in the Developer Guide. In
- summary, the plugin developer creates the plugin code itself (in Javascript), a thumbnail
- image, the plugin listing, and a CSS file. The &PRODUCT; administrator adds the folder
- containing the plugin code under the &PRODUCT; PLUGINS folder and adds the plugin name to
- a configuration file (plugins.js).</para>
- <para>The next time the user refreshes the UI in the browser, the plugin will appear under
- the Plugins button in the left navigation bar.</para>
+ <section id="object-store">
+ <title>Object Storage Plugin Architecture</title>
+ <para>Artifacts such as templates, ISOs and snapshots are kept in storage which &PRODUCT;
+ refers to as secondary storage. To improve scalability and performance, as when a number
+ of hosts access secondary storage concurrently, object storage can be used for secondary
+ storage. Object storage can also provide built-in high availability capability. When using
+ object storage, access to secondary storage data can be made available across multiple
+ zones in a region. This is a huge benefit, as it is no longer necessary to copy templates,
+ snapshots etc. across zones as would be needed in an NFS-only environment.</para>
+ <para>Object storage is provided through third-party software such as Amazon Simple Storage
+ Service (S3) or any other object storage that supports the S3 interface. These third party
+ object storages can be integrated with &PRODUCT; by writing plugin software that uses the
+ object storage plugin capability introduced in &PRODUCT; 4.2. Several new pluggable
+ service interfaces are available so that different storage providers can develop
+ vendor-specific plugins based on the well-defined contracts that can be seamlessly managed
+ by &PRODUCT;.</para>
</section>
- <section id="networking">
- <title>Networking Enhancements</title>
- <para>The following new features provide additional networking functionality in &PRODUCT;
- 4.2.</para>
- <section id="ipv6">
- <title>IPv6 (Technical Preview)</title>
- <para>&PRODUCT; 4.2 introduces initial support for IPv6. This feature is provided as a
- technical preview only. Full support is planned for a future release.</para>
- </section>
- <section id="portable-ip">
- <title>Portable IPs</title>
- <para>Portable IPs in &PRODUCT; are elastic IPs that can be transferred across
- geographically separated zones. As an administrator, you can provision a pool of
- portable IPs at region level and are available for user consumption. The users can
- acquire portable IPs if admin has provisioned portable public IPs at the region level
- they are part of. These IPs can be used for any service within an advanced zone. You can
- also use portable IPs for EIP service in Basic zones. Additionally, a portable IP can be
- transferred from one network to another network.</para>
- </section>
- <section id="ntier-apps">
- <title>N-Tier Applications</title>
- <para>In &PRODUCT; 3.0.6, a functionality was added to allow users to create a multi-tier
- application connected to a single instance of a Virtual Router that supports inter-VLAN
- routing. Such a multi-tier application is called a virtual private cloud (VPC). Users
- were also able to connect their multi-tier applications to a private Gateway or a
- Site-to-Site VPN tunnel and route certain traffic to those gateways. For &PRODUCT; 4.2,
- additional features are implemented to enhance VPC applications.</para>
- <itemizedlist>
- <listitem>
- <para><xref linkend="kvm-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="add-loadbalancer-rule-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="current-lb-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="across-tiers-lb"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="ns-support"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="configure-acl"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="acl-private-gateway"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="allow-acl"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="acl-deny"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="add-vm-tier-sharednw"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="add-gateway-vpc"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="sourcenat-private-gateway"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="eightvpn"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="static-route"/></para>
- </listitem>
- <listitem>
- <para><xref linkend="blacklist-route"/></para>
- </listitem>
- </itemizedlist>
- <section id="kvm-vpc"><title>Support for KVM</title>VPC is now supported on KVM
- hypervisors.</section>
- <section id="add-loadbalancer-rule-vpc">
- <title>Load Balancing Support for VPC</title>
- <para>In a VPC, you can configure two types of load balancing—external LB and
- internal LB. External LB is nothing but a LB rule created to redirect the traffic
- received at a public IP of the VPC virtual router. The traffic is load balanced within
- a tier based on your configuration. Citrix NetScaler and VPC virtual router are
- supported for external LB. When you use internal LB service, traffic received at a
- tier is load balanced across different VMs within that tier. For example, traffic
- reached at Web tier is redirected to another VM in that tier. External load balancing
- devices are not supported for internal LB. The service is provided by a internal LB VM
- configured on the target tier.</para>
- <section id="current-lb-vpc">
- <title>Load Balancing Within a Tier (External LB)</title>
- <para>A &PRODUCT; user or administrator may create load balancing rules that balance
- traffic received at a public IP to one or more VMs that belong to a network tier
- that provides load balancing service in a VPC. A user creates a rule, specifies an
- algorithm, and assigns the rule to a set of VMs within a tier.</para>
- </section>
- <section id="across-tiers-lb">
- <title>Load Balancing Across Tiers</title>
- <para>&PRODUCT; supports sharing workload across different tiers within your VPC.
- Assume that multiple tiers are set up in your environment, such as Web tier and
- Application tier. Traffic to each tier is balanced on the VPC virtual router on the
- public side. If you want the traffic coming from the Web tier to the Application
- tier to be balanced, use the internal load balancing feature offered by
- &PRODUCT;.</para>
- </section>
- <section id="ns-support">
- <title>Netscaler Support for VPC</title>
- <para>Citrix NetScaler is supported for external LB. Certified version for this
- feature is NetScaler 10.0 Build 74.4006.e.</para>
- </section>
- </section>
- <section id="configure-acl">
- <title>Enhanced Access Control List</title>
- <para>Network Access Control List (ACL) on the VPC virtual router is enhanced. The
- network ACLs can be created for the tiers only if the NetworkACL service is supported.
- In &PRODUCT; terminology, Network ACL is a group of Network ACL items. Network ACL
- items are nothing but numbered rules that are evaluated in order, starting with the
- lowest numbered rule. These rules determine whether traffic is allowed in or out of
- any tier associated with the network ACL. You need to add the Network ACL items to the
- Network ACL, then associate the Network ACL with a tier. Network ACL is associated
- with a VPC and can be assigned to multiple VPC tiers within a VPC. A Tier is
- associated with a Network ACL at all the times. Each tier can be associated with only
- one ACL. </para>
- <para>The default Network ACL is used when no ACL is associated. Default behavior is all
- incoming traffic to guest networks is blocked and all outgoing traffic from guest
- networks is allowed. Default network ACL cannot be removed or modified.</para>
- <section id="acl-private-gateway">
- <title>ACL on Private Gateway</title>
- <para>The traffic on the VPC private gateway is controlled by creating both ingress
- and egress network ACL rules. The ACLs contains both allow and deny rules. As per
- the rule, all the ingress traffic to the private gateway interface and all the
- egress traffic out from the private gateway interface are blocked. You can change
- this default behaviour while creating a private gateway.</para>
- </section>
- <section id="allow-acl">
- <title>Allow ACL on All Level 4 Protocols</title>
- <para>In addition to the existing protocol support for ICMP, TCP, UDP, support for All
- Level 4 protocols is added. The protocol numbers from 0 to 255 are supported.</para>
- </section>
- <section id="acl-deny">
- <title>Support for ACL Deny Rules</title>
- <para>In addition to the existing support for ACL Allow rules, support for ACL Deny
- rules has been added in &PRODUCT; 4.2. As part of this, two operations are
- supported: Number and Action. You can configure a rule, allow or deny, by using
- action. Use Number to add a rule number.</para>
- </section>
+ <section id="zone-wide-primary-storage">
+ <title>Zone-Wide Primary Storage</title>
+ <para>(Supported on KVM and VMware)</para>
+ <para>In &PRODUCT; 4.2, you can provision primary storage on a per-zone basis. Data volumes
+ in the primary storage can be attached to any VM on any host in the zone.</para>
+ <para>In previous &PRODUCT; versions, each cluster had its own primary storage. Data in the
+ primary storage was directly available only to VMs within that cluster. If a VM in a
+ different cluster needed some of the data, it must be copied from one cluster to another,
+ using the zone's secondary storage as an intermediate step. This operation was
+ unnecessarily time-consuming.</para>
+ </section>
+ <section id="vmware-datacenter">
+ <title>VMware Datacenter Now Visible As a &PRODUCT; Zone</title>
+ <para>In order to support zone-wide functions for VMware, changes have been made so that
+ &PRODUCT; is now aware of VMware Datacenters and can map each Datacenter to a &PRODUCT;
+ zone. Previously, &PRODUCT; was only aware of VMware Clusters, a smaller organizational
+ unit than Datacenters. This implies that a single &PRODUCT; zone could possibly contain
+ clusters from different VMware Datacenters. In order for zone-wide functions, such as
+ zone-wide primary storage, to work for VMware hosts, &PRODUCT; has to make sure that a
+ zone contains only a single VMware Datacenter. Therefore, when you are creating a new
+ &PRODUCT; zone, you will now be able to select a VMware Datacenter for the zone. If you
+ are provisioning multiple VMware Datacenters, each one will be set up as a single zone in
+ &PRODUCT;. </para>
+ <note>
+ <para>If you are upgrading from a previous &PRODUCT; version, and your existing deployment
+ contains a zone with clusters from multiple VMware Datacenters, that zone will not be
+ forcibly migrated to the new model. It will continue to function as before. However, any
+ new zone-wide operations, such as zone-wide primary storage, will not be available in
+ that zone.</para>
+ </note>
+ <para/>
+ </section>
+ </section>
+ <section id="third-party-plugin">
+ <title>Third-Party UI Plugin Framework</title>
+ <para>Using the new third-party plugin framework, you can write and install extensions to
+ &PRODUCT;. The installed and enabled plugins will appear in the UI.</para>
+ <para>The basic procedure for adding a UI plugin is explained in the Developer Guide. In
+ summary, the plugin developer creates the plugin code itself (in Javascript), a thumbnail
+ image, the plugin listing, and a CSS file. The &PRODUCT; administrator adds the folder
+ containing the plugin code under the &PRODUCT; PLUGINS folder and adds the plugin name to a
+ configuration file (plugins.js).</para>
+ <para>The next time the user refreshes the UI in the browser, the plugin will appear under the
+ Plugins button in the left navigation bar.</para>
+ </section>
+ <section id="networking">
+ <title>Networking Enhancements</title>
+ <para>The following new features provide additional networking functionality in &PRODUCT;
+ 4.2.</para>
+ <section id="ipv6">
+ <title>IPv6 </title>
+ <para>&PRODUCT; 4.2 introduces initial support for IPv6. This feature is provided as a
+ technical preview only. Full support is planned for a future release.</para>
+ </section>
+ <section id="portable-ip">
+ <title>Portable IPs</title>
+ <para>Portable IPs in &PRODUCT; are elastic IPs that can be transferred across
+ geographically separated zones. As an administrator, you can provision a pool of portable
+ IPs at region level and are available for user consumption. The users can acquire portable
+ IPs if admin has provisioned portable public IPs at the region level they are part of.
+ These IPs can be used for any service within an advanced zone. You can also use portable
+ IPs for EIP service in Basic zones. Additionally, a portable IP can be transferred from
+ one network to another network.</para>
+ </section>
+ <section id="ntier-apps">
+ <title>N-Tier Applications</title>
+ <para>In &PRODUCT; 3.0.6, a functionality was added to allow users to create a multi-tier
+ application connected to a single instance of a Virtual Router that supports inter-VLAN
+ routing. Such a multi-tier application is called a virtual private cloud (VPC). Users were
+ also able to connect their multi-tier applications to a private Gateway or a Site-to-Site
+ VPN tunnel and route certain traffic to those gateways. For &PRODUCT; 4.2, additional
+ features are implemented to enhance VPC applications.</para>
+ <itemizedlist>
+ <listitem>
+ <para><xref linkend="kvm-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="add-loadbalancer-rule-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="current-lb-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="across-tiers-lb"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="ns-support"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="configure-acl"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="acl-private-gateway"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="allow-acl"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="acl-deny"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="add-vm-tier-sharednw"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="add-gateway-vpc"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="sourcenat-private-gateway"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="eightvpn"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="static-route"/></para>
+ </listitem>
+ <listitem>
+ <para><xref linkend="blacklist-route"/></para>
+ </listitem>
+ </itemizedlist>
+ <section id="kvm-vpc"><title>Support for KVM</title><para>VPC is now supported on KVM
+ hypervisors.</para></section>
+ <section id="add-loadbalancer-rule-vpc">
+ <title>Load Balancing Support for VPC</title>
+ <para>In a VPC, you can configure two types of load balancing—external LB and
+ internal LB. External LB is nothing but a LB rule created to redirect the traffic
+ received at a public IP of the VPC virtual router. The traffic is load balanced within a
+ tier based on your configuration. Citrix NetScaler and VPC virtual router are supported
+ for external LB. When you use internal LB service, traffic received at a tier is load
+ balanced across different VMs within that tier. For example, traffic reached at Web tier
+ is redirected to another VM in that tier. External load balancing devices are not
+ supported for internal LB. The service is provided by a internal LB VM configured on the
+ target tier.</para>
+ <section id="current-lb-vpc">
+ <title>Load Balancing Within a Tier (External LB)</title>
+ <para>A &PRODUCT; user or administrator may create load balancing rules that balance
+ traffic received at a public IP to one or more VMs that belong to a network tier that
+ provides load balancing service in a VPC. A user creates a rule, specifies an
+ algorithm, and assigns the rule to a set of VMs within a tier.</para>
</section>
- <section id="add-vm-tier-sharednw">
- <title>Deploying VMs to a VPC Tier and Shared Networks</title>
- <para>&PRODUCT; allows you to deploy VMs on a VPC tier and one or more shared networks.
- With this feature, the VMs deployed in a multi-tier application can receive services
- offered by a service provider over the shared network. One example of such a service
- is monitoring service.</para>
+ <section id="across-tiers-lb">
+ <title>Load Balancing Across Tiers</title>
+ <para>&PRODUCT; supports sharing workload across different tiers within your VPC. Assume
+ that multiple tiers are set up in your environment, such as Web tier and Application
+ tier. Traffic to each tier is balanced on the VPC virtual router on the public side.
+ If you want the traffic coming from the Web tier to the Application tier to be
+ balanced, use the internal load balancing feature offered by &PRODUCT;.</para>
</section>
- <section id="add-gateway-vpc">
- <title>Adding a Private Gateway to a VPC</title>
- <para>A private gateway can be added by the root admin only. The VPC private network has
- 1:1 relationship with the NIC of the physical network. You can configure multiple
- private gateways to a single VPC. No gateways with duplicated VLAN and IP are allowed
- in the same data center.</para>
- <section id="sourcenat-private-gateway">
- <title>Source NAT on Private Gateway</title>
- <para>You might want to deploy multiple VPCs with the same super CIDR and guest tier
- CIDR. Therefore, multiple guest VMs from different VPCs can have the same IPs to
- reach a enterprise data center through the private gateway. In such cases, a NAT
- service need to be configured on the private gateway. If Source NAT is enabled, the
- guest VMs in VPC reaches the enterprise network via private gateway IP address by
- using the NAT service. </para>
- <para>The Source NAT service on a private gateway can be enabled while adding the
- private gateway. On deletion of a private gateway, source NAT rules specific to the
- private gateway are deleted.</para>
- </section>
- <section id="eightvpn">
- <title>VPN Gateways</title>
- <para>Support up to 8 VPN Gateways is added.</para>
- </section>
- <section id="static-route">
- <title>Creating a Static Route</title>
- <para>&PRODUCT; enables you to specify routing for the VPN connection you create. You
- can enter one or CIDR addresses to indicate which traffic is to be routed back to
- the gateway.</para>
- </section>
- <section id="blacklist-route">
- <title>Blacklisting Routes</title>
- <para>&PRODUCT; enables you to block a list of routes so that they are not assigned to
- any of the VPC private gateways. Specify the list of routes that you want to
- blacklist in the <code>blacklisted.routes</code> global parameter. Note that the
- parameter update affects only new static route creations. If you block an existing
- static route, it remains intact and continue functioning. You cannot add a static
- route if the route is blacklisted for the zone. </para>
- </section>
+ <section id="ns-support">
+ <title>Netscaler Support for VPC</title>
+ <para>Citrix NetScaler is supported for external LB. Certified version for this feature
+ is NetScaler 10.0 Build 74.4006.e.</para>
</section>
</section>
- <section id="vlan-assign-isolated-nw">
- <title>Assigning VLANs to Isolated Networks</title>
- <para>&PRODUCT; provides you the ability to control VLAN assignment to Isolated networks.
- You can assign a VLAN ID when a network is created, just the way it's done for Shared
- networks.</para>
- <para>The former behaviour also is supported — VLAN is randomly allocated to a
- network from the VNET range of the physical network when the network turns to
- Implemented state. The VLAN is released back to the VNET pool when the network shuts
- down as a part of the Network Garbage Collection. The VLAN can be re-used either by the
- same network when it is implemented again, or by any other network. On each subsequent
- implementation of a network, a new VLAN can be assigned.</para>
- <note>
- <para>You cannot change a VLAN once it's assigned to the network. The VLAN remains with
- the network for its entire life cycle.</para>
- </note>
- </section>
- <section id="persistent-network">
- <title>Persistent Networks</title>
- <para>&PRODUCT; 4.2 supports Persistent Networks. The network that you can provision
- without having to deploy any VMs on it is called a Persistent Network. A Persistent
- Network can be part of a VPC or a non-VPC environment. With the addition of this
- feature, you will have the ability to create a network in &PRODUCT; in which physical
- devices can be deployed without having to run any VMs. Additionally, you can deploy
- physical devices on that network. Another advantages is that you can create a VPC with a
- tier that consists only physical devices. For example, you might create a VPC for a
- three-tier application, deploy VMs for Web and Application tier, and use physical
- machines for the Database tier. Another use case is that if you are providing services
- by using physical hardware, you can define the network as persistent and therefore even
- if all its VMs are destroyed the services will not be discontinued.</para>
- </section>
- <section id="vnmc-cisco">
- <title>Cisco VNMC Support</title>
- <para>Cisco Virtual Network Management Center (VNMC) provides centralized multi-device and
- policy management for Cisco Network Virtual Services. When Cisco VNMC is integrated with
- ASA 1000v Cloud Firewall and Cisco Nexus 1000v dvSwitch in &PRODUCT; you will be able
- to: </para>
- <itemizedlist>
- <listitem>
- <para>Configure Cisco ASA 1000v Firewalls</para>
- </listitem>
- <listitem>
- <para>Create and apply security profiles that contain ACL policy sets for both ingress
- and egress traffic, and NAT policy sets</para>
- </listitem>
- </itemizedlist>
- <para>&PRODUCT; supports Cisco VNMC on Cisco Nexus 1000v dvSwich-enabled VMware
- hypervisors.</para>
- </section>
- <section id="vmware-vswitch">
- <title>VMware vNetwork Distributed vSwitch</title>
- <para>&PRODUCT; supports VMware vSphere Distributed Switch (VDS) for virtual network
- configuration in a VMware vSphere environment. Each vCenter server instance can support
- up to 128 VDSs and each VDS can manage up to 500 VMware hosts. &PRODUCT; supports
- configuring virtual networks in a deployment with a mix of Virtual Distributed Switch,
- Standard Virtual Switch and Nexus 1000v Virtual Switch. </para>
- </section>
- <section id="reserved-ip-addresses-non-csvms">
- <title>IP Reservation in Isolated Guest Networks</title>
- <para>In Isolated guest networks in &PRODUCT; 4.2, a part of the guest IP address space
- can be reserved for non-&PRODUCT; VMs or physical servers. To do so, you configure a
- range of Reserved IP addresses by specifying the CIDR when a guest network is in
- Implemented state. The advantage of having this feature is that if your customers wish
- to have non-&PRODUCT; controlled VMs or physical servers on the same network, they can
- use a part of the IP address space that is primarily provided to the guest network. When
- IP reservation is configured, the administrator can add additional VMs or physical
- servers that are not part of &PRODUCT; to the same network and assign them the Reserved
- IP addresses. &PRODUCT; guest VMs cannot acquire IPs from the Reserved IP Range.</para>
- </section>
- <section id="ip-vlan-tenant">
- <title>Dedicated Resources: Public IP Addresses and VLANs Per Account</title>
- <para>&PRODUCT; provides you the ability to reserve a set of public IP addresses and VLANs
- exclusively for an account. During zone creation, you can continue to define a set of
- VLANs and multiple public IP ranges. This feature extends the functionality to enable
- you to dedicate a fixed set of VLANs and guest IP addresses for a tenant.</para>
- <para>This feature provides you the following capabilities:</para>
- <itemizedlist>
- <listitem>
- <para>Reserve a VLAN range and public IP address range from an Advanced zone and
- assign it to an account</para>
- </listitem>
- <listitem>
- <para>Disassociate a VLAN and public IP address range from an account</para>
- </listitem>
- </itemizedlist>
- <note>
- <para>Ensure that you check whether the required range is available and conforms to
- account limits. The maximum IPs per account limit cannot be superseded.</para>
- </note>
- </section>
- <section id="egress-firewall">
- <title>Enhanced Juniper SRX Support for Egress Firewall Rules</title>
- <para>Egress firewall rules were previously supported on virtual routers, and now they are
- also supported on Juniper SRX external networking devices.</para>
- <para>Egress traffic originates from a private network to a public network, such as the
- Internet. By default, the egress traffic is blocked, so no outgoing traffic is allowed
- from a guest network to the Internet. However, you can control the egress traffic in an
- Advanced zone by creating egress firewall rules. When an egress firewall rule is
- applied, the traffic specific to the rule is allowed and the remaining traffic is
- blocked. When all the firewall rules are removed the default policy, Block, is
- applied.</para>
- <note>
- <para>Egress firewall rules are not supported on Shared networks. They are supported
- only on Isolated guest networks.</para>
- </note>
- </section>
- <section id="default-egress-policy">
- <title>Configuring the Default Egress Policy</title>
- <para>The default egress policy for Isolated guest network can be configured by using
- Network offering. Use the create network offering option to determine whether the
- default policy should be block or allow all the traffic to the public network from a
- guest network. Use this network offering to create the network. If no policy is
- specified, by default all the traffic is allowed from the guest network that you create
- by using this network offering.</para>
- <para>You have two options: Allow and Deny.</para>
- <para>If you select Allow for a network offering, by default egress traffic is allowed.
- However, when an egress rule is configured for a guest network, rules are applied to
- block the specified traffic and rest are allowed. If no egress rules are configured for
- the network, egress traffic is accepted. If you select Deny for a network offering, by
- default egress traffic for the guest network is blocked. However, when an egress rules
- is configured for a guest network, rules are applied to allow the specified traffic.
- While implementing a guest network, &PRODUCT; adds the firewall egress rule specific to
- the default egress policy for the guest network.</para>
- <para>This feature is supported only on virtual router and Juniper SRX.</para>
- </section>
- <section id="non-contiguous-vlan">
- <title>Non-Contiguous VLAN Ranges</title>
- <para>&PRODUCT; provides you with the flexibility to add non contiguous VLAN ranges to
- your network. The administrator can either update an existing VLAN range or add multiple
- non contiguous VLAN ranges while creating a zone. You can also use the
- UpdatephysicalNetwork API to extend the VLAN range.</para>
- </section>
- <section id="pvlan">
- <title>Isolation in Advanced Zone Using Private VLAN</title>
- <para>Isolation of guest traffic in shared networks can be achieved by using Private VLANs
- (PVLAN). PVLANs provide Layer 2 isolation between ports within the same VLAN. In a
- PVLAN-enabled shared network, a user VM cannot reach other user VM though they can reach
- the DHCP server and gateway, this would in turn allow users to control traffic within a
- network and help them deploy multiple applications without communication between
- application as well as prevent communication with other users’ VMs.</para>
- <itemizedlist>
- <listitem>
- <para>Isolate VMs in a shared networks by using Private VLANs.</para>
- </listitem>
- <listitem>
- <para>Supported on KVM, XenServer, and VMware hypervisors.</para>
- </listitem>
- <listitem>
- <para>PVLAN-enabled shared network can be a part of multiple networks of a guest VM.
- </para>
- </listitem>
- </itemizedlist>
- <para>For further reading:</para>
- <itemizedlist>
- <listitem>
- <para><ulink
- url="http://www.cisco.com/en/US/docs/switches/lan/catalyst3750/software/release/12.2_25_see/configuration/guide/swpvlan.html#wp1038379"
- >Understanding Private VLANs</ulink></para>
- </listitem>
- <listitem>
- <para><ulink url="http://tools.ietf.org/html/rfc5517">Cisco Systems' Private VLANs:
- Scalable Security in a Multi-Client Environment</ulink></para>
- </listitem>
- <listitem>
- <para><ulink url="http://kb.vmware.com">Private VLAN (PVLAN) on vNetwork Distributed
- Switch - Concept Overview (1010691)</ulink></para>
- </listitem>
- </itemizedlist>
- </section>
- <section id="multiple-ip-nic">
- <title>Configuring Multiple IP Addresses on a Single NIC</title>
- <para>(Supported on XenServer, KVM, and VMware hypervisors)</para>
- <para>&PRODUCT; now provides you the ability to associate multiple private IP addresses
- per guest VM NIC. This feature is supported on all the network
- configurations—Basic, Advanced, and VPC. Security Groups, Static NAT and Port
- forwarding services are supported on these additional IPs. In addition to the primary
- IP, you can assign additional IPs to the guest VM NIC. Up to 256 IP addresses are
- allowed per NIC.</para>
- <para>As always, you can specify an IP from the guest subnet; if not specified, an IP is
- automatically picked up from the guest VM subnet. You can view the IPs associated with
- for each guest VM NICs on the UI. You can apply NAT on these additional guest IPs by
- using firewall configuration in the &PRODUCT; UI. You must specify the NIC to which the
- IP should be associated.</para>
- </section>
- <section id="multiple-ip-range">
- <title>Adding Multiple IP Ranges</title>
- <para>(Supported on KVM, xenServer, and VMware hypervisors)</para>
- <para>&PRODUCT; 4.2 provides you with the flexibility to add guest IP ranges from
- different subnets in Basic zones and security groups-enabled Advanced zones. For
- security groups-enabled Advanced zones, it implies multiple subnets can be added to the
- same VLAN. With the addition of this feature, you will be able to add IP address ranges
- from the same subnet or from a different one when IP address are exhausted. This would
- in turn allows you to employ higher number of subnets and thus reduce the address
- management overhead.</para>
- <para>Ensure that you manually configure the gateway of the new subnet before adding the
- IP range. Note that &PRODUCT; supports only one gateway for a subnet; overlapping
- subnets are not currently supported.</para>
- <para>You can also delete IP ranges. This operation fails if an IP from the remove range
- is in use. If the remove range contains the IP address on which the DHCP server is
- running, &PRODUCT; acquires a new IP from the same subnet. If no IP is available in the
- subnet, the remove operation fails.</para>
- <note>
- <para>The feature can only be implemented on IPv4 addresses.</para>
- </note>
- </section>
- <section id="add-remove-network-vm">
- <title>Support for Multiple Networks in VMs</title>
- <para>(Supported on XenServer, VMware and KVM hypervisors)</para>
- <para>&PRODUCT; 4.2 provides you the ability to add and remove multiple networks to a VM.
- You can remove a network from a VM and add a new network. You can also change the
- default network of a VM. With this functionality, hybrid or traditional server loads can
- be accommodated with ease. </para>
- <para>For adding or removing a NIC to work on VMware, ensure that vm-tools are running on
- guest VMs.</para>
- </section>
- <section id="gslb">
- <title>Global Server Load Balancing</title>
- <para>&PRODUCT; 4.2 supports Global Server Load Balancing (GSLB) functionalities to
- provide business continuity by load balancing traffic to an instance on active zones
- only in case of zone failures . &PRODUCT; achieve this by extending its functionality of
- integrating with NetScaler Application Delivery Controller (ADC), which also provides
- various GSLB capabilities, such as disaster recovery and load balancing. The DNS
- redirection technique is used to achieve GSLB in &PRODUCT;. In order to support this
- functionality, region level services and service provider are introduced. A new service
- 'GSLB' is introduced as a region level service. The GSLB service provider is introduced
- that will provider the GSLB service. Currently, NetScaler is the supported GSLB provider
- in &PRODUCT;. GSLB functionality works in an Active-Active data center environment.
- </para>
+ <section id="configure-acl">
+ <title>Enhanced Access Control List</title>
+ <para>Network Access Control List (ACL) on the VPC virtual router is enhanced. The network
+ ACLs can be created for the tiers only if the NetworkACL service is supported. In
+ &PRODUCT; terminology, Network ACL is a group of Network ACL items. Network ACL items
+ are nothing but numbered rules that are evaluated in order, starting with the lowest
+ numbered rule. These rules determine whether traffic is allowed in or out of any tier
+ associated with the network ACL. You need to add the Network ACL items to the Network
+ ACL, then associate the Network ACL with a tier. Network ACL is associated with a VPC
+ and can be assigned to multiple VPC tiers within a VPC. A Tier is associated with a
+ Network ACL at all the times. Each tier can be associated with only one ACL.</para>
+ <para>The default Network ACL is used when no ACL is associated. Default behavior is all
+ incoming traffic to guest networks is blocked and all outgoing traffic from guest
+ networks is allowed. Default network ACL cannot be removed or modified.</para>
+ <section id="acl-private-gateway">
+ <title>ACL on Private Gateway</title>
+ <para>The traffic on the VPC private gateway is controlled by creating both ingress and
+ egress network ACL rules. The ACLs contains both allow and deny rules. As per the
+ rule, all the ingress traffic to the private gateway interface and all the egress
+ traffic out from the private gateway interface are blocked. You can change this
+ default behaviour while creating a private gateway.</para>
+ </section>
+ <section id="allow-acl">
+ <title>Allow ACL on All Level 4 Protocols</title>
+ <para>In addition to the existing protocol support for ICMP, TCP, UDP, support for All
+ Level 4 protocols is added. The protocol numbers from 0 to 255 are supported.</para>
+ </section>
+ <section id="acl-deny">
+ <title>Support for ACL Deny Rules</title>
+ <para>In addition to the existing support for ACL Allow rules, support for ACL Deny
+ rules has been added in &PRODUCT; 4.2. As part of this, two operations are supported:
+ Number and Action. You can configure a rule, allow or deny, by using action. Use
+ Number to add a rule number.</para>
+ </section>
</section>
- <section id="lb-on-shared-vlan">
- <title>Enhanced Load Balancing Services Using External Provider on Shared VLANs</title>
- <para>Network services like Firewall, Load Balancing, and NAT are now supported in shared
- networks created in an advanced zone. In effect, the following network services shall be
- made available to a VM in a shared network: Source NAT, Static NAT, Port Forwarding,
- Firewall and Load balancing. Subset of these service can be chosen while creating a
- network offering for shared networks. Services available in a shared network is defined
- by the network offering and the service chosen in the network offering. For example, if
- network offering for a shared network has source NAT service enabled, a public IP shall
- be provisioned and source NAT is configured on the firewall device to provide public
- access to the VMs on the shared network. Static NAT, Port Forwarding, Load Balancing,
- and Firewall services shall be available only on the acquired public IPs associated with
- a shared network.</para>
- <para>Additionally, Netscaler and Juniper SRX firewall device can be configured inline or
- side-by-side mode.</para>
+ <section id="add-vm-tier-sharednw">
+ <title>Deploying VMs to a VPC Tier and Shared Networks</title>
+ <para>&PRODUCT; allows you to deploy VMs on a VPC tier and one or more shared networks.
+ With this feature, the VMs deployed in a multi-tier application can receive services
+ offered by a service provider over the shared network. One example of such a service is
+ monitoring service.</para>
</section>
- <section id="health-check">
- <title>Health Checks for Load Balanced Instances</title>
- <note>
- <para>This feature is supported only on NetScaler version 10.0 and beyond.</para>
- </note>
- <para>(NetScaler load balancer only) A load balancer rule distributes requests among a
- pool of services (a service in this context means an application running on a virtual
- machine). When creating a load balancer rule, you can specify a health check which will
- ensure that the rule forwards requests only to services that are healthy (running and
- available). When a health check is in effect, the load balancer will stop forwarding
- requests to any resources that it has found to be unhealthy. If the resource later
- becomes available again, the periodic health check (periodicity is configurable) will
- discover it and the resource will once again be made available to the load
- balancer.</para>
- <para>To configure how often the health check is performed by default, use the global
- configuration setting healthcheck.update.interval. This default applies to all the
- health check policies in the cloud. You can override this value for an individual health
- check policy.</para>
+ <section id="add-gateway-vpc">
+ <title>Adding a Private Gateway to a VPC</title>
+ <para>A private gateway can be added by the root admin only. The VPC private network has
+ 1:1 relationship with the NIC of the physical network. You can configure multiple
+ private gateways to a single VPC. No gateways with duplicated VLAN and IP are allowed in
+ the same data center.</para>
+ <section id="sourcenat-private-gateway">
+ <title>Source NAT on Private Gateway</title>
+ <para>You might want to deploy multiple VPCs with the same super CIDR and guest tier
+ CIDR. Therefore, multiple guest VMs from different VPCs can have the same IPs to reach
+ a enterprise data center through the private gateway. In such cases, a NAT service
+ need to be configured on the private gateway. If Source NAT is enabled, the guest VMs
+ in VPC reaches the enterprise network via private gateway IP address by using the NAT
+ service. </para>
+ <para>The Source NAT service on a private gateway can be enabled while adding the
+ private gateway. On deletion of a private gateway, source NAT rules specific to the
+ private gateway are deleted.</para>
+ </section>
+ <section id="eightvpn">
+ <title>VPN Gateways</title>
+ <para>Support up to 8 VPN Gateways is added.</para>
+ </section>
+ <section id="static-route">
+ <title>Creating a Static Route</title>
+ <para>&PRODUCT; enables you to specify routing for the VPN connection you create. You
+ can enter one or CIDR addresses to indicate which traffic is to be routed back to the
+ gateway.</para>
+ </section>
+ <section id="blacklist-route">
+ <title>Blacklisting Routes</title>
+ <para>&PRODUCT; enables you to block a list of routes so that they are not assigned to
+ any of the VPC private gateways. Specify the list of routes that you want to blacklist
+ in the <code>blacklisted.routes</code> global parameter. Note that the parameter
+ update affects only new static route creations. If you block an existing static route,
+ it remains intact and continue functioning. You cannot add a static route if the route
+ is blacklisted for the zone. </para>
+ </section>
</section>
</section>
- <section id="host-and-vm-enhancements">
- <title>Host and Virtual Machine Enhancements</title>
- <para>The following new features expand the ways you can use hosts and virtual
- machines.</para>
- <section id="vmware-drs">
- <title>VMware DRS Support</title>
- <para>The VMware vSphere Distributed Resources Scheduler (DRS) is supported.</para>
- </section>
- <section id="windows-8">
- <title>Windows 8 and Windows Server 2012 as VM Guest OS</title>
- <para>(Supported on XenServer, VMware, and KVM)</para>
- <para>Windows 8 and Windows Server 2012 can now be used as OS types on guest virtual
- machines. The OS would be made available the same as any other, by uploading an ISO or a
- template. The instructions for uploading ISOs and templates are given in the
- Administrator's Guide. </para>
- <note>
- <para><emphasis role="bold">Limitation:</emphasis> When used with VMware hosts, this
- feature works only for the following versions: vSphere ESXi 5.1 and ESXi 5.0 Patch
- 4.</para>
- </note>
- <para/>
- </section>
- <section id="change-account">
- <title>Change Account Ownership of Virtual Machines</title>
- <para>A root administrator can now change the ownership of any virtual machine from one
- account to any other account. A domain or sub-domain administrator can do the same for
- VMs within the domain from one account to any other account in the domain.</para>
- </section>
- <section id="dedicated-resources">
- <title>Private Pod, Cluster, or Host</title>
- <para>Dedicating pod, cluster or host to a specific domain/account means that the
- domain/account will have sole access to the dedicated pod, cluster or hosts such that
- scalability, security and manageability within a domain/account can be improved. The
- resources which belong to that tenant will be placed into that dedicated pod, cluster or
- host.</para>
- </section>
- <section id="resize-volume">
- <title>Resizing Volumes</title>
- <para>&PRODUCT; provides the ability to resize data disks; &PRODUCT; controls volume size
- by using disk offerings. This provides &PRODUCT; administrators with the flexibility to
- choose how much space they want to make available to the end users. Volumes within the
- disk offerings with the same storage tag can be resized. For example, if you only want
- to offer 10, 50, and 100 GB offerings, the allowed resize should stay within those
- limits. That implies if you define a 10 GB, a 50 GB and a 100 GB disk offerings, a user
- can upgrade from 10 GB to 50 GB, or 50 GB to 100 GB. If you create a custom-sized disk
- offering, then you have the option to resize the volume by specifying a new, larger
- size. Additionally, using the resizeVolume API, a data volume can be moved from a static
- disk offering to a custom disk offering with the size specified. This functionality
- allows those who might be billing by certain volume sizes or disk offerings to stick to
- that model, while providing the flexibility to migrate to whatever custom size
- necessary. This feature is supported on KVM, XenServer, and VMware hosts. However,
- shrinking volumes is not supported on VMware hosts</para>
- </section>
- <section id="volume-snapshot-enhancement">
- <title>VMware Volume Snapshot Improved Performance</title>
- <para>When you take a snapshot of a data volume on VMware, &PRODUCT; will now use a more
- efficient storage technique to improve performance.</para>
- <para>Previously, every snapshot was immediately exported from vCenter to a mounted NFS
- share and packaged into an OVA file format. This operation consumed time and resources.
- Starting from 4.2, the original file formats (e.g., VMDK) provided by vCenter will be
- retained. An OVA file will only be created as needed, on demand.</para>
- <para>The new process applies only to newly created snapshots after upgrade to &PRODUCT;
- 4.2. Snapshots that have already been taken and stored in OVA format will continue to
- exist in that format, and will continue to work as expected.</para>
- </section>
- <section id="storage-migration">
- <title>Storage Migration: XenMotion and vMotion</title>
- <para>(Supported on XenServer and VMware)</para>
- <para>Storage migration allows VMs to be moved from one host to another, where the VMs are
- not located on storage shared between the two hosts. It provides the option to live
- migrate a VM’s disks along with the VM itself. It is now possible to migrate a VM from
- one XenServer resource pool / VMware cluster to another, or to migrate a VM whose disks
- are on local storage, or even to migrate a VM’s disks from one storage repository to
- another, all while the VM is running.</para>
- </section>
- <section id="vmware-configure-linked-clones">
- <title>Configuring Usage of Linked Clones on VMware</title>
- <para>(For ESX hypervisor in conjunction with vCenter)</para>
- <para>In &PRODUCT; 4.2, the creation of VMs as full clones is allowed. In previous
- versions, only linked clones were possible.</para>
- <para>For a full description of clone types, refer to VMware documentation. In summary: A
- full clone is a copy of an existing virtual machine which, once created, does not depend
- in any way on the original virtual machine. A linked clone is also a copy of an existing
- virtual machine, but it has ongoing dependency on the original. A linked clone shares
- the virtual disk of the original VM, and retains access to all files that were present
- at the time the clone was created.</para>
- <para>A new global configuration setting has been added, vmware.create.full.clone. When
- the administrator sets this to true, end users can create guest VMs only as full clones.
- The default value is true for new installations. For customers upgrading from a previous
- version of &PRODUCT;, the default value of vmware.create.full.clone is false.</para>
- </section>
- <section id="host-deployment-rules">
- <title>VM Deployment Rules</title>
- <para>Rules can be set up to ensure that particular VMs are not placed on the same
- physical host. These "anti-affinity rules" can increase the reliability of applications
- by ensuring that the failure of a single host can not take down the entire group of VMs
- supporting a given application. See Affinity Groups in the &PRODUCT; 4.2 Administration
- Guide.</para>
- </section>
- <section id="cpu-ram-dynamic-scaling">
- <title>CPU and Memory Scaling for Running VMs</title>
- <para>(Supported on VMware and XenServer)</para>
- <para>You can now change the CPU and RAM values for a running virtual machine. In previous
- versions of &PRODUCT;, this could only be done on a stopped VM.</para>
- <para>It is not always possible to accurately predict the CPU and RAM requirements when
- you first deploy a VM. You might need to increase or decrease these resources at any
- time during the life of a VM. With the new ability to dynamically modify CPU and RAM
- levels, you can change these resources for a running VM without incurring any
- downtime.</para>
- <para>Dynamic CPU and RAM scaling can be used in the following cases:</para>
- <itemizedlist>
- <listitem>
- <para>New VMs that are created after the installation of &PRODUCT; 4.2. If you are
- upgrading from a previous version of &PRODUCT;, your existing VMs created with
- previous versions will not have the dynamic scaling capability.</para>
- </listitem>
- <listitem>
- <para>User VMs on hosts running VMware and XenServer.</para>
- </listitem>
- <listitem>
- <para>System VMs on VMware.</para>
- </listitem>
- <listitem>
- <para>VM Tools or XenServer Tools must be installed on the virtual machine.</para>
- </listitem>
- <listitem>
- <para>The new requested CPU and RAM values must be within the constraints allowed by
- the hypervisor and the VM operating system.</para>
- </listitem>
- </itemizedlist>
- <para>To configure this feature, use the following new global configuration
- variables:</para>
- <itemizedlist>
- <listitem>
- <para>enable.dynamic.scale.vm: Set to True to enable the feature. By default, the
- feature is turned off.</para>
- </listitem>
- <listitem>
- <para>scale.retry: How many times to attempt the scaling operation. Default =
- 2.</para>
- </listitem>
- </itemizedlist>
- </section>
- <section id="cpu-ram-overcommit">
- <title>CPU and Memory Over-Provisioning</title>
- <para>(Supported for XenServer, KVM, and VMware)</para>
- <para>In &PRODUCT; 4.2, CPU and memory (RAM) over-provisioning factors can be set for each
- cluster to change the number of VMs that can run on each host in the cluster. This helps
- optimize the use of resources. By increasing the over-provisioning ratio, more resource
- capacity will be used. If the ratio is set to 1, no over-provisioning is done.</para>
- <para>In previous releases, &PRODUCT; did not perform memory over-provisioning. It
- performed CPU over-provisioning based on a ratio configured by the administrator in the
- global configuration setting cpu.overprovisioning.factor. Starting in 4.2, the
- administrator can specify a memory over-provisioning ratio, and can specify both CPU and
- memory over-provisioning ratios on a per-cluster basis, rather than only on a global
- basis.</para>
- <para>In any given cloud, the optimum number of VMs for each host is affected by such
- things as the hypervisor, storage, and hardware configuration. These may be different
- for each cluster in the same cloud. A single global over-provisioning setting could not
- provide the best utilization for all the different clusters in the cloud. It had to be
- set for the lowest common denominator. The new per-cluster setting provides a finer
- granularity for better utilization of resources, no matter where the &PRODUCT; placement
- algorithm decides to place a VM.</para>
- </section>
- <section id="baremetal">
- <title>Kickstart Installation for Bare Metal Provisioning</title>
- <para>&PRODUCT; 4.2 supports the kick start installation method for RPM-based Linux
- operating systems on baremetal hosts in basic zones. Users can provision a baremetal
- host managed by &PRODUCT; as long as they have the kick start file and corresponding OS
- installation ISO ready.</para>
- <para>Tested on CentOS 5.5, CentOS 6.2, CentOS 6.3, Ubuntu 12.04.</para>
- <para>For more information, see the Baremetal Installation Guide.</para>
- </section>
- <section id="baremetal-ucs">
- <title>Enhanced Bare Metal Support on Cisco UCS</title>
- <para>You can now more easily provision new Cisco UCS server blades into &PRODUCT; for use
- as bare metal hosts. The goal is to enable easy expansion of the cloud by leveraging the
- programmability of the UCS converged infrastructure and &PRODUCT;’s knowledge of the
- cloud architecture and ability to orchestrate. With this new feature, &PRODUCT; can
- automatically understand the UCS environment, server profiles, etc. to make it easy to
- deploy a bare metal OS on a Cisco UCS.</para>
- </section>
- <section id="update-vm-image">
- <title>Changing a VM's Base Image</title>
- <para>Every VM is created from a base image, which is a template or ISO which has been
- created and stored in &PRODUCT;. Both cloud administrators and end users can create and
- modify templates, ISOs, and VMs.</para>
- <para>In &PRODUCT; 4.2, there is a new way to modify an existing VM. You can change an
- existing VM from one base image to another. For example, suppose there is a template
- based on a particular operating system, and the OS vendor releases a software patch. The
- administrator or user naturally wants to apply the patch and then make sure existing VMs
- start using it. Whether a software update is involved or not, it's also possible to
- simply switch a VM from its current template to any other desired template.</para>
- </section>
- <section id="reset-vm-reboot">
- <title>Reset VM on Reboot</title>
- <para>In &PRODUCT; 4.2, you can specify that you want to discard the root disk and create
- a new one whenever a given VM is rebooted. This is useful for secure environments that
- need a fresh start on every boot and for desktops that should not retain state. The IP
- address of the VM will not change due to this operation.</para>
- </section>
- <section id="vm-snapshots">
- <title>Virtual Machine Snapshots for VMware</title>
- <para>(VMware hosts only) In addition to the existing &PRODUCT; ability to snapshot
- individual VM volumes, you can now take a VM snapshot to preserve all the VM's data
- volumes as well as (optionally) its CPU/memory state. This is useful for quick restore
- of a VM. For example, you can snapshot a VM, then make changes such as software
- upgrades. If anything goes wrong, simply restore the VM to its previous state using the
- previously saved VM snapshot. </para>
- <para>The snapshot is created using the VMware native snapshot facility. The VM snapshot
- includes not only the data volumes, but optionally also whether the VM is running or
- turned off (CPU state) and the memory contents. The snapshot is stored in &PRODUCT;'s
- primary storage.</para>
- <para>VM snapshots can have a parent/child relationship. Each successive snapshot of the
- same VM is the child of the snapshot that came before it. Each time you take an
- additional snapshot of the same VM, it saves only the differences between the current
- state of the VM and the state stored in the most recent previous snapshot. The previous
- snapshot becomes a parent, and the new snapshot is its child. It is possible to create a
- long chain of these parent/child snapshots, which amount to a "redo" record leading from
- the current state of the VM back to the original.</para>
- </section>
- <section id="vm-userdata">
- <title>Increased Userdata Size When Deploying a VM</title>
- <para>You can now specify up to 32KB of userdata when deploying a virtual machine through
- the &PRODUCT; UI or the deployVirtualMachine API call. </para>
- </section>
- <section id="vmware-cluster-limit">
- <title>Set VMware Cluster Size Limit Depending on VMware Version</title>
- <para>The maximum number of hosts in a vSphere cluster is determined by the VMware
- hypervisor software. For VMware versions 4.2, 4.1, 5.0, and 5.1, the limit is 32
- hosts.</para>
- <para>For &PRODUCT; 4.2, the global configuration setting vmware.percluster.host.max has
- been removed. The maximum number of hosts in a VMware cluster is now determined by the
- underlying hypervisor software.</para>
- <note>
- <para>Best Practice: It is advisable for VMware clusters in &PRODUCT; to be smaller than
- the VMware hypervisor's maximum size. A cluster size of up to 8 hosts has been found
- optimal for most real-world situations.</para>
- </note>
- </section>
- <section id="limit-accounts-domains-rn">
- <title>Limiting Resource Usage</title>
- <para>Previously in &PRODUCT;, resource usage limit was imposed based on the resource
- count, that is, restrict a user or domain on the basis of the number of VMs, volumes, or
- snapshots used. In &PRODUCT; 4.2, a new set of resource types has been added to the
- existing pool of resources (VMs, Volumes, and Snapshots) to support the customization
- model—need-basis usage, such as large VM or small VM. The new resource types are
- now broadly classified as CPU, RAM, Primary storage, and Secondary storage. &PRODUCT;
- 4.2 allows the root administrator to impose resource usage limit by the following
- resource types for Domain, Project and Accounts. </para>
- <itemizedlist>
- <listitem>
- <para>CPUs</para>
- </listitem>
- <listitem>
- <para>Memory (RAM)</para>
- </listitem>
- <listitem>
- <para>Primary Storage (Volumes)</para>
- </listitem>
- <listitem>
- <para>Secondary Storage (Snapshots, Templates, ISOs)</para>
- </listitem>
- </itemizedlist>
- </section>
+ <section id="vlan-assign-isolated-nw">
+ <title>Assigning VLANs to Isolated Networks</title>
+ <para>&PRODUCT; provides you the ability to control VLAN assignment to Isolated networks.
+ You can assign a VLAN ID when a network is created, just the way it's done for Shared
+ networks.</para>
+ <para>The former behaviour also is supported — VLAN is randomly allocated to a network
+ from the VNET range of the physical network when the network turns to Implemented state.
+ The VLAN is released back to the VNET pool when the network shuts down as a part of the
+ Network Garbage Collection. The VLAN can be re-used either by the same network when it is
+ implemented again, or by any other network. On each subsequent implementation of a
+ network, a new VLAN can be assigned.</para>
+ <note>
+ <para>You cannot change a VLAN once it's assigned to the network. The VLAN remains with
+ the network for its entire life cycle.</para>
+ </note>
</section>
- <section id="ops">
- <title>Monitoring, Maintenance, and Operations Enhancements</title>
- <!-- <section id="mixed-zone">
- <title>Basic and Advanced Zone Views</title>
- <para>A new dropdown in the UI provides the choice between Basic and Advanced views.
- Depending on which type of zone you are working with, you can change the view to show only
- &PRODUCT; features and choices that are relevant for that type of zone. This makes it
- easier to work with basic zones, since features that are not relevant will not be shown in
- the UI.</para>
- </section> -->
- <section id="events-pubsub">
- <title>Publish and Subscribe for Event Notification</title>
- <para>An event is essentially a significant or meaningful change in the state of both
- virtual and physical resources associated with a cloud environment. In &PRODUCT; an
- event could be a state change of virtual or psychical resources, an action performed by
- an user (action events), or policy based events (alerts). In &PRODUCT; 4.2, a new event
- notification framework has been added. This framework provides a means for the
- Management Server components to publish and subscribe to &PRODUCT; events. Event
- notification is achieved by implementing the concept of event bus abstraction in the
- Management Server. </para>
- <para>A new event for state change, resource state change, is introduced as part of Event
- notification framework. Every resource, such as user VM, volume, NIC, network, public
- IP, snapshot, and template, is associated with a state machine and generates events as
- part of the state change. That implies that a change in the state of a resource results
- in a state change event, and the event is published in the corresponding state machine
- on the event bus. All the &PRODUCT; events (alerts, action events, usage events) and the
- additional category of resource state change events, are published on to the events
- bus.</para>
- </section>
- <section id="delete-alerts">
- <title>Deleting and Archiving Events and Alerts</title>
- <para>In addition to viewing a list of events and alerts in the UI, the administrator can
- now delete and archive them. In order to support deleting and archiving alerts, the
- following global parameters have been added:</para>
- <itemizedlist>
- <listitem>
- <para><emphasis role="bold">alert.purge.delay</emphasis>: The alerts older than
- specified number of days are purged. Set the value to 0 to never purge alerts
- automatically.</para>
- </listitem>
- <listitem>
- <para><emphasis role="bold">alert.purge.interval</emphasis>: The interval in seconds
- to wait before running the alert purge thread. The default is 86400 seconds (one
- day).</para>
- </listitem>
- </itemizedlist>
- <note>
- <para>Archived alerts or events cannot be viewed in the UI, or by using the API. They
- are maintained in the database for auditing or compliance purposes.</para>
- </note>
- </section>
- <section id="global-parameters">
- <title>Increased Granularity for Configuration Parameters</title>
- <para>Some configuration parameters which were previously available only at the global
- level of the cloud can now be set for smaller components of the cloud, such as at the
- zone level. To set these parameters, look for the new Settings tab in the UI. You will
- find it on the detail page for an account, cluster, zone, or primary storage.</para>
- <para>The account level parameters are: <code>remote.access.vpn.client.iprange</code>,
- <code>allow.public.user.templates</code>, <code>use.system.public.ips</code>, and
- <code>use.system.guest.vlans</code></para>
- <para>The cluster level parameters are
- <code>cluster.storage.allocated.capacity.notificationthreshold</code>,
- <code>cluster.storage.capacity.notificationthreshold</code>,
- <code>cluster.cpu.allocated.capacity.notificationthreshold</code>,
- <code>cluster.memory.allocated.capacity.notificationthreshold</code>, <code>
- cluster.cpu.allocated.capacity.disablethreshold</code>,
- <code>cluster.memory.allocated.capacity.disablethreshold</code>,
- <code>cpu.overprovisioning.factor</code>, <code>mem.overprovisioning.factor</code>,
- <code>vmware.reserve.cpu</code>, and <code>vmware.reserve.mem</code>.</para>
- <para>The zone level parameters are
- <code>pool.storage.allocated.capacity.disablethreshold</code>,
- <code>pool.storage.capacity.disablethreshold</code>,
- <code>storage.overprovisioning.factor</code>, <code>network.throttling.rate</code>,
- <code>guest.domain.suffix</code>, <code>router.template.xen</code>,
- <code>router.template.kvm</code>, <code>router.template.vmware</code>,
- <code>router.template.hyperv</code>, <code>router.template.lx</code>c,
- <code>enable.dynamic.scale.vm</code>, <code>use.external.dns</code>, and
- <code>blacklisted.routes</code>.</para>
- </section>
- <section id="api-request-throttling">
- <title>API Request Throttling</title>
- <para>In &PRODUCT; 4.2, you can limit the rate at which API requests can be placed for
- each account. This is useful to avoid malicious attacks on the Management Server,
- prevent performance degradation, and provide fairness to all accounts.</para>
- <para>If the number of API calls exceeds the threshold, an error message is returned for
- any additional API calls. The caller will have to retry these API calls at another
- time.</para>
- <para>To control the API request throttling, use the following new global configuration
- settings:</para>
- <itemizedlist>
- <listitem>
- <para>api.throttling.enabled - Enable/Disable API throttling. By default, this setting
- is false, so API throttling is not enabled.</para>
- </listitem>
- <listitem>
- <para>api.throttling.interval (in seconds) - Time interval during which the number of
- API requests is to be counted. When the interval has passed, the API count is reset
- to 0.</para>
- </listitem>
- <listitem>
- <para>api.throttling.max - Maximum number of APIs that can be placed within the
- api.throttling.interval period.</para>
- </listitem>
- <listitem>
- <para>api.throttling.cachesize - Cache size for storing API counters. Use a value
- higher than the total number of accounts managed by the cloud. One cache entry is
- needed for each account, to store the running API total for that account within the
- current time window.</para>
- </listitem>
- </itemizedlist>
- </section>
- <section id="external-alert-managers">
- <title>Sending Alerts to External SNMP and Syslog Managers</title>
- <para>In addition to showing administrator alerts on the Dashboard in the &PRODUCT; UI and
- sending them in email, &PRODUCT; now can also send the same alerts to external SNMP or
- Syslog management software. This is useful if you prefer to use an SNMP or Syslog
- manager to monitor your cloud.</para>
- <para>The supported protocol is SNMP version 2.</para>
- </section>
- <section id="default-pwd-engine">
- <title>Changing the Default Password Encryption</title>
- <para>Passwords are encoded when creating or updating users. The new default preferred
- encoder, replacing MD5, is SHA256. It is more secure than MD5 hashing. If you take no
- action to customize password encryption and authentication, SHA256 Salt will be
- used.</para>
- <para>If you prefer a different authentication mechanism, &PRODUCT; 4.2 provides a way for
- you to determine the default encoding and authentication mechanism for admin and user
- logins. Two new configurable lists have been introduced: userPasswordEncoders and
- userAuthenticators. userPasswordEncoders allow you to configure the order of preference
- for encoding passwords, and userAuthenticator allows you to configure the order in which
- authentication schemes are invoked to validate user passwords.</para>
- <para>The plain text user authenticator has been modified not to convert supplied
- passwords to their md5 sums before checking them with the database entries. It performs
- a simple string comparison between retrieved and supplied login passwords instead of
- comparing the retrieved md5 hash of the stored password against the supplied md5 hash of
- the password, because clients no longer hash the password.</para>
- </section>
- <section id="cloud-bugtool">
- <title>Log Collection Utility cloud-bugtool</title>
- <para>&PRODUCT; provides a command-line utility called cloud-bugtool to make it easier to
- collect the logs and other diagnostic data required for troubleshooting. This is
- especially useful when interacting with Citrix Technical Support.</para>
- <para>You can use cloud-bugtool to collect the following:</para>
- <itemizedlist>
- <listitem>
- <para>Basic system and environment information and network configuration including IP
- addresses, routing, and name resolver settings </para>
- </listitem>
- <listitem>
- <para>Information about running processes</para>
- </listitem>
- <listitem>
- <para>Management Server logs</para>
- </listitem>
- <listitem>
- <para>System logs in /var/log/</para>
- </listitem>
- <listitem>
- <para>Dump of the cloud database</para>
- </listitem>
- </itemizedlist>
- <warning>
- <para>cloud-bugtool collects information which might be considered sensitive and
- confidential. Using the <code>--nodb</code> option to avoid the cloud database can
- reduce this concern, though it is not guaranteed to exclude all sensitive data.</para>
- </warning>
- <para/>
- </section>
- <section id="rbd-primary-storage">
- <title>Snaphotting, Backups, Cloning and System VMs for RBD Primary Storage</title>
- <note>
- <para>These new RBD features require at least librbd 0.61.7 (Cuttlefish) and libvirt
- 0.9.14 on the KVM hypervisors.</para>
- </note>
- <para>This release of &PRODUCT; will leverage the features of RBD format 2. This allows
- snapshotting and backing up those snapshots.</para>
- <para>Backups of snapshots to Secondary Storage are full copies of the RBD snapshot, they
- are not RBD diffs. This because when restoring a backup of a snapshot it is not
- mandatory that this backup is deployed on RBD again, it could also be a NFS Primary
- Storage.</para>
- <para>Another key feature of RBD format 2 is cloning. With this release templates will be
- copied to Primary Storage once and by using the cloning mechanism new disks will be
- cloned from this parent template. This saves space and decreases deployment time for
- instances dramatically.</para>
- <para>Before this release, a NFS Primary Storage was still required for running the System
- VMs from. The reason was a so called 'patch disk' that was generated by the hypervisor
- which contained metadata for the System VM. The scripts generating this disk didn't
- support RBD and thus System VMs had to be deployed from NFS. With 4.2 instead of the
- patch disk a VirtIO serial console is used to pass meta information to System VMs. This
- enabled the deployment of System VMs on RBD Primary Storage.</para>
- </section>
+ <section id="persistent-network">
+ <title>Persistent Networks</title>
+ <para>&PRODUCT; 4.2 supports Persistent Networks. The network that you can provision without
+ having to deploy any VMs on it is called a Persistent Network. A Persistent Network can be
+ part of a VPC or a non-VPC environment. With the addition of this feature, you will have
+ the ability to create a network in &PRODUCT; in which physical devices can be deployed
+ without having to run any VMs. Additionally, you can deploy physical devices on that
+ network. Another advantages is that you can create a VPC with a tier that consists only
+ physical devices. For example, you might create a VPC for a three-tier application, deploy
+ VMs for Web and Application tier, and use physical machines for the Database tier. Another
+ use case is that if you are providing services by using physical hardware, you can define
+ the network as persistent and therefore even if all its VMs are destroyed the services
+ will not be discontinued.</para>
</section>
- </section>
- <section id="issues-fixed-4.2">
- <title>Issues Fixed in 4.2.0</title>
- <para>Apache CloudStack uses <ulink url="https://issues.apache.org/jira/browse/CLOUDSTACK"
- >Jira</ulink> to track its issues. All new features and bugs for 4.2.0 have been tracked
- in Jira, and have a standard naming convention of "CLOUDSTACK-NNNN" where "NN
<TRUNCATED>
[38/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Automation: Resource Limits - memory limits test cases
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f9467470
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f9467470
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f9467470
Branch: refs/heads/kvm-vnc-listen
Commit: f94674709191224f2e6101e1c475a522d325da26
Parents: 3f42601
Author: Gaurav Aradhye <ga...@clogeny.com>
Authored: Wed Aug 28 23:40:22 2013 -0400
Committer: sailajam <sa...@citrix.com>
Committed: Fri Sep 13 15:34:12 2013 +0530
----------------------------------------------------------------------
.../memory_limits/test_domain_limits.py | 761 ++++++++++++++++++
.../memory_limits/test_maximum_limits.py | 352 +++++++++
.../memory_limits/test_memory_limits.py | 764 +++++++++++++++++++
.../memory_limits/test_project_limits.py | 350 +++++++++
4 files changed, 2227 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f9467470/test/integration/component/memory_limits/test_domain_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/memory_limits/test_domain_limits.py b/test/integration/component/memory_limits/test_domain_limits.py
new file mode 100644
index 0000000..479ec0b
--- /dev/null
+++ b/test/integration/component/memory_limits/test_domain_limits.py
@@ -0,0 +1,761 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+""" P1 tests for memory resource limits
+"""
+# Import Local Modules
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import cloudstackTestCase, unittest
+from marvin.integration.lib.base import (
+ Account,
+ ServiceOffering,
+ VirtualMachine,
+ Resources,
+ Domain
+ )
+from marvin.integration.lib.common import (get_domain,
+ get_zone,
+ get_template,
+ cleanup_resources,
+ wait_for_cleanup,
+ find_suitable_host,
+ get_resource_type
+ )
+
+class Services:
+ """Test memory resource limit services
+ """
+
+ def __init__(self):
+ self.services = {
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "resource",
+ # Random characters are appended for unique
+ # username
+ "password": "password",
+ },
+ "service_offering": {
+ "name": "Tiny Instance",
+ "displaytext": "Tiny Instance",
+ "cpunumber": 1,
+ "cpuspeed": 100, # in MHz
+ "memory": 5120, # In MBs
+ },
+ "virtual_machine": {
+ "displayname": "TestVM",
+ "username": "root",
+ "password": "password",
+ "ssh_port": 22,
+ "hypervisor": 'KVM',
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": 'TCP',
+ },
+ "network": {
+ "name": "Test Network",
+ "displaytext": "Test Network",
+ "netmask": '255.255.255.0'
+ },
+ "project": {
+ "name": "Project",
+ "displaytext": "Test project",
+ },
+ "domain": {
+ "name": "Domain",
+ },
+ "ostype": 'CentOS 5.3 (64-bit)',
+ "sleep": 60,
+ "timeout": 10,
+ "mode": 'advanced',
+ # Networking mode: Advanced, Basic
+ }
+
+class TestDomainMemoryLimits(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestDomainMemoryLimits,
+ cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.services["mode"] = cls.zone.networktype
+
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+
+ cls._cleanup = [cls.service_offering, ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+
+ self.cleanup = []
+ return
+
+ def tearDown(self):
+ try:
+ # Clean up, terminate the created instance, volumes and snapshots
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def createInstance(self, service_off, networks=None, api_client=None):
+ """Creates an instance in account"""
+ self.debug("Deploying an instance in account: %s" %
+ self.account.name)
+
+ if api_client is None:
+ api_client = self.apiclient
+ try:
+ vm = VirtualMachine.create(
+ api_client,
+ self.services["virtual_machine"],
+ templateid=self.template.id,
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ networkids=networks,
+ serviceofferingid=service_off.id)
+ vms = VirtualMachine.list(api_client, id=vm.id, listall=True)
+ self.assertIsInstance(vms,
+ list,
+ "List VMs should return a valid response")
+ self.assertEqual(vms[0].state, "Running",
+ "Vm state should be running after deployment")
+ return vm
+ except Exception as e:
+ self.fail("Failed to deploy an instance: %s" % e)
+
+ def setupAccounts(self):
+
+ self.debug("Creating a sub-domain under: %s" % self.domain.name)
+ self.child_domain_1 = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.domain.id)
+ self.child_do_admin_1 = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.child_domain_1.id
+ )
+ # Cleanup the resources created at end of test
+ self.cleanup.append(self.child_do_admin_1)
+ self.cleanup.append(self.child_domain_1)
+
+ Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=15360,
+ account=self.child_do_admin_1.name,
+ domainid=self.child_do_admin_1.domainid)
+
+ self.child_domain_2 = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.domain.id)
+
+ self.child_do_admin_2 = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.child_domain_2.id)
+
+ # Cleanup the resources created at end of test
+ self.cleanup.append(self.child_do_admin_2)
+ self.cleanup.append(self.child_domain_2)
+
+ Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=15360,
+ account=self.child_do_admin_2.name,
+ domainid=self.child_do_admin_2.domainid)
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_01_change_service_offering(self):
+ """Test Deploy VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM & Deploy VM in the created domain
+ # 2. List Resource count for the root admin Memory usage
+ # 3. Upgrade and downgrade service offering
+ # 4. Resource count should list properly for the domain
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = { self.domain: self.admin,
+ self.child_domain: self.child_do_admin
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ vm = self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ self.debug("Stopping instance: %s" % vm.name)
+ try:
+ vm.stop(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to stop instance: %s" % e)
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_stop = account_list[0].memorytotal
+
+ self.asserEqual(resource_count_after_stop, expected_resource_count,
+ "Resource count should be same after stopping the instance")
+
+ self.debug("Creating service offering with 7 GB RAM")
+ self.services["service_offering"]["memory"] = 7168
+ self.service_offering_7gb = ServiceOffering.create(
+ self.apiclient,
+ self.services["service_offering"]
+ )
+ # Adding to cleanup list after execution
+ self.cleanup.append(self.service_offering_7gb)
+
+ self.debug(
+ "Upgrade service offering of instance %s from %s to %s" %
+ (vm.name,
+ self.service_offering.name,
+ self.service_offering_7gb.name))
+
+ try:
+ vm.change_service_offering(self.apiclient,
+ serviceOfferingId=self.service_offering_7gb.id)
+ except Exception as e:
+ self.fail("Failed to change service offering of vm %s - %s" %
+ (vm.name, e))
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_upgrade = account_list[0].memorytotal
+
+ self.debug(resource_count_after_upgrade)
+
+ self.assertTrue(resource_count_after_upgrade > resource_count_after_stop,
+ "Resource count should be more than before, after upgrading service offering")
+
+ self.debug(
+ "Down grade service offering of instance %s from %s to %s" %
+ (vm.name,
+ self.service_offering_7gb.name,
+ self.service_offering.name))
+
+ try:
+ vm.change_service_offering(self.apiclient,
+ serviceOfferingId=self.service_offering.id)
+ except Exception as e:
+ self.fail("Failed to change service offering of vm %s - %s" %
+ (vm.name, e))
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_downgrade = account_list[0].memorytotal
+
+ self.assertTrue(resource_count_after_downgrade < resource_count_after_upgrade,
+ "Resource count should be less than before, after downgrading service offering")
+
+ self.debug("Starting instance: %s" % vm.name)
+ try:
+ vm.start(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to start instance: %s" % e)
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_start = account_list[0].memorytotal
+
+ self.assertTrue(resource_count_after_start == resource_count_after_downgrade,
+ "Resource count should be same after starting the instance")
+
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_02_migrate_vm(self):
+ """Test Deploy VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM & Deploy VM in the created domain
+ # 2. List Resource count for the root admin Memory usage
+ # 3. Migrate vm to another host, resource count should list properly.
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = { self.domain: self.admin,
+ self.child_domain: self.child_do_admin
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ vm = self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ host = find_suitable_host(self.apiclient, vm)
+ self.debug("Migrating instance: %s to host: %s" %
+ (vm.name, host.name))
+ try:
+ vm.migrate(self.apiclient, host.id)
+ except Exception as e:
+ self.fail("Failed to migrate instance: %s" % e)
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_migrate = account_list[0].memorytotal
+
+ self.assertTrue(resource_count_after_migrate == resource_count,
+ "Resource count should be same after migrating the instance")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_03_delete_vm(self):
+ """Test Deploy VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM & Deploy VM in the created domain
+ # 2. List Resource count for the root admin Memory usage
+ # 3. Delete vm, resource count should list as 0 after delete operation.
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = { self.domain: self.admin,
+ self.child_domain: self.child_do_admin
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ vm = self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ self.debug("Destroying instance: %s" % vm.name)
+ try:
+ vm.delete(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to delete instance: %s" % e)
+
+ # Wait for expunge interval to cleanup Memory
+ wait_for_cleanup(self.apiclient, ["expunge.delay", "expunge.interval"])
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_delete = account_list[0].memorytotal
+ self.assertEqual(resource_count_after_delete, 0 , "Resource count for %s should be 0" % get_resource_type(resource_id=9))#RAM
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_04_deploy_multiple_vm(self):
+ """Test Deploy multiple VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM
+ # 2. Deploy multiple VMs with this service offering
+ # 3. List Resource count for the root admin Memory usage
+ # 4. Memory usage should list properly
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = { self.domain: self.admin,
+ self.child_domain: self.child_do_admin
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ vm_1 = self.createInstance(service_off=self.service_offering, api_client=api_client)
+ vm_2 = self.createInstance(service_off=self.service_offering, api_client=api_client)
+ vm_3 = self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ self.debug("Deploying instance - Memory capacity is fully utilized")
+ with self.assertRaises(Exception):
+ self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"]) * 3 #Total 3 VMs
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ vm_2.delete(self.apiclient)
+ vm_3.delete(self.apiclient)
+ return
+
+
+class TestMultipleChildDomainsMemory(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestMultipleChildDomainsMemory,
+ cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.services["mode"] = cls.zone.networktype
+
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+ cls._cleanup = []
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.cleanup = []
+ return
+
+ def tearDown(self):
+ try:
+ # Clean up, terminate the created instance, volumes and snapshots
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def createInstance(self, account, service_off, networks=None, api_client=None):
+ """Creates an instance in account"""
+ self.debug("Deploying an instance in account: %s" %
+ account.name)
+
+ if api_client is None:
+ api_client = self.apiclient
+
+ try:
+ vm = VirtualMachine.create(
+ api_client,
+ self.services["virtual_machine"],
+ templateid=self.template.id,
+ accountid=account.name,
+ domainid=account.domainid,
+ networkids=networks,
+ serviceofferingid=service_off.id)
+ vms = VirtualMachine.list(api_client, id=vm.id, listall=True)
+ self.assertIsInstance(vms,
+ list,
+ "List VMs should return a valid response")
+ self.assertEqual(vms[0].state, "Running",
+ "Vm state should be running after deployment")
+ return vm
+ except Exception as e:
+ self.fail("Failed to deploy an instance: %s" % e)
+
+ def setupAccounts(self):
+
+ self.debug("Creating a domain under: %s" % self.domain.name)
+ self.parent_domain = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.domain.id)
+ self.parentd_admin = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.domain.id
+ )
+
+ self.debug("Updating the Memory resource count for domain: %s" %
+ self.domain.name)
+ Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=10240,
+ account=self.parentd_admin.name,
+ domainid=self.parentd_admin.domainid)
+ self.debug("Creating a sub-domain under: %s" % self.parent_domain.name)
+ self.cdomain_1 = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.parent_domain.id)
+
+ self.debug("Creating a sub-domain under: %s" % self.parent_domain.name)
+ self.cdomain_2 = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.parent_domain.id)
+
+ self.cadmin_1 = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.cdomain_1.id
+ )
+
+ self.debug("Updating the Memory resource count for domain: %s" %
+ self.cdomain_1.name)
+ Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=5120,
+ domainid=self.cadmin_1.domainid)
+
+ self.debug("Updating the Memory resource count for account: %s" %
+ self.cadmin_1.name)
+ Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=2148,
+ account=self.cadmin_1.name,
+ domainid=self.cadmin_1.domainid)
+
+ self.cadmin_2 = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.cdomain_2.id
+ )
+
+ self.debug("Updating the Memory resource count for domain: %s" %
+ self.cdomain_2.name)
+ Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=5120,
+ domainid=self.cadmin_2.domainid)
+
+ self.debug("Updating the Memory resource count for domain: %s" %
+ self.cadmin_2.name)
+ Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=2148,
+ account=self.cadmin_2.name,
+ domainid=self.cadmin_2.domainid)
+
+ # Cleanup the resources created at end of test
+ self.cleanup.append(self.cadmin_1)
+ self.cleanup.append(self.cadmin_2)
+ self.cleanup.append(self.cdomain_1)
+ self.cleanup.append(self.cdomain_2)
+ self.cleanup.append(self.parentd_admin)
+ self.cleanup.append(self.parent_domain)
+
+ users = {
+ self.parent_domain: self.parentd_admin,
+ self.cdomain_1: self.cadmin_1,
+ self.cdomain_2: self.cadmin_2
+ }
+ return users
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_01_multiple_child_domains(self):
+ """Test memory limits with multiple child domains"""
+
+ # Validate the following
+ # 1. Create Domain1 with 10 GB RAM and 2 child domains with 5 GB
+ # each.Assign 2 GB for Domain1 admin1 & Domain1 User1 .Assign 2
+ # GB for Domain2 admin1 & Domain2 User1
+ # 2. Deploy VM's by Domain1 admin1/user1/ Domain2 user1/Admin1 account
+ # and verify the resource updates
+ # 3. Deploy VM by admin account after reaching max parent domain limit
+ # 4. Deploy VM with child account after reaching max child domain limit
+ # 5. Delete user account and verify the resource updates
+ # 6. Destroy user/admin account VM's and verify the child & Parent
+ # domain resource updates
+
+ self.debug("Creating service offering with 2 GB RAM")
+ self.services["service_offering"]["memory"] = 2048
+ self.service_offering = ServiceOffering.create(
+ self.apiclient,
+ self.services["service_offering"]
+ )
+ # Adding to cleanup list after execution
+ self.cleanup.append(self.service_offering)
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+
+ api_client_cadmin_1 = self.testClient.createUserApiClient(
+ UserName=self.cadmin_1.name,
+ DomainName=self.cadmin_1.domain)
+
+ api_client_cadmin_2 = self.testClient.createUserApiClient(
+ UserName=self.cadmin_2.name,
+ DomainName=self.cadmin_2.domain)
+
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+ vm_1 = self.createInstance(account=self.cadmin_1,
+ service_off=self.service_offering, api_client=api_client_cadmin_1)
+
+ vm_2 = self.createInstance(account=self.cadmin_2,
+ service_off=self.service_offering, api_client=api_client_cadmin_2)
+
+ account_list = Account.list(self.apiclient, id=self.cadmin_1.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_cadmin_1 = account_list[0].memorytotal
+ self.debug(resource_count_cadmin_1)
+
+ account_list = Account.list(self.apiclient, id=self.cadmin_2.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_cadmin_2 = account_list[0].memorytotal
+ self.debug(resource_count_cadmin_2)
+
+ self.debug(
+ "Creating instance when Memory limit is fully used in parent domain")
+ with self.assertRaises(Exception):
+ self.createInstance(account=self.cadmin_1,
+ service_off=self.service_offering, api_client=api_client_cadmin_1)
+
+ self.debug(
+ "Creating instance when Memory limit is fully used in child domain")
+ with self.assertRaises(Exception):
+ self.createInstance(account=self.cadmin_2,
+ service_off=self.service_offering, api_client=api_client_cadmin_2)
+ self.debug("Destroying instances: %s, %s" % (vm_1.name, vm_2.name))
+ try:
+ vm_1.delete(self.apiclient)
+ vm_2.delete(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to delete instance: %s" % e)
+
+ self.debug("Checking resource count for account: %s" % self.cadmin_1.name)
+
+ account_list = Account.list(self.apiclient, id=self.cadmin_1.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_cadmin_1 = account_list[0].memorytotal
+
+ self.assertEqual(resource_count_cadmin_1, 0 , "Resource count for %s should be 0" % get_resource_type(resource_id=9))#RAM
+
+ self.debug("Checking resource count for account: %s" % self.cadmin_2.name)
+
+ account_list = Account.list(self.apiclient, id=self.cadmin_1.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_cadmin_2 = account_list[0].memorytotal
+
+ self.assertEqual(resource_count_cadmin_2, 0 , "Resource count for %s should be 0" % get_resource_type(resource_id=9))#RAM
+ return
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f9467470/test/integration/component/memory_limits/test_maximum_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/memory_limits/test_maximum_limits.py b/test/integration/component/memory_limits/test_maximum_limits.py
new file mode 100644
index 0000000..b1ebbb4
--- /dev/null
+++ b/test/integration/component/memory_limits/test_maximum_limits.py
@@ -0,0 +1,352 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+""" P1 tests for memory resource limits
+"""
+# Import Local Modules
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import cloudstackTestCase, unittest
+from marvin.integration.lib.base import (
+ Account,
+ ServiceOffering,
+ VirtualMachine,
+ Resources,
+ Domain,
+ Project
+ )
+from marvin.integration.lib.common import (get_domain,
+ get_zone,
+ get_template,
+ cleanup_resources
+ )
+
+class Services:
+ """Test memory resource limit services
+ """
+
+ def __init__(self):
+ self.services = {
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "resource",
+ # Random characters are appended for unique
+ # username
+ "password": "password",
+ },
+ "service_offering": {
+ "name": "Tiny Instance",
+ "displaytext": "Tiny Instance",
+ "cpunumber": 1,
+ "cpuspeed": 100, # in MHz
+ "memory": 5120, # In MBs
+ },
+ "virtual_machine": {
+ "displayname": "TestVM",
+ "username": "root",
+ "password": "password",
+ "ssh_port": 22,
+ "hypervisor": 'KVM',
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": 'TCP',
+ },
+ "network": {
+ "name": "Test Network",
+ "displaytext": "Test Network",
+ "netmask": '255.255.255.0'
+ },
+ "project": {
+ "name": "Project",
+ "displaytext": "Test project",
+ },
+ "domain": {
+ "name": "Domain",
+ },
+ "ostype": 'CentOS 5.3 (64-bit)',
+ "sleep": 60,
+ "timeout": 10,
+ "mode": 'advanced',
+ # Networking mode: Advanced, Basic
+ }
+
+class TestMaxMemoryLimits(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestMaxMemoryLimits,
+ cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.services["mode"] = cls.zone.networktype
+
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+
+ cls._cleanup = [cls.service_offering, ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True
+ )
+
+ self.debug("Creating service offering with 5 GB RAM")
+
+ self.cleanup = [self.account, ]
+ return
+
+ def tearDown(self):
+ try:
+ # Clean up, terminate the created instance, volumes and snapshots
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def createInstance(self, service_off, account=None,
+ project=None, networks=None, api_client=None):
+ """Creates an instance in account"""
+ self.debug("Deploying an instance in account: %s" %
+ self.account.name)
+
+ if api_client is None:
+ api_client = self.apiclient
+
+ try:
+ vm = VirtualMachine.create(
+ api_client,
+ self.services["virtual_machine"],
+ templateid=self.template.id,
+ accountid=account.name if account else None,
+ domainid=account.domainid if account else None,
+ projectid=project.id if project else None,
+ networkids=networks,
+ serviceofferingid=service_off.id)
+
+ vms = VirtualMachine.list(api_client, id=vm.id, listall=True)
+ self.assertIsInstance(vms,
+ list,
+ "List VMs should return a valid response")
+ self.assertEqual(vms[0].state, "Running",
+ "Vm state should be running after deployment")
+ return vm
+ except Exception as e:
+ self.fail("Failed to deploy an instance: %s" % e)
+
+ def setupAccounts(self, account_limit=2, domain_limit=2, project_limit=2):
+
+ self.debug("Creating a domain under: %s" % self.domain.name)
+ self.child_domain = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.domain.id)
+
+
+ self.debug("domain crated with domain id %s" % self.child_domain.id)
+
+ self.child_do_admin = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.child_domain.id
+ )
+
+ self.debug("domain admin created for domain id %s" %
+ self.child_do_admin.domainid)
+
+ # Create project as a domain admin
+ self.project = Project.create(self.apiclient,
+ self.services["project"],
+ account=self.child_do_admin.name,
+ domainid=self.child_do_admin.domainid)
+
+ # Cleanup created project at end of test
+ self.cleanup.append(self.project)
+
+
+ # Cleanup accounts created
+ self.cleanup.append(self.child_do_admin)
+ self.cleanup.append(self.child_domain)
+
+ self.debug("Updating the Memory resource count for domain: %s" %
+ self.child_domain.name)
+ # Update resource limits for account 1
+ responses = Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=(account_limit * 1024),
+ account=self.child_do_admin.name,
+ domainid=self.child_do_admin.domainid
+ )
+
+ self.debug("Memory Resource count for child domain admin account is now: %s" %
+ responses.max)
+
+ # Update resource limits for project
+ responses = Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=(project_limit * 1024),
+ projectid=self.project.id)
+
+ self.debug("Memory Resource count for project is now")
+ self.debug(responses.max)
+
+ # TODO: Update the Memory limit for domain only
+ responses = Resources.updateLimit(self.apiclient,
+ resourcetype=9,
+ max=(domain_limit * 1024),
+ domainid=self.child_domain.id)
+
+ self.debug("Memory Resource count for domain %s with id %s is now %s" %
+ (responses.domain, responses.domainid, responses.max))
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_01_deploy_vm_domain_limit_reached(self):
+ """Test Try to deploy VM with admin account where account has not used
+ the resources but @ domain they are not available"""
+
+ # Validate the following
+ # 1. Try to deploy VM with admin account where account has not used the
+ # resources but @ domain they are not available
+ # 2. Deploy VM should error out saying ResourceAllocationException
+ # with "resource limit exceeds"
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts(account_limit=8, domain_limit=4)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.child_do_admin.name,
+ DomainName=self.child_do_admin.domain)
+
+ self.debug("Creating instance with domain %s and admin account %s" %
+ (self.child_do_admin.domainid,
+ self.child_do_admin.name))
+
+ with self.assertRaises(Exception):
+ self.createInstance(account=self.child_do_admin,
+ service_off=self.service_offering, api_client=api_client)
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_02_deploy_vm_account_limit_reached(self):
+ """Test Try to deploy VM with admin account where account has used
+ the resources but @ domain they are available"""
+
+ # Validate the following
+ # 1. Try to deploy VM with admin account where account has used the
+ # resources but @ domain they are available
+ # 2. Deploy VM should error out saying ResourceAllocationException
+ # with "resource limit exceeds"
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts(account_limit=7, domain_limit=14)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.child_do_admin.name,
+ DomainName=self.child_do_admin.domain)
+
+ self.debug("Deploying instance with account: %s" %
+ self.child_do_admin.name)
+ self.createInstance(account=self.child_do_admin,
+ service_off=self.service_offering, api_client=api_client)
+
+ self.debug("Deploying instance in account 1 when Memory limit is reached")
+
+ with self.assertRaises(Exception):
+ self.createInstance(account=self.child_do_admin,
+ service_off=self.service_offering, api_client=api_client)
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_03_deploy_vm_project_limit_reached(self):
+ """Test TTry to deploy VM with admin account where account has not used
+ the resources but @ project they are not available"""
+
+ # Validate the following
+ # 1. Try to deploy VM with admin account where account has not used the
+ # resources but @ project they are not available
+ # 2. Deploy VM should error out saying ResourceAllocationException
+ # with "resource limit exceeds"
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts(account_limit=8,domain_limit=8, project_limit=4)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.child_do_admin.name,
+ DomainName=self.child_do_admin.domain)
+
+ self.debug("Deploying instance with project: %s" % self.project.name)
+ with self.assertRaises(Exception):
+ self.createInstance(project = self.project,
+ service_off=self.service_offering, api_client=api_client)
+ return
+
+ @attr(tags=["advanced", "advancedns"])
+ def test_04_deployVm__account_limit_reached(self):
+ """Test Try to deploy VM with admin account where account has used
+ the resources but @ project they are available"""
+
+ # Validate the following
+ # 1. Try to deploy VM with admin account where account has used the
+ # resources but @ project they are available
+ # 2. Deploy VM should error out saying ResourceAllocationException
+ # with "resource limit exceeds"
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts(account_limit=6, project_limit=12, domain_limit=12)
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.child_do_admin.name,
+ DomainName=self.child_do_admin.domain)
+
+ self.debug("Deploying instance with account: %s" %
+ self.child_do_admin.name)
+ self.createInstance(account=self.child_do_admin,
+ service_off=self.service_offering, api_client=api_client)
+
+ self.debug("Deploying instance in account: %s when memory limit is reached" %
+ self.child_do_admin.name)
+
+ with self.assertRaises(Exception):
+ self.createInstance(project=self.project, account=self.child_do_admin,
+ service_off=self.service_offering, api_client=api_client)
+ return
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f9467470/test/integration/component/memory_limits/test_memory_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/memory_limits/test_memory_limits.py b/test/integration/component/memory_limits/test_memory_limits.py
new file mode 100644
index 0000000..18eab4c
--- /dev/null
+++ b/test/integration/component/memory_limits/test_memory_limits.py
@@ -0,0 +1,764 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+""" P1 tests for memory resource limits
+"""
+# Import Local Modules
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import cloudstackTestCase, unittest
+from marvin.integration.lib.base import (
+ Account,
+ ServiceOffering,
+ VirtualMachine,
+ Resources,
+ Domain
+ )
+from marvin.integration.lib.common import (get_domain,
+ get_zone,
+ get_template,
+ cleanup_resources,
+ wait_for_cleanup,
+ find_suitable_host,
+ get_resource_type
+ )
+
+class Services:
+ """Test memory resource limit services
+ """
+
+ def __init__(self):
+ self.services = {
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "resource",
+ # Random characters are appended for unique
+ # username
+ "password": "password",
+ },
+ "service_offering": {
+ "name": "Tiny Instance",
+ "displaytext": "Tiny Instance",
+ "cpunumber": 1,
+ "cpuspeed": 100, # in MHz
+ "memory": 5120, # In MBs
+ },
+ "virtual_machine": {
+ "displayname": "TestVM",
+ "username": "root",
+ "password": "password",
+ "ssh_port": 22,
+ "hypervisor": 'KVM',
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": 'TCP',
+ },
+ "network": {
+ "name": "Test Network",
+ "displaytext": "Test Network",
+ "netmask": '255.255.255.0'
+ },
+ "project": {
+ "name": "Project",
+ "displaytext": "Test project",
+ },
+ "domain": {
+ "name": "Domain",
+ },
+ "ostype": 'CentOS 5.3 (64-bit)',
+ "sleep": 60,
+ "timeout": 10,
+ "mode": 'advanced',
+ # Networking mode: Advanced, Basic
+ }
+
+class TestMemoryLimits(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestMemoryLimits,
+ cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+
+ cls.services["mode"] = cls.zone.networktype
+
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+
+ cls._cleanup = [cls.service_offering, ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.account = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True
+ )
+
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+ self.vm = self.createInstance(service_off=self.service_offering)
+
+ self.cleanup = [self.account, ]
+ return
+
+ def tearDown(self):
+ try:
+ # Clean up, terminate the created instance, volumes and snapshots
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def createInstance(self, service_off, networks=None, api_client=None):
+ """Creates an instance in account"""
+ self.debug("Deploying an instance in account: %s" %
+ self.account.name)
+
+ if api_client is None:
+ api_client = self.apiclient
+
+ try:
+ vm = VirtualMachine.create(
+ api_client,
+ self.services["virtual_machine"],
+ templateid=self.template.id,
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ networkids=networks,
+ serviceofferingid=service_off.id)
+ vms = VirtualMachine.list(api_client, id=vm.id, listall=True)
+ self.assertIsInstance(vms,
+ list,
+ "List VMs should return a valid response")
+ self.assertEqual(vms[0].state, "Running",
+ "Vm state should be running after deployment")
+ return vm
+ except Exception as e:
+ self.fail("Failed to deploy an instance: %s" % e)
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_01_stop_start_instance(self):
+ """Test Deploy VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM & Deploy VM as root admin
+ # 2 .List Resource count for the root admin Memory usage
+ # 3. Stop and start instance, resource count should list properly.
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ self.debug("Stopping instance: %s" % self.vm.name)
+ try:
+ self.vm.stop(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to stop instance: %s" % e)
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_stop = account_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_stop,
+ "Resource count should be same after stopping the instance")
+
+ self.debug("Starting instance: %s" % self.vm.name)
+ try:
+ self.vm.start(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to start instance: %s" % e)
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_start = account_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_start,
+ "Resource count should be same after stopping the instance")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_02_migrate_instance(self):
+ """Test Deploy VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM & Deploy VM as root admin
+ # 2. List Resource count for the root admin Memory usage
+ # 3. Migrate vm, resource count should list properly.
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ host = find_suitable_host(self.apiclient, self.vm)
+ self.debug("Migrating instance: %s to host: %s" % (self.vm.name, host.name))
+ try:
+ self.vm.migrate(self.apiclient, host.id)
+ except Exception as e:
+ self.fail("Failed to migrate instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_migrate = account_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_migrate,
+ "Resource count should be same after stopping the instance")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_03_delete_instance(self):
+ """Test Deploy VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM & Deploy VM as root admin
+ # 2. List Resource count for the root admin Memory usage
+ # 3. Delete instance, resource count should be 0 after delete operation.
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ self.debug("Destroying instance: %s" % self.vm.name)
+ try:
+ self.vm.delete(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to delete instance: %s" % e)
+
+ # Wait for expunge interval to cleanup Memory
+ wait_for_cleanup(self.apiclient, ["expunge.delay", "expunge.interval"])
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_delete = account_list[0].memorytotal
+ self.assertEqual(resource_count_after_delete, 0 , "Resource count for %s should be 0" % get_resource_type(resource_id=9))#RAM
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_04_deploy_multiple_vm_with_5gb_ram(self):
+ """Test Deploy multiple VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM
+ # 2. Deploy multiple VMs with this service offering
+ # 3. List Resource count for the root admin Memory usage
+ # 4. Memory usage should list properly
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ self.debug("Creating two instances with service offering: %s" %
+ self.service_offering.name)
+ vm_1 = self.createInstance(service_off=self.service_offering)
+ self.createInstance(service_off=self.service_offering)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_new = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"]) * 3 #Total 3 VMs
+
+ self.assertEqual(resource_count_new, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ self.debug("Destroying instance: %s" % vm_1.name)
+ try:
+ vm_1.delete(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to delete instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_delete = account_list[0].memorytotal
+
+ expected_resource_count -= int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count_after_delete, expected_resource_count,
+ "Resource count should match with the expected resource count")
+ return
+
+class TestDomainMemoryLimitsConfiguration(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestDomainMemoryLimitsConfiguration,
+ cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.services["mode"] = cls.zone.networktype
+
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+
+ cls._cleanup = [cls.service_offering, ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ # Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+
+ self.cleanup = []
+ return
+
+ def tearDown(self):
+ try:
+ # Clean up, terminate the created instance, volumes and snapshots
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def createInstance(self, service_off, networks=None, api_client=None):
+ """Creates an instance in account"""
+ self.debug("Deploying an instance in account: %s" %
+ self.account.name)
+
+ if api_client is None:
+ api_client = self.apiclient
+
+ try:
+ vm = VirtualMachine.create(
+ api_client,
+ self.services["virtual_machine"],
+ templateid=self.template.id,
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ networkids=networks,
+ serviceofferingid=service_off.id)
+ vms = VirtualMachine.list(api_client, id=vm.id, listall=True)
+ self.assertIsInstance(vms,
+ list,
+ "List VMs should return a valid response")
+ self.assertEqual(vms[0].state, "Running",
+ "Vm state should be running after deployment")
+ return vm
+ except Exception as e:
+ self.fail("Failed to deploy an instance: %s" % e)
+
+ def setupAccounts(self):
+
+ self.debug("Creating a domain under: %s" % self.domain.name)
+ self.child_domain_1 = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.domain.id)
+
+ self.child_do_admin_1 = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.child_domain_1.id
+ )
+ # Cleanup the resources created at end of test
+ self.cleanup.append(self.child_do_admin_1)
+ self.cleanup.append(self.child_domain_1)
+
+ self.debug("Creating a domain under: %s" % self.domain.name)
+
+ self.child_domain_2 = Domain.create(self.apiclient,
+ services=self.services["domain"],
+ parentdomainid=self.domain.id)
+
+ self.child_do_admin_2 = Account.create(
+ self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.child_domain_2.id)
+ # Cleanup the resources created at end of test
+ self.cleanup.append(self.child_do_admin_2)
+ self.cleanup.append(self.child_domain_2)
+
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_01_stop_start_instance(self):
+ """Test Deploy VM with 5 GB memory & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB memory in child domains of root domain & Deploy VM
+ # 2. List Resource count memory usage
+ # 3. Stop and Start instance, check resource count.
+ # 4. Resource count should list properly.
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = {self.child_domain_1: self.child_do_admin_1,
+ self.child_domain_2: self.child_do_admin_2
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+ vm = self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Initial resource count should match with the expected resource count")
+
+ self.debug("Stopping instance: %s" % vm.name)
+ try:
+ vm.stop(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to stop instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_stop = account_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_stop,
+ "Resource count should be same after stopping the instance")
+
+ self.debug("Starting instance: %s" % vm.name)
+ try:
+ vm.start(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to start instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_start = account_list[0].memorytotal
+
+ self.assertEqual(resource_count_after_stop, resource_count_after_start,
+ "Resource count should be same after starting the instance")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_02_migrate_instance(self):
+ """Test Deploy VM with 5 GB memory & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB memory in child domains of root domain & Deploy VM
+ # 2. List Resource count
+ # 3. Migrate instance to another host
+ # 4. Resource count should list properly.
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = {self.child_domain_1: self.child_do_admin_1,
+ self.child_domain_2: self.child_do_admin_2
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+ vm = self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Initial resource count should with the expected resource count")
+
+ host = find_suitable_host(self.apiclient, vm)
+ self.debug("Migrating instance: %s to host: %s" %
+ (vm.name, host.name))
+ try:
+ vm.migrate(self.apiclient, host.id)
+ except Exception as e:
+ self.fail("Failed to migrate instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_migrate = account_list[0].memorytotal
+
+ self.assertEqual(resource_count, resource_count_after_migrate,
+ "Resource count should be same after starting the instance")
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ def test_03_delete_instance(self):
+ """Test Deploy VM with 5 GB RAM & verify the usage"""
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM in child domains of root domain & Deploy VM
+ # 2. List Resource count for the Memory usage
+ # 3. Delete instance
+ # 4. Resource count should list as 0
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = {self.child_domain_1: self.child_do_admin_1,
+ self.child_domain_2: self.child_do_admin_2
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+ vm = self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Initial resource count should match with the expected resource count")
+
+ self.debug("Destroying instance: %s" % vm.name)
+ try:
+ vm.delete(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to delete instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+ self.assertEqual(resource_count, 0 , "Resource count for %s should be 0" % get_resource_type(resource_id=9))#RAM
+ return
+
+ @attr(tags=["advanced", "advancedns","simulator"])
+ @attr(configuration='max.account.memory')
+ def test_04_deploy_multiple_vm(self):
+ """Test Deploy multiple VM with 5 GB memory & verify the usage"""
+ #keep the configuration value - max.account.memory = 20480
+
+ # Validate the following
+ # 1. Create compute offering with 5 GB RAM
+ # 2. Deploy multiple VMs with this service offering in child domains of root domain
+ # 3. List Resource count for the root admin Memory usage
+ # 4. Memory usage should list properly
+
+ self.debug("Creating service offering with 5 GB RAM")
+ self.service_offering = ServiceOffering.create(
+ self.apiclient,
+ self.services["service_offering"]
+ )
+ # Adding to cleanup list after execution
+ self.cleanup.append(self.service_offering)
+
+ self.debug("Setting up account and domain hierarchy")
+ self.setupAccounts()
+ users = {self.child_domain_1: self.child_do_admin_1,
+ self.child_domain_2: self.child_do_admin_2
+ }
+ for domain, admin in users.items():
+ self.account = admin
+ self.domain = domain
+
+ memory_account_gc = Resources.list(self.apiclient,
+ resourcetype = 9, #Memory
+ account = self.account.name,
+ domainid = self.domain.id
+ )
+
+ if memory_account_gc[0].max != 20480:
+ self.skipTest("This test case requires configuration value max.account.memory to be 20480")
+
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.name,
+ DomainName=self.account.domain)
+
+ self.debug("Creating an instance with service offering: %s" %
+ self.service_offering.name)
+ vm_1 = self.createInstance(service_off=self.service_offering, api_client=api_client)
+ vm_2 = self.createInstance(service_off=self.service_offering, api_client=api_client)
+ self.createInstance(service_off=self.service_offering, api_client=api_client)
+ self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ self.debug("Deploying instance - memory capacity is fully utilized")
+ with self.assertRaises(Exception):
+ self.createInstance(service_off=self.service_offering, api_client=api_client)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count = account_list[0].memorytotal
+
+ expected_resource_count = int(self.services["service_offering"]["memory"]) * 4 #Total 4 vms
+
+ self.assertEqual(resource_count, expected_resource_count,
+ "Initial resource count should with the expected resource count")
+
+ self.debug("Destroying instance: %s" % vm_1.name)
+ try:
+ vm_1.delete(self.apiclient)
+ except Exception as e:
+ self.fail("Failed to delete instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_delete = account_list[0].memorytotal
+
+ expected_resource_count -= int(self.services["service_offering"]["memory"])
+
+ self.assertEqual(resource_count_after_delete, expected_resource_count,
+ "Resource count should match with the expected resource count")
+
+ host = find_suitable_host(self.apiclient, vm_2)
+ self.debug("Migrating instance: %s to host: %s" % (vm_2.name,
+ host.name))
+ try:
+ vm_2.migrate(self.apiclient, host.id)
+ except Exception as e:
+ self.fail("Failed to migrate instance: %s" % e)
+
+ account_list = Account.list(self.apiclient, id=self.account.id)
+ self.assertIsInstance(account_list,
+ list,
+ "List Accounts should return a valid response"
+ )
+ resource_count_after_migrate = account_list[0].memorytotal
+
+ self.debug(resource_count_after_migrate)
+ self.assertEqual(resource_count_after_delete, resource_count_after_migrate,
+ "Resource count should be same after migrating the instance")
+ return
[27/50] [abbrv] git commit: updated refs/heads/kvm-vnc-listen to
895c51d
Posted by wi...@apache.org.
Signed-off-by: venkataswamybabu budumuru <ve...@citrix.com>
Skipped the test "test_createSharedNetwork_usedVlan" as there is another test
(test_createSharedNetwork_usedVlan2) which is covering the righ scenario.
moreover this test is creating issues for couple of other tests due to
incompleteness
(cherry picked from commit 237f8ec702a7bf3ba2a3215caf421797fcf9c263)
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/4356ecc6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/4356ecc6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/4356ecc6
Branch: refs/heads/kvm-vnc-listen
Commit: 4356ecc627d195a16e228abcd59a97edaab7358d
Parents: f2a360f
Author: venkataswamybabu budumuru <ve...@citrix.com>
Authored: Thu Sep 12 18:23:05 2013 +0530
Committer: venkataswamybabu budumuru <ve...@citrix.com>
Committed: Thu Sep 12 18:26:31 2013 +0530
----------------------------------------------------------------------
test/integration/component/test_shared_networks.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4356ecc6/test/integration/component/test_shared_networks.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_shared_networks.py b/test/integration/component/test_shared_networks.py
index fec14a1..a1aeca8 100644
--- a/test/integration/component/test_shared_networks.py
+++ b/test/integration/component/test_shared_networks.py
@@ -1709,7 +1709,8 @@ class TestSharedNetworks(cloudstackTestCase):
ip_range = list(netaddr.iter_iprange(unicode(self.services["network"]["startip"]), unicode(self.services["network"]["endip"])))
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
self.fail("Virtual machine ip should be from the ip range assigned to network created.")
-
+
+ @unittest.skip("skipped - This is a redundant case and also this is causing issue for rest fo the cases ")
@attr(tags=["advanced", "advancedns"])
def test_createSharedNetwork_usedVlan(self):
""" Test Shared Network with used vlan 01 """