$.each(["memory","cpu","vcpu"], function(i,classname){ var attr = {}; attr.type = $("."+classname+"_modify_type", context).val(); attr.name = classname.toUpperCase(); attr.mandatory = true; attr.description = ""; if (classname == "vcpu" || attr.type == "fixed"){ attr.mandatory = false; } attr.initial = $('input[wizard_field="'+attr.name+'"]', context).val(); if (attr.type == "range" || attr.type == "range-float"){ var param_context = $("div."+classname+"_modify_opt."+attr.type, context); var min = $("input.user_input_params_min", param_context).val(); var max = $("input.user_input_params_max", param_context).val(); attr.params = min + ".." + max; } else if (attr.type == "list"){ attr.params = $("input."+classname+"_modify_opt."+attr.type, context).val(); } userInputsJSON[attr.name] = UserInputs.marshall(attr); });
function _retrieve(context) { var templateJSON = WizardFields.retrieve(context); if (templateJSON["HYPERVISOR"] == 'vcenter') { templateJSON["VCENTER_TEMPLATE_REF"] = WizardFields.retrieveInput($("#vcenter_template_ref", context)); templateJSON["VCENTER_CCR_REF"] = WizardFields.retrieveInput($("#vcenter_ccr_ref", context)); templateJSON["VCENTER_INSTANCE_ID"] = WizardFields.retrieveInput($("#vcenter_instance_id", context)); if (Config.isFeatureEnabled("vcenter_vm_folder")) { templateJSON["VCENTER_VM_FOLDER"] = WizardFields.retrieveInput($("#vcenter_vm_folder", context)) } } if (templateJSON["HYPERVISOR"] == 'lxd') { templateJSON["LXD_SECURITY_PRIVILEGED"] = WizardFields.retrieveInput($("#lxd_security_privileged", context)); templateJSON["LXD_PROFILE"] = WizardFields.retrieveInput($("#lxd_profile", context)); templateJSON["LXD_SECURITY_NESTING"] = WizardFields.retrieveInput($("#lxd_security_nesting", context)); } var sunstone_template = {}; if ($('#sunstone_network_select:checked', context).length > 0) { sunstone_template["NETWORK_SELECT"] = "NO" } if (!$.isEmptyObject(sunstone_template)) { templateJSON['SUNSTONE'] = sunstone_template; } var userInputs = {}; // Retrieve Resource Pool Attribute var rpInput = $(".vcenter_rp_input", context); if (rpInput.length > 0) { var rpModify = WizardFields.retrieveInput($('.modify_rp', rpInput)); var rpInitial = WizardFields.retrieveInput($('.initial_rp', rpInput)); var rpParams = WizardFields.retrieveInput($('.available_rps', rpInput)); if (rpModify === 'fixed' && rpInitial !== '') { templateJSON['VCENTER_RESOURCE_POOL'] = rpInitial; } else if (rpModify === 'list' && rpParams !== '') { var rpUserInputs = UserInputs.marshall({ type: 'list', description: Locale.tr("Which resource pool you want this VM to run in?"), initial: rpInitial, params: WizardFields.retrieveInput($('.available_rps', rpInput)) }); userInputs['VCENTER_RESOURCE_POOL'] = rpUserInputs; } } // Since the USER_INPUTS section is not enabled for vCenter, we can assume that there are no more user inputs defined if (!$.isEmptyObject(userInputs)) { templateJSON['USER_INPUTS'] = userInputs; } $.extend(true, templateJSON, CapacityCreate.retrieve($("div.capacityCreate", context))); if (templateJSON['MEMORY_COST'] && templateJSON['MEMORY_UNIT_COST'] && templateJSON['MEMORY_UNIT_COST'] == "GB") { templateJSON['MEMORY_COST'] = templateJSON['MEMORY_COST'] / 1024; } if (templateJSON['DISK_COST']) { templateJSON['DISK_COST'] = (templateJSON['DISK_COST'] / 1024).toString(); } var as_uid = this.usersTable.retrieveResourceTableSelect(); if (as_uid){ templateJSON["AS_UID"] = as_uid; } var as_gid = this.groupTable.retrieveResourceTableSelect(); if (as_gid){ templateJSON["AS_GID"] = as_gid; } return templateJSON; }
$.each($(".check_item:checked", this), function() { var template_context = $(this).closest(".vcenter_row"); $(".vcenter_template_result:not(.success)", template_context).html( '<span class="fa-stack" style="color: #dfdfdf">' + '<i class="fa fa-cloud fa-stack-2x"></i>' + '<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>' + '</span>'); var attrs = []; var userInputs = []; // Retrieve Datastore Attribute var dsInput = $(".vcenter_datastore_input", template_context); if (dsInput.length > 0) { var dsModify = $('.modify_datastore', dsInput).val(); var dsInitial = $('.initial_datastore', dsInput).val(); var dsParams = $('.available_datastores', dsInput).val(); if (dsModify === 'fixed' && dsInitial !== '') { attrs.push('VCENTER_DATASTORE="' + dsInitial + '"') } else if (dsModify === 'list' && dsParams !== '') { var dsUserInputsStr = UserInputs.marshall({ type: 'list', description: Locale.tr("Which datastore you want this VM to run on?"), initial: dsInitial, params: dsParams }); userInputs.push('VCENTER_DATASTORE="' + dsUserInputsStr + '"'); } } // Retrieve Resource Pool Attribute var rpInput = $(".vcenter_rp_input", template_context); if (rpInput.length > 0) { var rpModify = $('.modify_rp', rpInput).val(); var rpInitial = $('.initial_rp', rpInput).val(); var rpParams = $('.available_rps', rpInput).val(); if (rpModify === 'fixed' && rpInitial !== '') { attrs.push('RESOURCE_POOL="' + rpInitial + '"'); } else if (rpModify === 'list' && rpParams !== '') { var rpUserInputs = UserInputs.marshall({ type: 'list', description: Locale.tr("Which resource pool you want this VM to run in?"), initial: rpInitial, params: $('.available_rps', rpInput).val() }); userInputs.push('RESOURCE_POOL="' + rpUserInputs + '"'); } } // Append new attrs and user inputs if necessary var template = $(this).data("one_template"); if (attrs.length > 0) { template += "\n" + attrs.join("\n"); } if (userInputs.length > 0) { template += "\nUSER_INPUTS=[\n" + userInputs.join(",\n") + "]"; } var template_json = { "vmtemplate": { "template_raw": template } }; OpenNebulaTemplate.create({ timeout: true, data: template_json, success: function(request, response) { $(".vcenter_template_result", template_context).addClass("success").html( '<span class="fa-stack" style="color: #dfdfdf">' + '<i class="fa fa-cloud fa-stack-2x"></i>' + '<i class="fa fa-check fa-stack-1x fa-inverse"></i>' + '</span>'); $(".vcenter_template_response", template_context).html('<p style="font-size:12px" class="running-color">' + Locale.tr("Template created successfully") + ' ID:' + response.VMTEMPLATE.ID + '</p>'); }, error: function (request, error_json) { $(".vcenter_template_result", template_context).html('<span class="fa-stack" style="color: #dfdfdf">' + '<i class="fa fa-cloud fa-stack-2x"></i>' + '<i class="fa fa-warning fa-stack-1x fa-inverse"></i>' + '</span>'); $(".vcenter_template_response", template_context).html('<p style="font-size:12px" class="error-color">' + (error_json.error.message || Locale.tr("Cannot contact server: is it running and reachable?")) + '</p>'); } }); });
$.each($(this).DataTable().$(".check_item:checked"), function() { var row_context = $(this).closest("tr"); VCenterCommon.importLoading({context : row_context}); var attrs = []; var userInputs = []; // Retrieve Datastore Attribute var dsInput = $(".vcenter_datastore_input", row_context); if (dsInput.length > 0) { var dsModify = $('.modify_datastore', dsInput).val(); var dsInitial = $('.initial_datastore', dsInput).val(); var dsParams = $('.available_datastores', dsInput).val(); if (dsModify === 'fixed' && dsInitial !== '') { attrs.push('VCENTER_DATASTORE="' + dsInitial + '"') } else if (dsModify === 'list' && dsParams !== '') { var dsUserInputsStr = UserInputs.marshall({ type: 'list', description: Locale.tr("Which datastore you want this VM to run on?"), initial: dsInitial, params: dsParams }); userInputs.push('VCENTER_DATASTORE="' + dsUserInputsStr + '"'); } } // Retrieve Resource Pool Attribute var rpInput = $(".vcenter_rp_input", row_context); if (rpInput.length > 0) { var rpModify = $('.modify_rp', rpInput).val(); var rpInitial = $('.initial_rp', rpInput).val(); var rpParams = $('.available_rps', rpInput).val(); if (rpModify === 'fixed' && rpInitial !== '') { attrs.push('RESOURCE_POOL="' + rpInitial + '"'); } else if (rpModify === 'list' && rpParams !== '') { var rpUserInputs = UserInputs.marshall({ type: 'list', description: Locale.tr("Which resource pool you want this VM to run in?"), initial: rpInitial, params: $('.available_rps', rpInput).val() }); userInputs.push('RESOURCE_POOL="' + rpUserInputs + '"'); } } // Append new attrs and user inputs if necessary var template = $(this).data("import_data").one; if (attrs.length > 0) { template += "\n" + attrs.join("\n"); } if (userInputs.length > 0) { template += "\nUSER_INPUTS=[\n" + userInputs.join(",\n") + "]"; } var template_json = { "vmtemplate": { "template_raw": template } }; OpenNebulaTemplate.create({ timeout: true, data: template_json, success: function(request, response) { VCenterCommon.importSuccess({ context : row_context, message : Locale.tr("Template created successfully. ID: %1$s", response.VMTEMPLATE.ID) }); }, error: function (request, error_json) { VCenterCommon.importFailure({ context : row_context, message : (error_json.error.message || Locale.tr("Cannot contact server: is it running and reachable?")) }); } }); });
function _retrieve(context) { var templateJSON = WizardFields.retrieve(context); if (templateJSON["HYPERVISOR"] == 'vcenter') { templateJSON["VCENTER_PUBLIC_CLOUD"] = { 'TYPE': 'vcenter', 'VM_TEMPLATE': WizardFields.retrieveInput($("#vcenter_template_uuid", context)) }; templateJSON["KEEP_DISKS_ON_DONE"] = $("#KEEP_DISKS", context).is(':checked')?"YES":"NO" } var sunstone_template = {}; if ($('#sunstone_network_select:checked', context).length > 0) { sunstone_template["NETWORK_SELECT"] = "NO" } if (!$.isEmptyObject(sunstone_template)) { templateJSON['SUNSTONE'] = sunstone_template; } var userInputs = {}; // Retrieve Datastore Attribute var dsInput = $(".vcenter_datastore_input", context); if (dsInput.length > 0) { var dsModify = WizardFields.retrieveInput($('.modify_datastore', dsInput)); var dsInitial = WizardFields.retrieveInput($('.initial_datastore', dsInput)); var dsParams = WizardFields.retrieveInput($('.available_datastores', dsInput)); if (dsModify === 'fixed' && dsInitial !== '') { templateJSON['VCENTER_DATASTORE'] = dsInitial; } else if (dsModify === 'list' && dsParams !== '') { var dsUserInputsStr = UserInputs.marshall({ type: 'list', description: Locale.tr("Which datastore you want this VM to run on?"), initial: dsInitial, params: dsParams }); userInputs['VCENTER_DATASTORE'] = dsUserInputsStr; } } // Retrieve Resource Pool Attribute var rpInput = $(".vcenter_rp_input", context); if (rpInput.length > 0) { var rpModify = WizardFields.retrieveInput($('.modify_rp', rpInput)); var rpInitial = WizardFields.retrieveInput($('.initial_rp', rpInput)); var rpParams = WizardFields.retrieveInput($('.available_rps', rpInput)); if (rpModify === 'fixed' && rpInitial !== '') { templateJSON['RESOURCE_POOL'] = rpInitial; } else if (rpModify === 'list' && rpParams !== '') { var rpUserInputs = UserInputs.marshall({ type: 'list', description: Locale.tr("Which resource pool you want this VM to run in?"), initial: rpInitial, params: WizardFields.retrieveInput($('.available_rps', rpInput)) }); userInputs['RESOURCE_POOL'] = rpUserInputs; } } // Since the USER_INPUTS section is not enabled for vCenter, we can assume that there are no more user inputs defined if (!$.isEmptyObject(userInputs)) { templateJSON['USER_INPUTS'] = userInputs; } $.extend(true, templateJSON, CapacityCreate.retrieve($("div.capacityCreate", context))); return templateJSON; }
$.each($(this).DataTable().$(".check_item:checked"), function() { var row_context = $(this).closest("tr"); VCenterCommon.importLoading({context : row_context}); var attrs = []; var userInputs = []; // Retrieve Resource Pool Attribute var rpInput = $(".vcenter_rp_input", row_context); if (rpInput.length > 0) { var rpModify = $('.modify_rp', rpInput).val(); var rpParams = ""; var linkedClone = $('.linked_clone', rpInput).prop("checked"); var createCopy = $('.create_copy', rpInput).prop("checked"); var templateName = $('.template_name', rpInput).val(); var vcenter_ref = $(this).data("import_data").vcenter_ref; if (linkedClone) { var linked = true; if (createCopy && templateName != "") { var copy = true; var template_name = templateName; } else { var copy = false; var template_name = ""; } } else { var template_name = ""; var linked = false; var copy = false; } $.each($('.available_rps option:selected', rpInput), function(){ rpParams += $(this).val() + ","; }); var rpParams = rpParams.slice(0,-1); if (rpModify === 'fixed' && rpParams!== '') { attrs.push('VCENTER_RESOURCE_POOL="' + rpParams + '"'); } else if (rpModify === 'list' && rpParams !== '') { var rpUserInputs = UserInputs.marshall({ type: 'list', description: Locale.tr("Which resource pool you want this VM to run in?"), initial: "", params: rpParams }); userInputs.push('VCENTER_RESOURCE_POOL="' + rpUserInputs + '"'); } } // Append new attrs and user inputs if necessary var template = $(this).data("import_data").one; if (attrs.length > 0) { template += "\n" + attrs.join("\n"); } if (userInputs.length > 0) { template += "\nUSER_INPUTS=[\n" + userInputs.join(",\n") + "]"; } if (linked) { template += "\nVCENTER_LINKED_CLONES=\"YES\""; } if($(this).data("import_data").import_disks_and_nics){ var template_json = { "vmtemplate": { "template_raw": template } }; OpenNebulaTemplate.create({ timeout: false, data: template_json, success: function(request, response) { VCenterCommon.importLoading({ context : row_context, message : Locale.tr("Importing images and vnets associated to template disks and nics...") }); var template_id = response.VMTEMPLATE.ID; var path = '/vcenter/template/' + vcenter_ref + '/' + template_id; $.ajax({ url: path, type: "GET", data: { timeout: false, use_linked_clones: linked, create_copy: copy, template_name: template_name }, headers: { "X-VCENTER-USER": that.opts.vcenter_user, "X-VCENTER-PASSWORD": that.opts.vcenter_password, "X-VCENTER-HOST": that.opts.vcenter_host }, dataType: "json", success: function(response){ var disks_and_nets = response.disks.concat(response.nics); var template_json = { "vmtemplate": { "template_raw": response.one } }; if(response.create_copy){ OpenNebulaTemplate.del({ timeout: true, data : { id : template_id }, success: function(){ OpenNebulaTemplate.create({ timeout: false, data: template_json, success: function(request, response){ import_images_and_nets(disks_and_nets, row_context, response.VMTEMPLATE.ID); } }); } }); } else { import_images_and_nets(disks_and_nets, row_context, template_id); } }, error: function(response){ VCenterCommon.importFailure({ context : row_context, message : OpenNebulaError(response).error.message }); Notifier.onError({}, OpenNebulaError(response)); // Remove template - Rollback var path = '/vcenter/template_rollback/' + template_id; $.ajax({ url: path, type: "POST", data: {timeout: false}, dataType: "json", success: function(response){ // Do nothing }, error: function(response){ VCenterCommon.importFailure({ context : row_context, message : Locale.tr("Could not delete the template " + template_id + " due to " + OpenNebulaError(response).error.message + ". Please remote it manually before importing this template again.") }); } }); } }); }, error: function (request, error_json) { VCenterCommon.importFailure({ context : row_context, message : (error_json.error.message || Locale.tr("Cannot contact server: is it running and reachable?")) }); } }); } else { var template_json = { "vmtemplate": { "template_raw": template } }; OpenNebulaTemplate.create({ timeout: true, data: template_json, success: function(request, response) { VCenterCommon.importSuccess({ context : row_context, message : Locale.tr("Template created successfully. ID: %1$s", response.VMTEMPLATE.ID) }); }, error: function (request, error_json) { VCenterCommon.importFailure({ context : row_context, message : (error_json.error.message || Locale.tr("Cannot contact server: is it running and reachable?")) }); } }); } });