// 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, $) {
cloudStack.sections.templates = {
title: 'label.menu.templates',
id: 'templates',
sectionSelect: {
label: 'label.select-view'
},
sections: {
templates: {
type: 'select',
title: 'label.menu.templates',
listView: {
id: 'templates',
label: 'label.menu.templates',
filters: {
all: {
preFilter: function(args) {
if (isAdmin()) //"listTemplates&templatefilter=all" only works for root-admin, but no domain-admin. Domain-admin is unable to see all templates until listTemplates API supports a new type of templatefilter for domain-admin to see all templates in his domain.
return true;
else
return false;
},
label: 'ui.listView.filters.all'
},
mine: { label: 'ui.listView.filters.mine' },
featured: { label: 'label.featured' },
community: { label: 'label.community' }
},
fields: {
name: { label: 'label.name' },
zonename: { label: 'label.zone' },
hypervisor: { label: 'label.hypervisor' }
},
advSearchFields: {
name: { label: 'Name' },
zoneid: {
label: 'Zone',
select: function(args) {
$.ajax({
url: createURL('listZones'),
data: {
listAll: true
},
success: function(json) {
var zones = json.listzonesresponse.zone;
args.response.success({
data: $.map(zones, function(zone) {
return {
id: zone.id,
description: zone.name
};
})
});
}
});
}
},
tagKey: { label: 'Tag Key' },
tagValue: { label: 'Tag Value' }
},
reorder: cloudStack.api.actions.sort('updateTemplate', 'templates'),
actions: {
add: {
label: 'label.action.register.template',
messages: {
notification: function(args) {
return 'label.action.register.template';
}
},
createForm: {
title: 'label.action.register.template',
docID:'helpNetworkOfferingName',
preFilter: cloudStack.preFilter.createTemplate,
fields: {
name: {
label: 'label.name',
docID:'helpRegisterTemplateName',
validation: { required: true }
},
description: {
label: 'label.description',
docID: 'helpRegisterTemplateDescription',
validation: { required: true }
},
url: {
label: 'URL',
docID: 'helpRegisterTemplateURL',
validation: { required: true }
},
zone: {
label: 'label.zone',
docID: 'helpRegisterTemplateZone',
select: function(args) {
$.ajax({
url: createURL("listZones&available=true"),
dataType: "json",
async: true,
success: function(json) {
var zoneObjs= [];
var items = json.listzonesresponse.zone;
if(items != null) {
for(var i = 0; i < items.length; i++) {
zoneObjs.push({id: items[i].id, description: items[i].name});
}
}
if (isAdmin() && !(cloudStack.context.projects && cloudStack.context.projects[0])){
zoneObjs.unshift({id: -1, description: "All Zones"});
}
args.response.success({data: zoneObjs});
}
});
}
},
hypervisor: {
label: 'label.hypervisor',
docID: 'helpRegisterTemplateHypervisor',
dependsOn: 'zone',
select: function(args) {
if(args.zone == null)
return;
var apiCmd;
if(args.zone == -1)
apiCmd = "listHypervisors&zoneid=-1";
else
apiCmd = "listHypervisors&zoneid=" + args.zone;
$.ajax({
url: createURL(apiCmd),
dataType: "json",
async: false,
success: function(json) {
var hypervisorObjs = json.listhypervisorsresponse.hypervisor;
var items = [];
$(hypervisorObjs).each(function(){
items.push({id: this.name, description: this.name});
});
args.response.success({data: items});
}
});
args.$select.change(function() {
var $form = $(this).closest('form');
if($(this).val() == "VMware") {
$form.find('.form-item[rel=rootDiskControllerType]').css('display', 'inline-block');
$form.find('.form-item[rel=nicAdapterType]').css('display', 'inline-block');
$form.find('.form-item[rel=keyboardType]').css('display', 'inline-block');
}
else {
$form.find('.form-item[rel=rootDiskControllerType]').hide();
$form.find('.form-item[rel=nicAdapterType]').hide();
$form.find('.form-item[rel=keyboardType]').hide();
}
});
}
},
//fields for hypervisor == "VMware" (starts here)
rootDiskControllerType: {
label: 'label.root.disk.controller',
isHidden: true,
select: function(args) {
var items = []
items.push({id: "", description: ""});
items.push({id: "scsi", description: "scsi"});
items.push({id: "ide", description: "ide"});
args.response.success({data: items});
}
},
nicAdapterType: {
label: 'label.nic.adapter.type',
isHidden: true,
select: function(args) {
var items = []
items.push({id: "", description: ""});
items.push({id: "E1000", description: "E1000"});
items.push({id: "PCNet32", description: "PCNet32"});
items.push({id: "Vmxnet2", description: "Vmxnet2"});
items.push({id: "Vmxnet3", description: "Vmxnet3"});
args.response.success({data: items});
}
},
keyboardType: {
label: 'label.keyboard.type',
isHidden: true,
select: function(args) {
var items = []
items.push({id: "", description: ""});
items.push({id: "us", description: "US"});
items.push({id: "jp", description: "Japanese"});
args.response.success({data: items});
}
},
//fields for hypervisor == "VMware" (ends here)
format: {
label: 'label.format',
docID: 'helpRegisterTemplateFormat',
dependsOn: 'hypervisor',
select: function(args) {
var items = [];
if(args.hypervisor == "XenServer") {
//formatSelect.append("");
items.push({id:'VHD', description: 'VHD'});
}
else if(args.hypervisor == "VMware") {
//formatSelect.append("");
items.push({id:'OVA', description: 'OVA'});
}
else if(args.hypervisor == "KVM") {
//formatSelect.append("");
items.push({id:'QCOW2', description: 'QCOW2'});
}
else if(args.hypervisor == "BareMetal") {
//formatSelect.append("");
items.push({id:'BareMetal', description: 'BareMetal'});
}
else if(args.hypervisor == "Ovm") {
//formatSelect.append("");
items.push({id:'RAW', description: 'RAW'});
}
else if(args.hypervisor == "LXC") {
//formatSelect.append("");
items.push({id:'TAR', description: 'TAR'});
}
args.response.success({data: items});
}
},
osTypeId: {
label: 'label.os.type',
docID: 'helpRegisterTemplateOSType',
select: function(args) {
$.ajax({
url: createURL("listOsTypes"),
dataType: "json",
async: true,
success: function(json) {
var items = json.listostypesresponse.ostype;
args.response.success({data: items});
}
});
}
},
isExtractable: {
label: "extractable",
docID: 'helpRegisterTemplateExtractable',
isBoolean: true
},
isPasswordEnabled: {
label: "label.password.enabled",
docID: 'helpRegisterTemplatePasswordEnabled',
isBoolean: true
},
isPublic: {
label: "label.public",
docID: 'helpRegisterTemplatePublic',
isBoolean: true,
isHidden: true
},
isFeatured: {
label: "label.featured",
docID: 'helpRegisterTemplateFeatured',
isBoolean: true,
isHidden: true
}
}
},
action: function(args) {
var data = {
name: args.data.name,
displayText: args.data.description,
url: args.data.url,
zoneid: args.data.zone,
format: args.data.format,
isextractable: (args.data.isExtractable=="on"),
passwordEnabled: (args.data.isPasswordEnabled=="on"),
osTypeId: args.data.osTypeId,
hypervisor: args.data.hypervisor
};
if(args.$form.find('.form-item[rel=isPublic]').css("display") != "none") {
$.extend(data, {
ispublic: (args.data.isPublic == "on")
});
}
if(args.$form.find('.form-item[rel=isFeatured]').css("display") != "none") {
$.extend(data, {
isfeatured: (args.data.isFeatured == "on")
});
}
//VMware only (starts here)
if(args.$form.find('.form-item[rel=rootDiskControllerType]').css("display") != "none" && args.data.rootDiskControllerType != "") {
$.extend(data, {
'details[0].rootDiskController': args.data.rootDiskControllerType
});
}
if(args.$form.find('.form-item[rel=nicAdapterType]').css("display") != "none" && args.data.nicAdapterType != "") {
$.extend(data, {
'details[0].nicAdapter': args.data.nicAdapterType
});
}
if(args.$form.find('.form-item[rel=keyboardType]').css("display") != "none" && args.data.keyboardType != "") {
$.extend(data, {
'details[0].keyboard': args.data.keyboardType
});
}
//VMware only (ends here)
$.ajax({
url: createURL('registerTemplate'),
data: data,
success: function(json) {
var items = json.registertemplateresponse.template; //items might have more than one array element if it's create templates for all zones.
args.response.success({data:items[0]});
/*
if(items.length > 1) {
for(var i=1; i 1) {
for(var i=1; i