// 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 ? 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) { if(g_regionsecondaryenabled == true) { args.response.success({ data: [{ id: -1, description: "All Zones" }] }); } else { $.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(); } }); args.$select.trigger('change'); } }, //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 }, isdynamicallyscalable: { label: "Dynamically Scalable", isBoolean: true }, isPublic: { label: "label.public", docID: 'helpRegisterTemplatePublic', isBoolean: true, isHidden: true }, isFeatured: { label: "label.featured", docID: 'helpRegisterTemplateFeatured', isBoolean: true, isHidden: true }, isrouting: { label: 'label.routing', 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"), isdynamicallyscalable: (args.data.isdynamicallyscalable == "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") }); } if (args.$form.find('.form-item[rel=isrouting]').is(':visible')) { $.extend(data, { isrouting: (args.data.isrouting === '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