From 4073bd0ffc1a1fdcb2a46fc8bef1be59f6f57025 Mon Sep 17 00:00:00 2001 From: Rudra Rugge Date: Wed, 10 Jun 2015 11:10:22 -0700 Subject: [PATCH] Reauthenicate nova token and cleanup service vm Nova reauthenticate needs to be done when Unauthorized exception is raised. This exception needs to be raised to the caller. Cleanup of service VM objet from VNC database in case of nova error conditions. Change-Id: I6030b48441eee0a511f61839af913a5d63893d81 Closes-Bug: #1463745 --- .../svc-monitor/svc_monitor/instance_manager.py | 6 +++++- .../svc-monitor/svc_monitor/nova_client.py | 3 +++ .../svc_monitor/virtual_machine_manager.py | 16 ++++++++++++---- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/config/svc-monitor/svc_monitor/instance_manager.py b/src/config/svc-monitor/svc_monitor/instance_manager.py index 7b32ca6188a..9f76963030a 100644 --- a/src/config/svc-monitor/svc_monitor/instance_manager.py +++ b/src/config/svc-monitor/svc_monitor/instance_manager.py @@ -175,7 +175,11 @@ def create_service_vn(self, vn_name, vn_subnet, subnet_info = IpamSubnetType(subnet=SubnetType(pfx, pfx_len)) subnet_data = VnSubnetsType([subnet_info]) vn_obj.add_network_ipam(ipam_obj, subnet_data) - self._vnc_lib.virtual_network_create(vn_obj) + try: + self._vnc_lib.virtual_network_create(vn_obj) + except RefsExistError: + vn_obj = self._vnc_lib.virtual_network_read( + fq_name=vn_obj.get_fq_name()) VirtualNetworkSM.locate(vn_obj.uuid) return vn_obj.uuid diff --git a/src/config/svc-monitor/svc_monitor/nova_client.py b/src/config/svc-monitor/svc_monitor/nova_client.py index 96bc460cd1a..85f2b7e5bf4 100644 --- a/src/config/svc-monitor/svc_monitor/nova_client.py +++ b/src/config/svc-monitor/svc_monitor/nova_client.py @@ -46,6 +46,8 @@ def _novaclient_exec(self, resource, oper, proj_name, "Multiple %s %s=%s found in project %s" % (resource, kwargs.keys()[0], kwargs.values()[0], proj_name)) return None + except nc_exc.Unauthorized: + raise except Exception as e: self.logger.log_error("nova error %s" % str(e)) return None @@ -56,6 +58,7 @@ def oper(self, resource, oper, proj_name, **kwargs): proj_name, False, **kwargs) except nc_exc.Unauthorized: try: + self.logger.log_notice("nova refresh token") return self._novaclient_exec(resource, oper, proj_name, True, **kwargs) except nc_exc.Unauthorized: diff --git a/src/config/svc-monitor/svc_monitor/virtual_machine_manager.py b/src/config/svc-monitor/svc_monitor/virtual_machine_manager.py index 3a92d573697..30809361377 100644 --- a/src/config/svc-monitor/svc_monitor/virtual_machine_manager.py +++ b/src/config/svc-monitor/svc_monitor/virtual_machine_manager.py @@ -152,12 +152,20 @@ def delete_service(self, vm): # nova vm delete proj_name = vm.proj_fq_name[-1] - vm = self._nc.oper('servers', 'get', proj_name, id=vm.uuid) - if vm: + nova_vm = self._nc.oper('servers', 'get', proj_name, id=vm.uuid) + if nova_vm: try: - vm.delete() - except Exception: + nova_vm.delete() + except Exception as e: + self.logger.log_error("%s nova delete failed with error %s" % + (vm.uuid, str(e))) + else: + try: + self._vnc_lib.virtual_machine_delete(id=vm.uuid) + except NoIdError: pass + except RefsExistError: + self.logger.log_error("%s vm delete RefsExist" % (vm.uuid)) def check_service(self, si): vm_id_list = list(si.virtual_machines)