(function(cloudStack, testData) {
cloudStack.sections.templates = {
title: 'Templates',
id: 'templates',
sectionSelect: {
label: 'Select view'
},
sections: {
templates: {
type: 'select',
title: 'Templates',
listView: {
id: 'templates',
label: 'Templates',
filters: {
mine: { label: 'Mine' },
featured: { label: 'Featured' },
community: { label: 'Community' }
},
fields: {
name: { label: 'Name' },
id: { label: 'ID' },
zonename: { label: 'Zone' },
hypervisor: { label: 'Hypervisor' }
},
actions: {
add: {
label: 'Create template',
messages: {
confirm: function(args) {
return 'Are you sure you want to create a template?';
},
success: function(args) {
return 'Your new template is being created.';
},
notification: function(args) {
return 'Creating new template';
},
complete: function(args) {
return 'Template has been created successfully!';
}
},
createForm: {
title: 'Create template',
desc: 'Please fill in the following data to create a new template.',
preFilter: cloudStack.preFilter.createTemplate,
fields: {
name: {
label: 'Name',
validation: { required: true }
},
description: {
label: 'Description',
validation: { required: true }
},
url: {
label: 'URL',
validation: { required: true }
},
zone: {
label: 'Zone',
select: function(args) {
$.ajax({
url: createURL("listZones&available=true"),
dataType: "json",
async: true,
success: function(json) {
var zoneObjs = json.listzonesresponse.zone;
var items = [];
if (isAdmin() && !(cloudStack.context.projects &&
cloudStack.context.projects[0]))
items.push({id: -1, description: "All Zones"});
$(zoneObjs).each(function() {
items.push({id: this.id, description: this.name});
});
args.response.success({data: items});
}
});
}
},
hypervisor: {
label: 'Hypervisor',
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: '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: '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: '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: 'Format',
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'});
}
args.response.success({data: items});
}
},
osTypeId: {
label: 'OS Type',
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",
isBoolean: true
},
isPasswordEnabled: {
label: "Password Enabled",
isBoolean: true
},
isPublic: {
label: "Public",
isBoolean: true,
isHidden: true
},
isFeatured: {
label: "Featured",
isBoolean: true,
isHidden: true
}
}
},
action: function(args) {
var array1 = [];
array1.push("&name=" + todb(args.data.name));
array1.push("&displayText=" + todb(args.data.description));
array1.push("&url=" + todb(args.data.url));
array1.push("&zoneid=" + args.data.zone);
array1.push("&format=" + args.data.format);
array1.push("&isextractable=" + (args.data.isExtractable=="on"));
array1.push("&passwordEnabled=" + (args.data.isPasswordEnabled=="on"));
array1.push("&osTypeId=" + args.data.osTypeId);
array1.push("&hypervisor=" + args.data.hypervisor);
if(args.$form.find('.form-item[rel=isPublic]').css("display") != "none")
array1.push("&ispublic=" + (args.data.isPublic == "on"));
if(args.$form.find('.form-item[rel=isFeatured]').css("display") != "none")
array1.push("&isfeatured=" + (args.data.isFeatured == "on"));
//VMware only (starts here)
if(args.$form.find('.form-item[rel=rootDiskControllerType]').css("display") != "none" && args.data.rootDiskControllerType != "")
array1.push("&details[0].rootDiskController=" + args.data.rootDiskControllerType);
if(args.$form.find('.form-item[rel=nicAdapterType]').css("display") != "none" && args.data.nicAdapterType != "")
array1.push("&details[0].nicAdapter=" + args.data.nicAdapterType);
if(args.$form.find('.form-item[rel=keyboardType]').css("display") != "none" && args.data.keyboardType != "")
array1.push("&details[0].keyboard=" + args.data.keyboardType);
//VMware only (ends here)
$.ajax({
url: createURL("registerTemplate" + array1.join("")),
dataType: "json",
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