You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2013/04/29 15:13:39 UTC
[01/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Updated Branches:
refs/heads/marvin_refactor dbcfc6661 -> 7c439fe69
Fix to pass all affinity group rows to action fn
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b03fb208
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b03fb208
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b03fb208
Branch: refs/heads/marvin_refactor
Commit: b03fb208a9a2f3421d9975c981307842dd3d22e9
Parents: c4fa5c0
Author: Brian Federle <br...@citrix.com>
Authored: Fri Apr 19 15:51:57 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Fri Apr 19 15:51:57 2013 -0700
----------------------------------------------------------------------
ui/scripts/ui-custom/affinity.js | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b03fb208/ui/scripts/ui-custom/affinity.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/affinity.js b/ui/scripts/ui-custom/affinity.js
index 1012e7b..f3356dd 100644
--- a/ui/scripts/ui-custom/affinity.js
+++ b/ui/scripts/ui-custom/affinity.js
@@ -97,8 +97,15 @@
tierID: $dataList.find('.tier-select select').val(),
_subselect: $dataList.find('tr.multi-edit-selected .subselect select').val(),
context: $.extend(true, {}, context, {
- affinityGroups: $dataList.find('tr.multi-edit-selected').map(function(index, elem) {
- return $(elem).data('json-obj');
+ affinityGroups: $dataList.find('tbody tr').map(function(index, elem) {
+ var itemData = $(elem).data('json-obj');
+ itemData._isSelected = false;
+
+ if ($(elem).hasClass('multi-edit-selected')) {
+ itemData._isSelected = true;
+ }
+
+ return itemData;
})
}),
response: {
[03/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
listView, custom checkbox UI: Fix pre-checked checkbox state
Fixes pre-checked checkboxes not having multi-edit-selected class,
preventing item data from being passed to custom widget actions.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/72da1ae9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/72da1ae9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/72da1ae9
Branch: refs/heads/marvin_refactor
Commit: 72da1ae96960bc89f64a50bbcb9c9c6ac97662d2
Parents: 35681f3
Author: Brian Federle <br...@citrix.com>
Authored: Mon Apr 22 11:26:24 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Mon Apr 22 11:26:24 2013 -0700
----------------------------------------------------------------------
ui/scripts/ui/widgets/listView.js | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/72da1ae9/ui/scripts/ui/widgets/listView.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js
index 4bd4a42..f368951 100644
--- a/ui/scripts/ui/widgets/listView.js
+++ b/ui/scripts/ui/widgets/listView.js
@@ -780,6 +780,10 @@
.data('list-view-action-id', actionName)
);
+ if ($td.find('input[type=checkbox]').is(':checked')) {
+ $tr.addClass('multi-edit-selected');
+ }
+
return true;
}
[15/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
LOUDSTACK-2120: mixed zone management - (1) extend listZones API to to take in networktype. (2) UI: populate Zones list page with ones whose networktype matches selected option in zone type dropdown on top menu. (3) UI: count total number of zones based on selected option in zone type dropdown on top menu.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/b5979ba9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b5979ba9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b5979ba9
Branch: refs/heads/marvin_refactor
Commit: b5979ba9b58caf0f306907e11c9a34fe36ff6ca6
Parents: ee02311
Author: Jessica Wang <je...@apache.org>
Authored: Thu Apr 25 10:40:08 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Apr 25 10:40:08 2013 -0700
----------------------------------------------------------------------
.../api/command/user/zone/ListZonesByCmd.java | 7 ++++++
.../src/com/cloud/api/query/QueryManagerImpl.java | 4 +++
ui/scripts/system.js | 17 ++++++++++++--
3 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5979ba9/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
index bbfb598..d0dc736 100644
--- a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
@@ -56,6 +56,9 @@ public class ListZonesByCmd extends BaseListCmd {
@Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the zone")
private String name;
+ @Parameter(name=ApiConstants.NETWORK_TYPE, type=CommandType.STRING, description="the network type of the zone")
+ private String networkType;
+
@Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the zones")
private Boolean showCapacities;
@@ -79,6 +82,10 @@ public class ListZonesByCmd extends BaseListCmd {
return name;
}
+ public String getNetworkType(){
+ return networkType;
+ }
+
public Boolean getShowCapacities() {
return showCapacities;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5979ba9/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 f92b4fc..67af7e4 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -2213,10 +2213,14 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
Long id = cmd.getId();
String keyword = cmd.getKeyword();
String name = cmd.getName();
+ String networkType = cmd.getNetworkType();
Filter searchFilter = new Filter(DataCenterJoinVO.class, null, false, cmd.getStartIndex(), cmd.getPageSizeVal());
SearchCriteria<DataCenterJoinVO> sc = _dcJoinDao.createSearchCriteria();
+ if(networkType != null)
+ sc.addAnd("networkType", SearchCriteria.Op.EQ, networkType);
+
if (id != null) {
sc.addAnd("id", SearchCriteria.Op.EQ, id);
} else if (name != null) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b5979ba9/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 3aaa830..4692b61 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -184,9 +184,16 @@
dashboard: {
dataProvider: function(args) {
var dataFns = {
- zoneCount: function(data) {
+ zoneCount: function(data) {
+ var data = {};
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data, {
+ networktype: cloudStack.context.zoneType
+ });
+ }
$.ajax({
url: createURL('listZones'),
+ data: data,
success: function(json) {
dataFns.podCount($.extend(data, {
zoneCount: json.listzonesresponse.count ?
@@ -4665,6 +4672,10 @@
}
}
+ if(args.context.zoneType != null && args.context.zoneType.length > 0) { //Basic type or Advanced type
+ array1.push("&networktype=" + args.context.zoneType);
+ }
+
$.ajax({
url: createURL("listZones&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
dataType: "json",
@@ -5000,8 +5011,8 @@
localstorageenabled: {
label: 'label.local.storage.enabled',
isBoolean: true,
- isEditable: true,
- converter:cloudStack.converters.toBooleanText
+ isEditable: true,
+ converter:cloudStack.converters.toBooleanText
}
}
],
[21/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2158: 'userconcentratedpod_firstfit failed to find alternate host to run VM
In the applicationContext .xml , the context of the 'UserConcentratedPodPlanner' needs to include the list of allocators.
This will ensure that when this component is loaded by Spring, the allocators gets initialized.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/232d44bf
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/232d44bf
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/232d44bf
Branch: refs/heads/marvin_refactor
Commit: 232d44bf6e31898887b324bcdebbc659423917e4
Parents: f883b0f
Author: Prachi Damle <pr...@cloud.com>
Authored: Thu Apr 25 14:47:59 2013 -0700
Committer: Prachi Damle <pr...@cloud.com>
Committed: Thu Apr 25 14:48:34 2013 -0700
----------------------------------------------------------------------
client/tomcatconf/applicationContext.xml.in | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/232d44bf/client/tomcatconf/applicationContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in
index d2ea380..1f5ab20 100644
--- a/client/tomcatconf/applicationContext.xml.in
+++ b/client/tomcatconf/applicationContext.xml.in
@@ -532,10 +532,14 @@
-->
<bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner">
<property name="name" value="UserDispersing"/>
+ <property name="StoragePoolAllocators" value="#{storagePoolAllocators.Adapters}" />
+ <property name="HostAllocators" value="#{hostAllocators.Adapters}" />
</bean>
<bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner">
<property name="name" value="UserConcentratedPod"/>
+ <property name="StoragePoolAllocators" value="#{storagePoolAllocators.Adapters}" />
+ <property name="HostAllocators" value="#{hostAllocators.Adapters}" />
</bean>
<bean id="clusterBasedAgentLoadBalancerPlanner" class="com.cloud.cluster.agentlb.ClusterBasedAgentLoadBalancerPlanner">
[46/50] [abbrv] CLOUDSTACK-741: Granular Global Parameters and adding
fixes for CLOUDSTACK-2176, CLOUDSTACK-2198, CLOUDSTACK-2200
Posted by ts...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/test/integration/smoke/test_global_settings.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_global_settings.py b/test/integration/smoke/test_global_settings.py
index 12b35d7..ec18cea 100644
--- a/test/integration/smoke/test_global_settings.py
+++ b/test/integration/smoke/test_global_settings.py
@@ -39,22 +39,22 @@ class TestUpdateConfigWithScope(cloudstackTestCase):
updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
updateConfigurationCmd.name = "use.external.dns"
updateConfigurationCmd.value = "true"
- updateConfigurationCmd.scope = "zone"
- updateConfigurationCmd.id = 1
+ updateConfigurationCmd.scopename = "zone"
+ updateConfigurationCmd.scopeid = 1
updateConfigurationResponse = self.apiClient.updateConfiguration(updateConfigurationCmd)
self.debug("updated the parameter %s with value %s"%(updateConfigurationResponse.name, updateConfigurationResponse.value))
listConfigurationsCmd = listConfigurations.listConfigurationsCmd()
listConfigurationsCmd.cfgName = updateConfigurationResponse.name
- listConfigurationsCmd.scope = "zone"
- listConfigurationsCmd.id = 1
+ listConfigurationsCmd.scopename = "zone"
+ listConfigurationsCmd.scopeid = 1
listConfigurationsResponse = self.apiClient.listConfigurations(listConfigurationsCmd)
self.assertNotEqual(len(listConfigurationsResponse), 0, "Check if the list API \
returns a non-empty response")
- configParam = listConfigurationsResponse[0]
+ configParam = listConfigurationsResponse[2]
self.assertEqual(configParam.value, updateConfigurationResponse.value, "Check if the update API returned \
is the same as the one we got in the list API")
@@ -67,6 +67,6 @@ class TestUpdateConfigWithScope(cloudstackTestCase):
updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
updateConfigurationCmd.name = "use.external.dns"
updateConfigurationCmd.value = "false"
- updateConfigurationCmd.scope = "zone"
- updateConfigurationCmd.id = 1
+ updateConfigurationCmd.scopename = "zone"
+ updateConfigurationCmd.scopeid = 1
self.apiClient.updateConfiguration(updateConfigurationCmd)
[19/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Update affinity icon
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/880f98c0
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/880f98c0
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/880f98c0
Branch: refs/heads/marvin_refactor
Commit: 880f98c023d314b171b1410ad54020ce7b0ce291
Parents: 6802b9d
Author: Brian Federle <br...@citrix.com>
Authored: Thu Apr 25 13:20:52 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Thu Apr 25 13:21:15 2013 -0700
----------------------------------------------------------------------
ui/images/icons.png | Bin 50708 -> 50052 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/880f98c0/ui/images/icons.png
----------------------------------------------------------------------
diff --git a/ui/images/icons.png b/ui/images/icons.png
index f07ca83..e2083da 100644
Binary files a/ui/images/icons.png and b/ui/images/icons.png differ
[31/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Correcting the case for secondary storage limit
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3a9001bf
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3a9001bf
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3a9001bf
Branch: refs/heads/marvin_refactor
Commit: 3a9001bfb6f44f322b55da41c67d748ac7528f89
Parents: c65ad6b
Author: Pranav Saxena <pr...@citrix.com>
Authored: Fri Apr 26 14:18:40 2013 +0530
Committer: Pranav Saxena <pr...@citrix.com>
Committed: Fri Apr 26 14:18:40 2013 +0530
----------------------------------------------------------------------
ui/scripts/domains.js | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a9001bf/ui/scripts/domains.js
----------------------------------------------------------------------
diff --git a/ui/scripts/domains.js b/ui/scripts/domains.js
index 8ee0ee6..e82f8ff 100644
--- a/ui/scripts/domains.js
+++ b/ui/scripts/domains.js
@@ -530,7 +530,7 @@
case "10":
domainObj["primaryStorageLimit"] = limit.max;
break;
- case "7":
+ case "11":
domainObj["secondaryStorageLimit"] = limit.max;
break;
}
[43/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - API: extend listPods API to to take in zonetype.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/271f8759
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/271f8759
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/271f8759
Branch: refs/heads/marvin_refactor
Commit: 271f8759be06a6a150809f454b469d2301c25d1b
Parents: 2ec28ce
Author: Jessica Wang <je...@citrix.com>
Authored: Sat Apr 27 18:29:46 2013 -0700
Committer: Jessica Wang <je...@citrix.com>
Committed: Sat Apr 27 18:30:21 2013 -0700
----------------------------------------------------------------------
.../api/command/admin/pod/ListPodsByCmd.java | 7 +++
.../src/com/cloud/server/ManagementServerImpl.java | 42 ++++++++++-----
2 files changed, 36 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/271f8759/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java
index 3dace42..db233ae 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/pod/ListPodsByCmd.java
@@ -55,6 +55,9 @@ public class ListPodsByCmd extends BaseListCmd {
@Parameter(name=ApiConstants.ALLOCATION_STATE, type=CommandType.STRING, description="list pods by allocation state")
private String allocationState;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
@Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the pods")
private Boolean showCapacities;
@@ -78,6 +81,10 @@ public class ListPodsByCmd extends BaseListCmd {
return allocationState;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
public Boolean getShowCapacities() {
return showCapacities;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/271f8759/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 050f57b..5db8329 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -1068,17 +1068,29 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
@Override
public Pair<List<? extends Pod>, Integer> searchForPods(ListPodsByCmd cmd) {
- Filter searchFilter = new Filter(HostPodVO.class, "dataCenterId", true, cmd.getStartIndex(), cmd.getPageSizeVal());
- SearchCriteria<HostPodVO> sc = _hostPodDao.createSearchCriteria();
-
String podName = cmd.getPodName();
Long id = cmd.getId();
- Long zoneId = cmd.getZoneId();
+ Long zoneId = cmd.getZoneId();
Object keyword = cmd.getKeyword();
Object allocationState = cmd.getAllocationState();
-
+ String zoneType = cmd.getZoneType();
zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId);
+
+ Filter searchFilter = new Filter(HostPodVO.class, "dataCenterId", true, cmd.getStartIndex(), cmd.getPageSizeVal());
+ SearchBuilder<HostPodVO> sb = _hostPodDao.createSearchBuilder();
+ sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+ sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
+ sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ sb.and("allocationState", sb.entity().getAllocationState(), SearchCriteria.Op.EQ);
+
+ if(zoneType != null) {
+ SearchBuilder<DataCenterVO> zoneSb = _dcDao.createSearchBuilder();
+ zoneSb.and("zoneNetworkType", zoneSb.entity().getNetworkType(), SearchCriteria.Op.EQ);
+ sb.join("zoneSb", zoneSb, sb.entity().getDataCenterId(), zoneSb.entity().getId(), JoinBuilder.JoinType.INNER);
+ }
+
+ SearchCriteria<HostPodVO> sc = sb.create();
if (keyword != null) {
SearchCriteria<HostPodVO> ssc = _hostPodDao.createSearchCriteria();
ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
@@ -1088,21 +1100,25 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
}
if (id != null) {
- sc.addAnd("id", SearchCriteria.Op.EQ, id);
+ sc.setParameters("id", id);
}
-
+
if (podName != null) {
- sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + podName + "%");
+ sc.setParameters("name", "%" + podName + "%");
}
-
+
if (zoneId != null) {
- sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
+ sc.setParameters("dataCenterId", zoneId);
}
-
+
if (allocationState != null) {
- sc.addAnd("allocationState", SearchCriteria.Op.EQ, allocationState);
+ sc.setParameters("allocationState", allocationState);
+ }
+
+ if(zoneType != null) {
+ sc.setJoinParameters("zoneSb", "zoneNetworkType", zoneType);
}
-
+
Pair<List<HostPodVO>, Integer> result = _hostPodDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends Pod>, Integer>(result.first(), result.second());
}
[33/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-1567 ui and api changes
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/93ef3ad5
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/93ef3ad5
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/93ef3ad5
Branch: refs/heads/marvin_refactor
Commit: 93ef3ad55050657768703f22c0215427e09f544c
Parents: 318c7f2
Author: Radhika PC <ra...@citrix.com>
Authored: Fri Apr 26 16:31:49 2013 +0530
Committer: Radhika PC <ra...@citrix.com>
Committed: Fri Apr 26 16:32:21 2013 +0530
----------------------------------------------------------------------
docs/en-US/added-API-commands-4.2.xml | 24 ++++++++++++++++++++++++
docs/en-US/delete-event-alerts.xml | 12 ++++++++++++
docs/en-US/events.xml | 2 +-
docs/en-US/images/eip-ns-basiczone.png | Bin 0 -> 55568 bytes
4 files changed, 37 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/93ef3ad5/docs/en-US/added-API-commands-4.2.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/added-API-commands-4.2.xml b/docs/en-US/added-API-commands-4.2.xml
index 4bec148..3471624 100644
--- a/docs/en-US/added-API-commands-4.2.xml
+++ b/docs/en-US/added-API-commands-4.2.xml
@@ -39,5 +39,29 @@
<para>The response parameters are: id, ipaddress, secondaryips, gateway, netmask, macaddr,
broadcasturi, isolationuri, isdefault,</para>
</listitem>
+ <listitem>
+ <para>deleteAlerts </para>
+ <para>Deletes the specified alerts. The request parameters are: ids (allowed to pass one or
+ more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format).</para>
+ <para>The response parameters are: true, false </para>
+ </listitem>
+ <listitem>
+ <para>archiveAlerts</para>
+ <para>Archives the specified alerts. The request parameters are: ids (allowed to pass one or
+ more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format).</para>
+ <para>The response parameters are: true, false </para>
+ </listitem>
+ <listitem>
+ <para>deleteEvents </para>
+ <para>Deletes the specified events. The request parameters are: ids (allowed to pass one or
+ more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format).</para>
+ <para>The response parameters are: true, false</para>
+ </listitem>
+ <listitem>
+ <para>archiveEvents</para>
+ <para>Archives the specified events. The request parameters are: ids (allowed to pass one or
+ more IDs separated by comma); type (string); olderthan (yyyy-mm-dd format).</para>
+ <para>The response parameters are: true, false </para>
+ </listitem>
</itemizedlist>
</section>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/93ef3ad5/docs/en-US/delete-event-alerts.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/delete-event-alerts.xml b/docs/en-US/delete-event-alerts.xml
index 3eebcb7..ef39040 100644
--- a/docs/en-US/delete-event-alerts.xml
+++ b/docs/en-US/delete-event-alerts.xml
@@ -28,6 +28,18 @@
or by using the Details page. If you want to delete multiple alerts or events at the same time,
you can use the respective context menu. You can delete alerts or events by category for a time
period.</para>
+ <para>In order to support the delete or archive 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>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/93ef3ad5/docs/en-US/events.xml
----------------------------------------------------------------------
diff --git a/docs/en-US/events.xml b/docs/en-US/events.xml
index 4a14458..3b93ee0 100644
--- a/docs/en-US/events.xml
+++ b/docs/en-US/events.xml
@@ -25,7 +25,7 @@
physical resources associated with a cloud environment. Events are used by monitoring systems,
usage and billing systems, or any other event-driven workflow systems to discern a pattern and
make the right business decision. 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
+ physical resources, an action performed by an user (action events), or policy based events
(alerts).</para>
<xi:include href="events-log.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<xi:include href="event-framework.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/93ef3ad5/docs/en-US/images/eip-ns-basiczone.png
----------------------------------------------------------------------
diff --git a/docs/en-US/images/eip-ns-basiczone.png b/docs/en-US/images/eip-ns-basiczone.png
new file mode 100644
index 0000000..315ff55
Binary files /dev/null and b/docs/en-US/images/eip-ns-basiczone.png differ
[34/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Please, please, pretty please try to stay away from the exec plugin whereever possible. It ussually ends up being non portable across developer operating systems. Most commands like cp have a perfectly usable equivalent in ant like the copy task.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1adec812
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1adec812
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1adec812
Branch: refs/heads/marvin_refactor
Commit: 1adec812fad2fd58559d5b2e37b8b35d121486ce
Parents: 93ef3ad
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Fri Apr 26 13:56:07 2013 +0200
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Fri Apr 26 14:00:01 2013 +0200
----------------------------------------------------------------------
client/pom.xml | 11 +++++------
1 files changed, 5 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1adec812/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 743cd36..a7c7009 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -450,16 +450,15 @@
</goals>
<configuration>
<target if="${nonoss}">
- <echo>test</echo>
<replaceregexp
file="${basedir}/target/generated-webapp/WEB-INF/web.xml"
match="classpath:componentContext.xml"
replace="classpath:nonossComponentContext.xml" byline="true" />
- <exec executable="cp">
- <arg value="-r" />
- <arg value="${basedir}/../plugins/network-elements/cisco-vnmc/scripts" />
- <arg value="${basedir}/target/generated-webapp/WEB-INF/classes/" />
- </exec>
+ <copy overwrite="true" todir="${basedir}/target/generated-webapp/WEB-INF/classes/scripts">
+ <fileset dir="${basedir}/../plugins/network-elements/cisco-vnmc/scripts">
+ <include name="**/*" />
+ </fileset>
+ </copy>
</target>
</configuration>
</execution>
[06/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Affinity UI: Cleanup dialog on close
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2be8368f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2be8368f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2be8368f
Branch: refs/heads/marvin_refactor
Commit: 2be8368f449e49ac1629c230268c8af15912ffc5
Parents: 57686ae
Author: Brian Federle <br...@citrix.com>
Authored: Mon Apr 22 11:27:47 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Mon Apr 22 11:27:47 2013 -0700
----------------------------------------------------------------------
ui/scripts/ui-custom/affinity.js | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2be8368f/ui/scripts/ui-custom/affinity.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/affinity.js b/ui/scripts/ui-custom/affinity.js
index 1f51b52..1a23ff7 100644
--- a/ui/scripts/ui-custom/affinity.js
+++ b/ui/scripts/ui-custom/affinity.js
@@ -117,6 +117,7 @@
$('div.overlay').fadeOut(function() {
$('div.overlay').remove();
+ $(':ui-dialog').dialog('destroy');
});
}
},
@@ -129,6 +130,7 @@
});
$('div.overlay').fadeOut(function() {
$('div.overlay').remove();
+ $(':ui-dialog').dialog('destroy');
});
}
}
[25/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Don't allow success to be reported when we fail to stop vm due to no agent
connection
BUG-ID: CLOUDSTACK-2195
Bugfix-for: 4.2
Reviewed-by: Edison Su
Signed-off-by: Marcus Sorensen <ma...@betterservers.com> 1366950954 -0600
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f429c668
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f429c668
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f429c668
Branch: refs/heads/marvin_refactor
Commit: f429c6687b713cbbe1ca7f78bbf4869a32fe39f4
Parents: efb4471
Author: Marcus Sorensen <ma...@betterservers.com>
Authored: Thu Apr 25 22:35:54 2013 -0600
Committer: Marcus Sorensen <ma...@betterservers.com>
Committed: Thu Apr 25 22:35:54 2013 -0600
----------------------------------------------------------------------
server/src/com/cloud/vm/UserVmManagerImpl.java | 11 +++++++----
.../com/cloud/vm/VirtualMachineManagerImpl.java | 2 ++
2 files changed, 9 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f429c668/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index ebc5757..f58d6be 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -2902,10 +2902,15 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
}
UserVO user = _userDao.findById(userId);
-
+ boolean status = false;
try {
VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid());
- vmEntity.stop(new Long(userId).toString());
+ status = vmEntity.stop(new Long(userId).toString());
+ if (status) {
+ return _vmDao.findById(vmId);
+ } else {
+ return null;
+ }
} catch (ResourceUnavailableException e) {
throw new CloudRuntimeException(
"Unable to contact the agent to stop the virtual machine "
@@ -2915,8 +2920,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Use
"Unable to contact the agent to stop the virtual machine "
+ vm, e);
}
-
- return _vmDao.findById(vmId);
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f429c668/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 252fc99..b0d6378 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -1136,7 +1136,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
vmGuru.finalizeStop(profile, answer);
} catch (AgentUnavailableException e) {
+ s_logger.warn("Unable to stop vm, agent unavailable: " + e.toString());
} catch (OperationTimedoutException e) {
+ s_logger.warn("Unable to stop vm, operation timed out: " + e.toString());
} finally {
if (!stopped) {
if (!forced) {
[12/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Add icons for 'add account,' 'release from account'
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f1bdae00
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f1bdae00
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f1bdae00
Branch: refs/heads/marvin_refactor
Commit: f1bdae006ad9d9345a9f1707437b051b27c55492
Parents: 7cef521
Author: Brian Federle <br...@citrix.com>
Authored: Wed Apr 24 16:53:22 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Wed Apr 24 16:53:22 2013 -0700
----------------------------------------------------------------------
ui/css/cloudstack3.css | 16 ++++++++++++++++
ui/images/sprites.png | Bin 189677 -> 192407 bytes
2 files changed, 16 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f1bdae00/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 15190d4..340b089 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -12050,6 +12050,22 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
background-position: -263px -583px;
}
+.releaseFromAccount .icon {
+ background-position: -230px -123px;
+}
+
+.releaseFromAccount:hover .icon {
+ background-position: -229px -704px;
+}
+
+.addAccount .icon {
+ background-position: -231px -96px;
+}
+
+.addAccount:hover .icon {
+ background-position: -230px -677px;
+}
+
.label-hovered {
cursor: pointer;
color: #0000FF !important;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f1bdae00/ui/images/sprites.png
----------------------------------------------------------------------
diff --git a/ui/images/sprites.png b/ui/images/sprites.png
index ac7a276..132588d 100644
Binary files a/ui/images/sprites.png and b/ui/images/sprites.png differ
[32/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-1794 Throwing error when configuring egress rules for shared networks
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/318c7f2a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/318c7f2a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/318c7f2a
Branch: refs/heads/marvin_refactor
Commit: 318c7f2af0a664c057ec1ed057ccaad608339f62
Parents: 3a9001b
Author: Jayapal <ja...@citrix.com>
Authored: Fri Apr 26 14:28:02 2013 +0530
Committer: Murali Reddy <mu...@citrix.com>
Committed: Fri Apr 26 15:09:41 2013 +0530
----------------------------------------------------------------------
.../network/firewall/FirewallManagerImpl.java | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/318c7f2a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
index 080f7b0..4ad8868 100644
--- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
+++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java
@@ -27,6 +27,7 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import com.cloud.network.dao.*;
import org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -56,10 +57,6 @@ import com.cloud.network.Networks.TrafficType;
import com.cloud.network.NetworkManager;
import com.cloud.network.NetworkModel;
import com.cloud.network.NetworkRuleApplier;
-import com.cloud.network.dao.FirewallRulesCidrsDao;
-import com.cloud.network.dao.FirewallRulesDao;
-import com.cloud.network.dao.IPAddressDao;
-import com.cloud.network.dao.IPAddressVO;
import com.cloud.network.element.FirewallServiceProvider;
import com.cloud.network.element.NetworkACLServiceProvider;
import com.cloud.network.element.PortForwardingServiceProvider;
@@ -127,6 +124,8 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService,
@Inject
ResourceTagDao _resourceTagDao;
@Inject
+ NetworkDao _networkDao;
+ @Inject
VpcManager _vpcMgr;
@Inject List<FirewallServiceProvider> _firewallElements;
@@ -150,6 +149,11 @@ public class FirewallManagerImpl extends ManagerBase implements FirewallService,
@Override
public FirewallRule createEgressFirewallRule(FirewallRule rule) throws NetworkRuleConflictException {
Account caller = UserContext.current().getCaller();
+
+ Network network = _networkDao.findById(rule.getNetworkId());
+ if (network.getGuestType() == Network.GuestType.Shared) {
+ throw new InvalidParameterValueException("Egress firewall rules are not supported for " + network.getGuestType() + " networks");
+ }
return createFirewallRule(null, caller, rule.getXid(), rule.getSourcePortStart(),
rule.getSourcePortEnd(), rule.getProtocol(), rule.getSourceCidrList(), rule.getIcmpCode(),
[42/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Sort in alphabetical order (to avoid duplicate key) and better compare with l10n ressource files (already in alphabetical order)
Remove duplicate keys:
label.add.system.service.offering
label.dead.peer.detection
label.ESP.lifetime
label.IKE.lifetime
label.no.thanks
label.remove.project.account
label.tier
message.add.guest.network
message.enable.vpn
message.installWizard.copy.whatIsACluster
label.no.thanks
label.remove.project.account
message.enable.vpn
Remove bad keys name:
label.local.storage.enabled=Local Storage Enabled
label.totoal.of.ip
Signed-off-by: Milamber <mi...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2ec28ce1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2ec28ce1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2ec28ce1
Branch: refs/heads/marvin_refactor
Commit: 2ec28ce19c2c887f7c93d303d566bc1da2c3d96f
Parents: 774b2eb
Author: Milamber <mi...@apache.org>
Authored: Sat Apr 27 18:36:42 2013 +0000
Committer: Milamber <mi...@apache.org>
Committed: Sat Apr 27 19:05:37 2013 +0000
----------------------------------------------------------------------
ui/dictionary.jsp | 1720 ++++++++++++++++++++++++------------------------
1 files changed, 854 insertions(+), 866 deletions(-)
----------------------------------------------------------------------
[35/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - API: extend listSnapshots API to to take in zonetype.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7cf312a7
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7cf312a7
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7cf312a7
Branch: refs/heads/marvin_refactor
Commit: 7cf312a7707040c5f214b0c99c4189cf690c82b1
Parents: 1adec81
Author: Jessica Wang <je...@apache.org>
Authored: Fri Apr 26 11:18:42 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Fri Apr 26 11:19:35 2013 -0700
----------------------------------------------------------------------
.../command/user/snapshot/ListSnapshotsCmd.java | 7 +++
.../storage/snapshot/SnapshotManagerImpl.java | 32 ++++++++++-----
2 files changed, 29 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7cf312a7/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java
index 17f20ae..d7e6bc8 100644
--- a/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/ListSnapshotsCmd.java
@@ -58,6 +58,9 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd {
@Parameter(name=ApiConstants.VOLUME_ID, type=CommandType.UUID, entityType = VolumeResponse.class,
description="the ID of the disk volume")
private Long volumeId;
+
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -83,6 +86,10 @@ public class ListSnapshotsCmd extends BaseListTaggedResourcesCmd {
return volumeId;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7cf312a7/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
index 490948b..7dafe4a 100755
--- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
+++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java
@@ -58,6 +58,7 @@ import com.cloud.configuration.Resource.ResourceType;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.dc.ClusterVO;
import com.cloud.dc.DataCenter;
+import com.cloud.dc.DataCenterVO;
import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.domain.dao.DomainDao;
@@ -571,6 +572,7 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
String keyword = cmd.getKeyword();
String snapshotTypeStr = cmd.getSnapshotType();
String intervalTypeStr = cmd.getIntervalType();
+ String zoneType = cmd.getZoneType();
Map<String, String> tags = cmd.getTags();
Account caller = UserContext.current().getCaller();
@@ -602,17 +604,23 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
sb.and("snapshotTypeNEQ", sb.entity().getsnapshotType(), SearchCriteria.Op.NEQ);
if (tags != null && !tags.isEmpty()) {
- SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
- for (int count=0; count < tags.size(); count++) {
- tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
- tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
- tagSearch.cp();
- }
- tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
- sb.groupBy(sb.entity().getId());
- sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
- }
+ SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
+ for (int count=0; count < tags.size(); count++) {
+ tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
+ tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
+ tagSearch.cp();
+ }
+ tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
+ sb.groupBy(sb.entity().getId());
+ sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+ }
+ if(zoneType != null) {
+ SearchBuilder<DataCenterVO> zoneSb = _dcDao.createSearchBuilder();
+ zoneSb.and("zoneNetworkType", zoneSb.entity().getNetworkType(), SearchCriteria.Op.EQ);
+ sb.join("zoneSb", zoneSb, sb.entity().getDataCenterId(), zoneSb.entity().getId(), JoinBuilder.JoinType.INNER);
+ }
+
SearchCriteria<SnapshotVO> sc = sb.create();
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
@@ -630,6 +638,10 @@ public class SnapshotManagerImpl extends ManagerBase implements SnapshotManager,
}
}
+ if(zoneType != null) {
+ sc.setJoinParameters("zoneSb", "zoneNetworkType", zoneType);
+ }
+
if (name != null) {
sc.setParameters("name", "%" + name + "%");
}
[23/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-1910: UI- Regions menu - GSLB - View assigned load balancing - refresh data.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/64635abb
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/64635abb
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/64635abb
Branch: refs/heads/marvin_refactor
Commit: 64635abba5804767764e5d130ae6429c6b76b371
Parents: 6f60833
Author: Jessica Wang <je...@apache.org>
Authored: Thu Apr 25 16:03:02 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Apr 25 16:03:02 2013 -0700
----------------------------------------------------------------------
ui/scripts/regions.js | 27 ++++++++++++++++++---------
1 files changed, 18 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/64635abb/ui/scripts/regions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/regions.js b/ui/scripts/regions.js
index 334eb26..2bbbbee 100644
--- a/ui/scripts/regions.js
+++ b/ui/scripts/regions.js
@@ -461,18 +461,27 @@
id: 'lbUnderGSLB',
label: 'assigned load balancing',
fields: {
- 'name': { label: 'label.name' },
+ name: { label: 'label.name' },
publicport: { label: 'label.public.port' },
- privateport: { label: 'label.private.port' },
- algorithm: { label: 'label.algorithm' }
+ privateport: { label: 'label.private.port' },
+ algorithm: { label: 'label.algorithm' }
},
- dataProvider: function(args) {
- var items = args.context.GSLB[0].loadbalancerrule;
- args.response.success({
- data: items
- });
+ dataProvider: function(args) {
+ var data = {
+ id: args.context.GSLB[0].id
+ };
+ $.ajax({
+ url: createURL('listGlobalLoadBalancerRules'),
+ data: data,
+ success: function(json) {
+ var items = json.listgloballoadbalancerrulesresponse.globalloadbalancerrule[0].loadbalancerrule;
+ args.response.success({
+ data: items
+ });
+ }
+ });
},
- actions: {
+ actions: {
add: {
label: 'assign more load balancing',
messages: {
[17/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - UI: count total number of hosts based on selected option in zone type dropdown on top menu.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e8b6c7b3
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e8b6c7b3
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e8b6c7b3
Branch: refs/heads/marvin_refactor
Commit: e8b6c7b33da77fadef337168f43074802c1bf4d2
Parents: 5ce2890
Author: Jessica Wang <je...@apache.org>
Authored: Thu Apr 25 11:11:55 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Apr 25 11:14:20 2013 -0700
----------------------------------------------------------------------
ui/scripts/system.js | 16 +++++++++++-----
1 files changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e8b6c7b3/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 4692b61..312d5f4 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -246,13 +246,19 @@
},
hostCount: function(data) {
+ var data2= {
+ type: 'routing',
+ page: 1,
+ pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
$.ajax({
url: createURL('listHosts'),
- data: {
- type: 'routing',
- page: 1,
- pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
- },
+ data: data2,
success: function(json) {
dataFns.primaryStorageCount($.extend(data, {
hostCount: json.listhostsresponse.count ?
[11/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Add icon for 'change affinity' action
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7cef5212
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7cef5212
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7cef5212
Branch: refs/heads/marvin_refactor
Commit: 7cef52122796414e18e5d23b1bcdb2caed93361f
Parents: 25f2f0f
Author: Brian Federle <br...@citrix.com>
Authored: Wed Apr 24 16:46:17 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Wed Apr 24 16:46:17 2013 -0700
----------------------------------------------------------------------
ui/css/cloudstack3.css | 19 +++++++++++--------
ui/images/sprites.png | Bin 188552 -> 189677 bytes
2 files changed, 11 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7cef5212/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 5f916a6..15190d4 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -11690,7 +11690,6 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
background-position: 0px -707px;
}
-
.attach .icon,
.attachISO .icon,
.attachDisk .icon {
@@ -11874,16 +11873,13 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
}
.removeVlanRange .icon {
-
background-position: 1px -92px;
}
-.removeVlanRange:hover .icon{
-
+.removeVlanRange:hover .icon {
background-position: 1px -92px;
}
-
.resize .icon,
.updateResourceCount .icon {
background-position: -167px -66px;
@@ -11913,9 +11909,8 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
background-position: -168px -31px;
}
-.scaleUp .icon{
- background-position: -167px -66px;
-
+.scaleUp .icon {
+ background-position: -167px -66px;
}
.restoreVM:hover .icon,
@@ -12047,6 +12042,14 @@ div.ui-dialog div.autoscaler div.field-group div.form-container form div.form-it
background-position: -228px -646px;
}
+.changeAffinity .icon {
+ background-position: -264px -2px;
+}
+
+.changeAffinity:hover .icon {
+ background-position: -263px -583px;
+}
+
.label-hovered {
cursor: pointer;
color: #0000FF !important;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7cef5212/ui/images/sprites.png
----------------------------------------------------------------------
diff --git a/ui/images/sprites.png b/ui/images/sprites.png
index 03b01b3..ac7a276 100644
Binary files a/ui/images/sprites.png and b/ui/images/sprites.png differ
[09/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Fix review step label -- should be step 7, not 6
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/922b51ca
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/922b51ca
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/922b51ca
Branch: refs/heads/marvin_refactor
Commit: 922b51ca79f7658b8391d0be2bf894617834d6a5
Parents: 7b011e7
Author: Brian Federle <br...@citrix.com>
Authored: Mon Apr 22 14:02:58 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Mon Apr 22 14:02:58 2013 -0700
----------------------------------------------------------------------
ui/index.jsp | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/922b51ca/ui/index.jsp
----------------------------------------------------------------------
diff --git a/ui/index.jsp b/ui/index.jsp
index 1fbd662..bbb8b36 100644
--- a/ui/index.jsp
+++ b/ui/index.jsp
@@ -91,7 +91,7 @@ under the License.
<li><span class="number">4</span><span class="multiline"><fmt:message key="label.data.disk.offering"/></span><span class="arrow"></span></li>
<li><span class="number">5</span><span><fmt:message key="label.affinity"/></span><span class="arrow"></span></li>
<li><span class="number">6</span><span><fmt:message key="label.menu.network"/></span><span class="arrow"></span></li>
- <li class="last"><span class="number">6</span><span><fmt:message key="label.review"/></span></li>
+ <li class="last"><span class="number">7</span><span><fmt:message key="label.review"/></span></li>
</ul>
</div>
<form>
@@ -329,7 +329,7 @@ under the License.
</div>
</div>
</div>
- <!-- Step 6: Review -->
+ <!-- Step 7: Review -->
<div class="step review" wizard-step-id="review">
<div class="main-desc">
<fmt:message key="message.vm.review.launch"/>
[30/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2161 coping /etc/iptables/iptables-* to /etc/iptables/rules to work for old templates
In 4.2 templates iptables-persistent is looking for /etc/iptables/rules.v4 file but the old templates 4.1 and earlier
are looking for /etc/iptables/rules.
So coping the file to both rules and rules.v4
Signed-off-by: Abhinandan Prateek <ap...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c65ad6b8
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c65ad6b8
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c65ad6b8
Branch: refs/heads/marvin_refactor
Commit: c65ad6b8e80a90a535fded7e284dce8c74f94a98
Parents: c34233d
Author: Jayapal <ja...@citrix.com>
Authored: Thu Apr 25 15:19:31 2013 +0530
Committer: Abhinandan Prateek <ap...@apache.org>
Committed: Fri Apr 26 13:43:13 2013 +0530
----------------------------------------------------------------------
.../debian/config/etc/init.d/cloud-early-config | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c65ad6b8/patches/systemvm/debian/config/etc/init.d/cloud-early-config
----------------------------------------------------------------------
diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
index 187ae25..6ffd648 100755
--- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config
+++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config
@@ -520,6 +520,7 @@ setup_sshd(){
local eth=$2
[ -f /etc/ssh/sshd_config ] && sed -i -e "s/^[#]*ListenAddress.*$/ListenAddress $ip/" /etc/ssh/sshd_config
sed -i "/3922/s/eth./$eth/" /etc/iptables/rules.v4
+ sed -i "/3922/s/eth./$eth/" /etc/iptables/rules
}
@@ -692,6 +693,8 @@ setup_router() {
enable_fwding 1
chkconfig nfs-common off
cp /etc/iptables/iptables-router /etc/iptables/rules.v4
+#for old templates
+ cp /etc/iptables/iptables-router /etc/iptables/rules
setup_sshd $ETH1_IP "eth1"
}
@@ -764,6 +767,7 @@ EOF
disable_rpfilter
enable_fwding 1
cp /etc/iptables/iptables-vpcrouter /etc/iptables/rules.v4
+ cp /etc/iptables/iptables-vpcrouter /etc/iptables/rules
setup_sshd $ETH0_IP "eth0"
cp /etc/vpcdnsmasq.conf /etc/dnsmasq.conf
cp /etc/cloud-nic.rules /etc/udev/rules.d/cloud-nic.rules
@@ -790,6 +794,7 @@ setup_dhcpsrvr() {
enable_fwding 0
chkconfig nfs-common off
cp /etc/iptables/iptables-router /etc/iptables/rules.v4
+ cp /etc/iptables/iptables-router /etc/iptables/rules
if [ "$SSHONGUEST" == "true" ]
then
setup_sshd $ETH0_IP "eth0"
@@ -825,6 +830,7 @@ setup_secstorage() {
echo "$public_ip $NAME" >> /etc/hosts
cp /etc/iptables/iptables-secstorage /etc/iptables/rules.v4
+ cp /etc/iptables/iptables-secstorage /etc/iptables/rules
if [ "$hyp" == "vmware" ]; then
setup_sshd $ETH1_IP "eth1"
else
@@ -849,6 +855,7 @@ setup_console_proxy() {
sed -i /gateway/d /etc/hosts
echo "$public_ip $NAME" >> /etc/hosts
cp /etc/iptables/iptables-consoleproxy /etc/iptables/rules.v4
+ cp /etc/iptables/iptables-consoleproxy /etc/iptables/rules
if [ "$hyp" == "vmware" ]; then
setup_sshd $ETH1_IP "eth1"
else
@@ -874,6 +881,7 @@ setup_elbvm() {
echo "$public_ip $NAME" >> /etc/hosts
cp /etc/iptables/iptables-elbvm /etc/iptables/rules.v4
+ cp /etc/iptables/iptables-elbvm /etc/iptables/rules
if [ "$SSHONGUEST" == "true" ]
then
setup_sshd $ETH0_IP "eth0"
[10/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Merge branch 'master' into ui-vm-affinity
Conflicts:
ui/scripts/instances.js
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/25f2f0fc
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/25f2f0fc
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/25f2f0fc
Branch: refs/heads/marvin_refactor
Commit: 25f2f0fcb795017fb8e54af86814a1663eea21bb
Parents: 922b51c 8f5d8d5
Author: Brian Federle <br...@citrix.com>
Authored: Wed Apr 24 16:02:56 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Wed Apr 24 16:02:56 2013 -0700
----------------------------------------------------------------------
.../region/ha/GlobalLoadBalancingRulesService.java | 3 +
api/src/com/cloud/vm/UserVmService.java | 27 +-
.../org/apache/cloudstack/api/ApiConstants.java | 1 +
api/src/org/apache/cloudstack/api/BaseCmd.java | 24 +
.../command/admin/account/CreateAccountCmd.java | 14 +-
.../api/command/admin/vm/MigrateVMCmd.java | 2 +-
.../api/command/user/vm/DeployVMCmd.java | 12 +-
.../cloudstack/api/command/user/vm/ListVMsCmd.java | 10 +-
.../api/command/user/vm/UpdateVMCmd.java | 2 +-
.../api/command/user/volume/ListVolumesCmd.java | 7 +
.../cloudstack/api/response/ClusterResponse.java | 9 +-
.../api/response/DomainRouterResponse.java | 11 +
.../api/response/GlobalLoadBalancerResponse.java | 10 +
.../cloudstack/api/response/HostResponse.java | 9 +-
.../cloudstack/api/response/NetworkResponse.java | 7 +
.../cloudstack/api/response/PodResponse.java | 9 +-
.../cloudstack/api/response/SnapshotResponse.java | 16 +
.../api/response/StoragePoolResponse.java | 15 +-
.../cloudstack/api/response/SystemVmResponse.java | 11 +
.../cloudstack/api/response/TemplateResponse.java | 7 +
.../cloudstack/api/response/VolumeResponse.java | 8 +
.../com/cloud/bridge/service/core/s3/S3Engine.java | 2 +-
.../classes/resources/messages_zh_CN.properties | 2956 +++++++--------
core/src/com/cloud/vm/UserVmVO.java | 6 +-
debian/rules | 5 +-
docs/en-US/about-working-with-vms.xml | 85 +-
docs/en-US/append-displayname-vms.xml | 84 +
docs/en-US/changed-API-commands-4.2.xml | 16 +
docs/en-US/creating-network-offerings.xml | 45 +
docs/en-US/elastic-ip.xml | 90 +
docs/en-US/images/add-vlan-icon.png | Bin 0 -> 860 bytes
docs/en-US/network-offerings.xml | 83 +-
docs/en-US/networks.xml | 1 +
docs/en-US/non-contiguous-vlan.xml | 68 +
docs/en-US/set-up-network-for-users.xml | 13 +-
docs/en-US/using-netscaler-load-balancers.xml | 132 +-
docs/en-US/virtual-machines.xml | 1 +
docs/en-US/vlan-provisioning.xml | 2 +
docs/en-US/vm-snapshots.xml | 10 +-
packaging/centos63/package.sh | 1 +
.../debian/config/etc/init.d/cloud-early-config | 14 +-
.../hypervisor/kvm/resource/LibvirtConnection.java | 14 +-
server/src/com/cloud/api/ApiDBUtils.java | 9 +
server/src/com/cloud/api/ApiDispatcher.java | 9 -
server/src/com/cloud/api/ApiResponseHelper.java | 20 +
server/src/com/cloud/api/ApiServer.java | 155 +-
server/src/com/cloud/api/ApiServerService.java | 1 +
server/src/com/cloud/api/ApiServlet.java | 6 +-
.../src/com/cloud/api/query/QueryManagerImpl.java | 19 +-
.../api/query/dao/DomainRouterJoinDaoImpl.java | 1 +
.../com/cloud/api/query/dao/HostJoinDaoImpl.java | 1 +
.../api/query/dao/StoragePoolJoinDaoImpl.java | 1 +
.../com/cloud/api/query/dao/VolumeJoinDaoImpl.java | 3 +-
.../com/cloud/api/query/vo/DomainRouterJoinVO.java | 12 +
server/src/com/cloud/api/query/vo/HostJoinVO.java | 11 +
.../com/cloud/api/query/vo/StoragePoolJoinVO.java | 11 +
.../src/com/cloud/api/query/vo/VolumeJoinVO.java | 15 +
server/src/com/cloud/configuration/Config.java | 17 +-
.../configuration/ConfigurationManagerImpl.java | 13 +-
server/src/com/cloud/dc/dao/DataCenterDao.java | 2 +
server/src/com/cloud/dc/dao/DataCenterDaoImpl.java | 8 +
.../network/ExternalFirewallDeviceManagerImpl.java | 2 +-
.../src/com/cloud/network/NetworkServiceImpl.java | 2 +-
.../com/cloud/network/guru/GuestNetworkGuru.java | 2 +-
.../src/com/cloud/network/vpc/VpcManagerImpl.java | 31 +-
server/src/com/cloud/server/Criteria.java | 1 +
server/src/com/cloud/vm/UserVmManagerImpl.java | 99 +-
.../com/cloud/vm/VirtualMachineManagerImpl.java | 2 +-
.../gslb/GlobalLoadBalancingRulesServiceImpl.java | 14 +
.../test/com/cloud/vm/MockUserVmManagerImpl.java | 48 +-
server/test/com/cloud/vm/UserVmManagerTest.java | 45 +-
.../test/com/cloud/vm/dao/UserVmDaoImplTest.java | 43 +-
.../cloud/vm/dao/UserVmDaoTestConfiguration.java | 50 +
server/test/resources/UserVMDaoTestContext.xml | 44 +
.../resource/NfsSecondaryStorageResource.java | 22 +
setup/db/db/schema-410to420.sql | 334 ++-
test/integration/smoke/test_affinity_groups.py | 10 +-
.../smoke/test_deploy_vm_with_userdata.py | 144 +
test/integration/smoke/test_public_ip_range.py | 6 +-
test/integration/smoke/test_vm_life_cycle.py | 28 +-
tools/marvin/marvin/cloudstackConnection.py | 34 +-
tools/marvin/marvin/codegenerator.py | 4 +-
tools/marvin/marvin/integration/lib/base.py | 11 +-
ui/css/cloudstack3.css | 26 +-
ui/scripts/instances.js | 37 +-
ui/scripts/regions.js | 111 +-
ui/scripts/storage.js | 12 +-
ui/scripts/system.js | 91 +-
ui/scripts/zoneWizard.js | 29 +-
89 files changed, 3464 insertions(+), 1974 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/25f2f0fc/ui/css/cloudstack3.css
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/25f2f0fc/ui/scripts/instances.js
----------------------------------------------------------------------
diff --cc ui/scripts/instances.js
index b1c3e2e,0c4c7d2..f95f0a3
--- a/ui/scripts/instances.js
+++ b/ui/scripts/instances.js
@@@ -194,17 -194,17 +194,23 @@@
}
if("hosts" in args.context) {
- $.extend(data, {
- hostid: args.context.hosts[0].id
- });
- }
-
+ $.extend(data, {
+ hostid: args.context.hosts[0].id
+ });
+ }
+
+ if("affinityGroups" in args.context) {
+ $.extend(data, {
+ affinitygroupid: args.context.affinityGroups[0].id
+ });
+ }
-
++
+ if(args.context.zoneType != null && args.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data, {
+ zonetype: args.context.zoneType
+ });
- }
-
++ }
++
$.ajax({
url: createURL('listVirtualMachines'),
data: data,
[24/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2196 and CLOUDSTACK-2126: fix missing async job status in
listXXX api and incorrect async job status in other async api.
Conflicts:
server/src/com/cloud/api/query/vo/AccountJoinVO.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/efb4471d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/efb4471d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/efb4471d
Branch: refs/heads/marvin_refactor
Commit: efb4471dc9b8204fd97e2f053fca0dfe1e9d922b
Parents: 64635ab
Author: Min Chen <mi...@citrix.com>
Authored: Thu Apr 25 17:40:18 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Thu Apr 25 17:40:18 2013 -0700
----------------------------------------------------------------------
core/src/com/cloud/async/AsyncJobVO.java | 1 +
.../cloud/api/query/dao/AccountJoinDaoImpl.java | 6 ++++--
.../api/query/dao/DomainRouterJoinDaoImpl.java | 6 ++++--
.../com/cloud/api/query/dao/HostJoinDaoImpl.java | 6 ++++--
.../api/query/dao/SecurityGroupJoinDaoImpl.java | 6 ++++--
.../api/query/dao/StoragePoolJoinDaoImpl.java | 6 ++++--
.../api/query/dao/UserAccountJoinDaoImpl.java | 6 ++++--
.../com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 6 ++++--
.../com/cloud/api/query/dao/VolumeJoinDaoImpl.java | 6 ++++--
.../src/com/cloud/api/query/vo/AccountJoinVO.java | 6 +++---
.../com/cloud/api/query/vo/DomainRouterJoinVO.java | 6 +++---
server/src/com/cloud/api/query/vo/HostJoinVO.java | 6 +++---
.../cloud/api/query/vo/SecurityGroupJoinVO.java | 6 +++---
.../com/cloud/api/query/vo/StoragePoolJoinVO.java | 6 +++---
.../com/cloud/api/query/vo/UserAccountJoinVO.java | 6 +++---
.../src/com/cloud/api/query/vo/UserVmJoinVO.java | 6 +++---
.../src/com/cloud/api/query/vo/VolumeJoinVO.java | 6 +++---
17 files changed, 57 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/core/src/com/cloud/async/AsyncJobVO.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/async/AsyncJobVO.java b/core/src/com/cloud/async/AsyncJobVO.java
index ad482b0..c40fc98 100644
--- a/core/src/com/cloud/async/AsyncJobVO.java
+++ b/core/src/com/cloud/async/AsyncJobVO.java
@@ -133,6 +133,7 @@ public class AsyncJobVO implements AsyncJob {
this.callbackType = CALLBACK_POLLING;
this.uuid = UUID.randomUUID().toString();
this.instanceId = instanceId;
+ this.instanceType = instanceType;
}
public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java
index 796ae54..528bdac 100644
--- a/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java
@@ -203,8 +203,10 @@ public class AccountJoinDaoImpl extends GenericDaoBase<AccountJoinVO, Long> impl
accountResponse.setObjectName("account");
// set async job
- accountResponse.setJobId(account.getJobUuid());
- accountResponse.setJobStatus(account.getJobStatus());
+ if (account.getJobId() != null) {
+ accountResponse.setJobId(account.getJobUuid());
+ accountResponse.setJobStatus(account.getJobStatus());
+ }
return accountResponse;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
index 25cd62f..125db17 100644
--- a/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java
@@ -158,8 +158,10 @@ public class DomainRouterJoinDaoImpl extends GenericDaoBase<DomainRouterJoinVO,
routerResponse.setVpcId(router.getVpcUuid());
// set async job
- routerResponse.setJobId(router.getJobUuid());
- routerResponse.setJobStatus(router.getJobStatus());
+ if (router.getJobId() != null) {
+ routerResponse.setJobId(router.getJobUuid());
+ routerResponse.setJobStatus(router.getJobStatus());
+ }
routerResponse.setObjectName("router");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java
index c678f2f..c1c2839 100644
--- a/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java
@@ -183,8 +183,10 @@ public class HostJoinDaoImpl extends GenericDaoBase<HostJoinVO, Long> implements
hostResponse.setResourceState(host.getResourceState().toString());
// set async job
- hostResponse.setJobId(host.getJobUuid());
- hostResponse.setJobStatus(host.getJobStatus());
+ if (host.getJobId() != null) {
+ hostResponse.setJobId(host.getJobUuid());
+ hostResponse.setJobStatus(host.getJobStatus());
+ }
hostResponse.setObjectName("host");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
index 3e579c1..2a6afca 100644
--- a/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java
@@ -117,8 +117,10 @@ public class SecurityGroupJoinDaoImpl extends GenericDaoBase<SecurityGroupJoinVO
}
// set async job
- sgResponse.setJobId(vsg.getJobUuid());
- sgResponse.setJobStatus(vsg.getJobStatus());
+ if (vsg.getJobId() != null) {
+ sgResponse.setJobId(vsg.getJobUuid());
+ sgResponse.setJobStatus(vsg.getJobStatus());
+ }
sgResponse.setObjectName("securitygroup");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
index 260ff4d..e401f44 100644
--- a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
@@ -103,8 +103,10 @@ public class StoragePoolJoinDaoImpl extends GenericDaoBase<StoragePoolJoinVO, Lo
poolResponse.setTags(pool.getTag());
// set async job
- poolResponse.setJobId(pool.getJobUuid());
- poolResponse.setJobStatus(pool.getJobStatus());
+ if (pool.getJobId() != null) {
+ poolResponse.setJobId(pool.getJobUuid());
+ poolResponse.setJobStatus(pool.getJobStatus());
+ }
poolResponse.setObjectName("storagepool");
return poolResponse;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java
index 43b3a2d..390f28c 100644
--- a/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java
@@ -83,8 +83,10 @@ public class UserAccountJoinDaoImpl extends GenericDaoBase<UserAccountJoinVO, Lo
userResponse.setIsDefault(usr.isDefault());
// set async job
- userResponse.setJobId(usr.getJobUuid());
- userResponse.setJobStatus(usr.getJobStatus());
+ if (usr.getJobId() != null) {
+ userResponse.setJobId(usr.getJobUuid());
+ userResponse.setJobStatus(usr.getJobStatus());
+ }
userResponse.setObjectName("user");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/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 2bb7ee9..6513ef5 100644
--- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@ -134,8 +134,10 @@ public class UserVmJoinDaoImpl extends GenericDaoBase<UserVmJoinVO, Long> implem
}
}
userVmResponse.setPassword(userVm.getPassword());
- userVmResponse.setJobId(userVm.getJobUuid());
- userVmResponse.setJobStatus(userVm.getJobStatus());
+ if (userVm.getJobId() != null) {
+ userVmResponse.setJobId(userVm.getJobUuid());
+ userVmResponse.setJobStatus(userVm.getJobStatus());
+ }
//userVmResponse.setForVirtualNetwork(userVm.getForVirtualNetwork());
userVmResponse.setPublicIpId(userVm.getPublicIpUuid());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
index a7a0bf0..a09c4a0 100644
--- a/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java
@@ -197,8 +197,10 @@ public class VolumeJoinDaoImpl extends GenericDaoBase<VolumeJoinVO, Long> implem
volResponse.setExtractable(isExtractable);
// set async job
- volResponse.setJobId(volume.getJobUuid());
- volResponse.setJobStatus(volume.getJobStatus());
+ if (volume.getJobId() != null) {
+ volResponse.setJobId(volume.getJobUuid());
+ volResponse.setJobStatus(volume.getJobStatus());
+ }
volResponse.setObjectName("volume");
return volResponse;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/AccountJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/AccountJoinVO.java b/server/src/com/cloud/api/query/vo/AccountJoinVO.java
index 800da78..fbcc934 100644
--- a/server/src/com/cloud/api/query/vo/AccountJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/AccountJoinVO.java
@@ -177,7 +177,7 @@ public class AccountJoinVO extends BaseViewVO implements InternalIdentity, Ident
private Long secondaryStorageTotal;
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -645,12 +645,12 @@ public class AccountJoinVO extends BaseViewVO implements InternalIdentity, Ident
}
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java
index 5f2b500..83e1547 100644
--- a/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java
@@ -210,7 +210,7 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti
private String projectName;
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -781,14 +781,14 @@ public class DomainRouterJoinVO extends BaseViewVO implements ControlledViewEnti
}
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/HostJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/HostJoinVO.java b/server/src/com/cloud/api/query/vo/HostJoinVO.java
index 4aa45e5..4b70cfc 100644
--- a/server/src/com/cloud/api/query/vo/HostJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/HostJoinVO.java
@@ -168,7 +168,7 @@ public class HostJoinVO extends BaseViewVO implements InternalIdentity, Identity
private long cpuReservedCapacity;
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -427,11 +427,11 @@ public class HostJoinVO extends BaseViewVO implements InternalIdentity, Identity
this.osCategoryName = osCategoryName;
}
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java
index 922e130..258b613 100644
--- a/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java
@@ -77,7 +77,7 @@ public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEnt
private String projectName;
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -269,11 +269,11 @@ public class SecurityGroupJoinVO extends BaseViewVO implements ControlledViewEnt
this.projectName = projectName;
}
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java b/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java
index da06227..d86726c 100644
--- a/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java
@@ -121,7 +121,7 @@ public class StoragePoolJoinVO extends BaseViewVO implements InternalIdentity, I
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -342,11 +342,11 @@ public class StoragePoolJoinVO extends BaseViewVO implements InternalIdentity, I
this.reservedCapacity = reservedCapacity;
}
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java
index d85392f..c44027b 100644
--- a/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/UserAccountJoinVO.java
@@ -109,7 +109,7 @@ public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity, I
private String domainPath = null;
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -324,11 +324,11 @@ public class UserAccountJoinVO extends BaseViewVO implements InternalIdentity, I
this.loginAttempts = loginAttempts;
}
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/UserVmJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/UserVmJoinVO.java b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java
index a50906d..d7b516c 100644
--- a/server/src/com/cloud/api/query/vo/UserVmJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/UserVmJoinVO.java
@@ -332,7 +332,7 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity {
private String keypairName;
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -1608,14 +1608,14 @@ public class UserVmJoinVO extends BaseViewVO implements ControlledViewEntity {
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/efb4471d/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
index 8a4bfe5..2d7b1d5 100644
--- a/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
+++ b/server/src/com/cloud/api/query/vo/VolumeJoinVO.java
@@ -206,7 +206,7 @@ public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity {
private Storage.TemplateType templateType;
@Column(name="job_id")
- private long jobId;
+ private Long jobId;
@Column(name="job_uuid")
private String jobUuid;
@@ -817,13 +817,13 @@ public class VolumeJoinVO extends BaseViewVO implements ControlledViewEntity {
- public long getJobId() {
+ public Long getJobId() {
return jobId;
}
- public void setJobId(long jobId) {
+ public void setJobId(Long jobId) {
this.jobId = jobId;
}
[02/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2074: cloudstack UI - Affinity - Instances page - Change Affinity action - implement API call.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/35681f3e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/35681f3e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/35681f3e
Branch: refs/heads/marvin_refactor
Commit: 35681f3e06fc17e2a499e76a0c3694aac995c328
Parents: b03fb20
Author: Jessica Wang <je...@citrix.com>
Authored: Fri Apr 19 17:37:22 2013 -0700
Committer: Jessica Wang <je...@citrix.com>
Committed: Fri Apr 19 17:37:22 2013 -0700
----------------------------------------------------------------------
ui/scripts/instances.js | 40 ++++++++++++++++++++++++++++++++++------
1 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/35681f3e/ui/scripts/instances.js
----------------------------------------------------------------------
diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js
index 8699b4d..b497a78 100644
--- a/ui/scripts/instances.js
+++ b/ui/scripts/instances.js
@@ -679,20 +679,48 @@
}
}
},
- action: function(args) {
- args.response.success();
+ action: function(args) {
+ var affinityGroupIdArray = [];
+ if(args.context.affinityGroups != null) {
+ for(var i = 0; i < args.context.affinityGroups.length; i++) {
+ if(args.context.affinityGroups[i]._isSelected == true) {
+ affinityGroupIdArray.push(args.context.affinityGroups[i].id);
+ }
+ }
+ }
+ var data = {
+ id: args.context.instances[0].id,
+ affinitygroupids: affinityGroupIdArray.join(",")
+ };
+ $.ajax({
+ url: createURL('updateVMAffinityGroup'),
+ data: data,
+ success: function(json) {
+ var jid = json.updatevirtualmachineresponse.jobid;
+ args.response.success(
+ {_custom:
+ {jobId: jid,
+ getUpdatedItem: function(json) {
+ return json.queryasyncjobresultresponse.jobresult.virtualmachine;
+ },
+ getActionFilter: function() {
+ return vmActionfilter;
+ }
+ }
+ }
+ );
+ }
+ });
}
})
},
messages: {
notification: function(args) {
- return 'label.action.enable.static.NAT';
+ return 'Change affinity';
}
},
notification: {
- poll: function(args) {
- args.complete();
- }
+ poll: pollAsyncJobResult
}
},
[13/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2172: adding database upgrade to 4.1.0 in PremiumDatabaseUpgradeChecker
Add migration to 4.1.0 in the PremiumDatabaseUpgradeChecker, like in the
DatabaseUpgradeChecker.
I opened the ticket CS 2172, and this fix corrects the issue.
Regards.
Signed-off-by: Chip Childers <ch...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/099677a1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/099677a1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/099677a1
Branch: refs/heads/marvin_refactor
Commit: 099677a1244cd55fb98d3c40ee7881223dd9ac7c
Parents: 6bc0b70
Author: Nicolas Lamirault <ni...@orange.com>
Authored: Thu Apr 25 15:14:34 2013 +0100
Committer: Chip Childers <ch...@gmail.com>
Committed: Thu Apr 25 15:20:26 2013 +0100
----------------------------------------------------------------------
.../upgrade/PremiumDatabaseUpgradeChecker.java | 75 ++++++++-------
1 files changed, 42 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/099677a1/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java b/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java
index 14a8143..bad3253 100755
--- a/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java
+++ b/server/src/com/cloud/upgrade/PremiumDatabaseUpgradeChecker.java
@@ -40,6 +40,7 @@ import com.cloud.upgrade.dao.Upgrade229to2210;
import com.cloud.upgrade.dao.Upgrade301to302;
import com.cloud.upgrade.dao.Upgrade302to40;
import com.cloud.upgrade.dao.Upgrade30to301;
+import com.cloud.upgrade.dao.Upgrade40to41;
import com.cloud.upgrade.dao.UpgradeSnapshot217to224;
import com.cloud.upgrade.dao.UpgradeSnapshot223to224;
import com.cloud.upgrade.dao.VersionDaoImpl;
@@ -53,87 +54,95 @@ public class PremiumDatabaseUpgradeChecker extends DatabaseUpgradeChecker {
new Upgrade221to222Premium(), new UpgradeSnapshot217to224(), new Upgrade222to224Premium(),
new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228Premium(), new Upgrade228to229(),
new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(),
- new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
- new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
+ new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.1.8", new DbUpgrade[] { new Upgrade218to22Premium(), new Upgrade221to222Premium(),
new UpgradeSnapshot217to224(), new Upgrade222to224Premium(), new Upgrade218to224DomainVlans(),
new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228Premium(), new Upgrade228to229(),
- new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(), new Upgrade2212to2213()
- , new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
- new Upgrade302to40() });
+ new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(), new Upgrade2212to2213(),
+ new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
+ new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.1.9", new DbUpgrade[] { new Upgrade218to22Premium(), new Upgrade221to222Premium(),
new UpgradeSnapshot217to224(), new Upgrade222to224Premium(), new Upgrade218to224DomainVlans(),
new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228Premium(), new Upgrade228to229(),
new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(), new Upgrade2212to2213(),
- new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
- new Upgrade302to40() });
+ new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
+ new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.1", new DbUpgrade[] { new Upgrade221to222Premium(), new Upgrade222to224Premium(),
new UpgradeSnapshot223to224(), new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228Premium(),
new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(),
- new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
- new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
+ new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.2", new DbUpgrade[] { new Upgrade222to224Premium(), new UpgradeSnapshot223to224(),
new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228Premium(), new Upgrade228to229(),
new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(), new Upgrade2212to2213(),
- new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
- new Upgrade302to40() });
+ new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
+ new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.3", new DbUpgrade[] { new Upgrade222to224Premium(), new UpgradeSnapshot223to224(),
new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228Premium(), new Upgrade228to229(),
new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(), new Upgrade2212to2213(),
- new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
+ new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.4", new DbUpgrade[] { new Upgrade224to225(), new Upgrade225to226(), new Upgrade227to228Premium(),
new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(),
- new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
- new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
+ new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.5", new DbUpgrade[] { new Upgrade225to226(), new Upgrade227to228Premium(), new Upgrade228to229(),
new Upgrade229to2210(), new Upgrade2210to2211(), new Upgrade2211to2212Premium(),
- new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
- new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
+ new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.6", new DbUpgrade[] { new Upgrade227to228Premium(), new Upgrade228to229(), new Upgrade229to2210(),
new Upgrade2210to2211(), new Upgrade2211to2212Premium(), new Upgrade2212to2213(),
- new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
+ new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.7", new DbUpgrade[] { new Upgrade227to228Premium(), new Upgrade228to229(), new Upgrade229to2210(),
new Upgrade2210to2211(), new Upgrade2211to2212Premium(), new Upgrade2212to2213(),
- new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
+ new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.8", new DbUpgrade[] { new Upgrade228to229(), new Upgrade229to2210(), new Upgrade2210to2211(),
new Upgrade2211to2212Premium(), new Upgrade2212to2213(), new Upgrade2213to2214(),
- new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.9", new DbUpgrade[] { new Upgrade229to2210(), new Upgrade2210to2211(),
new Upgrade2211to2212Premium(), new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(),
- new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.10", new DbUpgrade[] { new Upgrade2210to2211(), new Upgrade2211to2212Premium(),
new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
- new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.11", new DbUpgrade[] { new Upgrade2211to2212Premium(), new Upgrade2212to2213(),
new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
- new Upgrade302to40() });
+ new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.12", new DbUpgrade[] { new Upgrade2212to2213(), new Upgrade2213to2214(), new Upgrade2214to30(),
- new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40() });
+ new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
- _upgradeMap.put("2.2.13", new DbUpgrade[] { new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
- new Upgrade301to302(), new Upgrade302to40() });
+ _upgradeMap.put("2.2.13", new DbUpgrade[] { new Upgrade2213to2214(), new Upgrade2214to30(), new Upgrade30to301(),
+ new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
_upgradeMap.put("2.2.14", new DbUpgrade[] { new Upgrade2214to30(), new Upgrade30to301(), new Upgrade301to302(),
- new Upgrade302to40() });
-
- _upgradeMap.put("3.0.0", new DbUpgrade[] { new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40() });
-
- _upgradeMap.put("3.0.1", new DbUpgrade[] { new Upgrade301to302(), new Upgrade302to40() });
-
- _upgradeMap.put("3.0.2", new DbUpgrade[] { new Upgrade302to40() });
- }
+ new Upgrade302to40(), new Upgrade40to41() });
+
+ _upgradeMap.put("3.0.0", new DbUpgrade[] { new Upgrade30to301(), new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
+
+ _upgradeMap.put("3.0.1", new DbUpgrade[] { new Upgrade301to302(), new Upgrade302to40(), new Upgrade40to41() });
+
+ _upgradeMap.put("3.0.2", new DbUpgrade[] { new Upgrade302to40(), new Upgrade40to41() });
+
+ _upgradeMap.put("4.0.0", new DbUpgrade[] { new Upgrade40to41() });
+
+ _upgradeMap.put("4.0.1", new DbUpgrade[] { new Upgrade40to41() });
+
+ _upgradeMap.put("4.0.2", new DbUpgrade[] { new Upgrade40to41() }); }
}
[39/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - API: extend listTemplates, listIsos API to to take in zonetype.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/45dbd9cd
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/45dbd9cd
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/45dbd9cd
Branch: refs/heads/marvin_refactor
Commit: 45dbd9cdc6d0adc7f69bf1e3fa7b5964ac916fe5
Parents: 1f0863f
Author: Jessica Wang <je...@citrix.com>
Authored: Sat Apr 27 11:02:02 2013 -0700
Committer: Jessica Wang <je...@citrix.com>
Committed: Sat Apr 27 11:02:02 2013 -0700
----------------------------------------------------------------------
.../api/command/user/iso/ListIsosCmd.java | 7 +++++++
.../command/user/template/ListTemplatesCmd.java | 8 ++++++++
.../src/com/cloud/server/ManagementServerImpl.java | 12 ++++++------
.../src/com/cloud/storage/dao/VMTemplateDao.java | 2 +-
.../com/cloud/storage/dao/VMTemplateDaoImpl.java | 11 +++++++----
5 files changed, 29 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/45dbd9cd/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
index 3219601..f872c12 100644
--- a/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/iso/ListIsosCmd.java
@@ -78,6 +78,9 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd {
description="the ID of the zone")
private Long zoneId;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -115,6 +118,10 @@ public class ListIsosCmd extends BaseListTaggedResourcesCmd {
return zoneId;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
public boolean listInReadyState() {
Account account = UserContext.current().getCaller();
// It is account specific if account is admin type and domainId and accountName are not null
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/45dbd9cd/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
index aeb76f5..f0fc241 100644
--- a/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/template/ListTemplatesCmd.java
@@ -68,6 +68,10 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd {
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class,
description="list templates by zoneId")
private Long zoneId;
+
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -92,6 +96,10 @@ public class ListTemplatesCmd extends BaseListTaggedResourcesCmd {
return zoneId;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
public boolean listInReadyState() {
Account account = UserContext.current().getCaller();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/45dbd9cd/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 16127a2..0da8d4f 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -1309,7 +1309,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
HypervisorType hypervisorType = HypervisorType.getType(cmd.getHypervisor());
return listTemplates(cmd.getId(), cmd.getIsoName(), cmd.getKeyword(), isoFilter, true, cmd.isBootable(), cmd.getPageSizeVal(),
cmd.getStartIndex(), cmd.getZoneId(), hypervisorType, true, cmd.listInReadyState(), permittedAccounts, caller,
- listProjectResourcesCriteria, tags);
+ listProjectResourcesCriteria, tags, cmd.getZoneType());
}
@Override
@@ -1342,12 +1342,12 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
HypervisorType hypervisorType = HypervisorType.getType(cmd.getHypervisor());
return listTemplates(id, cmd.getTemplateName(), cmd.getKeyword(), templateFilter, false, null, cmd.getPageSizeVal(), cmd.getStartIndex(),
- cmd.getZoneId(), hypervisorType, showDomr, cmd.listInReadyState(), permittedAccounts, caller, listProjectResourcesCriteria, tags);
+ cmd.getZoneId(), hypervisorType, showDomr, cmd.listInReadyState(), permittedAccounts, caller, listProjectResourcesCriteria, tags, cmd.getZoneType());
}
private Set<Pair<Long, Long>> listTemplates(Long templateId, String name, String keyword, TemplateFilter templateFilter, boolean isIso,
Boolean bootable, Long pageSize, Long startIndex, Long zoneId, HypervisorType hyperType, boolean showDomr, boolean onlyReady,
- List<Account> permittedAccounts, Account caller, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
+ List<Account> permittedAccounts, Account caller, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags, String zoneType) {
VMTemplateVO template = null;
if (templateId != null) {
@@ -1388,7 +1388,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, tags);
Set<Pair<Long, Long>> templateZonePairSet2 = new HashSet<Pair<Long, Long>>();
templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize,
- startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags);
+ startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags, zoneType);
for (Pair<Long, Long> tmpltPair : templateZonePairSet2) {
if (!templateZonePairSet.contains(new Pair<Long, Long>(tmpltPair.first(), -1L))) {
@@ -1412,7 +1412,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
Set<Pair<Long, Long>> templateZonePairSet2 = new HashSet<Pair<Long, Long>>();
templateZonePairSet2 = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers,
bootable, domain, pageSize, startIndex, zoneId, hyperType, onlyReady, showDomr,
- permittedAccounts, caller, listProjectResourcesCriteria, tags);
+ permittedAccounts, caller, listProjectResourcesCriteria, tags, zoneType);
for (Pair<Long, Long> tmpltPair : templateZonePairSet2) {
if (!templateZonePairSet.contains(new Pair<Long, Long>(tmpltPair.first(), -1L))) {
@@ -1430,7 +1430,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
} else {
if (template == null) {
templateZonePairSet = _templateDao.searchTemplates(name, keyword, templateFilter, isIso, hypers, bootable, domain, pageSize,
- startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags);
+ startIndex, zoneId, hyperType, onlyReady, showDomr, permittedAccounts, caller, listProjectResourcesCriteria, tags, zoneType);
} else {
// if template is not public, perform permission check here
if (!template.isPublicTemplate() && caller.getType() != Account.ACCOUNT_TYPE_ADMIN) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/45dbd9cd/server/src/com/cloud/storage/dao/VMTemplateDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplateDao.java b/server/src/com/cloud/storage/dao/VMTemplateDao.java
index 7263371..3f1fe93 100755
--- a/server/src/com/cloud/storage/dao/VMTemplateDao.java
+++ b/server/src/com/cloud/storage/dao/VMTemplateDao.java
@@ -56,7 +56,7 @@ public interface VMTemplateDao extends GenericDao<VMTemplateVO, Long>, StateDao<
public Set<Pair<Long, Long>> searchTemplates(String name, String keyword, TemplateFilter templateFilter, boolean isIso,
List<HypervisorType> hypers, Boolean bootable, DomainVO domain, Long pageSize, Long startIndex, Long zoneId,
HypervisorType hyperType, boolean onlyReady, boolean showDomr, List<Account> permittedAccounts, Account caller,
- ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags);
+ ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags, String zoneType);
public Set<Pair<Long, Long>> searchSwiftTemplates(String name, String keyword, TemplateFilter templateFilter,
boolean isIso, List<HypervisorType> hypers, Boolean bootable, DomainVO domain, Long pageSize, Long startIndex,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/45dbd9cd/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
index d9a26d3..3b37f24 100755
--- a/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -520,7 +520,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
public Set<Pair<Long, Long>> searchTemplates(String name, String keyword, TemplateFilter templateFilter,
boolean isIso, List<HypervisorType> hypers, Boolean bootable, DomainVO domain, Long pageSize, Long startIndex,
Long zoneId, HypervisorType hyperType, boolean onlyReady, boolean showDomr,List<Account> permittedAccounts,
- Account caller, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
+ Account caller, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags, String zoneType) {
StringBuilder builder = new StringBuilder();
if (!permittedAccounts.isEmpty()) {
for (Account permittedAccount : permittedAccounts) {
@@ -561,7 +561,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
sql = SELECT_TEMPLATE_HOST_REF;
groupByClause = " GROUP BY t.id, h.data_center_id ";
}
- if ((templateFilter == TemplateFilter.featured) || (templateFilter == TemplateFilter.community)) {
+ if (((templateFilter == TemplateFilter.featured) || (templateFilter == TemplateFilter.community)) ||(zoneType != null && zoneId != null)) {
dataCenterJoin = " INNER JOIN data_center dc on (h.data_center_id = dc.id)";
}
@@ -691,7 +691,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
}
sql += whereClause + getExtrasWhere(templateFilter, name, keyword, isIso, bootable, hyperType, zoneId,
- onlyReady, showDomr) + groupByClause + getOrderByLimit(pageSize, startIndex);
+ onlyReady, showDomr, zoneType) + groupByClause + getOrderByLimit(pageSize, startIndex);
pstmt = txn.prepareStatement(sql);
rs = pstmt.executeQuery();
@@ -752,7 +752,7 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
return templateZonePairList;
}
- private String getExtrasWhere(TemplateFilter templateFilter, String name, String keyword, boolean isIso, Boolean bootable, HypervisorType hyperType, Long zoneId, boolean onlyReady, boolean showDomr) {
+ private String getExtrasWhere(TemplateFilter templateFilter, String name, String keyword, boolean isIso, Boolean bootable, HypervisorType hyperType, Long zoneId, boolean onlyReady, boolean showDomr, String zoneType) {
String sql = "";
if (keyword != null) {
sql += " t.name LIKE \"%" + keyword + "%\" AND";
@@ -783,6 +783,9 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
}
}else if (zoneId != null){
sql += " AND tzr.zone_id = " +zoneId+ " AND tzr.removed is null" ;
+ if (zoneType != null){
+ sql += " AND dc.networktype = " + zoneType;
+ }
}else{
sql += " AND tzr.removed is null ";
}
[49/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
transform based on prepositions to auto-generate
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/e89e4e7d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e89e4e7d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e89e4e7d
Branch: refs/heads/marvin_refactor
Commit: e89e4e7d6c64696b2c73e115260112f199985986
Parents: 8b1702b
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Mon Apr 29 18:40:44 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Mon Apr 29 18:40:44 2013 +0530
----------------------------------------------------------------------
tools/marvin/marvin/cs_entity_generator.py | 69 +++++++++++++++++------
1 files changed, 51 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e89e4e7d/tools/marvin/marvin/cs_entity_generator.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cs_entity_generator.py b/tools/marvin/marvin/cs_entity_generator.py
index f0c5fb8..3b3f85a 100644
--- a/tools/marvin/marvin/cs_entity_generator.py
+++ b/tools/marvin/marvin/cs_entity_generator.py
@@ -83,35 +83,64 @@ def singularize(word, num=0):
return inflector.singular_noun(word)
-def transform_entity(entity):
- if entity == 'DefaultZoneForAccount':
- #markDefaultZoneForAccount -> Zone
- return 'Zone'
- elif entity in ['ToGlobalLoadBalancerRule', 'FromGlobalLoadBalancerRule']:
- return 'GlobalLoadBalancerRule'
- elif entity in ['AccountToProject', 'AccountFromProject']:
- return 'Project'
- elif entity in ['ToSnapshot']:
- return 'Snapshot'
- return entity
+def transform_api(api):
+ """Brute-force transform for entities that don't match other transform rules
+ """
+
+ if api == 'markDefaultZoneForAccount':
+ #markDefaultZoneForAccount -> Account.markDefaultZone
+ return 'markDefaultZone', 'Account'
+ return api, None
+
+
+def prepositon_transformer(preposition=None):
+ """Returns a transformer for the entity if it has a doXPrepositionY style API
+
+ @param entity: The entity eg: resetPasswordForVirtualMachine, preposition=For
+ @return: transformed entity, Y is the entity and doX is the verb, eg: VirtualMachine, resetPassword
+ """
+ def transform_api(api):
+ if api.find(preposition) > 0:
+ if api[api.find(preposition) + len(preposition)].isupper():
+ return api[:api.find(preposition)], api[api.find(preposition) + len(preposition):]
+ return api, None
+ return transform_api
def skip_list():
- """Entities and APIs that we will not auto-generate
+ """APIs that we will not auto-generate
"""
return ['ldapConfigCmd', 'ldapRemoveCmd']
+def get_transformers():
+ """ List of transform rules as lambdas
+ """
+ transformers = [prepositon_transformer('Of'),
+ prepositon_transformer('For'),
+ prepositon_transformer('To'),
+ prepositon_transformer('From'),
+ transform_api]
+ return transformers
+
+
def get_verb_and_entity(cmd):
"""Break down the API cmd instance in to `verb` and `Entity`
@return: verb, Entity tuple
"""
api = cmd.__class__.__name__
+ #apply known list of transformations
+ for transformer in get_transformers():
+ api = api.replace('Cmd', '')
+ if transformer(api)[0] != api:
+ print "Transforming using %s, %s -> %s" % (transformer.__name__, api, transformer(api))
+ return transformer(api)[0], \
+ singularize(transformer(api)[1]) if singularize(transformer(api)[1]) else transformer(api)[1]
+
matching_verbs = filter(lambda v: api.startswith(v), grammar)
if len(matching_verbs) > 0:
verb = matching_verbs[0]
entity = api.replace(verb, '').replace('Cmd', '')
- entity = transform_entity(entity)
return verb, singularize(entity) if singularize(entity) else entity
else:
print "No matching verb, entity breakdown for api %s" % api
@@ -168,7 +197,7 @@ def write_entity_classes(entities, module=None):
if action not in ['create', 'deploy']:
if len(details['args']) > 0:
body.append(tabspace + 'def %s(self, apiclient, %s, **kwargs):' % (
- action, ', '.join(list(set(details['args'])))))
+ action, ', '.join(list(set(details['args'])))))
else:
body.append(tabspace + 'def %s(self, apiclient, **kwargs):' % (action))
body.append(tabspace * 2 + 'cmd = %(module)s.%(command)s()' % {"module": details["apimodule"],
@@ -182,7 +211,7 @@ def write_entity_classes(entities, module=None):
if action in ['list']:
body.append(
tabspace * 2 + 'return map(lambda e: %s(e.__dict__), %s) if %s and len(%s) > 0 else None' % (
- entity, entity.lower(), entity.lower(), entity.lower()))
+ entity, entity.lower(), entity.lower(), entity.lower()))
else:
body.append(tabspace * 2 + 'return %s if %s else None' % (entity.lower(), entity.lower()))
else:
@@ -191,7 +220,7 @@ def write_entity_classes(entities, module=None):
action, ', '.join(map(lambda arg: arg + '=None', list(set(details['args']))))))
else:
body.append(tabspace + 'def %s(cls, apiclient, factory=None, **kwargs):' % action)
- #TODO: Add docs for actions
+ #TODO: Add docs for actions
body.append(tabspace * 2 + 'cmd = %(module)s.%(command)s()' % {"module": details["apimodule"],
"command": details["apicmd"]})
body.append(tabspace * 2 + 'if factory:')
@@ -202,7 +231,8 @@ def write_entity_classes(entities, module=None):
body.append(tabspace * 3 + "cmd.%s = %s" % (arg, arg))
body.append(tabspace * 2 + '[setattr(cmd, key, value) for key, value in kwargs.iteritems()]')
body.append(tabspace * 2 + '%s = apiclient.%s(cmd)' % (entity.lower(), details['apimodule']))
- body.append(tabspace * 2 + 'return %s(%s.__dict__) if %s else None' % (entity, entity.lower(), entity.lower()))
+ body.append(
+ tabspace * 2 + 'return %s(%s.__dict__) if %s else None' % (entity, entity.lower(), entity.lower()))
body.append('\n')
imports = '\n'.join(imports)
@@ -214,7 +244,7 @@ def write_entity_classes(entities, module=None):
if module.find('.') > 0:
module_path = '/'.join(module.split('.'))[1:]
else:
- module_path = '/'+module
+ module_path = '/' + module
if not os.path.exists(".%s" % module_path):
os.mkdir(".%s" % module_path)
with open(".%s/%s.py" % (module_path, entity), "w") as writer:
@@ -223,6 +253,9 @@ def write_entity_classes(entities, module=None):
def write_entity_factory(entity, actions):
+ """Data factories for each entity
+ """
+
tabspace = ' '
code = ''
factory_defaults = []
[07/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
detailView UI: Fix quickview actions not updating list view row
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/e5cea020
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/e5cea020
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/e5cea020
Branch: refs/heads/marvin_refactor
Commit: e5cea0204b36e3634e173fb7d510bc79ac40e478
Parents: 2be8368
Author: Brian Federle <br...@citrix.com>
Authored: Mon Apr 22 11:52:52 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Mon Apr 22 11:52:52 2013 -0700
----------------------------------------------------------------------
ui/scripts/ui/widgets/detailView.js | 29 +++++++++++++++++++----------
1 files changed, 19 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e5cea020/ui/scripts/ui/widgets/detailView.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui/widgets/detailView.js b/ui/scripts/ui/widgets/detailView.js
index 4b520f9..0146b36 100644
--- a/ui/scripts/ui/widgets/detailView.js
+++ b/ui/scripts/ui/widgets/detailView.js
@@ -15,8 +15,9 @@
// specific language governing permissions and limitations
// under the License.
(function($, cloudStack, _l) {
- var replaceListViewItem = function($detailView, newData) {
- var $row = $detailView.data('list-view-row');
+ var replaceListViewItem = function($detailView, newData, options) {
+ var $row = $detailView ? $detailView.data('list-view-row') :
+ options.$row;
if (!$row) return;
@@ -32,7 +33,9 @@
$row: $row,
data: $.extend(jsonObj, newData),
after: function($newRow) {
- $detailView.data('list-view-row', $newRow);
+ if ($detailView) {
+ $detailView.data('list-view-row', $newRow);
+ }
setTimeout(function() {
$('.data-table').dataTable('selectRow', $newRow.index());
@@ -42,11 +45,13 @@
}
// Refresh detail view context
- $.extend(
- $detailView.data('view-args').context[
- $detailView.data('view-args').section
- ][0], newData
- );
+ if ($detailView) {
+ $.extend(
+ $detailView.data('view-args').context[
+ $detailView.data('view-args').section
+ ][0], newData
+ );
+ }
};
/**
@@ -125,6 +130,7 @@
args = args ? args : {};
var $item = args.$item;
+ var $row = $detailView.data('list-view-row');
notification.desc = messages.notification(args.messageArgs);
notification._custom = $.extend(args._custom ? args._custom : {}, {
@@ -140,11 +146,14 @@
viewArgs.onActionComplete();
}
- if (!$detailView.parents('html').size()) return;
+ if (!$detailView.parents('html').size()) {
+ replaceListViewItem(null, args.data, { $row: $row });
+ return;
+ }
+ replaceListViewItem($detailView, args.data);
$loading.remove();
$detailView.removeClass('detail-view-loading-state');
- replaceListViewItem($detailView, args.data);
if (!noRefresh) {
updateTabContent(args.data);
[40/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - API: extend listSystemVMs API to to take in zonetype.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/774b2ebf
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/774b2ebf
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/774b2ebf
Branch: refs/heads/marvin_refactor
Commit: 774b2ebf9d2faacde31973b35384cf0450865e9d
Parents: 45dbd9c
Author: Jessica Wang <je...@citrix.com>
Authored: Sat Apr 27 11:41:53 2013 -0700
Committer: Jessica Wang <je...@citrix.com>
Committed: Sat Apr 27 11:41:53 2013 -0700
----------------------------------------------------------------------
.../command/admin/systemvm/ListSystemVMsCmd.java | 7 +++++++
.../src/com/cloud/server/ManagementServerImpl.java | 11 +++++++++++
2 files changed, 18 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/774b2ebf/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java
index f230a20..b5a0f3f 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/ListSystemVMsCmd.java
@@ -74,6 +74,9 @@ public class ListSystemVMsCmd extends BaseListCmd {
description="the storage ID where vm's volumes belong to", since="3.0.1")
private Long storageId;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -110,6 +113,10 @@ public class ListSystemVMsCmd extends BaseListCmd {
return storageId;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/774b2ebf/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 0da8d4f..050f57b 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -2640,6 +2640,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
public Pair<List<? extends VirtualMachine>, Integer> searchForSystemVm(ListSystemVMsCmd cmd) {
String type = cmd.getSystemVmType();
Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+ String zoneType = cmd.getZoneType();
Long id = cmd.getId();
String name = cmd.getSystemVmName();
String state = cmd.getState();
@@ -2666,6 +2667,12 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
sb.join("volumeSearch", volumeSearch, sb.entity().getId(), volumeSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
}
+ if(zoneType != null) {
+ SearchBuilder<DataCenterVO> zoneSb = _dcDao.createSearchBuilder();
+ zoneSb.and("zoneNetworkType", zoneSb.entity().getNetworkType(), SearchCriteria.Op.EQ);
+ sb.join("zoneSb", zoneSb, sb.entity().getDataCenterId(), zoneSb.entity().getId(), JoinBuilder.JoinType.INNER);
+ }
+
SearchCriteria<VMInstanceVO> sc = sb.create();
if (keyword != null) {
@@ -2706,6 +2713,10 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
sc.setJoinParameters("volumeSearch", "poolId", storageId);
}
+ if(zoneType != null) {
+ sc.setJoinParameters("zoneSb", "zoneNetworkType", zoneType);
+ }
+
Pair<List<VMInstanceVO>, Integer> result = _vmInstanceDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends VirtualMachine>, Integer>(result.first(), result.second());
}
[16/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Merge branch 'ui-vm-affinity'
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5ce28903
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5ce28903
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5ce28903
Branch: refs/heads/marvin_refactor
Commit: 5ce289034d398290b10adf6b2345bcddbf3731e7
Parents: b5979ba f1bdae0
Author: Brian Federle <br...@citrix.com>
Authored: Thu Apr 25 11:04:35 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Thu Apr 25 11:04:35 2013 -0700
----------------------------------------------------------------------
.../WEB-INF/classes/resources/messages.properties | 11 +-
ui/css/cloudstack3.css | 67 +-
ui/dictionary.jsp | 10 +
ui/images/sprites.png | Bin 188552 -> 192407 bytes
ui/index.jsp | 19 +-
ui/scripts/affinity.js | 183 +++
ui/scripts/cloudStack.js | 9 +-
ui/scripts/instanceWizard.js | 941 ++++++++-------
ui/scripts/instances.js | 151 +++-
ui/scripts/ui-custom/affinity.js | 173 +++
ui/scripts/ui-custom/instanceWizard.js | 19 +
ui/scripts/ui/widgets/detailView.js | 29 +-
ui/scripts/ui/widgets/listView.js | 10 +-
13 files changed, 1109 insertions(+), 513 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5ce28903/client/WEB-INF/classes/resources/messages.properties
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5ce28903/ui/index.jsp
----------------------------------------------------------------------
[18/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Add icon for affinity groups section
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6802b9da
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6802b9da
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6802b9da
Branch: refs/heads/marvin_refactor
Commit: 6802b9dac6c743ac2bf10e91418c0ef94ccb5f05
Parents: e8b6c7b
Author: Brian Federle <br...@citrix.com>
Authored: Thu Apr 25 11:23:31 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Thu Apr 25 11:23:31 2013 -0700
----------------------------------------------------------------------
ui/css/cloudstack3.css | 4 ++++
ui/images/icons.png | Bin 50745 -> 50708 bytes
2 files changed, 4 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6802b9da/ui/css/cloudstack3.css
----------------------------------------------------------------------
diff --git a/ui/css/cloudstack3.css b/ui/css/cloudstack3.css
index 340b089..7ff7469 100644
--- a/ui/css/cloudstack3.css
+++ b/ui/css/cloudstack3.css
@@ -2479,6 +2479,10 @@ div.detail-group.actions td {
background-position: -73px -23px;
}
+#navigation ul li.affinityGroups span.icon {
+ background-position: -73px -87px;
+}
+
#navigation ul li.storage span.icon {
background-position: -127px -23px;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6802b9da/ui/images/icons.png
----------------------------------------------------------------------
diff --git a/ui/images/icons.png b/ui/images/icons.png
index ea1a39c..f07ca83 100644
Binary files a/ui/images/icons.png and b/ui/images/icons.png differ
[14/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - (1) extend listHosts API to to take in zonetype. (2) UI: populate Hosts/SecondaryStorages list page with ones whose zonetype matches selected option in zone type dropdown on top menu.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ee02311f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ee02311f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ee02311f
Branch: refs/heads/marvin_refactor
Commit: ee02311fae2b8991ed1dc13e58d8dbe627262a8d
Parents: 099677a
Author: Jessica Wang <je...@apache.org>
Authored: Thu Apr 25 09:51:40 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Apr 25 09:51:57 2013 -0700
----------------------------------------------------------------------
.../api/command/admin/host/ListHostsCmd.java | 7 ++++
.../src/com/cloud/api/query/QueryManagerImpl.java | 5 +++
ui/scripts/system.js | 27 +++++++++++++-
3 files changed, 37 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee02311f/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java
index 5ec7cf3..69c6980 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java
@@ -75,6 +75,9 @@ public class ListHostsCmd extends BaseListCmd {
description="the Zone ID for the host")
private Long zoneId;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
@Parameter(name=ApiConstants.VIRTUAL_MACHINE_ID, type=CommandType.UUID, entityType = UserVmResponse.class,
required=false, description="lists hosts in the same cluster as this VM and flag hosts with enough CPU/RAm to host this VM")
private Long virtualMachineId;
@@ -124,6 +127,10 @@ public class ListHostsCmd extends BaseListCmd {
return zoneId;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
public Long getVirtualMachineId() {
return virtualMachineId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee02311f/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 6690b24..f92b4fc 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -1400,6 +1400,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
public Pair<List<HostJoinVO>, Integer> searchForServersInternal(ListHostsCmd cmd) {
Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId());
+ String zoneType = cmd.getZoneType();
Object name = cmd.getHostName();
Object type = cmd.getType();
Object state = cmd.getState();
@@ -1421,6 +1422,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE);
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ);
+ sb.and("dataCenterType", sb.entity().getZoneType(), SearchCriteria.Op.EQ);
sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
sb.and("clusterId", sb.entity().getClusterId(), SearchCriteria.Op.EQ);
sb.and("resourceState", sb.entity().getResourceState(), SearchCriteria.Op.EQ);
@@ -1465,6 +1467,9 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
if (zoneId != null) {
sc.setParameters("dataCenterId", zoneId);
}
+ if (zoneType != null) {
+ sc.setParameters("dataCenterType", zoneType);
+ }
if (pod != null) {
sc.setParameters("podId", pod);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ee02311f/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 8f07ee4..3aaa830 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -5534,9 +5534,16 @@
var searchByArgs = args.filterBy.search.value.length ?
'&name=' + args.filterBy.search.value : '';
+ var data = { page: args.page, pageSize: pageSize, type: 'routing', listAll: true };
+ if(args.context.zoneType != null && args.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data, {
+ zonetype: args.context.zoneType
+ });
+ }
+
$.ajax({
url: createURL('listHosts' + searchByArgs),
- data: { page: args.page, pageSize: pageSize, type: 'routing', listAll: true },
+ data: data,
success: function (json) {
args.response.success({ data: json.listhostsresponse.host });
},
@@ -5628,9 +5635,16 @@
var searchByArgs = args.filterBy.search.value.length ?
'&name=' + args.filterBy.search.value : '';
+ var data = { type: 'SecondaryStorage', page: args.page, pageSize: pageSize, listAll: true };
+ if(args.context.zoneType != null && args.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data, {
+ zonetype: args.context.zoneType
+ });
+ }
+
$.ajax({
url: createURL('listHosts' + searchByArgs),
- data: { type: 'SecondaryStorage', page: args.page, pageSize: pageSize, listAll: true },
+ data: data,
success: function (json) {
args.response.success({ data: json.listhostsresponse.host });
},
@@ -8909,6 +8923,10 @@
array1.push("&hostid=" + args.context.instances[0].hostid);
}
+ if(args.context.zoneType != null && args.context.zoneType.length > 0) { //Basic type or Advanced type
+ array1.push("&zonetype=" + args.context.zoneType);
+ }
+
$.ajax({
url: createURL("listHosts&type=Routing" + array1.join("") + "&page=" + args.page + "&pagesize=" + pageSize),
dataType: "json",
@@ -10515,6 +10533,11 @@
}
}
array1.push("&zoneid=" + args.context.zones[0].id);
+
+ if(args.context.zoneType != null && args.context.zoneType.length > 0) { //Basic type or Advanced type
+ array1.push("&zonetype=" + args.context.zoneType);
+ }
+
$.ajax({
url: createURL("listHosts&type=SecondaryStorage&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
dataType: "json",
[36/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - UI: make global function changeURL() to pass zonetype to API calls based on selected option in zone type dropdown on top menu.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3e2eb597
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3e2eb597
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3e2eb597
Branch: refs/heads/marvin_refactor
Commit: 3e2eb59723f6aa58170e8650ca8ef03a8b2d6b45
Parents: 7cf312a
Author: Jessica Wang <je...@apache.org>
Authored: Fri Apr 26 11:26:21 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Fri Apr 26 11:26:21 2013 -0700
----------------------------------------------------------------------
ui/scripts/sharedFunctions.js | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3e2eb597/ui/scripts/sharedFunctions.js
----------------------------------------------------------------------
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index 7467531..a018406 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -114,6 +114,10 @@ function createURL(apiName, options) {
if (cloudStack.context && cloudStack.context.projects && !options.ignoreProject) {
urlString = urlString + '&projectid=' + cloudStack.context.projects[0].id;
}
+
+ if(cloudStack.context != null && cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ urlString = urlString + '&zonetype=' + cloudStack.context.zoneType;
+ }
return urlString;
}
[47/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-741: Granular Global Parameters and adding fixes for CLOUDSTACK-2176, CLOUDSTACK-2198, CLOUDSTACK-2200
Adding the zone, cluster, account level parameters
The parameters at scope (zone/cluster/pool/account) can be updated by updateConfiguration API with additional parameter zoneid/clusterid/accountid/storagepoolid
Whenever these scoped parameters are used in CS they get value from the corresponding details table if not defined get value from global parameter.
Same with the listConfiguration API with additional parameter zoneid/clusterid/accountid/storagepoolid
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/deaf9106
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/deaf9106
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/deaf9106
Branch: refs/heads/marvin_refactor
Commit: deaf9106ca557a938edf25bee65cf6b4eb3ac03f
Parents: b2fdd5e
Author: Harikrishna Patnala <ha...@citrix.com>
Authored: Mon Apr 29 14:11:51 2013 +0530
Committer: Harikrishna Patnala <ha...@citrix.com>
Committed: Mon Apr 29 14:11:51 2013 +0530
----------------------------------------------------------------------
.../cloud/configuration/ConfigurationService.java | 15 +-
api/src/com/cloud/network/NetworkModel.java | 2 +-
.../api/command/admin/config/ListCfgsByCmd.java | 44 +++-
.../api/command/admin/config/UpdateCfgCmd.java | 47 +++-
.../api/response/ConfigurationResponse.java | 3 +
server/src/com/cloud/alert/AlertManagerImpl.java | 27 ++-
server/src/com/cloud/api/ApiDBUtils.java | 2 +-
server/src/com/cloud/capacity/dao/CapacityDao.java | 2 +-
.../com/cloud/capacity/dao/CapacityDaoImpl.java | 35 ++-
server/src/com/cloud/configuration/Config.java | 20 +-
.../cloud/configuration/ConfigurationManager.java | 2 +-
.../configuration/ConfigurationManagerImpl.java | 173 ++++++++++-----
server/src/com/cloud/deploy/FirstFitPlanner.java | 25 +--
.../src/com/cloud/network/NetworkManagerImpl.java | 7 +-
server/src/com/cloud/network/NetworkModelImpl.java | 11 +-
.../src/com/cloud/network/vpc/VpcManagerImpl.java | 2 +-
.../network/vpn/RemoteAccessVpnManagerImpl.java | 6 +-
.../com/cloud/server/ConfigurationServerImpl.java | 11 +-
.../src/com/cloud/server/ManagementServerImpl.java | 41 +++-
.../storage/dao/StoragePoolDetailsDaoImpl.java | 1 +
.../com/cloud/template/TemplateAdapterBase.java | 7 +-
.../com/cloud/template/TemplateManagerImpl.java | 10 +-
.../com/cloud/network/MockNetworkModelImpl.java | 2 +-
.../cloud/vpc/MockConfigurationManagerImpl.java | 8 +-
.../test/com/cloud/vpc/MockNetworkModelImpl.java | 2 +-
.../affinity/AffinityApiTestConfiguration.java | 29 ++-
.../networkoffering/ChildTestConfiguration.java | 38 ++--
setup/db/db/schema-410to420.sql | 4 +
test/integration/smoke/test_global_settings.py | 14 +-
29 files changed, 389 insertions(+), 201 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/api/src/com/cloud/configuration/ConfigurationService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/configuration/ConfigurationService.java b/api/src/com/cloud/configuration/ConfigurationService.java
index 6937d0b..fdbd9d6 100644
--- a/api/src/com/cloud/configuration/ConfigurationService.java
+++ b/api/src/com/cloud/configuration/ConfigurationService.java
@@ -20,6 +20,11 @@ import java.util.List;
import javax.naming.NamingException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.exception.ResourceAllocationException;
import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
import org.apache.cloudstack.api.command.admin.ldap.LDAPConfigCmd;
import org.apache.cloudstack.api.command.admin.ldap.LDAPRemoveCmd;
@@ -46,10 +51,6 @@ import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
import com.cloud.dc.DataCenter;
import com.cloud.dc.Pod;
import com.cloud.dc.Vlan;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Networks.TrafficType;
import com.cloud.offering.DiskOffering;
import com.cloud.offering.NetworkOffering;
@@ -65,7 +66,7 @@ public interface ConfigurationService {
* - the command wrapping name and value parameters
* @return updated configuration object if successful
*/
- Configuration updateConfiguration(UpdateCfgCmd cmd);
+ Configuration updateConfiguration(UpdateCfgCmd cmd) throws InvalidParameterValueException;
/**
* Create a service offering through the API
@@ -250,7 +251,7 @@ public interface ConfigurationService {
NetworkOffering getNetworkOffering(long id);
- Integer getNetworkOfferingNetworkRate(long networkOfferingId);
+ Integer getNetworkOfferingNetworkRate(long networkOfferingId, Long dataCenterId);
Account getVlanAccount(long vlanId);
@@ -262,7 +263,7 @@ public interface ConfigurationService {
Long getDefaultPageSize();
- Integer getServiceOfferingNetworkRate(long serviceOfferingId);
+ Integer getServiceOfferingNetworkRate(long serviceOfferingId, Long dataCenterId);
DiskOffering getDiskOffering(long diskOfferingId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/api/src/com/cloud/network/NetworkModel.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java
index 4d7d714..d81b2d7 100644
--- a/api/src/com/cloud/network/NetworkModel.java
+++ b/api/src/com/cloud/network/NetworkModel.java
@@ -181,7 +181,7 @@ public interface NetworkModel {
/**
* @return
*/
- String getDefaultNetworkDomain();
+ String getDefaultNetworkDomain(long zoneId);
/**
* @param ntwkOffId
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java
index 9f34405..a11904e 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/config/ListCfgsByCmd.java
@@ -45,11 +45,17 @@ public class ListCfgsByCmd extends BaseListCmd {
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "lists configuration by name")
private String configName;
- @Parameter(name=ApiConstants.SCOPE, type = CommandType.STRING, description = "scope(zone/cluster/pool/account) of the parameter that needs to be updated")
- private String scope;
+ @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, description="the ID of the Zone to update the parameter value for corresponding zone")
+ private Long zone_id;
- @Parameter(name=ApiConstants.ID, type = CommandType.UUID, entityType = {ZoneResponse.class, ClusterResponse.class, StoragePoolResponse.class, AccountResponse.class}, description = "corresponding ID of the scope")
- private Long id;
+ @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType=ClusterResponse.class, description="the ID of the Cluster to update the parameter value for corresponding cluster")
+ private Long cluster_id;
+
+ @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.UUID, entityType=StoragePoolResponse.class, description="the ID of the Storage pool to update the parameter value for corresponding storage pool")
+ private Long storagepool_id;
+
+ @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType=AccountResponse.class, description="the ID of the Account to update the parameter value for corresponding account")
+ private Long account_id;
// ///////////////////////////////////////////////////
@@ -64,14 +70,21 @@ public class ListCfgsByCmd extends BaseListCmd {
return configName;
}
- public String getScope() {
- return scope;
+ public Long getZoneId() {
+ return zone_id;
+ }
+
+ public Long getClusterId() {
+ return cluster_id;
}
- public Long getId() {
- return id;
+ public Long getStoragepoolId() {
+ return storagepool_id;
}
+ public Long getAccountId() {
+ return account_id;
+ }
@Override
public Long getPageSizeVal() {
@@ -100,10 +113,17 @@ public class ListCfgsByCmd extends BaseListCmd {
for (Configuration cfg : result.first()) {
ConfigurationResponse cfgResponse = _responseGenerator.createConfigurationResponse(cfg);
cfgResponse.setObjectName("configuration");
- if (scope != null) {
- cfgResponse.setScope(scope);
- } else {
- cfgResponse.setScope("global");
+ if(getZoneId() != null) {
+ cfgResponse.setScope("zone");
+ }
+ if(getClusterId() != null) {
+ cfgResponse.setScope("cluster");
+ }
+ if(getStoragepoolId() != null) {
+ cfgResponse.setScope("storagepool");
+ }
+ if(getAccountId() != null) {
+ cfgResponse.setScope("account");
}
configResponses.add(cfgResponse);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java
index 074c5a3..deb61d3 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java
@@ -43,11 +43,17 @@ public class UpdateCfgCmd extends BaseCmd {
@Parameter(name=ApiConstants.VALUE, type=CommandType.STRING, description="the value of the configuration", length=4095)
private String value;
- @Parameter(name=ApiConstants.SCOPE, type = CommandType.STRING, description = "scope(zone/cluster/pool/account) of the parameter that needs to be updated")
- private String scope;
+ @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, description="the ID of the Zone to update the parameter value for corresponding zone")
+ private Long zone_id;
- @Parameter(name=ApiConstants.ID, type = CommandType.UUID, entityType = {ZoneResponse.class, ClusterResponse.class, StoragePoolResponse.class, AccountResponse.class}, description = "corresponding ID of the scope")
- private Long id;
+ @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType=ClusterResponse.class, description="the ID of the Cluster to update the parameter value for corresponding cluster")
+ private Long cluster_id;
+
+ @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.UUID, entityType=StoragePoolResponse.class, description="the ID of the Storage pool to update the parameter value for corresponding storage pool")
+ private Long storagepool_id;
+
+ @Parameter(name=ApiConstants.ACCOUNT_ID, type=CommandType.UUID, entityType=AccountResponse.class, description="the ID of the Account to update the parameter value for corresponding account")
+ private Long account_id;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -61,12 +67,20 @@ public class UpdateCfgCmd extends BaseCmd {
return value;
}
- public String getScope() {
- return scope;
+ public Long getZoneId() {
+ return zone_id;
}
- public Long getId() {
- return id;
+ public Long getClusterId() {
+ return cluster_id;
+ }
+
+ public Long getStoragepoolId() {
+ return storagepool_id;
+ }
+
+ public Long getAccountId() {
+ return account_id;
}
/////////////////////////////////////////////////////
@@ -89,12 +103,19 @@ public class UpdateCfgCmd extends BaseCmd {
if (cfg != null) {
ConfigurationResponse response = _responseGenerator.createConfigurationResponse(cfg);
response.setResponseName(getCommandName());
- if (scope != null) {
- response.setScope(scope);
- response.setValue(value);
- } else {
- response.setScope("global");
+ if(getZoneId() != null) {
+ response.setScope("zone");
+ }
+ if(getClusterId() != null) {
+ response.setScope("cluster");
+ }
+ if(getStoragepoolId() != null) {
+ response.setScope("storagepool");
+ }
+ if(getAccountId() != null) {
+ response.setScope("account");
}
+ response.setValue(value);
this.setResponseObject(response);
} else {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update config");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java b/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java
index 176c47a..fa0d4b4 100644
--- a/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/ConfigurationResponse.java
@@ -35,6 +35,9 @@ public class ConfigurationResponse extends BaseResponse {
@SerializedName(ApiConstants.SCOPE) @Param(description="scope(zone/cluster/pool/account) of the parameter that needs to be updated")
private String scope;
+ @SerializedName(ApiConstants.ID) @Param(description="the value of the configuration")
+ private Long id;
+
@SerializedName(ApiConstants.DESCRIPTION) @Param(description="the description of the configuration")
private String description;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/alert/AlertManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/alert/AlertManagerImpl.java b/server/src/com/cloud/alert/AlertManagerImpl.java
index 655ed98..6839d44 100755
--- a/server/src/com/cloud/alert/AlertManagerImpl.java
+++ b/server/src/com/cloud/alert/AlertManagerImpl.java
@@ -70,6 +70,7 @@ import com.cloud.host.dao.HostDao;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.org.Grouping.AllocationState;
import com.cloud.resource.ResourceManager;
+import com.cloud.server.ConfigurationServer;
import com.cloud.storage.StorageManager;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.utils.NumbersUtil;
@@ -106,7 +107,8 @@ public class AlertManagerImpl extends ManagerBase implements AlertManager {
@Inject private PrimaryDataStoreDao _storagePoolDao;
@Inject private ConfigurationDao _configDao;
@Inject private ResourceManager _resourceMgr;
- @Inject private ConfigurationManager _configMgr;
+ @Inject private ConfigurationManager _configMgr;
+ @Inject ConfigurationServer _configServer;
private Timer _timer = null;
private float _cpuOverProvisioningFactor = 1;
private long _capacityCheckPeriod = 60L * 60L * 1000L; // one hour by default
@@ -562,19 +564,30 @@ public class AlertManagerImpl extends ManagerBase implements AlertManager {
float overProvFactor = 1f;
capacity = _capacityDao.findCapacityBy(capacityType.intValue(), cluster.getDataCenterId(), null, cluster.getId());
- if (capacityType == Capacity.CAPACITY_TYPE_STORAGE){
- capacity.add(getUsedStats(capacityType, cluster.getDataCenterId(), cluster.getPodId(), cluster.getId()));
+ // cpu and memory allocated capacity notification threshold can be defined at cluster level, so getting the value if they are defined at cluster level
+ double capacityValue = 0;
+ switch (capacityType) {
+ case Capacity.CAPACITY_TYPE_STORAGE:
+ capacity.add(getUsedStats(capacityType, cluster.getDataCenterId(), cluster.getPodId(), cluster.getId()));
+ capacityValue = _capacityTypeThresholdMap.get(capacityType);
+ break;
+ case Capacity.CAPACITY_TYPE_CPU:
+ overProvFactor = ApiDBUtils.getCpuOverprovisioningFactor();
+ capacityValue = Double.parseDouble(_configServer.getConfigValue(Config.CPUCapacityThreshold.key(), Config.ConfigurationParameterScope.cluster.toString(), cluster.getId()));
+ break;
+ case Capacity.CAPACITY_TYPE_MEMORY:
+ capacityValue = Double.parseDouble(_configServer.getConfigValue(Config.MemoryCapacityThreshold.key(), Config.ConfigurationParameterScope.cluster.toString(), cluster.getId()));
+ break;
+ default:
+ capacityValue = _capacityTypeThresholdMap.get(capacityType);
}
if (capacity == null || capacity.size() == 0){
continue;
- }
- if (capacityType == Capacity.CAPACITY_TYPE_CPU){
- overProvFactor = ApiDBUtils.getCpuOverprovisioningFactor();
}
double totalCapacity = capacity.get(0).getTotalCapacity() * overProvFactor;
double usedCapacity = capacity.get(0).getUsedCapacity() + capacity.get(0).getReservedCapacity();
- if (totalCapacity != 0 && usedCapacity/totalCapacity > _capacityTypeThresholdMap.get(capacityType)){
+ if (totalCapacity != 0 && usedCapacity/totalCapacity > capacityValue){
generateEmailAlert(ApiDBUtils.findZoneById(cluster.getDataCenterId()), ApiDBUtils.findPodById(cluster.getPodId()), cluster,
totalCapacity, usedCapacity, capacityType);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 21ce63b..e291c84 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -1034,7 +1034,7 @@ public class ApiDBUtils {
}
public static Integer getNetworkRate(long networkOfferingId) {
- return _configMgr.getNetworkOfferingNetworkRate(networkOfferingId);
+ return _configMgr.getNetworkOfferingNetworkRate(networkOfferingId, null);
}
public static Account getVlanAccount(long vlanId) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/capacity/dao/CapacityDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/capacity/dao/CapacityDao.java b/server/src/com/cloud/capacity/dao/CapacityDao.java
index 0132f69..04466f4 100755
--- a/server/src/com/cloud/capacity/dao/CapacityDao.java
+++ b/server/src/com/cloud/capacity/dao/CapacityDao.java
@@ -41,5 +41,5 @@ public interface CapacityDao extends GenericDao<CapacityVO, Long> {
List<SummedCapacity> listCapacitiesGroupedByLevelAndType(Integer capacityType, Long zoneId, Long podId, Long clusterId, int level, Long limit);
void updateCapacityState(Long dcId, Long podId, Long clusterId,
Long hostId, String capacityState);
- List<Long> listClustersCrossingThreshold(short capacityType, Long zoneId, Float disableThreshold, long computeRequested);
+ List<Long> listClustersCrossingThreshold(short capacityType, Long zoneId, String ConfigName, long computeRequested);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java b/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java
index c3d9817..ec5081a 100755
--- a/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java
+++ b/server/src/com/cloud/capacity/dao/CapacityDaoImpl.java
@@ -27,6 +27,7 @@ import java.util.Map;
import javax.ejb.Local;
import javax.inject.Inject;
+import com.cloud.configuration.Config;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.log4j.Logger;
@@ -115,12 +116,20 @@ public class CapacityDaoImpl extends GenericDaoBase<CapacityVO, Long> implements
private static final String LIST_CAPACITY_GROUP_BY_CLUSTER_TYPE_PART2 = " GROUP BY cluster_id, capacity_type order by percent desc limit ";
private static final String UPDATE_CAPACITY_STATE = "UPDATE `cloud`.`op_host_capacity` SET capacity_state = ? WHERE ";
- private static final String LIST_CLUSTERS_CROSSING_THRESHOLD = "SELECT cluster_id " +
- "FROM (SELECT cluster_id, ( (sum(capacity.used_capacity) + sum(capacity.reserved_capacity) + ?)/sum(total_capacity) ) ratio "+
- "FROM `cloud`.`op_host_capacity` capacity "+
- "WHERE capacity.data_center_id = ? AND capacity.capacity_type = ? AND capacity.total_capacity > 0 "+
- "GROUP BY cluster_id) tmp " +
- "WHERE tmp.ratio > ? ";
+
+ private static final String LIST_CLUSTERS_CROSSING_THRESHOLD = "SELECT clusterList.cluster_id " +
+ "FROM ( SELECT cluster.cluster_id cluster_id, ( (sum(cluster.used) + sum(cluster.reserved) + ?)/sum(cluster.total) ) ratio, cluster.configValue value " +
+ "FROM ( SELECT capacity.cluster_id cluster_id, capacity.used_capacity used, capacity.reserved_capacity reserved, capacity.total_capacity total, " +
+ "CASE (SELECT count(*) FROM `cloud`.`cluster_details` details WHERE details.cluster_id = capacity.cluster_id AND details.name = ? ) " +
+ "WHEN 1 THEN ( SELECT details.value FROM `cloud`.`cluster_details` details WHERE details.cluster_id = capacity.cluster_id AND details.name = ? ) " +
+ "ELSE ( SELECT config.value FROM `cloud`.`configuration` config WHERE config.name = ?) " +
+ "END configValue " +
+ "FROM `cloud`.`op_host_capacity` capacity " +
+ "WHERE capacity.data_center_id = ? AND capacity.capacity_type = ? AND capacity.total_capacity > 0) cluster " +
+
+ "GROUP BY cluster.cluster_id) clusterList " +
+ "WHERE clusterList.ratio > clusterList.value; ";
+
public CapacityDaoImpl() {
@@ -146,20 +155,22 @@ public class CapacityDaoImpl extends GenericDaoBase<CapacityVO, Long> implements
}
@Override
- public List<Long> listClustersCrossingThreshold(short capacityType, Long zoneId, Float disableThreshold, long compute_requested){
+ public List<Long> listClustersCrossingThreshold(short capacityType, Long zoneId, String configName, long compute_requested){
Transaction txn = Transaction.currentTxn();
PreparedStatement pstmt = null;
List<Long> result = new ArrayList<Long>();
StringBuilder sql = new StringBuilder(LIST_CLUSTERS_CROSSING_THRESHOLD);
-
-
+ // during listing the clusters that cross the threshold
+ // we need to check with disabled thresholds of each cluster if not defined at cluster consider the global value
try {
pstmt = txn.prepareAutoCloseStatement(sql.toString());
pstmt.setLong(1,compute_requested);
- pstmt.setShort(2,capacityType);
- pstmt.setFloat(3,disableThreshold);
- pstmt.setLong(4,zoneId);
+ pstmt.setString(2, configName);
+ pstmt.setString(3, configName);
+ pstmt.setString(4, configName);
+ pstmt.setLong(5,zoneId);
+ pstmt.setShort(6,capacityType);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java
index dbcbc53..af6adcf 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -53,8 +53,8 @@ public enum Config {
CapacityCheckPeriod("Alert", ManagementServer.class, Integer.class, "capacity.check.period", "300000", "The interval in milliseconds between capacity checks", null),
StorageAllocatedCapacityThreshold("Alert", ManagementServer.class, Float.class, "cluster.storage.allocated.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of allocated storage utilization above which alerts will be sent about low storage available.", null),
StorageCapacityThreshold("Alert", ManagementServer.class, Float.class, "cluster.storage.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of storage utilization above which alerts will be sent about low storage available.", null),
- CPUCapacityThreshold("Alert", ManagementServer.class, Float.class, "cluster.cpu.allocated.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of cpu utilization above which alerts will be sent about low cpu available.", null),
- MemoryCapacityThreshold("Alert", ManagementServer.class, Float.class, "cluster.memory.allocated.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of memory utilization above which alerts will be sent about low memory available.", null),
+ CPUCapacityThreshold("Alert", ManagementServer.class, Float.class, "cluster.cpu.allocated.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of cpu utilization above which alerts will be sent about low cpu available.", null, ConfigurationParameterScope.cluster.toString()),
+ MemoryCapacityThreshold("Alert", ManagementServer.class, Float.class, "cluster.memory.allocated.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of memory utilization above which alerts will be sent about low memory available.", null, ConfigurationParameterScope.cluster.toString()),
PublicIpCapacityThreshold("Alert", ManagementServer.class, Float.class, "zone.virtualnetwork.publicip.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of public IP address space utilization above which alerts will be sent.", null),
PrivateIpCapacityThreshold("Alert", ManagementServer.class, Float.class, "pod.privateip.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of private IP address space utilization above which alerts will be sent.", null),
SecondaryStorageCapacityThreshold("Alert", ManagementServer.class, Float.class, "zone.secstorage.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of secondary storage utilization above which alerts will be sent about low storage available.", null),
@@ -63,8 +63,8 @@ public enum Config {
LocalStorageCapacityThreshold("Alert", ManagementServer.class, Float.class, "cluster.localStorage.capacity.notificationthreshold", "0.75", "Percentage (as a value between 0 and 1) of local storage utilization above which alerts will be sent about low local storage available.", null),
StorageAllocatedCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "pool.storage.allocated.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of allocated storage utilization above which allocators will disable using the pool for low allocated storage available.", null),
StorageCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "pool.storage.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of storage utilization above which allocators will disable using the pool for low storage available.", null),
- CPUCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "cluster.cpu.allocated.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of cpu utilization above which allocators will disable using the cluster for low cpu available. Keep the corresponding notification threshold lower than this to be notified beforehand.", null),
- MemoryCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "cluster.memory.allocated.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of memory utilization above which allocators will disable using the cluster for low memory available. Keep the corresponding notification threshold lower than this to be notified beforehand.", null),
+ CPUCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "cluster.cpu.allocated.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of cpu utilization above which allocators will disable using the cluster for low cpu available. Keep the corresponding notification threshold lower than this to be notified beforehand.", null, ConfigurationParameterScope.cluster.toString()),
+ MemoryCapacityDisableThreshold("Alert", ManagementServer.class, Float.class, "cluster.memory.allocated.capacity.disablethreshold", "0.85", "Percentage (as a value between 0 and 1) of memory utilization above which allocators will disable using the cluster for low memory available. Keep the corresponding notification threshold lower than this to be notified beforehand.", null, ConfigurationParameterScope.cluster.toString()),
// Storage
@@ -93,8 +93,8 @@ public enum Config {
GuestVlanBits("Network", ManagementServer.class, Integer.class, "guest.vlan.bits", "12", "The number of bits to reserve for the VLAN identifier in the guest subnet.", null),
//MulticastThrottlingRate("Network", ManagementServer.class, Integer.class, "multicast.throttling.rate", "10", "Default multicast rate in megabits per second allowed.", null),
- NetworkThrottlingRate("Network", ManagementServer.class, Integer.class, "network.throttling.rate", "200", "Default data transfer rate in megabits per second allowed in network.", null),
- GuestDomainSuffix("Network", AgentManager.class, String.class, "guest.domain.suffix", "cloud.internal", "Default domain name for vms inside virtualized networks fronted by router", null),
+ NetworkThrottlingRate("Network", ManagementServer.class, Integer.class, "network.throttling.rate", "200", "Default data transfer rate in megabits per second allowed in network.", null, ConfigurationParameterScope.zone.toString()),
+ GuestDomainSuffix("Network", AgentManager.class, String.class, "guest.domain.suffix", "cloud.internal", "Default domain name for vms inside virtualized networks fronted by router", null, ConfigurationParameterScope.zone.toString()),
DirectNetworkNoDefaultRoute("Network", ManagementServer.class, Boolean.class, "direct.network.no.default.route", "false", "Direct Network Dhcp Server should not send a default route", "true/false"),
OvsTunnelNetwork("Network", ManagementServer.class, Boolean.class, "sdn.ovs.controller", "false", "Enable/Disable Open vSwitch SDN controller for L2-in-L3 overlay networks", null),
OvsTunnelNetworkDefaultLabel("Network", ManagementServer.class, String.class, "sdn.ovs.controller.default.label", "cloud-public", "Default network label to be used when fetching interface for GRE endpoints", null),
@@ -112,7 +112,7 @@ public enum Config {
//VPN
RemoteAccessVpnPskLength("Network", AgentManager.class, Integer.class, "remote.access.vpn.psk.length", "24", "The length of the ipsec preshared key (minimum 8, maximum 256)", null),
- RemoteAccessVpnClientIpRange("Network", AgentManager.class, String.class, "remote.access.vpn.client.iprange", "10.1.2.1-10.1.2.8", "The range of ips to be allocated to remote access vpn clients. The first ip in the range is used by the VPN server", null),
+ RemoteAccessVpnClientIpRange("Network", AgentManager.class, String.class, "remote.access.vpn.client.iprange", "10.1.2.1-10.1.2.8", "The range of ips to be allocated to remote access vpn clients. The first ip in the range is used by the VPN server", null, ConfigurationParameterScope.account.toString()),
RemoteAccessVpnUserLimit("Network", AgentManager.class, String.class, "remote.access.vpn.user.limit", "8", "The maximum number of VPN users that can be created per account", null),
Site2SiteVpnConnectionPerVpnGatewayLimit("Network", ManagementServer.class, Integer.class, "site2site.vpn.vpngateway.connection.limit", "4", "The maximum number of VPN connection per VPN gateway", null),
Site2SiteVpnSubnetsPerCustomerGatewayLimit("Network", ManagementServer.class, Integer.class, "site2site.vpn.customergateway.subnets.limit", "10", "The maximum number of subnets per customer gateway", null),
@@ -149,7 +149,7 @@ public enum Config {
S3Enable("Advanced", ManagementServer.class, Boolean.class, "s3.enable", "false", "enable s3 ", null),
EventPurgeInterval("Advanced", ManagementServer.class, Integer.class, "event.purge.interval", "86400", "The interval (in seconds) to wait before running the event purge thread", null),
AccountCleanupInterval("Advanced", ManagementServer.class, Integer.class, "account.cleanup.interval", "86400", "The interval (in seconds) between cleanup for removed accounts", null),
- AllowPublicUserTemplates("Advanced", ManagementServer.class, Integer.class, "allow.public.user.templates", "true", "If false, users will not be able to create public templates.", null),
+ AllowPublicUserTemplates("Advanced", ManagementServer.class, Integer.class, "allow.public.user.templates", "true", "If false, users will not be able to create public templates.", null, ConfigurationParameterScope.account.toString()),
InstanceName("Advanced", AgentManager.class, String.class, "instance.name", "VM", "Name of the deployment instance.", "instanceName"),
ExpungeDelay("Advanced", UserVmManager.class, Integer.class, "expunge.delay", "86400", "Determines how long (in seconds) to wait before actually expunging destroyed vm. The default value = the default value of expunge.interval", null),
ExpungeInterval("Advanced", UserVmManager.class, Integer.class, "expunge.interval", "86400", "The interval (in seconds) to wait before running the expunge thread.", null),
@@ -419,7 +419,7 @@ public enum Config {
global,
zone,
cluster,
- pool,
+ storagepool,
account
}
@@ -427,7 +427,7 @@ public enum Config {
static {
_scopeLevelConfigsMap.put(ConfigurationParameterScope.zone.toString(), new ArrayList<Config>());
_scopeLevelConfigsMap.put(ConfigurationParameterScope.cluster.toString(), new ArrayList<Config>());
- _scopeLevelConfigsMap.put(ConfigurationParameterScope.pool.toString(), new ArrayList<Config>());
+ _scopeLevelConfigsMap.put(ConfigurationParameterScope.storagepool.toString(), new ArrayList<Config>());
_scopeLevelConfigsMap.put(ConfigurationParameterScope.account.toString(), new ArrayList<Config>());
_scopeLevelConfigsMap.put(ConfigurationParameterScope.global.toString(), new ArrayList<Config>());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/configuration/ConfigurationManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManager.java b/server/src/com/cloud/configuration/ConfigurationManager.java
index 738c5ba..bce1776 100755
--- a/server/src/com/cloud/configuration/ConfigurationManager.java
+++ b/server/src/com/cloud/configuration/ConfigurationManager.java
@@ -60,7 +60,7 @@ public interface ConfigurationManager extends ConfigurationService, Manager {
* @param name
* @param value
*/
- void updateConfiguration(long userId, String name, String category, String value, String scope, Long id);
+ String updateConfiguration(long userId, String name, String category, String value, String scope, Long id);
/**
* Creates a new service offering
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index d5e405d..068a586 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -39,7 +39,9 @@ import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
+import com.cloud.dc.*;
import com.cloud.dc.dao.*;
+import com.cloud.user.*;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.api.ApiConstants.LDAPParams;
import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
@@ -64,6 +66,10 @@ import org.apache.cloudstack.api.command.admin.zone.CreateZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.DeleteZoneCmd;
import org.apache.cloudstack.api.command.admin.zone.UpdateZoneCmd;
import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -72,20 +78,8 @@ import com.cloud.api.ApiDBUtils;
import com.cloud.capacity.dao.CapacityDao;
import com.cloud.configuration.Resource.ResourceType;
import com.cloud.configuration.dao.ConfigurationDao;
-import com.cloud.dc.AccountVlanMapVO;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.DataCenter;
import com.cloud.dc.DataCenter.NetworkType;
-import com.cloud.dc.DataCenterIpAddressVO;
-import com.cloud.dc.DataCenterLinkLocalIpAddressVO;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.DcDetailVO;
-import com.cloud.dc.HostPodVO;
-import com.cloud.dc.Pod;
-import com.cloud.dc.PodVlanMapVO;
-import com.cloud.dc.Vlan;
import com.cloud.dc.Vlan.VlanType;
-import com.cloud.dc.VlanVO;
import com.cloud.deploy.DataCenterDeployment;
import com.cloud.domain.Domain;
import com.cloud.domain.DomainVO;
@@ -133,6 +127,7 @@ import com.cloud.org.Grouping;
import com.cloud.org.Grouping.AllocationState;
import com.cloud.projects.Project;
import com.cloud.projects.ProjectManager;
+import com.cloud.server.ConfigurationServer;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.DiskOfferingVO;
@@ -144,12 +139,6 @@ import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.secondary.SecondaryStorageVmManager;
import com.cloud.storage.swift.SwiftManager;
import com.cloud.test.IPRangeConfig;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.AccountVO;
-import com.cloud.user.ResourceLimitService;
-import com.cloud.user.User;
-import com.cloud.user.UserContext;
import com.cloud.user.dao.AccountDao;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.StringUtils;
@@ -182,8 +171,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Inject
DataCenterDao _zoneDao;
@Inject
- DcDetailsDao _zoneDetailsDao;
- @Inject
DomainDao _domainDao;
@Inject
SwiftDao _swiftDao;
@@ -245,6 +232,18 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
FirewallRulesDao _firewallDao;
@Inject
VpcManager _vpcMgr;
+ @Inject
+ ConfigurationServer _configServer;
+ @Inject
+ DcDetailsDao _dcDetailsDao;
+ @Inject
+ ClusterDetailsDao _clusterDetailsDao;
+ @Inject
+ StoragePoolDetailsDao _storagePoolDetailsDao;
+ @Inject
+ AccountDetailsDao _accountDetailsDao;
+ @Inject
+ PrimaryDataStoreDao _storagePoolDao;
// FIXME - why don't we have interface for DataCenterLinkLocalIpAddressDao?
@Inject protected DataCenterLinkLocalIpAddressDao _LinkLocalIpAllocDao;
@@ -323,9 +322,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Override
@DB
- public void updateConfiguration(long userId, String name, String category, String value, String scope, Long resourceId) {
+ public String updateConfiguration(long userId, String name, String category, String value, String scope, Long resourceId) {
- String validationMsg = validateConfigurationValue(name, value, scope);
+ String validationMsg = validateConfigurationValue(name, value);
if (validationMsg != null) {
s_logger.error("Invalid configuration option, name: " + name + ", value:" + value);
@@ -335,23 +334,61 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
// If scope of the parameter is given then it needs to be updated in the corresponding details table,
// if scope is mentioned as global or not mentioned then it is normal global parameter updation
if (scope != null && !scope.isEmpty() && !Config.ConfigurationParameterScope.global.toString().equalsIgnoreCase(scope)) {
- if (Config.ConfigurationParameterScope.zone.toString().equalsIgnoreCase(scope)) {
- DataCenterVO zone = _zoneDao.findById(resourceId);
- if (zone == null) {
- throw new InvalidParameterValueException("unable to find zone by id " + resourceId);
- }
- DcDetailVO dcDetailVO = _zoneDetailsDao.findDetail(resourceId, name.toLowerCase());
- if (dcDetailVO == null) {
- dcDetailVO = new DcDetailVO(zone.getId(), name, value);
- _zoneDetailsDao.persist(dcDetailVO);
- } else {
- dcDetailVO.setValue(value);
- _zoneDetailsDao.update(resourceId, dcDetailVO);
- }
- } else {
- s_logger.error("TO Do for the remaining levels (cluster/pool/account)");
- throw new InvalidParameterValueException("The scope "+ scope +" yet to be implemented");
- }
+ switch (Config.ConfigurationParameterScope.valueOf(scope)) {
+ case zone: DataCenterVO zone = _zoneDao.findById(resourceId);
+ if (zone == null) {
+ throw new InvalidParameterValueException("unable to find zone by id " + resourceId);
+ }
+ DcDetailVO dcDetailVO = _dcDetailsDao.findDetail(resourceId, name.toLowerCase());
+ if (dcDetailVO == null) {
+ dcDetailVO = new DcDetailVO(resourceId, name, value);
+ _dcDetailsDao.persist(dcDetailVO);
+ } else {
+ dcDetailVO.setValue(value);
+ _dcDetailsDao.update(dcDetailVO.getId(), dcDetailVO);
+ } break;
+ case cluster: ClusterVO cluster = _clusterDao.findById(resourceId);
+ if (cluster == null) {
+ throw new InvalidParameterValueException("unable to find cluster by id " + resourceId);
+ }
+ ClusterDetailsVO clusterDetailsVO = _clusterDetailsDao.findDetail(resourceId, name);
+ if (clusterDetailsVO == null) {
+ clusterDetailsVO = new ClusterDetailsVO(resourceId, name, value);
+ _clusterDetailsDao.persist(clusterDetailsVO);
+ } else {
+ clusterDetailsVO.setValue(value);
+ _clusterDetailsDao.update(clusterDetailsVO.getId(), clusterDetailsVO);
+ } break;
+
+ case storagepool: StoragePoolVO pool = _storagePoolDao.findById(resourceId);
+ if (pool == null) {
+ throw new InvalidParameterValueException("unable to find storage pool by id " + resourceId);
+ }
+ StoragePoolDetailVO storagePoolDetailVO = _storagePoolDetailsDao.findDetail(resourceId, name);
+ if (storagePoolDetailVO == null) {
+ storagePoolDetailVO = new StoragePoolDetailVO(resourceId, name, value);
+ _storagePoolDetailsDao.persist(storagePoolDetailVO);
+
+ } else {
+ storagePoolDetailVO.setValue(value);
+ _storagePoolDetailsDao.update(storagePoolDetailVO.getId(), storagePoolDetailVO);
+ } break;
+
+ case account: AccountVO account = _accountDao.findById(resourceId);
+ if (account == null) {
+ throw new InvalidParameterValueException("unable to find account by id " + resourceId);
+ }
+ AccountDetailVO accountDetailVO = _accountDetailsDao.findDetail(resourceId, name);
+ if (accountDetailVO == null) {
+ accountDetailVO = new AccountDetailVO(resourceId, name, value);
+ _accountDetailsDao.persist(accountDetailVO);
+ } else {
+ accountDetailVO.setValue(value);
+ _accountDetailsDao.update(accountDetailVO.getId(), accountDetailVO);
+ } break;
+ default: throw new InvalidParameterValueException("Scope provided is invalid");
+ }
+ return value;
}
// Execute all updates in a single transaction
@@ -450,16 +487,19 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
txn.commit();
+ return _configDao.getValue(name);
}
@Override
@ActionEvent(eventType = EventTypes.EVENT_CONFIGURATION_VALUE_EDIT, eventDescription = "updating configuration")
- public Configuration updateConfiguration(UpdateCfgCmd cmd) {
+ public Configuration updateConfiguration(UpdateCfgCmd cmd) throws InvalidParameterValueException {
Long userId = UserContext.current().getCallerUserId();
String name = cmd.getCfgName();
String value = cmd.getValue();
- String scope = cmd.getScope();
- Long id = cmd.getId();
+ Long zoneId = cmd.getZoneId();
+ Long clusterId = cmd.getClusterId();
+ Long storagepoolId = cmd.getStoragepoolId();
+ Long accountId = cmd.getAccountId();
UserContext.current().setEventDetails(" Name: " + name + " New Value: " + (((name.toLowerCase()).contains("password")) ? "*****" :
(((value == null) ? "" : value))));
// check if config value exists
@@ -476,17 +516,44 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
value = null;
}
- updateConfiguration(userId, name, config.getCategory(), value, scope, id);
- String updatedValue = _configDao.getValue(name);
+ String scope = null;
+ Long id = null;
+ int paramCountCheck = 0;
+
+ if (zoneId != null) {
+ scope = Config.ConfigurationParameterScope.zone.toString();
+ id = zoneId;
+ paramCountCheck++;
+ }
+ if (clusterId != null) {
+ scope = Config.ConfigurationParameterScope.cluster.toString();
+ id = clusterId;
+ paramCountCheck++;
+ }
+ if (accountId != null) {
+ scope = Config.ConfigurationParameterScope.account.toString();
+ id = accountId;
+ paramCountCheck++;
+ }
+ if (storagepoolId != null) {
+ scope = Config.ConfigurationParameterScope.storagepool.toString();
+ id = storagepoolId;
+ paramCountCheck++;
+ }
+
+ if (paramCountCheck > 1) {
+ throw new InvalidParameterValueException("cannot handle multiple IDs, provide only one ID corresponding to the scope");
+ }
+
+ String updatedValue = updateConfiguration(userId, name, config.getCategory(), value, scope, id);
if ((value == null && updatedValue == null) || updatedValue.equalsIgnoreCase(value)) {
return _configDao.findByName(name);
-
} else {
throw new CloudRuntimeException("Unable to update configuration parameter " + name);
}
}
- private String validateConfigurationValue(String name, String value, String scope) {
+ private String validateConfigurationValue(String name, String value) {
Config c = Config.getConfig(name);
if (c == null) {
@@ -494,12 +561,6 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
return "Invalid configuration variable.";
}
String configScope = c.getScope();
- if (scope != null && !scope.isEmpty()) {
- if (!configScope.contains(scope)) {
- s_logger.error("Invalid scope " + scope + " for the parameter " + name);
- return "Invalid scope for the parameter.";
- }
- }
Class<?> type = c.getType();
@@ -4077,7 +4138,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
@Override
- public Integer getNetworkOfferingNetworkRate(long networkOfferingId) {
+ public Integer getNetworkOfferingNetworkRate(long networkOfferingId, Long dataCenterId) {
// validate network offering information
NetworkOffering no = getNetworkOffering(networkOfferingId);
@@ -4089,7 +4150,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
if (no.getRateMbps() != null) {
networkRate = no.getRateMbps();
} else {
- networkRate = Integer.parseInt(_configDao.getValue(Config.NetworkThrottlingRate.key()));
+ networkRate = Integer.parseInt(_configServer.getConfigValue(Config.NetworkThrottlingRate.key(), Config.ConfigurationParameterScope.zone.toString(), dataCenterId));
}
// networkRate is unsigned int in netowrkOfferings table, and can't be
@@ -4225,7 +4286,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
}
@Override
- public Integer getServiceOfferingNetworkRate(long serviceOfferingId) {
+ public Integer getServiceOfferingNetworkRate(long serviceOfferingId, Long dataCenterId) {
// validate network offering information
ServiceOffering offering = _serviceOfferingDao.findById(serviceOfferingId);
@@ -4239,7 +4300,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
} else {
// for domain router service offering, get network rate from
if (offering.getSystemVmType() != null && offering.getSystemVmType().equalsIgnoreCase(VirtualMachine.Type.DomainRouter.toString())) {
- networkRate = Integer.parseInt(_configDao.getValue(Config.NetworkThrottlingRate.key()));
+ networkRate = Integer.parseInt(_configServer.getConfigValue(Config.NetworkThrottlingRate.key(), Config.ConfigurationParameterScope.zone.toString(), dataCenterId));
} else {
networkRate = Integer.parseInt(_configDao.getValue(Config.VmNetworkThrottlingRate.key()));
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/deploy/FirstFitPlanner.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/FirstFitPlanner.java b/server/src/com/cloud/deploy/FirstFitPlanner.java
index 1647cf7..2e7e9f6 100755
--- a/server/src/com/cloud/deploy/FirstFitPlanner.java
+++ b/server/src/com/cloud/deploy/FirstFitPlanner.java
@@ -452,21 +452,6 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner {
return disabledPods;
}
- private Map<Short,Float> getCapacityThresholdMap(){
- // Lets build this real time so that the admin wont have to restart MS if he changes these values
- Map<Short,Float> disableThresholdMap = new HashMap<Short, Float>();
-
- String cpuDisableThresholdString = _configDao.getValue(Config.CPUCapacityDisableThreshold.key());
- float cpuDisableThreshold = NumbersUtil.parseFloat(cpuDisableThresholdString, 0.85F);
- disableThresholdMap.put(Capacity.CAPACITY_TYPE_CPU, cpuDisableThreshold);
-
- String memoryDisableThresholdString = _configDao.getValue(Config.MemoryCapacityDisableThreshold.key());
- float memoryDisableThreshold = NumbersUtil.parseFloat(memoryDisableThresholdString, 0.85F);
- disableThresholdMap.put(Capacity.CAPACITY_TYPE_MEMORY, memoryDisableThreshold);
-
- return disableThresholdMap;
- }
-
private List<Short> getCapacitiesForCheckingThreshold(){
List<Short> capacityList = new ArrayList<Short>();
capacityList.add(Capacity.CAPACITY_TYPE_CPU);
@@ -476,7 +461,6 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner {
private void removeClustersCrossingThreshold(List<Long> clusterListForVmAllocation, ExcludeList avoid, VirtualMachineProfile<? extends VirtualMachine> vmProfile, DeploymentPlan plan){
- Map<Short,Float> capacityThresholdMap = getCapacityThresholdMap();
List<Short> capacityList = getCapacitiesForCheckingThreshold();
List<Long> clustersCrossingThreshold = new ArrayList<Long>();
@@ -491,12 +475,11 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner {
return;
}
if (capacity == Capacity.CAPACITY_TYPE_CPU) {
- clustersCrossingThreshold = _capacityDao.listClustersCrossingThreshold(capacity, plan.getDataCenterId(),
- capacityThresholdMap.get(capacity), cpu_requested);
+ clustersCrossingThreshold = _capacityDao.listClustersCrossingThreshold(capacity, plan.getDataCenterId(), Config.CPUCapacityDisableThreshold.key(), cpu_requested);
}
else if (capacity == Capacity.CAPACITY_TYPE_MEMORY ) {
clustersCrossingThreshold = _capacityDao.listClustersCrossingThreshold(capacity, plan.getDataCenterId(),
- capacityThresholdMap.get(capacity), ram_requested );
+ Config.MemoryCapacityDisableThreshold.key(), ram_requested );
}
@@ -506,8 +489,8 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner {
// Remove clusters crossing disabled threshold
clusterListForVmAllocation.removeAll(clustersCrossingThreshold);
- s_logger.debug("Cannot allocate cluster list " + clustersCrossingThreshold.toString() + " for vm creation since their allocated percentage" +
- " crosses the disable capacity threshold: " + capacityThresholdMap.get(capacity) + " for capacity Type : " + capacity + ", skipping these clusters");
+ s_logger.debug("Cannot allocate cluster list " + clustersCrossingThreshold.toString() + " for vm creation since their allocated percentage" +
+ " crosses the disable capacity threshold defined at each cluster/ at global value for capacity Type : " + capacity + ", skipping these clusters");
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 72ccac0..7adcf07 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -46,6 +46,7 @@ import com.cloud.host.Host;
import com.cloud.host.HostVO;
import com.cloud.host.Status;
import com.cloud.host.dao.HostDao;
+import com.cloud.server.ConfigurationServer;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.IpAddress.State;
import com.cloud.network.Network.*;
@@ -153,6 +154,8 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
RemoteAccessVpnService _vpnMgr;
@Inject
PodVlanMapDao _podVlanMapDao;
+ @Inject
+ ConfigurationServer _configServer;
List<NetworkGuru> _networkGurus;
public List<NetworkGuru> getNetworkGurus() {
@@ -245,7 +248,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
int _networkGcWait;
int _networkGcInterval;
- String _networkDomain;
int _networkLockTimeout;
private Map<String, String> _configs;
@@ -866,7 +868,6 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
_networkGcInterval = NumbersUtil.parseInt(_configs.get(Config.NetworkGcInterval.key()), 600);
_configs = _configDao.getConfiguration("Network", params);
- _networkDomain = _configs.get(Config.GuestDomainSuffix.key());
_networkLockTimeout = NumbersUtil.parseInt(_configs.get(Config.NetworkLockTimeout.key()), 600);
@@ -2023,7 +2024,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
// 2) If null, generate networkDomain using domain suffix from the global config variables
if (networkDomain == null) {
- networkDomain = "cs" + Long.toHexString(owner.getId()) + _networkDomain;
+ networkDomain = "cs" + Long.toHexString(owner.getId()) + _configServer.getConfigValue(Config.GuestDomainSuffix.key(), Config.ConfigurationParameterScope.zone.toString(), zoneId);
}
} else {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java
index c5930d9..bd62886 100755
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -52,6 +52,7 @@ import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.exception.UnsupportedServiceException;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.server.ConfigurationServer;
import com.cloud.network.IpAddress.State;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.GuestType;
@@ -143,6 +144,8 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
@Inject
PodVlanMapDao _podVlanMapDao;
+ @Inject
+ ConfigurationServer _configServer;
List<NetworkElement> _networkElements;
public List<NetworkElement> getNetworkElements() {
@@ -921,9 +924,9 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
}
}
if (isUserVmsDefaultNetwork || isDomRGuestOrPublicNetwork) {
- return _configMgr.getServiceOfferingNetworkRate(vm.getServiceOfferingId());
+ return _configMgr.getServiceOfferingNetworkRate(vm.getServiceOfferingId(), vm.getDataCenterId());
} else {
- return _configMgr.getNetworkOfferingNetworkRate(ntwkOff.getId());
+ return _configMgr.getNetworkOfferingNetworkRate(ntwkOff.getId(), vm.getDataCenterId());
}
}
@@ -1564,8 +1567,8 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
}
@Override
- public String getDefaultNetworkDomain() {
- return _networkDomain;
+ public String getDefaultNetworkDomain(long zoneId) {
+ return _configServer.getConfigValue(Config.GuestDomainSuffix.key(), Config.ConfigurationParameterScope.zone.toString(), zoneId);
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 224a680..bc7bb0c 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -582,7 +582,7 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis
// 2) If null, generate networkDomain using domain suffix from the global config variables
if (networkDomain == null) {
- networkDomain = "cs" + Long.toHexString(owner.getId()) + _ntwkModel.getDefaultNetworkDomain();
+ networkDomain = "cs" + Long.toHexString(owner.getId()) + _ntwkModel.getDefaultNetworkDomain(zoneId);
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
index 673535a..062743b 100755
--- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
@@ -62,6 +62,7 @@ import com.cloud.network.rules.FirewallRule.Purpose;
import com.cloud.network.rules.FirewallRuleVO;
import com.cloud.network.rules.RulesManager;
import com.cloud.projects.Project.ListProjectResourcesCriteria;
+import com.cloud.server.ConfigurationServer;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.DomainManager;
@@ -100,6 +101,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
@Inject UsageEventDao _usageEventDao;
@Inject ConfigurationDao _configDao;
@Inject List<RemoteAccessVPNServiceProvider> _vpnServiceProviders;
+ @Inject ConfigurationServer _configServer;
int _userLimit;
@@ -156,7 +158,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
}
if (ipRange == null) {
- ipRange = _clientIpRange;
+ ipRange = _configServer.getConfigValue(Config.RemoteAccessVpnClientIpRange.key(), Config.ConfigurationParameterScope.account.toString(), ipAddr.getAccountId());
}
String[] range = ipRange.split("-");
if (range.length != 2) {
@@ -200,7 +202,7 @@ public class RemoteAccessVpnManagerImpl extends ManagerBase implements RemoteAcc
private void validateRemoteAccessVpnConfiguration() throws ConfigurationException {
String ipRange = _clientIpRange;
if (ipRange == null) {
- s_logger.warn("Remote Access VPN configuration missing client ip range -- ignoring");
+ s_logger.warn("Remote Access VPN global configuration missing client ip range -- ignoring");
return;
}
Integer pskLength = _pskLength;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/server/ConfigurationServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java
index cd890ce..3d97447 100755
--- a/server/src/com/cloud/server/ConfigurationServerImpl.java
+++ b/server/src/com/cloud/server/ConfigurationServerImpl.java
@@ -48,8 +48,10 @@ import com.cloud.dc.*;
import com.cloud.dc.dao.DcDetailsDao;
import com.cloud.user.*;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.commons.codec.binary.Base64;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -59,6 +61,7 @@ import com.cloud.configuration.Resource.ResourceType;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.configuration.dao.ResourceCountDao;
import com.cloud.dc.DataCenter.NetworkType;
+import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.dc.dao.HostPodDao;
import com.cloud.dc.dao.VlanDao;
@@ -112,6 +115,8 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
@Inject private ConfigurationDao _configDao;
@Inject private DataCenterDao _zoneDao;
+ @Inject private ClusterDao _clusterDao;
+ @Inject private PrimaryDataStoreDao _storagePoolDao;
@Inject private HostPodDao _podDao;
@Inject private DiskOfferingDao _diskOfferingDao;
@Inject private ServiceOfferingDao _serviceOfferingDao;
@@ -698,7 +703,7 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
return dcDetailVO.getValue();
} break;
- case cluster: ClusterDetailsVO cluster = _clusterDetailsDao.findById(resourceId);
+ case cluster: ClusterVO cluster = _clusterDao.findById(resourceId);
if (cluster == null) {
throw new InvalidParameterValueException("unable to find cluster by id " + resourceId);
}
@@ -707,7 +712,7 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
return clusterDetailsVO.getValue();
} break;
- case pool: StoragePoolDetailVO pool = _storagePoolDetailsDao.findById(resourceId);
+ case storagepool: StoragePoolVO pool = _storagePoolDao.findById(resourceId);
if (pool == null) {
throw new InvalidParameterValueException("unable to find storage pool by id " + resourceId);
}
@@ -716,7 +721,7 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio
return storagePoolDetailVO.getValue();
} break;
- case account: AccountDetailVO account = _accountDetailsDao.findById(resourceId);
+ case account: AccountVO account = _accountDao.findById(resourceId);
if (account == null) {
throw new InvalidParameterValueException("unable to find account by id " + resourceId);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 1799f77..f18c9d5 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -1274,16 +1274,41 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
Object name = cmd.getConfigName();
Object category = cmd.getCategory();
Object keyword = cmd.getKeyword();
- Long id = cmd.getId();
- String scope = cmd.getScope();
+ Long zoneId = cmd.getZoneId();
+ Long clusterId = cmd.getClusterId();
+ Long storagepoolId = cmd.getStoragepoolId();
+ Long accountId = cmd.getAccountId();
+ String scope = null;
+ Long id = null;
+ int paramCountCheck = 0;
- if (scope!= null && !scope.isEmpty()) {
+ if (zoneId != null) {
+ scope = Config.ConfigurationParameterScope.zone.toString();
+ id = zoneId;
+ paramCountCheck++;
+ }
+ if (clusterId != null) {
+ scope = Config.ConfigurationParameterScope.cluster.toString();
+ id = clusterId;
+ paramCountCheck++;
+ }
+ if (accountId != null) {
+ scope = Config.ConfigurationParameterScope.account.toString();
+ id = accountId;
+ paramCountCheck++;
+ }
+ if (storagepoolId != null) {
+ scope = Config.ConfigurationParameterScope.storagepool.toString();
+ id = storagepoolId;
+ paramCountCheck++;
+ }
+
+ if (paramCountCheck > 1) {
+ throw new InvalidParameterValueException("cannot handle multiple IDs, provide only one ID corresponding to the scope");
+ }
+
+ if (scope != null && !scope.isEmpty()) {
// getting the list of parameters at requested scope
- try {
- Config.ConfigurationParameterScope.valueOf(scope.toLowerCase());
- } catch (Exception e ) {
- throw new InvalidParameterValueException("Invalid scope " + scope + " while listing configuration parameters");
- }
if (id == null) {
throw new InvalidParameterValueException("Invalid id null, id is needed corresponding to the scope");
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java b/server/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
index a0d5d0e..38b5253 100644
--- a/server/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
+++ b/server/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
@@ -41,6 +41,7 @@ public class StoragePoolDetailsDaoImpl extends GenericDaoBase<StoragePoolDetailV
super();
PoolSearch = createSearchBuilder();
PoolSearch.and("pool", PoolSearch.entity().getPoolId(), SearchCriteria.Op.EQ);
+ PoolSearch.and("name", PoolSearch.entity().getName(), SearchCriteria.Op.EQ);
PoolSearch.done();
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/template/TemplateAdapterBase.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateAdapterBase.java b/server/src/com/cloud/template/TemplateAdapterBase.java
index 1b11425..d3fd165 100755
--- a/server/src/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/com/cloud/template/TemplateAdapterBase.java
@@ -32,6 +32,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
import org.apache.log4j.Logger;
import com.cloud.api.ApiDBUtils;
+import com.cloud.configuration.Config;
import com.cloud.configuration.Resource.ResourceType;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.dc.DataCenterVO;
@@ -44,6 +45,7 @@ import com.cloud.exception.ResourceAllocationException;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.org.Grouping;
+import com.cloud.server.ConfigurationServer;
import com.cloud.storage.GuestOS;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
@@ -82,6 +84,7 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
protected @Inject ResourceLimitService _resourceLimitMgr;
protected @Inject DataStoreManager storeMgr;
@Inject TemplateManager templateMgr;
+ @Inject ConfigurationServer _configServer;
@Override
public boolean stop() {
@@ -167,8 +170,8 @@ public abstract class TemplateAdapterBase extends AdapterBase implements Templat
if (url.toLowerCase().contains("file://")) {
throw new InvalidParameterValueException("File:// type urls are currently unsupported");
}
-
- boolean allowPublicUserTemplates = Boolean.parseBoolean(_configDao.getValue("allow.public.user.templates"));
+ // check whether owner can create public templates
+ boolean allowPublicUserTemplates = Boolean.parseBoolean(_configServer.getConfigValue(Config.AllowPublicUserTemplates.key(), Config.ConfigurationParameterScope.account.toString(), templateOwner.getId()));
if (!isAdmin && !allowPublicUserTemplates && isPublic) {
throw new InvalidParameterValueException("Only private templates/ISO can be created.");
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index c7eaa64..63c6f6e 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -113,6 +113,7 @@ import com.cloud.projects.Project;
import com.cloud.projects.ProjectManager;
import com.cloud.resource.ResourceManager;
+import com.cloud.server.ConfigurationServer;
import com.cloud.storage.GuestOSVO;
import com.cloud.storage.LaunchPermissionVO;
import com.cloud.storage.Snapshot;
@@ -253,6 +254,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
protected ResourceManager _resourceMgr;
@Inject VolumeManager volumeMgr;
@Inject VMTemplateHostDao templateHostDao;
+ @Inject
+ ConfigurationServer _configServer;
int _primaryStorageDownloadWait;
@@ -1609,7 +1612,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
}
boolean isAdmin = _accountMgr.isAdmin(caller.getType());
- boolean allowPublicUserTemplates = Boolean.valueOf(_configDao.getValue("allow.public.user.templates"));
+ // check configuration parameter(allow.public.user.templates) value for the template owner
+ boolean allowPublicUserTemplates = Boolean.valueOf(_configServer.getConfigValue(Config.AllowPublicUserTemplates.key(), Config.ConfigurationParameterScope.account.toString(), template.getAccountId()));
if (!isAdmin && !allowPublicUserTemplates && isPublic != null && isPublic) {
throw new InvalidParameterValueException("Only private " + mediaType + "s can be created.");
}
@@ -1842,8 +1846,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
if (isPublic == null) {
isPublic = Boolean.FALSE;
}
- boolean allowPublicUserTemplates = Boolean.parseBoolean(_configDao
- .getValue("allow.public.user.templates"));
+ // check whether template owner can create public templates
+ boolean allowPublicUserTemplates = Boolean.parseBoolean(_configServer.getConfigValue(Config.AllowPublicUserTemplates.key(), Config.ConfigurationParameterScope.account.toString(), templateOwner.getId()));
if (!isAdmin && !allowPublicUserTemplates && isPublic) {
throw new PermissionDeniedException("Failed to create template "
+ name + ", only private templates can be created.");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/test/com/cloud/network/MockNetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java
index 511249f..9d5d4ff 100644
--- a/server/test/com/cloud/network/MockNetworkModelImpl.java
+++ b/server/test/com/cloud/network/MockNetworkModelImpl.java
@@ -566,7 +566,7 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
* @see com.cloud.network.NetworkModel#getDefaultNetworkDomain()
*/
@Override
- public String getDefaultNetworkDomain() {
+ public String getDefaultNetworkDomain(long zoneId) {
// TODO Auto-generated method stub
return null;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
index 6cda294..83b1924 100755
--- a/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
+++ b/server/test/com/cloud/vpc/MockConfigurationManagerImpl.java
@@ -283,7 +283,7 @@ public class MockConfigurationManagerImpl extends ManagerBase implements Configu
* @see com.cloud.configuration.ConfigurationService#getNetworkOfferingNetworkRate(long)
*/
@Override
- public Integer getNetworkOfferingNetworkRate(long networkOfferingId) {
+ public Integer getNetworkOfferingNetworkRate(long networkOfferingId, Long dataCenterId) {
// TODO Auto-generated method stub
return null;
}
@@ -336,7 +336,7 @@ public class MockConfigurationManagerImpl extends ManagerBase implements Configu
* @see com.cloud.configuration.ConfigurationService#getServiceOfferingNetworkRate(long)
*/
@Override
- public Integer getServiceOfferingNetworkRate(long serviceOfferingId) {
+ public Integer getServiceOfferingNetworkRate(long serviceOfferingId, Long dataCenterId) {
// TODO Auto-generated method stub
return null;
}
@@ -426,9 +426,9 @@ public class MockConfigurationManagerImpl extends ManagerBase implements Configu
* @see com.cloud.configuration.ConfigurationManager#updateConfiguration(long, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
- public void updateConfiguration(long userId, String name, String category, String value, String scope, Long resourceId) {
+ public String updateConfiguration(long userId, String name, String category, String value, String scope, Long resourceId) {
// TODO Auto-generated method stub
-
+ return null;
}
/* (non-Javadoc)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/test/com/cloud/vpc/MockNetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vpc/MockNetworkModelImpl.java b/server/test/com/cloud/vpc/MockNetworkModelImpl.java
index 9857964..14cd09d 100644
--- a/server/test/com/cloud/vpc/MockNetworkModelImpl.java
+++ b/server/test/com/cloud/vpc/MockNetworkModelImpl.java
@@ -581,7 +581,7 @@ public class MockNetworkModelImpl extends ManagerBase implements NetworkModel {
* @see com.cloud.network.NetworkModel#getDefaultNetworkDomain()
*/
@Override
- public String getDefaultNetworkDomain() {
+ public String getDefaultNetworkDomain(long zoneId) {
// TODO Auto-generated method stub
return null;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/test/org/apache/cloudstack/affinity/AffinityApiTestConfiguration.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/affinity/AffinityApiTestConfiguration.java b/server/test/org/apache/cloudstack/affinity/AffinityApiTestConfiguration.java
index fb29469..4dd6ad7 100644
--- a/server/test/org/apache/cloudstack/affinity/AffinityApiTestConfiguration.java
+++ b/server/test/org/apache/cloudstack/affinity/AffinityApiTestConfiguration.java
@@ -18,10 +18,17 @@ package org.apache.cloudstack.affinity;
import java.io.IOException;
+import com.cloud.server.ConfigurationServer;
+import com.cloud.user.AccountDetailsDao;
+import com.cloud.user.AccountManager;
+import com.cloud.user.ResourceLimitService;
+import com.cloud.user.UserContextInitializer;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.affinity.dao.AffinityGroupDao;
import org.apache.cloudstack.affinity.dao.AffinityGroupVMMapDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@@ -38,6 +45,8 @@ import com.cloud.api.query.dao.UserAccountJoinDaoImpl;
import com.cloud.capacity.dao.CapacityDaoImpl;
import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.dc.ClusterDetailsDao;
+import com.cloud.dc.dao.DcDetailsDao;
import com.cloud.dc.dao.AccountVlanMapDaoImpl;
import com.cloud.dc.dao.ClusterDaoImpl;
import com.cloud.dc.dao.DataCenterDaoImpl;
@@ -100,10 +109,6 @@ import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.secondary.SecondaryStorageVmManager;
import com.cloud.storage.swift.SwiftManager;
import com.cloud.tags.dao.ResourceTagsDaoImpl;
-import com.cloud.user.AccountManager;
-import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
-import com.cloud.user.UserContextInitializer;
import com.cloud.user.dao.AccountDao;
import com.cloud.user.dao.AccountDaoImpl;
import com.cloud.user.dao.UserDaoImpl;
@@ -330,6 +335,22 @@ public class AffinityApiTestConfiguration {
public DataCenterLinkLocalIpAddressDao datacenterLinkLocalIpAddressDao() {
return Mockito.mock(DataCenterLinkLocalIpAddressDao.class);
}
+
+ @Bean
+ public ConfigurationServer configurationServer() {
+ return Mockito.mock(ConfigurationServer.class);
+ }
+
+ @Bean
+ public ClusterDetailsDao clusterDetailsDao() {
+ return Mockito.mock(ClusterDetailsDao.class);
+ }
+
+ @Bean
+ public AccountDetailsDao accountDetailsDao() {
+ return Mockito.mock(AccountDetailsDao.class);
+ }
+
public static class Library implements TypeFilter {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
----------------------------------------------------------------------
diff --git a/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java b/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
index f1163ef..709dfe2 100644
--- a/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
+++ b/server/test/org/apache/cloudstack/networkoffering/ChildTestConfiguration.java
@@ -19,8 +19,14 @@ package org.apache.cloudstack.networkoffering;
import java.io.IOException;
+import com.cloud.dc.ClusterDetailsDao;
+import com.cloud.dc.dao.*;
+import com.cloud.server.ConfigurationServer;
+import com.cloud.user.*;
import org.apache.cloudstack.acl.SecurityChecker;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDaoImpl;
+import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@@ -37,18 +43,6 @@ import com.cloud.api.query.dao.UserAccountJoinDaoImpl;
import com.cloud.capacity.dao.CapacityDaoImpl;
import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
import com.cloud.configuration.dao.ConfigurationDao;
-import com.cloud.dc.dao.AccountVlanMapDaoImpl;
-import com.cloud.dc.dao.ClusterDaoImpl;
-import com.cloud.dc.dao.DataCenterDaoImpl;
-import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
-import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDao;
-import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl;
-import com.cloud.dc.dao.DataCenterVnetDaoImpl;
-import com.cloud.dc.dao.DcDetailsDaoImpl;
-import com.cloud.dc.dao.HostPodDaoImpl;
-import com.cloud.dc.dao.PodVlanDaoImpl;
-import com.cloud.dc.dao.PodVlanMapDaoImpl;
-import com.cloud.dc.dao.VlanDaoImpl;
import com.cloud.domain.dao.DomainDaoImpl;
import com.cloud.event.dao.UsageEventDaoImpl;
import com.cloud.host.dao.HostDaoImpl;
@@ -97,10 +91,6 @@ import com.cloud.storage.s3.S3Manager;
import com.cloud.storage.secondary.SecondaryStorageVmManager;
import com.cloud.storage.swift.SwiftManager;
import com.cloud.tags.dao.ResourceTagsDaoImpl;
-import com.cloud.user.AccountManager;
-import com.cloud.user.ResourceLimitService;
-import com.cloud.user.UserContext;
-import com.cloud.user.UserContextInitializer;
import com.cloud.user.dao.AccountDaoImpl;
import com.cloud.user.dao.UserDaoImpl;
import com.cloud.utils.component.SpringComponentScanUtils;
@@ -323,6 +313,22 @@ public class ChildTestConfiguration {
public DataCenterLinkLocalIpAddressDao datacenterLinkLocalIpAddressDao() {
return Mockito.mock(DataCenterLinkLocalIpAddressDao.class);
}
+
+ @Bean
+ public ConfigurationServer configurationServer() {
+ return Mockito.mock(ConfigurationServer.class);
+ }
+
+ @Bean
+ public ClusterDetailsDao clusterDetailsDao() {
+ return Mockito.mock(ClusterDetailsDao.class);
+ }
+
+ @Bean
+ public AccountDetailsDao accountDetailsDao() {
+ return Mockito.mock(AccountDetailsDao.class);
+ }
+
public static class Library implements TypeFilter {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/deaf9106/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index 78444fd..a6913b6 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -1110,3 +1110,7 @@ CREATE VIEW `cloud`.`account_view` AS
and async_job.job_status = 0;
alter table `cloud_usage`.`usage_network_offering` add column nic_id bigint(20) unsigned NOT NULL;
+ALTER TABLE `cloud`.`data_center_details` MODIFY value varchar(1024);
+ALTER TABLE `cloud`.`cluster_details` MODIFY value varchar(255);
+ALTER TABLE `cloud`.`storage_pool_details` MODIFY value varchar(255);
+ALTER TABLE `cloud`.`account_details` MODIFY value varchar(255);
[05/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Affinity UI: Pass _custom to fix broken async poll
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/57686aee
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/57686aee
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/57686aee
Branch: refs/heads/marvin_refactor
Commit: 57686aeeaffed74832c20a96a7eaf403ba8c90a1
Parents: 382e8f3
Author: Brian Federle <br...@citrix.com>
Authored: Mon Apr 22 11:27:37 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Mon Apr 22 11:27:37 2013 -0700
----------------------------------------------------------------------
ui/scripts/ui-custom/affinity.js | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/57686aee/ui/scripts/ui-custom/affinity.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/affinity.js b/ui/scripts/ui-custom/affinity.js
index 6c237ed..1f51b52 100644
--- a/ui/scripts/ui-custom/affinity.js
+++ b/ui/scripts/ui-custom/affinity.js
@@ -103,6 +103,7 @@
response: {
success: function(args) {
complete({
+ _custom: args._custom,
$item: $instanceRow
});
},
[27/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Multiple fixes to marvin framework
1. adding hypervisor information to configs
TODO: support for multi-hypervisor zones?
2. CLOUDSTACK-601: Marvin unicode decode errors when running mysql
queries via dbClient
3. adding keypair support for remotessh client
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/2f40a90c
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2f40a90c
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2f40a90c
Branch: refs/heads/marvin_refactor
Commit: 2f40a90c53067c3901cf9e5c9a33309907e48aab
Parents: f429c66
Author: Ashutosh Kelkar <as...@clogeny.com>
Authored: Wed Apr 24 15:03:10 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Fri Apr 26 12:16:08 2013 +0530
----------------------------------------------------------------------
tools/marvin/marvin/asyncJobMgr.py | 70 ++-
tools/marvin/marvin/cloudstackConnection.py | 17 +-
tools/marvin/marvin/cloudstackTestClient.py | 53 ++-
tools/marvin/marvin/dbConnection.py | 6 +-
tools/marvin/marvin/deployDataCenter.py | 7 +
tools/marvin/marvin/integration/lib/base.py | 600 +++++++++++++++++++--
tools/marvin/marvin/integration/lib/utils.py | 17 +-
tools/marvin/marvin/remoteSSHClient.py | 18 +-
8 files changed, 669 insertions(+), 119 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/tools/marvin/marvin/asyncJobMgr.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/asyncJobMgr.py b/tools/marvin/marvin/asyncJobMgr.py
index 40304fa..6984627 100644
--- a/tools/marvin/marvin/asyncJobMgr.py
+++ b/tools/marvin/marvin/asyncJobMgr.py
@@ -28,6 +28,8 @@ class job(object):
def __init__(self):
self.id = None
self.cmd = None
+
+
class jobStatus(object):
def __init__(self):
self.result = None
@@ -37,8 +39,11 @@ class jobStatus(object):
self.duration = None
self.jobId = None
self.responsecls = None
+
def __str__(self):
return '{%s}' % str(', '.join('%s : %s' % (k, repr(v)) for (k, v) in self.__dict__.iteritems()))
+
+
class workThread(threading.Thread):
def __init__(self, in_queue, outqueue, apiClient, db=None, lock=None):
threading.Thread.__init__(self)
@@ -47,11 +52,11 @@ class workThread(threading.Thread):
self.connection = apiClient.connection.__copy__()
self.db = None
self.lock = lock
-
+
def queryAsynJob(self, job):
if job.jobId is None:
return job
-
+
try:
self.lock.acquire()
result = self.connection.poll(job.jobId, job.responsecls).jobresult
@@ -59,10 +64,10 @@ class workThread(threading.Thread):
result = str(e)
finally:
self.lock.release()
-
+
job.result = result
return job
-
+
def executeCmd(self, job):
cmd = job.cmd
@@ -70,14 +75,15 @@ class workThread(threading.Thread):
jobId = None
try:
self.lock.acquire()
-
+
if cmd.isAsync == "false":
jobstatus.startTime = datetime.datetime.now()
-
+
result = self.connection.make_request(cmd)
jobstatus.result = result
jobstatus.endTime = datetime.datetime.now()
- jobstatus.duration = time.mktime(jobstatus.endTime.timetuple()) - time.mktime(jobstatus.startTime.timetuple())
+ jobstatus.duration = time.mktime(jobstatus.endTime.timetuple()) - time.mktime(
+ jobstatus.startTime.timetuple())
else:
result = self.connection.make_request(cmd, None, True)
if result is None:
@@ -99,9 +105,9 @@ class workThread(threading.Thread):
jobstatus.result = sys.exc_info()
finally:
self.lock.release()
-
+
return jobstatus
-
+
def run(self):
while self.inqueue.qsize() > 0:
job = self.inqueue.get()
@@ -109,18 +115,20 @@ class workThread(threading.Thread):
jobstatus = self.queryAsynJob(job)
else:
jobstatus = self.executeCmd(job)
-
+
self.output.put(jobstatus)
self.inqueue.task_done()
-
+
'''release the resource'''
self.connection.close()
+
class jobThread(threading.Thread):
def __init__(self, inqueue, interval):
threading.Thread.__init__(self)
self.inqueue = inqueue
self.interval = interval
+
def run(self):
while self.inqueue.qsize() > 0:
job = self.inqueue.get()
@@ -130,23 +138,25 @@ class jobThread(threading.Thread):
job.apiClient.connection.close()
except:
pass
-
+
self.inqueue.task_done()
time.sleep(self.interval)
-
+
+
class outputDict(object):
def __init__(self):
self.lock = threading.Condition()
- self.dict = {}
+ self.dict = {}
+
class asyncJobMgr(object):
def __init__(self, apiClient, db):
self.inqueue = Queue.Queue()
- self.output = outputDict()
+ self.output = outputDict()
self.outqueue = Queue.Queue()
self.apiClient = apiClient
self.db = db
-
+
def submitCmds(self, cmds):
if not self.inqueue.empty():
return False
@@ -160,11 +170,12 @@ class asyncJobMgr(object):
id += 1
ids.append(id)
return ids
-
+
def updateTimeStamp(self, jobstatus):
jobId = jobstatus.jobId
if jobId is not None and self.db is not None:
- result = self.db.execute("select job_status, created, last_updated from async_job where id=%s"%jobId)
+ result = self.db.execute(
+ "select job_status, created, last_updated from async_job where id='%s'" % str(jobId))
if result is not None and len(result) > 0:
if result[0][0] == 1:
jobstatus.status = True
@@ -174,7 +185,7 @@ class asyncJobMgr(object):
jobstatus.endTime = result[0][2]
delta = jobstatus.endTime - jobstatus.startTime
jobstatus.duration = delta.total_seconds()
-
+
def waitForComplete(self, workers=10):
self.inqueue.join()
lock = threading.Lock()
@@ -183,28 +194,30 @@ class asyncJobMgr(object):
for i in range(workers):
worker = workThread(self.outqueue, resultQueue, self.apiClient, self.db, lock)
worker.start()
-
+
self.outqueue.join()
-
+
asyncJobResult = []
while resultQueue.qsize() > 0:
jobstatus = resultQueue.get()
self.updateTimeStamp(jobstatus)
asyncJobResult.append(jobstatus)
-
+
return asyncJobResult
-
+
'''put commands into a queue at first, then start workers numbers threads to execute this commands'''
+
def submitCmdsAndWait(self, cmds, workers=10):
self.submitCmds(cmds)
lock = threading.Lock()
for i in range(workers):
worker = workThread(self.inqueue, self.outqueue, self.apiClient, self.db, lock)
worker.start()
-
+
return self.waitForComplete(workers)
'''submit one job and execute the same job ntimes, with nums_threads of threads'''
+
def submitJobExecuteNtimes(self, job, ntimes=1, nums_threads=1, interval=1):
inqueue1 = Queue.Queue()
lock = threading.Condition()
@@ -213,22 +226,23 @@ class asyncJobMgr(object):
setattr(newjob, "apiClient", copy.copy(self.apiClient))
setattr(newjob, "lock", lock)
inqueue1.put(newjob)
-
+
for i in range(nums_threads):
work = jobThread(inqueue1, interval)
work.start()
inqueue1.join()
-
+
'''submit n jobs, execute them with nums_threads of threads'''
+
def submitJobs(self, jobs, nums_threads=1, interval=1):
inqueue1 = Queue.Queue()
lock = threading.Condition()
-
+
for job in jobs:
setattr(job, "apiClient", copy.copy(self.apiClient))
setattr(job, "lock", lock)
inqueue1.put(job)
-
+
for i in range(nums_threads):
work = jobThread(inqueue1, interval)
work.start()
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/tools/marvin/marvin/cloudstackConnection.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackConnection.py b/tools/marvin/marvin/cloudstackConnection.py
index 5d30803..9a4c387 100644
--- a/tools/marvin/marvin/cloudstackConnection.py
+++ b/tools/marvin/marvin/cloudstackConnection.py
@@ -33,13 +33,18 @@ from requests import RequestException
class cloudConnection(object):
""" Connections to make API calls to the cloudstack management server
"""
- def __init__(self, mgtSvr, port=8096, apiKey=None, securityKey=None,
+ def __init__(self, mgtSvr, port=8096, user=None, passwd=None,
+ apiKey=None, securityKey=None,
asyncTimeout=3600, logging=None, scheme='http',
path='client/api'):
self.apiKey = apiKey
self.securityKey = securityKey
self.mgtSvr = mgtSvr
self.port = port
+ if user:
+ self.user = user
+ if passwd:
+ self.passwd = passwd
self.logging = logging
self.path = path
self.retries = 5
@@ -55,9 +60,10 @@ class cloudConnection(object):
% (self.protocol, self.mgtSvr, self.port, self.path)
def __copy__(self):
- return cloudConnection(self.mgtSvr, self.port, self.apiKey,
- self.securityKey, self.asyncTimeout,
- self.logging, self.protocol, self.path)
+ return cloudConnection(self.mgtSvr, self.port, self.user, self.passwd,
+ self.apiKey, self.securityKey,
+ self.asyncTimeout, self.logging, self.protocol,
+ self.path)
def poll(self, jobid, response):
"""
@@ -200,7 +206,8 @@ class cloudConnection(object):
@return:
"""
cmdname, isAsync, payload = self.sanitize_command(cmd)
- self.logging.debug("sending %s request: %s %s" % (method, cmdname, str(payload)))
+ self.logging.debug("sending %s request: %s %s" % (method, cmdname,
+ str(payload)))
response = self.request(
cmdname, self.auth, payload=payload, method=method)
self.logging.debug("Request: %s Response: %s" %
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/tools/marvin/marvin/cloudstackTestClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackTestClient.py b/tools/marvin/marvin/cloudstackTestClient.py
index 85552ed..d85a61c 100644
--- a/tools/marvin/marvin/cloudstackTestClient.py
+++ b/tools/marvin/marvin/cloudstackTestClient.py
@@ -18,24 +18,29 @@
import cloudstackConnection
import asyncJobMgr
import dbConnection
-from cloudstackAPI import *
+from cloudstackAPI import *
import random
import string
import hashlib
class cloudstackTestClient(object):
- def __init__(self, mgtSvr=None, port=8096, apiKey = None, securityKey = None, asyncTimeout=3600,
+ def __init__(self, mgtSvr=None, port=8096, user=None, passwd=None,
+ apiKey=None, securityKey=None, asyncTimeout=3600,
defaultWorkerThreads=10, logging=None):
- self.connection = cloudstackConnection.cloudConnection(mgtSvr, port, apiKey, securityKey, asyncTimeout, logging)
+ self.connection = \
+ cloudstackConnection.cloudConnection(
+ mgtSvr, port, user,
+ passwd, apiKey, securityKey,
+ asyncTimeout, logging)
self.apiClient = cloudstackAPIClient.CloudStackAPIClient(self.connection)
self.dbConnection = None
self.asyncJobMgr = None
self.ssh = None
self.defaultWorkerThreads = defaultWorkerThreads
-
+
def dbConfigure(self, host="localhost", port=3306, user='cloud', passwd='cloud', db='cloud'):
self.dbConnection = dbConnection.dbConnection(host, port, user, passwd, db)
-
+
def isAdminContext(self):
"""
A user is a regular user if he fails to listDomains;
@@ -53,7 +58,7 @@ class cloudstackTestClient(object):
return 2 #domain-admin
except:
return 0 #user
-
+
def random_gen(self, size=6, chars=string.ascii_uppercase + string.digits):
"""Generate Random Strings of variable length"""
return ''.join(random.choice(chars) for x in range(size))
@@ -61,7 +66,7 @@ class cloudstackTestClient(object):
def createUserApiClient(self, UserName, DomainName, acctType=0):
if not self.isAdminContext():
return self.apiClient
-
+
listDomain = listDomains.listDomainsCmd()
listDomain.listall = True
listDomain.name = DomainName
@@ -73,11 +78,11 @@ class cloudstackTestClient(object):
cdomain.name = DomainName
domain = self.apiClient.createDomain(cdomain)
domId = domain.id
-
+
mdf = hashlib.md5()
mdf.update("password")
mdf_pass = mdf.hexdigest()
-
+
cmd = listAccounts.listAccountsCmd()
cmd.name = UserName
cmd.domainid = domId
@@ -95,46 +100,47 @@ class cloudstackTestClient(object):
createAcctCmd.username = UserName
acct = self.apiClient.createAccount(createAcctCmd)
acctId = acct.id
-
- listuser = listUsers.listUsersCmd()
+
+ listuser = listUsers.listUsersCmd()
listuser.username = UserName
-
+
listuserRes = self.apiClient.listUsers(listuser)
userId = listuserRes[0].id
apiKey = listuserRes[0].apikey
securityKey = listuserRes[0].secretkey
-
+
if apiKey is None:
registerUser = registerUserKeys.registerUserKeysCmd()
registerUser.id = userId
registerUserRes = self.apiClient.registerUserKeys(registerUser)
apiKey = registerUserRes.apikey
securityKey = registerUserRes.secretkey
-
+
newUserConnection = cloudstackConnection.cloudConnection(self.connection.mgtSvr, self.connection.port,
+ self.connection.user, self.connection.passwd,
apiKey, securityKey, self.connection.asyncTimeout, self.connection.logging)
self.userApiClient = cloudstackAPIClient.CloudStackAPIClient(newUserConnection)
self.userApiClient.connection = newUserConnection
return self.userApiClient
-
+
def close(self):
if self.connection is not None:
self.connection.close()
-
+
def getDbConnection(self):
return self.dbConnection
def executeSql(self, sql=None):
if sql is None or self.dbConnection is None:
return None
-
+
return self.dbConnection.execute()
-
+
def executeSqlFromFile(self, sqlFile=None):
if sqlFile is None or self.dbConnection is None:
return None
return self.dbConnection.executeSqlFromFile(sqlFile)
-
+
def getApiClient(self):
return self.apiClient
@@ -151,18 +157,21 @@ class cloudstackTestClient(object):
'''FixME, httplib has issue if more than one thread submitted'''
+
def submitCmdsAndWait(self, cmds, workers=1):
if self.asyncJobMgr is None:
self.asyncJobMgr = asyncJobMgr.asyncJobMgr(self.apiClient, self.dbConnection)
return self.asyncJobMgr.submitCmdsAndWait(cmds, workers)
-
+
'''submit one job and execute the same job ntimes, with nums_threads of threads'''
+
def submitJob(self, job, ntimes=1, nums_threads=10, interval=1):
if self.asyncJobMgr is None:
self.asyncJobMgr = asyncJobMgr.asyncJobMgr(self.apiClient, self.dbConnection)
self.asyncJobMgr.submitJobExecuteNtimes(job, ntimes, nums_threads, interval)
-
- '''submit n jobs, execute them with nums_threads of threads'''
+
+ '''submit n jobs, execute them with nums_threads of threads'''
+
def submitJobs(self, jobs, nums_threads=10, interval=1):
if self.asyncJobMgr is None:
self.asyncJobMgr = asyncJobMgr.asyncJobMgr(self.apiClient, self.dbConnection)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/tools/marvin/marvin/dbConnection.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/dbConnection.py b/tools/marvin/marvin/dbConnection.py
index 8fa8643..958299a 100644
--- a/tools/marvin/marvin/dbConnection.py
+++ b/tools/marvin/marvin/dbConnection.py
@@ -37,7 +37,11 @@ class dbConnection(object):
return None
resultRow = []
- with contextlib.closing(mysql.connector.connect(host=self.host, port=self.port, user=self.user, password=self.passwd, db=self.database)) as conn:
+ with contextlib.closing(mysql.connector.connect(host=str(self.host),
+ port=int(self.port),
+ user=str(self.user),
+ password=str(self.passwd),
+ db=str(self.database))) as conn:
conn.autocommit = True
with contextlib.closing(conn.cursor(buffered=True)) as cursor:
cursor.execute(sql, params)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/tools/marvin/marvin/deployDataCenter.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py
index d358789..5ca1ebf 100644
--- a/tools/marvin/marvin/deployDataCenter.py
+++ b/tools/marvin/marvin/deployDataCenter.py
@@ -402,6 +402,7 @@ class deployDataCenters():
self.testClient = \
cloudstackTestClient.cloudstackTestClient(mgt.mgtSvrIp, mgt.port, \
+ mgt.user, mgt.passwd, \
mgt.apiKey, \
mgt.securityKey, \
logging=self.testClientLogger)
@@ -409,6 +410,7 @@ class deployDataCenters():
apiKey, securityKey = self.registerApiKey()
self.testClient = \
cloudstackTestClient.cloudstackTestClient(mgt.mgtSvrIp, 8080, \
+ mgt.user, mgt.passwd, \
apiKey, securityKey, \
logging=self.testClientLogger)
@@ -419,6 +421,11 @@ class deployDataCenters():
dbSvr.passwd, dbSvr.db)
self.apiClient = self.testClient.getApiClient()
+ """set hypervisor"""
+ if mgt.hypervisor:
+ self.apiClient.hypervisor = mgt.hypervisor
+ else:
+ self.apiClient.hypervisor = "XenServer" #Defaults to Xenserver
def updateConfiguration(self, globalCfg):
if globalCfg is None:
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/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 6c28523..1d86c6c 100755
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -5,9 +5,9 @@
# 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
@@ -22,7 +22,7 @@
import marvin
from utils import is_server_ssh_ready, random_gen
from marvin.cloudstackAPI import *
-#Import System modules
+# Import System modules
import time
import hashlib
import base64
@@ -54,8 +54,12 @@ class Domain:
cmd.parentdomainid = parentdomainid
elif "parentdomainid" in services:
cmd.parentdomainid = services["parentdomainid"]
-
- return Domain(apiclient.createDomain(cmd).__dict__)
+ try:
+ domain = apiclient.createDomain(cmd)
+ if domain is not None:
+ return Domain(domain.__dict__)
+ except Exception as e:
+ raise e
def delete(self, apiclient, cleanup=None):
"""Delete an domain"""
@@ -83,7 +87,7 @@ class Account:
"""Creates an account"""
cmd = createAccount.createAccountCmd()
- #0 - User, 1 - Root Admin, 2 - Domain Admin
+ # 0 - User, 1 - Root Admin, 2 - Domain Admin
cmd.accounttype = 2 if (admin and domainid) else int(admin)
cmd.email = services["email"]
@@ -213,14 +217,15 @@ class VirtualMachine:
else:
self.ssh_port = 22
self.ssh_client = None
- #extract out the ipaddress
+ # extract out the ipaddress
self.ipaddress = self.nic[0].ipaddress
@classmethod
def create(cls, apiclient, services, templateid=None, accountid=None,
domainid=None, zoneid=None, networkids=None, serviceofferingid=None,
securitygroupids=None, projectid=None, startvm=None,
- diskofferingid=None, affinitygroupnames=None, hostid=None, mode='basic', method='GET'):
+ diskofferingid=None, affinitygroupnames=None, group=None,
+ hostid=None, keypair=None, mode='basic', method='GET'):
"""Create the instance"""
cmd = deployVirtualMachine.deployVirtualMachineCmd()
@@ -234,7 +239,13 @@ class VirtualMachine:
cmd.zoneid = zoneid
elif "zoneid" in services:
cmd.zoneid = services["zoneid"]
- cmd.hypervisor = services["hypervisor"]
+ cmd.hypervisor = apiclient.hypervisor
+
+ if "displayname" in services:
+ cmd.displayname = services["displayname"]
+
+ if "name" in services:
+ cmd.name = services["name"]
if accountid:
cmd.account = accountid
@@ -256,9 +267,16 @@ class VirtualMachine:
elif "template" in services:
cmd.templateid = services["template"]
- if "diskoffering" in services:
+ if diskofferingid:
+ cmd.diskofferingid = diskofferingid
+ elif "diskoffering" in services:
cmd.diskofferingid = services["diskoffering"]
+ if keypair:
+ cmd.keypair = keypair
+ elif "keypair" in services:
+ cmd.keypair = services["keypair"]
+
if securitygroupids:
cmd.securitygroupids = [str(sg_id) for sg_id in securitygroupids]
@@ -282,6 +300,15 @@ class VirtualMachine:
virtual_machine = apiclient.deployVirtualMachine(cmd, method=method)
+ if group:
+ cmd.group = group
+ virtual_machine = apiclient.deployVirtualMachine(cmd)
+
+ if startvm == False:
+ virtual_machine.ssh_ip = virtual_machine.nic[0].ipaddress
+ virtual_machine.public_ip = virtual_machine.nic[0].ipaddress
+ return VirtualMachine(virtual_machine.__dict__, services)
+
# VM should be in Running state after deploy
timeout = 10
while True:
@@ -308,14 +335,14 @@ class VirtualMachine:
virtual_machine.domainid,
services
)
- fw_rule = FireWallRule.create(
+ FireWallRule.create(
apiclient,
ipaddressid=public_ip.ipaddress.id,
protocol='TCP',
cidrlist=['0.0.0.0/0'],
startport=22,
endport=22
- )
+ )
nat_rule = NATRule.create(
apiclient,
virtual_machine,
@@ -348,7 +375,13 @@ class VirtualMachine:
cmd.id = self.id
apiclient.rebootVirtualMachine(cmd)
- def get_ssh_client(self, ipaddress=None, reconnect=False, port=None):
+ def recover(self, apiclient):
+ """Recover the instance"""
+ cmd = recoverVirtualMachine.recoverVirtualMachineCmd()
+ cmd.id = self.id
+ apiclient.recoverVirtualMachine(cmd)
+
+ def get_ssh_client(self, ipaddress=None, reconnect=False, port=None, keyPairFileLocation=None):
"""Get SSH object of VM"""
# If NAT Rules are not created while VM deployment in Advanced mode
@@ -358,27 +391,56 @@ class VirtualMachine:
if port:
self.ssh_port = port
+ if keyPairFileLocation is not None:
+ self.password = None
+
if reconnect:
self.ssh_client = is_server_ssh_ready(
self.ssh_ip,
self.ssh_port,
self.username,
- self.password
+ self.password,
+ keyPairFileLocation=keyPairFileLocation
)
self.ssh_client = self.ssh_client or is_server_ssh_ready(
self.ssh_ip,
self.ssh_port,
self.username,
- self.password
+ self.password,
+ keyPairFileLocation=keyPairFileLocation
)
return self.ssh_client
+ def resetSshKey(self, apiclient, **kwargs):
+ """Resets SSH key"""
+
+ cmd = resetSSHKeyForVirtualMachine.resetSSHKeyForVirtualMachineCmd()
+ cmd.id = self.id
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.resetSSHKeyForVirtualMachine(cmd))
+
+ def update(self, apiclient, **kwargs):
+ """Updates the VM data"""
+
+ cmd = updateVirtualMachine.updateVirtualMachineCmd()
+ cmd.id = self.id
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.updateVirtualMachine(cmd))
+
def delete(self, apiclient):
"""Destroy an Instance"""
cmd = destroyVirtualMachine.destroyVirtualMachineCmd()
cmd.id = self.id
apiclient.destroyVirtualMachine(cmd)
+ def migrate(self, apiclient, hostid=None):
+ """migrate an Instance"""
+ cmd = migrateVirtualMachine.migrateVirtualMachineCmd()
+ cmd.virtualmachineid = self.id
+ if hostid:
+ cmd.hostid = hostid
+ apiclient.migrateVirtualMachine(cmd)
+
def attach_volume(self, apiclient, volume):
"""Attach volume to instance"""
cmd = attachVolume.attachVolumeCmd()
@@ -394,7 +456,7 @@ class VirtualMachine:
def add_nic(self, apiclient, networkId):
"""Add a NIC to a VM"""
- cmd = addNicToVirtualMachine.addNicToVirtualMachineCmd();
+ cmd = addNicToVirtualMachine.addNicToVirtualMachineCmd()
cmd.virtualmachineid = self.id
cmd.networkid = networkId
return apiclient.addNicToVirtualMachine(cmd)
@@ -413,6 +475,26 @@ class VirtualMachine:
cmd.virtualmachineid = self.id
return apiclient.updateDefaultNicForVirtualMachine(cmd)
+ def attach_iso(self, apiclient, iso):
+ """Attach ISO to instance"""
+ cmd = attachIso.attachIsoCmd()
+ cmd.id = iso.id
+ cmd.virtualmachineid = self.id
+ return apiclient.attachIso(cmd)
+
+ def detach_iso(self, apiclient):
+ """Detach ISO to instance"""
+ cmd = detachIso.detachIsoCmd()
+ cmd.id = self.id
+ return apiclient.detachIso(cmd)
+
+ def change_service_offering(self, apiclient, serviceOfferingId):
+ """Change service offering of the instance"""
+ cmd = changeServiceForVirtualMachine.changeServiceForVirtualMachineCmd()
+ cmd.id = self.id
+ cmd.serviceofferingid = serviceOfferingId
+ return apiclient.changeServiceForVirtualMachine(cmd)
+
@classmethod
def list(cls, apiclient, **kwargs):
"""List all VMs matching criteria"""
@@ -428,16 +510,14 @@ class VirtualMachine:
cmd.id = self.id
try:
response = apiclient.resetPasswordForVirtualMachine(cmd)
- print response
except Exception as e:
raise Exception("Reset Password failed! - %s" % e)
- print type(response)
if isinstance(response, list):
return response[0].password
class Volume:
- """Manage Volume Lifecycle
+ """Manage Volume Life cycle
"""
def __init__(self, items):
self.__dict__.update(items)
@@ -533,7 +613,7 @@ class Volume:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listVolumes(cmd))
- def resize(cls, apiclient, **kwargs):
+ def resize(self, apiclient, **kwargs):
"""Resize a volume"""
cmd = resizeVolume.resizeVolumeCmd()
cmd.id = self.id
@@ -541,6 +621,58 @@ class Volume:
return(apiclient.resizeVolume(cmd))
@classmethod
+ def upload(cls, apiclient, services, zoneid=None, account=None, domainid=None, url=None):
+ """Uploads the volume to specified account"""
+
+ cmd = uploadVolume.uploadVolumeCmd()
+ if zoneid:
+ cmd.zoneid = zoneid
+ if account:
+ cmd.account = account
+ if domainid:
+ cmd.domainid = domainid
+ cmd.format = services["format"]
+ cmd.name = services["diskname"]
+ if url:
+ cmd.url = url
+ else:
+ cmd.url = services["url"]
+ return Volume(apiclient.uploadVolume(cmd).__dict__)
+
+ def wait_for_upload(self, apiclient, timeout=5, interval=60):
+ """Wait for upload"""
+ # Sleep to ensure template is in proper state before download
+ time.sleep(interval)
+
+ while True:
+ volume_response = Volume.list(
+ apiclient,
+ id=self.id,
+ zoneid=self.zoneid,
+ )
+ if isinstance(volume_response, list):
+
+ volume = volume_response[0]
+ # If volume is ready,
+ # volume.state = Allocated
+ if volume.state == 'Uploaded':
+ break
+
+ elif 'Uploading' in volume.state:
+ time.sleep(interval)
+
+ elif 'Installing' not in volume.state:
+ raise Exception(
+ "Error in uploading volume: status - %s" %
+ volume.state)
+ elif timeout == 0:
+ break
+
+ else:
+ time.sleep(interval)
+ timeout = timeout - 1
+ return
+
def migrate(cls, apiclient, **kwargs):
"""Migrate a volume"""
cmd = migrateVolume.migrateVolumeCmd()
@@ -592,7 +724,7 @@ class Template:
def create(cls, apiclient, services, volumeid=None,
account=None, domainid=None, projectid=None):
"""Create template from Volume"""
- #Create template from Virtual machine and Volume ID
+ # Create template from Virtual machine and Volume ID
cmd = createTemplate.createTemplateCmd()
cmd.displaytext = services["displaytext"]
cmd.name = "-".join([services["name"], random_gen()])
@@ -617,7 +749,6 @@ class Template:
cmd.ispublic = services["ispublic"] if "ispublic" in services else False
cmd.isextractable = services["isextractable"] if "isextractable" in services else False
cmd.passwordenabled = services["passwordenabled"] if "passwordenabled" in services else False
- cmd.passwordenabled = services["passwordenabled"] if "passwordenabled" in services else False
if volumeid:
cmd.volumeid = volumeid
@@ -637,12 +768,12 @@ class Template:
account=None, domainid=None):
"""Create template from URL"""
- #Create template from Virtual machine and Volume ID
+ # Create template from Virtual machine and Volume ID
cmd = registerTemplate.registerTemplateCmd()
cmd.displaytext = services["displaytext"]
cmd.name = "-".join([services["name"], random_gen()])
cmd.format = services["format"]
- cmd.hypervisor = services["hypervisor"]
+ cmd.hypervisor = apiclient.hypervisor
if "ostypeid" in services:
cmd.ostypeid = services["ostypeid"]
@@ -689,7 +820,7 @@ class Template:
def create_from_snapshot(cls, apiclient, snapshot, services,
random_name=True):
"""Create Template from snapshot"""
- #Create template from Virtual machine and Snapshot ID
+ # Create template from Virtual machine and Snapshot ID
cmd = createTemplate.createTemplateCmd()
cmd.displaytext = services["displaytext"]
cmd.name = "-".join([
@@ -726,7 +857,7 @@ class Template:
def download(self, apiclient, timeout=5, interval=60):
"""Download Template"""
- #Sleep to ensure template is in proper state before download
+ # Sleep to ensure template is in proper state before download
time.sleep(interval)
while True:
@@ -789,7 +920,7 @@ class Iso:
def create(cls, apiclient, services, account=None, domainid=None,
projectid=None):
"""Create an ISO"""
- #Create ISO from URL
+ # Create ISO from URL
cmd = registerIso.registerIsoCmd()
cmd.displaytext = services["displaytext"]
cmd.name = services["name"]
@@ -841,7 +972,7 @@ class Iso:
def download(self, apiclient, timeout=5, interval=60):
"""Download an ISO"""
- #Ensuring ISO is successfully downloaded
+ # Ensuring ISO is successfully downloaded
while True:
time.sleep(interval)
@@ -853,7 +984,6 @@ class Iso:
response = iso_response[0]
# Again initialize timeout to avoid listISO failure
timeout = 5
- print response.status
# Check whether download is in progress(for Ex:10% Downloaded)
# or ISO is 'Successfully Installed'
if response.status == 'Successfully Installed':
@@ -940,7 +1070,7 @@ class NATRule:
@classmethod
def create(cls, apiclient, virtual_machine, services, ipaddressid=None,
- projectid=None, networkid=None):
+ projectid=None, openfirewall=False, networkid=None, vpcid=None):
"""Create Port forwarding rule"""
cmd = createPortForwardingRule.createPortForwardingRuleCmd()
@@ -951,15 +1081,24 @@ class NATRule:
cmd.privateport = services["privateport"]
cmd.publicport = services["publicport"]
+ if "privateendport" in services:
+ cmd.privateendport = services["privateendport"]
+ if "publicendport" in services:
+ cmd.publicendport = services["publicendport"]
cmd.protocol = services["protocol"]
cmd.virtualmachineid = virtual_machine.id
if projectid:
cmd.projectid = projectid
+ if openfirewall:
+ cmd.openfirewall = True
+
if networkid:
cmd.networkid = networkid
+ if vpcid:
+ cmd.vpcid = vpcid
return NATRule(apiclient.createPortForwardingRule(cmd).__dict__)
def delete(self, apiclient):
@@ -985,10 +1124,10 @@ class StaticNATRule:
self.__dict__.update(items)
@classmethod
- def create(cls, apiclient, services, ipaddressid=None, vpcid=None):
+ def create(cls, apiclient, services, ipaddressid=None, networkid=None, vpcid=None):
"""Creates static ip forwarding rule"""
- cmd = createIpForwardingRule.createIpForwardingRuleCmd()
+ cmd = createFirewallRule.createFirewallRuleCmd()
cmd.protocol = services["protocol"]
cmd.startport = services["startport"]
@@ -1003,10 +1142,12 @@ class StaticNATRule:
elif "ipaddressid" in services:
cmd.ipaddressid = services["ipaddressid"]
+ if networkid:
+ cmd.networkid = networkid
+
if vpcid:
cmd.vpcid = vpcid
-
- return StaticNATRule(apiclient.createIpForwardingRule(cmd).__dict__)
+ return StaticNATRule(apiclient.createFirewallRule(cmd).__dict__)
def delete(self, apiclient):
"""Delete IP forwarding rule"""
@@ -1024,12 +1165,14 @@ class StaticNATRule:
return(apiclient.listIpForwardingRules(cmd))
@classmethod
- def enable(cls, apiclient, ipaddressid, virtualmachineid):
+ def enable(cls, apiclient, ipaddressid, virtualmachineid, networkid=None):
"""Enables Static NAT rule"""
cmd = enableStaticNat.enableStaticNatCmd()
cmd.ipaddressid = ipaddressid
cmd.virtualmachineid = virtualmachineid
+ if networkid:
+ cmd.networkid = networkid
apiclient.enableStaticNat(cmd)
return
@@ -1105,6 +1248,14 @@ class ServiceOffering:
if "storagetype" in services:
cmd.storagetype = services["storagetype"]
+ if "systemvmtype" in services:
+ cmd.systemvmtype = services['systemvmtype']
+
+ if "issystem" in services:
+ cmd.issystem = services['issystem']
+
+ if "tags" in services:
+ cmd.tags = services["tags"]
# Service Offering private to that domain
if domainid:
cmd.domainid = domainid
@@ -1183,20 +1334,25 @@ class NetworkOffering:
cmd.displaytext = "-".join([services["displaytext"], random_gen()])
cmd.name = "-".join([services["name"], random_gen()])
cmd.guestiptype = services["guestiptype"]
- cmd.supportedservices = services["supportedservices"]
+ cmd.supportedservices = ''
+ if "supportedservices" in services:
+ cmd.supportedservices = services["supportedservices"]
cmd.traffictype = services["traffictype"]
+ if "useVpc" in services:
+ cmd.useVpc = services["useVpc"]
cmd.serviceProviderList = []
- for service, provider in services["serviceProviderList"].items():
- cmd.serviceProviderList.append({
+ if "serviceProviderList" in services:
+ for service, provider in services["serviceProviderList"].items():
+ cmd.serviceProviderList.append({
'service': service,
'provider': provider
})
if "servicecapabilitylist" in services:
- cmd.servicecapabilitylist = []
+ cmd.serviceCapabilityList = []
for service, capability in services["servicecapabilitylist"].items():
for ctype, value in capability.items():
- cmd.servicecapabilitylist.append({
+ cmd.serviceCapabilityList.append({
'service': service,
'capabilitytype': ctype,
'capabilityvalue': value
@@ -1205,6 +1361,7 @@ class NetworkOffering:
cmd.specifyVlan = services["specifyVlan"]
if "specifyIpRanges" in services:
cmd.specifyIpRanges = services["specifyIpRanges"]
+ cmd.availability = 'Optional'
[setattr(cmd, k, v) for k, v in kwargs.items()]
@@ -1275,7 +1432,7 @@ class LoadBalancerRule:
@classmethod
def create(cls, apiclient, services, ipaddressid=None, accountid=None,
- networkid=None, projectid=None, domainid=None):
+ networkid=None, vpcid=None, projectid=None, domainid=None):
"""Create Load balancing Rule"""
cmd = createLoadBalancerRule.createLoadBalancerRuleCmd()
@@ -1293,6 +1450,8 @@ class LoadBalancerRule:
if domainid:
cmd.domainid = domainid
+ if vpcid:
+ cmd.vpcid = vpcid
cmd.name = services["name"]
cmd.algorithm = services["alg"]
cmd.privateport = services["privateport"]
@@ -1359,19 +1518,19 @@ class LoadBalancerRule:
for name, value in param.items():
cmd.param.append({'name': name, 'value': value})
return apiclient.createLBStickinessPolicy(cmd)
-
+
def deleteSticky(self, apiclient, id):
"""Deletes stickyness policy"""
-
+
cmd = deleteLBStickinessPolicy.deleteLBStickinessPolicyCmd()
cmd.id = id
return apiclient.deleteLBStickinessPolicy(cmd)
-
+
@classmethod
def listStickyPolicies(cls, apiclient, lbruleid, **kwargs):
"""Lists stickiness policies for load balancing rule"""
-
- cmd= listLBStickinessPolicies.listLBStickinessPoliciesCmd()
+
+ cmd = listLBStickinessPolicies.listLBStickinessPoliciesCmd()
cmd.lbruleid = lbruleid
[setattr(cmd, k, v) for k, v in kwargs.items()]
return apiclient.listLBStickinessPolicies(cmd)
@@ -1396,7 +1555,7 @@ class Cluster:
"""Create Cluster"""
cmd = addCluster.addClusterCmd()
cmd.clustertype = services["clustertype"]
- cmd.hypervisor = services["hypervisor"]
+ cmd.hypervisor = apiclient.hypervisor
if zoneid:
cmd.zoneid = zoneid
@@ -1446,7 +1605,7 @@ class Host:
"""Create Host in cluster"""
cmd = addHost.addHostCmd()
- cmd.hypervisor = services["hypervisor"]
+ cmd.hypervisor = apiclient.hypervisor
cmd.url = services["url"]
cmd.clusterid = cluster.id
@@ -1494,6 +1653,29 @@ class Host:
return apiclient.prepareHostForMaintenance(cmd)
@classmethod
+ def enableMaintenance(cls, apiclient, id):
+ """enables maintainance mode Host"""
+
+ cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
+ cmd.id = id
+ return apiclient.prepareHostForMaintenance(cmd)
+
+ def cancelMaintenance(self, apiclient):
+ """Cancels maintainance mode Host"""
+
+ cmd = cancelHostMaintenance.cancelHostMaintenanceCmd()
+ cmd.id = self.id
+ return apiclient.cancelHostMaintenance(cmd)
+
+ @classmethod
+ def cancelMaintenance(cls, apiclient, id):
+ """Cancels maintainance mode Host"""
+
+ cmd = cancelHostMaintenance.cancelHostMaintenanceCmd()
+ cmd.id = id
+ return apiclient.cancelHostMaintenance(cmd)
+
+ @classmethod
def list(cls, apiclient, **kwargs):
"""List all Hosts matching criteria"""
@@ -1586,7 +1768,8 @@ class Network:
@classmethod
def create(cls, apiclient, services, accountid=None, domainid=None,
- networkofferingid=None, projectid=None, zoneid=None,
+ networkofferingid=None, projectid=None,
+ subdomainaccess=None, zoneid=None,
gateway=None, netmask=None, vpcid=None, guestcidr=None):
"""Create Network for account"""
cmd = createNetwork.createNetworkCmd()
@@ -1603,6 +1786,9 @@ class Network:
elif "zoneid" in services:
cmd.zoneid = services["zoneid"]
+ if subdomainaccess is not None:
+ cmd.subdomainaccess = subdomainaccess
+
if gateway:
cmd.gateway = gateway
elif "gateway" in services:
@@ -1717,7 +1903,7 @@ class Vpn:
@classmethod
def create(cls, apiclient, publicipid, account=None, domainid=None,
- projectid=None, vpcid=None):
+ projectid=None, networkid=None, vpcid=None):
"""Create VPN for Public IP address"""
cmd = createRemoteAccessVpn.createRemoteAccessVpnCmd()
cmd.publicipid = publicipid
@@ -1727,6 +1913,8 @@ class Vpn:
cmd.domainid = domainid
if projectid:
cmd.projectid = projectid
+ if networkid:
+ cmd.networkid = networkid
if vpcid:
cmd.vpcid = vpcid
return Vpn(apiclient.createRemoteAccessVpn(cmd).__dict__)
@@ -1755,10 +1943,11 @@ class VpnUser:
@classmethod
def create(cls, apiclient, username, password, account=None, domainid=None,
- projectid=None):
+ projectid=None, rand_name=True):
"""Create VPN user"""
cmd = addVpnUser.addVpnUserCmd()
- cmd.username = username
+ cmd.username = "-".join([username,
+ random_gen()]) if rand_name else username
cmd.password = password
if account:
@@ -1997,6 +2186,7 @@ class PhysicalNetwork:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return map(lambda pn : PhysicalNetwork(pn.__dict__), apiclient.listPhysicalNetworks(cmd))
+
class SecurityGroup:
"""Manage Security Groups"""
@@ -2364,6 +2554,104 @@ class NetworkServiceProvider:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listNetworkServiceProviders(cmd))
+
+class Router:
+ """Manage router life cycle"""
+
+ def __init__(self, items):
+ self.__dict__.update(items)
+
+ @classmethod
+ def start(cls, apiclient, id):
+ """Starts the router"""
+ cmd = startRouter.startRouterCmd()
+ cmd.id = id
+ return apiclient.startRouter(cmd)
+
+ @classmethod
+ def stop(cls, apiclient, id, forced=None):
+ """Stops the router"""
+ cmd = stopRouter.stopRouterCmd()
+ cmd.id = id
+ if forced:
+ cmd.forced = forced
+ return apiclient.stopRouter(cmd)
+
+ @classmethod
+ def reboot(cls, apiclient, id):
+ """Reboots the router"""
+ cmd = rebootRouter.rebootRouterCmd()
+ cmd.id = id
+ return apiclient.rebootRouter(cmd)
+
+ @classmethod
+ def destroy(cls, apiclient, id):
+ """Destroy the router"""
+ cmd = destroyRouter.destroyRouterCmd()
+ cmd.id = id
+ return apiclient.destroyRouter(cmd)
+
+ @classmethod
+ def change_service_offering(cls, apiclient, id, serviceofferingid):
+ """Change service offering of the router"""
+ cmd = changeServiceForRouter.changeServiceForRouterCmd()
+ cmd.id = id
+ cmd.serviceofferingid = serviceofferingid
+ return apiclient.changeServiceForRouter(cmd)
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """List routers"""
+
+ cmd = listRouters.listRoutersCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listRouters(cmd))
+
+
+class Tag:
+ """Manage tags"""
+
+ def __init__(self, items):
+ self.__dict__.update(items)
+
+ @classmethod
+ def create(cls, apiclient, resourceIds, resourceType, tags):
+ """Create tags"""
+
+ cmd = createTags.createTagsCmd()
+ cmd.resourceIds = resourceIds
+ cmd.resourcetype = resourceType
+ cmd.tags = []
+ for key, value in tags.items():
+ cmd.tags.append({
+ 'key': key,
+ 'value': value
+ })
+ return Tag(apiclient.createTags(cmd).__dict__)
+
+ def delete(self, apiclient, resourceIds, resourceType, tags):
+ """Delete tags"""
+
+ cmd = deleteTags.deleteTagsCmd()
+ cmd.resourceIds = resourceIds
+ cmd.resourcetype = resourceType
+ cmd.tags = []
+ for key, value in tags.items():
+ cmd.tags.append({
+ 'key': key,
+ 'value': value
+ })
+ apiclient.deleteTags(cmd)
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """List all tags matching the criteria"""
+
+ cmd = listTags.listTagsCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listTags(cmd))
+
+
class VpcOffering:
"""Manage VPC offerings"""
@@ -2417,7 +2705,7 @@ class VPC:
@classmethod
def create(cls, apiclient, services, vpcofferingid,
- zoneid, networkDomain=None, account=None, domainid=None):
+ zoneid, networkDomain=None, account=None, domainid=None):
"""Creates the virtual private connection (VPC)"""
cmd = createVPC.createVPCCmd()
@@ -2467,6 +2755,40 @@ class VPC:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listVPCs(cmd))
+
+class PrivateGateway:
+ """Manage private gateway lifecycle"""
+ def create(cls, apiclient, gateway, ipaddress, netmask, vlan, vpcid,
+ physicalnetworkid=None):
+ """Create private gateway"""
+
+ cmd = createPrivateGateway.createPrivateGatewayCmd()
+ cmd.gateway = gateway
+ cmd.ipaddress = ipaddress
+ cmd.netmask = netmask
+ cmd.vlan = vlan
+ cmd.vpcid = vpcid
+ if physicalnetworkid:
+ cmd.physicalnetworkid = physicalnetworkid
+
+ return PrivateGateway(apiclient.createPrivateGateway(cmd).__dict__)
+
+ def delete(self, apiclient):
+ """Delete private gateway"""
+
+ cmd = deletePrivateGateway.deletePrivateGatewayCmd()
+ cmd.id = self.id
+ return apiclient.deletePrivateGateway(cmd)
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """List private gateways"""
+
+ cmd = listPrivateGateways.listPrivateGatewaysCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listPrivateGateways(cmd))
+
+
class AffinityGroup:
def __init__(self, items):
self.__dict__.update(items)
@@ -2495,9 +2817,35 @@ class AffinityGroup:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listVPCs(cmd))
+class StaticRoute:
+ """Manage static route lifecycle"""
+ @classmethod
+ def create(cls, apiclient, cidr, gatewayid):
+ """Create static route"""
+
+ cmd = createStaticRoute.createStaticRouteCmd()
+ cmd.cidr = cidr
+ cmd.gatewayid = gatewayid
+ return StaticRoute(apiclient.createStaticRoute(cmd).__dict__)
+
+ def delete(self, apiclient):
+ """Delete static route"""
+
+ cmd = deleteStaticRoute.deleteStaticRouteCmd()
+ cmd.id = self.id
+ return apiclient.deleteStaticRoute(cmd)
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """List static route"""
+
+ cmd = listStaticRoutes.listStaticRoutesCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listStaticRoutes(cmd))
+
+
class VNMC:
"""Manage VNMC lifecycle"""
-
def __init__(self, items):
self.__dict__.update(items)
@@ -2526,13 +2874,153 @@ class VNMC:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listCiscoVnmcResources(cmd))
-class ASA1000V:
- """Manage ASA 1000v lifecycle"""
+
+class SSHKeyPair:
+ """Manage SSH Key pairs"""
+
+ def __init__(self, items, services):
+ self.__dict__.update(items)
+
+ @classmethod
+ def create(cls, apiclient, name=None, account=None,
+ domainid=None, projectid=None):
+ """Creates SSH keypair"""
+ cmd = createSSHKeyPair.createSSHKeyPairCmd()
+ cmd.name = name
+ if account is not None:
+ cmd.account = account
+ if domainid is not None:
+ cmd.domainid = domainid
+ if projectid is not None:
+ cmd.projectid = projectid
+ return (apiclient.createSSHKeyPair(cmd))
+
+ def delete(self, apiclient):
+ """Delete SSH key pair"""
+ cmd = deleteSSHKeyPair.deleteSSHKeyPairCmd()
+ cmd.name = self.name
+ apiclient.deleteSSHKeyPair(cmd)
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """List all SSH key pairs"""
+ cmd = listSSHKeyPairs.listSSHKeyPairsCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listSSHKeyPairs(cmd))
+
+
+class Capacities:
+ """Manage Capacities"""
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """Lists capacities"""
+
+ cmd = listCapacity.listCapacityCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listCapacity(cmd))
+
+
+class Alert:
+ """Manage alerts"""
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """Lists alerts"""
+
+ cmd = listAlerts.listAlertsCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.listAlerts(cmd))
+
+
+class InstanceGroup:
+ """Manage VM instance groups"""
def __init__(self, items):
self.__dict__.update(items)
@classmethod
+ def create(cls, apiclient, name=None, account=None, domainid=None,
+ projectid=None, networkid=None, rand_name=True):
+ """Creates instance groups"""
+
+ cmd = createInstanceGroup.createInstanceGroupCmd()
+ cmd.name = "-".join([name, random_gen()]) if rand_name else name
+ if account is not None:
+ cmd.account = account
+ if domainid is not None:
+ cmd.domainid = domainid
+ if projectid is not None:
+ cmd.projectid = projectid
+ if networkid is not None:
+ cmd.networkid = networkid
+ return InstanceGroup(apiclient.createInstanceGroup(cmd).__dict__)
+
+ def delete(self, apiclient):
+ """Delete instance group"""
+ cmd = deleteInstanceGroup.deleteInstanceGroupCmd()
+ cmd.id = self.id
+ apiclient.deleteInstanceGroup(cmd)
+
+ def update(self, apiclient, **kwargs):
+ """Updates the instance groups"""
+ cmd = updateInstanceGroup.updateInstanceGroupCmd()
+ cmd.id = self.id
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return (apiclient.updateInstanceGroup(cmd))
+
+ @classmethod
+ def list(cls, apiclient, **kwargs):
+ """List all instance groups"""
+ cmd = listInstanceGroups.listInstanceGroupsCmd()
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return (apiclient.listInstanceGroups(cmd))
+
+ def startInstances(self, apiclient):
+ """Starts all instances in a VM tier"""
+
+ cmd = startVirtualMachine.startVirtualMachineCmd()
+ cmd.group = self.id
+ return apiclient.startVirtualMachine(cmd)
+
+ def stopInstances(self, apiclient):
+ """Stops all instances in a VM tier"""
+
+ cmd = stopVirtualMachine.stopVirtualMachineCmd()
+ cmd.group = self.id
+ return apiclient.stopVirtualMachine(cmd)
+
+ def rebootInstances(self, apiclient):
+ """Reboot all instances in a VM tier"""
+
+ cmd = rebootVirtualMachine.rebootVirtualMachineCmd()
+ cmd.group = self.id
+ return apiclient.rebootVirtualMachine(cmd)
+
+ def deleteInstances(self, apiclient):
+ """Stops all instances in a VM tier"""
+
+ cmd = destroyVirtualMachine.destroyVirtualMachineCmd()
+ cmd.group = self.id
+ return apiclient.destroyVirtualMachine(cmd)
+
+ def changeServiceOffering(self, apiclient, serviceOfferingId):
+ """Change service offering of the vm tier"""
+
+ cmd = changeServiceForVirtualMachine.changeServiceForVirtualMachineCmd()
+ cmd.group = self.id
+ cmd.serviceofferingid = serviceOfferingId
+ return apiclient.changeServiceForVirtualMachine(cmd)
+
+ def recoverInstances(self, apiclient):
+ """Recover the instances from vm tier"""
+ cmd = recoverVirtualMachine.recoverVirtualMachineCmd()
+ cmd.group = self.id
+ apiclient.recoverVirtualMachine(cmd)
+
+
+class ASA1000V:
+ """Manage ASA 1000v lifecycle"""
def create(cls, apiclient, hostname, insideportprofile, clusterid, physicalnetworkid):
"""Registers ASA 1000v appliance"""
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/tools/marvin/marvin/integration/lib/utils.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/utils.py b/tools/marvin/marvin/integration/lib/utils.py
index cff24a1..6892c41 100644
--- a/tools/marvin/marvin/integration/lib/utils.py
+++ b/tools/marvin/marvin/integration/lib/utils.py
@@ -106,12 +106,17 @@ def cleanup_resources(api_client, resources):
obj.delete(api_client)
-def is_server_ssh_ready(ipaddress, port, username, password, retries=50):
+def is_server_ssh_ready(ipaddress, port, username, password, retries=50, keyPairFileLocation=None):
"""Return ssh handle else wait till sshd is running"""
loop_cnt = retries
while True:
try:
- ssh = remoteSSHClient(ipaddress, port, username, password)
+ ssh = remoteSSHClient(
+ host=ipaddress,
+ port=port,
+ user=username,
+ passwd=password,
+ keyPairFileLocation=keyPairFileLocation)
except Exception as e:
if loop_cnt == 0:
raise e
@@ -149,12 +154,16 @@ def fetch_api_client(config_file='datacenterCfg'):
)
-def get_process_status(hostip, port, username, password, linklocalip, process):
+def get_process_status(hostip, port, username, password, linklocalip, process, hypervisor=None):
"""Double hop and returns a process status"""
#SSH to the machine
ssh = remoteSSHClient(hostip, port, username, password)
- ssh_command = "ssh -i ~/.ssh/id_rsa.cloud -ostricthostkeychecking=no "
+ if str(hypervisor).lower() == 'vmware':
+ ssh_command = "ssh -i /var/lib/cloud/management/.ssh/id_rsa -ostricthostkeychecking=no "
+ else:
+ ssh_command = "ssh -i ~/.ssh/id_rsa.cloud -ostricthostkeychecking=no "
+
ssh_command = ssh_command + \
"-oUserKnownHostsFile=/dev/null -p 3922 %s %s" % (
linklocalip,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2f40a90c/tools/marvin/marvin/remoteSSHClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/remoteSSHClient.py b/tools/marvin/marvin/remoteSSHClient.py
index 4fb2f0d..04450fd 100644
--- a/tools/marvin/marvin/remoteSSHClient.py
+++ b/tools/marvin/marvin/remoteSSHClient.py
@@ -23,11 +23,12 @@ import logging
from contextlib import closing
class remoteSSHClient(object):
- def __init__(self, host, port, user, passwd, retries = 10, log_lvl=logging.INFO):
+ def __init__(self, host, port, user, passwd, retries = 10, log_lvl=logging.INFO, keyPairFileLocation=None):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
+ self.keyPairFile = keyPairFileLocation
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.logger = logging.getLogger('sshClient')
@@ -38,8 +39,19 @@ class remoteSSHClient(object):
retry_count = retries
while True:
try:
- self.ssh.connect(str(host),int(port), user, passwd)
- self.logger.debug("SSH connect: %s@%s with passwd %s"%(user, str(host), passwd))
+ if keyPairFileLocation == None:
+ self.ssh.connect(str(host),int(port), user, passwd)
+ self.logger.debug("SSH connect: %s@%s with passwd %s"%(user, str(host), passwd))
+ else:
+ self.ssh.connect(
+ hostname=str(host),
+ port=int(port),
+ username=str(user),
+ key_filename=str(keyPairFileLocation),
+ look_for_keys=False
+ )
+ self.logger.debug("connecting to server %s with user %s key %s"%(str(host), user, keyPairFileLocation))
+ self.logger.debug("SSH connect: %s@%s with passwd %s"%(user, str(host), passwd))
except paramiko.SSHException, sshex:
if retry_count == 0:
raise cloudstackException.InvalidParameterException(repr(sshex))
[45/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-702: Tests for Multiple IP Ranges
1. Adding a cidr in existing subnet
2. Adding a cidr in new subnet
Signed-off-by: sanjeevneelarapu <sa...@citrix.com>
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/b2fdd5e2
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/b2fdd5e2
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/b2fdd5e2
Branch: refs/heads/marvin_refactor
Commit: b2fdd5e2a23b44e5976c7135632d1ca6ade57663
Parents: ef00f1b
Author: sanjeevneelarapu <sa...@citrix.com>
Authored: Fri Apr 26 17:10:37 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Mon Apr 29 11:24:40 2013 +0530
----------------------------------------------------------------------
.../component/test_multiple_ip_ranges.py | 238 +++++++++++++++
1 files changed, 238 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/b2fdd5e2/test/integration/component/test_multiple_ip_ranges.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_multiple_ip_ranges.py b/test/integration/component/test_multiple_ip_ranges.py
new file mode 100644
index 0000000..489e7ca
--- /dev/null
+++ b/test/integration/component/test_multiple_ip_ranges.py
@@ -0,0 +1,238 @@
+# 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 Multiple IP Ranges feature
+"""
+from marvin.cloudstackTestCase import *
+from marvin.cloudstackAPI import *
+from marvin.integration.lib.utils import *
+from marvin.integration.lib.base import *
+from marvin.integration.lib.common import *
+from netaddr import *
+
+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
+ },
+ "disk_offering": {
+ "displaytext": "Small Disk",
+ "name": "Small Disk",
+ "disksize": 1
+ },
+ "templates": {
+ "displaytext": 'Template',
+ "name": 'Template',
+ "ostype": "CentOS 5.3 (64-bit)",
+ "templatefilter": 'self',
+ },
+ "vlan_ip_range": {
+ "startip": "",
+ "endip": "",
+ "netmask": "",
+ "gateway": "",
+ "forvirtualnetwork": "false",
+ "vlan": "untagged",
+ }
+ }
+
+class TestMultipleIpRanges(cloudstackTestCase):
+ """Test Multiple IP Ranges for guest network
+ """
+
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestMultipleIpRanges, 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.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.account = Account.create(
+ cls.api_client,
+ cls.services["account"],
+ domainid=cls.domain.id
+ )
+ cls.services["account"] = cls.account.account.name
+ cls._cleanup = [
+ cls.account,
+ ]
+ 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
+
+ def increment_cidr(self):
+ """Takes CIDR as input and will increment by one and returns the new CIDR
+ """
+ publicIpRange = PublicIpRange.list(self.apiclient)
+ self.startIp = publicIpRange[0].startip
+ self.endIp = publicIpRange[0].endip
+ self.gateway = publicIpRange[0].gateway
+ self.netmask = publicIpRange[0].netmask
+ #Pass ip address and mask length to IPNetwork to findout the CIDR
+ ip = IPNetwork(self.startIp+"/"+self.netmask)
+ new_cidr = ip.__iadd__(1)
+ ip2 = IPNetwork(new_cidr)
+ return ip2
+
+ def verify_vlan_range(self,vlan,services):
+ #compare vlan_list response with configured values
+ self.assertEqual(
+ isinstance(vlan, list),
+ True,
+ "Check list response returned a valid list"
+ )
+ self.assertNotEqual(
+ len(vlan),
+ 0,
+ "check list vlan response"
+ )
+ self.assertEqual(
+ vlan[0].startip,
+ services["startip"],
+ "Start IP in vlan ip range is not matched with the configured start ip"
+ )
+ self.assertEqual(
+ vlan[0].endip,
+ services["endip"],
+ "End IP in vlan ip range is not matched with the configured end ip"
+ )
+ self.assertEqual(
+ vlan[0].gateway,
+ services["gateway"],
+ "gateway in vlan ip range is not matched with the configured gateway"
+ )
+ self.assertEqual(
+ vlan[0].netmask,
+ services["netmask"],
+ "netmask in vlan ip range is not matched with the configured netmask"
+ )
+ return
+
+ @attr(tags=["advanced_sg", "sg"])
+ def test_01_add_ip_same_cidr(self):
+ """Test add guest ip range in the existing cidr
+ """
+ #call increment_cidr function to get exiting cidr from the setup and increment it
+ ip2 = self.increment_cidr()
+ test_nw = ip2.network
+ #Add IP range(5 IPs) in the new CIDR
+ test_gateway = test_nw+1
+ test_startIp = test_nw+2
+ test_endIp = test_startIp+5
+ test_startIp2= test_endIp+5
+ test_endIp2 = test_startIp2+5
+ #Populating services with new IP range
+ self.services["vlan_ip_range"]["startip"] = test_startIp
+ self.services["vlan_ip_range"]["endip"] = test_endIp
+ self.services["vlan_ip_range"]["gateway"] = test_gateway
+ self.services["vlan_ip_range"]["netmask"] = self.netmask
+ self.services["vlan_ip_range"]["zoneid"] = self.zone.id
+ self.services["vlan_ip_range"]["podid"] = self.pod.id
+ #create new vlan ip range
+ new_vlan = PublicIpRange.create(self.apiclient, self.services["vlan_ip_range"])
+ self.debug("Created new vlan range with startip:%s and endip:%s" %(test_startIp,test_endIp))
+ self.cleanup.append(new_vlan)
+ new_vlan_res = new_vlan.list(self.apiclient,new_vlan.id)
+ #Compare list output with configured values
+ self.verify_vlan_range(new_vlan_res,self.services["vlan_ip_range"])
+ #Add few more ips in the same CIDR
+ self.services["vlan_ip_range"]["startip"] = test_startIp2
+ self.services["vlan_ip_range"]["endip"] = test_endIp2
+ new_vlan2 = PublicIpRange.create(self.apiclient, self.services["vlan_ip_range"])
+ self.debug("Created new vlan range with startip:%s and endip:%s" %(test_startIp2,test_endIp2))
+ self.cleanup.append(new_vlan2)
+ #list new vlan ip range
+ new_vlan2_res = new_vlan2.list(self.apiclient,new_vlan2.id)
+ #Compare list output with configured values
+ self.verify_vlan_range(new_vlan2_res,self.services["vlan_ip_range"])
+ return
+
+ @attr(tags=["advanced_sg", "sg"])
+ def test_02_add_ip_diff_cidr(self):
+ """Test add ip range in a new cidr
+
+ Steps:
+ 1.Get public vlan range (guest cidr) from the setup
+ 2.Add IP range to a new cidr
+ """
+ #call increment_cidr function to get exiting cidr from the setup and increment it
+ ip2 = self.increment_cidr()
+ test_nw = ip2.network
+ #Add IP range(5 IPs) in the new CIDR
+ test_gateway = test_nw+1
+ test_startIp = test_nw+2
+ test_endIp = test_startIp+5
+ #Populating services with new IP range
+ self.services["vlan_ip_range"]["startip"] = test_startIp
+ self.services["vlan_ip_range"]["endip"] = test_endIp
+ self.services["vlan_ip_range"]["gateway"] = test_gateway
+ self.services["vlan_ip_range"]["netmask"] = self.netmask
+ self.services["vlan_ip_range"]["zoneid"] = self.zone.id
+ self.services["vlan_ip_range"]["podid"] = self.pod.id
+ #create new vlan ip range
+ new_vlan = PublicIpRange.create(self.apiclient, self.services["vlan_ip_range"])
+ self.debug("Created new vlan range with startip:%s and endip:%s" %(test_startIp,test_endIp))
+ self.cleanup.append(new_vlan)
+ new_vlan_res = new_vlan.list(self.apiclient,new_vlan.id)
+ #Compare list output with configured values
+ self.verify_vlan_range(new_vlan_res,self.services["vlan_ip_range"])
+ return
+
+
[28/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2152 Fix rel number, needs to be present
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0412c95e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0412c95e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0412c95e
Branch: refs/heads/marvin_refactor
Commit: 0412c95ef845cb9b67d9fd4a3d89d11b2399b521
Parents: 2f40a90
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Tue Apr 23 15:05:20 2013 +0200
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Fri Apr 26 08:56:29 2013 +0200
----------------------------------------------------------------------
packaging/centos63/package.sh | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0412c95e/packaging/centos63/package.sh
----------------------------------------------------------------------
diff --git a/packaging/centos63/package.sh b/packaging/centos63/package.sh
index faa089b..c466f58 100755
--- a/packaging/centos63/package.sh
+++ b/packaging/centos63/package.sh
@@ -44,7 +44,7 @@ if echo $VERSION | grep SNAPSHOT ; then
else
DEFVER="-D_ver $REALVER"
DEFPRE=
- DEFREL=
+ DEFREL="-D_rel 1"
fi
mkdir -p $RPMDIR/SPECS
@@ -78,7 +78,7 @@ else
REALVER=`echo $VERSION`
DEFVER="-D_ver $REALVER"
DEFPRE=
- DEFREL=
+ DEFREL="-D_rel 1"
fi
mkdir -p $RPMDIR/SPECS
[04/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Change affinity UI: Allow 0 checkbox selections
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/382e8f36
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/382e8f36
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/382e8f36
Branch: refs/heads/marvin_refactor
Commit: 382e8f36f377b8508e759a2976b0a6d47345ce89
Parents: 72da1ae
Author: Brian Federle <br...@citrix.com>
Authored: Mon Apr 22 11:27:16 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Mon Apr 22 11:27:16 2013 -0700
----------------------------------------------------------------------
ui/scripts/ui-custom/affinity.js | 8 --------
1 files changed, 0 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/382e8f36/ui/scripts/ui-custom/affinity.js
----------------------------------------------------------------------
diff --git a/ui/scripts/ui-custom/affinity.js b/ui/scripts/ui-custom/affinity.js
index f3356dd..6c237ed 100644
--- a/ui/scripts/ui-custom/affinity.js
+++ b/ui/scripts/ui-custom/affinity.js
@@ -80,14 +80,6 @@
return false;
}
- if (!$dataList.find(
- 'input[type=radio]:checked, input[type=checkbox]:checked'
- ).size()) {
- cloudStack.dialog.notice({ message: _l('message.select.instance')});
-
- return false;
- }
-
var complete = args.complete;
var start = args.start;
[22/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - (1) extend listRouters API to to take in zonetype. (2) UI: populate Routers list page with ones whose networktype matches selected option in zone type dropdown on top menu. (3) UI: count total number of Routers based on selected option in zone type dropdown on top menu.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6f60833f
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6f60833f
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6f60833f
Branch: refs/heads/marvin_refactor
Commit: 6f60833f9321bb1639372900bb625dd657006229
Parents: 232d44b
Author: Jessica Wang <je...@apache.org>
Authored: Thu Apr 25 15:09:45 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Apr 25 15:10:33 2013 -0700
----------------------------------------------------------------------
.../api/command/admin/router/ListRoutersCmd.java | 7 +
.../src/com/cloud/api/query/QueryManagerImpl.java | 12 ++-
ui/scripts/system.js | 93 ++++++++++-----
3 files changed, 78 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6f60833f/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java
index d2b26c0..9fbc940 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/router/ListRoutersCmd.java
@@ -64,6 +64,9 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd {
description="the Zone ID of the router")
private Long zoneId;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
@Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType=NetworkResponse.class,
description="list by network id")
private Long networkId;
@@ -103,6 +106,10 @@ public class ListRoutersCmd extends BaseListProjectAndAccountResourcesCmd {
return zoneId;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
public Long getNetworkId() {
return networkId;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6f60833f/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 67af7e4..2c003d3 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -994,7 +994,8 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
Long id = cmd.getId();
String name = cmd.getRouterName();
String state = cmd.getState();
- Long zone = cmd.getZoneId();
+ Long zoneId = cmd.getZoneId();
+ String zoneType = cmd.getZoneType();
Long pod = cmd.getPodId();
Long hostId = cmd.getHostId();
String keyword = cmd.getKeyword();
@@ -1027,6 +1028,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.IN);
sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ sb.and("dataCenterType", sb.entity().getDataCenterType(), SearchCriteria.Op.EQ);
sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
sb.and("hostId", sb.entity().getHostId(), SearchCriteria.Op.EQ);
sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
@@ -1067,10 +1069,14 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
sc.setParameters("state", state);
}
- if (zone != null) {
- sc.setParameters("dataCenterId", zone);
+ if (zoneId != null) {
+ sc.setParameters("dataCenterId", zoneId);
}
+ if (zoneType != null) {
+ sc.setParameters("dataCenterType", zoneType);
+ }
+
if (pod != null) {
sc.setParameters("podId", pod);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6f60833f/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index fea7669..8c962fc 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -329,22 +329,35 @@
},
virtualRouterCount: function(data) {
+ var data2 = {
+ projectid: -1,
+ page: 1,
+ pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
$.ajax({
url: createURL('listRouters'),
- data: {
- projectid: -1,
- page: 1,
- pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
- },
+ data: data2,
success: function(json) {
- var total1 = json.listroutersresponse.count ? json.listroutersresponse.count : 0;
+ var total1 = json.listroutersresponse.count ? json.listroutersresponse.count : 0;
+
+ var data3 = {
+ listAll: true,
+ page: 1,
+ pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data3, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
$.ajax({
url: createURL('listRouters'),
- data: {
- listAll: true,
- page: 1,
- pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
- },
+ data: data3,
success: function(json) {
var total2 = json.listroutersresponse.count ? json.listroutersresponse.count : 0;
dataFns.capacity($.extend(data, {
@@ -2317,12 +2330,18 @@
}
}
+ var data2 = {
+ forvpc: false
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
var routers = [];
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
- data: {
- forvpc: false
- },
+ data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
json.listroutersresponse.router : [];
@@ -2334,9 +2353,7 @@
// Get project routers
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
- data: {
- forvpc: false
- },
+ data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
json.listroutersresponse.router : [];
@@ -2798,13 +2815,19 @@
}
}
+ var data2 = {
+ forvpc: true
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
var routers = [];
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
dataType: 'json',
- data: {
- forvpc: true
- },
+ data: data2,
async: true,
success: function(json) {
var items = json.listroutersresponse.router;
@@ -2816,9 +2839,7 @@
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
dataType: 'json',
- data: {
- forvpc: true
- },
+ data: data2,
async: true,
success: function(json) {
var items = json.listroutersresponse.router;
@@ -5754,10 +5775,16 @@
var searchByArgs = args.filterBy.search.value.length ?
'&name=' + args.filterBy.search.value : '';
+ var data2 = {};
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
var routers = [];
$.ajax({
url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + searchByArgs),
- dataType: 'json',
+ data: data2,
async: true,
success: function(json) {
var items = json.listroutersresponse.router ?
@@ -5770,7 +5797,7 @@
// Get project routers
$.ajax({
url: createURL("listRouters&listAll=true&page=" + args.page + "&pagesize=" + pageSize + "&projectid=-1"),
- dataType: 'json',
+ data: data2,
async: true,
success: function(json) {
var items = json.listroutersresponse.router ?
@@ -5854,12 +5881,18 @@
}
}
+ var data2 = {
+ forvpc: false
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
var routers = [];
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
- data: {
- forvpc: false
- },
+ data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
json.listroutersresponse.router : [];
@@ -5870,9 +5903,7 @@
// Get project routers
$.ajax({
url: createURL("listRouters&zoneid=" + selectedZoneObj.id + "&listAll=true&page=" + args.page + "&pagesize=" + pageSize + array1.join("") + "&projectid=-1"),
- data: {
- forvpc: false
- },
+ data: data2,
success: function(json) {
var items = json.listroutersresponse.router ?
json.listroutersresponse.router : [];
[37/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - API: change listZones API to to take in zonetype instead of networktype (to be consistent with other listXXXXXXXs API).
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a20ed3a4
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a20ed3a4
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a20ed3a4
Branch: refs/heads/marvin_refactor
Commit: a20ed3a43de2de6df10e2348330371fba7a535a0
Parents: 3e2eb59
Author: Jessica Wang <je...@apache.org>
Authored: Fri Apr 26 11:37:32 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Fri Apr 26 11:37:32 2013 -0700
----------------------------------------------------------------------
.../api/command/user/zone/ListZonesByCmd.java | 9 +++++----
.../src/com/cloud/api/query/QueryManagerImpl.java | 2 +-
2 files changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a20ed3a4/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
index d0dc736..ed31037 100644
--- a/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java
@@ -23,6 +23,7 @@ import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseListCmd;
import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.BaseCmd.CommandType;
import org.apache.cloudstack.api.response.DomainResponse;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
@@ -56,8 +57,8 @@ public class ListZonesByCmd extends BaseListCmd {
@Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of the zone")
private String name;
- @Parameter(name=ApiConstants.NETWORK_TYPE, type=CommandType.STRING, description="the network type of the zone")
- private String networkType;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
@Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the zones")
private Boolean showCapacities;
@@ -82,8 +83,8 @@ public class ListZonesByCmd extends BaseListCmd {
return name;
}
- public String getNetworkType(){
- return networkType;
+ public String getZoneType() {
+ return zoneType;
}
public Boolean getShowCapacities() {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a20ed3a4/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 2c003d3..50018e5 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -2219,7 +2219,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
Long id = cmd.getId();
String keyword = cmd.getKeyword();
String name = cmd.getName();
- String networkType = cmd.getNetworkType();
+ String networkType = cmd.getZoneType();
Filter searchFilter = new Filter(DataCenterJoinVO.class, null, false, cmd.getStartIndex(), cmd.getPageSizeVal());
SearchCriteria<DataCenterJoinVO> sc = _dcJoinDao.createSearchCriteria();
[48/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Add VPN users automation tests
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/766b36f5
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/766b36f5
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/766b36f5
Branch: refs/heads/marvin_refactor
Commit: 766b36f57ca4dd089a709df42f86b1f23ae91b72
Parents: deaf910
Author: Girish Shilamkar <gi...@clogeny.com>
Authored: Sat Apr 27 13:21:36 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Mon Apr 29 14:15:28 2013 +0530
----------------------------------------------------------------------
test/integration/component/test_vpn_users.py | 447 +++++++++++++++++++++
1 files changed, 447 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/766b36f5/test/integration/component/test_vpn_users.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_vpn_users.py b/test/integration/component/test_vpn_users.py
new file mode 100644
index 0000000..e18c538
--- /dev/null
+++ b/test/integration/component/test_vpn_users.py
@@ -0,0 +1,447 @@
+# 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 VPN users
+"""
+# Import Local Modules
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import cloudstackTestCase
+from marvin.integration.lib.base import (
+ Account,
+ ServiceOffering,
+ VirtualMachine,
+ PublicIPAddress,
+ Vpn,
+ VpnUser,
+ Configurations,
+ NATRule
+ )
+from marvin.integration.lib.common import (get_domain,
+ get_zone,
+ get_template,
+ cleanup_resources,
+ )
+
+
+class Services:
+ """Test VPN users Services
+ """
+
+ 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": 100, # in MHz
+ "memory": 128, # In MBs
+ },
+ "disk_offering": {
+ "displaytext": "Small Disk Offering",
+ "name": "Small Disk Offering",
+ "disksize": 1
+ },
+ "virtual_machine": {
+ "displayname": "TestVM",
+ "username": "root",
+ "password": "password",
+ "ssh_port": 22,
+ "hypervisor": 'KVM',
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": 'TCP',
+ },
+ "vpn_user": {
+ "username": "test",
+ "password": "test",
+ },
+ "natrule": {
+ "privateport": 1701,
+ "publicport": 1701,
+ "protocol": "UDP"
+ },
+ "ostype": 'CentOS 5.5 (64-bit)',
+ "sleep": 60,
+ "timeout": 10,
+ # Networking mode: Advanced, Basic
+ }
+
+
+class TestVPNUsers(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestVPNUsers,
+ 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"],
+ domainid=self.domain.id
+ )
+ self.virtual_machine = VirtualMachine.create(
+ self.apiclient,
+ self.services["virtual_machine"],
+ templateid=self.template.id,
+ accountid=self.account.account.name,
+ domainid=self.account.account.domainid,
+ serviceofferingid=self.service_offering.id
+ )
+ self.public_ip = PublicIPAddress.create(
+ self.apiclient,
+ self.virtual_machine.account,
+ self.virtual_machine.zoneid,
+ self.virtual_machine.domainid,
+ self.services["virtual_machine"]
+ )
+ 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 create_VPN(self, public_ip):
+ """Creates VPN for the network"""
+
+ self.debug("Creating VPN with public IP: %s" % public_ip.ipaddress.id)
+ try:
+ # Assign VPN to Public IP
+ vpn = Vpn.create(self.apiclient,
+ self.public_ip.ipaddress.id,
+ account=self.account.account.name,
+ domainid=self.account.account.domainid)
+
+ self.debug("Verifying the remote VPN access")
+ vpns = Vpn.list(self.apiclient,
+ publicipid=public_ip.ipaddress.id,
+ listall=True)
+ self.assertEqual(
+ isinstance(vpns, list),
+ True,
+ "List VPNs shall return a valid response"
+ )
+ return vpn
+ except Exception as e:
+ self.fail("Failed to create remote VPN access: %s" % e)
+
+ def create_VPN_Users(self, rand_name=True, api_client=None):
+ """Creates VPN users for the network"""
+
+ self.debug("Creating VPN users for account: %s" %
+ self.account.account.name)
+ if api_client is None:
+ api_client = self.apiclient
+ try:
+ vpnuser = VpnUser.create(
+ api_client,
+ self.services["vpn_user"]["username"],
+ self.services["vpn_user"]["password"],
+ account=self.account.account.name,
+ domainid=self.account.account.domainid,
+ rand_name=rand_name
+ )
+
+ self.debug("Verifying the remote VPN access")
+ vpn_users = VpnUser.list(self.apiclient,
+ id=vpnuser.id,
+ listall=True)
+ self.assertEqual(
+ isinstance(vpn_users, list),
+ True,
+ "List VPNs shall return a valid response"
+ )
+ return vpnuser
+ except Exception as e:
+ self.fail("Failed to create remote VPN users: %s" % e)
+
+ @attr(tags=["advanced", "advancedns"])
+ @attr(configuration='remote.access.vpn.user.limit')
+ def test_01_VPN_user_limit(self):
+ """VPN remote access user limit tests"""
+
+ # Validate the following
+ # prerequisite: change management configuration setting of
+ # remote.access.vpn.user.limit
+ # 1. provision more users than is set in the limit
+ # Provisioning of users after the limit should failProvisioning of
+ # users after the limit should fail
+
+ self.debug("Fetching the limit for remote access VPN users")
+ configs = Configurations.list(
+ self.apiclient,
+ name='remote.access.vpn.user.limit',
+ listall=True)
+ self.assertEqual(isinstance(configs, list),
+ True,
+ "List configs should return a valid response")
+
+ limit = int(configs[0].value)
+
+ self.debug("Enabling the VPN access for IP: %s" %
+ self.public_ip.ipaddress.ipaddress)
+
+ self.create_VPN(self.public_ip)
+ self.debug("Creating %s VPN users" % limit)
+ for x in range(limit):
+ self.create_VPN_Users()
+
+ self.debug("Adding another user exceeding limit for remote VPN users")
+ with self.assertRaises(Exception):
+ self.create_VPN_Users()
+ self.debug("Limit exceeded exception raised!")
+ return
+
+ @attr(tags=["advanced", "advancedns"])
+ def test_02_use_vpn_port(self):
+ """Test create VPN when L2TP port in use"""
+
+ # Validate the following
+ # 1. set a port forward for UDP: 1701 and enable VPN
+ # 2. set port forward rule for the udp port 1701 over which L2TP works
+ # 3. port forward should prevent VPN from being enabled
+
+ self.debug("Creating a port forwarding rule on port 1701")
+ # Create NAT rule
+ nat_rule = NATRule.create(
+ self.apiclient,
+ self.virtual_machine,
+ self.services["natrule"],
+ self.public_ip.ipaddress.id)
+
+ self.debug("Verifying the NAT rule created")
+ nat_rules = NATRule.list(self.apiclient, id=nat_rule.id, listall=True)
+
+ self.assertEqual(isinstance(nat_rules, list),
+ True,
+ "List NAT rules should return a valid response")
+
+ self.debug("Enabling the VPN connection for IP: %s" %
+ self.public_ip.ipaddress.ipaddress)
+ with self.assertRaises(Exception):
+ self.create_VPN(self.public_ip)
+ self.debug("Create VPN connection failed! Test successful!")
+ return
+
+ @attr(tags=["advanced", "advancedns"])
+ def test_03_enable_vpn_use_port(self):
+ """Test create NAT rule when VPN when L2TP enabled"""
+
+ # Validate the following
+ # 1. Enable a VPN connection on source NAT
+ # 2. Add a VPN user
+ # 3. add a port forward rule for UDP port 1701. Should result in error
+ # saying that VPN is enabled over port 1701
+
+ self.debug("Enabling the VPN connection for IP: %s" %
+ self.public_ip.ipaddress.ipaddress)
+ self.create_VPN(self.public_ip)
+
+ self.debug("Creating a port forwarding rule on port 1701")
+ # Create NAT rule
+ with self.assertRaises(Exception):
+ NATRule.create(
+ self.apiclient,
+ self.virtual_machine,
+ self.services["natrule"],
+ self.public_ip.ipaddress.id)
+
+ self.debug("Create NAT rule failed! Test successful!")
+ return
+
+ @attr(tags=["advanced", "advancedns"])
+ def test_04_add_new_users(self):
+ """Test add new users to existing VPN"""
+
+ # Validate the following
+ # 1. Enable a VPN connection on source NAT
+ # 2. Add new user to VPN when there are already existing users.
+ # 3. We should be able to successfully establish a VPN connection using
+ # the newly added user credential.
+
+ self.debug("Enabling the VPN connection for IP: %s" %
+ self.public_ip.ipaddress.ipaddress)
+ self.create_VPN(self.public_ip)
+
+ try:
+ self.debug("Adding new VPN user to account: %s" %
+ self.account.account.name)
+ self.create_VPN_Users()
+
+ # TODO: Verify the VPN connection
+ self.debug("Adding another user to account")
+ self.create_VPN_Users()
+
+ # TODO: Verify the VPN connection with new user
+ except Exception as e:
+ self.fail("Failed to create new VPN user: %s" % e)
+ return
+
+ @attr(tags=["advanced", "advancedns"])
+ def test_05_add_duplicate_user(self):
+ """Test add duplicate user to existing VPN"""
+
+ # Validate the following
+ # 1. Enable a VPN connection on source NAT
+ # 2. Add a VPN user say "abc" that already an added user to the VPN.
+ # 3. Adding this VPN user should fail.
+
+ self.debug("Enabling the VPN connection for IP: %s" %
+ self.public_ip.ipaddress.ipaddress)
+ self.create_VPN(self.public_ip)
+
+ self.debug("Adding new VPN user to account: %s" %
+ self.account.account.name)
+ self.create_VPN_Users(rand_name=False)
+
+ # TODO: Verify the VPN connection
+ self.debug("Adding another user to account with same username")
+ with self.assertRaises(Exception):
+ self.create_VPN_Users(rand_name=False)
+ return
+
+ @attr(tags=["advanced", "advancedns"])
+ def test_06_add_VPN_user_global_admin(self):
+ """Test as global admin, add a new VPN user to an existing VPN entry
+ that was created by another account."""
+
+ # Steps for verification
+ # 1. Create a new user and deploy few Vms.
+ # 2. Enable VPN access. Add few VPN users.
+ # 3. Make sure that VPN access works as expected.
+ # 4. As global Admin , add VPN user to this user's existing VPN entry.
+ # Validate the following
+ # 1. The newly added VPN user should get configured to the router of
+ # user account.
+ # 2. We should be able to use this newly created user credential to
+ # establish VPN connection that will give access all VMs of this user
+
+ self.debug("Enabling VPN connection to account: %s" %
+ self.account.account.name)
+ self.create_VPN(self.public_ip)
+ self.debug("Creating VPN user for the account: %s" %
+ self.account.account.name)
+ self.create_VPN_Users()
+
+ self.debug("Creating a global admin account")
+ admin = Account.create(self.apiclient,
+ self.services["account"],
+ admin=True,
+ domainid=self.account.account.domainid)
+ self.cleanup.append(admin)
+ self.debug("Creating API client for newly created user")
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.account.name,
+ DomainName=self.account.account.domain)
+
+ self.debug("Adding new user to VPN as a global admin: %s" %
+ admin.account.name)
+ try:
+ self.create_VPN_Users(api_client=api_client)
+ except Exception as e:
+ self.fail("Global admin should be allowed to create VPN user: %s" %
+ e)
+ return
+
+ @attr(tags=["advanced", "advancedns"])
+ def test_07_add_VPN_user_domain_admin(self):
+ """Test as domain admin, add a new VPN user to an existing VPN entry
+ that was created by another account."""
+
+ # Steps for verification
+ # 1. Create a new user and deploy few Vms.
+ # 2. Enable VPN access. Add few VPN users.
+ # 3. Make sure that VPN access works as expected.
+ # 4. As domain Admin , add VPN user to this user's existing VPN entry.
+ # Validate the following
+ # 1. The newly added VPN user should get configured to the router of
+ # user account.
+ # 2. We should be able to use this newly created user credential to
+ # establish VPN connection that will give access all VMs of this user
+
+ self.debug("Enabling VPN connection to account: %s" %
+ self.account.account.name)
+ self.create_VPN(self.public_ip)
+ self.debug("Creating VPN user for the account: %s" %
+ self.account.account.name)
+ self.create_VPN_Users()
+
+ self.debug("Creating a domain admin account")
+ admin = Account.create(self.apiclient,
+ self.services["account"],
+ domainid=self.account.account.domainid)
+ self.cleanup.append(admin)
+ self.debug("Creating API client for newly created user")
+ api_client = self.testClient.createUserApiClient(
+ UserName=self.account.account.name,
+ DomainName=self.account.account.domain)
+
+ self.debug("Adding new user to VPN as a domain admin: %s" %
+ admin.account.name)
+ try:
+ self.create_VPN_Users(api_client=api_client)
+ except Exception as e:
+ self.fail("Domain admin should be allowed to create VPN user: %s" %
+ e)
+ return
[29/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Fix small typo
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c34233d5
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c34233d5
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c34233d5
Branch: refs/heads/marvin_refactor
Commit: c34233d5b1091bda9cd6580351845f5c90dcff2f
Parents: 0412c95
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Fri Apr 26 08:55:47 2013 +0200
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Fri Apr 26 08:56:29 2013 +0200
----------------------------------------------------------------------
agent/conf/agent.properties | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c34233d5/agent/conf/agent.properties
----------------------------------------------------------------------
diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties
index e49afbf..7dc4ba8 100644
--- a/agent/conf/agent.properties
+++ b/agent/conf/agent.properties
@@ -78,7 +78,7 @@ domr.scripts.dir=scripts/network/domr/kvm
# a sensible default will be selected based on the network.bridge.type but can
# be overridden here.
# native = com.cloud.hypervisor.kvm.resource.BridgeVifDriver
-# openvswitch = com.cloud.hypervisor.kvm.resource.OvsBridgeDriver
+# openvswitch = com.cloud.hypervisor.kvm.resource.OvsVifDriver
#libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.BridgeVifDriver
# set the hypervisor type, values are: kvm, lxc
[08/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Merge branch 'master' into ui-vm-affinity
Conflicts:
client/WEB-INF/classes/resources/messages.properties
ui/scripts/cloudStack.js
ui/scripts/instanceWizard.js
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7b011e7e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7b011e7e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7b011e7e
Branch: refs/heads/marvin_refactor
Commit: 7b011e7ef468b51a1ba903cfac8e5a9726e34ae8
Parents: e5cea02 df039aa
Author: Brian Federle <br...@citrix.com>
Authored: Mon Apr 22 13:45:29 2013 -0700
Committer: Brian Federle <br...@citrix.com>
Committed: Mon Apr 22 13:45:29 2013 -0700
----------------------------------------------------------------------
CHANGES | 385 +-
README.md | 6 +-
.../agent/api/DeleteSnapshotBackupCommand.java | 6 +-
.../cloud/agent/api/MigrateWithStorageAnswer.java | 39 +
.../cloud/agent/api/MigrateWithStorageCommand.java | 45 +
.../api/MigrateWithStorageCompleteAnswer.java | 38 +
.../api/MigrateWithStorageCompleteCommand.java | 36 +
.../agent/api/MigrateWithStorageReceiveAnswer.java | 55 +
.../api/MigrateWithStorageReceiveCommand.java | 45 +
.../agent/api/MigrateWithStorageSendAnswer.java | 39 +
.../agent/api/MigrateWithStorageSendCommand.java | 58 +
.../agent/api/storage/MigrateVolumeAnswer.java | 38 +
.../agent/api/storage/MigrateVolumeCommand.java | 51 +
.../cloud/hypervisor/HypervisorCapabilities.java | 2 +
api/src/com/cloud/network/IpAddress.java | 9 -
api/src/com/cloud/network/Network.java | 14 +-
api/src/com/cloud/network/NetworkService.java | 2 +-
api/src/com/cloud/network/PhysicalNetwork.java | 5 +-
api/src/com/cloud/network/PublicIpAddress.java | 3 -
api/src/com/cloud/network/element/IpDeployer.java | 6 +-
api/src/com/cloud/offering/NetworkOffering.java | 2 +
api/src/com/cloud/server/ManagementService.java | 21 +-
api/src/com/cloud/user/Account.java | 4 +
api/src/com/cloud/user/User.java | 2 +
api/src/com/cloud/vm/UserVmService.java | 27 +
.../cloudstack/affinity/AffinityGroupResponse.java | 5 +-
.../org/apache/cloudstack/api/ApiConstants.java | 6 +-
.../apache/cloudstack/api/ResponseGenerator.java | 6 +
.../api/command/admin/config/ListCfgsByCmd.java | 24 +-
.../admin/config/ListDeploymentPlannersCmd.java | 71 -
.../api/command/admin/config/UpdateCfgCmd.java | 22 +-
.../admin/host/FindHostsForMigrationCmd.java | 107 +
.../api/command/admin/host/ListHostsCmd.java | 7 +-
.../admin/network/UpdatePhysicalNetworkCmd.java | 8 +-
.../admin/offering/CreateServiceOfferingCmd.java | 6 -
.../storage/FindStoragePoolsForMigrationCmd.java | 98 +
.../vm/MigrateVirtualMachineWithVolumeCmd.java | 160 +
.../api/command/user/tag/CreateTagsCmd.java | 2 +-
.../api/command/user/tag/DeleteTagsCmd.java | 2 +-
.../api/command/user/tag/ListTagsCmd.java | 2 +-
.../api/command/user/vm/DeployVMCmd.java | 5 +-
.../cloudstack/api/command/user/vm/ListVMsCmd.java | 11 +-
.../api/command/user/volume/MigrateVolumeCmd.java | 8 +
.../cloudstack/api/response/AccountResponse.java | 7 +
.../api/response/ConfigurationResponse.java | 12 +
.../api/response/HostForMigrationResponse.java | 365 +
.../cloudstack/api/response/HostResponse.java | 1 -
.../response/StoragePoolForMigrationResponse.java | 248 +
.../api/response/StoragePoolResponse.java | 3 -
.../cloudstack/api/response/UserResponse.java | 8 +
.../cloudstack/api/response/UserVmResponse.java | 7 +
.../api/command/test/ListCfgCmdTest.java | 89 +
.../api/command/test/UpdateCfgCmdTest.java | 116 +
build/replace.properties | 1 +
.../WEB-INF/classes/resources/messages.properties | 1860 ++--
.../classes/resources/messages_fr_FR.properties | 216 +-
client/tomcatconf/applicationContext.xml.in | 9 +-
client/tomcatconf/commands.properties.in | 3 +
client/tomcatconf/componentContext.xml.in | 16 +-
client/tomcatconf/nonossComponentContext.xml.in | 16 +-
client/tomcatconf/simulatorComponentContext.xml.in | 9 +-
.../cloud/hypervisor/HypervisorCapabilitiesVO.java | 24 +-
core/src/com/cloud/user/AccountVO.java | 7 +
core/src/com/cloud/user/UserVO.java | 11 +-
docs/en-US/Admin_Guide.xml | 2 +-
docs/en-US/Book_Info.xml | 2 +-
docs/en-US/CloudStack_Nicira_NVP_Guide.xml | 2 +-
docs/en-US/Common_Content/feedback.xml | 24 +
docs/en-US/Developers_Guide.xml | 2 +-
docs/en-US/Installation_Guide.xml | 2 +-
docs/en-US/Preface.xml | 2 +-
docs/en-US/Release_Notes.xml |11164 ++++++++-------
docs/en-US/advanced-zone-configuration.xml | 2 +-
docs/en-US/advanced-zone-network-traffic-types.xml | 2 +-
docs/en-US/basic-zone-network-traffic-types.xml | 4 +-
docs/en-US/build-nonoss.xml | 49 +
docs/en-US/changed-API-commands-4.2.xml | 107 +
docs/en-US/feedback.xml | 24 +
docs/en-US/hypervisor-kvm-install-flow.xml | 2 +-
.../hypervisor-support-for-primarystorage.xml | 148 +-
docs/en-US/images/VMSnapshotButton.png | Bin 0 -> 967 bytes
docs/en-US/images/revert-vm.png | Bin 0 -> 860 bytes
docs/en-US/limit-accounts-domains.xml | 371 +
docs/en-US/source-build.xml | 4 +-
docs/en-US/source.xml | 1 +
.../troubleshooting-working-with-server-logs.xml | 6 +-
docs/en-US/virtual-machines.xml | 1 +
docs/en-US/vm-snapshots.xml | 146 +
docs/en-US/work-with-usage.xml | 26 +-
.../api/storage/ObjectInDataStoreStateMachine.java | 2 +
.../subsystem/api/storage/VolumeService.java | 7 +-
.../datastore/db/StoragePoolDetailsDao.java | 1 +
.../engine/cloud/entity/api/VMEntityManager.java | 2 +-
.../cloud/entity/api/VMEntityManagerImpl.java | 53 +-
.../cloud/entity/api/VirtualMachineEntityImpl.java | 2 +-
.../cloudstack/storage/image/ImageServiceImpl.java | 85 +-
.../driver/AncientImageDataStoreDriverImpl.java | 10 +-
.../image/motion/DefaultImageMotionStrategy.java | 18 +
.../storage/test/MockStorageMotionStrategy.java | 19 +
.../storage/snapshot/SnapshotObject.java | 2 +-
.../storage/motion/AncientDataMotionStrategy.java | 89 +-
.../storage/motion/DataMotionService.java | 9 +
.../storage/motion/DataMotionServiceImpl.java | 16 +
.../storage/motion/DataMotionStrategy.java | 10 +
.../cloudstack/storage/volume/VolumeObject.java | 2 +
.../storage/volume/VolumeServiceImpl.java | 174 +-
packaging/centos63/cloud-usage.rc | 2 +-
packaging/centos63/cloud.spec | 9 +-
packaging/centos63/replace.properties | 2 +-
packaging/debian/init/cloud-management | 2 +-
packaging/debian/replace.properties | 2 +-
.../debian/config/etc/init.d/cloud-early-config | 53 +-
.../manager/allocator/impl/RandomAllocator.java | 56 +
.../hypervisor/kvm/resource/KVMHAMonitor.java | 51 +-
.../kvm/resource/LibvirtComputingResource.java | 25 +-
.../xen/resource/CitrixResourceBase.java | 4 +-
.../xen/resource/XenServer56FP1Resource.java | 1 +
.../xen/resource/XenServer610Resource.java | 359 +-
.../motion/XenServerStorageMotionStrategy.java | 239 +
.../cloud/network/element/NiciraNvpElement.java | 5 +
.../network/element/NiciraNvpElementTest.java | 238 +-
.../CloudStackPrimaryDataStoreLifeCycleImpl.java | 3 +-
pom.xml | 16 +
server/pom.xml | 2 +-
.../agent/manager/allocator/HostAllocator.java | 23 +-
.../manager/allocator/impl/FirstFitAllocator.java | 47 +
.../manager/allocator/impl/TestingAllocator.java | 7 +
server/src/com/cloud/api/ApiDBUtils.java | 19 +
server/src/com/cloud/api/ApiResponseHelper.java | 39 +-
.../src/com/cloud/api/query/QueryManagerImpl.java | 29 +-
.../com/cloud/api/query/ViewResponseHelper.java | 37 +
.../cloud/api/query/dao/AccountJoinDaoImpl.java | 8 +-
.../api/query/dao/AffinityGroupJoinDaoImpl.java | 1 +
.../src/com/cloud/api/query/dao/HostJoinDao.java | 5 +
.../com/cloud/api/query/dao/HostJoinDaoImpl.java | 135 +-
.../cloud/api/query/dao/StoragePoolJoinDao.java | 6 +
.../api/query/dao/StoragePoolJoinDaoImpl.java | 59 +-
.../api/query/dao/UserAccountJoinDaoImpl.java | 1 +
.../com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 1 +
.../src/com/cloud/api/query/vo/AccountJoinVO.java | 10 +
.../cloud/api/query/vo/AffinityGroupJoinVO.java | 11 +
.../com/cloud/api/query/vo/UserAccountJoinVO.java | 16 +-
.../src/com/cloud/api/query/vo/UserVmJoinVO.java | 13 +
server/src/com/cloud/configuration/Config.java | 58 +-
.../cloud/configuration/ConfigurationManager.java | 5 +-
.../configuration/ConfigurationManagerImpl.java | 112 +-
.../cloud/configuration/dao/ConfigurationDao.java | 1 +
.../AgentBasedConsoleProxyManager.java | 8 +-
.../src/com/cloud/consoleproxy/AgentHookBase.java | 50 +-
.../consoleproxy/ConsoleProxyManagerImpl.java | 21 +-
server/src/com/cloud/dc/dao/DataCenterVnetDao.java | 6 +
.../com/cloud/dc/dao/DataCenterVnetDaoImpl.java | 50 +-
server/src/com/cloud/dc/dao/VlanDao.java | 2 +
server/src/com/cloud/dc/dao/VlanDaoImpl.java | 19 +
.../deploy/DeploymentPlanningManagerImpl.java | 14 +-
.../network/ExternalFirewallDeviceManagerImpl.java | 14 +-
.../ExternalLoadBalancerDeviceManagerImpl.java | 4 +-
.../src/com/cloud/network/NetworkManagerImpl.java | 20 +-
.../src/com/cloud/network/NetworkServiceImpl.java | 300 +-
server/src/com/cloud/network/addr/PublicIp.java | 18 +-
server/src/com/cloud/network/dao/IPAddressVO.java | 2 -
.../com/cloud/network/dao/PhysicalNetworkVO.java | 20 +-
.../network/element/VirtualRouterElement.java | 2 +-
.../com/cloud/network/guru/GuestNetworkGuru.java | 14 +-
.../router/VirtualNetworkApplianceManagerImpl.java | 5 +-
.../com/cloud/network/rules/RulesManagerImpl.java | 16 +-
.../src/com/cloud/offerings/NetworkOfferingVO.java | 12 +-
.../src/com/cloud/server/ConfigurationServer.java | 5 +
.../com/cloud/server/ConfigurationServerImpl.java | 107 +-
server/src/com/cloud/server/Criteria.java | 11 +-
server/src/com/cloud/server/ManagementServer.java | 3 +
.../src/com/cloud/server/ManagementServerImpl.java | 396 +-
.../src/com/cloud/service/ServiceOfferingVO.java | 23 -
.../ConsoleProxyPasswordBasedEncryptor.java | 99 +-
.../src/com/cloud/servlet/ConsoleProxyServlet.java | 16 +-
.../src/com/cloud/storage/StorageManagerImpl.java | 4 +-
server/src/com/cloud/storage/VolumeManager.java | 8 +
.../src/com/cloud/storage/VolumeManagerImpl.java | 112 +-
.../storage/dao/StoragePoolDetailsDaoImpl.java | 9 +
.../storage/snapshot/SnapshotManagerImpl.java | 11 +-
.../com/cloud/template/TemplateManagerImpl.java | 17 +-
.../src/com/cloud/upgrade/dao/Upgrade410to420.java | 44 +-
.../com/cloud/usage/UsageNetworkOfferingVO.java | 14 +-
.../usage/dao/UsageNetworkOfferingDaoImpl.java | 9 +-
server/src/com/cloud/user/AccountManagerImpl.java | 15 +-
server/src/com/cloud/vm/UserVmManagerImpl.java | 134 +-
server/src/com/cloud/vm/UserVmStateListener.java | 21 +-
server/src/com/cloud/vm/VirtualMachineManager.java | 4 +
.../com/cloud/vm/VirtualMachineManagerImpl.java | 249 +-
.../affinity/AffinityGroupServiceImpl.java | 2 +-
.../cloudstack/affinity/AffinityGroupVO.java | 2 +-
.../gslb/GlobalLoadBalancingRulesServiceImpl.java | 11 +
.../configuration/ConfigurationManagerTest.java | 4 +-
.../com/cloud/network/MockNetworkManagerImpl.java | 2 +-
.../cloud/network/UpdatePhysicalNetworkTest.java | 68 +
.../test/com/cloud/vm/MockUserVmManagerImpl.java | 8 +
.../cloud/vm/MockVirtualMachineManagerImpl.java | 10 +
.../cloud/vm/VirtualMachineManagerImplTest.java | 231 +-
.../cloud/vpc/MockConfigurationManagerImpl.java | 7 +-
.../test/com/cloud/vpc/MockNetworkManagerImpl.java | 2 +-
server/test/com/cloud/vpc/Site2SiteVpnTest.java | 2 +-
server/test/com/cloud/vpc/VpcApiUnitTest.java | 167 +-
.../test/com/cloud/vpc/VpcTestConfiguration.java | 73 +-
.../ConsoleProxyPasswordBasedEncryptor.java | 253 +-
setup/db/db/schema-40to410.sql | 4 +-
setup/db/db/schema-410to420.sql | 346 +-
test/integration/component/test_accounts.py | 10 +-
.../component/test_allocation_states.py | 2 +-
test/integration/component/test_blocker_bugs.py | 8 +-
test/integration/component/test_egress_rules.py | 13 +-
test/integration/component/test_eip_elb.py | 3 +-
.../integration/component/test_network_offering.py | 5 +-
test/integration/component/test_project_configs.py | 6 +-
test/integration/component/test_project_limits.py | 4 +-
.../component/test_project_resources.py | 7 +-
test/integration/component/test_project_usage.py | 10 +-
test/integration/component/test_projects.py | 8 +-
test/integration/component/test_resource_limits.py | 4 +-
test/integration/component/test_routers.py | 5 +-
test/integration/component/test_security_groups.py | 9 +-
test/integration/component/test_snapshots.py | 8 +-
test/integration/component/test_storage_motion.py | 298 +
test/integration/component/test_templates.py | 3 +-
test/integration/component/test_usage.py | 10 +-
.../integration/component/test_vm_passwdenabled.py | 1 +
test/integration/component/test_volumes.py | 6 +-
test/integration/smoke/test_ScaleVm.py | 221 -
test/integration/smoke/test_global_settings.py | 72 +
test/integration/smoke/test_iso.py | 2 +-
test/integration/smoke/test_network.py | 2 +-
test/integration/smoke/test_non_contigiousvlan.py | 86 +
test/integration/smoke/test_public_ip_range.py | 2 +-
test/integration/smoke/test_routers.py | 2 +-
test/integration/smoke/test_scale_vm.py | 221 +
test/integration/smoke/test_templates.py | 2 +-
test/integration/smoke/test_volumes.py | 2 +-
tools/apidoc/gen_toc.py | 1 +
.../definitions/systemvmtemplate/cleanup.sh | 1 -
.../definitions/systemvmtemplate64/cleanup.sh | 1 -
tools/build/build_asf.sh | 91 +-
tools/build/setnextversion.sh | 75 +
tools/cli/cloudmonkey/requester.py | 4 +-
tools/marvin/marvin/asyncJobMgr.py | 2 +-
tools/marvin/marvin/cloudstackConnection.py | 274 +-
tools/marvin/marvin/cloudstackTestClient.py | 3 +-
tools/marvin/marvin/codegenerator.py | 4 +-
tools/marvin/marvin/deployDataCenter.py | 1 -
tools/marvin/marvin/integration/lib/base.py | 24 +-
tools/marvin/marvin/integration/lib/common.py | 4 +-
tools/marvin/marvin/jsonHelper.py | 7 +-
tools/marvin/setup.py | 1 +
ui/css/cloudstack3.css | 81 +-
ui/index.jsp | 9 +-
ui/modules/modules.js | 20 +
ui/scripts/accounts.js | 7 +
ui/scripts/cloudStack.js | 6 +-
ui/scripts/instanceWizard.js | 1 -
ui/scripts/instances.js | 66 +-
ui/scripts/network.js | 51 +-
ui/scripts/plugins.js | 95 +-
ui/scripts/regions.js | 308 +-
ui/scripts/storage.js | 117 +-
ui/scripts/system.js | 65 +-
ui/scripts/templates.js | 134 +-
ui/scripts/ui-custom/pluginListing.js | 109 +
ui/scripts/ui-custom/plugins.js | 109 -
ui/scripts/ui-custom/projectSelect.js | 66 +
ui/scripts/ui-custom/projects.js | 6 +-
ui/scripts/ui-custom/zoneFilter.js | 39 +
ui/scripts/zoneWizard.js | 26 +-
usage/pom.xml | 5 +
usage/src/com/cloud/usage/UsageManagerImpl.java | 10 +-
usage/src/com/cloud/usage/UsageServer.java | 16 +-
273 files changed, 16531 insertions(+), 8262 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b011e7e/client/WEB-INF/classes/resources/messages.properties
----------------------------------------------------------------------
diff --cc client/WEB-INF/classes/resources/messages.properties
index 349ca2e,fbc0471..461cc11
--- a/client/WEB-INF/classes/resources/messages.properties
+++ b/client/WEB-INF/classes/resources/messages.properties
@@@ -14,909 -14,132 +14,141 @@@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
--
-
- #new labels (begin) **********************************************************************************************
+label.add.affinity.group=Add new affinity group
+message.delete.affinity.group=Please confirm that you would like to remove this affinity group.
+label.delete.affinity.group=Delete Affinity Group
+label.edit.affinity.group=Edit Affinity Group
+label.affinity=Affinity
+label.anti.affinity=Anti-affinity
+label.affinity.groups=Affinity Groups
+label.anti.affinity.groups=Anti-affinity Groups
+label.affinity.group=Affinity Group
+label.anti.affinity.group=Anti-affinity Group
- message.redirecting.region=Redirecting to region...
- label.use.vm.ip=Use VM IP:
- label.cpu.limits=CPU limits
- label.memory.limits=Memory limits (MiB)
- label.primary.storage.limits=Primary Storage limits (GiB)
- label.secondary.storage.limits=Secondary Storage limits (GiB)
- label.max.cpus=Max. CPU cores
- label.max.memory=Max. memory (MiB)
- label.max.primary.storage=Max. primary (GiB)
- label.max.secondary.storage=Max. secondary (GiB)
- label.menu.regions=Regions
- label.region=Region
- label.add.region=Add Region
- label.remove.region=Remove Region
- message.remove.region=Are you sure you want to remove this region from this management server?
- message.add.region=Please specify the required information to add a new region.
- label.endpoint=Endpoint
- label.plugins=Plugins
- label.plugin.details=Plugin details
- label.author.name=Author name
- label.author.email=Author e-mail
- label.external.link=External link
- label.egress.rules=Egress rules
- message.acquire.new.ip.vpc=Please confirm that you would like to acquire a new IP for this VPC.
- label.zoneWizard.trafficType.management=Management: Traffic between CloudStack\'s internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs
- label.zoneWizard.trafficType.public=Public: Traffic between the internet and virtual machines in the cloud.
- label.zoneWizard.trafficType.guest=Guest: Traffic between end-user virtual machines
- label.zoneWizard.trafficType.storage=Storage: Traffic between primary and secondary storage servers, such as VM templates and snapshots
- label.quickview=Quickview
- label.migrate.to.host=Migrate to host
- label.migrate.to.storage=Migrate to storage
- label.stop=Stop
- label.reboot=Reboot
- label.destroy=Destroy
- label.restore=Restore
- label.isolation.uri=Isolation URI
- label.broadcast.uri=Broadcast URI
- label.enable.s3=Enable S3-backed Secondary Storage
- confirm.enable.s3=Please fill in the following information to enable support for S3-backed Secondary Storage
- message.after.enable.s3=S3-backed Secondary Storage configured. Note: When you leave this page, you will not be able to re-configure S3 again.
- label.s3.access_key=Access Key
- label.s3.secret_key=Secret Key
- label.s3.bucket=Bucket
- label.s3.endpoint=Endpoint
- label.s3.use_https=Use HTTPS
- label.s3.connection_timeout=Connection Timeout
- label.s3.max_error_retry=Max Error Retry
- label.s3.socket_timeout=Socket Timeout
- #new labels (end) ************************************************************************************************
-
-
- #modified labels (begin) *****************************************************************************************
- label.site.to.site.VPN=Site-to-site VPN
- message.zoneWizard.enable.local.storage=WARNING: If you enable local storage for this zone, you must do the following, depending on where you would like your system VMs to launch:<br/><br/>1. If system VMs need to be launched in primary storage, primary storage needs to be added to the zone after creation. You must also start the zone in a disabled state.<br/><br/>2. If system VMs need to be launched in local storage, system.vm.use.local.storage needs to be set to true before you enable the zone.<br/><br/><br/>Would you like to continue?
- #modified labels (end) *******************************************************************************************
-
- label.configure.network.ACLs=Configure Network ACLs
- label.network.ACLs=Network ACLs
- label.add.network.ACL=Add network ACL
- label.private.Gateway=Private Gateway
- label.VPC.router.details=VPC router details
- label.VMs.in.tier=VMs in tier
- label.local.storage.enabled=Local storage enabled
- label.tier.details=Tier details
- label.edit.tags=Edit tags
- label.action.enable.physical.network=Enable physical network
- label.action.disable.physical.network=Disable physical network
- message.action.enable.physical.network=Please confirm that you want to enable this physical network.
- message.action.disable.physical.network=Please confirm that you want to disable this physical network.
-
- label.select.tier=Select Tier
- label.add.ACL=Add ACL
- label.remove.ACL=Remove ACL
- label.tier=Tier
- label.network.ACL=Network ACL
- label.network.ACL.total=Network ACL Total
- label.add.new.gateway=Add new gateway
- message.add.new.gateway.to.vpc=Please specify the information to add a new gateway to this VPC.
- label.delete.gateway=delete gateway
- message.delete.gateway=Please confirm you want to delete the gateway
- label.CIDR.of.destination.network=CIDR of destination network
- label.add.route=Add route
- label.add.static.route=Add static route
- label.remove.static.route=Remove static route
- label.add.VPN.gateway=Add VPN Gateway
- message.add.VPN.gateway=Please confirm that you want to add a VPN Gateway
- label.VPN.gateway=VPN Gateway
- label.delete.VPN.gateway=delete VPN Gateway
- message.delete.VPN.gateway=Please confirm that you want to delete this VPN Gateway
- label.VPN.connection=VPN Connection
- label.IPsec.preshared.key=IPsec Preshared-Key
- label.IKE.policy=IKE policy
- label.ESP.policy=ESP policy
- label.create.VPN.connection=Create VPN Connection
- label.VPN.customer.gateway=VPN Customer Gateway
- label.CIDR.list=CIDR list
- label.IKE.lifetime=IKE Lifetime (second)
- label.ESP.lifetime=ESP Lifetime(second)
- label.dead.peer.detection=Dead Peer Detection
- label.reset.VPN.connection=Reset VPN connection
- message.reset.VPN.connection=Please confirm that you want to reset VPN connection
- label.delete.VPN.connection=delete VPN connection
- message.delete.VPN.connection=Please confirm that you want to delete VPN connection
- label.add.new.tier=Add new tier
- label.add.VM.to.tier=Add VM to tier
- label.remove.tier=Remove tier
-
- label.local.storage.enabled=Local Storage Enabled
- label.associated.network=Associated Network
- label.add.port.forwarding.rule=Add port forwarding rule
- label.dns=DNS
-
- label.vpc=VPC
- label.vpc.id=VPC ID
- label.tier=Tier
- label.add.vpc=Add VPC
- label.super.cidr.for.guest.networks=Super CIDR for Guest Networks
- label.DNS.domain.for.guest.networks=DNS domain for Guest Networks
- label.configure.vpc=Configure VPC
- label.edit.vpc=Edit VPC
- label.restart.vpc=restart VPC
- message.restart.vpc=Please confirm that you want to restart the VPC
- label.remove.vpc=remove VPC
- message.remove.vpc=Please confirm that you want to remove the VPC
- label.vpn.customer.gateway=VPN Customer Gateway
- label.add.vpn.customer.gateway=Add VPN Customer Gateway
- label.IKE.encryption=IKE Encryption
- label.IKE.hash=IKE Hash
- label.IKE.DH=IKE DH
- label.ESP.encryption=ESP Encryption
- label.ESP.hash=ESP Hash
- label.perfect.forward.secrecy=Perfect Forward Secrecy
- label.IKE.lifetime=IKE lifetime (second)
- label.ESP.lifetime=ESP Lifetime (second)
- label.dead.peer.detection=Dead Peer Detection
- label.delete.VPN.customer.gateway=delete VPN Customer Gateway
- message.delete.VPN.customer.gateway=Please confirm that you want to delete this VPN Customer Gateway
-
- label.network.domain.text=Network domain
- label.memory.mb=Memory (in MB)
- label.cpu.mhz=CPU (in MHz)
-
- message.action.remove.host=Please confirm that you want to remove this host.
-
- message.action.reboot.router=All services provided by this virtual router will be interrupted. Please confirm that you want to reboot this router.
- message.action.stop.router=All services provided by this virtual router will be interrupted. Please confirm that you want to stop this router.
- message.restart.network=All services provided by this network will be interrupted. Please confirm that you want to restart this network.
-
-
- label.ipaddress=IP Address
- label.vcdcname=vCenter DC name
- label.vcipaddress=vCenter IP Address
- label.vsmctrlvlanid=Control VLAN ID
- label.vsmpktvlanid=Packet VLAN ID
- label.vsmstoragevlanid=Storage VLAN ID
- label.nexusVswitch=Nexus 1000v
- label.action.delete.nexusVswitch=Delete Nexus 1000v
- label.action.enable.nexusVswitch=Enable Nexus 1000v
- label.action.disable.nexusVswitch=Disable Nexus 1000v
- label.action.list.nexusVswitch=List Nexus 1000v
- message.action.delete.nexusVswitch=Please confirm that you want to delete this nexus 1000v
- message.action.enable.nexusVswitch=Please confirm that you want to enable this nexus 1000v
- message.action.disable.nexusVswitch=Please confirm that you want to disable this nexus 1000v
- message.specify.url=Please specify URL
- label.select.instance.to.attach.volume.to=Select instance to attach volume to
- label.upload=Upload
- label.upload.volume=Upload volume
- label.virtual.routers=Virtual Routers
- label.primary.storage.count=Primary Storage Pools
- label.secondary.storage.count=Secondary Storage Pools
- label.number.of.system.vms=Number of System VMs
- label.number.of.virtual.routers=Number of Virtual Routers
- label.action.register.iso=Register ISO
- label.isolation.method=Isolation method
- label.action.register.template=Register template
- label.checksum=MD5 checksum
- label.vpn=VPN
- label.vlan=VLAN
-
-
- label.management.ips=Management IP Addresses
- label.devices=Devices
- label.rules=Rules
- label.traffic.label=Traffic label
- label.vm.state=VM state
- message.setup.physical.network.during.zone.creation.basic=When adding a basic zone, you can set up one physical network, which corresponds to a NIC on the hypervisor. The network carries several types of traffic.<br/><br/>You may also <strong>drag and drop</strong> other traffic types onto the physical network.
- label.domain.router=Domain router
- label.console.proxy=Console proxy
- label.secondary.storage.vm=Secondary storage VM
- label.add.netScaler.device=Add Netscaler device
- label.add.F5.device=Add F5 device
- label.add.SRX.device=Add SRX device
- label.account.and.security.group=Account, Security group
- label.fetch.latest=Fetch latest
- label.system.offering=System Offering
- message.validate.instance.name=Instance name can not be longer than 63 characters. Only ASCII letters a~z, A~Z, digits 0~9, hyphen are allowed. Must start with a letter and end with a letter or a digit.
-
-
- label.isolated.networks=Isolated networks
- label.latest.events=Latest events
- state.Enabled=Enabled
- label.system.wide.capacity=System-wide capacity
- label.network.service.providers=Network Service Providers
- message.launch.zone=Zone is ready to launch; please proceed to the next step.
- error.unable.to.reach.management.server=Unable to reach Management Server
- label.internal.name=Internal name
- message.configure.all.traffic.types=You have multiple physical networks; please configure labels for each traffic type by clicking on the Edit button.
- message.edit.traffic.type=Please specify the traffic label you want associated with this traffic type.
- label.edit.traffic.type=Edit traffic type
- label.label=Label
- label.max.networks=Max. networks
- error.invalid.username.password=Invalid username or password
- message.enabling.security.group.provider=Enabling Security Group provider
- message.adding.Netscaler.provider=Adding Netscaler provider
- message.creating.guest.network=Creating guest network
- label.action.delete.physical.network=Delete physical network
- message.action.delete.physical.network=Please confirm that you want to delete this physical network
- message.installWizard.copy.whatIsAHost=A host is a single computer. Hosts provide the computing resources that run the guest virtual machines. Each host has hypervisor software installed on it to manage the guest VMs (except for bare metal hosts, which are a special case discussed in the Advanced Installation Guide). For example, a Linux KVM-enabled server, a Citrix XenServer server, and an ESXi server are hosts. In a Basic Installation, we use a single host running XenServer or KVM.<br/><br/>The host is the smallest organizational unit within a CloudStack™ deployment. Hosts are contained within clusters, clusters are contained within pods, and pods are contained within zones.
-
-
- label.add.compute.offering=Add compute offering
- label.compute.offering=Compute offering
- label.compute.offerings=Compute offerings
- label.select.offering=Select offering
- label.menu.infrastructure=Infrastructure
- label.sticky.tablesize=Table size
- label.sticky.expire=Expires
- label.sticky.cookie-name=Cookie name
- label.sticky.mode=Mode
- label.sticky.length=Length
- label.sticky.holdtime=Hold time
- label.sticky.request-learn=Request learn
- label.sticky.prefix=Prefix
- label.sticky.nocache=No cache
- label.sticky.indirect=Indirect
- label.sticky.postonly=Post only
- label.sticky.domain=Domain
- state.Allocating=Allocating
- state.Migrating=Migrating
- error.please.specify.physical.network.tags=Network offerings is not available until you specify tags for this physical network.
-
-
- state.Stopping=Stopping
- message.add.load.balancer.under.ip=The load balancer rule has been added under IP:
- message.select.instance=Please select an instance.
- label.select=Select
- label.select.vm.for.static.nat=Select VM for static NAT
- label.select.instance=Select instance
- label.nat.port.range=NAT Port Range
- label.static.nat.vm.details=Static NAT VM Details
- label.edit.lb.rule=Edit LB rule
- message.migrate.instance.to.host=Please confirm that you want to migrate instance to another host.
- label.migrate.instance.to.host=Migrate instance to another host
- message.migrate.instance.to.ps=Please confirm that you want to migrate instance to another primary storage.
- label.migrate.instance.to.ps=Migrate instance to another primary storage
- label.corrections.saved=Corrections saved
- message.installWizard.copy.whatIsSecondaryStorage=Secondary storage is associated with a zone, and it stores the following:<ul><li>Templates - OS images that can be used to boot VMs and can include additional configuration information, such as installed applications</li><li>ISO images - OS images that can be bootable or non-bootable</li><li>Disk volume snapshots - saved copies of VM data which can be used for data recovery or to create new templates</ul>
- message.installWizard.copy.whatIsPrimaryStorage=A CloudStack™ cloud infrastructure makes use of two types of storage: primary storage and secondary storage. Both of these can be iSCSI or NFS servers, or localdisk.<br/><br/><strong>Primary storage</strong> is associated with a cluster, and it stores the disk volumes of each guest VM for all the VMs running on hosts in that cluster. The primary storage server is typically located close to the hosts.
- message.installWizard.copy.whatIsACluster=A cluster provides a way to group hosts. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared storage. Virtual machine instances (VMs) can be live-migrated from one host to another within the same cluster, without interrupting service to the user. A cluster is the third-largest organizational unit within a CloudStack™ deployment. Clusters are contained within pods, and pods are contained within zones.<br/><br/>CloudStack™ allows multiple clusters in a cloud deployment, but for a Basic Installation, we only need one cluster.
- message.installWizard.copy.whatIsAPod=A pod often represents a single rack. Hosts in the same pod are in the same subnet.<br/><br/>A pod is the second-largest organizational unit within a CloudStack™ deployment. Pods are contained within zones. Each zone can contain one or more pods; in the Basic Installation, you will have just one pod in your zone.
- message.installWizard.copy.whatIsAZone=A zone is the largest organizational unit within a CloudStack™ deployment. A zone typically corresponds to a single datacenter, although it is permissible to have multiple zones in a datacenter. The benefit of organizing infrastructure into zones is to provide physical isolation and redundancy. For example, each zone can have its own power supply and network uplink, and the zones can be widely separated geographically (though this is not required).
- message.installWizard.copy.whatIsCloudStack=CloudStack™ is a software platform that pools computing resources to build public, private, and hybrid Infrastructure as a Service (IaaS) clouds. CloudStack™ manages the network, storage, and compute nodes that make up a cloud infrastructure. Use CloudStack™ to deploy, manage, and configure cloud computing environments.<br/><br/>Extending beyond individual virtual machine images running on commodity hardware, CloudStack™ provides a turnkey cloud infrastructure software stack for delivering virtual datacenters as a service - delivering all of the essential components to build, deploy, and manage multi-tier and multi-tenant cloud applications. Both open-source and Premium versions are available, with the open-source version offering nearly identical features.
- message.installWizard.tooltip.addSecondaryStorage.path=The exported path, located on the server you specified above
- message.installWizard.tooltip.addSecondaryStorage.nfsServer=The IP address of the NFS server hosting the secondary storage
- message.installWizard.tooltip.addPrimaryStorage.path=(for NFS) In NFS this is the exported path from the server. Path (for SharedMountPoint). With KVM this is the path on each host that is where this primary storage is mounted. For example, "/mnt/primary".
- message.installWizard.tooltip.addPrimaryStorage.server=(for NFS, iSCSI, or PreSetup) The IP address or DNS name of the storage device.
- message.installWizard.tooltip.addPrimaryStorage.name=The name for the storage device.
- message.installWizard.tooltip.addHost.password=This is the password for the user named above (from your XenServer install).
- message.installWizard.tooltip.addHost.username=Usually root.
- message.installWizard.tooltip.addHost.hostname=The DNS name or IP address of the host.
- message.installWizard.tooltip.addCluster.name=A name for the cluster. This can be text of your choosing and is not used by CloudStack.
- message.installWizard.tooltip.addPod.reservedSystemEndIp=This is the IP range in the private network that the CloudStack uses to manage Secondary Storage VMs and Console Proxy VMs. These IP addresses are taken from the same subnet as computing servers.
- message.installWizard.tooltip.addPod.reservedSystemStartIp=This is the IP range in the private network that the CloudStack uses to manage Secondary Storage VMs and Console Proxy VMs. These IP addresses are taken from the same subnet as computing servers.
- message.installWizard.tooltip.addPod.reservedSystemNetmask=The netmask in use on the subnet the guests will use.
- message.installWizard.tooltip.addPod.reservedSystemGateway=The gateway for the hosts in that pod.
- message.installWizard.tooltip.addPod.name=A name for the pod
- message.installWizard.tooltip.configureGuestTraffic.guestEndIp=The range of IP addresses that will be available for allocation to guests in this zone. If one NIC is used, these IPs should be in the same CIDR as the pod CIDR.
- message.installWizard.tooltip.configureGuestTraffic.guestStartIp=The range of IP addresses that will be available for allocation to guests in this zone. If one NIC is used, these IPs should be in the same CIDR as the pod CIDR.
- message.installWizard.tooltip.configureGuestTraffic.guestNetmask=The netmask in use on the subnet that the guests should use
- message.installWizard.tooltip.configureGuestTraffic.guestGateway=The gateway that the guests should use
- message.installWizard.tooltip.configureGuestTraffic.description=A description for your network
- message.installWizard.tooltip.configureGuestTraffic.name=A name for your network
- message.installWizard.tooltip.addZone.internaldns2=These are DNS servers for use by system VMs in the zone. These DNS servers will be accessed via the private network interface of the System VMs. The private IP address you provide for the pods must have a route to the DNS server named here.
- message.installWizard.tooltip.addZone.internaldns1=These are DNS servers for use by system VMs in the zone. These DNS servers will be accessed via the private network interface of the System VMs. The private IP address you provide for the pods must have a route to the DNS server named here.
- message.installWizard.tooltip.addZone.dns2=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.
- message.installWizard.tooltip.addZone.name=A name for the zone
- message.installWizard.tooltip.addZone.dns1=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.
- message.setup.successful=Cloud setup successful!
- label.may.continue=You may now continue.
- error.installWizard.message=Something went wrong; you may go back and correct any errors
- message.installWizard.now.building=Now building your cloud...
- message.installWizard.click.retry=Click the button to retry launch.
- label.launch=Launch
- label.installWizard.click.launch=Click the launch button.
- label.congratulations=Congratulations!
- label.installWizard.addSecondaryStorageIntro.subtitle=What is secondary storage?
- label.installWizard.addSecondaryStorageIntro.title=Let’s add secondary storage
- label.installWizard.addPrimaryStorageIntro.subtitle=What is primary storage?
- label.installWizard.addPrimaryStorageIntro.title=Let’s add primary storage
- label.installWizard.addHostIntro.subtitle=What is a host?
- label.installWizard.addHostIntro.title=Let’s add a host
- label.installWizard.addClusterIntro.subtitle=What is a cluster?
- label.installWizard.addClusterIntro.title=Let’s add a cluster
- label.installWizard.addPodIntro.subtitle=What is a pod?
- label.installWizard.addPodIntro.title=Let’s add a pod
- label.installWizard.addZone.title=Add zone
- label.installWizard.addZoneIntro.subtitle=What is a zone?
- label.installWizard.addZoneIntro.title=Let’s add a zone
- error.password.not.match=The password fields do not match
- label.confirm.password=Confirm password
- message.change.password=Please change your password.
- label.save.and.continue=Save and continue
- label.skip.guide=I have used CloudStack before, skip this guide
- label.continue.basic.install=Continue with basic installation
- label.introduction.to.cloudstack=Introduction to CloudStack™
- label.what.is.cloudstack=What is CloudStack™?
- label.hints=Hints
- label.installWizard.subtitle=This tour will aid you in setting up your CloudStack™ installation
- label.continue=Continue
- label.installWizard.title=Hello and Welcome to CloudStack™
- label.agree=Agree
- label.manage.resources=Manage Resources
- label.port.forwarding.policies=Port forwarding policies
- label.load.balancing.policies=Load balancing policies
- label.networking.and.security=Networking and security
- label.bandwidth=Bandwidth
- label.virtual.machines=Virtual machines
- label.compute.and.storage=Compute and Storage
- label.task.completed=Task completed
- label.update.project.resources=Update project resources
- label.remove.project.account=Remove project account
- label.item.listing=Item listing
- message.select.item=Please select an item.
- label.removing=Removing
- label.invite=Invite
- label.add.by=Add by
- label.max.vms=Max. user VMs
- label.max.public.ips=Max. public IPs
- label.max.volumes=Max. volumes
- label.max.snapshots=Max. snapshots
- label.max.templates=Max. templates
- label.max.vpcs=Max. VPCs
- label.project.dashboard=Project dashboard
- label.remind.later=Remind me later
- label.invited.accounts=Invited accounts
- label.invite.to=Invite to
- label.add.accounts.to=Add accounts to
- label.add.accounts=Add accounts
- label.project.name=Project name
- label.create.project=Create project
- label.networks=Networks
- label.launch.vm=Launch VM
- label.new.vm=New VM
- label.previous=Previous
- label.add.to.group=Add to group
- message.vm.review.launch=Please review the following information and confirm that your virtual instance is correct before launch.
- message.select.security.groups=Please select security group(s) for your new VM
- label.new=New
- message.please.select.networks=Please select networks for your virtual machine.
- message.please.proceed=Please proceed to the next step.
- message.zone.no.network.selection=The zone you selected does not have any choices for network selection.
- label.no.thanks=No thanks
- label.my.templates=My templates
- message.select.template=Please select a template for your new virtual instance.
- message.select.iso=Please select an ISO for your new virtual instance.
- message.template.desc=OS image that can be used to boot VMs
- message.iso.desc=Disc image containing data or bootable media for OS
- label.select.iso.or.template=Select ISO or template
- message.select.a.zone=A zone typically corresponds to a single datacenter. Multiple zones help make the cloud more reliable by providing physical isolation and redundancy.
- label.select.a.zone=Select a zone
- label.review=Review
- label.select.a.template=Select a template
- label.setup=Setup
- state.Allocated=Allocated
- changed.item.properties=Changed item properties
- label.apply=Apply
- label.default=Default
- label.viewing=Viewing
- label.move.to.top=Move to top
- label.move.up.row=Move up one row
- label.move.down.row=Move down one row
- label.move.to.bottom=Move to bottom
- label.drag.new.position=Drag to new position
- label.order=Order
- label.no.data=No data to show
- label.change.value=Change value
- label.clear.list=Clear list
- label.full.path=Full path
- message.add.domain=Please specify the subdomain you want to create under this domain
- message.delete.user=Please confirm that you would like to delete this user.
- message.enable.user=Please confirm that you would like to enable this user.
- message.disable.user=Please confirm that you would like to disable this user.
- message.generate.keys=Please confirm that you would like to generate new keys for this user.
- message.update.resource.count=Please confirm that you want to update resource counts for this account.
- message.edit.account=Edit ("-1" indicates no limit to the amount of resources create)
- label.total.of.vm=Total of VM
- label.total.of.ip=Total of IP Address
- state.enabled=Enabled
- message.action.download.iso=Please confirm that you want to download this ISO.
- message.action.download.template=Please confirm that you want to download this template.
- label.destination.zone=Destination Zone
- label.keyboard.type=Keyboard type
- label.nic.adapter.type=NIC adapter type
- label.root.disk.controller=Root disk controller
- label.community=Community
- label.remove.egress.rule=Remove egress rule
- label.add.egress.rule=Add egress rule
- label.egress.rule=Egress rule
- label.remove.ingress.rule=Remove ingress rule
- label.delete.vpn.user=Delete VPN user
- label.add.vpn.user=Add VPN user
- label.remove.pf=Remove port forwarding rule
- label.remove.vm.from.lb=Remove VM from load balancer rule
- label.add.vms.to.lb=Add VM(s) to load balancer rule
- label.add.vm=Add VM
- label.remove.static.nat.rule=Remove static NAT rule
- label.remove.rule=Remove rule
- label.add.static.nat.rule=Add static NAT rule
- label.add.rule=Add rule
- label.configuration=Configuration
- message.disable.vpn=Are you sure you want to disable VPN?
- label.disable.vpn=Disable VPN
- message.enable.vpn=Please confirm that you want VPN access enabled for this IP address.
- label.enable.vpn=Enable VPN
- message.acquire.new.ip=Please confirm that you would like to acquire a new IP for this network.
- label.elastic=Elastic
- label.my.network=My network
- label.add.vms=Add VMs
- label.configure=Configure
- label.stickiness=Stickiness
- label.source=Source
- label.least.connections=Least connections
- label.round.robin=Round-robin
- label.restart.required=Restart required
- label.clean.up=Clean up
- label.restart.network=Restart network
- label.edit.network.details=Edit network details
- label.add.guest.network=Add guest network
- label.guest.networks=Guest networks
- message.ip.address.changed=Your IP addresses may have changed; would you like to refresh the listing? Note that in this case the details pane will close.
- state.BackingUp=Backing Up
- state.BackedUp=Backed Up
- label.done=Done
- label.vm.name=VM name
- message.migrate.volume=Please confirm that you want to migrate volume to another primary storage.
- label.migrate.volume=Migrate volume to another primary storage
- message.create.template=Are you sure you want to create template?
- label.create.template=Create template
- message.download.volume.confirm=Please confirm that you want to download this volume
- message.detach.disk=Are you sure you want to detach this disk?
- state.ready=Ready
- state.Ready=Ready
- label.vm.display.name=VM display name
- label.select-view=Select view
- label.local.storage=Local Storage
- label.direct.ips=Shared Network IPs
- label.view.all=View all
- label.zone.details=Zone details
- message.alert.state.detected=Alert state detected
- state.Starting=Starting
- state.Expunging=Expunging
- state.Creating=Creating
- message.decline.invitation=Are you sure you want to decline this project invitation?
- label.decline.invitation=Decline invitation
- message.confirm.join.project=Please confirm you wish to join this project.
- message.join.project=You have now joined a project. Please switch to Project view to see the project.
- label.accept.project.invitation=Accept project invitation
- label.token=Token
- label.project.id=Project ID
- message.enter.token=Please enter the token that you were given in your invite e-mail.
- label.enter.token=Enter token
- state.Accepted=Accepted
- state.Pending=Pending
- state.Completed=Completed
- state.Declined=Declined
- label.project=Project
- label.invitations=Invitations
- label.delete.project=Delete project
- message.delete.project=Are you sure you want to delete this project?
- message.activate.project=Are you sure you want to activate this project?
- label.activate.project=Activate Project
- label.suspend.project=Suspend Project
- message.suspend.project=Are you sure you want to suspend this project?
- state.Suspended=Suspended
- label.edit.project.details=Edit project details
- label.new.project=New Project
- state.Active=Active
- state.Disabled=Disabled
- label.projects=Projects
- label.make.project.owner=Make account project owner
- label.remove.project.account=Remove account from project
- message.project.invite.sent=Invite sent to user; they will be added to the project once they accept the invitation
- label.add.account.to.project=Add account to project
- label.revoke.project.invite=Revoke invitation
- label.project.invite=Invite to project
- label.select.project=Select Project
- message.no.projects=You do not have any projects.<br/>Please create a new one from the projects section.
- message.no.projects.adminOnly=You do not have any projects.<br/>Please ask your administrator to create a new project.
- message.pending.projects.1=You have pending project invitations:
- message.pending.projects.2=To view, please go to the projects section, then select invitations from the drop-down.
- message.instanceWizard.noTemplates=You do not have any templates available; please add a compatible template, and re-launch the instance wizard.
- label.view=View
- instances.actions.reboot.label=Reboot instance
- label.filterBy=Filter by
- label.ok=OK
- notification.reboot.instance=Reboot instance
- notification.start.instance=Start instance
- notification.stop.instance=Stop instance
- label.display.name=Display name
- label.zone.name=Zone name
- ui.listView.filters.all=All
- ui.listView.filters.mine=Mine
- state.Running=Running
- state.Stopped=Stopped
- state.Destroyed=Destroyed
- state.Error=Error
- message.reset.password.warning.notPasswordEnabled=The template of this instance was created without password enabled
- message.reset.password.warning.notStopped=Your instance must be stopped before attempting to change its current password
- label.notifications=Notifications
- label.default.view=Default View
- label.project.view=Project View
-
- message.add.system.service.offering=Please fill in the following data to add a new system service offering.
- message.action.delete.system.service.offering=Please confirm that you want to delete this system service offering.
- label.action.delete.system.service.offering=Delete System Service Offering
- label.hypervisor.capabilities=Hypervisor capabilities
- label.hypervisor.version=Hypervisor version
- label.max.guest.limit=Max guest limit
- label.add.network.offering=Add network offering
- label.supported.services=Supported Services
- label.service.capabilities=Service Capabilities
- label.guest.type=Guest Type
- label.specify.IP.ranges=Specify IP ranges
- label.conserve.mode=Conserve mode
- label.created.by.system=Created by system
- label.menu.system.service.offerings=System Offerings
- label.add.system.service.offering=Add System Service Offering
- label.redundant.router.capability=Redundant router capability
- label.supported.source.NAT.type=Supported Source NAT type
- label.elastic.LB=Elastic LB
- label.LB.isolation=LB isolation
- label.elastic.IP=Elastic IP
- label.network.label.display.for.blank.value=Use default gateway
- label.xen.traffic.label=XenServer traffic label
- label.kvm.traffic.label=KVM traffic label
- label.vmware.traffic.label=VMware traffic label
- label.start.IP=Start IP
- label.end.IP=End IP
- label.remove.ip.range=Remove IP range
- label.ip.ranges=IP Ranges
- label.start.vlan=Start Vlan
- label.end.vlan=End Vlan
- label.broadcast.domain.range=Broadcast domain range
- label.compute=Compute
- message.add.guest.network=Please confirm that you would like to add a guest network
- label.subdomain.access=Subdomain Access
- label.guest.start.ip=Guest start IP
- label.guest.end.ip=Guest end IP
- label.virtual.router=Virtual Router
- label.physical.network.ID=Physical network ID
- label.destination.physical.network.id=Destination physical network ID
- label.dhcp=DHCP
- label.destroy.router=Destroy router
- message.confirm.destroy.router=Please confirm that you would like to destroy this router
- label.change.service.offering=Change service offering
- label.view.console=View console
- label.redundant.state=Redundant state
- label.enable.provider=Enable provider
- message.confirm.enable.provider=Please confirm that you would like to enable this provider
- label.disable.provider=Disable provider
- message.confirm.disable.provider=Please confirm that you would like to disable this provider
- label.shutdown.provider=Shutdown provider
- message.confirm.shutdown.provider=Please confirm that you would like to shutdown this provider
- label.netScaler=NetScaler
- label.add.new.NetScaler=Add new NetScaler
- label.capacity=Capacity
- label.dedicated=Dedicated
- label.f5=F5
- label.add.new.F5=Add new F5
- label.srx=SRX
- label.providers=Providers
- label.add.new.SRX=Add new SRX
- label.timeout=Timeout
- label.public.network=Public network
- label.private.network=Private network
- label.enable.swift=Enable Swift
+ changed.item.properties=Changed item properties
+ confirm.enable.s3=Please fill in the following information to enable support for S3-backed Secondary Storage
confirm.enable.swift=Please fill in the following information to enable support for Swift
- message.after.enable.swift=Swift configured. Note: When you leave this page, you will not be able to re-configure Swift again.
- label.key=Key
- label.delete.NetScaler=Delete NetScaler
- message.confirm.delete.NetScaler=Please confirm that you would like to delete NetScaler
- label.delete.F5=Delete F5
- message.confirm.delete.F5=Please confirm that you would like to delete F5
- label.delete.SRX=Delete SRX
- message.confirm.delete.SRX=Please confirm that you would like to delete SRX
- label.pods=Pods
- label.pod.name=Pod name
- label.reserved.system.gateway=Reserved system gateway
- label.reserved.system.netmask=Reserved system netmask
- label.start.reserved.system.IP=Start Reserved system IP
- label.end.reserved.system.IP=End Reserved system IP
- label.clusters=Clusters
- label.cluster.name=Cluster Name
- label.host.MAC=Host MAC
- label.agent.username=Agent Username
- label.agent.password=Agent Password
- message.confirm.action.force.reconnect=Please confirm that you want to force reconnect this host.
- label.resource.state=Resource state
- label.LUN.number=LUN #
- message.confirm.remove.IP.range=Please confirm that you would like to remove this IP range.
- message.tooltip.zone.name=A name for the zone.
- message.tooltip.dns.1=Name of a DNS server for use by VMs in the zone. The public IP addresses for the zone must have a route to this server.
- message.tooltip.dns.2=A second DNS server name for use by VMs in the zone. The public IP addresses for the zone must have a route to this server.
- message.tooltip.internal.dns.1=Name of a DNS server for use by CloudStack internal system VMs in the zone. The private IP address for the pods must have a route to this server.
- message.tooltip.internal.dns.2=Name of a DNS server for use by CloudStack internal system VMs in the zone. The private IP address for the pods must have a route to this server.
- message.tooltip.network.domain=A DNS suffix that will create a custom domain name for the network that is accessed by guest VMs.
- message.tooltip.pod.name=A name for this pod.
- message.tooltip.reserved.system.gateway=The gateway for the hosts in the pod.
- message.tooltip.reserved.system.netmask=The network prefix that defines the pod subnet. Uses CIDR notation.
- message.creating.zone=Creating zone
- message.creating.physical.networks=Creating physical networks
- message.configuring.physical.networks=Configuring physical networks
- message.adding.Netscaler.device=Adding Netscaler device
- message.creating.pod=Creating pod
- message.configuring.public.traffic=Configuring public traffic
- message.configuring.storage.traffic=Configuring storage traffic
- message.configuring.guest.traffic=Configuring guest traffic
- message.creating.cluster=Creating cluster
- message.adding.host=Adding host
- message.creating.primary.storage=Creating primary storage
- message.creating.secondary.storage=Creating secondary storage
- message.Zone.creation.complete=Zone creation complete
- message.enabling.zone=Enabling zone
- error.something.went.wrong.please.correct.the.following=Something went wrong; please correct the following
error.could.not.enable.zone=Could not enable zone
- message.zone.creation.complete.would.you.like.to.enable.this.zone=Zone creation complete. Would you like to enable this zone?
- message.please.add.at.lease.one.traffic.range=Please add at least one traffic range.
- message.you.must.have.at.least.one.physical.network=You must have at least one physical network
- message.please.select.a.different.public.and.management.network.before.removing=Please select a different public and management network before removing
-
- label.zone.type=Zone Type
- label.setup.zone=Setup Zone
- label.setup.network=Setup Network
- label.add.resources=Add Resources
- label.launch=Launch
- label.set.up.zone.type=Set up zone type
- message.please.select.a.configuration.for.your.zone=Please select a configuration for your zone.
- message.desc.basic.zone=Provide a single network where each VM instance is assigned an IP directly from the network. Guest isolation can be provided through layer-3 means such as security groups (IP address source filtering).
- label.basic=Basic
- message.desc.advanced.zone=For more sophisticated network topologies. This network model provides the most flexibility in defining guest networks and providing custom network offerings such as firewall, VPN, or load balancer support.
- label.advanced=Advanced
- message.desc.zone=A zone is the largest organizational unit in CloudStack, and it typically corresponds to a single datacenter. Zones provide physical isolation and redundancy. A zone consists of one or more pods (each of which contains hosts and primary storage servers) and a secondary storage server which is shared by all pods in the zone.
- label.physical.network=Physical Network
- label.public.traffic=Public traffic
- label.guest.traffic=Guest Traffic
- label.storage.traffic=Storage Traffic
- message.setup.physical.network.during.zone.creation=When adding an advanced zone, you need to set up one or more physical networks. Each network corresponds to a NIC on the hypervisor. Each physical network can carry one or more types of traffic, with certain restrictions on how they may be combined.<br/><br/><strong>Drag and drop one or more traffic types</strong> onto each physical network.
- label.add.physical.network=Add physical network
- label.traffic.types=Traffic Types
- label.management=Management
- label.guest=Guest
- label.please.specify.netscaler.info=Please specify Netscaler info
- message.public.traffic.in.advanced.zone=Public traffic is generated when VMs in the cloud access the internet. Publicly-accessible IPs must be allocated for this purpose. End users can use the CloudStack UI to acquire these IPs to implement NAT between their guest network and their public network.<br/><br/>Provide at least one range of IP addresses for internet traffic.
- message.public.traffic.in.basic.zone=Public traffic is generated when VMs in the cloud access the Internet or provide services to clients over the Internet. Publicly accessible IPs must be allocated for this purpose. When a instance is created, an IP from this set of Public IPs will be allocated to the instance in addition to the guest IP address. Static 1-1 NAT will be set up automatically between the public IP and the guest IP. End users can also use the CloudStack UI to acquire additional IPs to implement static NAT between their instances and the public IP.
- message.add.pod.during.zone.creation=Each zone must contain in one or more pods, and we will add the first pod now. A pod contains hosts and primary storage servers, which you will add in a later step. First, configure a range of reserved IP addresses for CloudStack's internal management traffic. The reserved IP range must be unique for each zone in the cloud.
- message.guest.traffic.in.advanced.zone=Guest network traffic is communication between end-user virtual machines. Specify a range of VLAN IDs to carry guest traffic for each physical network.
- message.guest.traffic.in.basic.zone=Guest network traffic is communication between end-user virtual machines. Specify a range of IP addresses that CloudStack can assign to guest VMs. Make sure this range does not overlap the reserved system IP range.
- message.storage.traffic=Traffic between CloudStack's internal resources, including any components that communicate with the Management Server, such as hosts and CloudStack system VMs. Please configure storage traffic here.
- message.desc.cluster=Each pod must contain one or more clusters, and we will add the first cluster now. A cluster provides a way to group hosts. The hosts in a cluster all have identical hardware, run the same hypervisor, are on the same subnet, and access the same shared storage. Each cluster consists of one or more hosts and one or more primary storage servers.
- message.desc.host=Each cluster must contain at least one host (computer) for guest VMs to run on, and we will add the first host now. For a host to function in CloudStack, you must install hypervisor software on the host, assign an IP address to the host, and ensure the host is connected to the CloudStack management server.<br/><br/>Give the host's DNS or IP address, the user name (usually root) and password, and any labels you use to categorize hosts.
- message.desc.primary.storage=Each cluster must contain one or more primary storage servers, and we will add the first one now. Primary storage contains the disk volumes for all the VMs running on hosts in the cluster. Use any standards-compliant protocol that is supported by the underlying hypervisor.
- message.desc.secondary.storage=Each zone must have at least one NFS or secondary storage server, and we will add the first one now. Secondary storage stores VM templates, ISO images, and VM disk volume snapshots. This server must be available to all hosts in the zone.<br/><br/>Provide the IP address and exported path.
- label.launch.zone=Launch zone
- message.please.wait.while.zone.is.being.created=Please wait while your zone is being created; this may take a while...
-
- label.load.balancing=Load Balancing
- label.static.nat.enabled=Static NAT Enabled
- label.zones=Zones
- label.view.more=View more
- label.number.of.zones=Number of Zones
- label.number.of.pods=Number of Pods
- label.number.of.clusters=Number of Clusters
- label.number.of.hosts=Number of Hosts
- label.total.hosts=Total Hosts
- label.total.CPU=Total CPU
- label.total.memory=Total Memory
- label.total.storage=Total Storage
- label.purpose=Purpose
-
-
-
-
- label.action.migrate.router=Migrate Router
- label.action.migrate.router.processing=Migrating Router....
- message.migrate.router.confirm=Please confirm the host you wish to migrate the router to:
- label.migrate.router.to=Migrate Router to
-
- label.action.migrate.systemvm=Migrate System VM
- label.action.migrate.systemvm.processing=Migrating System VM....
- message.migrate.systemvm.confirm=Please confirm the host you wish to migrate the system VM to:
- label.migrate.systemvm.to=Migrate System VM to
-
-
- mode=Mode
- side.by.side=Side by Side
- inline=Inline
-
+ error.installWizard.message=Something went wrong; you may go back and correct any errors
+ error.invalid.username.password=Invalid username or password
+ error.login=Your username/password does not match our records.
+ error.menu.select=Unable to perform action due to no items being selected.
+ error.mgmt.server.inaccessible=The Management Server is unaccessible. Please try again later.
+ error.password.not.match=The password fields do not match
+ error.please.specify.physical.network.tags=Network offerings is not available until you specify tags for this physical network.
+ error.session.expired=Your session has expired.
+ error.something.went.wrong.please.correct.the.following=Something went wrong; please correct the following
+ error.unable.to.reach.management.server=Unable to reach Management Server
+ error.unresolved.internet.name=Your internet name cannot be resolved.
extractable=Extractable
-
- label.ocfs2=OCFS2
-
- label.action.edit.host=Edit Host
-
- network.rate=Network Rate
-
- ICMP.type=ICMP Type
- ICMP.code=ICMP Code
-
- image.directory=Image Directory
-
- label.action.create.template.from.vm=Create Template from VM
- label.action.create.template.from.volume=Create Template from Volume
-
- message.vm.create.template.confirm=Create Template will reboot the VM automatically.
-
- label.action.manage.cluster=Manage Cluster
- message.action.manage.cluster=Please confirm that you want to manage the cluster.
- label.action.manage.cluster.processing=Managing Cluster....
-
- label.action.unmanage.cluster=Unmanage Cluster
- message.action.unmanage.cluster=Please confirm that you want to unmanage the cluster.
- label.action.unmanage.cluster.processing=Unmanaging Cluster....
-
- label.allocation.state=Allocation State
- managed.state=Managed State
-
- label.default.use=Default Use
- label.host.tags=Host Tags
-
- label.cidr=CIDR
- label.cidr.list=Source CIDR
-
- label.storage.tags=Storage Tags
-
- label.redundant.router=Redundant Router
- label.is.redundant.router=Redundant
-
- force.delete=Force Delete
force.delete.domain.warning=Warning: Choosing this option will cause the deletion of all child domains and all associated accounts and their resources.
-
+ force.delete=Force Delete
force.remove=Force Remove
force.remove.host.warning=Warning: Choosing this option will cause CloudStack to forcefully stop all running virtual machines before removing this host from the cluster.
-
force.stop=Force Stop
force.stop.instance.warning=Warning: Forcing a stop on this instance should be your last option. It can lead to data loss as well as inconsistent behavior of the virtual machine state.
-
- label.PreSetup=PreSetup
- label.SR.name = SR Name-Label
- label.SharedMountPoint=SharedMountPoint
- label.clvm=CLVM
- label.volgroup=Volume Group
- label.VMFS.datastore=VMFS datastore
-
- label.network.device=Network Device
- label.add.network.device=Add Network Device
- label.network.device.type=Network Device Type
- label.DHCP.server.type=DHCP Server Type
- label.Pxe.server.type=Pxe Server Type
- label.PING.storage.IP=PING storage IP
- label.PING.dir=PING Directory
- label.TFTP.dir=TFTP Directory
- label.PING.CIFS.username=PING CIFS username
- label.PING.CIFS.password=PING CIFS password
- label.CPU.cap=CPU Cap
-
-
- label.action.enable.zone=Enable Zone
- label.action.enable.zone.processing=Enabling Zone....
- message.action.enable.zone=Please confirm that you want to enable this zone.
- label.action.disable.zone=Disable Zone
- label.action.disable.zone.processing=Disabling Zone....
- message.action.disable.zone=Please confirm that you want to disable this zone.
-
- label.action.enable.pod=Enable Pod
- label.action.enable.pod.processing=Enabling Pod....
- message.action.enable.pod=Please confirm that you want to enable this pod.
- label.action.disable.pod=Disable Pod
- label.action.disable.pod.processing=Disabling Pod....
- message.action.disable.pod=Please confirm that you want to disable this pod.
-
- label.action.enable.cluster=Enable Cluster
- label.action.enable.cluster.processing=Enabling Cluster....
- message.action.enable.cluster=Please confirm that you want to enable this cluster.
- label.action.disable.cluster=Disable Cluster
- label.action.disable.cluster.processing=Disabling Cluster....
- message.action.disable.cluster=Please confirm that you want to disable this cluster.
-
+ ICMP.code=ICMP Code
+ ICMP.type=ICMP Type
+ image.directory=Image Directory
+ inline=Inline
+ instances.actions.reboot.label=Reboot instance
+ label.accept.project.invitation=Accept project invitation
+ label.account=Account
+ label.account.and.security.group=Account, Security group
label.account.id=Account ID
label.account.name=Account Name
- label.account.specific=Account-Specific
- label.account=Account
label.accounts=Accounts
- label.acquire.new.ip=Acquire New IP
- label.show.ingress.rule=Show Ingress Rule
- label.hide.ingress.rule=Hide Ingress Rule
- label.action.attach.disk.processing=Attaching Disk....
+ label.account.specific=Account-Specific
+ label.acquire.new.ip=Acquire New IP
label.action.attach.disk=Attach Disk
- label.action.attach.iso.processing=Attaching ISO....
+ label.action.attach.disk.processing=Attaching Disk....
label.action.attach.iso=Attach ISO
- label.action.cancel.maintenance.mode.processing=Cancelling Maintenance Mode....
+ label.action.attach.iso.processing=Attaching ISO....
label.action.cancel.maintenance.mode=Cancel Maintenance Mode
+ label.action.cancel.maintenance.mode.processing=Cancelling Maintenance Mode....
label.action.change.password=Change Password
- label.action.change.service.processing=Changing Service....
label.action.change.service=Change Service
- label.action.copy.ISO.processing=Coping ISO....
+ label.action.change.service.processing=Changing Service....
label.action.copy.ISO=Copy ISO
- label.action.copy.template.processing=Coping Template....
+ label.action.copy.ISO.processing=Coping ISO....
label.action.copy.template=Copy Template
- label.action.create.template.processing=Creating Template....
+ label.action.copy.template.processing=Coping Template....
label.action.create.template=Create Template
- label.action.create.vm.processing=Creating VM....
+ label.action.create.template.from.vm=Create Template from VM
+ label.action.create.template.from.volume=Create Template from Volume
+ label.action.create.template.processing=Creating Template....
label.action.create.vm=Create VM
- label.action.create.volume.processing=Creating Volume....
+ label.action.create.vm.processing=Creating VM....
label.action.create.volume=Create Volume
- label.action.delete.IP.range.processing=Deleting IP Range....
- label.action.delete.IP.range=Delete IP Range
- label.action.delete.ISO.processing=Deleting ISO....
- label.action.delete.ISO=Delete ISO
- label.action.delete.account.processing=Deleting account....
+ label.action.create.volume.processing=Creating Volume....
label.action.delete.account=Delete account
- label.action.delete.cluster.processing=Deleting Cluster....
+ label.action.delete.account.processing=Deleting account....
label.action.delete.cluster=Delete Cluster
- label.action.delete.disk.offering.processing=Deleting Disk Offering....
+ label.action.delete.cluster.processing=Deleting Cluster....
label.action.delete.disk.offering=Delete Disk Offering
-
- label.action.update.resource.count=Update Resource Count
- label.action.update.resource.count.processing=Updating Resource Count....
-
+ label.action.delete.disk.offering.processing=Deleting Disk Offering....
label.action.delete.domain=Delete Domain
label.action.delete.domain.processing=Deleting Domain....
-
- label.action.delete.firewall.processing=Deleting Firewall....
label.action.delete.firewall=Delete firewall rule
- label.action.delete.ingress.rule.processing=Deleting Ingress Rule....
+ label.action.delete.firewall.processing=Deleting Firewall....
label.action.delete.ingress.rule=Delete Ingress Rule
- label.action.delete.load.balancer.processing=Deleting Load Balancer....
+ label.action.delete.ingress.rule.processing=Deleting Ingress Rule....
+ label.action.delete.IP.range=Delete IP Range
+ label.action.delete.IP.range.processing=Deleting IP Range....
+ label.action.delete.ISO=Delete ISO
+ label.action.delete.ISO.processing=Deleting ISO....
label.action.delete.load.balancer=Delete load balancer rule
- label.action.edit.network.processing=Editing Network....
- label.action.edit.network=Edit Network
- label.action.delete.network.processing=Deleting Network....
+ label.action.delete.load.balancer.processing=Deleting Load Balancer....
label.action.delete.network=Delete Network
- label.action.delete.pod.processing=Deleting Pod....
+ label.action.delete.network.processing=Deleting Network....
+ label.action.delete.nexusVswitch=Delete Nexus 1000v
+ label.action.delete.physical.network=Delete physical network
label.action.delete.pod=Delete Pod
- label.action.delete.primary.storage.processing=Deleting Primary Storage....
+ label.action.delete.pod.processing=Deleting Pod....
label.action.delete.primary.storage=Delete Primary Storage
- label.action.delete.secondary.storage.processing=Deleting Secondary Storage....
+ label.action.delete.primary.storage.processing=Deleting Primary Storage....
label.action.delete.secondary.storage=Delete Secondary Storage
- label.action.delete.security.group.processing=Deleting Security Group....
+ label.action.delete.secondary.storage.processing=Deleting Secondary Storage....
label.action.delete.security.group=Delete Security Group
- label.action.delete.service.offering.processing=Deleting Service Offering....
+ label.action.delete.security.group.processing=Deleting Security Group....
label.action.delete.service.offering=Delete Service Offering
- label.action.delete.snapshot.processing=Deleting Snapshot....
+ label.action.delete.service.offering.processing=Deleting Service Offering....
label.action.delete.snapshot=Delete Snapshot
- label.action.delete.template.processing=Deleting Template....
+ label.action.delete.snapshot.processing=Deleting Snapshot....
+ label.action.delete.system.service.offering=Delete System Service Offering
label.action.delete.template=Delete Template
- label.action.delete.user.processing=Deleting User....
+ label.action.delete.template.processing=Deleting Template....
label.action.delete.user=Delete User
- label.action.delete.volume.processing=Deleting Volume....
+ label.action.delete.user.processing=Deleting User....
label.action.delete.volume=Delete Volume
- label.action.delete.zone.processing=Deleting Zone....
+ label.action.delete.volume.processing=Deleting Volume....
label.action.delete.zone=Delete Zone
- label.action.destroy.instance.processing=Destroying Instance....
+ label.action.delete.zone.processing=Deleting Zone....
label.action.destroy.instance=Destroy Instance
- label.action.destroy.systemvm.processing=Destroying System VM....
+ label.action.destroy.instance.processing=Destroying Instance....
label.action.destroy.systemvm=Destroy System VM
- label.action.detach.disk.processing=Detaching Disk....
+ label.action.destroy.systemvm.processing=Destroying System VM....
label.action.detach.disk=Detach Disk
- label.action.detach.iso.processing=Detaching ISO....
+ label.action.detach.disk.processing=Detaching Disk....
label.action.detach.iso=Detach ISO
- label.action.disable.account.processing=Disabling account....
+ label.action.detach.iso.processing=Detaching ISO....
label.action.disable.account=Disable account
- label.action.disable.static.NAT.processing=Disabling Static NAT....
+ label.action.disable.account.processing=Disabling account....
+ label.action.disable.cluster=Disable Cluster
+ label.action.disable.cluster.processing=Disabling Cluster....
+ label.action.disable.nexusVswitch=Disable Nexus 1000v
+ label.action.disable.physical.network=Disable physical network
+ label.action.disable.pod=Disable Pod
+ label.action.disable.pod.processing=Disabling Pod....
label.action.disable.static.NAT=Disable Static NAT
- label.action.disable.user.processing=Disabling User....
+ label.action.disable.static.NAT.processing=Disabling Static NAT....
label.action.disable.user=Disable User
+ label.action.disable.user.processing=Disabling User....
+ label.action.disable.zone=Disable Zone
+ label.action.disable.zone.processing=Disabling Zone....
label.action.download.ISO=Download ISO
label.action.download.template=Download Template
- label.action.download.volume.processing=Downloading Volume....
label.action.download.volume=Download Volume
- label.action.edit.ISO=Edit ISO
+ label.action.download.volume.processing=Downloading Volume....
label.action.edit.account=Edit account
label.action.edit.disk.offering=Edit Disk Offering
label.action.edit.domain=Edit Domain
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b011e7e/ui/css/cloudstack3.css
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b011e7e/ui/index.jsp
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b011e7e/ui/scripts/cloudStack.js
----------------------------------------------------------------------
diff --cc ui/scripts/cloudStack.js
index 3e9bef0,35969a2..b943a94
--- a/ui/scripts/cloudStack.js
+++ b/ui/scripts/cloudStack.js
@@@ -22,16 -22,16 +22,16 @@@
var sections = [];
if(isAdmin()) {
- sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "system", "global-settings", "configuration", "projects", "regions"];
+ sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "system", "global-settings", "configuration", "projects", "regions", "affinityGroups"];
}
else if(isDomainAdmin()) {
- sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "projects", "affinityGroups"];
- sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "projects", "regions"];
++ sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "projects", "regions", "affinityGroups"];
}
else if (g_userProjectsEnabled) {
- sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "projects", "affinityGroups"];
- sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "projects", "regions"];
++ sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "projects", "regions", "affinityGroups"];
}
else { //normal user
- sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "affinityGroups"];
- sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "regions"];
++ sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "regions", "affinityGroups"];
}
if (cloudStack.plugins.length) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b011e7e/ui/scripts/instanceWizard.js
----------------------------------------------------------------------
diff --cc ui/scripts/instanceWizard.js
index e7aa673,13828c8..f3deb66
--- a/ui/scripts/instanceWizard.js
+++ b/ui/scripts/instanceWizard.js
@@@ -68,46 -68,155 +68,45 @@@
// Data providers for each wizard step
steps: [
-
-
- // Step 1: Setup
- function(args) {
- if(args.initArgs.pluginForm != null && args.initArgs.pluginForm.name == "vpcTierInstanceWizard") { //from VPC Tier chart (VPC is only available in Advanced zone)
- if(args.context.zoneType == 'Basic'){ //Basic type
- zoneObjs = [];
- }
- else { //Advanced type or all types
- //populate only one zone to the dropdown, the zone which the VPC is under. (networktype should be 'Advanced' since VPC is only available in Advanced zone)
- zoneObjs = [{
- id: args.context.vpc[0].zoneid,
- name: args.context.vpc[0].zonename,
- networktype: 'Advanced'
- }];
- }
- args.response.success({ data: {zones: zoneObjs}});
- }
- else { //from Instance page
- $.ajax({
- url: createURL("listZones&available=true"),
- dataType: "json",
- async: false,
- success: function(json) {
- if(args.context.zoneType == null || args.context.zoneType == '') { //all types
- zoneObjs = json.listzonesresponse.zone;
- }
- else { //Basic type or Advanced type
- zoneObjs = [];
- var items = json.listzonesresponse.zone;
- if(items != null) {
- for(var i = 0; i < items.length; i++) {
- if(items[i].networktype == args.context.zoneType)
- zoneObjs.push(items[i]);
- }
- }
- }
- args.response.success({ data: {zones: zoneObjs}});
- }
- });
- }
- },
-
- // Step 2: Select template
- function(args) {
- $(zoneObjs).each(function(){
- if(this.id == args.currentData.zoneid) {
- selectedZoneObj = this;
- return false; //break the $.each() loop
- }
- });
- if(selectedZoneObj == null) {
- alert("error: can't find matched zone object");
- return;
- }
-
- $.ajax({
- url: createURL("listHypervisors&zoneid="+args.currentData.zoneid),
- dataType: "json",
- async: false,
- success: function(json) {
- hypervisorObjs = json.listhypervisorsresponse.hypervisor;
- }
- });
-
- //***** get templates/ISOs (begin) *****
- var selectedTemplate = args.currentData['select-template'];
- if (selectedTemplate == 'select-template') {
- var hypervisorArray = [];
- $(hypervisorObjs).each(function(index, item) {
- hypervisorArray.push(item.name);
- });
-
- $.ajax({
- url: createURL("listTemplates&templatefilter=featured&zoneid="+args.currentData.zoneid),
- dataType: "json",
- async: false,
- success: function(json) {
- if(json.listtemplatesresponse.template == null) {
- featuredTemplateObjs = null;
- }
- else {
- featuredTemplateObjs = $.grep(json.listtemplatesresponse.template, function(item, index) {
- if($.inArray(item.hypervisor, hypervisorArray) > -1)
- return true;
- });
- }
- }
- });
- $.ajax({
- url: createURL("listTemplates&templatefilter=community&zoneid="+args.currentData.zoneid),
- dataType: "json",
- async: false,
- success: function(json) {
- if(json.listtemplatesresponse.template == null) {
- communityTemplateObjs = null;
- }
- else {
- communityTemplateObjs = $.grep(json.listtemplatesresponse.template, function(item, index) {
- if($.inArray(item.hypervisor, hypervisorArray) > -1)
- return true;
- });
- }
- }
- });
- $.ajax({
- url: createURL("listTemplates&templatefilter=selfexecutable&zoneid="+args.currentData.zoneid),
- dataType: "json",
- async: false,
- success: function(json) {
- if(json.listtemplatesresponse.template == null) {
- myTemplateObjs = null;
- }
- else {
- myTemplateObjs = $.grep(json.listtemplatesresponse.template, function(item, index) {
- if($.inArray(item.hypervisor, hypervisorArray) > -1)
- return true;
- });
- }
- }
- });
- } else if (selectedTemplate == 'select-iso') {
- $.ajax({
- url: createURL("listIsos&isofilter=featured&zoneid=" + args.currentData.zoneid + "&bootable=true"),
- dataType: "json",
- async: false,
- success: function(json) {
- if(json.listisosresponse.iso == null) {
- featuredIsoObjs = null;
- }
- else {
- featuredIsoObjs = json.listisosresponse.iso;
- }
- }
- });
- $.ajax({
- url: createURL("listIsos&isofilter=community&zoneid=" + args.currentData.zoneid + "&bootable=true"),
- dataType: "json",
- async: false,
- success: function(json) {
- if(json.listisosresponse.iso == null) {
- communityIsoObjs = null;
- }
- else {
- communityIsoObjs = json.listisosresponse.iso;
- }
+ // Step 1: Setup
+ function(args) {
+ if(args.initArgs.pluginForm != null && args.initArgs.pluginForm.name == "vpcTierInstanceWizard") { //from VPC Tier chart
+ //populate only one zone to the dropdown, the zone which the VPC is under.
+ zoneObjs = [{
+ id: args.context.vpc[0].zoneid,
+ name: args.context.vpc[0].zonename,
+ networktype: 'Advanced'
+ }];
+ args.response.success({ data: {zones: zoneObjs}});
+ }
+ else { //from Instance page
+ $.ajax({
+ url: createURL("listZones&available=true"),
+ dataType: "json",
+ async: false,
+ success: function(json) {
+ zoneObjs = json.listzonesresponse.zone;
+ args.response.success({ data: {zones: zoneObjs}});
+ }
+ });
+ }
+ },
+
+ // Step 2: Select template
+ function(args) {
+ $(zoneObjs).each(function(){
+ if(this.id == args.currentData.zoneid) {
+ selectedZoneObj = this;
+ return false; //break the $.each() loop
}
});
+ if(selectedZoneObj == null) {
+ alert("error: can't find matched zone object");
+ return;
+ }
+
$.ajax({
- url: createURL("listIsos&isofilter=selfexecutable&zoneid=" + args.currentData.zoneid + "&bootable=true"),
+ url: createURL("listHypervisors&zoneid="+args.currentData.zoneid),
dataType: "json",
async: false,
success: function(json) {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7b011e7e/ui/scripts/instances.js
----------------------------------------------------------------------
[44/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - API: extend listClusters API to to take in zonetype.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ef00f1b0
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ef00f1b0
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ef00f1b0
Branch: refs/heads/marvin_refactor
Commit: ef00f1b04f8d9e4f7ea981c3174ae9f4a84d4a58
Parents: 271f875
Author: Jessica Wang <je...@citrix.com>
Authored: Sat Apr 27 21:38:03 2013 -0700
Committer: Jessica Wang <je...@citrix.com>
Committed: Sat Apr 27 21:38:03 2013 -0700
----------------------------------------------------------------------
.../api/command/admin/cluster/ListClustersCmd.java | 8 ++-
.../src/com/cloud/server/ManagementServerImpl.java | 47 +++++++++++----
2 files changed, 41 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ef00f1b0/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
index 0417b18..f2dd349 100644
--- a/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/ListClustersCmd.java
@@ -70,6 +70,9 @@ public class ListClustersCmd extends BaseListCmd {
@Parameter(name=ApiConstants.MANAGED_STATE, type=CommandType.STRING, description="whether this cluster is managed by cloudstack")
private String managedState;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
@Parameter(name=ApiConstants.SHOW_CAPACITIES, type=CommandType.BOOLEAN, description="flag to display the capacity of the clusters")
private Boolean showCapacities;
@@ -114,7 +117,10 @@ public class ListClustersCmd extends BaseListCmd {
this.managedState = managedstate;
}
-
+ public String getZoneType() {
+ return zoneType;
+ }
+
public Boolean getShowCapacities() {
return showCapacities;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ef00f1b0/server/src/com/cloud/server/ManagementServerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java
index 5db8329..1799f77 100755
--- a/server/src/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/com/cloud/server/ManagementServerImpl.java
@@ -616,48 +616,69 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
@Override
public Pair<List<? extends Cluster>, Integer> searchForClusters(ListClustersCmd cmd) {
- Filter searchFilter = new Filter(ClusterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
- SearchCriteria<ClusterVO> sc = _clusterDao.createSearchCriteria();
-
- Object id = cmd.getId();
+ Object id = cmd.getId();
Object name = cmd.getClusterName();
Object podId = cmd.getPodId();
Long zoneId = cmd.getZoneId();
Object hypervisorType = cmd.getHypervisorType();
Object clusterType = cmd.getClusterType();
Object allocationState = cmd.getAllocationState();
+ String zoneType = cmd.getZoneType();
String keyword = cmd.getKeyword();
-
zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), zoneId);
-
+
+
+ Filter searchFilter = new Filter(ClusterVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
+
+ SearchBuilder<ClusterVO> sb = _clusterDao.createSearchBuilder();
+ sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+ sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE);
+ sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
+ sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ sb.and("hypervisorType", sb.entity().getHypervisorType(), SearchCriteria.Op.EQ);
+ sb.and("clusterType", sb.entity().getClusterType(), SearchCriteria.Op.EQ);
+ sb.and("allocationState", sb.entity().getAllocationState(), SearchCriteria.Op.EQ);
+
+ if(zoneType != null) {
+ SearchBuilder<DataCenterVO> zoneSb = _dcDao.createSearchBuilder();
+ zoneSb.and("zoneNetworkType", zoneSb.entity().getNetworkType(), SearchCriteria.Op.EQ);
+ sb.join("zoneSb", zoneSb, sb.entity().getDataCenterId(), zoneSb.entity().getId(), JoinBuilder.JoinType.INNER);
+ }
+
+
+ SearchCriteria<ClusterVO> sc = sb.create();
if (id != null) {
- sc.addAnd("id", SearchCriteria.Op.EQ, id);
+ sc.setParameters("id", id);
}
if (name != null) {
- sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%");
+ sc.setParameters("name", "%" + name + "%");
}
if (podId != null) {
- sc.addAnd("podId", SearchCriteria.Op.EQ, podId);
+ sc.setParameters("podId", podId);
}
if (zoneId != null) {
- sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
+ sc.setParameters("dataCenterId", zoneId);
}
if (hypervisorType != null) {
- sc.addAnd("hypervisorType", SearchCriteria.Op.EQ, hypervisorType);
+ sc.setParameters("hypervisorType", hypervisorType);
}
if (clusterType != null) {
- sc.addAnd("clusterType", SearchCriteria.Op.EQ, clusterType);
+ sc.setParameters("clusterType", clusterType);
}
if (allocationState != null) {
- sc.addAnd("allocationState", SearchCriteria.Op.EQ, allocationState);
+ sc.setParameters("allocationState", allocationState);
}
+ if(zoneType != null) {
+ sc.setJoinParameters("zoneSb", "zoneNetworkType", zoneType);
+ }
+
if (keyword != null) {
SearchCriteria<ClusterVO> ssc = _clusterDao.createSearchCriteria();
ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
[26/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
passwords are auto-hashed based on authenticator used
marvin client will send plaintext password.
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/8b1702bf
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/8b1702bf
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/8b1702bf
Branch: refs/heads/marvin_refactor
Commit: 8b1702bfd4ed9f75635bf96788a186fa11590fee
Parents: dbcfc66
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Fri Apr 26 12:14:41 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Fri Apr 26 12:15:12 2013 +0530
----------------------------------------------------------------------
tools/marvin/marvin/cloudstackTestClient.py | 6 +-----
1 files changed, 1 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8b1702bf/tools/marvin/marvin/cloudstackTestClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackTestClient.py b/tools/marvin/marvin/cloudstackTestClient.py
index e448aba..95e862a 100644
--- a/tools/marvin/marvin/cloudstackTestClient.py
+++ b/tools/marvin/marvin/cloudstackTestClient.py
@@ -79,10 +79,6 @@ class cloudstackTestClient(object):
domain = self.apiClient.createDomain(cdomain)
domId = domain.id
- mdf = hashlib.md5()
- mdf.update("password")
- mdf_pass = mdf.hexdigest()
-
cmd = listAccounts.listAccountsCmd()
cmd.name = UserName
cmd.domainid = domId
@@ -96,7 +92,7 @@ class cloudstackTestClient(object):
createAcctCmd.email = "test-" + self.random_gen() + "@cloudstack.org"
createAcctCmd.firstname = UserName
createAcctCmd.lastname = UserName
- createAcctCmd.password = mdf_pass
+ createAcctCmd.password = 'password'
createAcctCmd.username = UserName
acct = self.apiClient.createAccount(createAcctCmd)
acctId = acct.id
[38/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - API: extend listNetworks API to to take in zonetype.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1f0863f7
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1f0863f7
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1f0863f7
Branch: refs/heads/marvin_refactor
Commit: 1f0863f75b629b60770626006ba3a94ad05b53a4
Parents: a20ed3a
Author: Jessica Wang <je...@citrix.com>
Authored: Fri Apr 26 15:23:30 2013 -0700
Committer: Jessica Wang <je...@citrix.com>
Committed: Fri Apr 26 15:23:30 2013 -0700
----------------------------------------------------------------------
.../api/command/user/network/ListNetworksCmd.java | 7 +++++
.../src/com/cloud/network/NetworkServiceImpl.java | 19 +++++++++-----
2 files changed, 19 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1f0863f7/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
index afce092..d25e2c0 100644
--- a/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java
@@ -48,6 +48,9 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd {
description="the Zone ID of the network")
private Long zoneId;
+ @Parameter(name=ApiConstants.ZONE_TYPE, type=CommandType.STRING, description="the network type of the zone that the virtual machine belongs to")
+ private String zoneType;
+
@Parameter(name=ApiConstants.TYPE, type=CommandType.STRING, description="the type of the network. Supported values are: Isolated and Shared")
private String guestIpType;
@@ -96,6 +99,10 @@ public class ListNetworksCmd extends BaseListTaggedResourcesCmd {
return zoneId;
}
+ public String getZoneType() {
+ return zoneType;
+ }
+
public String getGuestIpType() {
return guestIpType;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1f0863f7/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java
index 7bc2e54..2dcb47d 100755
--- a/server/src/com/cloud/network/NetworkServiceImpl.java
+++ b/server/src/com/cloud/network/NetworkServiceImpl.java
@@ -1158,6 +1158,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
Long id = cmd.getId();
String keyword = cmd.getKeyword();
Long zoneId = cmd.getZoneId();
+ String zoneType = cmd.getZoneType();
Account caller = UserContext.current().getCaller();
Long domainId = cmd.getDomainId();
String accountName = cmd.getAccountName();
@@ -1306,39 +1307,39 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
//get account level networks
networksToReturn.addAll(listAccountSpecificNetworks(
buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType,
- physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter,
+ physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, zoneType), searchFilter,
permittedAccounts));
//get domain level networks
if (domainId != null) {
networksToReturn
.addAll(listDomainLevelNetworks(
buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType,
- physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter,
+ physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags, zoneType), searchFilter,
domainId, false));
}
} else {
//add account specific networks
networksToReturn.addAll(listAccountSpecificNetworksByDomainPath(
buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType,
- physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path,
+ physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, zoneType), searchFilter, path,
isRecursive));
//add domain specific networks of domain + parent domains
networksToReturn.addAll(listDomainSpecificNetworksByDomainPath(
buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType,
- physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path,
+ physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, zoneType), searchFilter, path,
isRecursive));
//add networks of subdomains
if (domainId == null) {
networksToReturn
.addAll(listDomainLevelNetworks(
buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType,
- physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter,
+ physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags, zoneType), searchFilter,
caller.getDomainId(), true));
}
}
} else {
networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId,
- guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags),
+ guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, zoneType),
searchFilter);
}
@@ -1383,7 +1384,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
private SearchCriteria<NetworkVO> buildNetworkSearchCriteria(SearchBuilder<NetworkVO> sb, String keyword, Long id,
Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId,
- String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map<String, String> tags) {
+ String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map<String, String> tags, String zoneType) {
SearchCriteria<NetworkVO> sc = sb.create();
@@ -1405,6 +1406,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService {
sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
}
+ if(zoneType != null) {
+ sc.setJoinParameters("zoneSearch", "networkType", zoneType);
+ }
+
if (guestIpType != null) {
sc.addAnd("guestType", SearchCriteria.Op.EQ, guestIpType);
}
[41/50] [abbrv] Sort in alphabetical order (to avoid duplicate key)
and better compare with l10n ressource files (already in alphabetical order)
Posted by ts...@apache.org.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2ec28ce1/ui/dictionary.jsp
----------------------------------------------------------------------
diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp
index 1880be5..d2b4a93 100644
--- a/ui/dictionary.jsp
+++ b/ui/dictionary.jsp
@@ -25,574 +25,141 @@ under the License.
<% long now = System.currentTimeMillis(); %>
<script language="javascript">
dictionary = {
-'label.add.affinity.group': '<fmt:message key="label.add.affinity.group"/>',
-'message.delete.affinity.group': '<fmt:message key="message.delete.affinity.group"/>',
-'label.delete.affinity.group': '<fmt:message key="label.delete.affinity.group"/>',
-'label.edit.affinity.group': '<fmt:message key="label.edit.affinity.group"/>',
-'label.affinity': '<fmt:message key="label.affinity"/>',
-'label.anti.affinity': '<fmt:message key="label.anti.affinity"/>',
-'label.affinity.groups': '<fmt:message key="label.affinity.groups"/>',
-'label.anti.affinity.groups': '<fmt:message key="label.anti.affinity.groups"/>',
-'label.affinity.group': '<fmt:message key="label.affinity.group"/>',
-'label.anti.affinity.group': '<fmt:message key="label.anti.affinity.group"/>',
-'message.redirecting.region': '<fmt:message key="message.redirecting.region"/>',
-'label.use.vm.ip': '<fmt:message key="label.use.vm.ip"/>',
-'label.cpu.limits': '<fmt:message key="label.cpu.limits"/>',
-'label.memory.limits': '<fmt:message key="label.memory.limits"/>',
-'label.primary.storage.limits': '<fmt:message key="label.primary.storage.limits"/>',
-'label.secondary.storage.limits': '<fmt:message key="label.secondary.storage.limits"/>',
-'label.max.cpus': '<fmt:message key="label.max.cpus"/>',
-'label.max.memory': '<fmt:message key="label.max.memory"/>',
-'label.max.primary.storage': '<fmt:message key="label.max.primary.storage"/>',
-'label.max.secondary.storage': '<fmt:message key="label.max.secondary.storage"/>',
-'label.add.region': '<fmt:message key="label.add.region"/>',
-'label.remove.region': '<fmt:message key="label.remove.region"/>',
-'message.remove.region': '<fmt:message key="message.remove.region"/>',
-'message.add.region': '<fmt:message key="message.add.region"/>',
-'label.region': '<fmt:message key="label.region"/>',
-'label.endpoint': '<fmt:message key="label.endpoint"/>',
-'label.menu.regions': '<fmt:message key="label.menu.regions"/>',
-'label.plugins': '<fmt:message key="label.plugins"/>',
-'label.plugin.details': '<fmt:message key="label.plugin.details"/>',
-'label.author.name': '<fmt:message key="label.author.name"/>',
-'label.author.email': '<fmt:message key="label.author.email"/>',
-'label.external.link': '<fmt:message key="label.external.link"/>',
-'label.enable.s3': '<fmt:message key="label.enable.s3"/>',
-'confirm.enable.s3': '<fmt:message key="confirm.enable.s3"/>',
-'message.after.enable.s3': '<fmt:message key="message.after.enable.s3"/>',
-'label.s3.access_key': '<fmt:message key="label.s3.access_key"/>',
-'label.s3.secret_key': '<fmt:message key="label.s3.secret_key"/>',
-'label.s3.bucket': '<fmt:message key="label.s3.bucket"/>',
-'label.s3.endpoint': '<fmt:message key="label.s3.endpoint"/>',
-'label.s3.use_https': '<fmt:message key="label.s3.use_https"/>',
-'label.s3.connection_timeout': '<fmt:message key="label.s3.connection_timeout"/>',
-'label.s3.max_error_retry': '<fmt:message key="label.s3.max_error_retry"/>',
-'label.s3.socket_timeout': '<fmt:message key="label.s3.socket_timeout"/>',
-'label.egress.rules': '<fmt:message key="label.egress.rules"/>',
-'message.acquire.new.ip.vpc': '<fmt:message key="message.acquire.new.ip.vpc"/>',
-'label.quickview': '<fmt:message key="label.quickview"/>',
-'label.migrate.to.host': '<fmt:message key="label.migrate.to.host"/>',
-'label.migrate.to.storage': '<fmt:message key="label.migrate.to.storage"/>',
-'label.stop': '<fmt:message key="label.stop"/>',
-'label.reboot': '<fmt:message key="label.reboot"/>',
-'label.destroy': '<fmt:message key="label.destroy"/>',
-'label.restore': '<fmt:message key="label.restore"/>',
-'label.broadcast.uri': '<fmt:message key="label.broadcast.uri"/>',
-'label.isolation.uri': '<fmt:message key="label.isolation.uri"/>',
-'message.zoneWizard.enable.local.storage': '<fmt:message key="message.zoneWizard.enable.local.storage"/>',
-'label.edit.tags': '<fmt:message key="label.edit.tags"/>',
-'label.local.storage.enabled': '<fmt:message key="label.local.storage.enabled"/>',
-'label.tier.details': '<fmt:message key="label.tier.details"/>',
-'label.action.enable.physical.network': '<fmt:message key="label.action.enable.physical.network"/>',
-'label.action.disable.physical.network': '<fmt:message key="label.action.disable.physical.network"/>',
-'message.action.enable.physical.network': '<fmt:message key="message.action.enable.physical.network"/>',
-'message.action.disable.physical.network': '<fmt:message key="message.action.disable.physical.network"/>',
-'message.configure.all.traffic.types': '<fmt:message key="message.configure.all.traffic.types"/>',
-'label.ipaddress': '<fmt:message key="label.ipaddress"/>',
-'label.vcdcname': '<fmt:message key="label.vcdcname"/>',
-'label.vcipaddress': '<fmt:message key="label.vcipaddress"/>',
-'label.vsmctrlvlanid': '<fmt:message key="label.vsmctrlvlanid"/>',
-'label.vsmpktvlanid': '<fmt:message key="label.vsmpktvlanid"/>',
-'label.vsmstoragevlanid': '<fmt:message key="label.vsmstoragevlanid"/>',
-'message.specify.url': '<fmt:message key="message.specify.url"/>',
-'label.select.instance.to.attach.volume.to': '<fmt:message key="label.select.instance.to.attach.volume.to"/>',
-'label.upload': '<fmt:message key="label.upload"/>',
-'label.upload.volume': '<fmt:message key="label.upload.volume"/>',
-'label.virtual.routers': '<fmt:message key="label.virtual.routers"/>',
-'label.primary.storage.count': '<fmt:message key="label.primary.storage.count"/>',
-'label.secondary.storage.count': '<fmt:message key="label.secondary.storage.count"/>',
-'label.number.of.system.vms': '<fmt:message key="label.number.of.system.vms"/>',
-'label.number.of.virtual.routers': '<fmt:message key="label.number.of.virtual.routers"/>',
-'label.max.networks': '<fmt:message key="label.max.networks"/>',
-'label.latest.events': '<fmt:message key="label.latest.events"/>',
-'state.Enabled': '<fmt:message key="state.Enabled"/>',
-'label.system.wide.capacity': '<fmt:message key="label.system.wide.capacity"/>',
-'label.management': '<fmt:message key="label.management"/>',
-'label.management.ips': '<fmt:message key="label.management.ips"/>',
-'label.guest': '<fmt:message key="label.guest"/>',
-'label.network.service.providers': '<fmt:message key="label.network.service.providers"/>',
-'message.launch.zone': '<fmt:message key="message.launch.zone"/>',
-'label.compute.offering': '<fmt:message key="label.compute.offering"/>',
-'label.add.compute.offering': '<fmt:message key="label.add.compute.offering"/>',
-'label.compute.offerings': '<fmt:message key="label.compute.offerings"/>',
-'label.select.offering': '<fmt:message key="label.select.offering"/>',
-'label.menu.infrastructure': '<fmt:message key="label.menu.infrastructure"/>',
-'label.sticky.domain': '<fmt:message key="label.sticky.domain"/>',
-'label.sticky.postonly': '<fmt:message key="label.sticky.postonly"/>',
-'label.sticky.indirect': '<fmt:message key="label.sticky.indirect"/>',
-'label.sticky.nocache': '<fmt:message key="label.sticky.nocache"/>',
-'label.sticky.prefix': '<fmt:message key="label.sticky.prefix"/>',
-'label.sticky.request-learn': '<fmt:message key="label.sticky.request-learn"/>',
-'label.sticky.holdtime': '<fmt:message key="label.sticky.holdtime"/>',
-'label.sticky.length': '<fmt:message key="label.sticky.length"/>',
-'label.sticky.mode': '<fmt:message key="label.sticky.mode"/>',
-'label.sticky.cookie-name': '<fmt:message key="label.sticky.cookie-name"/>',
-'label.sticky.expire': '<fmt:message key="label.sticky.expire"/>',
-'label.sticky.tablesize': '<fmt:message key="label.sticky.tablesize"/>',
-'state.Migrating': '<fmt:message key="state.Migrating"/>',
-'state.Allocating': '<fmt:message key="state.Allocating"/>',
-'label.total.of.ip': '<fmt:message key="label.total.of.ip"/>',
-'state.Stopping': '<fmt:message key="state.Stopping"/>',
-'message.add.load.balancer.under.ip': '<fmt:message key="message.add.load.balancer.under.ip"/>',
-'message.select.instance': '<fmt:message key="message.select.instance"/>',
-'label.select': '<fmt:message key="label.select"/>',
-'label.select.vm.for.static.nat': '<fmt:message key="label.select.vm.for.static.nat"/>',
-'label.select.instance': '<fmt:message key="label.select.instance"/>',
-'label.nat.port.range': '<fmt:message key="label.nat.port.range"/>',
-'label.static.nat.vm.details': '<fmt:message key="label.static.nat.vm.details"/>',
-'label.edit.lb.rule': '<fmt:message key="label.edit.lb.rule"/>',
-'message.migrate.instance.to.host': '<fmt:message key="message.migrate.instance.to.host"/>',
-'label.migrate.instance.to.host': '<fmt:message key="label.migrate.instance.to.host"/>',
-'message.migrate.instance.to.ps': '<fmt:message key="message.migrate.instance.to.ps"/>',
-'label.migrate.instance.to.ps': '<fmt:message key="label.migrate.instance.to.ps"/>',
-'label.corrections.saved': '<fmt:message key="label.corrections.saved"/>',
-'message.installWizard.copy.whatIsSecondaryStorage': '<fmt:message key="message.installWizard.copy.whatIsSecondaryStorage"/>',
-'message.installWizard.copy.whatIsPrimaryStorage': '<fmt:message key="message.installWizard.copy.whatIsPrimaryStorage"/>',
-'message.installWizard.copy.whatIsAHost': '<fmt:message key="message.installWizard.copy.whatIsAHost"/>',
-'message.installWizard.copy.whatIsACluster': '<fmt:message key="message.installWizard.copy.whatIsACluster"/>',
-'message.installWizard.copy.whatIsACluster': '<fmt:message key="message.installWizard.copy.whatIsACluster"/>',
-'message.installWizard.copy.whatIsAPod': '<fmt:message key="message.installWizard.copy.whatIsAPod"/>',
-'message.installWizard.copy.whatIsAZone': '<fmt:message key="message.installWizard.copy.whatIsAZone"/>',
-'message.installWizard.copy.whatIsCloudStack': '<fmt:message key="message.installWizard.copy.whatIsCloudStack"/>',
-'message.installWizard.tooltip.addSecondaryStorage.path': '<fmt:message key="message.installWizard.tooltip.addSecondaryStorage.path"/>',
-'message.installWizard.tooltip.addSecondaryStorage.nfsServer': '<fmt:message key="message.installWizard.tooltip.addSecondaryStorage.nfsServer"/>',
-'message.installWizard.tooltip.addPrimaryStorage.path': '<fmt:message key="message.installWizard.tooltip.addPrimaryStorage.path"/>',
-'message.installWizard.tooltip.addPrimaryStorage.server': '<fmt:message key="message.installWizard.tooltip.addPrimaryStorage.server"/>',
-'message.installWizard.tooltip.addPrimaryStorage.name': '<fmt:message key="message.installWizard.tooltip.addPrimaryStorage.name"/>',
-'message.installWizard.tooltip.addHost.password': '<fmt:message key="message.installWizard.tooltip.addHost.password"/>',
-'message.installWizard.tooltip.addHost.username': '<fmt:message key="message.installWizard.tooltip.addHost.username"/>',
-'message.installWizard.tooltip.addHost.hostname': '<fmt:message key="message.installWizard.tooltip.addHost.hostname"/>',
-'message.installWizard.tooltip.addCluster.name': '<fmt:message key="message.installWizard.tooltip.addCluster.name"/>',
-'message.installWizard.tooltip.addPod.reservedSystemEndIp': '<fmt:message key="message.installWizard.tooltip.addPod.reservedSystemEndIp"/>',
-'message.installWizard.tooltip.addPod.reservedSystemStartIp': '<fmt:message key="message.installWizard.tooltip.addPod.reservedSystemStartIp"/>',
-'message.installWizard.tooltip.addPod.reservedSystemNetmask': '<fmt:message key="message.installWizard.tooltip.addPod.reservedSystemNetmask"/>',
-'message.installWizard.tooltip.addPod.reservedSystemGateway': '<fmt:message key="message.installWizard.tooltip.addPod.reservedSystemGateway"/>',
-'message.installWizard.tooltip.addPod.name': '<fmt:message key="message.installWizard.tooltip.addPod.name"/>',
-'message.installWizard.tooltip.configureGuestTraffic.guestEndIp': '<fmt:message key="message.installWizard.tooltip.configureGuestTraffic.guestEndIp"/>',
-'message.installWizard.tooltip.configureGuestTraffic.guestStartIp': '<fmt:message key="message.installWizard.tooltip.configureGuestTraffic.guestStartIp"/>',
-'message.installWizard.tooltip.configureGuestTraffic.guestNetmask': '<fmt:message key="message.installWizard.tooltip.configureGuestTraffic.guestNetmask"/>',
-'message.installWizard.tooltip.configureGuestTraffic.guestGateway': '<fmt:message key="message.installWizard.tooltip.configureGuestTraffic.guestGateway"/>',
-'message.installWizard.tooltip.configureGuestTraffic.description': '<fmt:message key="message.installWizard.tooltip.configureGuestTraffic.description"/>',
-'message.installWizard.tooltip.configureGuestTraffic.name': '<fmt:message key="message.installWizard.tooltip.configureGuestTraffic.name"/>',
-'message.installWizard.tooltip.addZone.internaldns2': '<fmt:message key="message.installWizard.tooltip.addZone.internaldns2"/>',
-'message.installWizard.tooltip.addZone.internaldns1': '<fmt:message key="message.installWizard.tooltip.addZone.internaldns1"/>',
-'message.installWizard.tooltip.addZone.dns2': '<fmt:message key="message.installWizard.tooltip.addZone.dns2"/>',
-'message.installWizard.tooltip.addZone.dns1': '<fmt:message key="message.installWizard.tooltip.addZone.dns1"/>',
-'message.installWizard.tooltip.addZone.name': '<fmt:message key="message.installWizard.tooltip.addZone.name"/>',
-'label.launch': '<fmt:message key="label.launch"/>',
-'label.hints': '<fmt:message key="label.hints"/>',
-'label.continue': '<fmt:message key="label.continue"/>',
-'message.setup.successful': '<fmt:message key="message.setup.successful"/>',
-'label.may.continue': '<fmt:message key="label.may.continue"/>',
-'error.installWizard.message': '<fmt:message key="error.installWizard.message"/>',
-'message.installWizard.now.building': '<fmt:message key="message.installWizard.now.building"/>',
-'message.installWizard.click.retry': '<fmt:message key="message.installWizard.click.retry"/>',
-'label.installWizard.click.launch': '<fmt:message key="label.installWizard.click.launch"/>',
-'label.congratulations': '<fmt:message key="label.congratulations"/>',
-'label.installWizard.addSecondaryStorageIntro.subtitle': '<fmt:message key="label.installWizard.addSecondaryStorageIntro.subtitle"/>',
-'label.installWizard.addSecondaryStorageIntro.title': '<fmt:message key="label.installWizard.addSecondaryStorageIntro.title"/>',
-'label.installWizard.addPrimaryStorageIntro.subtitle': '<fmt:message key="label.installWizard.addPrimaryStorageIntro.subtitle"/>',
-'label.installWizard.addPrimaryStorageIntro.title': '<fmt:message key="label.installWizard.addPrimaryStorageIntro.title"/>',
-'label.installWizard.addHostIntro.subtitle': '<fmt:message key="label.installWizard.addHostIntro.subtitle"/>',
-'label.installWizard.addHostIntro.title': '<fmt:message key="label.installWizard.addHostIntro.title"/>',
-'label.installWizard.addClusterIntro.subtitle': '<fmt:message key="label.installWizard.addClusterIntro.subtitle"/>',
-'label.installWizard.addClusterIntro.title': '<fmt:message key="label.installWizard.addClusterIntro.title"/>',
-'label.installWizard.addPodIntro.subtitle': '<fmt:message key="label.installWizard.addPodIntro.subtitle"/>',
-'label.installWizard.addPodIntro.title': '<fmt:message key="label.installWizard.addPodIntro.title"/>',
-'label.installWizard.addZone.title': '<fmt:message key="label.installWizard.addZone.title"/>',
-'error.password.not.match': '<fmt:message key="error.password.not.match"/>',
-'label.installWizard.addZoneIntro.subtitle': '<fmt:message key="label.installWizard.addZoneIntro.subtitle"/>',
-'label.installWizard.addZoneIntro.title': '<fmt:message key="label.installWizard.addZoneIntro.title"/>',
-'label.confirm.password': '<fmt:message key="label.confirm.password"/>',
-'message.change.password': '<fmt:message key="message.change.password"/>',
-'label.save.and.continue': '<fmt:message key="label.save.and.continue"/>',
-'label.continue.basic.install': '<fmt:message key="label.continue.basic.install"/>',
-'label.skip.guide': '<fmt:message key="label.skip.guide"/>',
-'label.introduction.to.cloudstack': '<fmt:message key="label.introduction.to.cloudstack"/>',
-'label.what.is.cloudstack': '<fmt:message key="label.what.is.cloudstack"/>',
-'label.installWizard.subtitle': '<fmt:message key="label.installWizard.subtitle"/>',
-'label.installWizard.title': '<fmt:message key="label.installWizard.title"/>',
-'label.agree': '<fmt:message key="label.agree"/>',
-'label.port.forwarding.policies': '<fmt:message key="label.port.forwarding.policies"/>',
-'label.load.balancing.policies': '<fmt:message key="label.load.balancing.policies"/>',
-'label.networking.and.security': '<fmt:message key="label.networking.and.security"/>',
-'label.bandwidth': '<fmt:message key="label.bandwidth"/>',
-'label.virtual.machines': '<fmt:message key="label.virtual.machines"/>',
-'label.compute.and.storage': '<fmt:message key="label.compute.and.storage"/>',
-'label.task.completed': '<fmt:message key="label.task.completed"/>',
-'label.update.project.resources': '<fmt:message key="label.update.project.resources"/>',
-'label.remove.project.account': '<fmt:message key="label.remove.project.account"/>',
-'label.item.listing': '<fmt:message key="label.item.listing"/>',
-'message.select.item': '<fmt:message key="message.select.item"/>',
-'label.removing': '<fmt:message key="label.removing"/>',
-'label.invite': '<fmt:message key="label.invite"/>',
-'label.project.dashboard': '<fmt:message key="label.project.dashboard"/>',
-'label.add.by': '<fmt:message key="label.add.by"/>',
-'label.max.vms': '<fmt:message key="label.max.vms"/>',
-'label.max.public.ips': '<fmt:message key="label.max.public.ips"/>',
-'label.max.volumes': '<fmt:message key="label.max.volumes"/>',
-'label.max.snapshots': '<fmt:message key="label.max.snapshots"/>',
-'label.max.templates': '<fmt:message key="label.max.templates"/>',
-'label.max.vpcs': '<fmt:message key="label.max.vpcs"/>',
-'label.remind.later': '<fmt:message key="label.remind.later"/>',
-'label.invited.accounts': '<fmt:message key="label.invited.accounts"/>',
-'label.add.accounts.to': '<fmt:message key="label.add.accounts.to"/>',
-'label.invite.to': '<fmt:message key="label.invite.to"/>',
-'label.add.accounts': '<fmt:message key="label.add.accounts"/>',
-'label.project.name': '<fmt:message key="label.project.name"/>',
-'label.create.project': '<fmt:message key="label.create.project"/>',
-'label.networks': '<fmt:message key="label.networks"/>',
-'label.launch.vm': '<fmt:message key="label.launch.vm"/>',
-'label.new.vm': '<fmt:message key="label.new.vm"/>',
-'label.previous': '<fmt:message key="label.previous"/>',
-'label.add.to.group': '<fmt:message key="label.add.to.group"/>',
-'message.vm.review.launch': '<fmt:message key="message.vm.review.launch"/>',
-'label.new': '<fmt:message key="label.new"/>',
-'message.select.security.groups': '<fmt:message key="message.select.security.groups"/>',
-'message.please.proceed': '<fmt:message key="message.please.proceed"/>',
-'message.please.select.networks': '<fmt:message key="message.please.select.networks"/>',
-'message.zone.no.network.selection': '<fmt:message key="message.zone.no.network.selection"/>',
-'label.no.thanks': '<fmt:message key="label.no.thanks"/>',
-'label.my.templates': '<fmt:message key="label.my.templates"/>',
-'message.select.iso': '<fmt:message key="message.select.iso"/>',
-'message.select.template': '<fmt:message key="message.select.template"/>',
-'message.template.desc': '<fmt:message key="message.template.desc"/>',
-'message.iso.desc': '<fmt:message key="message.iso.desc"/>',
-'label.select.iso.or.template': '<fmt:message key="label.select.iso.or.template"/>',
-'message.select.a.zone': '<fmt:message key="message.select.a.zone"/>',
-'label.select.a.zone': '<fmt:message key="label.select.a.zone"/>',
-'label.review': '<fmt:message key="label.review"/>',
-'label.select.a.template': '<fmt:message key="label.select.a.template"/>',
-'label.setup': '<fmt:message key="label.setup"/>',
-'state.Allocated': '<fmt:message key="state.Allocated"/>',
-'changed.item.properties': '<fmt:message key="changed.item.properties"/>',
-'label.apply': '<fmt:message key="label.apply"/>',
-'label.default': '<fmt:message key="label.default"/>',
-'label.viewing': '<fmt:message key="label.viewing"/>',
-'label.drag.new.position': '<fmt:message key="label.drag.new.position"/>',
-'label.move.down.row': '<fmt:message key="label.move.down.row"/>',
-'label.move.up.row': '<fmt:message key="label.move.up.row"/>',
-'label.move.to.top': '<fmt:message key="label.move.to.top"/>',
-'label.move.to.bottom': '<fmt:message key="label.move.to.bottom"/>',
-'label.order': '<fmt:message key="label.order"/>',
-'label.no.data': '<fmt:message key="label.no.data"/>',
-'label.change.value': '<fmt:message key="label.change.value"/>',
-'label.clear.list': '<fmt:message key="label.clear.list"/>',
-'label.add.vm': '<fmt:message key="label.add.vm"/>',
-'label.full.path': '<fmt:message key="label.full.path"/>',
-'message.add.domain': '<fmt:message key="message.add.domain"/>',
-'message.delete.user': '<fmt:message key="message.delete.user"/>',
-'message.enable.user': '<fmt:message key="message.enable.user"/>',
-'message.disable.user': '<fmt:message key="message.disable.user"/>',
-'message.generate.keys': '<fmt:message key="message.generate.keys"/>',
-'message.update.resource.count': '<fmt:message key="message.update.resource.count"/>',
-'message.edit.account': '<fmt:message key="message.edit.account"/>',
-'label.totoal.of.ip': '<fmt:message key="label.totoal.of.ip"/>',
-'label.total.of.vm': '<fmt:message key="label.total.of.vm"/>',
-'state.enabled': '<fmt:message key="state.enabled"/>',
-'message.action.download.iso': '<fmt:message key="message.action.download.iso"/>',
-'message.action.download.template': '<fmt:message key="message.action.download.template"/>',
-'label.destination.zone': '<fmt:message key="label.destination.zone"/>',
-'label.nic.adapter.type': '<fmt:message key="label.nic.adapter.type"/>',
-'label.keyboard.type': '<fmt:message key="label.keyboard.type"/>',
-'label.root.disk.controller': '<fmt:message key="label.root.disk.controller"/>',
-'label.community': '<fmt:message key="label.community"/>',
-'label.remove.egress.rule': '<fmt:message key="label.remove.egress.rule"/>',
-'label.add.egress.rule': '<fmt:message key="label.add.egress.rule"/>',
-'label.egress.rule': '<fmt:message key="label.egress.rule"/>',
-'label.remove.ingress.rule': '<fmt:message key="label.remove.ingress.rule"/>',
-'label.delete.vpn.user': '<fmt:message key="label.delete.vpn.user"/>',
-'label.add.vpn.user': '<fmt:message key="label.add.vpn.user"/>',
-'label.remove.pf': '<fmt:message key="label.remove.pf"/>',
-'label.remove.vm.from.lb': '<fmt:message key="label.remove.vm.from.lb"/>',
-'label.add.vms.to.lb': '<fmt:message key="label.add.vms.to.lb"/>',
-'label.remove.static.nat.rule': '<fmt:message key="label.remove.static.nat.rule"/>',
-'label.remove.rule': '<fmt:message key="label.remove.rule"/>',
-'label.add.static.nat.rule': '<fmt:message key="label.add.static.nat.rule"/>',
-'label.add.rule': '<fmt:message key="label.add.rule"/>',
-'label.configuration': '<fmt:message key="label.configuration"/>',
-'message.disable.vpn': '<fmt:message key="message.disable.vpn"/>',
-'label.disable.vpn': '<fmt:message key="label.disable.vpn"/>',
-'message.enable.vpn': '<fmt:message key="message.enable.vpn"/>',
-'label.enable.vpn': '<fmt:message key="label.enable.vpn"/>',
-'message.acquire.new.ip': '<fmt:message key="message.acquire.new.ip"/>',
-'label.elastic': '<fmt:message key="label.elastic"/>',
-'label.my.network': '<fmt:message key="label.my.network" />',
-'label.add.vms': '<fmt:message key="label.add.vms" />',
-'label.configure': '<fmt:message key="label.configure" />',
-'label.stickiness': '<fmt:message key="label.stickiness" />',
-'label.source': '<fmt:message key="label.source" />',
-'label.least.connections': '<fmt:message key="label.least.connections" />',
-'label.round.robin': '<fmt:message key="label.round.robin" />',
-'label.network.domain.text': '<fmt:message key="label.network.domain.text" />',
-'label.restart.required': '<fmt:message key="label.restart.required" />',
-'label.clean.up': '<fmt:message key="label.clean.up" />',
-'message.restart.network': '<fmt:message key="message.restart.network" />',
-'label.restart.network': '<fmt:message key="label.restart.network" />',
-'label.edit.network.details': '<fmt:message key="label.edit.network.details" />',
-'message.add.guest.network': '<fmt:message key="message.add.guest.network" />',
-'label.add.guest.network': '<fmt:message key="label.add.guest.network" />',
-'label.guest.networks': '<fmt:message key="label.guest.networks" />',
-'message.ip.address.changed': '<fmt:message key="message.ip.address.changed" />',
-'state.BackingUp': '<fmt:message key="state.BackingUp" />',
-'state.BackedUp': '<fmt:message key="state.BackedUp" />',
-'label.done': '<fmt:message key="label.done" />',
-'label.vm.name': '<fmt:message key="label.vm.name" />',
-'message.migrate.volume': '<fmt:message key="message.migrate.volume" />',
-'label.migrate.volume': '<fmt:message key="label.migrate.volume" />',
-'message.create.template': '<fmt:message key="message.create.template" />',
-'label.create.template': '<fmt:message key="label.create.template" />',
-'message.download.volume.confirm': '<fmt:message key="message.download.volume.confirm" />',
-'message.detach.disk': '<fmt:message key="message.detach.disk" />',
-'state.ready': '<fmt:message key="state.ready" />',
-'state.Ready': '<fmt:message key="state.Ready" />',
-'label.vm.display.name': '<fmt:message key="label.vm.display.name" />',
-'label.select-view': '<fmt:message key="label.select-view" />',
-'label.local.storage': '<fmt:message key="label.local.storage" />',
-'label.direct.ips': '<fmt:message key="label.direct.ips" />',
-'label.view.all': '<fmt:message key="label.view.all" />',
-'label.fetch.latest': '<fmt:message key="label.fetch.latest" />',
-'label.zone.details': '<fmt:message key="label.zone.details" />',
-'message.alert.state.detected': '<fmt:message key="message.alert.state.detected" />',
-'state.Starting': '<fmt:message key="state.Starting" />',
-'state.Expunging': '<fmt:message key="state.Expunging" />',
-'state.Creating': '<fmt:message key="state.Creating" />',
-'message.decline.invitation': '<fmt:message key="message.decline.invitation" />',
-'label.decline.invitation': '<fmt:message key="label.decline.invitation" />',
-'message.confirm.join.project': '<fmt:message key="message.confirm.join.project" />',
-'message.join.project': '<fmt:message key="message.join.project" />',
-'label.accept.project.invitation': '<fmt:message key="label.accept.project.invitation" />',
-'label.token': '<fmt:message key="label.token" />',
-'label.project.id': '<fmt:message key="label.project.id" />',
-'message.enter.token': '<fmt:message key="message.enter.token" />',
-'label.enter.token': '<fmt:message key="label.enter.token" />',
-'state.Accepted': '<fmt:message key="state.Accepted" />',
-'state.Pending': '<fmt:message key="state.Pending" />',
-'state.Completed': '<fmt:message key="state.Completed" />',
-'state.Declined': '<fmt:message key="state.Declined" />',
-'label.project': '<fmt:message key="label.project" />',
-'label.invitations': '<fmt:message key="label.invitations" />',
-'label.delete.project': '<fmt:message key="label.delete.project" />',
-'message.delete.project': '<fmt:message key="message.delete.project" />',
-'message.activate.project': '<fmt:message key="message.activate.project" />',
-'label.activate.project': '<fmt:message key="label.activate.project" />',
-'label.suspend.project': '<fmt:message key="label.suspend.project" />',
-'message.suspend.project': '<fmt:message key="message.suspend.project" />',
-'state.Suspended': '<fmt:message key="state.Suspended" />',
-'label.edit.project.details': '<fmt:message key="label.edit.project.details" />',
-'label.new.project': '<fmt:message key="label.new.project" />',
-'state.Active': '<fmt:message key="state.Active" />',
-'state.Disabled': '<fmt:message key="state.Disabled" />',
-'label.projects': '<fmt:message key="label.projects" />',
-'label.make.project.owner': '<fmt:message key="label.make.project.owner" />',
-'label.remove.project.account': '<fmt:message key="label.remove.project.account" />',
-'message.project.invite.sent': '<fmt:message key="message.project.invite.sent" />',
-'label.add.account.to.project': '<fmt:message key="label.add.account.to.project" />',
-'label.revoke.project.invite': '<fmt:message key="label.revoke.project.invite" />',
-'label.project.invite': '<fmt:message key="label.project.invite" />',
-'label.select.project': '<fmt:message key="label.select.project" />',
-'message.no.projects': '<fmt:message key="message.no.projects" />',
-'message.no.projects.adminOnly': '<fmt:message key="message.no.projects.adminOnly" />',
-'message.pending.projects.1': '<fmt:message key="message.pending.projects.1" />',
-'message.pending.projects.2': '<fmt:message key="message.pending.projects.2" />',
-'message.instanceWizard.noTemplates': '<fmt:message key="message.instanceWizard.noTemplates" />',
-'label.view': '<fmt:message key="label.view" />',
-'instances.actions.reboot.label': '<fmt:message key="instances.actions.reboot.label" />',
-'label.filterBy': '<fmt:message key="label.filterBy" />',
-'label.ok': '<fmt:message key="label.ok" />',
-'notification.reboot.instance': '<fmt:message key="notification.reboot.instance" />',
-'notification.start.instance': '<fmt:message key="notification.start.instance" />',
-'notification.stop.instance': '<fmt:message key="notification.stop.instance" />',
-'label.display.name': '<fmt:message key="label.display.name" />',
-'label.zone.name': '<fmt:message key="label.zone.name" />',
-'ui.listView.filters.all': '<fmt:message key="ui.listView.filters.all" />',
-'ui.listView.filters.mine': '<fmt:message key="ui.listView.filters.mine" />',
-'state.Running': '<fmt:message key="state.Running" />',
-'state.Stopped': '<fmt:message key="state.Stopped" />',
-'state.Destroyed': '<fmt:message key="state.Destroyed" />',
-'state.Error': '<fmt:message key="state.Error" />',
-'message.reset.password.warning.notPasswordEnabled': '<fmt:message key="message.reset.password.warning.notPasswordEnabled" />',
-'message.reset.password.warning.notStopped': '<fmt:message key="message.reset.password.warning.notStopped" />',
-'label.notifications': '<fmt:message key="label.notifications" />',
-'label.default.view': '<fmt:message key="label.default.view" />',
-'label.project.view': '<fmt:message key="label.project.view" />',
-'label.action.migrate.router': '<fmt:message key="label.action.migrate.router" />',
-'label.action.migrate.router.processing': '<fmt:message key="label.action.migrate.router.processing" />',
-'message.migrate.router.confirm': '<fmt:message key="message.migrate.router.confirm" />',
-'label.migrate.router.to': '<fmt:message key="label.migrate.router.to" />',
-'label.action.migrate.systemvm': '<fmt:message key="label.action.migrate.systemvm" />',
-'label.action.migrate.systemvm.processing': '<fmt:message key="label.action.migrate.systemvm.processing" />',
-'message.migrate.systemvm.confirm': '<fmt:message key="message.migrate.systemvm.confirm" />',
-'label.migrate.systemvm.to': '<fmt:message key="label.migrate.systemvm.to" />',
-'mode': '<fmt:message key="mode" />',
-'side.by.side': '<fmt:message key="side.by.side" />',
-'inline': '<fmt:message key="inline" />',
+'changed.item.properties': '<fmt:message key="changed.item.properties" />',
+'confirm.enable.s3': '<fmt:message key="confirm.enable.s3" />',
+'confirm.enable.swift': '<fmt:message key="confirm.enable.swift" />',
+'error.could.not.enable.zone': '<fmt:message key="error.could.not.enable.zone" />',
+'error.installWizard.message': '<fmt:message key="error.installWizard.message" />',
+'error.invalid.username.password': '<fmt:message key="error.invalid.username.password" />',
+'error.login': '<fmt:message key="error.login" />',
+'error.menu.select': '<fmt:message key="error.menu.select" />',
+'error.mgmt.server.inaccessible': '<fmt:message key="error.mgmt.server.inaccessible" />',
+'error.password.not.match': '<fmt:message key="error.password.not.match" />',
+'error.please.specify.physical.network.tags': '<fmt:message key="error.please.specify.physical.network.tags" />',
+'error.session.expired': '<fmt:message key="error.session.expired" />',
+'error.something.went.wrong.please.correct.the.following': '<fmt:message key="error.something.went.wrong.please.correct.the.following" />',
+'error.unable.to.reach.management.server': '<fmt:message key="error.unable.to.reach.management.server" />',
+'error.unresolved.internet.name': '<fmt:message key="error.unresolved.internet.name" />',
'extractable': '<fmt:message key="extractable" />',
-'label.ocfs2': '<fmt:message key="label.ocfs2" />',
-'label.action.edit.host': '<fmt:message key="label.action.edit.host" />',
-'network.rate': '<fmt:message key="network.rate" />',
-'ICMP.type': '<fmt:message key="ICMP.type" />',
-'ICMP.code': '<fmt:message key="ICMP.code" />',
-'image.directory': '<fmt:message key="image.directory" />',
-'label.action.create.template.from.vm': '<fmt:message key="label.action.create.template.from.vm" />',
-'label.action.create.template.from.volume': '<fmt:message key="label.action.create.template.from.volume" />',
-'message.vm.create.template.confirm': '<fmt:message key="message.vm.create.template.confirm" />',
-'label.action.manage.cluster': '<fmt:message key="label.action.manage.cluster" />',
-'message.action.manage.cluster': '<fmt:message key="message.action.manage.cluster" />',
-'label.action.manage.cluster.processing': '<fmt:message key="label.action.manage.cluster.processing" />',
-'label.action.unmanage.cluster': '<fmt:message key="label.action.unmanage.cluster" />',
-'message.action.unmanage.cluster': '<fmt:message key="message.action.unmanage.cluster" />',
-'label.action.unmanage.cluster.processing': '<fmt:message key="label.action.unmanage.cluster.processing" />',
-'label.allocation.state': '<fmt:message key="label.allocation.state" />',
-'managed.state': '<fmt:message key="managed.state" />',
-'label.default.use': '<fmt:message key="label.default.use" />',
-'label.host.tags': '<fmt:message key="label.host.tags" />',
-'label.cidr': '<fmt:message key="label.cidr" />',
-'label.cidr.list': '<fmt:message key="label.cidr.list" />',
-'label.storage.tags': '<fmt:message key="label.storage.tags" />',
-'label.redundant.router': '<fmt:message key="label.redundant.router" />',
-'label.is.redundant.router': '<fmt:message key="label.is.redundant.router" />',
-'force.delete': '<fmt:message key="force.delete" />',
'force.delete.domain.warning': '<fmt:message key="force.delete.domain.warning" />',
+'force.delete': '<fmt:message key="force.delete" />',
'force.remove': '<fmt:message key="force.remove" />',
'force.remove.host.warning': '<fmt:message key="force.remove.host.warning" />',
'force.stop': '<fmt:message key="force.stop" />',
'force.stop.instance.warning': '<fmt:message key="force.stop.instance.warning" />',
-'label.PreSetup': '<fmt:message key="label.PreSetup" />',
-'label.SR.name ': '<fmt:message key="label.SR.name " />',
-'label.SharedMountPoint': '<fmt:message key="label.SharedMountPoint" />',
-'label.clvm': '<fmt:message key="label.clvm" />',
-'label.rbd': '<fmt:message key="label.rbd" />',
-'label.volgroup': '<fmt:message key="label.volgroup" />',
-'label.VMFS.datastore': '<fmt:message key="label.VMFS.datastore" />',
-'label.network.device': '<fmt:message key="label.network.device" />',
-'label.add.network.device': '<fmt:message key="label.add.network.device" />',
-'label.network.device.type': '<fmt:message key="label.network.device.type" />',
-'label.DHCP.server.type': '<fmt:message key="label.DHCP.server.type" />',
-'label.Pxe.server.type': '<fmt:message key="label.Pxe.server.type" />',
-'label.PING.storage.IP': '<fmt:message key="label.PING.storage.IP" />',
-'label.PING.dir': '<fmt:message key="label.PING.dir" />',
-'label.TFTP.dir': '<fmt:message key="label.TFTP.dir" />',
-'label.PING.CIFS.username': '<fmt:message key="label.PING.CIFS.username" />',
-'label.PING.CIFS.password': '<fmt:message key="label.PING.CIFS.password" />',
-'label.CPU.cap': '<fmt:message key="label.CPU.cap" />',
-'label.action.enable.zone': '<fmt:message key="label.action.enable.zone" />',
-'label.action.enable.zone.processing': '<fmt:message key="label.action.enable.zone.processing" />',
-'message.action.enable.zone': '<fmt:message key="message.action.enable.zone" />',
-'label.action.disable.zone': '<fmt:message key="label.action.disable.zone" />',
-'label.action.disable.zone.processing': '<fmt:message key="label.action.disable.zone.processing" />',
-'message.action.disable.zone': '<fmt:message key="message.action.disable.zone" />',
-'label.action.enable.pod': '<fmt:message key="label.action.enable.pod" />',
-'label.action.enable.pod.processing': '<fmt:message key="label.action.enable.pod.processing" />',
-'message.action.enable.pod': '<fmt:message key="message.action.enable.pod" />',
-'label.action.disable.pod': '<fmt:message key="label.action.disable.pod" />',
-'label.action.disable.pod.processing': '<fmt:message key="label.action.disable.pod.processing" />',
-'message.action.disable.pod': '<fmt:message key="message.action.disable.pod" />',
-'label.action.enable.cluster': '<fmt:message key="label.action.enable.cluster" />',
-'label.action.enable.cluster.processing': '<fmt:message key="label.action.enable.cluster.processing" />',
-'message.action.enable.cluster': '<fmt:message key="message.action.enable.cluster" />',
-'label.action.disable.cluster': '<fmt:message key="label.action.disable.cluster" />',
-'label.action.disable.cluster.processing': '<fmt:message key="label.action.disable.cluster.processing" />',
-'message.action.disable.cluster': '<fmt:message key="message.action.disable.cluster" />',
+'ICMP.code': '<fmt:message key="ICMP.code" />',
+'ICMP.type': '<fmt:message key="ICMP.type" />',
+'image.directory': '<fmt:message key="image.directory" />',
+'inline': '<fmt:message key="inline" />',
+'instances.actions.reboot.label': '<fmt:message key="instances.actions.reboot.label" />',
+'label.accept.project.invitation': '<fmt:message key="label.accept.project.invitation" />',
+'label.account.and.security.group': '<fmt:message key="label.account.and.security.group" />',
+'label.account': '<fmt:message key="label.account" />',
'label.account.id': '<fmt:message key="label.account.id" />',
'label.account.name': '<fmt:message key="label.account.name" />',
-'label.account.specific': '<fmt:message key="label.account.specific" />',
-'label.account': '<fmt:message key="label.account" />',
'label.accounts': '<fmt:message key="label.accounts" />',
+'label.account.specific': '<fmt:message key="label.account.specific" />',
'label.acquire.new.ip': '<fmt:message key="label.acquire.new.ip" />',
-'label.show.ingress.rule': '<fmt:message key="label.show.ingress.rule" />',
-'label.hide.ingress.rule': '<fmt:message key="label.hide.ingress.rule" />',
-'label.action.attach.disk.processing': '<fmt:message key="label.action.attach.disk.processing" />',
'label.action.attach.disk': '<fmt:message key="label.action.attach.disk" />',
-'label.action.attach.iso.processing': '<fmt:message key="label.action.attach.iso.processing" />',
+'label.action.attach.disk.processing': '<fmt:message key="label.action.attach.disk.processing" />',
'label.action.attach.iso': '<fmt:message key="label.action.attach.iso" />',
-'label.action.cancel.maintenance.mode.processing': '<fmt:message key="label.action.cancel.maintenance.mode.processing" />',
+'label.action.attach.iso.processing': '<fmt:message key="label.action.attach.iso.processing" />',
'label.action.cancel.maintenance.mode': '<fmt:message key="label.action.cancel.maintenance.mode" />',
+'label.action.cancel.maintenance.mode.processing': '<fmt:message key="label.action.cancel.maintenance.mode.processing" />',
'label.action.change.password': '<fmt:message key="label.action.change.password" />',
-'label.action.change.service.processing': '<fmt:message key="label.action.change.service.processing" />',
'label.action.change.service': '<fmt:message key="label.action.change.service" />',
-'label.action.copy.ISO.processing': '<fmt:message key="label.action.copy.ISO.processing" />',
+'label.action.change.service.processing': '<fmt:message key="label.action.change.service.processing" />',
'label.action.copy.ISO': '<fmt:message key="label.action.copy.ISO" />',
-'label.action.copy.template.processing': '<fmt:message key="label.action.copy.template.processing" />',
+'label.action.copy.ISO.processing': '<fmt:message key="label.action.copy.ISO.processing" />',
'label.action.copy.template': '<fmt:message key="label.action.copy.template" />',
-'label.action.create.template.processing': '<fmt:message key="label.action.create.template.processing" />',
+'label.action.copy.template.processing': '<fmt:message key="label.action.copy.template.processing" />',
'label.action.create.template': '<fmt:message key="label.action.create.template" />',
-'label.action.create.vm.processing': '<fmt:message key="label.action.create.vm.processing" />',
+'label.action.create.template.from.vm': '<fmt:message key="label.action.create.template.from.vm" />',
+'label.action.create.template.from.volume': '<fmt:message key="label.action.create.template.from.volume" />',
+'label.action.create.template.processing': '<fmt:message key="label.action.create.template.processing" />',
'label.action.create.vm': '<fmt:message key="label.action.create.vm" />',
-'label.action.create.volume.processing': '<fmt:message key="label.action.create.volume.processing" />',
+'label.action.create.vm.processing': '<fmt:message key="label.action.create.vm.processing" />',
'label.action.create.volume': '<fmt:message key="label.action.create.volume" />',
-'label.action.delete.IP.range.processing': '<fmt:message key="label.action.delete.IP.range.processing" />',
-'label.action.delete.IP.range': '<fmt:message key="label.action.delete.IP.range" />',
-'label.action.delete.ISO.processing': '<fmt:message key="label.action.delete.ISO.processing" />',
-'label.action.delete.ISO': '<fmt:message key="label.action.delete.ISO" />',
-'label.action.delete.account.processing': '<fmt:message key="label.action.delete.account.processing" />',
+'label.action.create.volume.processing': '<fmt:message key="label.action.create.volume.processing" />',
'label.action.delete.account': '<fmt:message key="label.action.delete.account" />',
-'label.action.delete.cluster.processing': '<fmt:message key="label.action.delete.cluster.processing" />',
+'label.action.delete.account.processing': '<fmt:message key="label.action.delete.account.processing" />',
'label.action.delete.cluster': '<fmt:message key="label.action.delete.cluster" />',
-'label.action.delete.disk.offering.processing': '<fmt:message key="label.action.delete.disk.offering.processing" />',
+'label.action.delete.cluster.processing': '<fmt:message key="label.action.delete.cluster.processing" />',
'label.action.delete.disk.offering': '<fmt:message key="label.action.delete.disk.offering" />',
-'label.action.update.resource.count': '<fmt:message key="label.action.update.resource.count" />',
-'label.action.update.resource.count.processing': '<fmt:message key="label.action.update.resource.count.processing" />',
+'label.action.delete.disk.offering.processing': '<fmt:message key="label.action.delete.disk.offering.processing" />',
'label.action.delete.domain': '<fmt:message key="label.action.delete.domain" />',
'label.action.delete.domain.processing': '<fmt:message key="label.action.delete.domain.processing" />',
-'label.action.delete.firewall.processing': '<fmt:message key="label.action.delete.firewall.processing" />',
'label.action.delete.firewall': '<fmt:message key="label.action.delete.firewall" />',
-'label.action.delete.ingress.rule.processing': '<fmt:message key="label.action.delete.ingress.rule.processing" />',
+'label.action.delete.firewall.processing': '<fmt:message key="label.action.delete.firewall.processing" />',
'label.action.delete.ingress.rule': '<fmt:message key="label.action.delete.ingress.rule" />',
-'label.action.delete.load.balancer.processing': '<fmt:message key="label.action.delete.load.balancer.processing" />',
+'label.action.delete.ingress.rule.processing': '<fmt:message key="label.action.delete.ingress.rule.processing" />',
+'label.action.delete.IP.range': '<fmt:message key="label.action.delete.IP.range" />',
+'label.action.delete.IP.range.processing': '<fmt:message key="label.action.delete.IP.range.processing" />',
+'label.action.delete.ISO': '<fmt:message key="label.action.delete.ISO" />',
+'label.action.delete.ISO.processing': '<fmt:message key="label.action.delete.ISO.processing" />',
'label.action.delete.load.balancer': '<fmt:message key="label.action.delete.load.balancer" />',
-'label.action.edit.network.processing': '<fmt:message key="label.action.edit.network.processing" />',
-'label.action.edit.network': '<fmt:message key="label.action.edit.network" />',
-'label.action.delete.network.processing': '<fmt:message key="label.action.delete.network.processing" />',
+'label.action.delete.load.balancer.processing': '<fmt:message key="label.action.delete.load.balancer.processing" />',
'label.action.delete.network': '<fmt:message key="label.action.delete.network" />',
+'label.action.delete.network.processing': '<fmt:message key="label.action.delete.network.processing" />',
'label.action.delete.nexusVswitch': '<fmt:message key="label.action.delete.nexusVswitch" />',
-'label.action.enable.nexusVswitch': '<fmt:message key="label.action.enable.nexusVswitch" />',
-'label.action.disable.nexusVswitch': '<fmt:message key="label.action.disable.nexusVswitch" />',
-'label.action.delete.pod.processing': '<fmt:message key="label.action.delete.pod.processing" />',
+'label.action.delete.physical.network': '<fmt:message key="label.action.delete.physical.network" />',
'label.action.delete.pod': '<fmt:message key="label.action.delete.pod" />',
-'label.action.delete.primary.storage.processing': '<fmt:message key="label.action.delete.primary.storage.processing" />',
+'label.action.delete.pod.processing': '<fmt:message key="label.action.delete.pod.processing" />',
'label.action.delete.primary.storage': '<fmt:message key="label.action.delete.primary.storage" />',
-'label.action.delete.secondary.storage.processing': '<fmt:message key="label.action.delete.secondary.storage.processing" />',
+'label.action.delete.primary.storage.processing': '<fmt:message key="label.action.delete.primary.storage.processing" />',
'label.action.delete.secondary.storage': '<fmt:message key="label.action.delete.secondary.storage" />',
-'label.action.delete.security.group.processing': '<fmt:message key="label.action.delete.security.group.processing" />',
+'label.action.delete.secondary.storage.processing': '<fmt:message key="label.action.delete.secondary.storage.processing" />',
'label.action.delete.security.group': '<fmt:message key="label.action.delete.security.group" />',
-'label.action.delete.service.offering.processing': '<fmt:message key="label.action.delete.service.offering.processing" />',
+'label.action.delete.security.group.processing': '<fmt:message key="label.action.delete.security.group.processing" />',
'label.action.delete.service.offering': '<fmt:message key="label.action.delete.service.offering" />',
-'label.action.delete.snapshot.processing': '<fmt:message key="label.action.delete.snapshot.processing" />',
+'label.action.delete.service.offering.processing': '<fmt:message key="label.action.delete.service.offering.processing" />',
'label.action.delete.snapshot': '<fmt:message key="label.action.delete.snapshot" />',
-'label.action.delete.template.processing': '<fmt:message key="label.action.delete.template.processing" />',
+'label.action.delete.snapshot.processing': '<fmt:message key="label.action.delete.snapshot.processing" />',
+'label.action.delete.system.service.offering': '<fmt:message key="label.action.delete.system.service.offering" />',
'label.action.delete.template': '<fmt:message key="label.action.delete.template" />',
-'label.action.delete.user.processing': '<fmt:message key="label.action.delete.user.processing" />',
+'label.action.delete.template.processing': '<fmt:message key="label.action.delete.template.processing" />',
'label.action.delete.user': '<fmt:message key="label.action.delete.user" />',
-'label.action.delete.volume.processing': '<fmt:message key="label.action.delete.volume.processing" />',
+'label.action.delete.user.processing': '<fmt:message key="label.action.delete.user.processing" />',
'label.action.delete.volume': '<fmt:message key="label.action.delete.volume" />',
-'label.action.delete.zone.processing': '<fmt:message key="label.action.delete.zone.processing" />',
+'label.action.delete.volume.processing': '<fmt:message key="label.action.delete.volume.processing" />',
'label.action.delete.zone': '<fmt:message key="label.action.delete.zone" />',
-'label.action.destroy.instance.processing': '<fmt:message key="label.action.destroy.instance.processing" />',
+'label.action.delete.zone.processing': '<fmt:message key="label.action.delete.zone.processing" />',
'label.action.destroy.instance': '<fmt:message key="label.action.destroy.instance" />',
-'label.action.destroy.systemvm.processing': '<fmt:message key="label.action.destroy.systemvm.processing" />',
+'label.action.destroy.instance.processing': '<fmt:message key="label.action.destroy.instance.processing" />',
'label.action.destroy.systemvm': '<fmt:message key="label.action.destroy.systemvm" />',
-'label.action.detach.disk.processing': '<fmt:message key="label.action.detach.disk.processing" />',
+'label.action.destroy.systemvm.processing': '<fmt:message key="label.action.destroy.systemvm.processing" />',
'label.action.detach.disk': '<fmt:message key="label.action.detach.disk" />',
-'label.action.detach.iso.processing': '<fmt:message key="label.action.detach.iso.processing" />',
+'label.action.detach.disk.processing': '<fmt:message key="label.action.detach.disk.processing" />',
'label.action.detach.iso': '<fmt:message key="label.action.detach.iso" />',
-'label.action.disable.account.processing': '<fmt:message key="label.action.disable.account.processing" />',
+'label.action.detach.iso.processing': '<fmt:message key="label.action.detach.iso.processing" />',
'label.action.disable.account': '<fmt:message key="label.action.disable.account" />',
-'label.action.disable.static.NAT.processing': '<fmt:message key="label.action.disable.static.NAT.processing" />',
+'label.action.disable.account.processing': '<fmt:message key="label.action.disable.account.processing" />',
+'label.action.disable.cluster': '<fmt:message key="label.action.disable.cluster" />',
+'label.action.disable.cluster.processing': '<fmt:message key="label.action.disable.cluster.processing" />',
+'label.action.disable.nexusVswitch': '<fmt:message key="label.action.disable.nexusVswitch" />',
+'label.action.disable.physical.network': '<fmt:message key="label.action.disable.physical.network" />',
+'label.action.disable.pod': '<fmt:message key="label.action.disable.pod" />',
+'label.action.disable.pod.processing': '<fmt:message key="label.action.disable.pod.processing" />',
'label.action.disable.static.NAT': '<fmt:message key="label.action.disable.static.NAT" />',
-'label.action.disable.user.processing': '<fmt:message key="label.action.disable.user.processing" />',
+'label.action.disable.static.NAT.processing': '<fmt:message key="label.action.disable.static.NAT.processing" />',
'label.action.disable.user': '<fmt:message key="label.action.disable.user" />',
+'label.action.disable.user.processing': '<fmt:message key="label.action.disable.user.processing" />',
+'label.action.disable.zone': '<fmt:message key="label.action.disable.zone" />',
+'label.action.disable.zone.processing': '<fmt:message key="label.action.disable.zone.processing" />',
'label.action.download.ISO': '<fmt:message key="label.action.download.ISO" />',
'label.action.download.template': '<fmt:message key="label.action.download.template" />',
-'label.action.download.volume.processing': '<fmt:message key="label.action.download.volume.processing" />',
'label.action.download.volume': '<fmt:message key="label.action.download.volume" />',
-'label.action.edit.ISO': '<fmt:message key="label.action.edit.ISO" />',
+'label.action.download.volume.processing': '<fmt:message key="label.action.download.volume.processing" />',
'label.action.edit.account': '<fmt:message key="label.action.edit.account" />',
'label.action.edit.disk.offering': '<fmt:message key="label.action.edit.disk.offering" />',
'label.action.edit.domain': '<fmt:message key="label.action.edit.domain" />',
'label.action.edit.global.setting': '<fmt:message key="label.action.edit.global.setting" />',
+'label.action.edit.host': '<fmt:message key="label.action.edit.host" />',
'label.action.edit.instance': '<fmt:message key="label.action.edit.instance" />',
+'label.action.edit.ISO': '<fmt:message key="label.action.edit.ISO" />',
+'label.action.edit.network': '<fmt:message key="label.action.edit.network" />',
'label.action.edit.network.offering': '<fmt:message key="label.action.edit.network.offering" />',
+'label.action.edit.network.processing': '<fmt:message key="label.action.edit.network.processing" />',
'label.action.edit.pod': '<fmt:message key="label.action.edit.pod" />',
'label.action.edit.primary.storage': '<fmt:message key="label.action.edit.primary.storage" />',
'label.action.edit.resource.limits': '<fmt:message key="label.action.edit.resource.limits" />',
@@ -600,112 +167,192 @@ dictionary = {
'label.action.edit.template': '<fmt:message key="label.action.edit.template" />',
'label.action.edit.user': '<fmt:message key="label.action.edit.user" />',
'label.action.edit.zone': '<fmt:message key="label.action.edit.zone" />',
-'label.action.enable.account.processing': '<fmt:message key="label.action.enable.account.processing" />',
'label.action.enable.account': '<fmt:message key="label.action.enable.account" />',
-'label.action.enable.maintenance.mode.processing': '<fmt:message key="label.action.enable.maintenance.mode.processing" />',
+'label.action.enable.account.processing': '<fmt:message key="label.action.enable.account.processing" />',
+'label.action.enable.cluster': '<fmt:message key="label.action.enable.cluster" />',
+'label.action.enable.cluster.processing': '<fmt:message key="label.action.enable.cluster.processing" />',
'label.action.enable.maintenance.mode': '<fmt:message key="label.action.enable.maintenance.mode" />',
-'label.action.enable.static.NAT.processing': '<fmt:message key="label.action.enable.static.NAT.processing" />',
+'label.action.enable.maintenance.mode.processing': '<fmt:message key="label.action.enable.maintenance.mode.processing" />',
+'label.action.enable.nexusVswitch': '<fmt:message key="label.action.enable.nexusVswitch" />',
+'label.action.enable.physical.network': '<fmt:message key="label.action.enable.physical.network" />',
+'label.action.enable.pod': '<fmt:message key="label.action.enable.pod" />',
+'label.action.enable.pod.processing': '<fmt:message key="label.action.enable.pod.processing" />',
'label.action.enable.static.NAT': '<fmt:message key="label.action.enable.static.NAT" />',
-'label.action.enable.user.processing': '<fmt:message key="label.action.enable.user.processing" />',
+'label.action.enable.static.NAT.processing': '<fmt:message key="label.action.enable.static.NAT.processing" />',
'label.action.enable.user': '<fmt:message key="label.action.enable.user" />',
-'label.action.force.reconnect.processing': '<fmt:message key="label.action.force.reconnect.processing" />',
+'label.action.enable.user.processing': '<fmt:message key="label.action.enable.user.processing" />',
+'label.action.enable.zone': '<fmt:message key="label.action.enable.zone" />',
+'label.action.enable.zone.processing': '<fmt:message key="label.action.enable.zone.processing" />',
'label.action.force.reconnect': '<fmt:message key="label.action.force.reconnect" />',
-'label.action.generate.keys.processing': '<fmt:message key="label.action.generate.keys.processing" />',
+'label.action.force.reconnect.processing': '<fmt:message key="label.action.force.reconnect.processing" />',
'label.action.generate.keys': '<fmt:message key="label.action.generate.keys" />',
-'label.action.lock.account.processing': '<fmt:message key="label.action.lock.account.processing" />',
+'label.action.generate.keys.processing': '<fmt:message key="label.action.generate.keys.processing" />',
'label.action.lock.account': '<fmt:message key="label.action.lock.account" />',
+'label.action.lock.account.processing': '<fmt:message key="label.action.lock.account.processing" />',
+'label.action.manage.cluster': '<fmt:message key="label.action.manage.cluster" />',
+'label.action.manage.cluster.processing': '<fmt:message key="label.action.manage.cluster.processing" />',
'label.action.migrate.instance': '<fmt:message key="label.action.migrate.instance" />',
'label.action.migrate.instance.processing': '<fmt:message key="label.action.migrate.instance.processing" />',
-'label.action.reboot.instance.processing': '<fmt:message key="label.action.reboot.instance.processing" />',
+'label.action.migrate.router': '<fmt:message key="label.action.migrate.router" />',
+'label.action.migrate.router.processing': '<fmt:message key="label.action.migrate.router.processing" />',
+'label.action.migrate.systemvm': '<fmt:message key="label.action.migrate.systemvm" />',
+'label.action.migrate.systemvm.processing': '<fmt:message key="label.action.migrate.systemvm.processing" />',
'label.action.reboot.instance': '<fmt:message key="label.action.reboot.instance" />',
-'label.action.reboot.router.processing': '<fmt:message key="label.action.reboot.router.processing" />',
+'label.action.reboot.instance.processing': '<fmt:message key="label.action.reboot.instance.processing" />',
'label.action.reboot.router': '<fmt:message key="label.action.reboot.router" />',
-'label.action.reboot.systemvm.processing': '<fmt:message key="label.action.reboot.systemvm.processing" />',
+'label.action.reboot.router.processing': '<fmt:message key="label.action.reboot.router.processing" />',
'label.action.reboot.systemvm': '<fmt:message key="label.action.reboot.systemvm" />',
+'label.action.reboot.systemvm.processing': '<fmt:message key="label.action.reboot.systemvm.processing" />',
'label.action.recurring.snapshot': '<fmt:message key="label.action.recurring.snapshot" />',
-'label.action.release.ip.processing': '<fmt:message key="label.action.release.ip.processing" />',
+'label.action.register.iso': '<fmt:message key="label.action.register.iso" />',
+'label.action.register.template': '<fmt:message key="label.action.register.template" />',
'label.action.release.ip': '<fmt:message key="label.action.release.ip" />',
-'label.action.remove.host.processing': '<fmt:message key="label.action.remove.host.processing" />',
+'label.action.release.ip.processing': '<fmt:message key="label.action.release.ip.processing" />',
'label.action.remove.host': '<fmt:message key="label.action.remove.host" />',
-'label.action.reset.password.processing': '<fmt:message key="label.action.reset.password.processing" />',
+'label.action.remove.host.processing': '<fmt:message key="label.action.remove.host.processing" />',
'label.action.reset.password': '<fmt:message key="label.action.reset.password" />',
+'label.action.reset.password.processing': '<fmt:message key="label.action.reset.password.processing" />',
+'label.action.resize.volume': '<fmt:message key="label.action.resize.volume" />',
'label.action.resource.limits': '<fmt:message key="label.action.resource.limits" />',
-'label.action.restore.instance.processing': '<fmt:message key="label.action.restore.instance.processing" />',
'label.action.restore.instance': '<fmt:message key="label.action.restore.instance" />',
-'label.action.start.instance.processing': '<fmt:message key="label.action.start.instance.processing" />',
+'label.action.restore.instance.processing': '<fmt:message key="label.action.restore.instance.processing" />',
+'label.actions': '<fmt:message key="label.actions" />',
'label.action.start.instance': '<fmt:message key="label.action.start.instance" />',
-'label.action.start.router.processing': '<fmt:message key="label.action.start.router.processing" />',
+'label.action.start.instance.processing': '<fmt:message key="label.action.start.instance.processing" />',
'label.action.start.router': '<fmt:message key="label.action.start.router" />',
-'label.action.start.systemvm.processing': '<fmt:message key="label.action.start.systemvm.processing" />',
+'label.action.start.router.processing': '<fmt:message key="label.action.start.router.processing" />',
'label.action.start.systemvm': '<fmt:message key="label.action.start.systemvm" />',
-'label.action.stop.instance.processing': '<fmt:message key="label.action.stop.instance.processing" />',
+'label.action.start.systemvm.processing': '<fmt:message key="label.action.start.systemvm.processing" />',
'label.action.stop.instance': '<fmt:message key="label.action.stop.instance" />',
-'label.action.stop.router.processing': '<fmt:message key="label.action.stop.router.processing" />',
+'label.action.stop.instance.processing': '<fmt:message key="label.action.stop.instance.processing" />',
'label.action.stop.router': '<fmt:message key="label.action.stop.router" />',
-'label.action.stop.systemvm.processing': '<fmt:message key="label.action.stop.systemvm.processing" />',
+'label.action.stop.router.processing': '<fmt:message key="label.action.stop.router.processing" />',
'label.action.stop.systemvm': '<fmt:message key="label.action.stop.systemvm" />',
-'label.action.take.snapshot.processing': '<fmt:message key="label.action.take.snapshot.processing" />',
+'label.action.stop.systemvm.processing': '<fmt:message key="label.action.stop.systemvm.processing" />',
'label.action.take.snapshot': '<fmt:message key="label.action.take.snapshot" />',
-'label.action.update.OS.preference.processing': '<fmt:message key="label.action.update.OS.preference.processing" />',
+'label.action.take.snapshot.processing': '<fmt:message key="label.action.take.snapshot.processing" />',
+'label.action.unmanage.cluster': '<fmt:message key="label.action.unmanage.cluster" />',
+'label.action.unmanage.cluster.processing': '<fmt:message key="label.action.unmanage.cluster.processing" />',
'label.action.update.OS.preference': '<fmt:message key="label.action.update.OS.preference" />',
-'label.actions': '<fmt:message key="label.actions" />',
+'label.action.update.OS.preference.processing': '<fmt:message key="label.action.update.OS.preference.processing" />',
+'label.action.update.resource.count': '<fmt:message key="label.action.update.resource.count" />',
+'label.action.update.resource.count.processing': '<fmt:message key="label.action.update.resource.count.processing" />',
+'label.action.vmsnapshot.create': '<fmt:message key="label.action.vmsnapshot.create" />',
+'label.action.vmsnapshot.delete': '<fmt:message key="label.action.vmsnapshot.delete" />',
+'label.action.vmsnapshot.revert': '<fmt:message key="label.action.vmsnapshot.revert" />',
+'label.activate.project': '<fmt:message key="label.activate.project" />',
'label.active.sessions': '<fmt:message key="label.active.sessions" />',
'label.add.account': '<fmt:message key="label.add.account" />',
+'label.add.accounts': '<fmt:message key="label.add.accounts" />',
+'label.add.accounts.to': '<fmt:message key="label.add.accounts.to" />',
+'label.add.account.to.project': '<fmt:message key="label.add.account.to.project" />',
+'label.add.ACL': '<fmt:message key="label.add.ACL" />',
+'label.add.affinity.group': '<fmt:message key="label.add.affinity.group" />',
+'label.add.BigSwitchVns.device': '<fmt:message key="label.add.BigSwitchVns.device" />',
'label.add.by.cidr': '<fmt:message key="label.add.by.cidr" />',
+'label.add.by': '<fmt:message key="label.add.by" />',
'label.add.by.group': '<fmt:message key="label.add.by.group" />',
'label.add.cluster': '<fmt:message key="label.add.cluster" />',
+'label.add.compute.offering': '<fmt:message key="label.add.compute.offering" />',
'label.add.direct.iprange': '<fmt:message key="label.add.direct.iprange" />',
'label.add.disk.offering': '<fmt:message key="label.add.disk.offering" />',
'label.add.domain': '<fmt:message key="label.add.domain" />',
+'label.add.egress.rule': '<fmt:message key="label.add.egress.rule" />',
+'label.add.F5.device': '<fmt:message key="label.add.F5.device" />',
'label.add.firewall': '<fmt:message key="label.add.firewall" />',
+'label.add': '<fmt:message key="label.add" />',
+'label.add.guest.network': '<fmt:message key="label.add.guest.network" />',
'label.add.host': '<fmt:message key="label.add.host" />',
+'label.adding.cluster': '<fmt:message key="label.adding.cluster" />',
+'label.adding.failed': '<fmt:message key="label.adding.failed" />',
+'label.adding': '<fmt:message key="label.adding" />',
+'label.adding.pod': '<fmt:message key="label.adding.pod" />',
+'label.adding.processing': '<fmt:message key="label.adding.processing" />',
'label.add.ingress.rule': '<fmt:message key="label.add.ingress.rule" />',
+'label.adding.succeeded': '<fmt:message key="label.adding.succeeded" />',
+'label.adding.user': '<fmt:message key="label.adding.user" />',
+'label.adding.zone': '<fmt:message key="label.adding.zone" />',
'label.add.ip.range': '<fmt:message key="label.add.ip.range" />',
+'label.additional.networks': '<fmt:message key="label.additional.networks" />',
'label.add.load.balancer': '<fmt:message key="label.add.load.balancer" />',
'label.add.more': '<fmt:message key="label.add.more" />',
+'label.add.netScaler.device': '<fmt:message key="label.add.netScaler.device" />',
+'label.add.network.ACL': '<fmt:message key="label.add.network.ACL" />',
+'label.add.network.device': '<fmt:message key="label.add.network.device" />',
'label.add.network': '<fmt:message key="label.add.network" />',
+'label.add.network.offering': '<fmt:message key="label.add.network.offering" />',
+'label.add.new.F5': '<fmt:message key="label.add.new.F5" />',
+'label.add.new.gateway': '<fmt:message key="label.add.new.gateway" />',
+'label.add.new.NetScaler': '<fmt:message key="label.add.new.NetScaler" />',
+'label.add.new.SRX': '<fmt:message key="label.add.new.SRX" />',
+'label.add.new.tier': '<fmt:message key="label.add.new.tier" />',
+'label.add.NiciraNvp.device': '<fmt:message key="label.add.NiciraNvp.device" />',
'label.add.pod': '<fmt:message key="label.add.pod" />',
+'label.add.port.forwarding.rule': '<fmt:message key="label.add.port.forwarding.rule" />',
'label.add.primary.storage': '<fmt:message key="label.add.primary.storage" />',
+'label.add.region': '<fmt:message key="label.add.region" />',
+'label.add.route': '<fmt:message key="label.add.route" />',
+'label.add.rule': '<fmt:message key="label.add.rule" />',
'label.add.secondary.storage': '<fmt:message key="label.add.secondary.storage" />',
'label.add.security.group': '<fmt:message key="label.add.security.group" />',
'label.add.service.offering': '<fmt:message key="label.add.service.offering" />',
+'label.add.SRX.device': '<fmt:message key="label.add.SRX.device" />',
+'label.add.static.nat.rule': '<fmt:message key="label.add.static.nat.rule" />',
+'label.add.static.route': '<fmt:message key="label.add.static.route" />',
'label.add.system.service.offering': '<fmt:message key="label.add.system.service.offering" />',
'label.add.template': '<fmt:message key="label.add.template" />',
+'label.add.to.group': '<fmt:message key="label.add.to.group" />',
'label.add.user': '<fmt:message key="label.add.user" />',
'label.add.vlan': '<fmt:message key="label.add.vlan" />',
+'label.add.vm': '<fmt:message key="label.add.vm" />',
+'label.add.vms': '<fmt:message key="label.add.vms" />',
+'label.add.vms.to.lb': '<fmt:message key="label.add.vms.to.lb" />',
+'label.add.VM.to.tier': '<fmt:message key="label.add.VM.to.tier" />',
'label.add.volume': '<fmt:message key="label.add.volume" />',
+'label.add.vpc': '<fmt:message key="label.add.vpc" />',
+'label.add.vpn.customer.gateway': '<fmt:message key="label.add.vpn.customer.gateway" />',
+'label.add.VPN.gateway': '<fmt:message key="label.add.VPN.gateway" />',
+'label.add.vpn.user': '<fmt:message key="label.add.vpn.user" />',
'label.add.zone': '<fmt:message key="label.add.zone" />',
-'label.add': '<fmt:message key="label.add" />',
-'label.adding.cluster': '<fmt:message key="label.adding.cluster" />',
-'label.adding.failed': '<fmt:message key="label.adding.failed" />',
-'label.adding.pod': '<fmt:message key="label.adding.pod" />',
-'label.adding.processing': '<fmt:message key="label.adding.processing" />',
-'label.adding.succeeded': '<fmt:message key="label.adding.succeeded" />',
-'label.adding.user': '<fmt:message key="label.adding.user" />',
-'label.adding.zone': '<fmt:message key="label.adding.zone" />',
-'label.adding': '<fmt:message key="label.adding" />',
-'label.additional.networks': '<fmt:message key="label.additional.networks" />',
'label.admin.accounts': '<fmt:message key="label.admin.accounts" />',
'label.admin': '<fmt:message key="label.admin" />',
+'label.advanced': '<fmt:message key="label.advanced" />',
'label.advanced.mode': '<fmt:message key="label.advanced.mode" />',
'label.advanced.search': '<fmt:message key="label.advanced.search" />',
-'label.advanced': '<fmt:message key="label.advanced" />',
+'label.affinity': '<fmt:message key="label.affinity" />',
+'label.affinity.group': '<fmt:message key="label.affinity.group" />',
+'label.affinity.groups': '<fmt:message key="label.affinity.groups" />',
+'label.agent.password': '<fmt:message key="label.agent.password" />',
+'label.agent.username': '<fmt:message key="label.agent.username" />',
+'label.agree': '<fmt:message key="label.agree" />',
'label.alert': '<fmt:message key="label.alert" />',
'label.algorithm': '<fmt:message key="label.algorithm" />',
'label.allocated': '<fmt:message key="label.allocated" />',
+'label.allocation.state': '<fmt:message key="label.allocation.state" />',
+'label.anti.affinity': '<fmt:message key="label.anti.affinity" />',
+'label.anti.affinity.group': '<fmt:message key="label.anti.affinity.group" />',
+'label.anti.affinity.groups': '<fmt:message key="label.anti.affinity.groups" />',
'label.api.key': '<fmt:message key="label.api.key" />',
-'label.assign.to.load.balancer': '<fmt:message key="label.assign.to.load.balancer" />',
+'label.apply': '<fmt:message key="label.apply" />',
'label.assign': '<fmt:message key="label.assign" />',
+'label.assign.to.load.balancer': '<fmt:message key="label.assign.to.load.balancer" />',
+'label.associated.network': '<fmt:message key="label.associated.network" />',
'label.associated.network.id': '<fmt:message key="label.associated.network.id" />',
'label.attached.iso': '<fmt:message key="label.attached.iso" />',
-'label.availability.zone': '<fmt:message key="label.availability.zone" />',
+'label.author.email': '<fmt:message key="label.author.email" />',
+'label.author.name': '<fmt:message key="label.author.name" />',
'label.availability': '<fmt:message key="label.availability" />',
-'label.available.public.ips': '<fmt:message key="label.available.public.ips" />',
+'label.availability.zone': '<fmt:message key="label.availability.zone" />',
'label.available': '<fmt:message key="label.available" />',
+'label.available.public.ips': '<fmt:message key="label.available.public.ips" />',
'label.back': '<fmt:message key="label.back" />',
+'label.bandwidth': '<fmt:message key="label.bandwidth" />',
'label.basic.mode': '<fmt:message key="label.basic.mode" />',
+'label.bigswitch.controller.address': '<fmt:message key="label.bigswitch.controller.address" />',
'label.bootable': '<fmt:message key="label.bootable" />',
+'label.broadcast.domain.range': '<fmt:message key="label.broadcast.domain.range" />',
'label.broadcast.domain.type': '<fmt:message key="label.broadcast.domain.type" />',
+'label.broadcast.uri': '<fmt:message key="label.broadcast.uri" />',
'label.by.account': '<fmt:message key="label.by.account" />',
'label.by.availability': '<fmt:message key="label.by.availability" />',
'label.by.domain': '<fmt:message key="label.by.domain" />',
@@ -715,31 +362,64 @@ dictionary = {
'label.by.role': '<fmt:message key="label.by.role" />',
'label.by.start.date': '<fmt:message key="label.by.start.date" />',
'label.by.state': '<fmt:message key="label.by.state" />',
+'label.bytes.received': '<fmt:message key="label.bytes.received" />',
+'label.bytes.sent': '<fmt:message key="label.bytes.sent" />',
'label.by.traffic.type': '<fmt:message key="label.by.traffic.type" />',
-'label.by.type.id': '<fmt:message key="label.by.type.id" />',
'label.by.type': '<fmt:message key="label.by.type" />',
+'label.by.type.id': '<fmt:message key="label.by.type.id" />',
'label.by.zone': '<fmt:message key="label.by.zone" />',
-'label.bytes.received': '<fmt:message key="label.bytes.received" />',
-'label.bytes.sent': '<fmt:message key="label.bytes.sent" />',
'label.cancel': '<fmt:message key="label.cancel" />',
+'label.capacity': '<fmt:message key="label.capacity" />',
'label.certificate': '<fmt:message key="label.certificate" />',
-'label.privatekey': '<fmt:message key="label.privatekey" />',
-'label.domain.suffix': '<fmt:message key="label.domain.suffix" />',
+'label.change.service.offering': '<fmt:message key="label.change.service.offering" />',
+'label.change.value': '<fmt:message key="label.change.value" />',
'label.character': '<fmt:message key="label.character" />',
+'label.checksum': '<fmt:message key="label.checksum" />',
'label.cidr.account': '<fmt:message key="label.cidr.account" />',
+'label.cidr': '<fmt:message key="label.cidr" />',
+'label.cidr.list': '<fmt:message key="label.cidr.list" />',
+'label.CIDR.list': '<fmt:message key="label.CIDR.list" />',
+'label.CIDR.of.destination.network': '<fmt:message key="label.CIDR.of.destination.network" />',
+'label.clean.up': '<fmt:message key="label.clean.up" />',
+'label.clear.list': '<fmt:message key="label.clear.list" />',
'label.close': '<fmt:message key="label.close" />',
'label.cloud.console': '<fmt:message key="label.cloud.console" />',
'label.cloud.managed': '<fmt:message key="label.cloud.managed" />',
-'label.cluster.type': '<fmt:message key="label.cluster.type" />',
'label.cluster': '<fmt:message key="label.cluster" />',
+'label.cluster.name': '<fmt:message key="label.cluster.name" />',
+'label.clusters': '<fmt:message key="label.clusters" />',
+'label.cluster.type': '<fmt:message key="label.cluster.type" />',
+'label.clvm': '<fmt:message key="label.clvm" />',
'label.code': '<fmt:message key="label.code" />',
+'label.community': '<fmt:message key="label.community" />',
+'label.compute.and.storage': '<fmt:message key="label.compute.and.storage" />',
+'label.compute': '<fmt:message key="label.compute" />',
+'label.compute.offering': '<fmt:message key="label.compute.offering" />',
+'label.compute.offerings': '<fmt:message key="label.compute.offerings" />',
+'label.configuration': '<fmt:message key="label.configuration" />',
+'label.configure': '<fmt:message key="label.configure" />',
+'label.configure.network.ACLs': '<fmt:message key="label.configure.network.ACLs" />',
+'label.configure.vpc': '<fmt:message key="label.configure.vpc" />',
'label.confirmation': '<fmt:message key="label.confirmation" />',
-'label.cpu.allocated.for.VMs': '<fmt:message key="label.cpu.allocated.for.VMs" />',
+'label.confirm.password': '<fmt:message key="label.confirm.password" />',
+'label.congratulations': '<fmt:message key="label.congratulations" />',
+'label.conserve.mode': '<fmt:message key="label.conserve.mode" />',
+'label.console.proxy' : '<fmt:message key="label.console.proxy" />',
+'label.continue.basic.install': '<fmt:message key="label.continue.basic.install" />',
+'label.continue': '<fmt:message key="label.continue" />',
+'label.corrections.saved': '<fmt:message key="label.corrections.saved" />',
'label.cpu.allocated': '<fmt:message key="label.cpu.allocated" />',
+'label.cpu.allocated.for.VMs': '<fmt:message key="label.cpu.allocated.for.VMs" />',
+'label.CPU.cap': '<fmt:message key="label.CPU.cap" />',
+'label.cpu': '<fmt:message key="label.cpu" />',
+'label.cpu.limits': '<fmt:message key="label.cpu.limits" />',
'label.cpu.mhz': '<fmt:message key="label.cpu.mhz" />',
'label.cpu.utilized': '<fmt:message key="label.cpu.utilized" />',
-'label.cpu': '<fmt:message key="label.cpu" />',
+'label.created.by.system': '<fmt:message key="label.created.by.system" />',
'label.created': '<fmt:message key="label.created" />',
+'label.create.project': '<fmt:message key="label.create.project" />',
+'label.create.template': '<fmt:message key="label.create.template" />',
+'label.create.VPN.connection': '<fmt:message key="label.create.VPN.connection" />',
'label.cross.zones': '<fmt:message key="label.cross.zones" />',
'label.custom.disk.size': '<fmt:message key="label.custom.disk.size" />',
'label.daily': '<fmt:message key="label.daily" />',
@@ -747,48 +427,112 @@ dictionary = {
'label.date': '<fmt:message key="label.date" />',
'label.day.of.month': '<fmt:message key="label.day.of.month" />',
'label.day.of.week': '<fmt:message key="label.day.of.week" />',
+'label.dead.peer.detection': '<fmt:message key="label.dead.peer.detection" />',
+'label.decline.invitation': '<fmt:message key="label.decline.invitation" />',
+'label.dedicated': '<fmt:message key="label.dedicated" />',
+'label.default': '<fmt:message key="label.default" />',
+'label.default.use': '<fmt:message key="label.default.use" />',
+'label.default.view': '<fmt:message key="label.default.view" />',
+'label.delete.affinity.group': '<fmt:message key="label.delete.affinity.group" />',
+'label.delete.BigSwitchVns': '<fmt:message key="label.delete.BigSwitchVns" />',
+'label.delete.F5': '<fmt:message key="label.delete.F5" />',
'label.delete': '<fmt:message key="label.delete" />',
+'label.delete.gateway': '<fmt:message key="label.delete.gateway" />',
+'label.delete.NetScaler': '<fmt:message key="label.delete.NetScaler" />',
+'label.delete.NiciraNvp': '<fmt:message key="label.delete.NiciraNvp" />',
+'label.delete.project': '<fmt:message key="label.delete.project" />',
+'label.delete.SRX': '<fmt:message key="label.delete.SRX" />',
+'label.delete.VPN.connection': '<fmt:message key="label.delete.VPN.connection" />',
+'label.delete.VPN.customer.gateway': '<fmt:message key="label.delete.VPN.customer.gateway" />',
+'label.delete.VPN.gateway': '<fmt:message key="label.delete.VPN.gateway" />',
+'label.delete.vpn.user': '<fmt:message key="label.delete.vpn.user" />',
'label.deleting.failed': '<fmt:message key="label.deleting.failed" />',
'label.deleting.processing': '<fmt:message key="label.deleting.processing" />',
'label.description': '<fmt:message key="label.description" />',
+'label.destination.physical.network.id': '<fmt:message key="label.destination.physical.network.id" />',
+'label.destination.zone': '<fmt:message key="label.destination.zone" />',
+'label.destroy': '<fmt:message key="label.destroy" />',
+'label.destroy.router': '<fmt:message key="label.destroy.router" />',
'label.detaching.disk': '<fmt:message key="label.detaching.disk" />',
'label.details': '<fmt:message key="label.details" />',
-'label.nexusVswitch': '<fmt:message key="label.nexusVswitch" />',
'label.device.id': '<fmt:message key="label.device.id" />',
+'label.devices': '<fmt:message key="label.devices" />',
+'label.dhcp': '<fmt:message key="label.dhcp" />',
+'label.DHCP.server.type': '<fmt:message key="label.DHCP.server.type" />',
+'label.direct.ips': '<fmt:message key="label.direct.ips" />',
'label.disabled': '<fmt:message key="label.disabled" />',
+'label.disable.provider': '<fmt:message key="label.disable.provider" />',
+'label.disable.vpn': '<fmt:message key="label.disable.vpn" />',
'label.disabling.vpn.access': '<fmt:message key="label.disabling.vpn.access" />',
'label.disk.allocated': '<fmt:message key="label.disk.allocated" />',
'label.disk.offering': '<fmt:message key="label.disk.offering" />',
-'label.disk.size.gb': '<fmt:message key="label.disk.size.gb" />',
'label.disk.size': '<fmt:message key="label.disk.size" />',
+'label.disk.size.gb': '<fmt:message key="label.disk.size.gb" />',
'label.disk.total': '<fmt:message key="label.disk.total" />',
'label.disk.volume': '<fmt:message key="label.disk.volume" />',
+'label.display.name': '<fmt:message key="label.display.name" />',
'label.display.text': '<fmt:message key="label.display.text" />',
'label.dns.1': '<fmt:message key="label.dns.1" />',
'label.dns.2': '<fmt:message key="label.dns.2" />',
+'label.DNS.domain.for.guest.networks': '<fmt:message key="label.DNS.domain.for.guest.networks" />',
+'label.dns': '<fmt:message key="label.dns" />',
'label.domain.admin': '<fmt:message key="label.domain.admin" />',
+'label.domain': '<fmt:message key="label.domain" />',
'label.domain.id': '<fmt:message key="label.domain.id" />',
'label.domain.name': '<fmt:message key="label.domain.name" />',
-'label.domain': '<fmt:message key="label.domain" />',
+'label.domain.router' : '<fmt:message key="label.domain.router" />',
+'label.domain.suffix': '<fmt:message key="label.domain.suffix" />',
+'label.done': '<fmt:message key="label.done" />',
'label.double.quotes.are.not.allowed': '<fmt:message key="label.double.quotes.are.not.allowed" />',
'label.download.progress': '<fmt:message key="label.download.progress" />',
+'label.drag.new.position': '<fmt:message key="label.drag.new.position" />',
+'label.edit.affinity.group': '<fmt:message key="label.edit.affinity.group" />',
'label.edit': '<fmt:message key="label.edit" />',
+'label.edit.lb.rule': '<fmt:message key="label.edit.lb.rule" />',
+'label.edit.network.details': '<fmt:message key="label.edit.network.details" />',
+'label.edit.project.details': '<fmt:message key="label.edit.project.details" />',
+'label.edit.tags': '<fmt:message key="label.edit.tags" />',
+'label.edit.traffic.type': '<fmt:message key="label.edit.traffic.type" />',
+'label.edit.vpc': '<fmt:message key="label.edit.vpc" />',
+'label.egress.rule': '<fmt:message key="label.egress.rule" />',
+'label.egress.rules': '<fmt:message key="label.egress.rules" />',
+'label.elastic': '<fmt:message key="label.elastic" />',
+'label.elastic.IP': '<fmt:message key="label.elastic.IP" />',
+'label.elastic.LB': '<fmt:message key="label.elastic.LB" />',
'label.email': '<fmt:message key="label.email" />',
+'label.enable.provider': '<fmt:message key="label.enable.provider" />',
+'label.enable.s3': '<fmt:message key="label.enable.s3" />',
+'label.enable.swift': '<fmt:message key="label.enable.swift" />',
+'label.enable.vpn': '<fmt:message key="label.enable.vpn" />',
'label.enabling.vpn.access': '<fmt:message key="label.enabling.vpn.access" />',
'label.enabling.vpn': '<fmt:message key="label.enabling.vpn" />',
-'label.end.port': '<fmt:message key="label.end.port" />',
+'label.end.IP': '<fmt:message key="label.end.IP" />',
+'label.endpoint': '<fmt:message key="label.endpoint" />',
'label.endpoint.or.operation': '<fmt:message key="label.endpoint.or.operation" />',
+'label.end.port': '<fmt:message key="label.end.port" />',
+'label.end.reserved.system.IP': '<fmt:message key="label.end.reserved.system.IP" />',
+'label.end.vlan': '<fmt:message key="label.end.vlan" />',
+'label.enter.token': '<fmt:message key="label.enter.token" />',
'label.error.code': '<fmt:message key="label.error.code" />',
'label.error': '<fmt:message key="label.error" />',
+'label.ESP.encryption': '<fmt:message key="label.ESP.encryption" />',
+'label.ESP.hash': '<fmt:message key="label.ESP.hash" />',
+'label.ESP.lifetime': '<fmt:message key="label.ESP.lifetime" />',
+'label.ESP.policy': '<fmt:message key="label.ESP.policy" />',
'label.esx.host': '<fmt:message key="label.esx.host" />',
'label.example': '<fmt:message key="label.example" />',
+'label.external.link': '<fmt:message key="label.external.link" />',
+'label.f5': '<fmt:message key="label.f5" />',
'label.failed': '<fmt:message key="label.failed" />',
'label.featured': '<fmt:message key="label.featured" />',
+'label.fetch.latest': '<fmt:message key="label.fetch.latest" />',
+'label.filterBy': '<fmt:message key="label.filterBy" />',
'label.firewall': '<fmt:message key="label.firewall" />',
'label.first.name': '<fmt:message key="label.first.name" />',
'label.format': '<fmt:message key="label.format" />',
'label.friday': '<fmt:message key="label.friday" />',
'label.full': '<fmt:message key="label.full" />',
+'label.full.path': '<fmt:message key="label.full.path" />',
'label.gateway': '<fmt:message key="label.gateway" />',
'label.general.alerts': '<fmt:message key="label.general.alerts" />',
'label.generating.url': '<fmt:message key="label.generating.url" />',
@@ -796,50 +540,98 @@ dictionary = {
'label.go.step.3': '<fmt:message key="label.go.step.3" />',
'label.go.step.4': '<fmt:message key="label.go.step.4" />',
'label.go.step.5': '<fmt:message key="label.go.step.5" />',
-'label.group.optional': '<fmt:message key="label.group.optional" />',
'label.group': '<fmt:message key="label.group" />',
+'label.group.optional': '<fmt:message key="label.group.optional" />',
'label.guest.cidr': '<fmt:message key="label.guest.cidr" />',
+'label.guest.end.ip': '<fmt:message key="label.guest.end.ip" />',
+'label.guest': '<fmt:message key="label.guest" />',
'label.guest.gateway': '<fmt:message key="label.guest.gateway" />',
-'label.guest.ip.range': '<fmt:message key="label.guest.ip.range" />',
'label.guest.ip': '<fmt:message key="label.guest.ip" />',
+'label.guest.ip.range': '<fmt:message key="label.guest.ip.range" />',
'label.guest.netmask': '<fmt:message key="label.guest.netmask" />',
+'label.guest.networks': '<fmt:message key="label.guest.networks" />',
+'label.guest.start.ip': '<fmt:message key="label.guest.start.ip" />',
+'label.guest.type': '<fmt:message key="label.guest.type" />',
'label.ha.enabled': '<fmt:message key="label.ha.enabled" />',
'label.help': '<fmt:message key="label.help" />',
+'label.hide.ingress.rule': '<fmt:message key="label.hide.ingress.rule" />',
+'label.hints': '<fmt:message key="label.hints" />',
'label.host.alerts': '<fmt:message key="label.host.alerts" />',
-'label.host.name': '<fmt:message key="label.host.name" />',
'label.host': '<fmt:message key="label.host" />',
+'label.host.MAC': '<fmt:message key="label.host.MAC" />',
+'label.host.name': '<fmt:message key="label.host.name" />',
'label.hosts': '<fmt:message key="label.hosts" />',
+'label.host.tags': '<fmt:message key="label.host.tags" />',
'label.hourly': '<fmt:message key="label.hourly" />',
-'label.hypervisor.type': '<fmt:message key="label.hypervisor.type" />',
+'label.hypervisor.capabilities': '<fmt:message key="label.hypervisor.capabilities" />',
'label.hypervisor': '<fmt:message key="label.hypervisor" />',
+'label.hypervisor.type': '<fmt:message key="label.hypervisor.type" />',
+'label.hypervisor.version': '<fmt:message key="label.hypervisor.version" />',
'label.id': '<fmt:message key="label.id" />',
+'label.IKE.DH': '<fmt:message key="label.IKE.DH" />',
+'label.IKE.encryption': '<fmt:message key="label.IKE.encryption" />',
+'label.IKE.hash': '<fmt:message key="label.IKE.hash" />',
+'label.IKE.lifetime': '<fmt:message key="label.IKE.lifetime" />',
+'label.IKE.policy': '<fmt:message key="label.IKE.policy" />',
'label.info': '<fmt:message key="label.info" />',
'label.ingress.rule': '<fmt:message key="label.ingress.rule" />',
'label.initiated.by': '<fmt:message key="label.initiated.by" />',
+'label.installWizard.addClusterIntro.subtitle': '<fmt:message key="label.installWizard.addClusterIntro.subtitle" />',
+'label.installWizard.addClusterIntro.title': '<fmt:message key="label.installWizard.addClusterIntro.title" />',
+'label.installWizard.addHostIntro.subtitle': '<fmt:message key="label.installWizard.addHostIntro.subtitle" />',
+'label.installWizard.addHostIntro.title': '<fmt:message key="label.installWizard.addHostIntro.title" />',
+'label.installWizard.addPodIntro.subtitle': '<fmt:message key="label.installWizard.addPodIntro.subtitle" />',
+'label.installWizard.addPodIntro.title': '<fmt:message key="label.installWizard.addPodIntro.title" />',
+'label.installWizard.addPrimaryStorageIntro.subtitle': '<fmt:message key="label.installWizard.addPrimaryStorageIntro.subtitle" />',
+'label.installWizard.addPrimaryStorageIntro.title': '<fmt:message key="label.installWizard.addPrimaryStorageIntro.title" />',
+'label.installWizard.addSecondaryStorageIntro.subtitle': '<fmt:message key="label.installWizard.addSecondaryStorageIntro.subtitle" />',
+'label.installWizard.addSecondaryStorageIntro.title': '<fmt:message key="label.installWizard.addSecondaryStorageIntro.title" />',
+'label.installWizard.addZoneIntro.subtitle': '<fmt:message key="label.installWizard.addZoneIntro.subtitle" />',
+'label.installWizard.addZoneIntro.title': '<fmt:message key="label.installWizard.addZoneIntro.title" />',
+'label.installWizard.addZone.title': '<fmt:
<TRUNCATED>
[50/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
Merge branch 'master' into marvin_refactor
Conflicts:
tools/marvin/marvin/cloudstackConnection.py
tools/marvin/marvin/cloudstackTestClient.py
ui/css/cloudstack3.css
ui/scripts/system.js
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/7c439fe6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/7c439fe6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/7c439fe6
Branch: refs/heads/marvin_refactor
Commit: 7c439fe6934eaba857cf8fb0c05ef5fce163e2e4
Parents: e89e4e7 766b36f
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Mon Apr 29 18:42:52 2013 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Mon Apr 29 18:42:52 2013 +0530
----------------------------------------------------------------------
agent/conf/agent.properties | 2 +-
.../cloud/configuration/ConfigurationService.java | 15 +-
api/src/com/cloud/network/NetworkModel.java | 2 +-
.../api/command/admin/cluster/ListClustersCmd.java | 8 +-
.../api/command/admin/config/ListCfgsByCmd.java | 44 +-
.../api/command/admin/config/UpdateCfgCmd.java | 47 +-
.../api/command/admin/host/ListHostsCmd.java | 7 +
.../api/command/admin/pod/ListPodsByCmd.java | 7 +
.../api/command/admin/router/ListRoutersCmd.java | 7 +
.../command/admin/systemvm/ListSystemVMsCmd.java | 7 +
.../api/command/user/iso/ListIsosCmd.java | 7 +
.../api/command/user/network/ListNetworksCmd.java | 7 +
.../command/user/snapshot/ListSnapshotsCmd.java | 7 +
.../command/user/template/ListTemplatesCmd.java | 8 +
.../api/command/user/zone/ListZonesByCmd.java | 8 +
.../api/response/ConfigurationResponse.java | 3 +
.../WEB-INF/classes/resources/messages.properties | 11 +-
client/pom.xml | 11 +-
client/tomcatconf/applicationContext.xml.in | 4 +
core/src/com/cloud/async/AsyncJobVO.java | 1 +
docs/en-US/added-API-commands-4.2.xml | 24 +
docs/en-US/delete-event-alerts.xml | 12 +
docs/en-US/events.xml | 2 +-
docs/en-US/images/eip-ns-basiczone.png | Bin 0 -> 55568 bytes
packaging/centos63/package.sh | 4 +-
.../debian/config/etc/init.d/cloud-early-config | 8 +
server/src/com/cloud/alert/AlertManagerImpl.java | 27 +-
server/src/com/cloud/api/ApiDBUtils.java | 2 +-
.../src/com/cloud/api/query/QueryManagerImpl.java | 21 +-
.../cloud/api/query/dao/AccountJoinDaoImpl.java | 6 +-
.../api/query/dao/DomainRouterJoinDaoImpl.java | 6 +-
.../com/cloud/api/query/dao/HostJoinDaoImpl.java | 6 +-
.../api/query/dao/SecurityGroupJoinDaoImpl.java | 6 +-
.../api/query/dao/StoragePoolJoinDaoImpl.java | 6 +-
.../api/query/dao/UserAccountJoinDaoImpl.java | 6 +-
.../com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 6 +-
.../com/cloud/api/query/dao/VolumeJoinDaoImpl.java | 6 +-
.../src/com/cloud/api/query/vo/AccountJoinVO.java | 6 +-
.../com/cloud/api/query/vo/DomainRouterJoinVO.java | 6 +-
server/src/com/cloud/api/query/vo/HostJoinVO.java | 6 +-
.../cloud/api/query/vo/SecurityGroupJoinVO.java | 6 +-
.../com/cloud/api/query/vo/StoragePoolJoinVO.java | 6 +-
.../com/cloud/api/query/vo/UserAccountJoinVO.java | 6 +-
.../src/com/cloud/api/query/vo/UserVmJoinVO.java | 6 +-
.../src/com/cloud/api/query/vo/VolumeJoinVO.java | 6 +-
server/src/com/cloud/capacity/dao/CapacityDao.java | 2 +-
.../com/cloud/capacity/dao/CapacityDaoImpl.java | 35 +-
server/src/com/cloud/configuration/Config.java | 20 +-
.../cloud/configuration/ConfigurationManager.java | 2 +-
.../configuration/ConfigurationManagerImpl.java | 173 +-
server/src/com/cloud/deploy/FirstFitPlanner.java | 25 +-
.../src/com/cloud/network/NetworkManagerImpl.java | 7 +-
server/src/com/cloud/network/NetworkModelImpl.java | 11 +-
.../src/com/cloud/network/NetworkServiceImpl.java | 19 +-
.../network/firewall/FirewallManagerImpl.java | 12 +-
.../src/com/cloud/network/vpc/VpcManagerImpl.java | 2 +-
.../network/vpn/RemoteAccessVpnManagerImpl.java | 6 +-
.../com/cloud/server/ConfigurationServerImpl.java | 11 +-
.../src/com/cloud/server/ManagementServerImpl.java | 153 +-
.../storage/dao/StoragePoolDetailsDaoImpl.java | 1 +
.../src/com/cloud/storage/dao/VMTemplateDao.java | 2 +-
.../com/cloud/storage/dao/VMTemplateDaoImpl.java | 11 +-
.../storage/snapshot/SnapshotManagerImpl.java | 32 +-
.../com/cloud/template/TemplateAdapterBase.java | 7 +-
.../com/cloud/template/TemplateManagerImpl.java | 10 +-
.../upgrade/PremiumDatabaseUpgradeChecker.java | 75 +-
server/src/com/cloud/vm/UserVmManagerImpl.java | 11 +-
.../com/cloud/vm/VirtualMachineManagerImpl.java | 2 +
.../com/cloud/network/MockNetworkModelImpl.java | 2 +-
.../cloud/vpc/MockConfigurationManagerImpl.java | 8 +-
.../test/com/cloud/vpc/MockNetworkModelImpl.java | 2 +-
.../affinity/AffinityApiTestConfiguration.java | 29 +-
.../networkoffering/ChildTestConfiguration.java | 38 +-
setup/db/db/schema-410to420.sql | 4 +
.../component/test_multiple_ip_ranges.py | 238 ++
test/integration/component/test_vpn_users.py | 447 ++++
test/integration/smoke/test_global_settings.py | 14 +-
ui/css/cloudstack3.css | 83 +-
ui/dictionary.jsp | 1710 +++++++--------
ui/images/icons.png | Bin 50745 -> 50052 bytes
ui/images/sprites.png | Bin 188552 -> 192407 bytes
ui/index.jsp | 19 +-
ui/scripts/affinity.js | 183 ++
ui/scripts/cloudStack.js | 9 +-
ui/scripts/domains.js | 2 +-
ui/scripts/instanceWizard.js | 941 ++++----
ui/scripts/instances.js | 151 ++-
ui/scripts/regions.js | 27 +-
ui/scripts/sharedFunctions.js | 4 +
ui/scripts/system.js | 283 ++-
ui/scripts/ui-custom/affinity.js | 173 ++
ui/scripts/ui-custom/instanceWizard.js | 19 +
ui/scripts/ui/widgets/detailView.js | 29 +-
ui/scripts/ui/widgets/listView.js | 10 +-
94 files changed, 3666 insertions(+), 1797 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c439fe6/server/src/com/cloud/network/NetworkServiceImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c439fe6/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c439fe6/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/7c439fe6/ui/scripts/instances.js
----------------------------------------------------------------------
[20/50] [abbrv] git commit: updated refs/heads/marvin_refactor to
7c439fe
Posted by ts...@apache.org.
CLOUDSTACK-2120: mixed zone management - UI: count total number of Primary Storages, Secondary Storages based on selected option in zone type dropdown on top menu.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f883b0f9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f883b0f9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f883b0f9
Branch: refs/heads/marvin_refactor
Commit: f883b0f90489348b287b5425a83d6517c0ba092a
Parents: 880f98c
Author: Jessica Wang <je...@apache.org>
Authored: Thu Apr 25 14:24:44 2013 -0700
Committer: Jessica Wang <je...@apache.org>
Committed: Thu Apr 25 14:25:34 2013 -0700
----------------------------------------------------------------------
ui/scripts/system.js | 35 +++++++++++++++++++++++------------
1 files changed, 23 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f883b0f9/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 312d5f4..fea7669 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -269,29 +269,40 @@
},
primaryStorageCount: function(data) {
+ var data2 = {
+ page: 1,
+ pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
$.ajax({
url: createURL('listStoragePools'),
- data: {
- page: 1,
- pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
- },
+ data: data2,
success: function(json) {
- dataFns.secondaryStorageCount($.extend(data, {
- primaryStorageCount: json.liststoragepoolsresponse.count ?
- json.liststoragepoolsresponse.count : 0
+ dataFns.secondaryStorageCount($.extend(data, {
+ primaryStorageCount: json.liststoragepoolsresponse.count ? json.liststoragepoolsresponse.count : 0
}));
}
});
},
secondaryStorageCount: function(data) {
+ var data2 = {
+ type: 'SecondaryStorage',
+ page: 1,
+ pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
+ };
+ if(cloudStack.context.zoneType != null && cloudStack.context.zoneType.length > 0) { //Basic type or Advanced type
+ $.extend(data2, {
+ zonetype: cloudStack.context.zoneType
+ });
+ }
$.ajax({
url: createURL('listHosts'),
- data: {
- type: 'SecondaryStorage',
- page: 1,
- pagesize: 1 //specifying pagesize as 1 because we don't need any embedded objects to be returned here. The only thing we need from API response is "count" property.
- },
+ data: data2,
success: function(json) {
dataFns.systemVmCount($.extend(data, {
secondaryStorageCount: json.listhostsresponse.count ?