Esempio n. 1
0
    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)
Esempio n. 2
0
    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)