diff --git a/src/sunstone/public/js/plugins/hosts-tab.js b/src/sunstone/public/js/plugins/hosts-tab.js index aaf4fb6392..2e203443d3 100644 --- a/src/sunstone/public/js/plugins/hosts-tab.js +++ b/src/sunstone/public/js/plugins/hosts-tab.js @@ -149,6 +149,12 @@ var create_host_tmpl = \
\
\ +
\ +
\ +
\ +
\ +
\ +
\ ').appendTo($(".content", container)) if (clusters.length == 0) { $('
' + @@ -1143,7 +1419,7 @@ function setupCreateHostDialog(){ tr("No clusters found in this DataCenter") + '' + '
' + - '').appendTo(vcenter_container) + '').appendTo($(".content", container)) } else { $.each(clusters, function(id, cluster_name){ var row = $('
' + @@ -1159,211 +1435,34 @@ function setupCreateHostDialog(){ '
'+ '
'+ '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '').appendTo(vcenter_container) + '').appendTo($(".content", container)) $(".cluster_name", row).data("cluster_name", cluster_name) $(".cluster_name", row).data("datacenter_name", datacenter_name) - $(".cluster_name", row).on("change", function(){ - var templates_container = $(".vcenter_templates", $(this).closest(".vcenter_cluster")); - if ($(this).is(":checked")) { - var path = '/vcenter/' + $(this).data("datacenter_name") + '/cluster/' + $(this).data("cluster_name"); - templates_container.html(generateAdvancedSection({ - html_id: path, - title: tr("Templates"), - content: ''+ - ''+ - ''+ - '' - })) - - $('a', templates_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", templates_container).html(""); - - $.each(response, function(id, template){ - var trow = $('
' + - '
' + - '
' + - '' + - '
'+ - '
'+ - '
' + - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
').appendTo($(".content", templates_container)) - - $(".template_name", trow).data("template_name", template.name) - $(".template_name", trow).data("one_template", template.one) - }); - }, - error: function(response){ - templates_container.html(""); - onError({}, OpenNebula.Error(response)); - } - }); - } 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: ''+ - ''+ - ''+ - '' - })) - - $('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 netname = network.name.replace(" ","_"); - - var trow = $('
' + - '
' + - '
' + - '
' + - '' + - '
'+ - '
'+ - '' + - '
'+ - '
'+ - '' + - '
'+ - '
' + - '
'+ - ''+ - '
'+ - '
'+ - '
'+ - '
'+ - '
' + - '
'+ - '
'+ - '
'+ - '
'+ - '
'+ - '
').appendTo($(".content", networks_container)) - - - $('.type_select').on("change",function(){ - var network_context = $(this).closest(".vcenter_network"); - var type = $(this).val(); - - var net_form_str = '' - - switch(type) { - case 'ETHER': - net_form_str = - '
'+ - ''+ - '
'; - break; - case 'IP4': - net_form_str = - '
'+ - ''+ - '
'+ - '
'+ - ''+ - '
'; - break; - case 'IP6': - net_form_str = - '
'+ - ''+ - '
'+ - '
'+ - ''+ - '
'+ - '
'+ - ''+ - '
'; - break; - } - - $('.net_options', network_context).html(net_form_str); - }); - - $(".network_name", trow).data("network_name", netname) - $(".network_name", trow).data("one_network", network.one) - }); - }, - error: function(response){ - networks_container.html(""); - onError({}, OpenNebula.Error(response)); - } - }); - } else { - networks_container.html(""); - } - }) }); } }); + + var templates_container = $(".vcenter_templates", $create_host_dialog); + var networks_container = $(".vcenter_networks", $create_host_dialog); + + var vcenter_user = $("#vcenter_user", $create_host_dialog).val(); + var vcenter_password = $("#vcenter_password", $create_host_dialog).val(); + var vcenter_host = $("#vcenter_host", $create_host_dialog).val(); + + fillVCenterTemplates({ + container: templates_container, + vcenter_user: vcenter_user, + vcenter_password: vcenter_password, + vcenter_host: vcenter_host + }); + + fillVCenterNetworks({ + container: networks_container, + vcenter_user: vcenter_user, + vcenter_password: vcenter_password, + vcenter_host: vcenter_host + }); }, error: function(response){ $(".vcenter_clusters", $create_host_dialog).html('') @@ -1421,145 +1520,6 @@ function setupCreateHostDialog(){ Sunstone.runAction("Host.update_template", response.HOST.ID, template_raw); addHostElement(request, response); - - $.each($(".template_name:checked", cluster_context), function(){ - var template_context = $(this).closest(".vcenter_template"); - - $(".vcenter_template_result:not(.success)", template_context).html( - ''+ - ''+ - ''+ - ''); - - var template_json = { - "vmtemplate": { - "template_raw": $(this).data("one_template") - } - }; - - OpenNebula.Template.create({ - timeout: true, - data: template_json, - success: function(request, response) { - OpenNebula.Helper.clear_cache("VMTEMPLATE"); - $(".vcenter_template_result", template_context).addClass("success").html( - ''+ - ''+ - ''+ - ''); - - $(".vcenter_template_response", template_context).html('

'+ - tr("Template created successfully")+' ID:'+response.VMTEMPLATE.ID+ - '

'); - }, - error: function (request, error_json){ - $(".vcenter_template_result", template_context).html(''+ - ''+ - ''+ - ''); - - $(".vcenter_template_response", template_context).html('

'+ - (error_json.error.message || tr("Cannot contact server: is it running and reachable?"))+ - '

'); - } - }); - }) - - $.each($(".network_name:checked", cluster_context), function(){ - var network_context = $(this).closest(".vcenter_network"); - - $(".vcenter_network_result:not(.success)", network_context).html( - ''+ - ''+ - ''+ - ''); - - var network_size = $(".netsize", network_context).val(); - var network_tmpl = $(this).data("one_network"); - var netname = $(this).data("network_name"); - var type = $('.type_select', network_context).val(); - - var ar_array = []; - ar_array.push("TYPE=" + type); - ar_array.push("SIZE=" + network_size); - - switch(type) { - case 'ETHER': - var mac = $('.eth_mac_net', network_context).val(); - - if (mac){ - ar_array.push("MAC=" + mac); - } - - break; - case 'IP4': - var mac = $('.four_mac_net', network_context).val(); - var ip = $('.four_ip_net', network_context).val(); - - if (mac){ - ar_array.push("MAC=" + mac); - } - if (ip) { - ar_array.push("IP=" + ip); - } - - break; - case 'IP6': - var mac = $('.six_mac_net', network_context).val(); - var gp = $('.six_global_net', network_context).val(); - var ula = $('.six_mac_net', network_context).val(); - - if (mac){ - ar_array.push("MAC=" + mac); - } - if (gp) { - ar_array.push("GLOBAL_PREFIX=" + gp); - } - if (ula){ - ar_array.push("ULA_PREFIX=" + ula); - } - - break; - } - - network_tmpl += "\nAR=[" - network_tmpl += ar_array.join(",\n") - network_tmpl += "]" - - 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( - ''+ - ''+ - ''+ - ''); - - $(".vcenter_network_response", network_context).html('

'+ - tr("Virtual Network created successfully")+' ID:'+response.VNET.ID+ - '

'); - }, - error: function (request, error_json){ - $(".vcenter_network_result", network_context).html(''+ - ''+ - ''+ - ''); - - $(".vcenter_network_response", network_context).html('

'+ - (error_json.error.message || tr("Cannot contact server: is it running and reachable?"))+ - '

'); - } - }); - }) - }, error: function (request, error_json){ $(".vcenter_host_result", $create_host_dialog).html(''+ @@ -1574,6 +1534,144 @@ function setupCreateHostDialog(){ }); }) + $.each($(".template_name:checked", $create_host_dialog), function(){ + var template_context = $(this).closest(".vcenter_template"); + + $(".vcenter_template_result:not(.success)", template_context).html( + ''+ + ''+ + ''+ + ''); + + var template_json = { + "vmtemplate": { + "template_raw": $(this).data("one_template") + } + }; + + OpenNebula.Template.create({ + timeout: true, + data: template_json, + success: function(request, response) { + OpenNebula.Helper.clear_cache("VMTEMPLATE"); + $(".vcenter_template_result", template_context).addClass("success").html( + ''+ + ''+ + ''+ + ''); + + $(".vcenter_template_response", template_context).html('

'+ + tr("Template created successfully")+' ID:'+response.VMTEMPLATE.ID+ + '

'); + }, + error: function (request, error_json){ + $(".vcenter_template_result", template_context).html(''+ + ''+ + ''+ + ''); + + $(".vcenter_template_response", template_context).html('

'+ + (error_json.error.message || tr("Cannot contact server: is it running and reachable?"))+ + '

'); + } + }); + }) + + $.each($(".network_name:checked", $create_host_dialog), function(){ + var network_context = $(this).closest(".vcenter_network"); + + $(".vcenter_network_result:not(.success)", network_context).html( + ''+ + ''+ + ''+ + ''); + + var network_size = $(".netsize", network_context).val(); + var network_tmpl = $(this).data("one_network"); + var netname = $(this).data("network_name"); + var type = $('.type_select', network_context).val(); + + var ar_array = []; + ar_array.push("TYPE=" + type); + ar_array.push("SIZE=" + network_size); + + switch(type) { + case 'ETHER': + var mac = $('.eth_mac_net', network_context).val(); + + if (mac){ + ar_array.push("MAC=" + mac); + } + + break; + case 'IP4': + var mac = $('.four_mac_net', network_context).val(); + var ip = $('.four_ip_net', network_context).val(); + + if (mac){ + ar_array.push("MAC=" + mac); + } + if (ip) { + ar_array.push("IP=" + ip); + } + + break; + case 'IP6': + var mac = $('.six_mac_net', network_context).val(); + var gp = $('.six_global_net', network_context).val(); + var ula = $('.six_mac_net', network_context).val(); + + if (mac){ + ar_array.push("MAC=" + mac); + } + if (gp) { + ar_array.push("GLOBAL_PREFIX=" + gp); + } + if (ula){ + ar_array.push("ULA_PREFIX=" + ula); + } + + break; + } + + network_tmpl += "\nAR=[" + network_tmpl += ar_array.join(",\n") + network_tmpl += "]" + + 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( + ''+ + ''+ + ''+ + ''); + + $(".vcenter_network_response", network_context).html('

'+ + tr("Virtual Network created successfully")+' ID:'+response.VNET.ID+ + '

'); + }, + error: function (request, error_json){ + $(".vcenter_network_result", network_context).html(''+ + ''+ + ''+ + ''); + + $(".vcenter_network_response", network_context).html('

'+ + (error_json.error.message || tr("Cannot contact server: is it running and reachable?"))+ + '

'); + } + }); + }); + return false }); diff --git a/src/sunstone/routes/vcenter.rb b/src/sunstone/routes/vcenter.rb index 2d70844863..5718dbf2b2 100644 --- a/src/sunstone/routes/vcenter.rb +++ b/src/sunstone/routes/vcenter.rb @@ -67,20 +67,19 @@ get '/vcenter' do end end -get '/vcenter/:datacenter/cluster/:name' do +get '/vcenter/templates' do begin - rs = vcenter_client.vm_templates - - templates = rs[params[:datacenter]] + templates = vcenter_client.vm_templates( + $cloud_auth.client(session[:user], session[:active_zone_endpoint])) if templates.nil? - msg = "Datacenter " + params[:datacenter] + "not found" + msg = "No datacenter found" logger.error("[vCenter] " + msg) error = Error.new(msg) error 404, error.to_json end - ctemplates = templates.select{|t| t[:host] == params[:name]} - [200, ctemplates.to_json] + #ctemplates = templates.select{|t| t[:host] == params[:name]} + [200, templates.to_json] rescue Exception => e logger.error("[vCenter] " + e.message) error = Error.new(e.message) @@ -88,13 +87,12 @@ get '/vcenter/:datacenter/cluster/:name' do end end -get '/vcenter/:datacenter/network/:name' do +get '/vcenter/networks' do begin - rs = vcenter_client.vcenter_networks - - networks = rs[params[:datacenter]] + networks = vcenter_client.vcenter_networks( + $cloud_auth.client(session[:user], session[:active_zone_endpoint])) if networks.nil? - msg = "Datacenter " + params[:datacenter] + "not found" + msg = "No datacenter found" logger.error("[vCenter] " + msg) error = Error.new(msg) error 404, error.to_json