merge rest api updates
authorstevenvanrossem <steven.vanrossem@intec.ugent.be>
Wed, 10 Aug 2016 13:45:07 +0000 (15:45 +0200)
committerstevenvanrossem <steven.vanrossem@intec.ugent.be>
Wed, 10 Aug 2016 13:45:07 +0000 (15:45 +0200)
1  2 
src/emuvim/api/rest/compute.py
src/emuvim/api/rest/rest_api_endpoint.py

@@@ -34,7 -34,8 +34,8 @@@ logging.basicConfig(level=logging.INFO
  
  dcs = {}
  
- class ComputeStart(Resource):
+ class Compute(Resource):
      """
      Start a new compute instance: A docker container (note: zerorpc does not support keyword arguments)
      :param dc_label: name of the DC
      global dcs
  
      def put(self, dc_label, compute_name):
-         logging.debug("API CALL: compute start")
-         try:
-             #check if json data is a dict
-             data = request.json
-             if data is None:
-                 data = {}
-             elif type(data) is not dict:
-                 data = json.loads(request.json)
-             network = data.get("network")
-             nw_list = self._parse_network(network)
-             image = data.get("image")
-             command = data.get("docker_command")
  
+         # check if json data is a dict
+         data = request.json
+         if data is None:
+             data = {}
+         elif type(data) is not dict:
+             data = json.loads(request.json)
+         network = data.get("network")
+         nw_list = self._parse_network(network)
+         image = data.get("image")
+         command = data.get("docker_command")
+         try:
+             logging.debug("API CALL: compute start")
              c = dcs.get(dc_label).startCompute(
-                 compute_name, image= image, command= command, network= nw_list)
+                 compute_name, image=image, command=command, network=nw_list)
              # return docker inspect dict
              return c.getStatus(), 200
          except Exception as ex:
              logging.exception("API error.")
              return ex.message, 500
  
+     def get(self, dc_label, compute_name):
+         logging.debug("API CALL: compute status")
+         try:
+             return dcs.get(dc_label).containers.get(compute_name).getStatus(), 200
+         except Exception as ex:
+             logging.exception("API error.")
+             return ex.message, 500
+     def delete(self, dc_label, compute_name):
+         logging.debug("API CALL: compute stop")
+         try:
+             return dcs.get(dc_label).stopCompute(compute_name), 200
+         except Exception as ex:
+             logging.exception("API error.")
+             return ex.message, 500
      def _parse_network(self, network_str):
          '''
          parse the options for all network interfaces of the vnf
@@@ -79,7 -99,7 +99,7 @@@
          nw_list = list()
  
          # TODO make this more robust with regex check
-         if network_str is None :
+         if network_str is None:
              return nw_list
  
          networks = network_str[1:-1].split('),(')
  
          return nw_list
  
- class ComputeStop(Resource):
-     global dcs
-     def get(self, dc_label, compute_name):
-         logging.debug("API CALL: compute stop")
-         try:
-             return dcs.get(dc_label).stopCompute(compute_name), 200
-         except Exception as ex:
-             logging.exception("API error.")
-             return ex.message,500
  
  class ComputeList(Resource):
      global dcs
  
 -    def get(self, dc_label):
 +    def get(self, dc_label=None):
          logging.debug("API CALL: compute list")
          try:
 -            if dc_label == 'None':
 +            if dc_label is None or dc_label == 'None':
                  # return list with all compute nodes in all DCs
                  all_containers = []
                  for dc in dcs.itervalues():
              else:
                  # return list of compute nodes for specified DC
                  return [(c.name, c.getStatus())
-                     for c in dcs.get(dc_label).listCompute()], 200
+                         for c in dcs.get(dc_label).listCompute()], 200
          except Exception as ex:
              logging.exception("API error.")
              return ex.message, 500
  
  
- class ComputeStatus(Resource):
-     global dcs
-     def get(self, dc_label, compute_name):
-         logging.debug("API CALL: compute list")
-         try:
-             return dcs.get(dc_label).containers.get(compute_name).getStatus(), 200
-         except Exception as ex:
-             logging.exception("API error.")
-             return ex.message, 500
  class DatacenterList(Resource):
      global dcs
  
      def get(self):
              logging.exception("API error.")
              return ex.message, 500
  
- class DatacenterStatus(Resource):
  
+ class DatacenterStatus(Resource):
      global dcs
  
      def get(self, dc_label):
          except Exception as ex:
              logging.exception("API error.")
              return ex.message, 500
@@@ -32,7 -32,7 +32,7 @@@ from flask_restful import Ap
  
  # need to import total module to set its global variable dcs
  import compute
- from compute import dcs, ComputeList, ComputeStart, ComputeStatus, ComputeStop, DatacenterList, DatacenterStatus
+ from compute import dcs, ComputeList, Compute, DatacenterList, DatacenterStatus
  
  # need to import total module to set its global variable net
  import network
@@@ -44,9 -44,7 +44,7 @@@ from monitor import MonitorInterfaceAct
  logging.basicConfig(level=logging.INFO)
  
  
  class RestApiEndpoint(object):
      """
      Simple API endpoint that offers a REST
      interface. This interface will be used by the
          self.api = Api(self.app)
  
          # setup endpoints
 -        self.api.add_resource(ComputeList, "/restapi/compute/<dc_label>")
++
+         self.api.add_resource(Compute, "/restapi/compute/<dc_label>/<compute_name>")
-                               "/restapi/compute",
-                               "/restapi/compute/<dc_label>")
-         self.api.add_resource(ComputeStart, "/restapi/compute/<dc_label>/<compute_name>/start")
-         self.api.add_resource(ComputeStop, "/restapi/compute/<dc_label>/<compute_name>/stop")
-         self.api.add_resource(ComputeStatus, "/restapi/compute/<dc_label>/<compute_name>")
-         self.api.add_resource(DatacenterList, "/restapi/datacenter")
 +        self.api.add_resource(ComputeList,
++                      "/restapi/compute",
++                      "/restapi/compute/<dc_label>")
          self.api.add_resource(DatacenterStatus, "/restapi/datacenter/<dc_label>")
+         self.api.add_resource(DatacenterList, "/restapi/datacenter")
  
-         self.api.add_resource(NetworkAction, "/restapi/network/<vnf_src_name>/<vnf_dst_name>",)
+         self.api.add_resource(NetworkAction, "/restapi/network/<vnf_src_name>/<vnf_dst_name>", )
  
          self.api.add_resource(MonitorInterfaceAction,
                                "/restapi/monitor/<vnf_name>/<metric>",
  
          logging.debug("Created API endpoint %s(%s:%d)" % (self.__class__.__name__, self.ip, self.port))
  
      def connectDatacenter(self, dc):
          compute.dcs[dc.label] = dc
-         logging.info("Connected DC(%s) to API endpoint %s(%s:%d)" % (dc.label, self.__class__.__name__, self.ip, self.port))
+         logging.info(
+             "Connected DC(%s) to API endpoint %s(%s:%d)" % (dc.label, self.__class__.__name__, self.ip, self.port))
  
      def connectDCNetwork(self, DCnetwork):
          network.net = DCnetwork
          monitor.net = DCnetwork
  
              self.__class__.__name__, self.ip, self.port))
  
      def start(self):
-         thread = threading.Thread(target= self._start_flask, args=())
+         thread = threading.Thread(target=self._start_flask, args=())
          thread.daemon = True
          thread.start()
          logging.info("Started API endpoint @ http://%s:%d" % (self.ip, self.port))
  
      def _start_flask(self):
-         self.app.run(self.ip, self.port, debug=True, use_reloader=False)
+         self.app.run(self.ip, self.port, debug=True, use_reloader=False)