diff --git a/src/sunstone/public/js/plugins/hosts-tab.js b/src/sunstone/public/js/plugins/hosts-tab.js index bffa341124..d076b59573 100644 --- a/src/sunstone/public/js/plugins/hosts-tab.js +++ b/src/sunstone/public/js/plugins/hosts-tab.js @@ -85,11 +85,12 @@ var create_host_tmpl = <div class="manager clear" id="vnm_mads">\ <label>Virtual Network Manager:</label>\ <select id="vnm_mad" name="vn">\ - <option value="dummy">Default (dummy)</option>\ + <option value="dummy">' + tr("Default (dummy)") +'</option>\ <option value="fw">Firewall</option>\ <option value="802.1Q">802.1Q</option>\ <option value="ebtables">Ebtables</option>\ <option value="ovswitch">Open vSwitch</option>\ + <option value="vmware">VMware</option>\ </select>\ </div>\ <div class="manager clear" id="tm_mads">\ diff --git a/src/sunstone/public/js/plugins/vnets-tab.js b/src/sunstone/public/js/plugins/vnets-tab.js index 87a153b4e9..daa3f60a3e 100644 --- a/src/sunstone/public/js/plugins/vnets-tab.js +++ b/src/sunstone/public/js/plugins/vnets-tab.js @@ -51,8 +51,25 @@ var create_vn_tmpl = <input type="text" name="name" id="name" /><br />\ </fieldset>\ <fieldset>\ + <label for="network_mode">'+tr("Network mode")+':</label>\ + <select name="network_mode" id="network_mode">\ + <option value="default">'+tr("Default")+'</option>\ + <option value="802.1Q">'+tr("802.1Q")+'</option>\ + <option value="etables">'+tr("Etables")+'</option>\ + <option value="openvswitch">'+tr("Open vSwitch")+'</option>\ + <option value="vmware">'+tr("VMware")+'</option>\ + </select><br />\ <label for="bridge">'+tr("Bridge")+':</label>\ <input type="text" name="bridge" id="bridge" /><br />\ + <label for="phydev">'+tr("Physical device")+':</label>\ + <input type="text" name="phydev" id="phydev" />\ + <label for="vlan">'+tr("VLAN")+':</label>\ + <select name="vlan" id="vlan">\ + <option value="YES">'+tr("Yes")+'</option>\ + <option value="NO">'+tr("No")+'</option>\ + </select><br />\ + <label for="vlan_id">'+tr("VLAN ID")+':</label>\ + <input type="text" name="vlan_id" id="vlan_id" /><br />\ </fieldset>\ <fieldset>\ <label style="height:2em;">'+tr("Network type")+':</label>\ @@ -530,12 +547,20 @@ function updateVNetworkInfo(request,vn){ <td class="key_td">'+tr("Group")+'</td>\ <td class="value_td">'+vn_info.GNAME+'</td>\ </tr>\ + <tr>\ + <td class="key_td">'+tr("Bridge")+'</td>\ + <td class="value_td">'+ (typeof(vn_info.BRIDGE) == "object" ? "--": vn_info.BRIDGE) +'</td>\ + </tr>\ + <tr>\ + <td class="key_td">'+tr("VLAN")+'</td>\ + <td class="value_td">'+ (vn_info.VLAN == "0" ? "no" : "yes") +'</td>\ + </tr>\ <tr>\ <td class="key_td">'+tr("Physical device")+'</td>\ <td class="value_td">'+ (typeof(vn_info.PHYDEV) == "object" ? "--": vn_info.PHYDEV) +'</td>\ </tr>\ <tr>\ - <td class="key_td">'+tr("VNET ID")+'</td>\ + <td class="key_td">'+tr("VLAN ID")+'</td>\ <td class="value_td">'+ (typeof(vn_info.VLAN_ID) == "object" ? "--": vn_info.VLAN_ID) +'</td>\ </tr>\ <tr><td class="key_td">Permissions</td><td></td></tr>\ @@ -704,6 +729,36 @@ function setupCreateVNetDialog() { $('div#fixed',$create_vn_dialog).hide(); $('div#ranged',$create_vn_dialog).show(); }); + + $('#network_mode',dialog).change(function(){ + $('input,select#vlan,label[for!="network_mode"]', $(this).parent()).hide(); + $('input', $(this).parent()).val(""); + switch ($(this).val()) { + case "default": + $('input#bridge,label[for="bridge"]',$create_vn_dialog).show(); + $('input#phydev,label[for="phydev"]',$create_vn_dialog).show(); + break; + case "802.1Q": + $('input#bridge,label[for="bridge"]',$create_vn_dialog).show(); + $('input#phydev,label[for="phydev"]',$create_vn_dialog).show(); + $('select#vlan,label[for="vlan"]',$create_vn_dialog).show(); + $('input#vlan_id,label[for="vlan_id"]',$create_vn_dialog).show(); + break; + case "etables": + $('input#bridge,label[for="bridge"]',$create_vn_dialog).show(); + break; + case "openvswitch": + case "vmware": + $('input#bridge,label[for="bridge"]',$create_vn_dialog).show(); + $('select#vlan,label[for="vlan"]',$create_vn_dialog).show(); + $('input#vlan_id,label[for="vlan_id"]',$create_vn_dialog).show(); + break; + }; + }); + + //Initialize shown options + $('#network_mode',dialog).trigger("change"); + $('button',dialog).button(); @@ -786,12 +841,60 @@ function setupCreateVNetDialog() { notifyError(tr("Virtual Network name missing!")); return false; } - var bridge = $('#bridge',this).val(); - var type = $('input:checked',this).val(); + var network_json = {"name" : name}; + + var network_mode = $('select#network_mode',this).val(); + var bridge = $('#bridge',this).val(); + var phydev = $('#phydev',this).val(); + var vlan = $('#vlan',this).val(); + var vlan_id = $('#vlan_id',this).val(); + switch (network_mode) { + case "default": + if (!bridge && !phydev){ + notifyError("Bridge or physical device must be specified"); + return false; + }; + if (bridge) network_json['bridge']=bridge; + if (phydev) network_json['phydev']=phydev; + break; + case "802.1Q": + if (!phydev){ + notifyError("Physical device must be specified"); + return false; + }; + network_json['phydev']=phydev; + if (bridge) network_json['bridge']=bridge; + if (vlan_id) { + network_json['vlan']=vlan; + network_json['vlan_id']=vlan_id; + }; + break; + case "etables": + if (!bridge){ + notifyError("Bridge must be specified"); + return false; + }; + network_json['bridge']=bridge; + break; + case "openvswitch": + case "vmware": + if (!bridge){ + notifyError("Bridge must be specified"); + return false; + }; + network_json['bridge']=bridge; + if (vlan_id) { + network_json['vlan']=vlan; + network_json['vlan_id']=vlan_id; + }; + break; + }; + + var type = $('input:checked',this).val(); + network_json['type']=type; //TODO: Name and bridge provided?! - var network_json = null; if (type == "fixed") { var leases = $('#leases option', this); var leases_obj=[]; @@ -807,12 +910,7 @@ function setupCreateVNetDialog() { }); //and construct the final data for the request - network_json = { - "vnet" : { - "type" : "FIXED", - "leases" : leases_obj, - "bridge" : bridge, - "name" : name }}; + network_json["leases"] = leases_obj; } else { //type ranged @@ -827,25 +925,17 @@ function setupCreateVNetDialog() { return false; }; - //we form the object for the request - network_json = { - "vnet" : { - "type" : "RANGED", - "bridge" : bridge, - "name" : name } - }; - if (network_addr.length) - network_json["vnet"]["network_address"]=network_addr; + network_json["network_address"]=network_addr; if (network_mask.length) - network_json["vnet"]["network_mask"]=network_mask; + network_json["network_mask"]=network_mask; if (custom){ if (ip_start.length) - network_json["vnet"]["ip_start"] = ip_start; + network_json["ip_start"] = ip_start; if (ip_end.length) - network_json["vnet"]["ip_end"] = ip_end; + network_json["ip_end"] = ip_end; }; }; @@ -853,11 +943,13 @@ function setupCreateVNetDialog() { $('#custom_var_vnet_box option',$create_vn_dialog).each(function(){ var attr_name = $(this).attr('name'); var attr_value = $(this).val(); - network_json["vnet"][attr_name] = attr_value; + network_json[attr_name] = attr_value; }); //Create the VNetwork. + network_json = {"vnet" : network_json}; + Sunstone.runAction("Network.create",network_json); $create_vn_dialog.dialog('close'); return false;