').addClass('title')
.append($('
').html(gpugroupObj.gpugroupname)));
//vgpu details
var $groupdetails = $('').listView({
context: args.context,
listView: {
id: 'gputypes',
hideToolbar: true,
fields: {
vgputype: {
label: 'label.vgpu.type'
},
maxvgpuperpgpu: {
label: 'label.vgpu.max.vgpu.per.gpu',
converter: function (args) {
return (args == null || args == 0) ? "" : args;
}
},
videoram: {
label: 'label.vgpu.video.ram',
converter: function (args) {
return (args == null || args == 0) ? "" : cloudStack.converters.convertBytes(args);
}
},
maxresolution: {
label: 'label.vgpu.max.resolution'
},
remainingcapacity: {
label: 'label.vgpu.remaining.capacity'
}
},
dataProvider: function (args) {
var items = gpugroupObj.vgpu.sort(function(a, b) {
return a.maxvgpuperpgpu >= b.maxvgpuperpgpu;
});
$(items).each(function () {
this.maxresolution = (this.maxresolutionx == null || this.maxresolutionx == 0
|| this.maxresolutiony == null || this.maxresolutiony == 0)
? "" : this.maxresolutionx + " x " + this.maxresolutiony;
});
args.response.success({
data: items
});
}
}
});
$groupcontainer.append($groupdetails);
$tabcontent.append($groupcontainer);
});
return $tabcontent;
}
}
}
}
}
},
'primary-storage': {
title: 'label.primary.storage',
id: 'primarystorages',
listView: {
id: 'primarystorages',
section: 'primary-storage',
fields: {
name: {
label: 'label.name',
truncate: true
},
ipaddress: {
label: 'label.server'
},
path: {
label: 'label.path',
truncate: true
},
clustername: {
label: 'label.cluster',
truncate: true
},
scope: {
label: 'label.scope'
}
},
dataProvider: function (args) {
var array1 =[];
if (args.filterBy != null) {
if (args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
switch (args.filterBy.search.by) {
case "name":
if (args.filterBy.search.value.length > 0)
array1.push("&keyword=" + args.filterBy.search.value);
break;
}
}
}
array1.push("&zoneid=" + args.context.zones[0].id);
if ("pods" in args.context)
array1.push("&podid=" + args.context.pods[0].id);
if ("clusters" in args.context)
array1.push("&clusterid=" + args.context.clusters[0].id);
$.ajax({
url: createURL("listStoragePools&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
dataType: "json",
async: true,
success: function (json) {
var items = json.liststoragepoolsresponse.storagepool;
args.response.success({
actionFilter: primarystorageActionfilter,
data: items
});
}
});
},
actions: {
add: {
label: 'label.add.primary.storage',
createForm: {
title: 'label.add.primary.storage',
fields: {
scope: {
label: 'label.scope',
select: function (args) {
var scope =[ {
id: 'cluster',
description: _l('label.cluster')
},
{
id: 'zone',
description: _l('label.zone.wide')
}
// { id: 'host', description: _l('label.host') }
];
args.response.success({
data: scope
});
args.$select.change(function () {
var $form = $(this).closest('form');
var scope = $(this).val();
if (scope == 'zone') {
$form.find('.form-item[rel=podId]').hide();
$form.find('.form-item[rel=clusterId]').hide();
$form.find('.form-item[rel=hostId]').hide();
$form.find('.form-item[rel=hypervisor]').css('display', 'inline-block');
} else if (scope == 'cluster') {
$form.find('.form-item[rel=hostId]').hide();
$form.find('.form-item[rel=podId]').css('display', 'inline-block');
$form.find('.form-item[rel=clusterId]').css('display', 'inline-block');
$form.find('.form-item[rel=hypervisor]').hide();
} else if (scope == 'host') {
$form.find('.form-item[rel=podId]').css('display', 'inline-block');
$form.find('.form-item[rel=clusterId]').css('display', 'inline-block');
$form.find('.form-item[rel=hostId]').css('display', 'inline-block');
$form.find('.form-item[rel=hypervisor]').hide();
}
})
}
},
hypervisor: {
label: 'label.hypervisor',
isHidden: true,
select: function (args) {
var items =[];
items.push({
id: 'KVM',
description: _l('KVM')
});
items.push({
id: 'VMware',
description: _l('VMware')
});
items.push({
id: 'Hyperv',
description: _l('Hyperv')
});
args.response.success({
data: items
});
}
},
zoneid: {
label: 'label.zone',
docID: 'helpPrimaryStorageZone',
validation: {
required: true
},
select: function (args) {
var data = args.context.zones ? {
id: args.context.zones[0].id
}: {
listAll: true
};
$.ajax({
url: createURL('listZones'),
data: data,
success: function (json) {
var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[];
args.response.success({
data: $.map(zones, function (zone) {
return {
id: zone.id,
description: zone.name
};
})
});
}
});
}
},
podId: {
label: 'label.pod',
dependsOn: 'zoneid',
docID: 'helpPrimaryStoragePod',
validation: {
required: true
},
select: function (args) {
$.ajax({
url: createURL("listPods&zoneid=" + args.zoneid),
dataType: "json",
async: true,
success: function (json) {
var pods = json.listpodsresponse.pod;
var items =[];
$(pods).each(function () {
items.push({
id: this.id,
description: this.name
});
});
args.response.success({
data: items
});
}
});
}
},
clusterId: {
label: 'label.cluster',
docID: 'helpPrimaryStorageCluster',
validation: {
required: true
},
dependsOn: 'podId',
select: function (args) {
$.ajax({
url: createURL("listClusters&podid=" + args.podId),
dataType: "json",
async: false,
success: function (json) {
clusterObjs = json.listclustersresponse.cluster;
var items =[];
$(clusterObjs).each(function () {
items.push({
id: this.id,
description: this.name
});
});
args.response.success({
actionFilter: clusterActionfilter,
data: items
});
}
});
}
},
hostId: {
label: 'label.host',
validation: {
required: true
},
dependsOn: 'clusterId',
select: function (args) {
$.ajax({
url: createURL('listHosts'),
data: {
clusterid: args.clusterId
},
success: function (json) {
var hosts = json.listhostsresponse.host ?
json.listhostsresponse.host:[]
args.response.success({
data: $.map(hosts, function (host) {
return {
id: host.id,
description: host.name
}
})
});
}
});
}
},
name: {
label: 'label.name',
docID: 'helpPrimaryStorageName',
validation: {
required: true
}
},
protocol: {
label: 'label.protocol',
docID: 'helpPrimaryStorageProtocol',
validation: {
required: true
},
dependsOn: 'clusterId',
select: function (args) {
var clusterId = args.clusterId;
if (clusterId == null || clusterId.length == 0) {
args.response.success({
data: []
});
return;
}
$(clusterObjs).each(function () {
if (this.id == clusterId) {
selectedClusterObj = this;
return false; //break the $.each() loop
}
});
if (selectedClusterObj.hypervisortype == "KVM") {
var items =[];
items.push({
id: "nfs",
description: "nfs"
});
items.push({
id: "SharedMountPoint",
description: "SharedMountPoint"
});
items.push({
id: "rbd",
description: "RBD"
});
items.push({
id: "clvm",
description: "CLVM"
});
items.push({
id: "gluster",
description: "Gluster"
});
args.response.success({
data: items
});
} else if (selectedClusterObj.hypervisortype == "XenServer") {
var items =[];
items.push({
id: "nfs",
description: "nfs"
});
items.push({
id: "PreSetup",
description: "PreSetup"
});
items.push({
id: "iscsi",
description: "iscsi"
});
args.response.success({
data: items
});
} else if (selectedClusterObj.hypervisortype == "VMware") {
var items =[];
items.push({
id: "nfs",
description: "nfs"
});
items.push({
id: "vmfs",
description: "vmfs"
});
args.response.success({
data: items
});
} else if (selectedClusterObj.hypervisortype == "Hyperv") {
var items =[];
items.push({
id: "SMB",
description: "SMB/CIFS"
});
args.response.success({
data: items
});
} else if (selectedClusterObj.hypervisortype == "Ovm") {
var items =[];
items.push({
id: "nfs",
description: "nfs"
});
items.push({
id: "ocfs2",
description: "ocfs2"
});
args.response.success({
data: items
});
} else if (selectedClusterObj.hypervisortype == "LXC") {
var items =[];
items.push({
id: "nfs",
description: "nfs"
});
items.push({
id: "SharedMountPoint",
description: "SharedMountPoint"
});
args.response.success({
data: items
});
} else {
args.response.success({
data:[]
});
}
args.$select.change(function () {
var $form = $(this).closest('form');
var protocol = $(this).val();
if (protocol == null)
return;
if (protocol == "nfs") {
$form.find('.form-item[rel=server]').css('display', 'inline-block');
$form.find('.form-item[rel=server]').find(".value").find("input").val("");
$form.find('.form-item[rel=path]').css('display', 'inline-block');
var $required = $form.find('.form-item[rel=path]').find(".name").find("label span");
$form.find('.form-item[rel=path]').find(".name").find("label").text('label.path'+":").prepend($required);
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "SMB") {
//"SMB" show almost the same fields as "nfs" does, except 3 more SMB-specific fields.
$form.find('.form-item[rel=server]').css('display', 'inline-block');
$form.find('.form-item[rel=server]').find(".value").find("input").val("");
$form.find('.form-item[rel=path]').css('display', 'inline-block');
var $required = $form.find('.form-item[rel=path]').find(".name").find("label span");
$form.find('.form-item[rel=path]').find(".name").find("label").text('label.path'+":").prepend($required);
$form.find('.form-item[rel=smbUsername]').css('display', 'inline-block');
$form.find('.form-item[rel=smbPassword]').css('display', 'inline-block');
$form.find('.form-item[rel=smbDomain]').css('display', 'inline-block');
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "ocfs2") {
//ocfs2 is the same as nfs, except no server field.
$form.find('.form-item[rel=server]').hide();
$form.find('.form-item[rel=server]').find(".value").find("input").val("");
$form.find('.form-item[rel=path]').css('display', 'inline-block');
var $required = $form.find('.form-item[rel=path]').find(".name").find("label span");
$form.find('.form-item[rel=path]').find(".name").find("label").text('label.path'+":").prepend($required);
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "PreSetup") {
$form.find('.form-item[rel=server]').hide();
$form.find('.form-item[rel=server]').find(".value").find("input").val("localhost");
$form.find('.form-item[rel=path]').css('display', 'inline-block');
var $required = $form.find('.form-item[rel=path]').find(".name").find("label span");
$form.find('.form-item[rel=path]').find(".name").find("label").text('label.SR.name'+":").prepend($required);
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "iscsi") {
$form.find('.form-item[rel=server]').css('display', 'inline-block');
$form.find('.form-item[rel=server]').find(".value").find("input").val("");
$form.find('.form-item[rel=path]').hide();
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').css('display', 'inline-block');
$form.find('.form-item[rel=lun]').css('display', 'inline-block');
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if ($(this).val() == "clvm") {
$form.find('.form-item[rel=server]').hide();
$form.find('.form-item[rel=server]').find(".value").find("input").val("localhost");
$form.find('.form-item[rel=path]').hide();
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').css('display', 'inline-block');
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "vmfs") {
$form.find('.form-item[rel=server]').css('display', 'inline-block');
$form.find('.form-item[rel=server]').find(".value").find("input").val("");
$form.find('.form-item[rel=path]').hide();
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').css('display', 'inline-block');
$form.find('.form-item[rel=vCenterDataStore]').css('display', 'inline-block');
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "SharedMountPoint") {
//"SharedMountPoint" show the same fields as "nfs" does.
$form.find('.form-item[rel=server]').hide();
$form.find('.form-item[rel=server]').find(".value").find("input").val("localhost");
$form.find('.form-item[rel=path]').css('display', 'inline-block');
var $required = $form.find('.form-item[rel=path]').find(".name").find("label span");
$form.find('.form-item[rel=path]').find(".name").find("label").text('label.path'+":").prepend($required);
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "rbd") {
$form.find('.form-item[rel=rbdmonitor]').css('display', 'inline-block');
$form.find('.form-item[rel=rbdmonitor]').find(".name").find("label").text("RADOS Monitor:");
$form.find('.form-item[rel=rbdpool]').css('display', 'inline-block');
$form.find('.form-item[rel=rbdpool]').find(".name").find("label").text("RADOS Pool:");
$form.find('.form-item[rel=rbdid]').css('display', 'inline-block');
$form.find('.form-item[rel=rbdid]').find(".name").find("label").text("RADOS User:");
$form.find('.form-item[rel=rbdsecret]').css('display', 'inline-block');
$form.find('.form-item[rel=rbdsecret]').find(".name").find("label").text("RADOS Secret:");
$form.find('.form-item[rel=server]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=path]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
} else if (protocol == "gluster") {
$form.find('.form-item[rel=server]').css('display', 'inline-block');
$form.find('.form-item[rel=server]').find(".value").find("input");
$form.find('.form-item[rel=glustervolume]').css('display', 'inline-block');
$form.find('.form-item[rel=glustervolume]').find(".name").find("label").text("Volume:");
$form.find('.form-item[rel=path]').hide();
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
} else {
$form.find('.form-item[rel=server]').css('display', 'inline-block');
$form.find('.form-item[rel=server]').find(".value").find("input").val("");
$form.find('.form-item[rel=iqn]').hide();
$form.find('.form-item[rel=lun]').hide();
$form.find('.form-item[rel=volumegroup]').hide();
$form.find('.form-item[rel=vCenterDataCenter]').hide();
$form.find('.form-item[rel=vCenterDataStore]').hide();
$form.find('.form-item[rel=rbdmonitor]').hide();
$form.find('.form-item[rel=rbdpool]').hide();
$form.find('.form-item[rel=rbdid]').hide();
$form.find('.form-item[rel=rbdsecret]').hide();
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
$form.find('.form-item[rel=glustervolume]').hide();
}
});
args.$select.trigger("change");
}
},
//always appear (end)
server: {
label: 'label.server',
docID: 'helpPrimaryStorageServer',
validation: {
required: true
},
isHidden: true
},
//nfs
path: {
label: 'label.path',
docID: 'helpPrimaryStoragePath',
validation: {
required: true
},
isHidden: true
},
//SMB
smbUsername: {
label: 'label.smb.username',
validation: {
required: true
},
isHidden: true
},
smbPassword: {
label: 'label.smb.password',
isPassword: true,
validation: {
required: true
},
isHidden: true
},
smbDomain: {
label: 'label.smb.domain',
validation: {
required: true
},
isHidden: true
},
//iscsi
iqn: {
label: 'label.target.iqn',
docID: 'helpPrimaryStorageTargetIQN',
validation: {
required: true
},
isHidden: true
},
lun: {
label: 'label.LUN.number',
docID: 'helpPrimaryStorageLun',
validation: {
required: true
},
isHidden: true
},
//clvm
volumegroup: {
label: 'label.volgroup',
validation: {
required: true
},
isHidden: true
},
//vmfs
vCenterDataCenter: {
label: 'label.vcenter.datacenter',
validation: {
required: true
},
isHidden: true
},
vCenterDataStore: {
label: 'label.vcenter.datastore',
validation: {
required: true
},
isHidden: true
},
// RBD
rbdmonitor: {
label: 'label.rbd.monitor',
docID: 'helpPrimaryStorageRBDMonitor',
validation: {
required: true
},
isHidden: true
},
rbdpool: {
label: 'label.rbd.pool',
docID: 'helpPrimaryStorageRBDPool',
validation: {
required: true
},
isHidden: true
},
rbdid: {
label: 'label.rbd.id',
docID: 'helpPrimaryStorageRBDId',
validation: {
required: false
},
isHidden: true
},
rbdsecret: {
label: 'label.rbd.secret',
docID: 'helpPrimaryStorageRBDSecret',
validation: {
required: false
},
isHidden: true
},
//gluster
glustervolume: {
label: 'label.gluster.volume',
validation: {
required: true
},
isHidden: true
},
//always appear (begin)
storageTags: {
label: 'label.storage.tags',
docID: 'helpPrimaryStorageTags',
validation: {
required: false
}
}
//always appear (end)
}
},
action: function (args) {
var array1 =[];
array1.push("&scope=" + todb(args.data.scope));
array1.push("&zoneid=" + args.data.zoneid);
if (args.data.scope == 'zone') {
array1.push("&hypervisor=" + args.data.hypervisor);
}
if (args.data.scope == 'cluster') {
array1.push("&podid=" + args.data.podId);
array1.push("&clusterid=" + args.data.clusterId);
}
if (args.data.scope == 'host') {
array1.push("&podid=" + args.data.podId);
array1.push("&clusterid=" + args.data.clusterId);
array1.push("&hostid=" + args.data.hostId);
}
array1.push("&name=" + todb(args.data.name));
var server = args.data.server;
var url = null;
if (args.data.protocol == "nfs") {
var path = args.data.path;
if (path.substring(0, 1) != "/")
path = "/" + path;
url = nfsURL(server, path);
} else if (args.data.protocol == "SMB") {
var path = args.data.path;
if (path.substring(0, 1) != "/")
path = "/" + path;
url = smbURL(server, path);
array1.push("&details[0].user=" + args.data.smbUsername);
array1.push("&details[1].password=" + todb(args.data.smbPassword));
array1.push("&details[2].domain=" + args.data.smbDomain);
} else if (args.data.protocol == "PreSetup") {
var path = args.data.path;
if (path.substring(0, 1) != "/")
path = "/" + path;
url = presetupURL(server, path);
} else if (args.data.protocol == "ocfs2") {
var path = args.data.path;
if (path.substring(0, 1) != "/")
path = "/" + path;
url = ocfs2URL(server, path);
} else if (args.data.protocol == "SharedMountPoint") {
var path = args.data.path;
if (path.substring(0, 1) != "/")
path = "/" + path;
url = SharedMountPointURL(server, path);
} else if (args.data.protocol == "clvm") {
var vg = args.data.volumegroup;
if (vg.substring(0, 1) != "/")
vg = "/" + vg;
url = clvmURL(vg);
} else if (args.data.protocol == "rbd") {
var rbdmonitor = args.data.rbdmonitor;
var rbdpool = args.data.rbdpool;
var rbdid = args.data.rbdid;
var rbdsecret = args.data.rbdsecret;
url = rbdURL(rbdmonitor, rbdpool, rbdid, rbdsecret);
} else if (args.data.protocol == "vmfs") {
var path = args.data.vCenterDataCenter;
if (path.substring(0, 1) != "/")
path = "/" + path;
path += "/" + args.data.vCenterDataStore;
url = vmfsURL("dummy", path);
} else if (args.data.protocol == "gluster") {
var glustervolume = args.data.glustervolume;
if (glustervolume.substring(0, 1) != "/")
glustervolume = "/" + glustervolume;
url = glusterURL(server, glustervolume);
} else {
var iqn = args.data.iqn;
if (iqn.substring(0, 1) != "/")
iqn = "/" + iqn;
var lun = args.data.lun;
url = iscsiURL(server, iqn, lun);
}
array1.push("&url=" + todb(url));
if (args.data.storageTags != null && args.data.storageTags.length > 0)
array1.push("&tags=" + todb(args.data.storageTags));
$.ajax({
url: createURL("createStoragePool" + array1.join("")),
dataType: "json",
success: function (json) {
var item = json.createstoragepoolresponse.storagepool;
args.response.success({
data: item
});
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
}
});
},
notification: {
poll: function (args) {
args.complete({
actionFilter: primarystorageActionfilter
});
}
},
messages: {
notification: function (args) {
return 'label.add.primary.storage';
}
}
}
},
detailView: {
name: "Primary storage details",
isMaximized: true,
actions: {
edit: {
label: 'label.edit',
action: function (args) {
var array1 =[];
array1.push("&tags=" + todb(args.data.tags));
if (args.data.disksizetotal != null && args.data.disksizetotal.length > 0) {
array1.push("&capacitybytes=" + cloudStack.converters.toBytes(args.data.disksizetotal));
}
if (args.data.capacityiops != null && args.data.capacityiops.length > 0) {
array1.push("&capacityiops=" + args.data.capacityiops);
}
$.ajax({
url: createURL("updateStoragePool&id=" + args.context.primarystorages[0].id + array1.join("")),
dataType: "json",
success: function (json) {
var item = json.updatestoragepoolresponse.storagepool;
args.response.success({
data: item
});
},
error: function (XMLHttpResponse) {
args.response.error(parseXMLHttpResponse(XMLHttpResponse));
}
});
}
},
enableMaintenanceMode: {
label: 'label.action.enable.maintenance.mode',
action: function (args) {
$.ajax({
url: createURL("enableStorageMaintenance&id=" + args.context.primarystorages[0].id),
dataType: "json",
async: true,
success: function (json) {
var jid = json.prepareprimarystorageformaintenanceresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
return json.queryasyncjobresultresponse.jobresult.storagepool;
},
getActionFilter: function () {
return primarystorageActionfilter;
}
}
});
}
});
},
messages: {
confirm: function (args) {
return 'message.action.primarystorage.enable.maintenance.mode';
},
notification: function (args) {
return 'label.action.enable.maintenance.mode';
}
},
notification: {
poll: pollAsyncJobResult
}
},
cancelMaintenanceMode: {
label: 'label.action.cancel.maintenance.mode',
messages: {
confirm: function (args) {
return 'message.action.cancel.maintenance.mode';
},
notification: function (args) {
return 'label.action.cancel.maintenance.mode';
}
},
action: function (args) {
$.ajax({
url: createURL("cancelStorageMaintenance&id=" + args.context.primarystorages[0].id),
dataType: "json",
async: true,
success: function (json) {
var jid = json.cancelprimarystoragemaintenanceresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
return json.queryasyncjobresultresponse.jobresult.storagepool;
},
getActionFilter: function () {
return primarystorageActionfilter;
}
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
'remove': {
label: 'label.action.delete.primary.storage',
messages: {
notification: function (args) {
return 'label.action.delete.primary.storage';
}
},
createForm: {
title: 'label.action.delete.primary.storage',
fields: {
isForced: {
label: 'force.remove',
isBoolean: true
}
}
},
action: function (args) {
var array1 =[];
array1.push("&forced=" + (args.data.isForced == "on"));
$.ajax({
url: createURL("deleteStoragePool&id=" + args.context.primarystorages[0].id + array1.join("")),
dataType: "json",
async: true,
success: function (json) {
args.response.success({
data: {
}
});
}
});
},
notification: {
poll: function (args) {
args.complete();
}
}
}
},
tabs: {
details: {
title: 'label.details',
fields:[ {
name: {
label: 'label.name'
}
},
{
id: {
label: 'label.id'
},
state: {
label: 'label.state'
},
tags: {
label: 'label.storage.tags',
isEditable: true
},
zonename: {
label: 'label.zone'
},
podname: {
label: 'label.pod'
},
clustername: {
label: 'label.cluster'
},
type: {
label: 'label.type'
},
ipaddress: {
label: 'label.ip.address'
},
path: {
label: 'label.path'
},
disksizetotal: {
label: 'label.disk.total',
isEditable: true,
converter: function (args) {
if (args == null || args == 0)
return ""; else
return cloudStack.converters.convertBytes(args);
}
},
disksizeallocated: {
label: 'label.disk.allocated',
converter: function (args) {
if (args == null || args == 0)
return ""; else
return cloudStack.converters.convertBytes(args);
}
},
capacityiops: {
label: 'label.disk.iops.total',
isEditable: true,
converter: function (args) {
if (args == null || args == 0)
return ""; else
return args;
}
}
}],
dataProvider: function (args) {
$.ajax({
url: createURL("listStoragePools&id=" + args.context.primarystorages[0].id),
dataType: "json",
async: true,
success: function (json) {
var item = json.liststoragepoolsresponse.storagepool[0];
args.response.success({
actionFilter: primarystorageActionfilter,
data: item
});
}
});
}
},
// Granular settings for storage pool
settings: {
title: 'label.settings',
custom: cloudStack.uiCustom.granularSettings({
dataProvider: function (args) {
$.ajax({
url: createURL('listConfigurations&storageid=' + args.context.primarystorages[0].id),
data: listViewDataProvider(args, {
},
{
searchBy: 'name'
}),
success: function (json) {
args.response.success({
data: json.listconfigurationsresponse.configuration
});
},
error: function (json) {
args.response.error(parseXMLHttpResponse(json));
}
});
},
actions: {
edit: function (args) {
// call updateStorageLevelParameters
var data = {
name: args.data.jsonObj.name,
value: args.data.value
};
$.ajax({
url: createURL('updateConfiguration&storageid=' + args.context.primarystorages[0].id),
data: data,
success: function (json) {
var item = json.updateconfigurationresponse.configuration;
args.response.success({
data: item
});
},
error: function (json) {
args.response.error(parseXMLHttpResponse(json));
}
});
}
}
})
}
}
}
}
},
ucs: {
title: 'UCS',
id: 'ucs',
listView: {
id: 'ucsManagers',
fields: {
name: {
label: 'label.name'
},
url: {
label: 'label.url'
}
},
dataProvider: function (args) {
$.ajax({
url: createURL('listUcsManagers'),
data: {
zoneid: args.context.physicalResources[0].id
},
success: function (json) {
//for testing only (begin)
/*
json =
{
"listucsmanagerreponse": {
"count": 1,
"ucsmanager": [
{
"id": "07b5b813-83ed-4859-952c-c95cafb63ac4",
"name": "ucsmanager",
"url": "10.223.184.2",
"zoneid": "54c9a65c-ba89-4380-96e9-1d429c5372e3"
}
]
}
};
*/
//for testing only (end)
var items = json.listucsmanagerreponse.ucsmanager;
args.response.success({
data: items
});
}
});
},
actions: {
add: {
label: 'label.add.ucs.manager',
messages: {
notification: function (args) {
return 'label.add.ucs.manager';
}
},
createForm: {
title: 'label.add.ucs.manager',
fields: {
name: {
label: 'label.name',
validation: {
required: false
}
},
url: {
label: 'label.ip', //CLOUDSTACK-4629
validation: {
required: true
}
},
username: {
label: 'label.username',
validation: {
required: true
}
},
password: {
label: 'label.password',
isPassword: true,
validation: {
required: true
}
}
}
},
action: function (args) {
var data = {
zoneid: args.context.physicalResources[0].id,
url: args.data.url,
username: args.data.username,
password: args.data.password
};
if (args.data.name != null && args.data.name.length > 0) {
$.extend(data, {
name: args.data.name
});
}
$.ajax({
url: createURL('addUcsManager'),
data: data,
type: "POST",
success: function (json) {
//e.g. json == { "addUcsManagerResponse" : { "ucsmanager" : {"id":"11","name":"ucsmanager","url":"10.223.184.2","zoneid":"2"} } }
var item = json.addUcsManagerResponse.ucsmanager;
args.response.success({
data: item
});
},
error: function (data) {
args.response.error(parseXMLHttpResponse(data));
}
});
},
notification: {
poll: function (args) {
args.complete();
}
}
}
},
detailView: {
isMaximized: true,
noCompact: true,
actions: {
remove: {
label: 'label.delete.ucs.manager',
messages: {
confirm: function (args) {
return 'message.confirm.delete.ucs.manager';
},
notification: function (args) {
return 'label.delete.ucs.manager';
}
},
action: function (args) {
var data = {
ucsmanagerid: args.context.ucsManagers[0].id
};
$.ajax({
url: createURL('deleteUcsManager'),
data: data,
success: function (json) {
args.response.success();
},
error: function (data) {
args.response.error(parseXMLHttpResponse(data));
}
});
},
notification: {
poll: function (args) {
args.complete();
}
}
}
},
tabs: {
details: {
title: 'label.details',
fields:[ {
name: {
label: 'label.name'
}
},
{
id: {
label: 'label.id'
},
url: {
label: 'label.url'
}
}],
dataProvider: function (args) {
$.ajax({
url: createURL('listUcsManagers'),
data: {
id: args.context.ucsManagers[0].id
},
success: function (json) {
//for testing only (begin)
/*
json =
{
"listucsmanagerreponse": {
"count": 1,
"ucsmanager": [
{
"id": "07b5b813-83ed-4859-952c-c95cafb63ac4",
"name": "ucsmanager",
"url": "10.223.184.2",
"zoneid": "54c9a65c-ba89-4380-96e9-1d429c5372e3"
}
]
}
};
*/
//for testing only (end)
var item = json.listucsmanagerreponse.ucsmanager[0];
args.response.success({
data: item
});
}
});
}
},
blades: {
title: 'label.blades',
listView: {
id: 'blades',
hideSearchBar: true,
fields: {
chassis: {
label: 'label.chassis'
},
bladeid: {
label: 'label.blade.id'
},
profiledn: {
label: 'label.associated.profile'
}
},
dataProvider: function (args) {
$.ajax({
url: createURL('listUcsBlades'),
data: {
ucsmanagerid: args.context.ucsManagers[0].id
},
success: function (json) {
//for testing only (begin)
/*
json = {
"listucsbladeresponse": {
"count": 4,
"ucsblade": [
{
"id": "84edb958-cf8a-4e71-99c6-190ccc3fe2bd",
"ucsmanagerid": "07b5b813-83ed-4859-952c-c95cafb63ac4",
"bladedn": "sys/chassis-1/blade-1",
"profiledn": "org-root/ls-profile-for-blade-1"
},
{
"id": "524a3e55-5b61-4561-9464-1b19e3543189",
"ucsmanagerid": "07b5b813-83ed-4859-952c-c95cafb63ac4",
"bladedn": "sys/chassis-1/blade-2",
"profiledn": "org-root/ls-profile-for-blade-2"
},
{
"id": "4828f560-6191-46e6-8a4c-23d1d7d017f0",
"ucsmanagerid": "07b5b813-83ed-4859-952c-c95cafb63ac4",
"bladedn": "sys/chassis-1/blade-3"
},
{
"id": "80ab25c8-3dcf-400e-8849-84dc5e1e6594",
"ucsmanagerid": "07b5b813-83ed-4859-952c-c95cafb63ac4",
"bladedn": "sys/chassis-1/blade-4"
}
]
}
};
*/
//for testing only (end)
var items = json.listucsbladeresponse.ucsblade ? json.listucsbladeresponse.ucsblade:[];
for (var i = 0; i < items.length; i++) {
addExtraPropertiesToUcsBladeObject(items[i]);
}
args.response.success({
actionFilter: bladeActionfilter,
data: items
});
}
});
},
actions: {
refreshUcsBlades: {
isHeader: true,
label: 'label.refresh.blades',
messages: {
confirm: function (args) {
return 'message.confirm.refresh.blades';
},
notification: function (args) {
return 'label.refresh.blades';
}
},
action: function (args) {
$.ajax({
url: createURL('refreshUcsBlades'),
data: {
ucsmanagerid: args.context.ucsManagers[0].id
},
success: function (json) {
//for testing only (begin)
/*
json = {
"refreshucsbladesresponse": {
"count": 7,
"ucsblade": [
{
"id": "6c6a2d2c-575e-41ac-9782-eee51b0b80f8",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-5"
},
{
"id": "d371d470-a51f-489c-aded-54a63dfd76c7",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-6"
},
{
"id": "c0f64591-4a80-4083-bb7b-576220b436a2",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-7"
},
{
"id": "74b9b69a-cb16-42f5-aad6-06391ebdd759",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-1"
},
{
"id": "713a5adb-0136-484f-9acb-d9203af497be",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-2"
},
{
"id": "da633578-21cb-4678-9eb4-981a53198b41",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-4"
},
{
"id": "3d491c6e-f0b6-40b0-bf6e-f89efdd73c30",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-3"
}
]
}
};
*/
//for testing only (end)
/*
var item = json.refreshucsbladesresponse.ucsblade[0];
addExtraPropertiesToUcsBladeObject(item);
args.response.success({
data: item
});
*/
$(window).trigger('cloudStack.fullRefresh');
}
});
},
notification: {
poll: function (args) {
args.complete();
}
}
},
associateTemplateToBlade: {
label: 'label.instanciate.template.associate.profile.blade',
addRow: 'false',
messages: {
notification: function (args) {
return 'label.instanciate.template.associate.profile.blade';
}
},
createForm: {
title: 'label.instanciate.template.associate.profile.blade',
fields: {
templatedn: {
label: 'label.select.template',
select: function (args) {
var items =[];
$.ajax({
url: createURL('listUcsTemplates'),
data: {
ucsmanagerid: args.context.ucsManagers[0].id
},
async: false,
success: function (json) {
//for testing only (begin)
/*
json = {
"listucstemplatesresponse": {
"count": 1,
"ucstemplate": [
{
"ucsdn": "org-root/ls-test"
}
]
}
};
*/
//for testing only (end)
var ucstemplates = json.listucstemplatesresponse.ucstemplate;
if (ucstemplates != null) {
for (var i = 0; i < ucstemplates.length; i++) {
items.push({
id: ucstemplates[i].ucsdn,
description: ucstemplates[i].ucsdn
});
}
}
}
});
args.response.success({
data: items
});
},
validation: {
required: true
}
},
profilename: {
label: 'label.profile'
}
}
},
action: function (args) {
var data = {
ucsmanagerid: args.context.ucsManagers[0].id,
templatedn: args.data.templatedn,
bladeid: args.context.blades[0].id
};
if (args.data.profilename != null && args.data.profilename.length > 0) {
$.extend(data, {
profilename: args.data.profilename
});
}
$.ajax({
url: createURL('instantiateUcsTemplateAndAssocaciateToBlade'),
data: data,
success: function (json) {
//for testing only (begin)
/*
json = {
"instantiateucstemplateandassociatetobladeresponse": {
"jobid": "cd9d0282-4dae-463f-80b6-451e168e2e92"
}
}
*/
//for testing only (end)
var jid = json.instantiateucstemplateandassociatetobladeresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
//for testing only (begin)
/*
json = {
"queryasyncjobresultresponse": {
"accountid": "970b694a-2f8c-11e3-a77d-000c29b36ff5",
"userid": "970b7b4f-2f8c-11e3-a77d-000c29b36ff5",
"cmd": "org.apache.cloudstack.api.InstantiateUcsTemplateAndAssociateToBladeCmd",
"jobstatus": 1,
"jobprocstatus": 0,
"jobresultcode": 0,
"jobresulttype": "object",
"jobresult": {
"ucsblade": {
"id": "3d491c6e-f0b6-40b0-bf6e-f89efdd73c30",
"ucsmanagerid": "9a34c186-12fa-4bbc-af04-5f1a2bf7ae4a",
"bladedn": "sys/chassis-1/blade-3",
"profiledn": "org-root/ls-xxxx"
}
},
"created": "2013-10-10T17:29:00-0700",
"jobid": "cd9d0282-4dae-463f-80b6-451e168e2e92"
}
};
*/
//for testing only (end)
addExtraPropertiesToUcsBladeObject(json.queryasyncjobresultresponse.jobresult.ucsblade);
return json.queryasyncjobresultresponse.jobresult.ucsblade;
}
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
},
disassociateProfileFromBlade: {
label: 'label.disassociate.profile.blade',
addRow: 'false',
messages: {
notification: function (args) {
return 'label.disassociate.profile.blade';
}
},
createForm: {
title: 'label.disassociate.profile.blade',
fields: {
deleteprofile: {
label: 'label.delete.profile',
isBoolean: true,
isChecked: true
}
}
},
action: function (args) {
$.ajax({
url: createURL('disassociateUcsProfileFromBlade'),
data: {
bladeid: args.context.blades[0].id,
deleteprofile: (args.data.deleteprofile == 'on' ? true: false)
},
success: function (json) {
//for testing only (begin)
/*
json = {
"disassociateucsprofilefrombladeresponse": {
"jobid": "e371592e-31be-4e53-9346-a5c565d420df"
}
}
*/
//for testing only (end)
var jid = json.disassociateucsprofilefrombladeresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
//for testing only (begin)
/*
json = {
"queryasyncjobresultresponse": {
"accountid": "835fb2d5-0b76-11e3-9350-f4f3e49b5dfe",
"userid": "835fc0e5-0b76-11e3-9350-f4f3e49b5dfe",
"cmd": "org.apache.cloudstack.api.DisassociateUcsProfileCmd",
"jobstatus": 1,
"jobprocstatus": 0,
"jobresultcode": 0,
"jobresulttype": "object",
"jobresult": {
"ucsblade": {
"id": "f8d08575-7a1c-4f79-a588-d129c38bcc4f",
"ucsmanagerid": "0d87c1a6-5664-425c-9024-2ddd9605d260",
"bladedn": "sys/chassis-1/blade-1"
}
},
"created": "2013-09-13T22:17:29-0700",
"jobid": "2c3698a8-39ac-43e6-8ade-86eb2d3726a0"
}
};
*/
//for testing only (end)
addExtraPropertiesToUcsBladeObject(json.queryasyncjobresultresponse.jobresult.ucsblade);
return json.queryasyncjobresultresponse.jobresult.ucsblade;
}
}
});
}
});
},
notification: {
poll: pollAsyncJobResult
}
}
}
}
}
}
}
}
},
'secondary-storage': {
title: 'label.secondary.storage',
id: 'secondarystorages',
sectionSelect: {
label: 'label.select-view'
},
sections: {
secondaryStorage: {
type: 'select',
title: 'label.secondary.storage',
listView: {
id: 'secondarystorages',
section: 'seconary-storage',
fields: {
name: {
label: 'label.name'
},
protocol: {
label: 'label.protocol'
}
},
dataProvider: function (args) {
var array1 =[];
if (args.filterBy != null) {
if (args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
switch (args.filterBy.search.by) {
case "name":
if (args.filterBy.search.value.length > 0)
array1.push("&keyword=" + args.filterBy.search.value);
break;
}
}
}
array1.push("&zoneid=" + args.context.zones[0].id);
$.ajax({
url: createURL("listImageStores&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
dataType: "json",
async: true,
success: function (json) {
var items = json.listimagestoresresponse.imagestore;
args.response.success({
actionFilter: secondarystorageActionfilter,
data: items
});
}
});
},
actions: {
add: {
label: 'label.add.secondary.storage',
createForm: {
title: 'label.add.secondary.storage',
fields: {
name: {
label: 'label.name'
},
provider: {
label: 'label.provider',
select: function (args) {
/*
UI no longer gets providers from "listStorageProviders&type=image" because:
(1) Not all of returned values are handled by UI (e.g. Provider "NetApp" is not handled by UI).
(2) Provider "SMB" which is handled by UI is not returned from "listStorageProviders&type=image"
*/
var items =[ {
id: 'NFS',
description: 'NFS'
},
{
id: 'SMB',
description: 'SMB/CIFS'
},
{
id: 'S3',
description: 'S3'
},
{
id: 'Swift',
description: 'Swift'
}];
args.response.success({
data: items
});
args.$select.change(function () {
var $form = $(this).closest('form');
if ($(this).val() == "NFS") {
//NFS, SMB
$form.find('.form-item[rel=zoneid]').css('display', 'inline-block');
$form.find('.form-item[rel=nfsServer]').css('display', 'inline-block');
$form.find('.form-item[rel=path]').css('display', 'inline-block');
//SMB
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
//S3
$form.find('.form-item[rel=accesskey]').hide();
$form.find('.form-item[rel=secretkey]').hide();
$form.find('.form-item[rel=bucket]').hide();
$form.find('.form-item[rel=endpoint]').hide();
$form.find('.form-item[rel=usehttps]').hide();
$form.find('.form-item[rel=connectiontimeout]').hide();
$form.find('.form-item[rel=maxerrorretry]').hide();
$form.find('.form-item[rel=sockettimeout]').hide();
$form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
$form.find('.form-item[rel=createNfsCache]').hide();
$form.find('.form-item[rel=nfsCacheZoneid]').hide();
$form.find('.form-item[rel=nfsCacheNfsServer]').hide();
$form.find('.form-item[rel=nfsCachePath]').hide();
//Swift
$form.find('.form-item[rel=url]').hide();
$form.find('.form-item[rel=account]').hide();
$form.find('.form-item[rel=username]').hide();
$form.find('.form-item[rel=key]').hide();
} else if ($(this).val() == "SMB") {
//NFS, SMB
$form.find('.form-item[rel=zoneid]').css('display', 'inline-block');
$form.find('.form-item[rel=nfsServer]').css('display', 'inline-block');
$form.find('.form-item[rel=path]').css('display', 'inline-block');
//SMB
$form.find('.form-item[rel=smbUsername]').css('display', 'inline-block');
$form.find('.form-item[rel=smbPassword]').css('display', 'inline-block');
$form.find('.form-item[rel=smbDomain]').css('display', 'inline-block');
//S3
$form.find('.form-item[rel=accesskey]').hide();
$form.find('.form-item[rel=secretkey]').hide();
$form.find('.form-item[rel=bucket]').hide();
$form.find('.form-item[rel=endpoint]').hide();
$form.find('.form-item[rel=usehttps]').hide();
$form.find('.form-item[rel=connectiontimeout]').hide();
$form.find('.form-item[rel=maxerrorretry]').hide();
$form.find('.form-item[rel=sockettimeout]').hide();
$form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
$form.find('.form-item[rel=createNfsCache]').hide();
$form.find('.form-item[rel=nfsCacheZoneid]').hide();
$form.find('.form-item[rel=nfsCacheNfsServer]').hide();
$form.find('.form-item[rel=nfsCachePath]').hide();
//Swift
$form.find('.form-item[rel=url]').hide();
$form.find('.form-item[rel=account]').hide();
$form.find('.form-item[rel=username]').hide();
$form.find('.form-item[rel=key]').hide();
} else if ($(this).val() == "S3") {
//NFS, SMB
$form.find('.form-item[rel=zoneid]').hide();
$form.find('.form-item[rel=nfsServer]').hide();
$form.find('.form-item[rel=path]').hide();
//SMB
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
//S3
$form.find('.form-item[rel=accesskey]').css('display', 'inline-block');
$form.find('.form-item[rel=secretkey]').css('display', 'inline-block');
$form.find('.form-item[rel=bucket]').css('display', 'inline-block');
$form.find('.form-item[rel=endpoint]').css('display', 'inline-block');
$form.find('.form-item[rel=usehttps]').css('display', 'inline-block');
$form.find('.form-item[rel=connectiontimeout]').css('display', 'inline-block');
$form.find('.form-item[rel=maxerrorretry]').css('display', 'inline-block');
$form.find('.form-item[rel=sockettimeout]').css('display', 'inline-block');
$form.find('.form-item[rel=createNfsCache]').find('input').attr('checked', 'checked');
//$form.find('.form-item[rel=createNfsCache]').find('input').attr('disabled', 'disabled'); //This checkbox should not be disabled any more because NFS staging (of a zone) might already exist (from "NFS secondary storage => Prepare Object Store Migration => NFS staging")
$form.find('.form-item[rel=createNfsCache]').css('display', 'inline-block');
$form.find('.form-item[rel=nfsCacheZoneid]').css('display', 'inline-block');
$form.find('.form-item[rel=nfsCacheNfsServer]').css('display', 'inline-block');
$form.find('.form-item[rel=nfsCachePath]').css('display', 'inline-block');
//Swift
$form.find('.form-item[rel=url]').hide();
$form.find('.form-item[rel=account]').hide();
$form.find('.form-item[rel=username]').hide();
$form.find('.form-item[rel=key]').hide();
} else if ($(this).val() == "Swift") {
//NFS, SMB
$form.find('.form-item[rel=zoneid]').hide();
$form.find('.form-item[rel=nfsServer]').hide();
$form.find('.form-item[rel=path]').hide();
//SMB
$form.find('.form-item[rel=smbUsername]').hide();
$form.find('.form-item[rel=smbPassword]').hide();
$form.find('.form-item[rel=smbDomain]').hide();
//S3
$form.find('.form-item[rel=accesskey]').hide();
$form.find('.form-item[rel=secretkey]').hide();
$form.find('.form-item[rel=bucket]').hide();
$form.find('.form-item[rel=endpoint]').hide();
$form.find('.form-item[rel=usehttps]').hide();
$form.find('.form-item[rel=connectiontimeout]').hide();
$form.find('.form-item[rel=maxerrorretry]').hide();
$form.find('.form-item[rel=sockettimeout]').hide();
$form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
$form.find('.form-item[rel=createNfsCache]').hide();
$form.find('.form-item[rel=nfsCacheZoneid]').hide();
$form.find('.form-item[rel=nfsCacheNfsServer]').hide();
$form.find('.form-item[rel=nfsCachePath]').hide();
//Swift
$form.find('.form-item[rel=url]').css('display', 'inline-block');
$form.find('.form-item[rel=account]').css('display', 'inline-block');
$form.find('.form-item[rel=username]').css('display', 'inline-block');
$form.find('.form-item[rel=key]').css('display', 'inline-block');
}
});
args.$select.change();
}
},
//NFS, SMB (begin)
zoneid: {
label: 'label.zone',
docID: 'helpSecondaryStorageZone',
validation: {
required: true
},
select: function (args) {
$.ajax({
url: createURL('listZones'),
data: {
listAll: true
},
success: function (json) {
var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[];
if (zones != null) {
//$.map(items, fn) - items can not be null
args.response.success({
data: $.map(zones, function (zone) {
return {
id: zone.id,
description: zone.name
};
})
});
} else {
args.response.success({
data: null
});
}
}
});
}
},
nfsServer: {
label: 'label.server', //change label from "NFS Server" to "Server" since this field is also shown when provider "SMB/CIFS" is elected.
docID: 'helpSecondaryStorageNFSServer',
validation: {
required: true
}
},
path: {
label: 'label.path',
docID: 'helpSecondaryStoragePath',
validation: {
required: true
}
},
//NFS, SMB (end)
//SMB (begin)
smbUsername: {
label: 'label.smb.username',
validation: {
required: true
}
},
smbPassword: {
label: 'label.smb.password',
isPassword: true,
validation: {
required: true
}
},
smbDomain: {
label: 'label.smb.domain',
validation: {
required: true
}
},
//SMB (end)
//S3 (begin)
accesskey: {
label: 'label.s3.access_key',
docID: 'helpS3AccessKey',
validation: {
required: true
}
},
secretkey: {
label: 'label.s3.secret_key',
docID: 'helpS3SecretKey',
validation: {
required: true
}
},
bucket: {
label: 'label.s3.bucket',
docID: 'helpS3Bucket',
validation: {
required: true
}
},
endpoint: {
label: 'label.s3.endpoint',
docID: 'helpS3Endpoint'
},
usehttps: {
label: 'label.s3.use_https',
isEditable: true,
isBoolean: true,
isChecked: true,
converter: cloudStack.converters.toBooleanText
},
connectiontimeout: {
label: 'label.s3.connection_timeout',
docID: 'helpS3ConnectionTimeout'
},
maxerrorretry: {
label: 'label.s3.max_error_retry',
docID: 'helpS3MaxErrorRetry'
},
sockettimeout: {
label: 'label.s3.socket_timeout',
docID: 'helpS3SocketTimeout'
},
createNfsCache: {
label: 'label.create.nfs.secondary.staging.store',
isBoolean: true,
isChecked: true
},
nfsCacheZoneid: {
dependsOn: 'createNfsCache',
label: 'label.zone',
validation: {
required: true
},
select: function (args) {
$.ajax({
url: createURL('listZones'),
data: {
listAll: true
},
success: function (json) {
var zones = json.listzonesresponse.zone;
if (zones != null) {
//$.map(items, fn) - items can not be null
args.response.success({
data: $.map(zones, function (zone) {
return {
id: zone.id,
description: zone.name
};
})
});
} else {
args.response.success({
data: null
});
}
}
});
}
},
nfsCacheNfsServer: {
dependsOn: 'createNfsCache',
label: 'label.nfs.server',
docID: 'helpNFSStagingServer',
validation: {
required: true
}
},
nfsCachePath: {
dependsOn: 'createNfsCache',
label: 'label.path',
docID: 'helpNFSStagingPath',
validation: {
required: true
}
},
//S3 (end)
//Swift (begin)
url: {
label: 'label.url',
validation: {
required: true
}
},
account: {
label: 'label.account'
},
username: {
label: 'label.username'
},
key: {
label: 'label.key'
}
//Swift (end)
}
},
action: function (args) {
var data = {
};
if (args.data.name != null && args.data.name.length > 0) {
$.extend(data, {
name: args.data.name
});
}
if (args.data.provider == 'NFS') {
var zoneid = args.data.zoneid;
var nfs_server = args.data.nfsServer;
var path = args.data.path;
var url = nfsURL(nfs_server, path);
$.extend(data, {
provider: args.data.provider,
zoneid: zoneid,
url: url
});
$.ajax({
url: createURL('addImageStore'),
data: data,
success: function (json) {
var item = json.addimagestoreresponse.imagestore;
args.response.success({
data: item
});
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
}
});
} else if (args.data.provider == 'SMB') {
var zoneid = args.data.zoneid;
var nfs_server = args.data.nfsServer;
var path = args.data.path;
var url = smbURL(nfs_server, path);
$.extend(data, {
provider: args.data.provider,
zoneid: zoneid,
url: url,
'details[0].key': 'user',
'details[0].value': args.data.smbUsername,
'details[1].key': 'password',
'details[1].value': args.data.smbPassword,
'details[2].key': 'domain',
'details[2].value': args.data.smbDomain
});
$.ajax({
url: createURL('addImageStore'),
data: data,
success: function (json) {
var item = json.addimagestoreresponse.imagestore;
args.response.success({
data: item
});
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
}
});
} else if (args.data.provider == 'S3') {
$.extend(data, {
provider: args.data.provider,
'details[0].key': 'accesskey',
'details[0].value': args.data.accesskey,
'details[1].key': 'secretkey',
'details[1].value': args.data.secretkey,
'details[2].key': 'bucket',
'details[2].value': args.data.bucket,
'details[3].key': 'usehttps',
'details[3].value': (args.data.usehttps != null && args.data.usehttps == 'on' ? 'true': 'false')
});
var index = 4;
if (args.data.endpoint != null && args.data.endpoint.length > 0) {
data[ 'details[' + index.toString() + '].key'] = 'endpoint';
data[ 'details[' + index.toString() + '].value'] = args.data.endpoint;
index++;
}
if (args.data.connectiontimeout != null && args.data.connectiontimeout.length > 0) {
data[ 'details[' + index.toString() + '].key'] = 'connectiontimeout';
data[ 'details[' + index.toString() + '].value'] = args.data.connectiontimeout;
index++;
}
if (args.data.maxerrorretry != null && args.data.maxerrorretry.length > 0) {
data[ 'details[' + index.toString() + '].key'] = 'maxerrorretry';
data[ 'details[' + index.toString() + '].value'] = args.data.maxerrorretry;
index++;
}
if (args.data.sockettimeout != null && args.data.sockettimeout.length > 0) {
data[ 'details[' + index.toString() + '].key'] = 'sockettimeout';
data[ 'details[' + index.toString() + '].value'] = args.data.sockettimeout;
index++;
}
$.ajax({
url: createURL('addImageStore'),
data: data,
success: function (json) {
g_regionsecondaryenabled = true;
var item = json.addimagestoreresponse.imagestore;
args.response.success({
data: item
});
},
error: function (json) {
args.response.error(parseXMLHttpResponse(json));
}
});
if (args.data.createNfsCache == 'on') {
var zoneid = args.data.nfsCacheZoneid;
var nfs_server = args.data.nfsCacheNfsServer;
var path = args.data.nfsCachePath;
var url = nfsURL(nfs_server, path);
var nfsCacheData = {
provider: 'NFS',
zoneid: zoneid,
url: url
};
$.ajax({
url: createURL('createSecondaryStagingStore'),
data: nfsCacheData,
success: function (json) {
//do nothing
},
error: function (json) {
args.response.error(parseXMLHttpResponse(json));
}
});
}
} else if (args.data.provider == 'Swift') {
$.extend(data, {
provider: args.data.provider,
url: args.data.url
});
var index = 0;
if (args.data.account != null && args.data.account.length > 0) {
data[ 'details[' + index.toString() + '].key'] = 'account';
data[ 'details[' + index.toString() + '].value'] = args.data.account;
index++;
}
if (args.data.username != null && args.data.username.length > 0) {
data[ 'details[' + index.toString() + '].key'] = 'username';
data[ 'details[' + index.toString() + '].value'] = args.data.username;
index++;
}
if (args.data.key != null && args.data.key.length > 0) {
data[ 'details[' + index.toString() + '].key'] = 'key';
data[ 'details[' + index.toString() + '].value'] = args.data.key;
index++;
}
$.ajax({
url: createURL('addImageStore'),
data: data,
success: function (json) {
g_regionsecondaryenabled = true;
var item = json.addimagestoreresponse.imagestore;
args.response.success({
data: item
});
},
error: function (json) {
args.response.error(parseXMLHttpResponse(json));
}
});
}
},
notification: {
poll: function (args) {
args.complete({
actionFilter: secondarystorageActionfilter
});
}
},
messages: {
notification: function (args) {
return 'label.add.secondary.storage';
}
}
}
},
detailView: {
name: 'label.secondary.storage.details',
isMaximized: true,
actions: {
remove: {
label: 'label.action.delete.secondary.storage',
messages: {
confirm: function (args) {
return 'message.action.delete.secondary.storage';
},
notification: function (args) {
return 'label.action.delete.secondary.storage';
}
},
action: function (args) {
$.ajax({
url: createURL("deleteImageStore&id=" + args.context.secondaryStorage[0].id),
dataType: "json",
async: true,
success: function (json) {
args.response.success();
}
});
},
notification: {
poll: function (args) {
args.complete({
data: {
resourcestate: 'Destroyed'
}
});
}
}
}
},
tabs: {
details: {
title: 'label.details',
fields:[ {
name: {
label: 'label.name'
}
},
{
url: {
label: 'label.url'
},
protocol: {
label: 'label.protocol'
},
providername: {
label: 'label.provider'
},
scope: {
label: 'label.scope'
},
zonename: {
label: 'label.zone'
},
details: {
label: 'label.details',
converter: function (array1) {
var string1 = '';
if (array1 != null) {
for (var i = 0; i < array1.length; i++) {
if (i > 0)
string1 += ', ';
string1 += array1[i].name + ': ' + array1[i].value;
}
}
return string1;
}
},
id: {
label: 'label.id'
}
}],
dataProvider: function (args) {
$.ajax({
url: createURL("listImageStores&id=" + args.context.secondaryStorage[0].id),
dataType: "json",
async: true,
success: function (json) {
var item = json.listimagestoresresponse.imagestore[0];
processPropertiesInImagestoreObject(item);
args.response.success({
actionFilter: secondarystorageActionfilter,
data: item
});
}
});
}
}
// Granular settings for storage pool for secondary storage is not required
/* settings: {
title: 'label.menu.global.settings',
custom: cloudStack.uiCustom.granularSettings({
dataProvider: function(args) {
args.response.success({
data: [
{ name: 'config.param.1', value: 1 },
{ name: 'config.param.2', value: 2 }
]
});
},
actions: {
edit: function(args) {
// call updateStorageLevelParameters
args.response.success();
}
}
})
} */
}
}
}
},
cacheStorage: {
type: 'select',
title: 'label.secondary.staging.store',
listView: {
id: 'secondarystorages',
section: 'seconary-storage',
fields: {
name: {
label: 'label.name'
},
url: {
label: 'label.url'
},
providername: {
label: 'label.provider'
}
},
/*
dataProvider: function(args) { //being replaced with dataProvider in line 6898
var array1 = [];
if(args.filterBy != null) {
if(args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
switch(args.filterBy.search.by) {
case "name":
if(args.filterBy.search.value.length > 0)
array1.push("&keyword=" + args.filterBy.search.value);
break;
}
}
}
array1.push("&zoneid=" + args.context.zones[0].id);
$.ajax({
url: createURL("listImageStores&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
dataType: "json",
async: true,
success: function(json) {
var items = json.listimagestoreresponse.imagestore;
args.response.success({
actionFilter: secondarystorageActionfilter,
data:items
});
}
});
},
*/
actions: {
add: {
label: 'label.add.nfs.secondary.staging.store',
createForm: {
title: 'label.add.nfs.secondary.staging.store',
fields: {
zoneid: {
label: 'label.zone',
validation: {
required: true
},
select: function (args) {
$.ajax({
url: createURL('listZones'),
data: {
listAll: true
},
success: function (json) {
var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone:[];
if (zones != null) {
//$.map(items, fn) - items can not be null
args.response.success({
data: $.map(zones, function (zone) {
return {
id: zone.id,
description: zone.name
};
})
});
} else {
args.response.success({
data: null
});
}
}
});
}
},
nfsServer: {
label: 'label.nfs.server',
validation: {
required: true
}
},
path: {
label: 'label.path',
validation: {
required: true
}
}
}
},
action: function (args) {
var data = {
provider: 'NFS',
zoneid: args.data.zoneid,
url: nfsURL(args.data.nfsServer, args.data.path)
};
$.ajax({
url: createURL('createSecondaryStagingStore'),
data: data,
success: function (json) {
var item = json.createsecondarystagingstoreresponse.secondarystorage;
args.response.success({
data: item
});
},
error: function (json) {
args.response.error(parseXMLHttpResponse(json));
}
});
},
notification: {
poll: function (args) {
args.complete();
}
},
messages: {
notification: function (args) {
return 'label.add.nfs.secondary.staging.store';
}
}
}
},
detailView: {
name: 'label.secondary.staging.store.details',
isMaximized: true,
actions: {
remove: {
label: 'label.delete.secondary.staging.store',
messages: {
confirm: function (args) {
return 'message.confirm.delete.secondary.staging.store';
},
notification: function (args) {
return 'label.delete.secondary.staging.store';
}
},
action: function (args) {
var data = {
id: args.context.cacheStorage[0].id
};
$.ajax({
url: createURL('deleteSecondaryStagingStore'),
data: data,
async: true,
success: function (json) {
args.response.success();
},
error: function (data) {
args.response.error(parseXMLHttpResponse(data));
}
});
},
notification: {
poll: function (args) {
args.complete();
}
}
}
},
tabs: {
details: {
title: 'label.details',
fields:[ {
name: {
label: 'label.name'
}
},
{
url: {
label: 'label.url'
},
providername: {
label: 'Provider'
},
scope: {
label: 'label.scope'
},
zonename: {
label: 'label.zone'
},
details: {
label: 'label.details',
converter: function (array1) {
var string1 = '';
if (array1 != null) {
for (var i = 0; i < array1.length; i++) {
if (i > 0)
string1 += ', ';
string1 += array1[i].name + ': ' + array1[i].value;
}
}
return string1;
}
},
id: {
label: 'label.id'
}
}],
dataProvider: function (args) {
$.ajax({
url: createURL('listSecondaryStagingStores'),
data: {
id: args.context.cacheStorage[0].id
},
async: false,
success: function (json) {
var item = json.listsecondarystagingstoreresponse.imagestore[0];
args.response.success({
data: item
});
}
});
}
}
// Granular settings for storage pool for secondary storage is not required
/* settings: {
title: 'label.menu.global.settings',
custom: cloudStack.uiCustom.granularSettings({
dataProvider: function(args) {
args.response.success({
data: [
{ name: 'config.param.1', value: 1 },
{ name: 'config.param.2', value: 2 }
]
});
},
actions: {
edit: function(args) {
// call updateStorageLevelParameters
args.response.success();
}
}
})
} */
}
}
}
}
}
},
guestIpRanges: {
//Advanced zone - Guest traffic type - Network tab - Network detailView - View IP Ranges
title: 'label.guest.ip.range',
id: 'guestIpRanges',
listView: {
section: 'guest-IP-range',
fields: {
startip: {
label: 'label.ipv4.start.ip'
},
endip: {
label: 'label.ipv4.end.ip'
},
startipv6: {
label: 'label.ipv6.start.ip'
},
endipv6: {
label: 'label.ipv6.end.ip'
}
},
dataProvider: function (args) {
$.ajax({
url: createURL("listVlanIpRanges&zoneid=" + selectedZoneObj.id + "&networkid=" + args.context.networks[0].id + "&page=" + args.page + "&pagesize=" + pageSize),
dataType: "json",
async: true,
success: function (json) {
var items = json.listvlaniprangesresponse.vlaniprange;
args.response.success({
data: items
});
}
});
},
actions: {
add: {
label: 'label.add.ip.range',
createForm: {
title: 'label.add.ip.range',
fields: {
gateway: {
label: 'label.gateway'
},
netmask: {
label: 'label.netmask'
},
startipv4: {
label: 'label.ipv4.start.ip'
},
endipv4: {
label: 'label.ipv4.end.ip'
},
ip6cidr: {
label: 'label.ipv6.CIDR'
},
ip6gateway: {
label: 'label.ipv6.gateway'
},
startipv6: {
label: 'label.ipv6.start.ip'
},
endipv6: {
label: 'label.ipv6.end.ip'
}
}
},
action: function (args) {
var array2 =[];
if (args.data.gateway != null && args.data.gateway.length > 0)
array2.push("&gateway=" + args.data.gateway);
if (args.data.netmask != null && args.data.netmask.length > 0)
array2.push("&netmask=" + args.data.netmask);
if (args.data.startipv4 != null && args.data.startipv4.length > 0)
array2.push("&startip=" + args.data.startipv4);
if (args.data.endipv4 != null && args.data.endipv4.length > 0)
array2.push("&endip=" + args.data.endipv4);
if (args.data.ip6cidr != null && args.data.ip6cidr.length > 0)
array2.push("&ip6cidr=" + args.data.ip6cidr);
if (args.data.ip6gateway != null && args.data.ip6gateway.length > 0)
array2.push("&ip6gateway=" + args.data.ip6gateway);
if (args.data.startipv6 != null && args.data.startipv6.length > 0)
array2.push("&startipv6=" + args.data.startipv6);
if (args.data.endipv6 != null && args.data.endipv6.length > 0)
array2.push("&endipv6=" + args.data.endipv6);
$.ajax({
url: createURL("createVlanIpRange&forVirtualNetwork=false&networkid=" + args.context.networks[0].id + array2.join("")),
dataType: "json",
success: function (json) {
var item = json.createvlaniprangeresponse.vlan;
args.response.success({
data: item
});
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
args.response.error(errorMsg);
}
});
},
notification: {
poll: function (args) {
args.complete();
}
},
messages: {
notification: function (args) {
return 'label.add.ip.range';
}
}
},
'remove': {
label: 'label.remove.ip.range',
messages: {
confirm: function (args) {
return 'message.confirm.remove.IP.range';
},
notification: function (args) {
return 'label.remove.ip.range';
}
},
action: function (args) {
$.ajax({
url: createURL("deleteVlanIpRange&id=" + args.data.id),
dataType: "json",
async: true,
success: function (json) {
args.response.success({
data: {
}
});
},
error: function (json) {
args.response.error(parseXMLHttpResponse(json));
}
});
},
notification: {
poll: function (args) {
args.complete();
}
}
}
}
}
}
}
};
function addBaremetalDhcpDeviceFn(args) {
if (nspMap[ "BaremetalDhcpProvider"] == null) {
$.ajax({
url: createURL("addNetworkServiceProvider&name=BaremetalDhcpProvider&physicalnetworkid=" + selectedPhysicalNetworkObj.id),
dataType: "json",
async: true,
success: function (json) {
var jobId = json.addnetworkserviceproviderresponse.jobid;
var addBaremetalDhcpProviderIntervalID = setInterval(function () {
$.ajax({
url: createURL("queryAsyncJobResult&jobId=" + jobId),
dataType: "json",
success: function (json) {
var result = json.queryasyncjobresultresponse;
if (result.jobstatus == 0) {
return; //Job has not completed
} else {
clearInterval(addBaremetalDhcpProviderIntervalID);
if (result.jobstatus == 1) {
nspMap[ "BaremetalDhcpProvider"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider;
$.ajax({
url: createURL('addBaremetalDhcp'),
data: {
physicalnetworkid: selectedPhysicalNetworkObj.id,
dhcpservertype: 'DHCPD',
url: args.data.url,
username: args.data.username,
password: args.data.password
},
type: "POST",
success: function (json) {
var jid = json.addbaremetaldhcpresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult.baremetaldhcp;
return item;
}
}
});
}
});
} else if (result.jobstatus == 2) {
alert(_s(result.jobresult.errortext));
}
}
},
error: function (XMLHttpResponse) {
alert(parseXMLHttpResponse(XMLHttpResponse));
}
});
},
g_queryAsyncJobResultInterval);
}
});
} else {
$.ajax({
url: createURL('addBaremetalDhcp'),
data: {
physicalnetworkid: selectedPhysicalNetworkObj.id,
dhcpservertype: 'DHCPD',
url: args.data.url,
username: args.data.username,
password: args.data.password
},
type: "POST",
success: function (json) {
var jid = json.addbaremetaldhcpresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult.baremetaldhcp;
return item;
}
}
});
}
});
}
}
function addBaremetalPxeDeviceFn(args) {
if (nspMap[ "BaremetalPxeProvider"] == null) {
$.ajax({
url: createURL("addNetworkServiceProvider&name=BaremetalPxeProvider&physicalnetworkid=" + selectedPhysicalNetworkObj.id),
dataType: "json",
async: true,
success: function (json) {
var jobId = json.addnetworkserviceproviderresponse.jobid;
var addBaremetalPxeProviderIntervalID = setInterval(function () {
$.ajax({
url: createURL("queryAsyncJobResult&jobId=" + jobId),
dataType: "json",
success: function (json) {
var result = json.queryasyncjobresultresponse;
if (result.jobstatus == 0) {
return; //Job has not completed
} else {
clearInterval(addBaremetalPxeProviderIntervalID);
if (result.jobstatus == 1) {
nspMap[ "BaremetalPxeProvider"] = json.queryasyncjobresultresponse.jobresult.networkserviceprovider;
$.ajax({
url: createURL('addBaremetalPxeKickStartServer'),
data: {
physicalnetworkid: selectedPhysicalNetworkObj.id,
pxeservertype: 'KICK_START',
url: args.data.url,
username: args.data.username,
password: args.data.password,
tftpdir: args.data.tftpdir
},
type: "POST",
success: function (json) {
var jid = json.addbaremetalpxeresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult.baremetalpxeserver;
return item;
}
}
});
}
});
} else if (result.jobstatus == 2) {
alert(_s(result.jobresult.errortext));
}
}
},
error: function (XMLHttpResponse) {
alert(parseXMLHttpResponse(XMLHttpResponse));
}
});
},
g_queryAsyncJobResultInterval);
}
});
} else {
$.ajax({
url: createURL('addBaremetalPxeKickStartServer'),
data: {
physicalnetworkid: selectedPhysicalNetworkObj.id,
pxeservertype: 'KICK_START',
url: args.data.url,
username: args.data.username,
password: args.data.password,
tftpdir: args.data.tftpdir
},
type: "POST",
success: function (json) {
var jid = json.addbaremetalpxeresponse.jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult.baremetalpxeserver;
return item;
}
}
});
}
});
}
}
function addExternalLoadBalancer(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
var array1 =[];
array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
array1.push("&username=" + todb(args.data.username));
array1.push("&password=" + todb(args.data.password));
array1.push("&networkdevicetype=" + todb(args.data.networkdevicetype));
if (apiCmd == "addNetscalerLoadBalancer") {
array1.push("&gslbprovider=" + (args.data.gslbprovider == "on"));
array1.push("&gslbproviderpublicip=" + todb(args.data.gslbproviderpublicip));
array1.push("&gslbproviderprivateip=" + todb(args.data.gslbproviderprivateip));
}
//construct URL starts here
var url =[];
var ip = args.data.ip;
url.push("https://" + ip);
var isQuestionMarkAdded = false;
var publicInterface = args.data.publicinterface;
if (publicInterface != null && publicInterface.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("publicinterface=" + publicInterface);
}
var privateInterface = args.data.privateinterface;
if (privateInterface != null && privateInterface.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("privateinterface=" + privateInterface);
}
var numretries = args.data.numretries;
if (numretries != null && numretries.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("numretries=" + numretries);
}
var isInline = args.data.inline;
if (isInline != null && isInline.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("inline=" + isInline);
}
var capacity = args.data.capacity;
if (capacity != null && capacity.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("lbdevicecapacity=" + capacity);
}
var dedicated = (args.data.dedicated == "on");
//boolean (true/false)
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("lbdevicededicated=" + dedicated.toString());
array1.push("&url=" + todb(url.join("")));
//construct URL ends here
$.ajax({
url: createURL(apiCmd + array1.join("")),
dataType: "json",
type: "POST",
success: function (json) {
var jid = json[apiCmdRes].jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj];
return item;
}
}
});
}
});
}
function addExternalFirewall(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
var array1 =[];
array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
array1.push("&username=" + todb(args.data.username));
array1.push("&password=" + todb(args.data.password));
array1.push("&networkdevicetype=" + todb(args.data.networkdevicetype));
//construct URL starts here
var url =[];
var ip = args.data.ip;
url.push("https://" + ip);
var isQuestionMarkAdded = false;
var publicInterface = args.data.publicinterface;
if (publicInterface != null && publicInterface.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("publicinterface=" + publicInterface);
}
var privateInterface = args.data.privateinterface;
if (privateInterface != null && privateInterface.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("privateinterface=" + privateInterface);
}
var usageInterface = args.data.usageinterface;
if (usageInterface != null && usageInterface.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("usageinterface=" + usageInterface);
}
var numretries = args.data.numretries;
if (numretries != null && numretries.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("numretries=" + numretries);
}
var timeout = args.data.timeout;
if (timeout != null && timeout.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("timeout=" + timeout);
}
var isInline = args.data.inline;
if (isInline != null && isInline.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("inline=" + isInline);
}
var publicNetwork = args.data.publicnetwork;
if (publicNetwork != null && publicNetwork.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("publicnetwork=" + publicNetwork);
}
var privateNetwork = args.data.privatenetwork;
if (privateNetwork != null && privateNetwork.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("privatenetwork=" + privateNetwork);
}
var capacity = args.data.capacity;
if (capacity != null && capacity.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("fwdevicecapacity=" + capacity);
}
var dedicated = (args.data.dedicated == "on");
//boolean (true/false)
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("fwdevicededicated=" + dedicated.toString());
// START - Palo Alto Specific Fields
var externalVirtualRouter = args.data.pavr;
if (externalVirtualRouter != null && externalVirtualRouter.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("pavr=" + encodeURIComponent(externalVirtualRouter));
}
var externalThreatProfile = args.data.patp;
if (externalThreatProfile != null && externalThreatProfile.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("patp=" + encodeURIComponent(externalThreatProfile));
}
var externalLogProfile = args.data.palp;
if (externalLogProfile != null && externalLogProfile.length > 0) {
if (isQuestionMarkAdded == false) {
url.push("?");
isQuestionMarkAdded = true;
} else {
url.push("&");
}
url.push("palp=" + encodeURIComponent(externalLogProfile));
}
// END - Palo Alto Specific Fields
array1.push("&url=" + todb(url.join("")));
//construct URL ends here
$.ajax({
url: createURL(apiCmd + array1.join("")),
dataType: "json",
type: "POST",
success: function (json) {
var jid = json[apiCmdRes].jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj];
return item;
}
}
});
}
});
}
function addNiciraNvpDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
var array1 =[];
array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
array1.push("&username=" + todb(args.data.username));
array1.push("&password=" + todb(args.data.password));
array1.push("&hostname=" + todb(args.data.host));
array1.push("&transportzoneuuid=" + todb(args.data.transportzoneuuid));
var l3GatewayServiceUuid = args.data.l3gatewayserviceuuid;
if (l3GatewayServiceUuid != null && l3GatewayServiceUuid.length > 0) {
array1.push("&l3gatewayserviceuuid=" + todb(args.data.l3gatewayserviceuuid));
}
$.ajax({
url: createURL(apiCmd + array1.join("")),
dataType: "json",
type: "POST",
success: function (json) {
var jid = json[apiCmdRes].jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj];
return item;
}
}
});
}
});
}
function addOpenDaylightController(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
var array1 =[];
array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
array1.push("&username=" + todb(args.data.username));
array1.push("&password=" + todb(args.data.password));
array1.push("&url=" + todb(args.data.url));
$.ajax({
url: createURL(apiCmd + array1.join("")),
dataType: "json",
type: "POST",
success: function (json) {
var jid = json[apiCmdRes].jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj];
return item;
}
}
});
}
});
}
function addBigSwitchVnsDevice(args, physicalNetworkObj, apiCmd, apiCmdRes, apiCmdObj) {
var array1 =[];
array1.push("&physicalnetworkid=" + physicalNetworkObj.id);
array1.push("&hostname=" + todb(args.data.host));
$.ajax({
url: createURL(apiCmd + array1.join("")),
dataType: "json",
success: function (json) {
var jid = json[apiCmdRes].jobid;
args.response.success({
_custom: {
jobId: jid,
getUpdatedItem: function (json) {
var item = json.queryasyncjobresultresponse.jobresult[apiCmdObj];
return item;
}
}
});
}
});
}
var afterCreateZonePhysicalNetworkTrafficTypes = function (args, newZoneObj, newPhysicalnetwork) {
$.ajax({
url: createURL("updatePhysicalNetwork&state=Enabled&id=" + newPhysicalnetwork.id),
dataType: "json",
success: function (json) {
var jobId = json.updatephysicalnetworkresponse.jobid;
var enablePhysicalNetworkIntervalID = setInterval(function () {
$.ajax({
url: createURL("queryAsyncJobResult&jobId=" + jobId),
dataType: "json",
success: function (json) {
var result = json.queryasyncjobresultresponse;
if (result.jobstatus == 0) {
return; //Job has not completed
} else {
clearInterval(enablePhysicalNetworkIntervalID);
if (result.jobstatus == 1) {
//alert("updatePhysicalNetwork succeeded.");
// get network service provider ID of Virtual Router
var virtualRouterProviderId;
$.ajax({
url: createURL("listNetworkServiceProviders&name=VirtualRouter&physicalNetworkId=" + newPhysicalnetwork.id),
dataType: "json",
async: false,
success: function (json) {
var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
if (items != null && items.length > 0) {
virtualRouterProviderId = items[0].id;
}
}
});
if (virtualRouterProviderId == null) {
alert("error: listNetworkServiceProviders API doesn't return VirtualRouter provider ID");
return;
}
var virtualRouterElementId;
$.ajax({
url: createURL("listVirtualRouterElements&nspid=" + virtualRouterProviderId),
dataType: "json",
async: false,
success: function (json) {
var items = json.listvirtualrouterelementsresponse.virtualrouterelement;
if (items != null && items.length > 0) {
virtualRouterElementId = items[0].id;
}
}
});
if (virtualRouterElementId == null) {
alert("error: listVirtualRouterElements API doesn't return Virtual Router Element Id");
return;
}
$.ajax({
url: createURL("configureVirtualRouterElement&enabled=true&id=" + virtualRouterElementId),
dataType: "json",
async: false,
success: function (json) {
var jobId = json.configurevirtualrouterelementresponse.jobid;
var enableVirtualRouterElementIntervalID = setInterval(function () {
$.ajax({
url: createURL("queryAsyncJobResult&jobId=" + jobId),
dataType: "json",
success: function (json) {
var result = json.queryasyncjobresultresponse;
if (result.jobstatus == 0) {
return; //Job has not completed
} else {
clearInterval(enableVirtualRouterElementIntervalID);
if (result.jobstatus == 1) {
//alert("configureVirtualRouterElement succeeded.");
$.ajax({
url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + virtualRouterProviderId),
dataType: "json",
async: false,
success: function (json) {
var jobId = json.updatenetworkserviceproviderresponse.jobid;
var enableVirtualRouterProviderIntervalID = setInterval(function () {
$.ajax({
url: createURL("queryAsyncJobResult&jobId=" + jobId),
dataType: "json",
success: function (json) {
var result = json.queryasyncjobresultresponse;
if (result.jobstatus == 0) {
return; //Job has not completed
} else {
clearInterval(enableVirtualRouterProviderIntervalID);
if (result.jobstatus == 1) {
//alert("Virtual Router Provider is enabled");
if (newZoneObj.networktype == "Basic") {
if (args.data[ "security-groups-enabled"] == "on") {
//need to Enable security group provider first
// get network service provider ID of Security Group
var securityGroupProviderId;
$.ajax({
url: createURL("listNetworkServiceProviders&name=SecurityGroupProvider&physicalNetworkId=" + newPhysicalnetwork.id),
dataType: "json",
async: false,
success: function (json) {
var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
if (items != null && items.length > 0) {
securityGroupProviderId = items[0].id;
}
}
});
if (securityGroupProviderId == null) {
alert("error: listNetworkServiceProviders API doesn't return security group provider ID");
return;
}
$.ajax({
url: createURL("updateNetworkServiceProvider&state=Enabled&id=" + securityGroupProviderId),
dataType: "json",
async: false,
success: function (json) {
var jobId = json.updatenetworkserviceproviderresponse.jobid;
var enableSecurityGroupProviderIntervalID = setInterval(function () {
$.ajax({
url: createURL("queryAsyncJobResult&jobId=" + jobId),
dataType: "json",
success: function (json) {
var result = json.queryasyncjobresultresponse;
if (result.jobstatus == 0) {
return; //Job has not completed
} else {
clearInterval(enableSecurityGroupProviderIntervalID);
if (result.jobstatus == 1) {
//alert("Security group provider is enabled");
//create network (for basic zone only)
var array2 =[];
array2.push("&zoneid=" + newZoneObj.id);
array2.push("&name=guestNetworkForBasicZone");
array2.push("&displaytext=guestNetworkForBasicZone");
array2.push("&networkofferingid=" + args.data.networkOfferingId);
$.ajax({
url: createURL("createNetwork" + array2.join("")),
dataType: "json",
async: false,
success: function (json) {
//create pod
var array3 =[];
array3.push("&zoneId=" + newZoneObj.id);
array3.push("&name=" + todb(args.data.podName));
array3.push("&gateway=" + todb(args.data.podGateway));
array3.push("&netmask=" + todb(args.data.podNetmask));
array3.push("&startIp=" + todb(args.data.podStartIp));
var endip = args.data.podEndIp; //optional
if (endip != null && endip.length > 0)
array3.push("&endIp=" + todb(endip));
$.ajax({
url: createURL("createPod" + array3.join("")),
dataType: "json",
async: false,
success: function (json) {
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("createPod failed. Error: " + errorMsg);
}
});
}
});
} else if (result.jobstatus == 2) {
alert("failed to enable security group provider. Error: " + _s(result.jobresult.errortext));
}
}
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("updateNetworkServiceProvider failed. Error: " + errorMsg);
}
});
},
g_queryAsyncJobResultInterval);
}
});
} else {
//create network (for basic zone only)
var array2 =[];
array2.push("&zoneid=" + newZoneObj.id);
array2.push("&name=guestNetworkForBasicZone");
array2.push("&displaytext=guestNetworkForBasicZone");
array2.push("&networkofferingid=" + args.data.networkOfferingId);
$.ajax({
url: createURL("createNetwork" + array2.join("")),
dataType: "json",
async: false,
success: function (json) {
//create pod
var array3 =[];
array3.push("&zoneId=" + newZoneObj.id);
array3.push("&name=" + todb(args.data.podName));
array3.push("&gateway=" + todb(args.data.podGateway));
array3.push("&netmask=" + todb(args.data.podNetmask));
array3.push("&startIp=" + todb(args.data.podStartIp));
var endip = args.data.podEndIp; //optional
if (endip != null && endip.length > 0)
array3.push("&endIp=" + todb(endip));
$.ajax({
url: createURL("createPod" + array3.join("")),
dataType: "json",
async: false,
success: function (json) {
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("createPod failed. Error: " + errorMsg);
}
});
}
});
}
} else {
//Advanced zone
//create pod
var array3 =[];
array3.push("&zoneId=" + newZoneObj.id);
array3.push("&name=" + todb(args.data.podName));
array3.push("&gateway=" + todb(args.data.podGateway));
array3.push("&netmask=" + todb(args.data.podNetmask));
array3.push("&startIp=" + todb(args.data.podStartIp));
var endip = args.data.podEndIp; //optional
if (endip != null && endip.length > 0)
array3.push("&endIp=" + todb(endip));
$.ajax({
url: createURL("createPod" + array3.join("")),
dataType: "json",
async: false,
success: function (json) {
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("createPod failed. Error: " + errorMsg);
}
});
}
} else if (result.jobstatus == 2) {
alert("failed to enable Virtual Router Provider. Error: " + _s(result.jobresult.errortext));
}
}
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("updateNetworkServiceProvider failed. Error: " + errorMsg);
}
});
},
g_queryAsyncJobResultInterval);
}
});
} else if (result.jobstatus == 2) {
alert("configureVirtualRouterElement failed. Error: " + _s(result.jobresult.errortext));
}
}
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("configureVirtualRouterElement failed. Error: " + errorMsg);
}
});
},
g_queryAsyncJobResultInterval);
}
});
} else if (result.jobstatus == 2) {
alert("updatePhysicalNetwork failed. Error: " + _s(result.jobresult.errortext));
}
}
},
error: function (XMLHttpResponse) {
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
alert("updatePhysicalNetwork failed. Error: " + errorMsg);
}
});
},
g_queryAsyncJobResultInterval);
}
});
};
//action filters (begin)
var zoneActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[ 'enableSwift'];
if (jsonObj.vmwaredcId == null)
allowedActions.push('addVmwareDc'); else
allowedActions.push('removeVmwareDc');
if (jsonObj.domainid != null)
allowedActions.push("releaseDedicatedZone"); else
allowedActions.push("dedicateZone");
allowedActions.push("edit");
if (jsonObj.allocationstate == "Disabled")
allowedActions.push("enable"); else if (jsonObj.allocationstate == "Enabled")
allowedActions.push("disable");
allowedActions.push("remove");
return allowedActions;
}
var nexusActionfilter = function (args) {
var nexusObj = args.context.item;
var allowedActions =[];
allowedActions.push("edit");
if (nexusObj.vsmdevicestate == "Disabled")
allowedActions.push("enable"); else if (nexusObj.vsmdevicestate == "Enabled")
allowedActions.push("disable");
allowedActions.push("remove");
return allowedActions;
}
var podActionfilter = function (args) {
var podObj = args.context.item;
var dedicatedPodObj = args.context.podItem;
var allowedActions =[];
if (podObj.domainid != null)
allowedActions.push("release"); else
allowedActions.push("dedicate");
allowedActions.push("edit");
if (podObj.allocationstate == "Disabled")
allowedActions.push("enable"); else if (podObj.allocationstate == "Enabled")
allowedActions.push("disable");
allowedActions.push("remove");
/*
var selectedZoneObj;
$(zoneObjs).each(function(){
if(this.id == podObj.zoneid) {
selectedZoneObj = this;
return false; //break the $.each() loop
}
});
*/
if (selectedZoneObj.networktype == "Basic") {
//basic-mode network (pod-wide VLAN)
//$("#tab_ipallocation, #add_iprange_button, #tab_network_device, #add_network_device_button").show();
allowedActions.push("addIpRange");
allowedActions.push("addNetworkDevice");
} else if (selectedZoneObj.networktype == "Advanced") {
//advanced-mode network (zone-wide VLAN)
//$("#tab_ipallocation, #add_iprange_button, #tab_network_device, #add_network_device_button").hide();
}
return allowedActions;
}
var networkDeviceActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
return allowedActions;
}
var clusterActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
if (jsonObj.domainid != null)
allowedActions.push("release"); else
allowedActions.push("dedicate");
if (jsonObj.state == "Enabled") {
//managed, allocation enabled
allowedActions.push("unmanage");
allowedActions.push("disable");
//allowedActions.push("edit"); // No fields to edit
} else if (jsonObj.state == "Disabled") {
//managed, allocation disabled
allowedActions.push("unmanage");
allowedActions.push("enable");
//allowedActions.push("edit"); // No fields to edit
} else {
//Unmanaged, PrepareUnmanaged , PrepareUnmanagedError
allowedActions.push("manage");
}
allowedActions.push("remove");
return allowedActions;
}
var hostActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
if (jsonObj.domainid != null)
allowedActions.push("release"); else
allowedActions.push("dedicate");
if (jsonObj.resourcestate == "Enabled") {
allowedActions.push("edit");
allowedActions.push("enableMaintenanceMode");
allowedActions.push("disable");
if (jsonObj.state != "Disconnected")
allowedActions.push("forceReconnect");
} else if (jsonObj.resourcestate == "ErrorInMaintenance") {
allowedActions.push("edit");
allowedActions.push("enableMaintenanceMode");
allowedActions.push("cancelMaintenanceMode");
} else if (jsonObj.resourcestate == "PrepareForMaintenance") {
allowedActions.push("edit");
allowedActions.push("cancelMaintenanceMode");
} else if (jsonObj.resourcestate == "Maintenance") {
allowedActions.push("edit");
allowedActions.push("cancelMaintenanceMode");
allowedActions.push("remove");
} else if (jsonObj.resourcestate == "Disabled") {
allowedActions.push("edit");
allowedActions.push("enable");
allowedActions.push("remove");
}
if ((jsonObj.state == "Down" || jsonObj.state == "Alert" || jsonObj.state == "Disconnected") && ($.inArray("remove", allowedActions) == -1)) {
allowedActions.push("remove");
}
return allowedActions;
}
var primarystorageActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
allowedActions.push("edit");
if (jsonObj.state == 'Up' || jsonObj.state == "Connecting") {
allowedActions.push("enableMaintenanceMode");
} else if (jsonObj.state == 'Down') {
allowedActions.push("enableMaintenanceMode");
allowedActions.push("remove");
} else if (jsonObj.state == "Alert") {
allowedActions.push("remove");
} else if (jsonObj.state == "ErrorInMaintenance") {
allowedActions.push("enableMaintenanceMode");
allowedActions.push("cancelMaintenanceMode");
} else if (jsonObj.state == "PrepareForMaintenance") {
allowedActions.push("cancelMaintenanceMode");
} else if (jsonObj.state == "Maintenance") {
allowedActions.push("cancelMaintenanceMode");
allowedActions.push("remove");
} else if (jsonObj.state == "Disconnected") {
allowedActions.push("remove");
}
return allowedActions;
}
var secondarystorageActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions = [];
allowedActions.push("remove");
return allowedActions;
}
var routerActionfilter = cloudStack.sections.system.routerActionFilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
if (jsonObj.requiresupgrade == true) {
allowedActions.push('upgradeRouterToUseNewerTemplate');
}
if (jsonObj.state == 'Running') {
allowedActions.push("stop");
//when systemVm is running, scaleUp is not supported for KVM and XenServer.
//however, listRouters API doesn't return hypervisor property....
/*
if (jsonObj.hypervisor != 'KVM' && jsonObj.hypervisor != 'XenServer') {
allowedActions.push("scaleUp");
}
*/
allowedActions.push("scaleUp");
allowedActions.push("restart");
allowedActions.push("viewConsole");
if (isAdmin())
allowedActions.push("migrate");
} else if (jsonObj.state == 'Stopped') {
allowedActions.push("start");
allowedActions.push("scaleUp");
//when vm is stopped, scaleUp is supported for all hypervisors
allowedActions.push("remove");
}
return allowedActions;
}
var internallbinstanceActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
if (jsonObj.state == 'Running') {
allowedActions.push("stop");
allowedActions.push("viewConsole");
if (isAdmin())
allowedActions.push("migrate");
} else if (jsonObj.state == 'Stopped') {
allowedActions.push("start");
}
return allowedActions;
}
var systemvmActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
if (jsonObj.state == 'Running') {
allowedActions.push("stop");
allowedActions.push("restart");
allowedActions.push("remove");
//when systemVm is running, scaleUp is not supported for KVM and XenServer.
//however, listSystemVms API doesn't return hypervisor property....
/*
if (jsonObj.hypervisor != 'KVM' && jsonObj.hypervisor != 'XenServer') {
allowedActions.push("scaleUp");
}
*/
allowedActions.push("scaleUp");
allowedActions.push("viewConsole");
if (isAdmin())
allowedActions.push("migrate");
} else if (jsonObj.state == 'Stopped') {
allowedActions.push("start");
allowedActions.push("scaleUp");
//when vm is stopped, scaleUp is supported for all hypervisors
allowedActions.push("remove");
} else if (jsonObj.state == 'Error') {
allowedActions.push("remove");
}
return allowedActions;
}
var routerGroupActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
if (jsonObj.routerRequiresUpgrade > 0) {
allowedActions.push("upgradeRouterToUseNewerTemplate");
}
return allowedActions;
}
var bladeActionfilter = function (args) {
var jsonObj = args.context.item;
var allowedActions =[];
if (jsonObj.profiledn == null) {
allowedActions.push("associateTemplateToBlade");
} else {
allowedActions.push("disassociateProfileFromBlade");
}
return allowedActions;
}
//action filters (end)
var networkProviderActionFilter = function (id) {
return function (args) {
var allowedActions =[];
var jsonObj = nspMap[id] ?
nspMap[id]: {
};
if (jsonObj.state) {
if (jsonObj.state == "Enabled")
allowedActions.push("disable"); else if (jsonObj.state == "Disabled")
allowedActions.push("enable");
allowedActions.push("destroy");
}
allowedActions.push('add');
return allowedActions;
}
};
var addExtraPropertiesToClusterObject = function (jsonObj) {
if (jsonObj.managedstate == "Managed") {
jsonObj.state = jsonObj.allocationstate; //jsonObj.state == Enabled, Disabled
} else {
jsonObj.state = jsonObj.managedstate; //jsonObj.state == Unmanaged, PrepareUnmanaged, PrepareUnmanagedError
}
}
var addExtraPropertiesToRouterInstanceObject = function (jsonObj) {
if (jsonObj.isredundantrouter == true) {
jsonObj[ "redundantRouterState"] = jsonObj.redundantstate;
} else {
jsonObj[ "redundantRouterState"] = "";
}
}
var refreshNspData = function (nspName) {
var array1 =[];
if (nspName != null)
array1.push("&name=" + nspName);
$.ajax({
url: createURL("listNetworkServiceProviders&physicalnetworkid=" + selectedPhysicalNetworkObj.id + array1.join("")),
dataType: "json",
async: false,
success: function (json) {
nspMap = {
};
//reset
var items = json.listnetworkserviceprovidersresponse.networkserviceprovider;
if (items != null) {
for (var i = 0; i < items.length; i++) {
switch (items[i].name) {
case "VirtualRouter":
nspMap[ "virtualRouter"] = items[i];
break;
case "InternalLbVm":
nspMap[ "InternalLbVm"] = items[i];
break;
case "VpcVirtualRouter":
nspMap[ "vpcVirtualRouter"] = items[i];
break;
case "Ovs":
nspMap["Ovs"] = items[i];
break;
case "Netscaler":
nspMap[ "netscaler"] = items[i];
break;
case "MidoNet":
nspMap[ "midoNet"] = items[i];
break;
case "BaremetalDhcpProvider":
nspMap[ "BaremetalDhcpProvider"] = items[i];
break;
case "BaremetalPxeProvider":
nspMap[ "BaremetalPxeProvider"] = items[i];
break;
case "F5BigIp":
nspMap[ "f5"] = items[i];
break;
case "JuniperSRX":
nspMap[ "srx"] = items[i];
break;
case "PaloAlto":
nspMap[ "pa"] = items[i];
break;
case "SecurityGroupProvider":
nspMap[ "securityGroups"] = items[i];
break;
case "NiciraNvp":
nspMap[ "niciraNvp"] = items[i];
break;
case "BigSwitchVns":
nspMap[ "bigswitchVns"] = items[i];
break;
case "Ovs":
nspMap[ "Ovs"] = items[i];
break;
case "Opendaylight":
nspMap[ "Opendaylight"] = items[i];
break;
}
}
}
}
});
nspHardcodingArray =[ {
id: 'netscaler',
name: 'NetScaler',
state: nspMap.netscaler ? nspMap.netscaler.state: 'Disabled'
},
{
id: 'virtualRouter',
name: 'Virtual Router',
state: nspMap.virtualRouter ? nspMap.virtualRouter.state: 'Disabled'
},
{
id: 'niciraNvp',
name: 'Nicira Nvp',
state: nspMap.niciraNvp ? nspMap.niciraNvp.state: 'Disabled'
},
{
id: 'bigswitchVns',
name: 'BigSwitch Vns',
state: nspMap.bigswitchVns ? nspMap.bigswitchVns.state: 'Disabled'
},
{
id: 'BaremetalDhcpProvider',
name: 'Baremetal DHCP',
state: nspMap.BaremetalDhcpProvider ? nspMap.BaremetalDhcpProvider.state: 'Disabled'
},
{
id: 'BaremetalPxeProvider',
name: 'Baremetal PXE',
state: nspMap.BaremetalPxeProvider ? nspMap.BaremetalPxeProvider.state: 'Disabled'
},
{
id: 'Ovs',
name: 'Ovs',
state: nspMap.Ovs ? nspMap.Ovs.state: 'Disabled'
},
{
id: 'Opendaylight',
name: 'OpenDaylight (Experimental)',
state: nspMap.Opendaylight ? nspMap.Opendaylight.state: 'Disabled'
}];
$(window).trigger('cloudStack.system.serviceProviders.makeHarcodedArray', {
nspHardcodingArray: nspHardcodingArray,
selectedZoneObj: selectedZoneObj,
selectedPhysicalNetworkObj: selectedPhysicalNetworkObj
});
if (selectedZoneObj.networktype == "Basic") {
nspHardcodingArray.push({
id: 'securityGroups',
name: 'Security Groups',
state: nspMap.securityGroups ? nspMap.securityGroups.state: 'Disabled'
});
} else if (selectedZoneObj.networktype == "Advanced") {
nspHardcodingArray.push({
id: 'midoNet',
name: 'MidoNet',
state: nspMap.midoNet ? nspMap.midoNet.state: 'Disabled'
});
nspHardcodingArray.push({
id: 'InternalLbVm',
name: 'Internal LB VM',
state: nspMap.InternalLbVm ? nspMap.InternalLbVm.state: 'Disabled'
});
nspHardcodingArray.push({
id: 'vpcVirtualRouter',
name: 'VPC Virtual Router',
state: nspMap.vpcVirtualRouter ? nspMap.vpcVirtualRouter.state: 'Disabled'
});
nspHardcodingArray.push({
id: 'f5',
name: 'F5',
state: nspMap.f5 ? nspMap.f5.state: 'Disabled'
});
nspHardcodingArray.push({
id: 'srx',
name: 'SRX',
state: nspMap.srx ? nspMap.srx.state: 'Disabled'
});
nspHardcodingArray.push({
id: 'pa',
name: 'Palo Alto',
state: nspMap.pa ? nspMap.pa.state: 'Disabled'
});
}
nspHardcodingArray.push({
id: 'OVS',
name: 'OVS',
state: nspMap.Ovs ? nspMap.Ovs.state : 'Disabled'
});
};
cloudStack.actionFilter.physicalNetwork = function (args) {
var state = args.context.item.state;
if (state != 'Destroyed') {
return[ 'remove'];
}
return[];
};
function addExtraPropertiesToGroupbyObjects(groupbyObjs, groupbyId) {
for (var i = 0; i < groupbyObjs.length; i++) {
addExtraPropertiesToGroupbyObject(groupbyObjs[i], groupbyId);
}
}
function addExtraPropertiesToGroupbyObject(groupbyObj, groupbyId) {
var currentPage = 1;
var listRoutersData = {
listAll: true,
pagesize: pageSize //global variable
};
listRoutersData[groupbyId] = groupbyObj.id;
$.ajax({
url: createURL('listRouters'),
data: $.extend({
},
listRoutersData, {
page: currentPage
}),
async: false,
success: function(json) {
if (json.listroutersresponse.count != undefined) {
var routerCountFromAllPages = json.listroutersresponse.count;
var routerCountFromFirstPageToCurrentPage = json.listroutersresponse.router.length;
var routerRequiresUpgrade = 0;
var items = json.listroutersresponse.router;
for (var k = 0; k < items.length; k++) {
if (items[k].requiresupgrade) {
routerRequiresUpgrade++;
}
}
$.ajax({
url: createURL('listRouters'),
data: $.extend({}, listRoutersData, {
page: currentPage,
projectid: -1
}),
async: false,
success: function(json) {
if (json.listroutersresponse.count != undefined) {
routerCountFromAllPages += json.listroutersresponse.count;
groupbyObj.routerCount = routerCountFromAllPages;
routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length;
var items = json.listroutersresponse.router;
for (var k = 0; k < items.length; k++) {
if (items[k].requiresupgrade) {
routerRequiresUpgrade++;
}
}
} else {
groupbyObj.routerCount = routerCountFromAllPages;
}
}
});
var callListApiWithPage = function() {
$.ajax({
url: createURL('listRouters'),
async: false,
data: $.extend({}, listRoutersData, {
page: currentPage
}),
success: function(json) {
routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length;
var items = json.listroutersresponse.router;
for (var k = 0; k < items.length; k++) {
if (items[k].requiresupgrade) {
routerRequiresUpgrade++;
}
}
$.ajax({
url: createURL('listRouters'),
async: false,
data: $.extend({}, listRoutersData, {
page: currentPage,
projectid: -1
}),
success: function(json) {
if (json.listroutersresponse.count != undefined) {
routerCountFromAllPages += json.listroutersresponse.count;
groupbyObj.routerCount = routerCountFromAllPages;
routerCountFromFirstPageToCurrentPage += json.listroutersresponse.router.length;
var items = json.listroutersresponse.router;
for (var k = 0; k < items.length; k++) {
if (items[k].requiresupgrade) {
routerRequiresUpgrade++;
}
}
} else {
groupbyObj.routerCount = routerCountFromAllPages;
}
}
});
if (routerCountFromFirstPageToCurrentPage < routerCountFromAllPages) {
currentPage++;
callListApiWithPage();
}
}
});
}
if (routerCountFromFirstPageToCurrentPage < routerCountFromAllPages) {
currentPage++;
callListApiWithPage();
}
groupbyObj.routerRequiresUpgrade = routerRequiresUpgrade;
groupbyObj.numberOfRouterRequiresUpgrade = routerRequiresUpgrade;
} else {
groupbyObj.routerCount = 0;
groupbyObj.routerRequiresUpgrade = 0;
groupbyObj.numberOfRouterRequiresUpgrade = 0;
}
}
});
}
})($, cloudStack);