From c3f73d228e1cd1fcbda06ab20cc66a66fe549344 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Tue, 7 Jun 2016 23:06:11 +0200 Subject: [PATCH] Implement and enhance API for network getting function. --- lib/api.rb | 11 +++++++++++ lib/nebula.rb | 49 +++++++++++++++++++++++++++++++++++++++++++++---- swagger.yaml | 18 ++++++++++++++++++ 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/lib/api.rb b/lib/api.rb index 3875723..5999229 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -28,6 +28,17 @@ module Now halt e.code, e.message end end + + get '/network/:id' do + cross_origin + begin + network = @nebula.get(params['id']) + JSON.pretty_generate(network) + rescue NowError => e + halt e.code, e.message + end + end + end end diff --git a/lib/nebula.rb b/lib/nebula.rb index 31be255..fb4c0fe 100644 --- a/lib/nebula.rb +++ b/lib/nebula.rb @@ -48,10 +48,7 @@ module Now def list_networks() vn_pool = OpenNebula::VirtualNetworkPool.new(client, -1) - req = vn_pool.info - if OpenNebula.is_error?(req) - raise NowError.new({code: 500, message: req.message}) - end + check(vn_pool.info) networks = [] vn_pool.each do |vn| @@ -64,6 +61,50 @@ module Now return networks end + def get(network_id) + vn_generic = OpenNebula::VirtualNetwork.build_xml(network_id) + vn = OpenNebula::VirtualNetwork.new(vn_generic, @client) + check(vn.info) + + id = vn.id + title = vn.name + @logger.debug "OpenNebula get(#{network_id}) ==> #{id}, #{title}" + network = Network.new({id: id, title: title}) + + return network.to_hash + end + + private + + def check(return_code) + if !OpenNebula.is_error?(return_code) + return true + end + + case return_code.errno + when OpenNebula::Error::ESUCCESS + code = 200 + when OpenNebula::Error::EAUTHENTICATION + code = 401 + when OpenNebula::Error::EAUTHORIZATION + code = 403 + when OpenNebula::Error::ENO_EXISTS + code = 404 + when OpenNebula::Error::EXML_RPC_API + code = 500 + when OpenNebula::Error::EACTION + code = 400 + when OpenNebula::Error::EINTERNAL + code = 500 + when OpenNebula::Error::ENOTDEFINED + code = 501 + else + code = 500 + end + + raise NowError.new({code: code, message: return_code.message}) + end + end end diff --git a/swagger.yaml b/swagger.yaml index 2478597..292710b 100644 --- a/swagger.yaml +++ b/swagger.yaml @@ -31,6 +31,24 @@ paths: description: "KO" schema: $ref: "#/definitions/Error" + /network/{id}: + get: + parameters: + - in: "path" + name: "id" + description: "Network ID" + required: true + type: "integer" + format: "int64" + responses: + 200: + description: "Get information about network" + schema: + $ref: "#/definitions/Network" + default: + description: "KO" + schema: + $ref: "#/definitions/Error" definitions: Network: type: "object" -- 1.8.2.3