def execute(self, args, port=http_plain_server_port, show_output=True): engine = self._get_engine(args) session = self._get_session(engine) cluster = session.query(Cluster).\ filter(Cluster.name == args.cluster_name).\ first() if not cluster: msg = "Cluster [{}] doesn't exist in the ODB".format( args.cluster_name) self.logger.error(msg) return self.SYS_ERROR.NO_SUCH_CLUSTER server = Server() server.cluster_id = cluster.id server.name = args.server_name server.token = self.token server.last_join_status = SERVER_JOIN_STATUS.ACCEPTED server.last_join_mod_by = self._get_user_host() server.last_join_mod_date = datetime.utcnow() session.add(server) try: if not self.dirs_prepared: self.prepare_directories(show_output) repo_dir = os.path.join(self.target_dir, 'config', 'repo') self.copy_server_crypto(repo_dir, args) priv_key = open(os.path.join(repo_dir, 'zato-server-priv-key.pem')).read() if show_output: self.logger.debug( 'Created a Bazaar repo in {}'.format(repo_dir)) self.logger.debug('Creating files..') for file_name, contents in sorted(files.items()): file_name = os.path.join(self.target_dir, file_name) if show_output: self.logger.debug('Creating {}'.format(file_name)) f = file(file_name, 'w') f.write(contents) f.close() logging_conf_loc = os.path.join(self.target_dir, 'config/repo/logging.conf') logging_conf = open(logging_conf_loc).read() open(logging_conf_loc, 'w').write( logging_conf.format(log_path=os.path.join( self.target_dir, 'logs', 'zato.log'))) if show_output: self.logger.debug('Logging configuration stored in {}'.format( logging_conf_loc)) odb_engine = args.odb_type if odb_engine.startswith('postgresql'): odb_engine = 'postgresql+pg8000' server_conf_loc = os.path.join(self.target_dir, 'config/repo/server.conf') server_conf = open(server_conf_loc, 'w') server_conf.write( server_conf_template.format( port=port, gunicorn_workers=1, odb_db_name=args.odb_db_name or args.sqlite_path, odb_engine=odb_engine, odb_host=args.odb_host or '', odb_port=args.odb_port or '', odb_password=encrypt(args.odb_password, priv_key) if args.odb_password else '', odb_pool_size=default_odb_pool_size, odb_user=args.odb_user or '', token=self.token, kvdb_host=args.kvdb_host, kvdb_port=args.kvdb_port, kvdb_password=encrypt(args.kvdb_password, priv_key) if args.kvdb_password else '', initial_cluster_name=args.cluster_name, initial_server_name=args.server_name, jwt_secret=getattr(args, 'jwt_secret', Fernet.generate_key()), )) server_conf.close() pickup_conf_loc = os.path.join(self.target_dir, 'config/repo/pickup.conf') pickup_conf_file = open(pickup_conf_loc, 'w') pickup_conf_file.write(pickup_conf) pickup_conf_file.close() user_conf_loc = os.path.join(self.target_dir, 'config/repo/user.conf') user_conf = open(user_conf_loc, 'w') user_conf.write(user_conf_contents) user_conf.close() if show_output: self.logger.debug( 'Core configuration stored in {}'.format(server_conf_loc)) # Initial info self.store_initial_info(self.target_dir, self.COMPONENTS.SERVER.code) session.commit() except IntegrityError, e: msg = 'Server name [{}] already exists'.format(args.server_name) if self.verbose: msg += '. Caught an exception:[{}]'.format(format_exc(e)) self.logger.error(msg) self.logger.error(msg) session.rollback() return self.SYS_ERROR.SERVER_NAME_ALREADY_EXISTS
def execute(self, args, port=http_plain_server_port, show_output=True): engine = self._get_engine(args) session = self._get_session(engine) cluster = session.query(Cluster).\ filter(Cluster.name == args.cluster_name).\ first() if not cluster: msg = "Cluster [{}] doesn't exist in the ODB".format(args.cluster_name) self.logger.error(msg) return self.SYS_ERROR.NO_SUCH_CLUSTER server = Server() server.cluster_id = cluster.id server.name = args.server_name server.token = self.token server.last_join_status = SERVER_JOIN_STATUS.ACCEPTED server.last_join_mod_by = self._get_user_host() server.last_join_mod_date = datetime.utcnow() session.add(server) try: if not self.dirs_prepared: self.prepare_directories(show_output) repo_dir = os.path.join(self.target_dir, 'config', 'repo') self.copy_server_crypto(repo_dir, args) priv_key = open(os.path.join(repo_dir, 'zato-server-priv-key.pem')).read() if show_output: self.logger.debug('Created a Bazaar repo in {}'.format(repo_dir)) self.logger.debug('Creating files..') for file_name, contents in sorted(files.items()): file_name = os.path.join(self.target_dir, file_name) if show_output: self.logger.debug('Creating {}'.format(file_name)) f = file(file_name, 'w') f.write(contents) f.close() logging_conf_loc = os.path.join(self.target_dir, 'config/repo/logging.conf') logging_conf = open(logging_conf_loc).read() open(logging_conf_loc, 'w').write(logging_conf.format( log_path=os.path.join(self.target_dir, 'logs', 'zato.log'))) if show_output: self.logger.debug('Logging configuration stored in {}'.format(logging_conf_loc)) server_conf_loc = os.path.join(self.target_dir, 'config/repo/server.conf') server_conf = open(server_conf_loc, 'w') server_conf.write( server_conf_template.format( port=port, gunicorn_workers=cpu_count(), odb_db_name=args.odb_db_name, odb_engine=args.odb_type, odb_host=args.odb_host, odb_port=args.odb_port, odb_password=encrypt(args.odb_password, priv_key), odb_pool_size=default_odb_pool_size, odb_user=args.odb_user, token=self.token, kvdb_host=args.kvdb_host, kvdb_port=args.kvdb_port, kvdb_password=encrypt(args.kvdb_password, priv_key) if args.kvdb_password else '', initial_cluster_name=args.cluster_name, initial_server_name=args.server_name, )) server_conf.close() if show_output: self.logger.debug('Core configuration stored in {}'.format(server_conf_loc)) # Initial info self.store_initial_info(self.target_dir, self.COMPONENTS.SERVER.code) session.commit() except IntegrityError, e: msg = 'Server name [{}] already exists'.format(args.server_name) if self.verbose: msg += '. Caught an exception:[{}]'.format(format_exc(e)) self.logger.error(msg) self.logger.error(msg) session.rollback() return self.SYS_ERROR.SERVER_NAME_ALREADY_EXISTS