def test_close(self): vnc = VncAmqpHandle(*(7 * [mock.MagicMock()])) # Should not raise anything vnc.close() # Pretends call of establish() vnc._vnc_kombu = mock.MagicMock() vnc.close() vnc._vnc_kombu.shutdown.assert_called_once_with()
def main(args_str=None, kube_api_skip=False, event_queue=None, vnc_kubernetes_config_dict=None): _zookeeper_client = None args = kube_args.parse_args(args_str) client_pfx = '' zk_path_pfx = '' if args.cluster_id: client_pfx += args.cluster_id + '-' zk_path_pfx += args.cluster_id + '/' client_pfx += args.cluster_name + '-' zk_path_pfx += args.cluster_name + '/' # randomize collector list args.random_collectors = args.collectors if args.collectors: args.random_collectors = random.sample(args.collectors, len(args.collectors)) km_logger = common_logger.KubeManagerLogger(args, http_server_port=-1) if args.nested_mode == '0': # Initialize AMQP handler then close it to be sure remain queue of a # precedent run is cleaned rabbitmq_cfg = kube_args.rabbitmq_args(args) try: vnc_amqp = VncAmqpHandle(km_logger._sandesh, km_logger, config_db.DBBaseKM, reaction_map.REACTION_MAP, client_pfx + 'kube_manager', rabbitmq_cfg, args.host_ip) vnc_amqp.establish() vnc_amqp.close() except Exception: # FIXME: Except clause is too broad pass finally: km_logger.debug("Removed remained AMQP queue") # Ensure zookeeper is up and running before starting kube-manager _zookeeper_client = ZookeeperClient(client_pfx + "kube-manager", args.zk_server_ip, args.host_ip) km_logger.notice("Waiting to be elected as master...") _zookeeper_client.master_election(zk_path_pfx + "kube-manager", os.getpid(), run_kube_manager, km_logger, args, kube_api_skip, event_queue, vnc_kubernetes_config_dict) else: # nested mode, skip zookeeper mastership check run_kube_manager(km_logger, args, kube_api_skip, event_queue, vnc_kubernetes_config_dict)
def main(args_str=None, kube_api_skip=False, event_queue=None): _zookeeper_client = None args = kube_args.parse_args(args_str) if 'kube_timer_interval' not in args: args.kube_timer_interval = '60' if args.cluster_id: client_pfx = args.cluster_id + '-' zk_path_pfx = args.cluster_id + '/' else: client_pfx = '' zk_path_pfx = '' # randomize collector list args.random_collectors = args.collectors if args.collectors: args.random_collectors = random.sample(args.collectors, len(args.collectors)) km_logger = logger.KubeManagerLogger(args) if args.nested_mode == '0': # Initialize AMQP handler then close it to be sure remain queue of a # precedent run is cleaned rabbitmq_cfg = kube_args.rabbitmq_args(args) try: vnc_amqp = VncAmqpHandle(km_logger._sandesh, km_logger, DBBaseKM, REACTION_MAP, 'kube_manager', rabbitmq_cfg) vnc_amqp.establish() vnc_amqp.close() except Exception: pass finally: km_logger.debug("Removed remained AMQP queue") # Ensure zookeeper is up and running before starting kube-manager _zookeeper_client = ZookeeperClient(client_pfx + "kube-manager", args.zk_server_ip) km_logger.notice("Waiting to be elected as master...") _zookeeper_client.master_election(zk_path_pfx + "/kube-manager", os.getpid(), run_kube_manager, km_logger, args, kube_api_skip, event_queue) km_logger.notice("Elected master kube-manager node. Initializing...") else: #nested mode, skip zookeeper mastership check run_kube_manager(km_logger, args, kube_api_skip, event_queue)
def main(args_str=None): global _zookeeper_client if not args_str: args_str = ' '.join(sys.argv[1:]) args = parse_args(args_str) if args.cluster_id: client_pfx = args.cluster_id + '-' zk_path_pfx = args.cluster_id + '/' else: client_pfx = '' zk_path_pfx = '' # initialize discovery client discovery_client = None if args.disc_server_ip and args.disc_server_port: dss_kwargs = {} if args.disc_server_ssl: if args.disc_server_cert: dss_kwargs.update({'cert': args.disc_server_cert}) if args.disc_server_key: dss_kwargs.update({'key': args.disc_server_key}) if args.disc_server_cacert: dss_kwargs.update({'cacert': args.disc_server_cacert}) discovery_client = client.DiscoveryClient( args.disc_server_ip, args.disc_server_port, ModuleNames[Module.SVC_MONITOR], **dss_kwargs) # Initialize logger sm_logger = ServiceMonitorLogger(discovery_client, args, http_server_port=-1) # Initialize AMQP handler then close it to be sure remain queue of a # precedent run is cleaned vnc_amqp = VncAmqpHandle(sm_logger, DBBaseSM, REACTION_MAP, 'svc_monitor', args=args) vnc_amqp.establish() vnc_amqp.close() sm_logger.debug("Removed remained AMQP queue") # Waiting to be elected as master node _zookeeper_client = ZookeeperClient(client_pfx + "svc-monitor", args.zk_server_ip) sm_logger.notice("Waiting to be elected as master...") _zookeeper_client.master_election(zk_path_pfx + "/svc-monitor", os.getpid(), run_svc_monitor, sm_logger, args)
def main(args_str=None): global _zookeeper_client if not args_str: args_str = ' '.join(sys.argv[1:]) args = parse_args(args_str) if args.cluster_id: client_pfx = args.cluster_id + '-' zk_path_pfx = args.cluster_id + '/' else: client_pfx = '' zk_path_pfx = '' # randomize collector list args.random_collectors = args.collectors if args.collectors: args.random_collectors = random.sample(args.collectors, len(args.collectors)) # Initialize logger without introspect thread sm_logger = ServiceMonitorLogger(args, http_server_port=-1) # Initialize AMQP handler then close it to be sure remain queue of a # precedent run is cleaned try: vnc_amqp = VncAmqpHandle(sm_logger, DBBaseSM, REACTION_MAP, 'svc_monitor', args=args) vnc_amqp.establish() vnc_amqp.close() except Exception: pass finally: sm_logger.debug("Removed remained AMQP queue") # Waiting to be elected as master node _zookeeper_client = ZookeeperClient(client_pfx + "svc-monitor", args.zk_server_ip) sm_logger.notice("Waiting to be elected as master...") _zookeeper_client.master_election(zk_path_pfx + "/svc-monitor", os.getpid(), run_svc_monitor, sm_logger, args)
class ConfigHandler(object): def __init__(self, sandesh, service_id, rabbitmq_cfg, cassandra_cfg, db_cls, reaction_map): self._sandesh = sandesh self._logger = AnalyticsLogger(self._sandesh) self._service_id = service_id self._rabbitmq_cfg = rabbitmq_cfg self._cassandra_cfg = cassandra_cfg self._db_cls = db_cls self._reaction_map = reaction_map self._vnc_amqp = None self._vnc_db = None # end __init__ # Public methods def start(self): # Connect to rabbitmq for config update notifications rabbitmq_qname = self._service_id while True: try: self._vnc_amqp = VncAmqpHandle(self._sandesh, self._logger, self._db_cls, self._reaction_map, self._service_id, self._rabbitmq_cfg) self._vnc_amqp.establish() except Exception as e: template = 'Exception {0} connecting to Rabbitmq. Arguments:\n{1!r}' msg = template.format(type(e).__name__, e.args) self._logger.error('%s: %s' % (msg, traceback.format_exc())) gevent.sleep(2) else: break cassandra_credential = { 'username': self._cassandra_cfg['user'], 'password': self._cassandra_cfg['password'] } if not all(cassandra_credential.values()): cassandra_credential = None try: self._vnc_db = VncObjectDBClient(self._cassandra_cfg['servers'], self._cassandra_cfg['cluster_id'], logger=self._logger.log, credential=cassandra_credential) except Exception as e: template = 'Exception {0} connecting to Config DB. Arguments:\n{1!r}' msg = template.format(type(e).__name__, e.args) self._logger.error('%s: %s' % (msg, traceback.format_exc())) exit(2) self._db_cls.init(self, self._logger, self._vnc_db) self._sync_config_db() # end start def stop(self): self._vnc_amqp.close() self._vnc_db = None self._db_cls.clear() # end stop def obj_to_dict(self, obj): def to_json(obj): if hasattr(obj, 'serialize_to_json'): return obj.serialize_to_json() else: return dict((k, v) for k, v in obj.__dict__.iteritems()) return json.loads(json.dumps(obj, default=to_json)) # end obj_to_dict # Private methods def _fqname_to_str(self, fq_name): return ':'.join(fq_name) # end _fqname_to_str def _sync_config_db(self): for cls in self._db_cls.get_obj_type_map().values(): cls.reinit() self._handle_config_sync() self._vnc_amqp._db_resync_done.set() # end _sync_config_db # Should be overridden by the derived class def _handle_config_sync(self): pass