diff --git a/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb b/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb index 2c48fd3a53..7a4669a5d5 100644 --- a/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/VirtualNetworkJSON.rb @@ -42,6 +42,8 @@ module OpenNebulaJSON end rc = case action_hash['perform'] + when "addleases" then self.addleases(action_hash['params']) + when "rmleases" then self.rmleases(action_hash['params']) when "publish" then self.publish when "unpublish" then self.unpublish when "chown" then self.chown(action_hash['params']) @@ -52,6 +54,14 @@ module OpenNebulaJSON end end + def addleases(params=Hash.new) + super(params['ip'],params['mac']) + end + + def rmleases(params=Hash.new) + super(params['ip']) + end + def chown(params=Hash.new) super(params['owner_id'].to_i,params['group_id'].to_i) end diff --git a/src/sunstone/public/js/opennebula.js b/src/sunstone/public/js/opennebula.js index 276672778c..06a1cc651a 100644 --- a/src/sunstone/public/js/opennebula.js +++ b/src/sunstone/public/js/opennebula.js @@ -834,6 +834,70 @@ var OpenNebula = { }); }, + "addleases" : function(params){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + var obj = params.data.extra_param; + + var method = "addleases"; + var action = OpenNebula.Helper.action(method,obj); + var resource = OpenNebula.Network.resource; + var request = OpenNebula.Helper.request(resource,method, [id,obj]); + + $.ajax({ + url: "vnet/" + 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)); + } + } + }); + }, + + "rmleases" : function(params){ + var callback = params.success; + var callback_error = params.error; + var id = params.data.id; + var obj = params.data.extra_param; + + var method = "rmleases"; + var action = OpenNebula.Helper.action(method,obj); + var resource = OpenNebula.Network.resource; + var request = OpenNebula.Helper.request(resource,method, [id,obj]); + + $.ajax({ + url: "vnet/" + 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)); + } + } + }); + }, + "chown" : function(params){ OpenNebula.Helper.chown(params,OpenNebula.Network.resource,"vnet"); }, diff --git a/src/sunstone/public/js/plugins/vnets-tab.js b/src/sunstone/public/js/plugins/vnets-tab.js index 2fe282396c..f72d58da42 100644 --- a/src/sunstone/public/js/plugins/vnets-tab.js +++ b/src/sunstone/public/js/plugins/vnets-tab.js @@ -124,6 +124,7 @@ var create_vn_tmpl = var vnetworks_select=""; var dataTable_vNetworks; var $create_vn_dialog; +var $lease_vn_dialog; //Setup actions @@ -205,6 +206,42 @@ var vnet_actions = { notify: true }, + "Network.addleases" : { + type: "single", + call: OpenNebula.Network.addleases, + callback: vnShow, + error: onError, + notify: true + }, + + "Network.rmleases" : { + type: "single", + call: OpenNebula.Network.rmleases, + callback: vnShow, + error: onError, + notify: true + }, + + "Network.modifyleases" : { + type: "custom", + call: function(action,obj){ + nodes = getSelectedNodes(dataTable_vNetworks); + $.each(nodes,function(){ + Sunstone.runAction(action,this,obj); + }); + } + }, + + "Network.addleases_dialog" : { + type: "custom", + call: popUpAddLeaseDialog + }, + + "Network.rmleases_dialog" : { + type: "custom", + call: popUpRemoveLeaseDialog + }, + "Network.chown" : { type: "multiple", call: OpenNebula.Network.chown, @@ -263,6 +300,20 @@ var vnet_buttons = { condition: mustBeAdmin, }, + "action_list" : { + type: "select", + actions: { + "Network.addleases_dialog" : { + type: "action", + text: "Add lease" + }, + "Network.rmleases_dialog" : { + type: "action", + text: "Remove lease" + } + } + }, + "Network.delete" : { type: "action", text: "Delete" @@ -585,6 +636,73 @@ function popUpCreateVnetDialog() { $create_vn_dialog.dialog('open'); } +function setupAddRemoveLeaseDialog() { + dialogs_context.append('
'); + $lease_vn_dialog = $('#lease_vn_dialog',dialogs_context) + + var dialog = $lease_vn_dialog; + + dialog.html( + '
\ +
\ +
Please specify:
\ + \ +
\ + \ + \ + \ +
\ +
\ +
\ + \ + \ +
\ +
\ +
' + ); + + //Prepare the jquery-ui dialog. Set style options here. + dialog.dialog({ + autoOpen: false, + modal: true, + width: 410, + height: 220 + }); + + $('button',dialog).button(); + + $('#lease_vn_form',dialog).submit(function(){ + var ip = $('#add_lease_ip',this).val(); + var mac = $('#add_lease_mac',this).val(); + + var obj = {ip: ip, mac: mac}; + + if (!mac.length) { delete obj.mac; }; + + Sunstone.runAction("Network.modifyleases", + $('#lease_vn_proceed',this).val(), + obj); + $lease_vn_dialog.dialog('close'); + return false; + }); +} + +function popUpAddLeaseDialog() { + $lease_vn_dialog.dialog("option","title","Add lease"); + $('#add_lease_mac',$lease_vn_dialog).show(); + $('#add_lease_mac_label',$lease_vn_dialog).show(); + $('#lease_vn_proceed',$lease_vn_dialog).val("Network.addleases"); + $lease_vn_dialog.dialog("open"); +} + +function popUpRemoveLeaseDialog() { + $lease_vn_dialog.dialog("option","title","Remove lease"); + $('#add_lease_mac',$lease_vn_dialog).hide(); + $('#add_lease_mac_label',$lease_vn_dialog).hide(); + $('#lease_vn_proceed',$lease_vn_dialog).val("Network.rmleases"); + $lease_vn_dialog.dialog("open"); +} + function setVNetAutorefresh() { setInterval(function(){ var checked = $('input:checked',dataTable_vNetworks.fnGetNodes()); @@ -620,6 +738,7 @@ $(document).ready(function(){ Sunstone.runAction("Network.list"); setupCreateVNetDialog(); + setupAddRemoveLeaseDialog(); setVNetAutorefresh(); initCheckAllBoxes(dataTable_vNetworks); diff --git a/src/sunstone/public/js/sunstone-util.js b/src/sunstone/public/js/sunstone-util.js index 94bbdccd67..1820b06f68 100644 --- a/src/sunstone/public/js/sunstone-util.js +++ b/src/sunstone/public/js/sunstone-util.js @@ -184,7 +184,7 @@ function notifySubmit(action, args, extra_param){ } else { msg += action_text + ": " + args; }; - if (extra_param) { + if (extra_param && extra_param.constructor != Object) { msg += " >> " + extra_param; };