diff --git a/src/sunstone/public/app/tabs/vms-tab.js b/src/sunstone/public/app/tabs/vms-tab.js index f83d36ea80..c76a212634 100644 --- a/src/sunstone/public/app/tabs/vms-tab.js +++ b/src/sunstone/public/app/tabs/vms-tab.js @@ -18,6 +18,7 @@ define(function(require) { require('./vms-tab/panels/info'), require('./vms-tab/panels/capacity'), require('./vms-tab/panels/storage'), + require('./vms-tab/panels/network'), // require('./vms-tab/panels/template') ]; diff --git a/src/sunstone/public/app/tabs/vms-tab/panels/network.js b/src/sunstone/public/app/tabs/vms-tab/panels/network.js new file mode 100644 index 0000000000..d5d1f6f701 --- /dev/null +++ b/src/sunstone/public/app/tabs/vms-tab/panels/network.js @@ -0,0 +1,438 @@ +define(function(require) { + /* + DEPENDENCIES + */ + + var Locale = require('utils/locale'); + var Config = require('sunstone-config'); + var Sunstone = require('sunstone'); + var Humanize = require('utils/humanize'); + var Notifier = require('utils/notifier'); + var Graphs = require('utils/graphs'); + var StateActions = require('../utils/state-actions'); + var OpenNebulaVM = require('opennebula/vm'); + + /* + CONSTANTS + */ + + var TAB_ID = require('../tabId'); + var PANEL_ID = require('./network/panelId'); + //var ATTACH_NIC_DIALOG_ID = require('../dialogs/attach-nic/dialogId'); + var RESOURCE = "VM" + var XML_ROOT = "VM" + + /* + CONSTRUCTOR + */ + + function Panel(info) { + this.panelId = PANEL_ID; + this.title = Locale.tr("Network"); + this.icon = "fa-globe"; + + this.element = info[XML_ROOT]; + + return this; + }; + + Panel.PANEL_ID = PANEL_ID; + Panel.prototype.html = _html; + Panel.prototype.setup = _setup; + Panel.prototype.onShow = _onShow; + + return Panel; + + /* + FUNCTION DEFINITIONS + */ + + function _html() { + var that = this; + var html = '
'; + } + + return html; + } + + function _setup(context) { + var that = this; + /* TODO if (Config.isTabActionEnabled("vms-tab", "VM.saveas")) { + setupSaveAsDialog(); + + $('a.saveas').live('click', function(){ + var b = $(this); + var vm_id = b.parents('form').attr('vmid'); + var disk_id = b.parents('tr').attr('disk_id'); + + popUpSaveAsDialog(vm_id, disk_id); + + //b.html(spinner); + return false; + }); + } */ + + /* TODO if (Config.isTabActionEnabled("vms-tab", "VM.disk_snapshot_cancel")) { + $('a.disk_snapshot_cancel').live('click', function(){ + var b = $(this); + var vm_id = b.parents('form').attr('vmid'); + var disk_id = b.parents('tr').attr('disk_id'); + + Sunstone.runAction('VM.disk_snapshot_cancel', vm_id, disk_id); + + return false; + }); + } */ + + var nics = [] + + if ($.isArray(that.element.TEMPLATE.NIC)) + nics = that.element.TEMPLATE.NIC + else if (!$.isEmptyObject(that.element.TEMPLATE.NIC)) + nics = [that.element.TEMPLATE.NIC] + + var nic_dt_data = []; + if (nics.length) { + var nic_dt_data = []; + + for (var i = 0; i < nics.length; i++) { + var nic = nics[i]; + + var actions; + // Attach / Detach + if ( + (// ACTIVE + that.element.STATE == "3") && + (// HOTPLUG_NIC + that.element.LCM_STATE == "25") && + (// + nic.ATTACH == "YES") + ) { + actions = Locale.tr("attach/detach in progress") + } else { + actions = ''; + + if (Config.isTabActionEnabled("vms-tab", "VM.detachnic")) { + if (StateActions.enabledStateAction("VM.detachnic", that.element.STATE, that.element.LCM_STATE)) { + actions += '' + Locale.tr("Detach") + '' + } + } + } + + var secgroups = []; + + var nic_secgroups = {}; + if (nic.SECURITY_GROUPS != undefined) { + $.each(nic.SECURITY_GROUPS.split(","), function() { + nic_secgroups[this] = true; + }); + } + + if (that.element.TEMPLATE.SECURITY_GROUP_RULE != undefined) { + $.each(that.element.TEMPLATE.SECURITY_GROUP_RULE, function() { + if (nic_secgroups[this.SECURITY_GROUP_ID]) { + secgroups.push(this); + } + }); + } + + nic_dt_data.push({ + NIC_ID : nic.NIC_ID, + NETWORK : nic.NETWORK, + IP : (nic.IP ? nic.IP : "--"), + MAC : nic.MAC, + IP6_ULA : (nic.IP6_ULA ? nic.IP6_ULA : "--"), + IP6_GLOBAL : (nic.IP6_GLOBAL ? nic.IP6_GLOBAL : "--"), + ACTIONS : actions, + SECURITY_GROUP_RULES : secgroups + }); + } + } + + var nics_table = $("#tab_network_form .nics_table", context).DataTable({ + "bDeferRender": true, + "data": nic_dt_data, + "columns": [ + { + "class": 'open-control', + "orderable": false, + "data": null, + "defaultContent": '' + }, + {"data": "NIC_ID", "defaultContent": ""}, + {"data": "NETWORK", "defaultContent": ""}, + {"data": "IP", "defaultContent": ""}, + {"data": "MAC", "defaultContent": ""}, + {"data": "IP6_ULA", "defaultContent": ""}, + {"data": "IP6_GLOBAL", "defaultContent": ""}, + {"data": "ACTIONS", "defaultContent": ""}, + {"defaultContent": ""} + ], + + "fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { + + if (aData.SECURITY_GROUP_RULES == undefined || + aData.SECURITY_GROUP_RULES.length == 0) { + + $("td.open-control", nRow).html("").removeClass('open-control'); + } + + $(nRow).attr("nic_id", aData.NIC_ID); + } + }); + + $("#tab_network_form .nics_table", context).dataTable().fnSort([[1, 'asc']]); + + // Add event listener for opening and closing each NIC row details + context.off('click', '#tab_network_form .nics_table td.open-control') + context.on('click', '#tab_network_form .nics_table td.open-control', function () { + var row = $(this).closest('table').DataTable().row($(this).closest('tr')); + + if (row.child.isShown()) { + row.child.hide(); + $(this).children("span").addClass('fa-chevron-down'); + $(this).children("span").removeClass('fa-chevron-up'); + } else { + var html = '' + tr("Security Group") + ' | \ +' + tr("Protocol") + ' | \ +' + tr("Type") + ' | \ +' + tr("Range") + ' | \ +' + tr("Network") + ' | \ +' + tr("ICMP Type") + ' | \ +|
---|---|---|---|---|---|---|
' + this.SECURITY_GROUP_ID + ' | \ +' + this.SECURITY_GROUP_NAME + ' | \ +' + rule_st.PROTOCOL + ' | \ +' + rule_st.RULE_TYPE + ' | \ +' + rule_st.RANGE + ' | \ +' + rule_st.NETWORK + ' | \ +' + rule_st.ICMP_TYPE + ' | \ +