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

Feature #3306: Add size to network importing

This commit is contained in:
Tino Vazquez 2014-12-10 18:10:09 +01:00 committed by Ruben S. Montero
parent 256d8a73db
commit 98df77f19b
4 changed files with 165 additions and 22 deletions

View File

@ -278,15 +278,9 @@ cmd=CommandParser::CmdParser.new(ARGV) do
one_vn = ::OpenNebula::VirtualNetwork.new(
::OpenNebula::Template.build_xml, vc.one)
vnet_template = "NAME=\"#{n[:name]}\"\n" +
"BRIDGE=\"#{n[:name]}\"\n" +
"VCENTER_TYPE=\"#{n[:type]}\"" +
"AR=[\n" +
" TYPE = \"ETHER\"\n," +
" SIZE = \"#{size.to_i}\"\n]"
vnet_template += "VLAN=\"YES\"\nVLAN_ID=#{n[:vlan]}" if n[:vlan]
vnet_template = n[:one] +
" SIZE = \"#{size.to_i}\"\n]"
rc = one_vn.allocate(vnet_template)
if ::OpenNebula.is_error?(rc)

View File

@ -1161,6 +1161,8 @@ function setupCreateHostDialog(){
'</div>'+
'<div class="vcenter_templates">'+
'</div>'+
'<div class="vcenter_networks">'+
'</div>'+
'</div>').appendTo(vcenter_container)
$(".cluster_name", row).data("cluster_name", cluster_name)
@ -1223,6 +1225,68 @@ function setupCreateHostDialog(){
} else {
templates_container.html("");
}
var networks_container = $(".vcenter_networks", $(this).closest(".vcenter_cluster"));
if ($(this).is(":checked")) {
var path = '/vcenter/' + $(this).data("datacenter_name") + '/network/' + $(this).data("cluster_name");
networks_container.html(generateAdvancedSection({
html_id: path,
title: tr("Networks"),
content: '<span class="fa-stack fa-2x" style="color: #dfdfdf">'+
'<i class="fa fa-cloud fa-stack-2x"></i>'+
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>'+
'</span>'
}))
$('a', networks_container).trigger("click")
$.ajax({
url: path,
type: "GET",
data: {timeout: false},
dataType: "json",
headers: {
"X_VCENTER_USER": $("#vcenter_user", $create_host_dialog).val(),
"X_VCENTER_PASSWORD": $("#vcenter_password", $create_host_dialog).val(),
"X_VCENTER_HOST": $("#vcenter_host", $create_host_dialog).val()
},
success: function(response){
$(".content", networks_container).html("");
$.each(response, function(id, network){
var trow = $('<div class="vcenter_network">' +
'<div class="row">' +
'<div class="large-10 columns">' +
'<label class='+escape(network.name)+'>' +
'<div><div "large-10 columns"><label class='+escape(network.name)+'>' +
'<input type="checkbox" class="network_name" checked/> ' +
network.name + '&emsp;<span style="color: #999">' + network.type + '</span></div>' +
'<div "large-2 columns"><input style="width: 50px" type="text" class="netsize" value="255"/>' +
'</label>' +
'<div class="large-12 columns vcenter_network_response">'+
'</div>'+
'</div>' +
'<div class="large-2 columns vcenter_network_result">'+
'</div>'+
'</div>'+
'<div class="vcenter_networks">'+
'</div>'+
'</div>').appendTo($(".content", networks_container))
$(".network_name", trow).data("network_name", network.name)
$(".network_name", trow).data("one_network", network.one)
});
},
error: function(response){
networks_container.html("");
onError({}, OpenNebula.Error(response));
}
});
} else {
networks_container.html("");
}
})
});
}
@ -1327,14 +1391,64 @@ function setupCreateHostDialog(){
}
});
})
$.each($(".network_name:checked", cluster_context), function(){
var network_context = $(this).closest(".vcenter_network");
$(".vcenter_network_result:not(.success)", network_context).html(
'<span class="fa-stack fa-2x" style="color: #dfdfdf">'+
'<i class="fa fa-cloud fa-stack-2x"></i>'+
'<i class="fa fa-spinner fa-spin fa-stack-1x fa-inverse"></i>'+
'</span>');
network_name = unescape($(network_context).find('label')[0].className);
network_size = $(".netsize", network_context).val();
network_tmpl = $(this).data("one_network");
network_tmpl = network_tmpl + ' SIZE = "'+ network_size +'"]'
var vnet_json = {
"vnet": {
"vnet_raw": network_tmpl
}
};
OpenNebula.Network.create({
timeout: true,
data: vnet_json,
success: function(request, response) {
OpenNebula.Helper.clear_cache("VNET");
$(".vcenter_network_result", network_context).addClass("success").html(
'<span class="fa-stack fa-2x" style="color: #dfdfdf">'+
'<i class="fa fa-cloud fa-stack-2x"></i>'+
'<i class="fa fa-check fa-stack-1x fa-inverse"></i>'+
'</span>');
$(".vcenter_network_response", network_context).html('<p style="font-size:12px" class="running-color">'+
tr("Virtual Network created successfully")+' ID:'+response.VNET.ID+
'</p>');
},
error: function (request, error_json){
$(".vcenter_network_result", network_context).html('<span class="fa-stack fa-2x" style="color: #dfdfdf">'+
'<i class="fa fa-cloud fa-stack-2x"></i>'+
'<i class="fa fa-warning fa-stack-1x fa-inverse"></i>'+
'</span>');
$(".vcenter_network_response", network_context).html('<p style="font-size:12px" class="error-color">'+
(error_json.error.message || tr("Cannot contact server: is it running and reachable?"))+
'</p>');
}
});
})
},
error: function (request, error_json){
$(".vcenter_host_result", context).html('<span class="fa-stack fa-2x" style="color: #dfdfdf">'+
$(".vcenter_host_result", $create_host_dialog).html('<span class="fa-stack fa-2x" style="color: #dfdfdf">'+
'<i class="fa fa-cloud fa-stack-2x"></i>'+
'<i class="fa fa-warning fa-stack-1x fa-inverse"></i>'+
'</span>');
$(".vcenter_host_response", context).html('<p style="font-size:12px" class="error-color">'+
$(".vcenter_host_response", $create_host_dialog).html('<p style="font-size:12px" class="error-color">'+
(error_json.error.message || tr("Cannot contact server: is it running and reachable?"))+
'</p>');
}

View File

@ -86,4 +86,24 @@ get '/vcenter/:datacenter/cluster/:name' do
error = Error.new(e.message)
error 403, error.to_json
end
end
get '/vcenter/:datacenter/network/:name' do
begin
rs = vcenter_client.vcenter_networks
networks = rs[params[:datacenter]]
if networks.nil?
msg = "Datacenter " + params[:datacenter] + "not found"
logger.error("[vCenter] " + msg)
error = Error.new(msg)
error 404, error.to_json
end
[200, networks.to_json]
rescue Exception => e
logger.error("[vCenter] " + e.message)
error = Error.new(e.message)
error 403, error.to_json
end
end

View File

@ -252,42 +252,57 @@ class VIClient
one_nets = []
networks.each { |n|
vnet_template = "NAME=\"#{n[:name]}\"\n" +
"BRIDGE=\"#{n[:name]}\"\n" +
"VCENTER_TYPE=\"Port Group\"" +
"AR=[\n" +
" TYPE = \"ETHER\"\n,"
one_nets << {:name => n.name,
:bridge => n.name,
:type => "Port Group"}
:type => "Port Group",
:one => vnet_template}
}
vcenter_networks[dc.name] = one_nets
networks = get_entities(dc.networkFolder,
'DistributedVirtualPortgroup' )
one_nets = []
networks.each { |n|
one_net = {:name => n.name,
:bridge => n.name,
:type=> "Distributed Port Group"}
vnet_template = "NAME=\"#{n[:name]}\"\n" +
"BRIDGE=\"#{n[:name]}\"\n" +
"VCENTER_TYPE=\"Distributed Port Group\"" +
"AR=[\n" +
" TYPE = \"ETHER\"\n,"
vlan = n.config.defaultPortConfig.vlan.vlanId
vlan = n.config.defaultPortConfig.vlan.vlanId
vlan_str = ""
if vlan != 0
if vlan.is_a? Array
vlan_str = ""
vlan.each{|v|
vlan_str += v.start + ".." + v.end + ","
vlan_str += v.start.to_s + ".." + v.end.to_s + ","
}
vlan_str.chop!
else
vlan_str = vlan.to_s
end
end
one_net = {:name => n.name,
:bridge => n.name,
:type => "Distributed Port Group",
:one => vnet_template}
if !vlan_str.empty?
one_net[:vlan] = vlan_str
vnet_template = "VLAN=\"YES\"\nVLAN_ID=#{one_net[:vlan]}" +
vnet_template
end
one_nets << one_net
}
vcenter_networks[dc.name] += one_nets
vcenter_networks[dc.name] = one_nets
}
return vcenter_networks