def grab_vpn_status(self, ctx): LOG.debug('VPN device driver periodic task: grab_vpn_status.') svc_by_vrouter = collections.defaultdict(list) for svc in self.driver.get_active_services(): svc_by_vrouter[svc['router_id']].append(svc) status = list() for router_id, svc_set in svc_by_vrouter.items(): vrouter = self.driver.vpn_service.get_router_client(router_id) resources = self.driver.get_router_resources(router_id) try: ipsec_sa = vrouter.get_vpn_ipsec_sa() except v_exc.VRouterOperationError as e: LOG.warning( _LW('Failed to fetch tunnel stats from router ' '{0}: {1}').format(router_id, unicode(e))) continue conn_ok = vyatta_vpn_config.parse_vpn_connections( ipsec_sa, resources) for svc in svc_set: svc_ok = True conn_stat = dict() for conn in svc[_KEY_CONNECTIONS]: ok = conn['id'] in conn_ok svc_ok = svc_ok and ok conn_stat[conn['id']] = { 'status': 'ACTIVE' if ok else 'DOWN', 'updated_pending_status': True } status.append({ 'id': svc['id'], 'status': 'ACTIVE' if svc_ok else 'DOWN', 'updated_pending_status': True, 'ipsec_site_connections': conn_stat }) self.driver.update_status(ctx, status)
def grab_vpn_status(self, ctx): LOG.debug('VPN device driver periodic task: grab_vpn_status.') svc_by_vrouter = collections.defaultdict(list) for svc in self.driver.get_active_services(): svc_by_vrouter[svc['router_id']].append(svc) status = list() for router_id, svc_set in six.iteritems(svc_by_vrouter): vrouter = self.driver.vpn_service.get_router_client(router_id) resources = self.driver.get_router_resources(router_id) try: ipsec_sa = vrouter.get_vpn_ipsec_sa() except v_exc.VRouterOperationError as e: LOG.warning(_LW('Failed to fetch tunnel stats from router ' '{0}: {1}').format(router_id, unicode(e))) continue conn_ok = vyatta_vpn_config.parse_vpn_connections( ipsec_sa, resources) for svc in svc_set: svc_ok = True conn_stat = dict() for conn in svc[_KEY_CONNECTIONS]: ok = conn['id'] in conn_ok svc_ok = svc_ok and ok conn_stat[conn['id']] = { 'status': 'ACTIVE' if ok else 'DOWN', 'updated_pending_status': True } status.append({ 'id': svc['id'], 'status': 'ACTIVE' if svc_ok else 'DOWN', 'updated_pending_status': True, 'ipsec_site_connections': conn_stat }) self.driver.update_status(ctx, status)