X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwnsm%2Frift%2Ftasklets%2Frwnsmtasklet%2Fopenmano_nsm.py;h=6c189464d96dfa71c92f5d5a342e4eb51f7a6f60;hb=08cf54de2f5c965b554e7fb572247acdedbe2d58;hp=ddc4c9baeb7922ffbdfdb2c2b10a3d1f7d2f35b7;hpb=9f938817397c550b5b0a853d7a920fe65be806cd;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py index ddc4c9ba..6c189464 100644 --- a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py +++ b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/openmano_nsm.py @@ -153,7 +153,7 @@ class VnfrConsoleOperdataDtsHandler(object): class OpenmanoVnfr(object): - def __init__(self, log, loop, cli_api, vnfr): + def __init__(self, log, loop, cli_api, vnfr, nsd): self._log = log self._loop = loop self._cli_api = cli_api @@ -164,6 +164,8 @@ class OpenmanoVnfr(object): self._created = False + self.nsd = nsd + @property def vnfd(self): return rift2openmano.RiftVNFD(self._vnfr.vnfd) @@ -183,7 +185,7 @@ class OpenmanoVnfr(object): @property def openmano_vnfd(self): self._log.debug("Converting vnfd %s from rift to openmano", self.vnfd.id) - openmano_vnfd = rift2openmano.rift2openmano_vnfd(self.vnfd) + openmano_vnfd = rift2openmano.rift2openmano_vnfd(self.vnfd, self.nsd) return openmano_vnfd @property @@ -414,6 +416,7 @@ class OpenmanoNsr(object): @asyncio.coroutine def add_vlr(self, vlr): self._vlrs.append(vlr) + yield from self._publisher.publish_vlr(None, vlr.vlr_msg) yield from asyncio.sleep(1, loop=self._loop) @asyncio.coroutine @@ -426,11 +429,12 @@ class OpenmanoNsr(object): self._cli_api.ns_vim_network_delete, vlr.name, vlr.om_datacenter_name) + yield from self._publisher.unpublish_vlr(None, vlr.vlr_msg) yield from asyncio.sleep(1, loop=self._loop) @asyncio.coroutine def add_vnfr(self, vnfr): - vnfr = OpenmanoVnfr(self._log, self._loop, self._cli_api, vnfr) + vnfr = OpenmanoVnfr(self._log, self._loop, self._cli_api, vnfr, nsd=self.nsd) yield from vnfr.create() self._vnfrs.append(vnfr) @@ -546,6 +550,11 @@ class OpenmanoNsr(object): return vnf["ip_address"].strip() return None + def get_vnf_mac_address(vnf): + if "mac_address" in vnf: + return vnf["mac_address"].strip() + return None + def get_ext_cp_info(vnf): cp_info_list = [] for vm in vnf["vms"]: @@ -563,7 +572,11 @@ class OpenmanoNsr(object): if ip_address is None: ip_address = "0.0.0.0" - cp_info_list.append((intf["external_name"], ip_address)) + mac_address = intf["mac_address"] + if mac_address is None: + mac_address="00:00:00:00:00:00" + + cp_info_list.append((intf["external_name"], ip_address, mac_address)) return cp_info_list @@ -611,6 +624,7 @@ class OpenmanoNsr(object): if all_vms_active(vnf_status): vnf_ip_address = get_vnf_ip_address(vnf_status) + vnf_mac_address = get_vnf_mac_address(vnf_status) if vnf_ip_address is None: self._log.warning("No IP address obtained " @@ -621,7 +635,7 @@ class OpenmanoNsr(object): self._log.debug("All VMs in VNF are active. Marking as running.") vnfr_msg.operational_status = "running" - self._log.debug("Got VNF ip address: %s", vnf_ip_address) + self._log.debug("Got VNF ip address: %s, mac-address: %s", vnf_ip_address, vnf_mac_address) vnfr_msg.mgmt_interface.ip_address = vnf_ip_address vnfr_msg.vnf_configuration.config_access.mgmt_ip_address = vnf_ip_address @@ -639,11 +653,12 @@ class OpenmanoNsr(object): # Add connection point information for the config manager cp_info_list = get_ext_cp_info(vnf_status) - for (cp_name, cp_ip) in cp_info_list: + for (cp_name, cp_ip, cp_mac_addr) in cp_info_list: cp = vnfr_msg.connection_point.add() cp.name = cp_name cp.short_name = cp_name cp.ip_address = cp_ip + cp.mac_address = cp_mac_addr yield from self._publisher.publish_vnfr(None, vnfr_msg) active_vnfs.append(vnfr) @@ -780,6 +795,7 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): self._cli_api = None self._http_api = None self._openmano_nsrs = {} + self._vnfr_uptime_tasks = {} self._set_ro_account(ro_account) @@ -846,6 +862,18 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): self._log.debug("Attempting to publish openmano vnf: %s", vnfr_msg) with self._dts.transaction() as xact: yield from self._publisher.publish_vnfr(xact, vnfr_msg) + self._log.debug("Creating a task to update uptime for vnfr: %s", vnfr.id) + self._vnfr_uptime_tasks[vnfr.id] = self._loop.create_task(self.vnfr_uptime_update(vnfr)) + + def vnfr_uptime_update(self, vnfr): + try: + vnfr_ = RwVnfrYang.YangData_Vnfr_VnfrCatalog_Vnfr.from_dict({'id': vnfr.id}) + while True: + vnfr_.uptime = int(time.time()) - vnfr._create_time + yield from self._publisher.publish_vnfr(None, vnfr_) + yield from asyncio.sleep(2, loop=self._loop) + except asyncio.CancelledError: + self._log.debug("Received cancellation request for vnfr_uptime_update task") @asyncio.coroutine def instantiate_vl(self, nsr, vlr): @@ -866,6 +894,7 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): """ nsr_id = nsr.id openmano_nsr = self._openmano_nsrs[nsr_id] + yield from openmano_nsr.terminate() yield from openmano_nsr.delete() @@ -881,7 +910,8 @@ class OpenmanoNsPlugin(rwnsmplugin.NsmPluginBase): """ Terminate the network service """ - pass + if vnfr.id in self._vnfr_uptime_tasks: + self._vnfr_uptime_tasks[vnfr.id].cancel() @asyncio.coroutine def terminate_vl(self, vlr):