From a1d3307dfcbd7905e3696b08ceb70da2f9bcd466 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Fri, 1 Apr 2011 19:06:42 +0200 Subject: [PATCH] Feature #549: Added saveas support. --- src/sunstone/public/js/opennebula.js | 37 +++++- src/sunstone/public/js/plugins/vms-tab.js | 150 ++++++++++++++++++++++ 2 files changed, 184 insertions(+), 3 deletions(-) diff --git a/src/sunstone/public/js/opennebula.js b/src/sunstone/public/js/opennebula.js index ab7a13955d..ce40c52746 100644 --- a/src/sunstone/public/js/opennebula.js +++ b/src/sunstone/public/js/opennebula.js @@ -1136,14 +1136,13 @@ var OpenNebula = { { var callback = params.success; var callback_error = params.error; - var vm_id = params.data.vm_id; + var id = params.data.vm_id; var disk_id = params.data.disk_id; var image_name = params.data.image_name; var type = params.data.type; var method = "saveas"; var saveas_params = { - "vm_id" : vm_id, "disk_id" : disk_id, "image_name": image_name, "type" : type @@ -1151,7 +1150,7 @@ var OpenNebula = { var resource = OpenNebula.VM.resource; var action = OpenNebula.Helper.action(method,saveas_params) - var request = OpenNebula.Helper.request(resource,method, [vm_id, disk_id, image_name, type]); + var request = OpenNebula.Helper.request(resource,method, [id,disk_id, image_name, type]); $.ajax({ url: "/vm/" + id + "/action", @@ -1185,6 +1184,38 @@ var OpenNebula = { var action = OpenNebula.Helper.action(method); var request = OpenNebula.Helper.request(resource,method, id); + $.ajax({ + url: "/vm/" + id + "/action", + type: "POST", + data: JSON.stringify(action), + success: function() + { + if (callback) + { + callback(request); + } + }, + error: function(response) + { + if (callback_error) + { + callback_error(request, OpenNebula.Error(response)); + } + } + }); + }, + + "resubmit": function(params) + { + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + var resource = OpenNebula.VM.resource; + + var method = "resubmit"; + var action = OpenNebula.Helper.action(method); + var request = OpenNebula.Helper.request(resource,method, id); + $.ajax({ url: "/vm/" + id + "/action", type: "POST", diff --git a/src/sunstone/public/js/plugins/vms-tab.js b/src/sunstone/public/js/plugins/vms-tab.js index c3785223bc..9fbbb65bc5 100644 --- a/src/sunstone/public/js/plugins/vms-tab.js +++ b/src/sunstone/public/js/plugins/vms-tab.js @@ -645,6 +645,39 @@ var vm_actions = { error: onError, notify: true }, + + "VM.resubmit" : { + type: "multiple", + call: OpenNebula.VM.resubmit, + callback: function (req) { + Sunstone.runAction("VM.show",req.request.data[0]); + }, + elements: function() { return getSelectedNodes(dataTable_vMachines); }, + error: onError, + notify: true + }, + + "VM.saveasmultiple" : { + type: "custom", + call: function(){ + var elems = vm_actions["VM.saveasmultiple"].elements(); + popUpSaveasDialog(elems); + }, + elements: function() { return getSelectedNodes(dataTable_vMachines); } + }, + + "VM.saveas" : { + type: "custom", + call: function(obj) { + OpenNebula.VM.saveas( + {data:obj, + success: function (req) { + Sunstone.runAction("VM.show", + req.request.data[0]); + }, + error: onError }); + } + }, "VM.shutdown" : { type: "multiple", @@ -800,6 +833,17 @@ var vm_buttons = { tip: "This will redeploy selected VMs (in UNKNOWN or BOOT state)", condition: True }, + "VM.resubmit" : { + type: "confirm", + text: "Resubmit", + tip: "This will resubmits VMs to PENDING state", + condition: True + }, + "VM.saveasmultiple" : { + type: "action", + text: "Save as", + condition: True + }, "VM.cancel" : { type: "confirm", text: "Cancel", @@ -1776,6 +1820,111 @@ function popUpCreateVMDialog(){ $('#create_vm_dialog').dialog('open'); } +//Prepares a dialog to saveas a VM +function setupSaveasDialog(){ + //Append to DOM + $('div#dialogs').append('
'); + + //Put HTML in place + $('#saveas_vm_dialog').html('\ +
\ +
\ +
\ +
\ + \ + \ +
\ + \ +
'); + + $('#saveas_vm_dialog').dialog({ + autoOpen:false, + width:600, + modal:true, + height:350, + resizable:true, + }); + + $('#saveas_vm_dialog #vm_saveas_proceed').click(function(){ + var elems = $('#saveas_vm_dialog #saveas_tabs div.saveas_tab'); + var args = []; + $.each(elems,function(){ + var id = $('#vm_id',this).text(); + var disk_id = $('#vm_disk_id',this).val(); + var image_name = $('#image_name',this).val(); + var type = $('#image_type',this).val(); + + if (!id.length || !disk_id.length || !image_name.length) { + notifyError("Skipping VM "+id+ + ". No disk id or image name specified"); + } + else { + var obj = { + vm_id: id, + disk_id : disk_id, + image_name : image_name, + type: type + }; + args.push(id); + Sunstone.runAction("VM.saveas",obj); + } + }); + if (args.length > 0){ + notifySubmit("VM.saveas",args); + } + + $('#saveas_vm_dialog').dialog('close'); + return false; + }); + + $('#saveas_vm_dialog #vm_saveas_cancel').click(function(){ + $('#saveas_vm_dialog').dialog('close'); + return false; + }); + +} + +function popUpSaveasDialog(elems){ + $('#saveas_vm_dialog #saveas_tabs').tabs('destroy'); + $('#saveas_vm_dialog #saveas_tabs').empty(); + $('#saveas_vm_dialog #saveas_tabs').html(''); + + $.each(elems,function(){ + var li = '
  • VM '+this+'
  • ' + $('#saveas_vm_dialog #saveas_tabs ul').append(li); + var tab = '
    \ +
    Saveas for VM with ID '+this+'
    \ +
    \ +
    \ + \ + \ +
    \ +
    \ + \ + \ +
    \ +
    \ + \ + \ +
    \ +
    \ +
    '; + $('#saveas_vm_dialog #saveas_tabs').append(tab); + }); + $('#saveas_vm_dialog #saveas_tabs').tabs(); + $('#saveas_vm_dialog button').button(); + + $('#saveas_vm_dialog').dialog('open'); +} + //Prepares autorefresh function setVMAutorefresh(){ setInterval(function(){ @@ -1810,6 +1959,7 @@ $(document).ready(function(){ Sunstone.runAction("VM.list"); setupCreateVMDialog(); + setupSaveasDialog(); setVMAutorefresh(); initCheckAllBoxes(dataTable_vMachines);