mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
1582 lines
98 KiB
JavaScript
1582 lines
98 KiB
JavaScript
// Licensed to the Apache Software Foundation (ASF) under one
|
|
// or more contributor license agreements. See the NOTICE file
|
|
// distributed with this work for additional information
|
|
// regarding copyright ownership. The ASF licenses this file
|
|
// to you under the Apache License, Version 2.0 (the
|
|
// "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
(function (cloudStack) {
|
|
|
|
var rootCaCert = "";
|
|
var downloadCaCert = function() {
|
|
var blob = new Blob([rootCaCert], {type: 'application/x-x509-ca-cert'});
|
|
var filename = "cloudstack-ca.pem";
|
|
if(window.navigator.msSaveOrOpenBlob) {
|
|
window.navigator.msSaveBlob(blob, filename);
|
|
} else{
|
|
var elem = window.document.createElement('a');
|
|
elem.href = window.URL.createObjectURL(blob);
|
|
elem.download = filename;
|
|
document.body.appendChild(elem)
|
|
elem.click();
|
|
document.body.removeChild(elem);
|
|
}
|
|
};
|
|
var clusterKubeConfig = "";
|
|
var downloadClusterKubeConfig = function() {
|
|
var blob = new Blob([clusterKubeConfig], {type: 'text/plain'});
|
|
var filename = "kube.conf";
|
|
if(window.navigator.msSaveOrOpenBlob) {
|
|
window.navigator.msSaveBlob(blob, filename);
|
|
} else{
|
|
var elem = window.document.createElement('a');
|
|
elem.href = window.URL.createObjectURL(blob);
|
|
elem.download = filename;
|
|
document.body.appendChild(elem)
|
|
elem.click();
|
|
document.body.removeChild(elem);
|
|
}
|
|
};
|
|
var minCpu = 0;
|
|
var minRamSize = 0;
|
|
cloudStack.plugins.cks = function(plugin) {
|
|
plugin.ui.addSection({
|
|
id: 'cks',
|
|
title: 'label.kubernetes.service',
|
|
preFilter: function(args) {
|
|
var pluginEnabled = false;
|
|
$.ajax({
|
|
url: createURL('listCapabilities'),
|
|
async: false,
|
|
success: function(json) {
|
|
pluginEnabled = json.listcapabilitiesresponse.capability.kubernetesserviceenabled;
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
pluginEnabled = false;
|
|
}
|
|
});
|
|
return pluginEnabled;
|
|
},
|
|
showOnNavigation: true,
|
|
sectionSelect: {
|
|
label: 'label.select-view',
|
|
preFilter: function() {
|
|
return ['kubernetesclusters', 'kubernetesversions'];
|
|
}
|
|
},
|
|
sections: {
|
|
kubernetesclusters: {
|
|
id: 'kubernetesclusters',
|
|
type: 'select',
|
|
title: "label.clusters",
|
|
listView: {
|
|
filters: {
|
|
all: {
|
|
label: 'ui.listView.filters.all'
|
|
},
|
|
running: {
|
|
label: 'state.Running'
|
|
},
|
|
stopped: {
|
|
label: 'state.Stopped'
|
|
},
|
|
destroyed: {
|
|
label: 'state.Destroyed'
|
|
}
|
|
},
|
|
fields: {
|
|
name: {
|
|
label: 'label.name'
|
|
},
|
|
zonename: {
|
|
label: 'label.zone.name'
|
|
},
|
|
size : {
|
|
label: 'label.size'
|
|
},
|
|
cpunumber: {
|
|
label: 'label.num.cpu.cores'
|
|
},
|
|
memory: {
|
|
label: 'label.memory.mb'
|
|
},
|
|
state: {
|
|
label: 'label.state',
|
|
indicator: {
|
|
'Running': 'on',
|
|
'Stopped': 'off',
|
|
'Destroyed': 'off',
|
|
'Error': 'off'
|
|
}
|
|
}
|
|
},
|
|
advSearchFields: {
|
|
name: {
|
|
label: 'label.name'
|
|
},
|
|
zoneid: {
|
|
label: 'label.zone',
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL('listZones'),
|
|
data: {
|
|
listAll: true
|
|
},
|
|
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
|
|
};
|
|
})
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
},
|
|
// List view actions
|
|
actions: {
|
|
add: {
|
|
label: 'label.add.kubernetes.cluster',
|
|
createForm: {
|
|
title: 'label.add.kubernetes.cluster',
|
|
preFilter: function(args) {
|
|
args.$form.find('.form-item[rel=masternodes]').find('input[name=masternodes]').val('2');
|
|
args.$form.find('.form-item[rel=size]').find('input[name=size]').val('1');
|
|
var experimentalFeaturesEnabled = false;
|
|
$.ajax({
|
|
url: createURL('listCapabilities'),
|
|
async: false,
|
|
success: function(json) {
|
|
experimentalFeaturesEnabled = json.listcapabilitiesresponse.capability.kubernetesclusterexperimentalfeaturesenabled;
|
|
}
|
|
});
|
|
if (experimentalFeaturesEnabled == true) {
|
|
args.$form.find('.form-item[rel=supportPrivateRegistry]').css('display', 'inline-block');
|
|
}
|
|
},
|
|
fields: {
|
|
name: {
|
|
label: 'label.name',
|
|
//docID: 'Name of the cluster',
|
|
validation: {
|
|
required: true
|
|
}
|
|
},
|
|
description: {
|
|
label: 'label.description',
|
|
//docID: 'helpKubernetesClusterDesc',
|
|
validation: {
|
|
required: true
|
|
}
|
|
},
|
|
zone: {
|
|
label: 'label.zone',
|
|
//docID: 'helpKubernetesClusterZone',
|
|
validation: {
|
|
required: true
|
|
},
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL("listZones&available=true"),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var items = [];
|
|
var zoneObjs = json.listzonesresponse.zone;
|
|
if (zoneObjs != null) {
|
|
for (var i = 0; i < zoneObjs.length; i++) {
|
|
items.push({
|
|
id: zoneObjs[i].id,
|
|
description: zoneObjs[i].name
|
|
});
|
|
}
|
|
}
|
|
args.response.success({
|
|
data: items
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
kubernetesversion: {
|
|
label: 'label.kubernetes.version',
|
|
dependsOn: ['zone'],
|
|
//docID: 'helpKubernetesClusterZone',
|
|
validation: {
|
|
required: true
|
|
},
|
|
select: function(args) {
|
|
var versionObjs;
|
|
var filterData = { zoneid: args.zone };
|
|
$.ajax({
|
|
url: createURL("listKubernetesSupportedVersions"),
|
|
data: filterData,
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var items = [];
|
|
versionObjs = json.listkubernetessupportedversionsresponse.kubernetessupportedversion;
|
|
if (versionObjs != null) {
|
|
for (var i = 0; i < versionObjs.length; i++) {
|
|
if (versionObjs[i].state == 'Enabled' && versionObjs[i].isostate == 'Ready') {
|
|
items.push({
|
|
id: versionObjs[i].id,
|
|
description: versionObjs[i].name
|
|
});
|
|
}
|
|
}
|
|
}
|
|
args.response.success({
|
|
data: items
|
|
});
|
|
}
|
|
});
|
|
|
|
args.$select.change(function() {
|
|
var $form = $(this).closest("form");
|
|
$form.find('.form-item[rel=multimaster]').find('input[name=multimaster]').prop('checked', false);
|
|
$form.find('.form-item[rel=multimaster]').hide();
|
|
$form.find('.form-item[rel=masternodes]').hide();
|
|
var currentVersionId = $(this).val();
|
|
if (currentVersionId != null && versionObjs != null) {
|
|
for (var i = 0; i < versionObjs.length; i++) {
|
|
if (currentVersionId == versionObjs[i].id) {
|
|
if (versionObjs[i].supportsha === true) {
|
|
$form.find('.form-item[rel=multimaster]').css('display', 'inline-block');
|
|
}
|
|
minCpu = 0;
|
|
if (versionObjs[i].mincpunumber != null && versionObjs[i].mincpunumber != undefined) {
|
|
minCpu = versionObjs[i].mincpunumber;
|
|
}
|
|
minRamSize = 0;
|
|
if (versionObjs[i].minmemory != null && versionObjs[i].minmemory != undefined) {
|
|
minRamSize = versionObjs[i].minmemory;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
serviceoffering: {
|
|
label: 'label.menu.service.offerings',
|
|
dependsOn: ['kubernetesversion'],
|
|
//docID: 'helpKubernetesClusterServiceOffering',
|
|
validation: {
|
|
required: true
|
|
},
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL("listServiceOfferings"),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var offeringObjs = [];
|
|
var items = json.listserviceofferingsresponse.serviceoffering;
|
|
if (items != null) {
|
|
for (var i = 0; i < items.length; i++) {
|
|
if (items[i].iscustomized == false &&
|
|
items[i].cpunumber >= minCpu && items[i].memory >= minRamSize) {
|
|
offeringObjs.push({
|
|
id: items[i].id,
|
|
description: items[i].name
|
|
});
|
|
}
|
|
}
|
|
}
|
|
args.response.success({
|
|
data: offeringObjs
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
noderootdisksize: {
|
|
label: 'label.node.root.disk.size.gb',
|
|
//docID: 'helpKubernetesClusterNodeRootDiskSize',
|
|
validation: {
|
|
number: true
|
|
}
|
|
},
|
|
network: {
|
|
label: 'label.network',
|
|
//docID: 'helpKubernetesClusterNetwork',
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL("listNetworks"),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var networkObjs = [];
|
|
networkObjs.push({
|
|
id: "",
|
|
description: ""
|
|
});
|
|
var items = json.listnetworksresponse.network;
|
|
if (items != null) {
|
|
for (var i = 0; i < items.length; i++) {
|
|
networkObjs.push({
|
|
id: items[i].id,
|
|
description: items[i].name
|
|
});
|
|
}
|
|
}
|
|
args.response.success({
|
|
data: networkObjs
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
multimaster: {
|
|
label: "label.ha.enabled",
|
|
dependsOn: 'kubernetesversion',
|
|
isBoolean: true,
|
|
isChecked: false,
|
|
},
|
|
masternodes: {
|
|
label: 'label.master.nodes',
|
|
//docID: 'helpKubernetesClusterSize',
|
|
validation: {
|
|
required: true,
|
|
multiplecountnumber: true
|
|
},
|
|
dependsOn: "multimaster",
|
|
isHidden: true,
|
|
},
|
|
externalloadbalanceripaddress: {
|
|
label: 'label.external.loadbalancer.ip.address',
|
|
validation: {
|
|
ipv4AndIpv6AddressValidator: true
|
|
},
|
|
dependsOn: "multimaster",
|
|
isHidden: true,
|
|
},
|
|
size: {
|
|
label: 'label.cluster.size.worker.nodes',
|
|
//docID: 'helpKubernetesClusterSize',
|
|
validation: {
|
|
required: true,
|
|
naturalnumber: true
|
|
},
|
|
},
|
|
sshkeypair: {
|
|
label: 'label.ssh.key.pair',
|
|
//docID: 'helpKubernetesClusterSSH',
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL("listSSHKeyPairs"),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var keypairObjs = [];
|
|
keypairObjs.push({
|
|
id: "",
|
|
description: ""
|
|
});
|
|
var items = json.listsshkeypairsresponse.sshkeypair;
|
|
if (items != null) {
|
|
for (var i = 0; i < items.length; i++) {
|
|
keypairObjs.push({
|
|
id: items[i].name,
|
|
description: items[i].name
|
|
});
|
|
}
|
|
}
|
|
args.response.success({
|
|
data: keypairObjs
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
supportPrivateRegistry: {
|
|
label: 'label.private.registry',
|
|
isBoolean: true,
|
|
isChecked: false,
|
|
isHidden: true
|
|
},
|
|
username: {
|
|
label: 'label.username',
|
|
dependsOn: 'supportPrivateRegistry',
|
|
validation: {
|
|
required: true
|
|
},
|
|
isHidden: true
|
|
},
|
|
password: {
|
|
label: 'label.password',
|
|
dependsOn: 'supportPrivateRegistry',
|
|
validation: {
|
|
required: true
|
|
},
|
|
isHidden: true,
|
|
isPassword: true
|
|
},
|
|
url: {
|
|
label: 'label.url',
|
|
dependsOn: 'supportPrivateRegistry',
|
|
validation: {
|
|
required: true
|
|
},
|
|
isHidden: true,
|
|
},
|
|
email: {
|
|
label: 'label.email',
|
|
dependsOn: 'supportPrivateRegistry',
|
|
validation: {
|
|
required: true
|
|
},
|
|
isHidden: true,
|
|
}
|
|
}
|
|
},
|
|
|
|
action: function(args) {
|
|
var data = {
|
|
name: args.data.name,
|
|
description: args.data.description,
|
|
zoneid: args.data.zone,
|
|
kubernetesversionid: args.data.kubernetesversion,
|
|
serviceofferingid: args.data.serviceoffering,
|
|
size: args.data.size,
|
|
keypair: args.data.sshkeypair
|
|
};
|
|
|
|
if (args.data.noderootdisksize != null && args.data.noderootdisksize != "" && args.data.noderootdisksize > 0) {
|
|
$.extend(data, {
|
|
noderootdisksize: args.data.noderootdisksize
|
|
});
|
|
}
|
|
|
|
var masterNodes = 1;
|
|
if (args.data.multimaster === 'on') {
|
|
masterNodes = args.data.masternodes;
|
|
if (args.data.externalloadbalanceripaddress != null && args.data.externalloadbalanceripaddress != "") {
|
|
$.extend(data, {
|
|
externalloadbalanceripaddress: args.data.externalloadbalanceripaddress
|
|
});
|
|
}
|
|
}
|
|
$.extend(data, {
|
|
masternodes: masterNodes
|
|
});
|
|
|
|
if (args.data.supportPrivateRegistry) {
|
|
$.extend(data, {
|
|
dockerregistryusername: args.data.username,
|
|
dockerregistrypassword: args.data.password,
|
|
dockerregistryurl: args.data.url,
|
|
dockerregistryemail: args.data.email
|
|
});
|
|
}
|
|
|
|
if (args.data.network != null && args.data.network.length > 0) {
|
|
$.extend(data, {
|
|
networkid: args.data.network
|
|
});
|
|
}
|
|
$.ajax({
|
|
url: createURL('createKubernetesCluster'),
|
|
data: data,
|
|
success: function(json) {
|
|
var jid = json.createkubernetesclusterresponse.jobid;
|
|
args.response.success({
|
|
_custom: {
|
|
jobId: jid
|
|
}
|
|
});
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
|
|
args.response.error(errorMsg);
|
|
}
|
|
});
|
|
},
|
|
|
|
|
|
messages: {
|
|
notification: function(args) {
|
|
return 'Kubernetes Cluster Add';
|
|
}
|
|
},
|
|
notification: {
|
|
poll: pollAsyncJobResult
|
|
}
|
|
}
|
|
},
|
|
dataProvider: function(args) {
|
|
var data = {
|
|
page: args.page,
|
|
pagesize: pageSize
|
|
};
|
|
listViewDataProvider(args, data);
|
|
if (args.filterBy != null) { //filter dropdown
|
|
if (args.filterBy.kind != null) {
|
|
switch (args.filterBy.kind) {
|
|
case "all":
|
|
break;
|
|
case "running":
|
|
$.extend(data, {
|
|
state: 'Running'
|
|
});
|
|
break;
|
|
case "stopped":
|
|
$.extend(data, {
|
|
state: 'Stopped'
|
|
});
|
|
break;
|
|
case "destroyed":
|
|
$.extend(data, {
|
|
state: 'Destroyed'
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
$.ajax({
|
|
url: createURL("listKubernetesClusters"),
|
|
data: data,
|
|
dataType: "json",
|
|
sync: true,
|
|
success: function(json) {
|
|
var items = [];
|
|
if (json.listkubernetesclustersresponse.kubernetescluster != null) {
|
|
items = json.listkubernetesclustersresponse.kubernetescluster;
|
|
}
|
|
args.response.success({
|
|
actionFilter: cksActionfilter,
|
|
data: items
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
detailView: {
|
|
name: 'label.kubernetes.cluster.details',
|
|
isMaximized: true,
|
|
actions: {
|
|
start: {
|
|
label: 'label.start.kuberentes.cluster',
|
|
action: function(args) {
|
|
$.ajax({
|
|
url: createURL("startKubernetesCluster"),
|
|
data: {"id": args.context.kubernetesclusters[0].id},
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var jid = json.startkubernetesclusterresponse.jobid;
|
|
args.response.success({
|
|
_custom: {
|
|
jobId: jid
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
messages: {
|
|
confirm: function(args) {
|
|
return 'message.confirm.start.kubernetes.cluster';
|
|
},
|
|
notification: function(args) {
|
|
return 'Started Kubernetes cluster.';
|
|
}
|
|
},
|
|
notification: {
|
|
poll: pollAsyncJobResult
|
|
}
|
|
},
|
|
stop: {
|
|
label: 'label.stop.kuberentes.cluster',
|
|
action: function(args) {
|
|
$.ajax({
|
|
url: createURL("stopKubernetesCluster"),
|
|
data: {"id": args.context.kubernetesclusters[0].id},
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var jid = json.stopkubernetesclusterresponse.jobid;
|
|
args.response.success({
|
|
_custom: {
|
|
jobId: jid
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
messages: {
|
|
confirm: function(args) {
|
|
return 'message.confirm.stop.kubernetes.cluster';
|
|
},
|
|
notification: function(args) {
|
|
return 'Stopped Kubernetes cluster.';
|
|
}
|
|
},
|
|
notification: {
|
|
poll: pollAsyncJobResult
|
|
}
|
|
},
|
|
destroy: {
|
|
label: 'label.destroy.kubernetes.cluster',
|
|
compactLabel: 'label.destroy',
|
|
createForm: {
|
|
title: 'label.destroy.kubernetes.cluster',
|
|
desc: 'label.destroy.kubernetes.cluster',
|
|
isWarning: true,
|
|
fields: {
|
|
}
|
|
},
|
|
messages: {
|
|
confirm: function(args) {
|
|
return 'message.confirm.destroy.kubernetes.cluster';
|
|
},
|
|
notification: function(args) {
|
|
return 'Destroyed Kubernetes cluster.';
|
|
}
|
|
},
|
|
action: function(args) {
|
|
var data = {
|
|
id: args.context.kubernetesclusters[0].id
|
|
};
|
|
$.ajax({
|
|
url: createURL('deleteKubernetesCluster'),
|
|
data: data,
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
args.response.success({
|
|
_custom: {
|
|
jobId: json.deletekubernetesclusterresponse.jobid,
|
|
getUpdatedItem: function(json) {
|
|
return { 'toRemove': true };
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
notification: {
|
|
poll: pollAsyncJobResult
|
|
}
|
|
},
|
|
downloadKubernetesClusterKubeConfig: {
|
|
label: 'label.download.kubernetes.cluster.config',
|
|
messages: {
|
|
notification: function(args) {
|
|
return 'label.download.kubernetes.cluster.config';
|
|
}
|
|
},
|
|
action: function(args) {
|
|
var data = {
|
|
id: args.context.kubernetesclusters[0].id
|
|
}
|
|
$.ajax({
|
|
url: createURL("getKubernetesClusterConfig"),
|
|
dataType: "json",
|
|
data: data,
|
|
async: false,
|
|
success: function(json) {
|
|
var jsonObj;
|
|
if (json.getkubernetesclusterconfigresponse.clusterconfig != null &&
|
|
json.getkubernetesclusterconfigresponse.clusterconfig.configdata != null ) {
|
|
jsonObj = json.getkubernetesclusterconfigresponse.clusterconfig;
|
|
clusterKubeConfig = jsonObj.configdata;
|
|
downloadClusterKubeConfig();
|
|
args.response.success({});
|
|
} else {
|
|
args.response.error("Unable to retrieve Kubernetes cluster config");
|
|
}
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
|
|
args.response.error(errorMsg);
|
|
}
|
|
});
|
|
},
|
|
notification: {
|
|
poll: function(args) {
|
|
args.complete();
|
|
}
|
|
}
|
|
},
|
|
scaleKubernetesCluster: {
|
|
label: 'label.scale.kubernetes.cluster',
|
|
messages: {
|
|
notification: function(args) {
|
|
return 'label.scale.kubernetes.cluster';
|
|
}
|
|
},
|
|
createForm: {
|
|
title: 'label.scale.kubernetes.cluster',
|
|
desc: '',
|
|
preFilter: function(args) {
|
|
var options = args.$form.find('.form-item[rel=serviceoffering]').find('option');
|
|
$.each(options, function(optionIndex, option) {
|
|
if ($(option).val() === args.context.kubernetesclusters[0].serviceofferingid) {
|
|
$(option).attr('selected','selected');
|
|
}
|
|
});
|
|
args.$form.find('.form-item[rel=size]').find('input[name=size]').val(args.context.kubernetesclusters[0].size);
|
|
},
|
|
fields: {
|
|
serviceoffering: {
|
|
label: 'label.menu.service.offerings',
|
|
//docID: 'helpKubernetesClusterServiceOffering',
|
|
validation: {
|
|
required: true
|
|
},
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL("listKubernetesSupportedVersions"),
|
|
data: {id: args.context.kubernetesclusters[0].kubernetesversionid},
|
|
dataType: "json",
|
|
async: false,
|
|
success: function(json) {
|
|
var versionObjs = json.listkubernetessupportedversionsresponse.kubernetessupportedversion;
|
|
if (versionObjs != null && versionObjs.length > 0) {
|
|
minCpu = 0;
|
|
if (versionObjs[0].mincpunumber != null && versionObjs[0].mincpunumber != undefined) {
|
|
minCpu = versionObjs[0].mincpunumber;
|
|
}
|
|
minRamSize = 0;
|
|
if (versionObjs[0].minmemory != null && versionObjs[0].minmemory != undefined) {
|
|
minRamSize = versionObjs[0].minmemory;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
$.ajax({
|
|
url: createURL("listServiceOfferings"),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var offeringObjs = [];
|
|
var items = json.listserviceofferingsresponse.serviceoffering;
|
|
if (items != null) {
|
|
for (var i = 0; i < items.length; i++) {
|
|
if (items[i].iscustomized == false &&
|
|
items[i].cpunumber >= minCpu && items[i].memory >= minRamSize) {
|
|
offeringObjs.push({
|
|
id: items[i].id,
|
|
description: items[i].name
|
|
});
|
|
}
|
|
}
|
|
}
|
|
args.response.success({
|
|
data: offeringObjs
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
size: {
|
|
label: 'label.cluster.size',
|
|
//docID: 'helpKubernetesClusterSize',
|
|
validation: {
|
|
required: true,
|
|
number: true
|
|
},
|
|
}
|
|
}
|
|
},
|
|
action: function(args) {
|
|
var data = {
|
|
id: args.context.kubernetesclusters[0].id,
|
|
serviceofferingid: args.data.serviceoffering,
|
|
size: args.data.size
|
|
};
|
|
$.ajax({
|
|
url: createURL('scaleKubernetesCluster'),
|
|
data: data,
|
|
dataType: "json",
|
|
success: function (json) {
|
|
var jid = json.scalekubernetesclusterresponse.jobid;
|
|
args.response.success({
|
|
_custom: {
|
|
jobId: jid,
|
|
getActionFilter: function() {
|
|
return cksActionfilter;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}); //end ajax
|
|
},
|
|
notification: {
|
|
poll: pollAsyncJobResult
|
|
}
|
|
},
|
|
upgradeKubernetesCluster: {
|
|
label: 'label.upgrade.kubernetes.cluster',
|
|
messages: {
|
|
notification: function(args) {
|
|
return 'label.upgrade.kubernetes.cluster';
|
|
}
|
|
},
|
|
createForm: {
|
|
title: 'label.upgrade.kubernetes.cluster',
|
|
desc: '',
|
|
preFilter: function(args) {},
|
|
fields: {
|
|
kubernetesversion: {
|
|
label: 'label.kubernetes.version',
|
|
//docID: 'helpKubernetesClusterZone',
|
|
validation: {
|
|
required: true
|
|
},
|
|
select: function(args) {
|
|
var filterData = { minimumkubernetesversionid: args.context.kubernetesclusters[0].kubernetesversionid };
|
|
$.ajax({
|
|
url: createURL("listKubernetesSupportedVersions"),
|
|
data: filterData,
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var items = [];
|
|
var versionObjs = json.listkubernetessupportedversionsresponse.kubernetessupportedversion;
|
|
if (versionObjs != null) {
|
|
var clusterVersion = null;
|
|
for (var j = 0; j < versionObjs.length; j++) {
|
|
if (versionObjs[j].id == args.context.kubernetesclusters[0].kubernetesversionid) {
|
|
clusterVersion = versionObjs[j];
|
|
break;
|
|
}
|
|
}
|
|
for (var i = 0; i < versionObjs.length; i++) {
|
|
if (versionObjs[i].id != args.context.kubernetesclusters[0].kubernetesversionid &&
|
|
(clusterVersion == null || (clusterVersion != null && versionObjs[i].semanticversion != clusterVersion.semanticversion)) &&
|
|
versionObjs[i].state == 'Enabled' && versionObjs[i].isostate == 'Ready') {
|
|
items.push({
|
|
id: versionObjs[i].id,
|
|
description: versionObjs[i].name
|
|
});
|
|
}
|
|
}
|
|
}
|
|
args.response.success({
|
|
data: items
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
}
|
|
},
|
|
action: function(args) {
|
|
var data = {
|
|
id: args.context.kubernetesclusters[0].id,
|
|
kubernetesversionid: args.data.kubernetesversion
|
|
};
|
|
$.ajax({
|
|
url: createURL('upgradeKubernetesCluster'),
|
|
data: data,
|
|
dataType: "json",
|
|
success: function (json) {
|
|
var jid = json.upgradekubernetesclusterresponse.jobid;
|
|
args.response.success({
|
|
_custom: {
|
|
jobId: jid,
|
|
getActionFilter: function() {
|
|
return cksActionfilter;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}); //end ajax
|
|
},
|
|
notification: {
|
|
poll: pollAsyncJobResult
|
|
}
|
|
},
|
|
},
|
|
tabs: {
|
|
// Details tab
|
|
details: {
|
|
title: 'label.details',
|
|
fields: [{
|
|
id: {
|
|
label: 'label.id'
|
|
},
|
|
name: {
|
|
label: 'label.name'
|
|
},
|
|
zonename: {
|
|
label: 'label.zone.name'
|
|
},
|
|
kubernetesversionname: {
|
|
label: 'label.kubernetes.version'
|
|
},
|
|
masternodes : {
|
|
label: 'label.master.nodes'
|
|
},
|
|
size : {
|
|
label: 'label.cluster.size'
|
|
},
|
|
cpunumber: {
|
|
label: 'label.num.cpu.cores'
|
|
},
|
|
memory: {
|
|
label: 'label.memory.mb'
|
|
},
|
|
state: {
|
|
label: 'label.state',
|
|
},
|
|
serviceofferingname: {
|
|
label: 'label.compute.offering'
|
|
},
|
|
associatednetworkname: {
|
|
label: 'label.network'
|
|
},
|
|
keypair: {
|
|
label: 'label.ssh.key.pair'
|
|
}
|
|
}],
|
|
|
|
dataProvider: function(args) {
|
|
$.ajax({
|
|
url: createURL("listKubernetesClusters&id=" + args.context.kubernetesclusters[0].id),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var jsonObj;
|
|
if (json.listkubernetesclustersresponse.kubernetescluster != null && json.listkubernetesclustersresponse.kubernetescluster.length > 0) {
|
|
jsonObj = json.listkubernetesclustersresponse.kubernetescluster[0];
|
|
}
|
|
args.response.success({
|
|
actionFilter: cksActionfilter,
|
|
data: jsonObj
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
clusteraccess: {
|
|
title: 'label.access',
|
|
custom : function (args) {
|
|
var showAccess = function() {
|
|
var state = args.context.kubernetesclusters[0].state;
|
|
if (state == "Created") { // Created
|
|
return jQuery('<br><p>').html("Kubernetes cluster setup is under progress, please check again in few minutes.");
|
|
} else if (state == "Error") { // Error
|
|
return jQuery('<br><p>').html("Kubernetes cluster is in error state, it cannot be accessed.");
|
|
} else if (state == "Destroying") { // Destroying
|
|
return jQuery('<br><p>').html("Kubernetes cluster is in destroying state, it cannot be accessed.");
|
|
} else if (state == "Destroyed") { // Destroyed
|
|
return jQuery('<br><p>').html("Kubernetes cluster is already destroyed, it cannot be accessed.");
|
|
}
|
|
var data = {
|
|
id: args.context.kubernetesclusters[0].kubernetesversionid
|
|
}
|
|
var version = '';
|
|
$.ajax({
|
|
url: createURL("listKubernetesSupportedVersions"),
|
|
dataType: "json",
|
|
data: data,
|
|
async: false,
|
|
success: function(json) {
|
|
var jsonObj;
|
|
if (json.listkubernetessupportedversionsresponse.kubernetessupportedversion != null) {
|
|
version = json.listkubernetessupportedversionsresponse.kubernetessupportedversion[0].semanticversion;
|
|
}
|
|
}
|
|
});
|
|
return jQuery('<br><p>').html("Access Kubernetes cluster<br><br>Download cluster's kubeconfig file using action from Details tab.<br>Download kubectl tool for cluster's Kubernetes version from,<br>Linux: <a href='https://storage.googleapis.com/kubernetes-release/release/v" + version + "/bin/linux/amd64/kubectl'>https://storage.googleapis.com/kubernetes-release/release/v" + version + "/bin/linux/amd64/kubectl</a><br>MacOS: <a href='https://storage.googleapis.com/kubernetes-release/release/v" + version + "/bin/darwin/amd64/kubectl'>https://storage.googleapis.com/kubernetes-release/release/v" + version + "/bin/darwin/amd64/kubectl</a><br>Windows: <a href='https://storage.googleapis.com/kubernetes-release/release/v" + version + "/bin/windows/amd64/kubectl.exe'>https://storage.googleapis.com/kubernetes-release/release/v" + version + "/bin/windows/amd64/kubectl.exe</a><br><br>Using kubectl and kubeconfig file to access cluster<br><code>kubectl --kubeconfig /custom/path/kube.conf {COMMAND}</code><br><br>List pods<br><code>kubectl --kubeconfig /custom/path/kube.conf get pods --all-namespaces</code><br>List nodes<br><code>kubectl --kubeconfig /custom/path/kube.conf get nodes --all-namespaces</code><br>List services<br><code>kubectl --kubeconfig /custom/path/kube.conf get services --all-namespaces</code><br><br>Access dashboard web UI<br>Run proxy locally<br><code>kubectl --kubeconfig /custom/path/kube.conf proxy</code><br>Open URL in browser<br><code><a href='http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/'>http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/</a></code><br><br>Token for dashboard login can be retrieved using following command<br><code>kubectl --kubeconfig /custom/path/kube.conf describe secret $(kubectl --kubeconfig /custom/path/kube.conf get secrets -n kubernetes-dashboard | grep kubernetes-dashboard-token | awk '{print $1}') -n kubernetes-dashboard</code><br><br>More about accessing dashboard UI, https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#accessing-the-dashboard-ui");
|
|
};
|
|
return showAccess();
|
|
}
|
|
},
|
|
clusterinstances: {
|
|
title: 'label.instances',
|
|
listView: {
|
|
section: 'clusterinstances',
|
|
preFilter: function(args) {
|
|
var hiddenFields = [];
|
|
if (!isAdmin()) {
|
|
hiddenFields.push('instancename');
|
|
}
|
|
return hiddenFields;
|
|
},
|
|
fields: {
|
|
name: {
|
|
label: 'label.name',
|
|
truncate: true
|
|
},
|
|
instancename: {
|
|
label: 'label.internal.name'
|
|
},
|
|
displayname: {
|
|
label: 'label.display.name',
|
|
truncate: true
|
|
},
|
|
ipaddress: {
|
|
label: 'label.ip.address'
|
|
},
|
|
zonename: {
|
|
label: 'label.zone.name'
|
|
},
|
|
state: {
|
|
label: 'label.state',
|
|
indicator: {
|
|
'Running': 'on',
|
|
'Stopped': 'off',
|
|
'Destroyed': 'off',
|
|
'Error': 'off'
|
|
}
|
|
}
|
|
},
|
|
dataProvider: function(args) {
|
|
var data = {};
|
|
listViewDataProvider(args, data);
|
|
|
|
$.ajax({
|
|
url: createURL("listKubernetesClusters"),
|
|
data: {"id": args.context.kubernetesclusters[0].id},
|
|
success: function(json) {
|
|
var items = json.listkubernetesclustersresponse.kubernetescluster;
|
|
|
|
var vmlist = [];
|
|
$.each(items, function(idx, item) {
|
|
if ("virtualmachineids" in item) {
|
|
vmlist = vmlist.concat(item.virtualmachineids);
|
|
}
|
|
});
|
|
|
|
$.extend(data, {
|
|
ids: vmlist.join()
|
|
});
|
|
|
|
if (items && items.length > 0 && items[0].projectid != null &&
|
|
items[0].projectid != undefined && items[0].projectid.length > 0) {
|
|
$.extend(data, {
|
|
projectid: items[0].projectid
|
|
});
|
|
}
|
|
|
|
if (data.ids.length == 0) {
|
|
args.response.success({
|
|
data: []
|
|
});
|
|
} else {
|
|
$.ajax({
|
|
url: createURL('listVirtualMachines'),
|
|
data: data,
|
|
success: function(json) {
|
|
var items = json.listvirtualmachinesresponse.virtualmachine;
|
|
if (items) {
|
|
$.each(items, function(idx, vm) {
|
|
if (vm.nic && vm.nic.length > 0 && vm.nic[0].ipaddress) {
|
|
items[idx].ipaddress = vm.nic[0].ipaddress;
|
|
}
|
|
});
|
|
}
|
|
args.response.success({
|
|
data: items
|
|
});
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
cloudStack.dialog.notice({
|
|
message: parseXMLHttpResponse(XMLHttpResponse)
|
|
});
|
|
args.response.error();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
},
|
|
}
|
|
},
|
|
firewall: {
|
|
title: 'label.firewall',
|
|
custom: function(args) {
|
|
var data = {
|
|
id: args.context.kubernetesclusters[0].networkid,
|
|
listAll: true
|
|
}
|
|
if (args.context.kubernetesclusters[0].projectid != null &&
|
|
args.context.kubernetesclusters[0].projectid != undefined &&
|
|
args.context.kubernetesclusters[0].projectid.length > 0) {
|
|
$.extend(data, {
|
|
projectid: args.context.kubernetesclusters[0].projectid
|
|
});
|
|
$.extend(args.context, {"projectid": args.context.kubernetesclusters[0].projectid});
|
|
}
|
|
$.ajax({
|
|
url: createURL('listNetworks'),
|
|
data: data,
|
|
async: false,
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var network = json.listnetworksresponse.network;
|
|
$.extend(args.context, {"networks": [network]});
|
|
}
|
|
});
|
|
data = {
|
|
associatedNetworkId: args.context.kubernetesclusters[0].networkid,
|
|
listAll: true,
|
|
forvirtualnetwork: true
|
|
}
|
|
if (args.context.kubernetesclusters[0].projectid != null &&
|
|
args.context.kubernetesclusters[0].projectid != undefined &&
|
|
args.context.kubernetesclusters[0].projectid.length > 0) {
|
|
$.extend(data, {
|
|
projectid: args.context.kubernetesclusters[0].projectid
|
|
});
|
|
}
|
|
$.ajax({
|
|
url: createURL('listPublicIpAddresses'),
|
|
data: data,
|
|
async: false,
|
|
dataType: "json",
|
|
success: function(json) {
|
|
var ips = json.listpublicipaddressesresponse.publicipaddress;
|
|
var fwip = ips[0];
|
|
$.each(ips, function(idx, ip) {
|
|
if (ip.issourcenat || ip.isstaticnat) {
|
|
fwip = ip;
|
|
return false;
|
|
}
|
|
});
|
|
$.extend(args.context, {"ipAddresses": [fwip]});
|
|
}
|
|
});
|
|
return cloudStack.sections.network.sections.ipAddresses.listView.detailView.tabs.ipRules.custom(args);
|
|
},
|
|
},
|
|
}
|
|
}
|
|
}
|
|
},
|
|
kubernetesversions: {
|
|
id: 'kubernetesversions',
|
|
type: 'select',
|
|
title: "label.versions",
|
|
listView: {
|
|
fields: {
|
|
name: {
|
|
label: 'label.name'
|
|
},
|
|
semanticversion: {
|
|
label: 'label.kubernetes.version'
|
|
},
|
|
zonename: {
|
|
label: 'label.zone.name'
|
|
},
|
|
isoname: {
|
|
label: 'label.iso.name'
|
|
},
|
|
isostate: {
|
|
label: 'label.iso.state'
|
|
},
|
|
mincpunumber: {
|
|
label: 'label.min.cpu.cores'
|
|
},
|
|
minmemory: {
|
|
label: 'label.memory.minimum.mb'
|
|
},
|
|
state: {
|
|
label: 'label.state',
|
|
indicator: {
|
|
'Enabled': 'on',
|
|
'Disabled': 'off'
|
|
}
|
|
}
|
|
},
|
|
advSearchFields: {
|
|
name: {
|
|
label: 'label.name'
|
|
},
|
|
zoneid: {
|
|
label: 'label.zone',
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL('listZones'),
|
|
data: {
|
|
listAll: true
|
|
},
|
|
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
|
|
};
|
|
})
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
},
|
|
// List view actions
|
|
actions: {
|
|
add: {
|
|
label: 'label.add.kubernetes.version',
|
|
preFilter: function(args) { return isAdmin(); },
|
|
createForm: {
|
|
title: 'label.add.kubernetes.version',
|
|
preFilter: cloudStack.preFilter.createTemplate,
|
|
fields: {
|
|
version: {
|
|
label: 'label.semantic.version',
|
|
//docID: 'Name of the cluster',
|
|
validation: {
|
|
required: true
|
|
}
|
|
},
|
|
name: {
|
|
label: 'label.name',
|
|
//docID: 'Name of the cluster',
|
|
},
|
|
zone: {
|
|
label: 'label.zone',
|
|
//docID: 'helpKubernetesClusterZone',
|
|
validation: {
|
|
required: true
|
|
},
|
|
select: function(args) {
|
|
$.ajax({
|
|
url: createURL("listZones&available=true"),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var items = [];
|
|
var zoneObjs = json.listzonesresponse.zone;
|
|
if (zoneObjs != null) {
|
|
for (var i = 0; i < zoneObjs.length; i++) {
|
|
items.push({
|
|
id: zoneObjs[i].id,
|
|
description: zoneObjs[i].name
|
|
});
|
|
}
|
|
}
|
|
items.sort(function(a, b) {
|
|
return a.description.localeCompare(b.description);
|
|
});
|
|
items.unshift({
|
|
id: -1,
|
|
description: 'label.all.zones'
|
|
});
|
|
args.response.success({
|
|
data: items
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
isourl: {
|
|
label: 'label.url',
|
|
//docID: 'Name of the cluster',
|
|
validation: {
|
|
required: true
|
|
}
|
|
},
|
|
isochecksum: {
|
|
label: 'label.checksum',
|
|
//docID: 'Name of the cluster',
|
|
},
|
|
mincpunumber: {
|
|
label: 'label.min.cpu.cores',
|
|
validation: {
|
|
required: true,
|
|
number: true
|
|
},
|
|
},
|
|
minmemory: {
|
|
label: 'label.memory.minimum.mb',
|
|
validation: {
|
|
required: true,
|
|
number: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
action: function(args) {
|
|
var data = {
|
|
name: args.data.name,
|
|
semanticversion: args.data.version,
|
|
url: args.data.isourl,
|
|
checksum: args.data.isochecksum
|
|
};
|
|
if (args.data.zone != null && args.data.zone != -1) {
|
|
$.extend(data, {
|
|
zoneid: args.data.zone
|
|
});
|
|
}
|
|
if (args.data.mincpunumber != null && args.data.mincpunumber != "" && args.data.mincpunumber > 0) {
|
|
$.extend(data, {
|
|
mincpunumber: args.data.mincpunumber
|
|
});
|
|
}
|
|
if (args.data.minmemory != null && args.data.minmemory != "" && args.data.minmemory > 0) {
|
|
$.extend(data, {
|
|
minmemory: args.data.minmemory
|
|
});
|
|
}
|
|
$.ajax({
|
|
url: createURL('addKubernetesSupportedVersion'),
|
|
data: data,
|
|
success: function(json) {
|
|
var version = json.addkubernetessupportedversionresponse.kubernetessupportedversion;
|
|
args.response.success({
|
|
data: version
|
|
});
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
|
|
args.response.error(errorMsg);
|
|
}
|
|
});
|
|
},
|
|
messages: {
|
|
notification: function(args) {
|
|
return 'Kubernetes Supported Version Add';
|
|
}
|
|
}
|
|
}
|
|
},
|
|
dataProvider: function(args) {
|
|
var data = {
|
|
page: args.page,
|
|
pagesize: pageSize
|
|
};
|
|
listViewDataProvider(args, data);
|
|
$.ajax({
|
|
url: createURL("listKubernetesSupportedVersions"),
|
|
data: data,
|
|
dataType: "json",
|
|
sync: true,
|
|
success: function(json) {
|
|
var items = [];
|
|
if (json.listkubernetessupportedversionsresponse.kubernetessupportedversion != null) {
|
|
items = json.listkubernetessupportedversionsresponse.kubernetessupportedversion;
|
|
}
|
|
args.response.success({
|
|
data: items
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
detailView: {
|
|
name: 'label.kubernetes.version.details',
|
|
isMaximized: true,
|
|
actions: {
|
|
update: {
|
|
label: 'label.edit',
|
|
messages: {
|
|
notification: function(args) {
|
|
return 'label.update.kubernetes.version';
|
|
}
|
|
},
|
|
createForm: {
|
|
title: 'label.update.kubernetes.version',
|
|
desc: '',
|
|
preFilter: function(args) {
|
|
var formVersion = args.context.kubernetesversions[0];
|
|
$.ajax({
|
|
url: createURL('listKubernetesSupportedVersions'),
|
|
data: {
|
|
id: args.context.kubernetesversions[0].id
|
|
},
|
|
dataType: "json",
|
|
async: false,
|
|
success: function (json) {
|
|
if (json.listkubernetessupportedversionsresponse.kubernetessupportedversion != null &&
|
|
json.listkubernetessupportedversionsresponse.kubernetessupportedversion.length > 0) {
|
|
formVersion = json.listkubernetessupportedversionsresponse.kubernetessupportedversion[0];
|
|
}
|
|
}
|
|
});
|
|
if (formVersion.state != null) {
|
|
var options = args.$form.find('.form-item[rel=state]').find('option');
|
|
$.each(options, function(optionIndex, option) {
|
|
if ($(option).val() === formVersion.state) {
|
|
$(option).attr('selected','selected');
|
|
}
|
|
});
|
|
}
|
|
},
|
|
fields: {
|
|
state: {
|
|
label: 'label.state',
|
|
//docID: 'helpKubernetesClusterZone',
|
|
validation: {
|
|
required: true
|
|
},
|
|
select: function(args) {
|
|
var items = [];
|
|
items.push({
|
|
id: 'Enabled',
|
|
description: 'state.Enabled'
|
|
}, {
|
|
id: 'Disabled',
|
|
description: 'state.Disabled'
|
|
});
|
|
args.response.success({
|
|
data: items
|
|
});
|
|
}
|
|
},
|
|
}
|
|
},
|
|
action: function(args) {
|
|
var data = {
|
|
id: args.context.kubernetesversions[0].id,
|
|
state: args.data.state
|
|
};
|
|
$.ajax({
|
|
url: createURL('updateKubernetesSupportedVersion'),
|
|
data: data,
|
|
dataType: "json",
|
|
success: function (json) {
|
|
var jsonObj;
|
|
if (json.updatekubernetessupportedversionresponse.kubernetessupportedversion != null) {
|
|
jsonObj = json.updatekubernetessupportedversionresponse.kubernetessupportedversion;
|
|
}
|
|
args.response.success({
|
|
data: jsonObj
|
|
});
|
|
},
|
|
error: function(XMLHttpResponse) {
|
|
var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
|
|
args.response.error(errorMsg);
|
|
}
|
|
}); //end ajax
|
|
}
|
|
},
|
|
destroy: {
|
|
label: 'label.delete.kubernetes.version',
|
|
compactLabel: 'label.delete',
|
|
preFilter: function(args) { return isAdmin(); },
|
|
createForm: {
|
|
title: 'label.delete.kubernetes.version',
|
|
desc: 'label.delete.kubernetes.version',
|
|
isWarning: true,
|
|
fields: {}
|
|
},
|
|
messages: {
|
|
confirm: function(args) {
|
|
return 'message.confirm.delete.kubernetes.version';
|
|
},
|
|
notification: function(args) {
|
|
return 'Deleted Kubernetes version.';
|
|
}
|
|
},
|
|
action: function(args) {
|
|
var data = {
|
|
id: args.context.kubernetesversions[0].id
|
|
};
|
|
$.ajax({
|
|
url: createURL('deleteKubernetesSupportedVersion'),
|
|
data: data,
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
args.response.success({
|
|
_custom: {
|
|
jobId: json.deletekubernetessupportedversionresponse.jobid,
|
|
getUpdatedItem: function(json) {
|
|
return { 'toRemove': true };
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
notification: {
|
|
poll: pollAsyncJobResult
|
|
}
|
|
}
|
|
},
|
|
tabs: {
|
|
// Details tab
|
|
details: {
|
|
title: 'label.details',
|
|
fields: [{
|
|
id: {
|
|
label: 'label.id'
|
|
},
|
|
name: {
|
|
label: 'label.name'
|
|
},
|
|
zonename: {
|
|
label: 'label.zone.name'
|
|
},
|
|
isoid: {
|
|
label: 'label.iso.id'
|
|
},
|
|
isoname: {
|
|
label: 'label.iso.name'
|
|
},
|
|
isostate: {
|
|
label: 'label.iso.name'
|
|
}
|
|
}],
|
|
|
|
dataProvider: function(args) {
|
|
$.ajax({
|
|
url: createURL("listKubernetesSupportedVersions&id=" + args.context.kubernetesversions[0].id),
|
|
dataType: "json",
|
|
async: true,
|
|
success: function(json) {
|
|
var jsonObj;
|
|
if (json.listkubernetessupportedversionsresponse.kubernetessupportedversion != null && json.listkubernetessupportedversionsresponse.kubernetessupportedversion.length > 0) {
|
|
jsonObj = json.listkubernetessupportedversionsresponse.kubernetessupportedversion[0];
|
|
}
|
|
args.response.success({
|
|
data: jsonObj
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
}
|
|
});
|
|
};
|
|
|
|
var cksActionfilter = cloudStack.actionFilter.cksActionfilter = function(args) {
|
|
var jsonObj = args.context.item;
|
|
var allowedActions = [];
|
|
if (jsonObj.state != "Destroyed" && jsonObj.state != "Destroying") {
|
|
if (jsonObj.state == "Stopped") {
|
|
allowedActions.push("start");
|
|
} else {
|
|
allowedActions.push("downloadKubernetesClusterKubeConfig");
|
|
allowedActions.push("stop");
|
|
}
|
|
if (jsonObj.state == "Created" || jsonObj.state == "Running") {
|
|
allowedActions.push("scaleKubernetesCluster");
|
|
allowedActions.push("upgradeKubernetesCluster");
|
|
}
|
|
allowedActions.push("destroy");
|
|
}
|
|
return allowedActions;
|
|
}
|
|
|
|
}(cloudStack));
|