Exemplo n.º 1
0
 def get_plugin(self):
     plugin = manager.NeutronManager.get_service_plugins().get(
         bgp_ext.BGP_EXT_ALIAS)
     if not plugin:
         LOG.error(_LE('No plugin for BGP routing registered'))
         msg = _LE('The resource could not be found.')
         raise webob.exc.HTTPNotFound(msg)
     return plugin
    def sync_state(self, context, full_sync=None, bgp_speakers=None):
        try:
            hosted_bgp_speakers = self.plugin_rpc.get_bgp_speakers(context)
            hosted_bgp_speaker_ids = [bgp_speaker['id']
                                      for bgp_speaker in hosted_bgp_speakers]
            cached_bgp_speakers = self.cache.get_bgp_speaker_ids()
            for bgp_speaker_id in cached_bgp_speakers:
                if bgp_speaker_id not in hosted_bgp_speaker_ids:
                    self.remove_bgp_speaker_from_dragent(bgp_speaker_id)

            resync_all = not bgp_speakers or full_sync
            only_bs = set() if resync_all else set(bgp_speakers)
            for hosted_bgp_speaker in hosted_bgp_speakers:
                hosted_bs_id = hosted_bgp_speaker['id']
                if resync_all or hosted_bs_id in only_bs:
                    if not self.cache.is_bgp_speaker_added(hosted_bs_id):
                        self.safe_configure_dragent_for_bgp_speaker(
                            hosted_bgp_speaker)
                        continue
                    self.sync_bgp_speaker(hosted_bgp_speaker)
                    resync_reason = "Periodic route cache refresh"
                    self.schedule_resync(speaker_id=hosted_bs_id,
                                         reason=resync_reason)
        except Exception as e:
            self.schedule_full_resync(reason=e)
            LOG.error(_LE('Unable to sync BGP speaker state.'))
 def _report_state(self):
     LOG.debug("Report state task started")
     try:
         self.agent_state.get('configurations').update(
             self.cache.get_state())
         ctx = context.get_admin_context_without_session()
         agent_status = self.state_rpc.report_state(ctx, self.agent_state,
                                                    True)
         if agent_status == agent_consts.AGENT_REVIVED:
             LOG.info(_LI("Agent has just been revived. "
                          "Scheduling full sync"))
             self.schedule_full_resync(
                     reason=_("Agent has just been revived"))
     except AttributeError:
         # This means the server does not support report_state
         LOG.warning(_LW("Neutron server does not support state report. "
                         "State report for this agent will be disabled."))
         self.heartbeat.stop()
         self.run()
         return
     except Exception:
         LOG.exception(_LE("Failed reporting state!"))
         return
     if self.agent_state.pop('start_flag', None):
         self.run()
Exemplo n.º 4
0
    def sync_state(self, context, full_sync=None, bgp_speakers=None):
        try:
            hosted_bgp_speakers = self.plugin_rpc.get_bgp_speakers(context)
            hosted_bgp_speaker_ids = [bgp_speaker['id']
                                      for bgp_speaker in hosted_bgp_speakers]
            cached_bgp_speakers = self.cache.get_bgp_speaker_ids()
            for bgp_speaker_id in cached_bgp_speakers:
                if bgp_speaker_id not in hosted_bgp_speaker_ids:
                    self.remove_bgp_speaker_from_dragent(bgp_speaker_id)

            resync_all = not bgp_speakers or full_sync
            only_bs = set() if resync_all else set(bgp_speakers)
            for hosted_bgp_speaker in hosted_bgp_speakers:
                hosted_bs_id = hosted_bgp_speaker['id']
                if resync_all or hosted_bs_id in only_bs:
                    if not self.cache.is_bgp_speaker_added(hosted_bs_id):
                        self.safe_configure_dragent_for_bgp_speaker(
                            hosted_bgp_speaker)
                        continue
                    self.sync_bgp_speaker(hosted_bgp_speaker)
                    resync_reason = "Periodic route cache refresh"
                    self.schedule_resync(speaker_id=hosted_bs_id,
                                         reason=resync_reason)
        except Exception as e:
            self.schedule_full_resync(reason=e)
            LOG.error(_LE('Unable to sync BGP speaker state.'))
Exemplo n.º 5
0
 def _report_state(self):
     LOG.debug("Report state task started")
     try:
         self.agent_state.get('configurations').update(
             self.cache.get_state())
         ctx = context.get_admin_context_without_session()
         agent_status = self.state_rpc.report_state(ctx, self.agent_state,
                                                    True)
         if agent_status == agent_consts.AGENT_REVIVED:
             LOG.info(_LI("Agent has just been revived. "
                          "Scheduling full sync"))
             self.schedule_full_resync(
                     reason=_("Agent has just been revived"))
     except AttributeError:
         # This means the server does not support report_state
         LOG.warning(_LW("Neutron server does not support state report. "
                         "State report for this agent will be disabled."))
         self.heartbeat.stop()
         self.run()
         return
     except Exception:
         LOG.exception(_LE("Failed reporting state!"))
         return
     if self.agent_state.pop('start_flag', None):
         self.run()
 def get_plugin(self):
     plugin = directory.get_plugin(bgp_ext.BGP_EXT_ALIAS)
     if not plugin:
         LOG.error(_LE('No plugin for BGP routing registered'))
         msg = _('The resource could not be found.')
         raise webob.exc.HTTPNotFound(msg)
     return plugin
Exemplo n.º 7
0
 def get_plugin(self):
     plugin = directory.get_plugin(bgp_ext.ALIAS)
     if not plugin:
         LOG.error(_LE('No plugin for BGP routing registered'))
         msg = _('The resource could not be found.')
         raise webob.exc.HTTPNotFound(msg)
     return plugin
 def _handle_driver_failure(self, bgp_speaker_id, method, driver_exec):
     self.schedule_resync(reason=driver_exec,
                          speaker_id=bgp_speaker_id)
     LOG.error(_LE('Call to driver for BGP Speaker %(bgp_speaker)s '
                   '%(method)s has failed with exception '
                   '%(driver_exec)s.'),
               {'bgp_speaker': bgp_speaker_id,
                'method': method,
                'driver_exec': driver_exec})
Exemplo n.º 9
0
 def _handle_driver_failure(self, bgp_speaker_id, method, driver_exec):
     self.schedule_resync(reason=driver_exec,
                          speaker_id=bgp_speaker_id)
     LOG.error(_LE('Call to driver for BGP Speaker %(bgp_speaker)s '
                   '%(method)s has failed with exception '
                   '%(driver_exec)s.'),
               {'bgp_speaker': bgp_speaker_id,
                'method': method,
                'driver_exec': driver_exec})
Exemplo n.º 10
0
 def _read_config(self, cfg):
     if cfg is None or cfg.bgp_router_id is None:
         # If either cfg or router_id is not specified, raise voice
         LOG.error(_LE('BGP router-id MUST be specified for the correct '
                       'functional working.'))
     else:
         self.routerid = cfg.bgp_router_id
         LOG.info(_LI('Initialized Ryu BGP Speaker driver interface with '
                      'bgp_router_id=%s'), self.routerid)
Exemplo n.º 11
0
 def initialize_driver(self, conf):
     self.conf = conf or cfg.CONF.BGP
     try:
         self.dr_driver_cls = (importutils.import_object(
             self.conf.bgp_speaker_driver, self.conf))
     except ImportError:
         LOG.exception(_LE("Error while importing BGP speaker driver %s"),
                       self.conf.bgp_speaker_driver)
         raise SystemExit(1)
 def initialize_driver(self, conf):
     self.conf = conf or cfg.CONF.BGP
     try:
         self.dr_driver_cls = (
                 importutils.import_object(self.conf.bgp_speaker_driver,
                                           self.conf))
     except ImportError:
         LOG.exception(_LE("Error while importing BGP speaker driver %s"),
                       self.conf.bgp_speaker_driver)
         raise SystemExit(1)
Exemplo n.º 13
0
 def _read_config(self, cfg):
     if cfg is None or cfg.bgp_router_id is None:
         # If either cfg or router_id is not specified, raise voice
         LOG.error(
             _LE('BGP router-id MUST be specified for the correct '
                 'functional working.'))
     else:
         self.routerid = cfg.bgp_router_id
         LOG.info(
             _LI('Initialized Ryu BGP Speaker driver interface with '
                 'bgp_router_id=%s'), self.routerid)
 def safe_get_bgp_peer_info(self, bgp_speaker_id, bgp_peer_id):
     try:
         bgp_peer = self.plugin_rpc.get_bgp_peer_info(self.context,
                                                      bgp_peer_id)
         if not bgp_peer:
             LOG.warning(_LW('BGP Peer %s has been deleted.'), bgp_peer)
         return bgp_peer
     except Exception as e:
         self.schedule_resync(speaker_id=bgp_speaker_id,
                              reason=e)
         LOG.error(_LE('BGP peer %(bgp_peer)s info call '
                       'failed with reason=%(e)s.'),
                   {'bgp_peer': bgp_peer_id, 'e': e})
Exemplo n.º 15
0
 def safe_get_bgp_peer_info(self, bgp_speaker_id, bgp_peer_id):
     try:
         bgp_peer = self.plugin_rpc.get_bgp_peer_info(self.context,
                                                      bgp_peer_id)
         if not bgp_peer:
             LOG.warning(_LW('BGP Peer %s has been deleted.'), bgp_peer)
         return bgp_peer
     except Exception as e:
         self.schedule_resync(speaker_id=bgp_speaker_id,
                              reason=e)
         LOG.error(_LE('BGP peer %(bgp_peer)s info call '
                       'failed with reason=%(e)s.'),
                   {'bgp_peer': bgp_peer_id, 'e': e})