summaryrefslogtreecommitdiffstats
path: root/vio
diff options
context:
space:
mode:
Diffstat (limited to 'vio')
-rw-r--r--vio/vio/api_v2/api_definition/hosts.yaml25
-rw-r--r--vio/vio/api_v2/api_router/controller_builder.py31
-rw-r--r--vio/vio/api_v2/api_router/v0_controller.py4
3 files changed, 56 insertions, 4 deletions
diff --git a/vio/vio/api_v2/api_definition/hosts.yaml b/vio/vio/api_v2/api_definition/hosts.yaml
index e755c77..89662f9 100644
--- a/vio/vio/api_v2/api_definition/hosts.yaml
+++ b/vio/vio/api_v2/api_definition/hosts.yaml
@@ -27,27 +27,46 @@
"200":
schema:
$ref: "#/definitions/host"
+ get_all:
+ produces:
+ - "application/json"
+ responses:
+ "200":
+ schema:
+ type: "array"
+ items:
+ $ref: "#/definitions/host"
vim_path: "/compute/os-hypervisors"
definitions:
host:
+ plural_vim_resource: "hypervisors"
+ vim_resource: "hypervisor"
+ plural: "hosts"
properties:
name:
type: string
required: true
source: hypervisor.hypervisor_hostname
+ id:
+ type: string
+ required: true
+ source: hypervisor.id
+ status:
+ type: string
+ source: hypervisor.status
+ state:
+ type: string
+ source: hypervisor.state
cpu:
type: integer
minimal: 1
source: hypervisor.vcpus
action: copy
- required: true
disk_gb:
type: integer
minimal: 0
source: hypervisor.local_gb
- required: true
memory_mb:
type: integer
minimal: 0
source: hypervisor.memory_mb
- required: true
diff --git a/vio/vio/api_v2/api_router/controller_builder.py b/vio/vio/api_v2/api_router/controller_builder.py
index 9014377..6fcaf24 100644
--- a/vio/vio/api_v2/api_router/controller_builder.py
+++ b/vio/vio/api_v2/api_router/controller_builder.py
@@ -57,6 +57,15 @@ def _convert_vim_res_to_mc_res(vim_resource, res_properties):
mc_resource = {}
for key in res_properties:
vim_res, attr = res_properties[key]["source"].split('.')
+
+ if attr not in vim_resource[vim_res]:
+ if res_properties[key].get("required"):
+ raise Exception("Required field %s is missed in VIM "
+ "resource %s", (attr, vim_resource))
+ else:
+ # None required fields missed, just skip.
+ continue
+
action = res_properties[key].get("action", "copy")
# TODO(xiaohhui): Actions should be in constants.
if action == "copy":
@@ -86,7 +95,6 @@ def _build_api_controller(api_meta):
@pecan.expose("json")
def _get(self, vim_id, tenant_id, resource_id):
""" General GET """
-
session = _get_vim_auth_session(vim_id, tenant_id)
service = {'service_type': service_type,
'interface': 'public'}
@@ -101,6 +109,27 @@ def _build_api_controller(api_meta):
controller_meta["get"] = _get
+ if "get_all" in path_meta:
+ # Add get_all method to controller
+ @pecan.expose("json")
+ def _get_all(self, vim_id, tenant_id):
+ """ General GET all """
+ session = _get_vim_auth_session(vim_id, tenant_id)
+ service = {'service_type': service_type,
+ 'interface': 'public'}
+ resp = session.get(resource_url, endpoint_filter=service)
+ vim_res = resp.json()[resource_meta['plural_vim_resource']]
+ mc_res = [_convert_vim_res_to_mc_res(
+ {resource_meta['vim_resource']: v},
+ resource_properties)
+ for v in vim_res]
+ return {"vimName": vim_id,
+ resource_meta['plural']: mc_res,
+ "tenantId": tenant_id,
+ "vimid": vim_id}
+
+ controller_meta["get_all"] = _get_all
+
return path, type(controller_name, (rest.RestController,), controller_meta)
diff --git a/vio/vio/api_v2/api_router/v0_controller.py b/vio/vio/api_v2/api_router/v0_controller.py
index 3c7a952..d7d428d 100644
--- a/vio/vio/api_v2/api_router/v0_controller.py
+++ b/vio/vio/api_v2/api_router/v0_controller.py
@@ -35,6 +35,10 @@ class V0_Controller(rest.RestController):
""" Placeholder for sub controllers. """
pecan.abort(405)
+ def get_all(self, vim_id, tenant_id):
+ """ Placeholder for sub controllers. """
+ pecan.abort(405)
+
pecan.route(V0_Controller, "swagger.json", swagger_json.SwaggerJson())