1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

Feature #1067: Improve VLAN support in Sunstone

This commit is contained in:
Hector Sanjuan 2012-02-16 13:54:38 +01:00
parent c81c42296b
commit 5f984c664b
2 changed files with 117 additions and 24 deletions

View File

@ -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">\

View File

@ -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;