Implement and enhance API for network getting function.
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 7 Jun 2016 21:06:11 +0000 (23:06 +0200)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 7 Jun 2016 21:06:11 +0000 (23:06 +0200)
lib/api.rb
lib/nebula.rb
swagger.yaml

index 3875723..5999229 100644 (file)
@@ -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
index 31be255..fb4c0fe 100644 (file)
@@ -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
index 2478597..292710b 100644 (file)
@@ -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"