mirror of https://github.com/apache/cloudstack.git
Merge branch '3.0.x' of ssh://git.cloud.com/var/lib/git/cloudstack-oss into 3.0.x
This commit is contained in:
commit
d9ffd743f0
|
|
@ -1,4 +1,5 @@
|
|||
#new labels (begin) **********************************************************************************************
|
||||
label.tier.details=Tier details
|
||||
label.edit.tags=Edit tags
|
||||
label.network.rate.megabytes=Network Rate (MB/s)
|
||||
label.action.enable.physical.network=Enable physical network
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager {
|
|||
}
|
||||
_accountMgr.checkAccess(caller, null, false, vpnGateway);
|
||||
|
||||
if (customerGateway.getAccountId() != vpnGateway.getAccountId() || customerGateway.getDomainId() != vpnGateway.getAccountId()) {
|
||||
if (customerGateway.getAccountId() != vpnGateway.getAccountId() || customerGateway.getDomainId() != vpnGateway.getDomainId()) {
|
||||
throw new InvalidParameterValueException("VPN connection can only be esitablished between same account's VPN gateway and customer gateway!", null);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9647,7 +9647,7 @@ div.panel.ui-dialog div.list-view div.fixed-header {
|
|||
float: left;
|
||||
}
|
||||
|
||||
/*Configure ACL dialog*/
|
||||
/*Configure ACL dialog / VM tier list view dialog*/
|
||||
.ui-dialog.configure-acl .multi-edit {
|
||||
width: 866px;
|
||||
}
|
||||
|
|
@ -9657,12 +9657,16 @@ div.panel.ui-dialog div.list-view div.fixed-header {
|
|||
}
|
||||
|
||||
.ui-dialog.configure-acl .ui-dialog-buttonpane {
|
||||
/*+placement:shift 798px -2px;*/
|
||||
/*+placement:shift 722px -2px;*/
|
||||
position: relative;
|
||||
left: 798px;
|
||||
left: 722px;
|
||||
top: -2px;
|
||||
}
|
||||
|
||||
.ui-dialog.configure-acl div.view.list-view {
|
||||
max-height: 474px;
|
||||
}
|
||||
|
||||
.ui-dialog.configure-acl .multi-edit .data {
|
||||
width: 901px;
|
||||
padding: 0;
|
||||
|
|
@ -9677,12 +9681,30 @@ div.panel.ui-dialog div.list-view div.fixed-header {
|
|||
max-width: none !important;
|
||||
}
|
||||
|
||||
.ui-dialog.configure-acl .view.list-view table.body tr td.actions {
|
||||
width: 184px !important;
|
||||
max-width: 184px !important;
|
||||
}
|
||||
|
||||
/*Autoscaler*/
|
||||
.ui-dialog div.autoscaler {
|
||||
overflow: auto;
|
||||
max-height: 600px;
|
||||
}
|
||||
|
||||
.ui-dialog div.autoscaler .detail-actions {
|
||||
}
|
||||
|
||||
.ui-dialog div.autoscaler .detail-actions .buttons {
|
||||
float: right;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.ui-dialog div.autoscaler .detail-actions .buttons .action {
|
||||
width: 32px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ui-dialog div.autoscaler div.form-container div.form-item[rel=securityGroups] {
|
||||
display: block;
|
||||
width: 370px;
|
||||
|
|
|
|||
47
ui/index.jsp
47
ui/index.jsp
|
|
@ -5,7 +5,6 @@
|
|||
</c:if>
|
||||
<fmt:setBundle basename="resources/messages"/>
|
||||
<% long now = System.currentTimeMillis(); %>
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
|
@ -17,7 +16,6 @@
|
|||
<c:if test="${!empty cookie.lang && cookie.lang.value != 'en'}">
|
||||
<link type="text/css" rel="stylesheet" href="css/cloudstack3.${cookie.lang.value}.css" />
|
||||
</c:if>
|
||||
|
||||
<!--[if IE 7]>
|
||||
<link type="text/css" rel="stylesheet" href="css/cloudstack3-ie7.css" />
|
||||
<![endif]-->
|
||||
|
|
@ -37,22 +35,18 @@
|
|||
<label for="username"><fmt:message key="label.username"/></label>
|
||||
<input type="text" name="username" class="required" />
|
||||
</div>
|
||||
|
||||
<!-- Password -->
|
||||
<div class="field password">
|
||||
<label for="password"><fmt:message key="label.password"/></label>
|
||||
<input type="password" name="password" class="required" />
|
||||
</div>
|
||||
|
||||
<!-- Domain -->
|
||||
<div class="field domain">
|
||||
<label for="domain"><fmt:message key="label.domain"/></label>
|
||||
<input type="text" name="domain" />
|
||||
</div>
|
||||
|
||||
<!-- Submit (login) -->
|
||||
<input type="submit" value="<fmt:message key="label.login"/>" />
|
||||
|
||||
<!-- Select language -->
|
||||
<div class="select-language">
|
||||
<select name="language">
|
||||
|
|
@ -65,7 +59,6 @@
|
|||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Instance wizard -->
|
||||
<div class="multi-wizard instance-wizard">
|
||||
<div class="progress">
|
||||
|
|
@ -94,7 +87,6 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Select template -->
|
||||
<div class="section select-template">
|
||||
<h3><fmt:message key="label.select.iso.or.template" /></h3>
|
||||
|
|
@ -282,7 +274,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 5c: Select security group -->
|
||||
<div class="wizard-step-conditional select-security-group">
|
||||
<div class="main-desc">
|
||||
|
|
@ -294,7 +285,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 6: Review -->
|
||||
<div class="step review" wizard-step-id="review">
|
||||
<div class="main-desc">
|
||||
|
|
@ -311,7 +301,6 @@
|
|||
<input type="text" name="displayname" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Add to group -->
|
||||
<div class="select odd">
|
||||
<div class="name">
|
||||
|
|
@ -321,7 +310,6 @@
|
|||
<input type="text" name="groupname" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Zone -->
|
||||
<div class="select">
|
||||
<div class="name">
|
||||
|
|
@ -334,7 +322,6 @@
|
|||
<a href="1"><fmt:message key="label.edit"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Hypervisor -->
|
||||
<div class="select odd">
|
||||
<div class="name">
|
||||
|
|
@ -347,7 +334,6 @@
|
|||
<a href="1"><fmt:message key="label.edit"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Template -->
|
||||
<div class="select">
|
||||
<div class="name">
|
||||
|
|
@ -360,7 +346,6 @@
|
|||
<a href="2"><fmt:message key="label.edit"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Service offering -->
|
||||
<div class="select odd">
|
||||
<div class="name">
|
||||
|
|
@ -373,7 +358,6 @@
|
|||
<a href="3"><fmt:message key="label.edit"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Data disk offering -->
|
||||
<div class="select">
|
||||
<div class="name">
|
||||
|
|
@ -386,7 +370,6 @@
|
|||
<a href="4"><fmt:message key="label.edit"/></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Primary network -->
|
||||
<div class="select odd">
|
||||
<div class="name">
|
||||
|
|
@ -404,7 +387,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- Computer diagram -->
|
||||
<div class="diagram">
|
||||
<div>
|
||||
|
|
@ -417,7 +399,6 @@
|
|||
<div class="part hd"></div>
|
||||
<div class="part network-card"></div>
|
||||
</div>
|
||||
|
||||
<!-- Buttons -->
|
||||
<div class="buttons">
|
||||
<div class="button previous"><span><fmt:message key="label.previous"/></span></div>
|
||||
|
|
@ -425,7 +406,6 @@
|
|||
<div class="button next"><span><fmt:message key="label.next"/></span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Zone wizard -->
|
||||
<div class="multi-wizard zone-wizard">
|
||||
<div class="progress">
|
||||
|
|
@ -471,7 +451,6 @@
|
|||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Step 2: Add zone -->
|
||||
<div class="setup-zone" zone-wizard-form="zone"
|
||||
zone-wizard-step-id="addZone">
|
||||
|
|
@ -482,7 +461,6 @@
|
|||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 3.1: Setup Physical Network -->
|
||||
<div class="setup-physical-network"
|
||||
zone-wizard-step-id="setupPhysicalNetwork"
|
||||
|
|
@ -501,7 +479,6 @@
|
|||
<fmt:message key="message.setup.physical.network.during.zone.creation.basic"/>
|
||||
</div>
|
||||
<div class="button add new-physical-network"><span class="icon"> </span><span><fmt:message key="label.add.physical.network"/></span></div>
|
||||
|
||||
<!-- Traffic types drag area -->
|
||||
<div class="traffic-types-drag-area">
|
||||
<div class="header"><fmt:message key="label.traffic.types"/></div>
|
||||
|
|
@ -576,13 +553,11 @@
|
|||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="drag-helper-icon"></div>
|
||||
<div class="content input-area">
|
||||
<form></form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 3.1b: Add Netscaler device -->
|
||||
<div class="setup-physical-network-basic"
|
||||
zone-wizard-step-id="addNetscalerDevice"
|
||||
|
|
@ -595,13 +570,11 @@
|
|||
<li class="guest-traffic"><fmt:message key="label.guest.traffic"/></li>
|
||||
<li class="conditional storage-traffic"><fmt:message key="label.storage.traffic"/></li>
|
||||
</ul>
|
||||
|
||||
<div class="info-desc"><fmt:message key="label.please.specify.netscaler.info"/></div>
|
||||
<div class="content input-area">
|
||||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 3.2: Configure public traffic -->
|
||||
<div class="setup-public-traffic" zone-wizard-prefilter="addPublicNetwork"
|
||||
zone-wizard-step-id="configurePublicTraffic">
|
||||
|
|
@ -612,14 +585,12 @@
|
|||
<li class="guest-traffic"><fmt:message key="label.guest.traffic"/></li>
|
||||
<li class="conditional storage-traffic"><fmt:message key="label.storage.traffic"/></li>
|
||||
</ul>
|
||||
|
||||
<div class="info-desc" id="add_zone_public_traffic_desc">
|
||||
<span id="for_basic_zone" style="display:none"><fmt:message key="message.public.traffic.in.basic.zone"/></span>
|
||||
<span id="for_advanced_zone" style="display:none"><fmt:message key="message.public.traffic.in.advanced.zone"/></span>
|
||||
</div>
|
||||
<div ui-custom="publicTrafficIPRange"></div>
|
||||
</div>
|
||||
|
||||
<!-- Step 3.3: Add pod -->
|
||||
<div class="add-pod" zone-wizard-form="pod"
|
||||
zone-wizard-step-id="addPod">
|
||||
|
|
@ -630,7 +601,6 @@
|
|||
<li class="guest-traffic"><fmt:message key="label.guest.traffic"/></li>
|
||||
<li class="conditional storage-traffic"><fmt:message key="label.storage.traffic"/></li>
|
||||
</ul>
|
||||
|
||||
<div class="info-desc">
|
||||
<fmt:message key="message.add.pod.during.zone.creation"/>
|
||||
</div>
|
||||
|
|
@ -638,7 +608,6 @@
|
|||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 3.4: Configure guest traffic -->
|
||||
<div class="setup-guest-traffic"
|
||||
zone-wizard-form="guestTraffic"
|
||||
|
|
@ -651,7 +620,6 @@
|
|||
<li class="guest-traffic active"><fmt:message key="label.guest.traffic"/></li>
|
||||
<li class="conditional storage-traffic"><fmt:message key="label.storage.traffic"/></li>
|
||||
</ul>
|
||||
|
||||
<div class="info-desc" id="add_zone_guest_traffic_desc">
|
||||
<span id="for_basic_zone" style="display:none"><fmt:message key="message.guest.traffic.in.basic.zone"/></span>
|
||||
<span id="for_advanced_zone" style="display:none"><fmt:message key="message.guest.traffic.in.advanced.zone"/></span>
|
||||
|
|
@ -660,7 +628,6 @@
|
|||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 3.5: Configure storage traffic -->
|
||||
<div class="setup-storage-traffic" zone-wizard-prefilter="configureStorageTraffic"
|
||||
zone-wizard-step-id="configureStorageTraffic">
|
||||
|
|
@ -671,13 +638,11 @@
|
|||
<li class="guest-traffic"><fmt:message key="label.guest.traffic"/></li>
|
||||
<li class="storage-traffic active"><fmt:message key="label.storage.traffic"/></li>
|
||||
</ul>
|
||||
|
||||
<div class="info-desc">
|
||||
<fmt:message key="message.storage.traffic"/>
|
||||
</div>
|
||||
<div ui-custom="storageTrafficIPRange"></div>
|
||||
</div>
|
||||
|
||||
<!-- Step 4.1: Add cluster -->
|
||||
<div class="add-cluster" zone-wizard-form="cluster"
|
||||
zone-wizard-step-id="addCluster">
|
||||
|
|
@ -695,7 +660,6 @@
|
|||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 4.2: Add host -->
|
||||
<div class="add-cluster" zone-wizard-form="host"
|
||||
zone-wizard-step-id="addHost" zone-wizard-prefilter="addHost">
|
||||
|
|
@ -712,7 +676,6 @@
|
|||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 4.3: Add primary storage -->
|
||||
<div class="add-cluster" zone-wizard-form="primaryStorage" zone-wizard-prefilter="addPrimaryStorage"
|
||||
zone-wizard-step-id="addPrimaryStorage">
|
||||
|
|
@ -729,7 +692,6 @@
|
|||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 4.4: Add secondary storage -->
|
||||
<div class="add-cluster" zone-wizard-form="secondaryStorage"
|
||||
zone-wizard-step-id="addSecondaryStorage">
|
||||
|
|
@ -746,7 +708,6 @@
|
|||
<div class="select-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Step 5: Launch -->
|
||||
<div class="review" zone-wizard-step-id="launch">
|
||||
<div class="main-desc pre-setup"><fmt:message key="message.launch.zone"/></div>
|
||||
|
|
@ -760,7 +721,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Buttons -->
|
||||
<div class="buttons">
|
||||
<div class="button previous"><span><fmt:message key="label.previous"/></span></div>
|
||||
|
|
@ -768,7 +728,6 @@
|
|||
<div class="button next"><span><fmt:message key="label.next"/></span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Network chart -->
|
||||
<div class="network-chart normal">
|
||||
<ul>
|
||||
|
|
@ -786,7 +745,6 @@
|
|||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Static NAT network chart -->
|
||||
<div class="network-chart static-nat">
|
||||
<ul>
|
||||
|
|
@ -801,7 +759,6 @@
|
|||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Project dashboard -->
|
||||
<div class="project-dashboard-view">
|
||||
<div class="overview-area">
|
||||
|
|
@ -869,7 +826,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-boxes">
|
||||
<!-- Networking and security -->
|
||||
<div class="info-box networking-and-security">
|
||||
|
|
@ -913,7 +869,6 @@
|
|||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Events -->
|
||||
<div class="info-box events">
|
||||
<div class="title">
|
||||
|
|
@ -932,7 +887,6 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- System dashboard -->
|
||||
<div class="system-dashboard-view">
|
||||
<div class="toolbar">
|
||||
|
|
@ -1652,6 +1606,7 @@
|
|||
</html>
|
||||
<script language="javascript">
|
||||
dictionary = {
|
||||
'label.tier.details': '<fmt:message key="label.tier.details"/>',
|
||||
'label.edit.tags': '<fmt:message key="label.edit.tags"/>',
|
||||
'label.network.rate.megabytes': '<fmt:message key="label.network.rate.megabytes"/>',
|
||||
'message.setup.physical.network.during.zone.creation.basic': '<fmt:message key="message.setup.physical.network.during.zone.creation.basic"/>',
|
||||
|
|
|
|||
|
|
@ -17,6 +17,78 @@
|
|||
var totalScaleDownCondition = 0;
|
||||
|
||||
cloudStack.autoscaler = {
|
||||
// UI actions to appear in dialog
|
||||
autoscaleActions: {
|
||||
enable: {
|
||||
label: 'Enable Autoscale VM Group',
|
||||
action: function(args) {
|
||||
$.ajax({
|
||||
url: createURL('enableAutoScaleVmGroup'),
|
||||
data: {
|
||||
id: args.context.originalAutoscaleData.context.autoscaleVmGroup.id
|
||||
},
|
||||
success: function(json) {
|
||||
var jid = json.enableautoscalevmGroupresponse.jobid;
|
||||
args.response.success({
|
||||
_custom: {
|
||||
jobId: jid,
|
||||
getUpdatedItem: function(json) {
|
||||
return json.queryasyncjobresultresponse.jobresult.autoscalevmgroup;
|
||||
},
|
||||
getActionFilter: function() {
|
||||
return cloudStack.autoscaler.actionFilter;
|
||||
}
|
||||
},
|
||||
notification: {
|
||||
poll: pollAsyncJobResult
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
disable: {
|
||||
label: 'Disable Autoscale VM Group',
|
||||
action: function(args) {
|
||||
$.ajax({
|
||||
url: createURL('disableAutoScaleVmGroup'),
|
||||
data: {
|
||||
id: args.context.originalAutoscaleData.context.autoscaleVmGroup.id
|
||||
},
|
||||
success: function(json) {
|
||||
var jid = json.disableautoscalevmGroupresponse.jobid;
|
||||
args.response.success({
|
||||
_custom: {
|
||||
jobId: jid,
|
||||
getUpdatedItem: function(json) {
|
||||
return json.queryasyncjobresultresponse.jobresult.autoscalevmgroup;
|
||||
},
|
||||
getActionFilter: function() {
|
||||
return cloudStack.autoscaler.actionFilter;
|
||||
}
|
||||
},
|
||||
notification: {
|
||||
poll: pollAsyncJobResult
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
actionFilter: function(args) {
|
||||
var allowedActions = [];
|
||||
if(args.context.originalAutoscaleData == null) { //new LB rule
|
||||
//no actions for new LB rule
|
||||
}
|
||||
else { //existing LB rule
|
||||
if(args.context.originalAutoscaleData[0].context.autoscaleVmGroup.state == 'disabled')
|
||||
allowedActions.push('enable');
|
||||
else if(args.context.originalAutoscaleData[0].context.autoscaleVmGroup.state == 'enabled')
|
||||
allowedActions.push('disable');
|
||||
}
|
||||
return allowedActions;
|
||||
},
|
||||
dataProvider: function(args) {
|
||||
// Reset data
|
||||
scaleUpData = [];
|
||||
|
|
@ -31,6 +103,7 @@
|
|||
$.ajax({
|
||||
url: createURL('listAutoScaleVmGroups'),
|
||||
data: {
|
||||
listAll: true,
|
||||
lbruleid: args.context.multiRules[0].id
|
||||
},
|
||||
success: function(json) {
|
||||
|
|
@ -39,6 +112,7 @@
|
|||
$.ajax({
|
||||
url: createURL('listAutoScaleVmProfiles'),
|
||||
data: {
|
||||
listAll: true,
|
||||
id: autoscaleVmGroup.vmprofileid
|
||||
},
|
||||
success: function(json) {
|
||||
|
|
@ -76,15 +150,17 @@
|
|||
|
||||
var diskOfferingId, securityGroups;
|
||||
var otherdeployparams = autoscaleVmProfile.otherdeployparams;
|
||||
var array1 = otherdeployparams.split('&');
|
||||
$(array1).each(function(){
|
||||
var array2 = this.split('=');
|
||||
if(array2[0] == 'diskofferingid')
|
||||
diskOfferingId= array2[1];
|
||||
if(array2[0] == 'securitygroupids')
|
||||
securityGroups = array2[1];
|
||||
});
|
||||
|
||||
if(otherdeployparams != null && otherdeployparams.length > 0) {
|
||||
var array1 = otherdeployparams.split('&');
|
||||
$(array1).each(function(){
|
||||
var array2 = this.split('=');
|
||||
if(array2[0] == 'diskofferingid')
|
||||
diskOfferingId= array2[1];
|
||||
if(array2[0] == 'securitygroupids')
|
||||
securityGroups = array2[1];
|
||||
});
|
||||
}
|
||||
|
||||
var originalAutoscaleData = {
|
||||
templateNames: autoscaleVmProfile.templateid,
|
||||
serviceOfferingId: autoscaleVmProfile.serviceofferingid,
|
||||
|
|
@ -337,25 +413,50 @@
|
|||
label: 'User',
|
||||
select: function(args) {
|
||||
var items = [];
|
||||
if(isAdmin() || isDomainAdmin()) {
|
||||
$.ajax({
|
||||
url: createURL('listUsers'),
|
||||
data: {
|
||||
domainid: g_domainid,
|
||||
account: g_account
|
||||
},
|
||||
success: function(json) {
|
||||
var users = json.listusersresponse.user;
|
||||
$(users).each(function(){
|
||||
items.push({id: this.id, description: this.username});
|
||||
});
|
||||
args.response.success({ data: items });
|
||||
}
|
||||
});
|
||||
}
|
||||
else { //regular user doesn't have access to listUers API call.
|
||||
items.push({id: "", description: ""});
|
||||
}
|
||||
if(args.context.originalAutoscaleData == null) { //new LB rule
|
||||
if(isAdmin() || isDomainAdmin()) {
|
||||
$.ajax({
|
||||
url: createURL('listUsers'),
|
||||
data: {
|
||||
domainid: g_domainid,
|
||||
account: g_account
|
||||
},
|
||||
success: function(json) {
|
||||
var users = json.listusersresponse.user;
|
||||
$(users).each(function(){
|
||||
items.push({id: this.id, description: this.username});
|
||||
});
|
||||
args.response.success({ data: items });
|
||||
}
|
||||
});
|
||||
}
|
||||
else { //regular user doesn't have access to listUers API call.
|
||||
items.push({id: "", description: ""});
|
||||
args.response.success({ data: items });
|
||||
}
|
||||
}
|
||||
else { //existing LB rule
|
||||
if(isAdmin() || isDomainAdmin()) {
|
||||
$.ajax({
|
||||
url: createURL('listUsers'),
|
||||
data: {
|
||||
domainid: args.context.originalAutoscaleData.context.autoscaleVmProfile.domainid,
|
||||
account: args.context.originalAutoscaleData.context.autoscaleVmProfile.account
|
||||
},
|
||||
success: function(json) {
|
||||
var users = json.listusersresponse.user;
|
||||
$(users).each(function(){
|
||||
items.push({id: this.id, description: this.username});
|
||||
});
|
||||
args.response.success({ data: items });
|
||||
}
|
||||
});
|
||||
}
|
||||
else { //regular user doesn't have access to listUers API call.
|
||||
items.push({id: "", description: ""});
|
||||
args.response.success({ data: items });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -1005,7 +1106,7 @@
|
|||
array1.push("&destroyvmgraceperiod=" + args.data.destroyVMgracePeriod);
|
||||
array1.push("&snmpcommunity=" + args.data.snmpCommunity);
|
||||
array1.push("&snmpport=" + args.data.snmpPort);
|
||||
if(args.data.username != "")
|
||||
if(args.data.username != null && args.data.username.length > 0)
|
||||
array1.push("&autoscaleuserid=" + args.data.username);
|
||||
|
||||
$.ajax({
|
||||
|
|
@ -1156,7 +1257,9 @@
|
|||
id: args.context.originalAutoscaleData.context.autoscaleVmGroup.id,
|
||||
minmembers: args.data.minInstance,
|
||||
maxmembers: args.data.maxInstance,
|
||||
interval: args.data.interval
|
||||
interval: args.data.interval,
|
||||
scaleuppolicyids: args.context.originalAutoscaleData.scaleUpPolicy.id,
|
||||
scaledownpolicyids: args.context.originalAutoscaleData.scaleDownPolicy.id
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
|
|
|
|||
|
|
@ -2279,6 +2279,7 @@
|
|||
'autoScale': {
|
||||
label: 'AutoScale',
|
||||
custom: {
|
||||
requireValidation: true,
|
||||
buttonLabel: 'label.configure',
|
||||
action: cloudStack.uiCustom.autoscaler(cloudStack.autoscaler)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
var scaleuppolicy = forms.scaleUpPolicy;
|
||||
var scaledownpolicy = forms.scaleDownPolicy;
|
||||
var dataProvider = cloudStack.autoscaler.dataProvider;
|
||||
var actions = cloudStack.autoscaler.autoscaleActions;
|
||||
var actionFilter = cloudStack.autoscaler.actionFilter;
|
||||
|
||||
return function(args) {
|
||||
var context = args.data ?
|
||||
|
|
@ -51,6 +53,91 @@
|
|||
scaleDownPolicyTitleForm, $scaleDownPolicyTitleForm,
|
||||
scaleUpPolicyForm, scaleDownPolicyForm;
|
||||
|
||||
var renderActions = function(args) {
|
||||
var data = args.data;
|
||||
var context = args.context;
|
||||
var $actions = $('<div>').addClass('detail-group');
|
||||
var $actionsTable = $('<table>').append('<tr>');
|
||||
var $detailActions = $('<td>').addClass('detail-actions');
|
||||
var $buttons = $('<div>').addClass('buttons');
|
||||
var visibleActions = actionFilter ?
|
||||
actionFilter({
|
||||
context: $.extend(true, {}, context, {
|
||||
originalAutoscaleData: data ? [data] : null
|
||||
})
|
||||
}) :
|
||||
$.map(actions, function(value, key) { return key; });
|
||||
|
||||
$detailActions.append($buttons);
|
||||
$actionsTable.find('tr').append($detailActions);
|
||||
$actions.append($actionsTable);
|
||||
|
||||
$(visibleActions).map(function(index, actionID) {
|
||||
var action = actions[actionID];
|
||||
var label = _l(action.label);
|
||||
var $action = $('<div>').addClass('action').addClass(actionID);
|
||||
var $icon = $('<a>')
|
||||
.attr({ href: '#', title: label })
|
||||
.append($('<span>').addClass('icon'));
|
||||
|
||||
if (visibleActions.length == 1) $action.addClass('single');
|
||||
else if (!index) $action.addClass('first');
|
||||
else if (index == visibleActions.length - 1) $action.addClass('last');
|
||||
|
||||
// Perform action event
|
||||
$action.click(function() {
|
||||
var $loading = $('<div>').addClass('loading-overlay').appendTo($autoscalerDialog);
|
||||
var success = function(args) {
|
||||
$loading.remove();
|
||||
cloudStack.dialog.notice({
|
||||
message: _l('label.task.completed') + ': ' + label
|
||||
});
|
||||
|
||||
// Reload actions
|
||||
var $newActions = renderActions({
|
||||
data: data ? $.extend(data, args.data) : args.data,
|
||||
context: context
|
||||
});
|
||||
|
||||
$actions.after($newActions);
|
||||
$actions.remove();
|
||||
};
|
||||
var error = function(message) {
|
||||
$loading.remove();
|
||||
cloudStack.dialog.notice({ message: message });
|
||||
};
|
||||
|
||||
action.action({
|
||||
context: {
|
||||
originalAutoscaleData: args.data,
|
||||
},
|
||||
response: {
|
||||
success: function(args) {
|
||||
var notification = $.extend(args.notification, {
|
||||
_custom: args._custom,
|
||||
desc: label
|
||||
});
|
||||
|
||||
cloudStack.ui.notifications.add(
|
||||
notification,
|
||||
success, {},
|
||||
error, {}
|
||||
);
|
||||
},
|
||||
error: error
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$action.append($icon);
|
||||
$action.appendTo($buttons);
|
||||
});
|
||||
|
||||
if (!visibleActions || !visibleActions.length) $actions.hide();
|
||||
|
||||
return $actions;
|
||||
};
|
||||
|
||||
var renderDialogContent = function(args) {
|
||||
var data = args.data ? args.data : {};
|
||||
|
||||
|
|
@ -69,7 +156,7 @@
|
|||
|
||||
$.extend(context, {
|
||||
originalAutoscaleData: args.data
|
||||
})
|
||||
});
|
||||
|
||||
// Create and append top fields
|
||||
// -- uses create form to generate fields
|
||||
|
|
@ -207,6 +294,9 @@
|
|||
|
||||
$autoscalerDialog.dialog('option', 'position', 'center');
|
||||
$autoscalerDialog.dialog('option', 'height', 'auto');
|
||||
|
||||
// Setup actions
|
||||
renderActions(args).prependTo($autoscalerDialog);
|
||||
};
|
||||
|
||||
var $loading = $('<div>').addClass('loading-overlay').appendTo($autoscalerDialog);
|
||||
|
|
|
|||
|
|
@ -62,7 +62,26 @@
|
|||
listViewArgs.activeSection
|
||||
] = [$instanceRow.data('jsonObj')];
|
||||
|
||||
if (action.custom && !action.noAdd) {
|
||||
var externalLinkAction = action.externalLink;
|
||||
if (externalLinkAction) {
|
||||
// Show popup immediately, do not proceed through normal action process
|
||||
window.open(
|
||||
// URL
|
||||
externalLinkAction.url({
|
||||
context: context
|
||||
}),
|
||||
|
||||
// Title
|
||||
externalLinkAction.title({
|
||||
context: context
|
||||
}),
|
||||
|
||||
// Window options
|
||||
'menubar=0,resizable=0,'
|
||||
+ 'width=' + externalLinkAction.width + ','
|
||||
+ 'height=' + externalLinkAction.height
|
||||
);
|
||||
} else if (action.custom && !action.noAdd) {
|
||||
action.custom({
|
||||
data: data,
|
||||
ref: options.ref,
|
||||
|
|
@ -250,7 +269,8 @@
|
|||
listViewArgs.activeSection
|
||||
] = [$instanceRow.data('jsonObj')];
|
||||
|
||||
if (!args.action.createForm &&
|
||||
if (!args.action.action.externalLink &&
|
||||
!args.action.createForm &&
|
||||
args.action.addRow != 'true' &&
|
||||
!action.custom && !action.uiCustom)
|
||||
cloudStack.dialog.confirm({
|
||||
|
|
@ -270,7 +290,26 @@
|
|||
var isHeader = args.action.isHeader;
|
||||
var createFormContext = $.extend({}, context);
|
||||
|
||||
if (args.action.createForm) {
|
||||
var externalLinkAction = action.externalLink;
|
||||
if (externalLinkAction) {
|
||||
// Show popup immediately, do not proceed through normal action process
|
||||
window.open(
|
||||
// URL
|
||||
externalLinkAction.url({
|
||||
context: context
|
||||
}),
|
||||
|
||||
// Title
|
||||
externalLinkAction.title({
|
||||
context: context
|
||||
}),
|
||||
|
||||
// Window options
|
||||
'menubar=0,resizable=0,'
|
||||
+ 'width=' + externalLinkAction.width + ','
|
||||
+ 'height=' + externalLinkAction.height
|
||||
);
|
||||
} else if (args.action.createForm) {
|
||||
cloudStack.dialog.createForm({
|
||||
form: args.action.createForm,
|
||||
after: function(args) {
|
||||
|
|
|
|||
|
|
@ -804,6 +804,9 @@
|
|||
$('<div>').addClass('button add-vm custom-action')
|
||||
.html(_l(field.custom.buttonLabel))
|
||||
.click(function() {
|
||||
if (field.custom.requireValidation &&
|
||||
!$multiForm.valid()) return false;
|
||||
|
||||
var formData = getMultiData($multi);
|
||||
|
||||
field.custom.action({
|
||||
|
|
@ -816,6 +819,8 @@
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
}).appendTo($td);
|
||||
} else if (field.addButton) {
|
||||
$addVM = $('<div>').addClass('button add-vm').html(
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
var aclMultiEdit = {
|
||||
noSelect: true,
|
||||
fields: {
|
||||
'cidrlist': { edit: true, label: 'label.cidr.list' },
|
||||
'cidrlist': { edit: true, label: 'label.cidr' },
|
||||
'protocol': {
|
||||
label: 'label.protocol',
|
||||
select: function(args) {
|
||||
|
|
@ -369,6 +369,21 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
viewConsole: {
|
||||
label: 'label.view.console',
|
||||
action: {
|
||||
externalLink: {
|
||||
url: function(args) {
|
||||
return clientConsoleUrl + '?cmd=access&vm=' + args.context.vpcTierInstances[0].id;
|
||||
},
|
||||
title: function(args) {
|
||||
return args.context.vpcTierInstances[0].id.substr(0,8); //title in window.open() can't have space nor longer than 8 characters. Otherwise, IE browser will have error.
|
||||
},
|
||||
width: 820,
|
||||
height: 640
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
dataProvider: function(args) {
|
||||
|
|
@ -1376,7 +1391,7 @@
|
|||
isMaximized: true,
|
||||
tabs: {
|
||||
details: {
|
||||
title: 'label.details',
|
||||
title: 'label.tier.details',
|
||||
preFilter: function(args) {
|
||||
var hiddenFields = [];
|
||||
var zone;
|
||||
|
|
|
|||
Loading…
Reference in New Issue