X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwlaunchpadtasklet%2Frift%2Ftasklets%2Frwlaunchpad%2Fonboard.py;h=d4125d4c4529cc54a7416952102cc4da1fa7008a;hb=9ad945aab0b5a992e1df860bede8ecc9b143470e;hp=f777c9785bd55cf286fe9ef8de0970a3cb1c2849;hpb=6f07e6f33f751ab4ffe624f6037f887b243bece2;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/onboard.py b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/onboard.py index f777c978..d4125d4c 100644 --- a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/onboard.py +++ b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/onboard.py @@ -17,12 +17,13 @@ import requests +from rift.mano.utils.project import DEFAULT_PROJECT from rift.package import convert from gi.repository import ( - NsdYang, - RwNsdYang, - VnfdYang, - RwVnfdYang, + ProjectNsdYang as NsdYang, + RwProjectNsdYang as RwNsdYang, + ProjectVnfdYang as VnfdYang, + RwProjectVnfdYang as RwVnfdYang, ) @@ -37,21 +38,21 @@ class UpdateError(Exception): class DescriptorOnboarder(object): """ This class is responsible for onboarding descriptors using Restconf""" DESC_ENDPOINT_MAP = { - NsdYang.YangData_Nsd_NsdCatalog_Nsd: "nsd-catalog/nsd", - RwNsdYang.YangData_Nsd_NsdCatalog_Nsd: "nsd-catalog/nsd", - VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd: "vnfd-catalog/vnfd", - RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd: "vnfd-catalog/vnfd", + NsdYang.YangData_RwProject_Project_NsdCatalog_Nsd: "nsd-catalog/nsd", + RwNsdYang.YangData_RwProject_Project_NsdCatalog_Nsd: "nsd-catalog/nsd", + VnfdYang.YangData_RwProject_Project_VnfdCatalog_Vnfd: "vnfd-catalog/vnfd", + RwVnfdYang.YangData_RwProject_Project_VnfdCatalog_Vnfd: "vnfd-catalog/vnfd", } DESC_SERIALIZER_MAP = { - NsdYang.YangData_Nsd_NsdCatalog_Nsd: convert.NsdSerializer(), - RwNsdYang.YangData_Nsd_NsdCatalog_Nsd: convert.RwNsdSerializer(), - VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd: convert.VnfdSerializer(), - RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd: convert.RwVnfdSerializer(), + NsdYang.YangData_RwProject_Project_NsdCatalog_Nsd: convert.NsdSerializer(), + RwNsdYang.YangData_RwProject_Project_NsdCatalog_Nsd: convert.RwNsdSerializer(), + VnfdYang.YangData_RwProject_Project_VnfdCatalog_Vnfd: convert.VnfdSerializer(), + RwVnfdYang.YangData_RwProject_Project_VnfdCatalog_Vnfd: convert.RwVnfdSerializer(), } HEADERS = {"content-type": "application/vnd.yang.data+json"} - TIMEOUT_SECS = 5 + TIMEOUT_SECS = 60 AUTH = ('admin', 'admin') def __init__(self, log, host="127.0.0.1", port=8008, use_ssl=False, ssl_cert=None, ssl_key=None): @@ -72,28 +73,32 @@ class DescriptorOnboarder(object): return headers - def _get_url(self, descriptor_msg): + def _get_url(self, descriptor_msg, project=None): if type(descriptor_msg) not in DescriptorOnboarder.DESC_SERIALIZER_MAP: raise TypeError("Invalid descriptor message type") + if project is None: + project = DEFAULT_PROJECT + endpoint = DescriptorOnboarder.DESC_ENDPOINT_MAP[type(descriptor_msg)] + ep = "project/{}/{}".format(project, endpoint) url = "{}://{}:{}/api/config/{}".format( "https" if self._use_ssl else "http", self._host, self.port, - endpoint, + ep, ) return url - def _make_request_args(self, descriptor_msg, auth=None): + def _make_request_args(self, descriptor_msg, auth=None, project=None): if type(descriptor_msg) not in DescriptorOnboarder.DESC_SERIALIZER_MAP: raise TypeError("Invalid descriptor message type") serializer = DescriptorOnboarder.DESC_SERIALIZER_MAP[type(descriptor_msg)] - json_data = serializer.to_json_string(descriptor_msg) - url = self._get_url(descriptor_msg) + json_data = serializer.to_json_string(descriptor_msg, project_ns=True) + url = self._get_url(descriptor_msg, project=project) request_args = dict( url=url, @@ -134,7 +139,7 @@ class DescriptorOnboarder(object): self._log.error(msg) raise UpdateError(msg) from e - def onboard(self, descriptor_msg, auth=None): + def onboard(self, descriptor_msg, auth=None, project=None): """ Onboard the descriptor config Arguments: @@ -145,20 +150,23 @@ class DescriptorOnboarder(object): OnboardError - The descriptor config update failed """ - request_args = self._make_request_args(descriptor_msg, auth) + request_args = self._make_request_args(descriptor_msg, auth, project) try: response = requests.post(**request_args) response.raise_for_status() except requests.exceptions.ConnectionError as e: msg = "Could not connect to restconf endpoint: %s" % str(e) self._log.error(msg) + self._log.exception(msg) raise OnboardError(msg) from e except requests.exceptions.HTTPError as e: msg = "POST request to %s error: %s" % (request_args["url"], response.text) self._log.error(msg) + self._log.exception(msg) raise OnboardError(msg) from e except requests.exceptions.Timeout as e: msg = "Timed out connecting to restconf endpoint: %s", str(e) self._log.error(msg) + self._log.exception(msg) raise OnboardError(msg) from e