From 2650e14dcada22af7ffc3b7a961e1bd935e9c6f3 Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Fri, 19 Feb 2016 18:43:16 +0100 Subject: [PATCH] Feature #4212: Use Host.import_wild in Sunstone --- .../models/OpenNebulaJSON/HostJSON.rb | 5 + src/sunstone/public/app/opennebula/host.js | 4 + .../public/app/tabs/hosts-tab/panels/wilds.js | 97 ++++++++----------- .../app/tabs/hosts-tab/panels/wilds/html.hbs | 1 - 4 files changed, 47 insertions(+), 60 deletions(-) diff --git a/src/sunstone/models/OpenNebulaJSON/HostJSON.rb b/src/sunstone/models/OpenNebulaJSON/HostJSON.rb index 99eb964aa9..0768e154e5 100644 --- a/src/sunstone/models/OpenNebulaJSON/HostJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/HostJSON.rb @@ -52,6 +52,7 @@ module OpenNebulaJSON when "disable" then self.disable when "update" then self.update(action_hash['params']) when "rename" then self.rename(action_hash['params']) + when "import_wild" then self.import_wild(action_hash['params']) else error_msg = "#{action_hash['perform']} action not " << " available for this resource" @@ -70,5 +71,9 @@ module OpenNebulaJSON def rename(params=Hash.new) super(params['name']) end + + def import_wild(params=Hash.new) + super(params['name']) + end end end diff --git a/src/sunstone/public/app/opennebula/host.js b/src/sunstone/public/app/opennebula/host.js index 24527bf27a..1e1ba60b24 100644 --- a/src/sunstone/public/app/opennebula/host.js +++ b/src/sunstone/public/app/opennebula/host.js @@ -122,6 +122,10 @@ define(function(require) { var action_obj = params.data.extra_param; OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj); }, + "import_wild" : function(params) { + var action_obj = params.data.extra_param; + OpenNebulaAction.simple_action(params, RESOURCE, "import_wild", action_obj); + }, "getName": function(id){ return OpenNebulaAction.getName(id, RESOURCE); }, diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js b/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js index 46c8f64cbd..c61058f94d 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js @@ -22,7 +22,7 @@ define(function(require) { require('foundation-datatables'); var Locale = require('utils/locale'); var CanImportWilds = require('../utils/can-import-wilds'); - var OpenNebulaVM = require('opennebula/vm'); + var OpenNebulaHost = require('opennebula/host'); var OpenNebulaAction = require('opennebula/action'); var Sunstone = require('sunstone'); var Notifier = require('utils/notifier'); @@ -39,7 +39,6 @@ define(function(require) { var PANEL_ID = require('./wilds/panelId'); var RESOURCE = "Host" - var IMPORT_TEMPLATE_COLUMN = 3; /* CONSTRUCTOR @@ -79,12 +78,9 @@ define(function(require) { that.dataTableWildHosts = $("#datatable_host_wilds", context).dataTable({ "bSortClasses" : false, "bDeferRender": true, - "aLengthMenu": [[2, 12, 36, 72], [2, 12, 36, 72]], "aoColumnDefs": [ {"bSortable": false, "aTargets": [0]}, - {"sWidth": "35px", "aTargets": [0]}, - {"bVisible": true, "aTargets": [0, 1, 2]}, // Hide Import Template column - {"bVisible": false, "aTargets": ['_all']} + {"sWidth": "35px", "aTargets": [0]} ] }); @@ -98,15 +94,14 @@ define(function(require) { $.each(wilds, function(index, elem) { var name = elem.VM_NAME; var deploy_id = elem.DEPLOY_ID; - var template = elem.IMPORT_TEMPLATE || ''; + var template = elem.IMPORT_TEMPLATE; if (name && deploy_id && template) { var wilds_list_array = [ [ '', name, - deploy_id, - template + deploy_id ] ]; @@ -137,63 +132,47 @@ define(function(require) { $("#import_wilds", context).html(''); $(".import_wild_checker:checked", "#datatable_host_wilds").each(function() { - var import_host_id = that.element.ID; + var importHostId = that.element.ID; var wild_row = $(this).closest('tr'); var aData = that.dataTableWildHosts.fnGetData(wild_row); - var wildTemplate64 = aData[IMPORT_TEMPLATE_COLUMN]; + var vmName = aData[1]; - if (wildTemplate64 !== '') { - var vm_json = { - "vm": { - "vm_raw": atob(wildTemplate64) + var dataJSON = { + 'id': importHostId, + 'extra_param': { + 'name': vmName + } + }; + + // Create the VM in OpenNebula + OpenNebulaHost.import_wild({ + timeout: true, + data: dataJSON, + success: function(request, response) { + OpenNebulaAction.clear_cache("VM"); + // TODO Notifier.notifyCustom(Locale.tr("VM imported"), " ID: " + response.VM.ID, false); + + // Delete row (shouldn't be there in next monitorization) + that.dataTableWildHosts.fnDeleteRow(wild_row); + + $("#import_wilds", context).removeAttr("disabled").off("click.disable"); + $("#import_wilds", context).html(Locale.tr("Import Wilds")); + }, + error: function (request, error_json) { + var msg; + if (error_json.error.message){ + msg = error_json.error.message; + } else { + msg = Locale.tr("Cannot contact server: is it running and reachable?"); } - }; - // Create the VM in OpenNebula - OpenNebulaVM.create({ - timeout: true, - data: vm_json, - success: function(request, response) { - OpenNebulaAction.clear_cache("VM"); + Notifier.notifyError(msg); - var extra_info = {}; - - extra_info['host_id'] = import_host_id; - extra_info['ds_id'] = -1; - extra_info['enforce'] = false; - - // Deploy the VM - Sunstone.runAction("VM.silent_deploy_action", - response.VM.ID, - extra_info); - - // Notify - Notifier.notifyCustom(Locale.tr("VM imported"), " ID: " + response.VM.ID, false); - - // Delete row (shouldn't be there in next monitorization) - that.dataTableWildHosts.fnDeleteRow(wild_row); - - $("#import_wilds", context).removeAttr("disabled").off("click.disable"); - $("#import_wilds", context).html(Locale.tr("Import Wilds")); - }, - error: function (request, error_json) { - var msg; - if (error_json.error.message){ - msg = error_json.error.message; - } else { - msg = Locale.tr("Cannot contact server: is it running and reachable?"); - } - - Notifier.notifyError(msg); - - $("#import_wilds", context).removeAttr("disabled").off("click.disable"); - $("#import_wilds", context).html(Locale.tr("Import Wilds")); - } - }); - } else { - Notifier.notifyError(Locale.tr("This resources doesn't have a template to be imported")); - } + $("#import_wilds", context).removeAttr("disabled").off("click.disable"); + $("#import_wilds", context).html(Locale.tr("Import Wilds")); + } + }); }); }); diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/wilds/html.hbs b/src/sunstone/public/app/tabs/hosts-tab/panels/wilds/html.hbs index 3f534e536d..77cb5dcc8b 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/wilds/html.hbs +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/wilds/html.hbs @@ -23,7 +23,6 @@ {{tr "VM name"}} {{tr "Remote ID"}} - {{tr "Import Template"}}