def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.service_name = None self.module_name = None self.varname = None self.value = None self.config = Config(self.global_options.config_dir, False)
class QueueConfig(ConfigSection): def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.queue_name = None self.config = Config(self.global_options.config_dir, False) @staticmethod def get_description(): return 'add, edit, or remove queues' @staticmethod def get_commands(): return (('add', 'create a new queue'), ('edit', 'edit an existing queue')) def getopt_add(self, parser): parser.add_option('--account-pool', dest = 'account_pool', metavar = 'STRING', help = 'the account pool that is used') parser.add_option('--max-threads', dest = 'max_threads', metavar = 'INT', default = 5, help = 'the name of the new queue') def prepare_add(self, parser, queue_name): self.queue_name = queue_name if self.config.has_queue(self.queue_name): parser.error('queue already exists') def start_add(self): self.config.add_queue(self.queue_name, self.options.account_pool, self.options.max_threads) print 'Queue added.' def getopt_edit(self, parser): self.getopt_add(parser) def prepare_edit(self, parser, queue_name): self.queue_name = queue_name if not self.config.has_queue(self.queue_name): parser.error('queue not found') def start_edit(self): if self.config.add_queue(self.queue_name, self.options.account_pool, self.options.max_threads): print 'Queue configured.' else: print 'No changes were made.'
class QueueConfig(ConfigSection): def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.queue_name = None self.config = Config(self.global_options.config_dir, False) @staticmethod def get_description(): return 'add, edit, or remove queues' @staticmethod def get_commands(): return (('add', 'create a new queue'), ('edit', 'edit an existing queue')) def getopt_add(self, parser): parser.add_option('--account-pool', dest='account_pool', metavar='STRING', help='the account pool that is used') parser.add_option('--max-threads', dest='max_threads', metavar='INT', default=5, help='the name of the new queue') def prepare_add(self, parser, queue_name): self.queue_name = queue_name if self.config.has_queue(self.queue_name): parser.error('queue already exists') def start_add(self): self.config.add_queue(self.queue_name, self.options.account_pool, self.options.max_threads) print 'Queue added.' def getopt_edit(self, parser): self.getopt_add(parser) def prepare_edit(self, parser, queue_name): self.queue_name = queue_name if not self.config.has_queue(self.queue_name): parser.error('queue not found') def start_edit(self): if self.config.add_queue(self.queue_name, self.options.account_pool, self.options.max_threads): print 'Queue configured.' else: print 'No changes were made.'
class DatabaseConfig(ConfigSection): def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.db_name = None self.dbn = None self.config = Config(self.global_options.config_dir, False) @staticmethod def get_description(): return 'add, edit, or remove databases' @staticmethod def get_commands(): return (('add', 'configure a new database'), ('edit', 'configure an existing database')) def prepare_add(self, parser, db_name, dbn): self.db_name = db_name self.dbn = dbn if self.config.has_database(self.db_name): parser.error('database already exists') def start_add(self): self.config.add_database(self.db_name, self.dbn) print 'Database added.' def prepare_edit(self, parser, db_name, dbn): self.db_name = db_name self.dbn = dbn if not self.config.has_database(self.db_name): parser.error('database not found') def start_edit(self): if self.config.add_database(self.db_name, self.dbn): print 'Database configured.' else: print 'No changes were made.'
class AccountPoolConfig(ConfigSection): def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.pool_name = None self.filename = None self.config = Config(self.global_options.config_dir, False) @staticmethod def get_description(): return 'add or configure account pools' @staticmethod def get_commands(): return (('add', 'add a new account pool'), ('edit', 'replace an existing account pool')) def prepare_add(self, parser, pool_name, filename): self.pool_name = pool_name self.filename = filename if not os.path.isfile(filename): parser.error('invalid file: ' + filename) if self.config.has_account_pool(self.pool_name): parser.error('account pool already exists') def start_add(self): self.config.add_account_pool_from_file(self.pool_name, self.filename) print 'Account pool added.' def prepare_edit(self, parser, pool_name, filename): self.pool_name = pool_name self.filename = filename if not os.path.isfile(filename): parser.error('invalid file: ' + filename) if not self.config.has_account_pool(self.pool_name): parser.error('account pool not found') def start_edit(self): self.config.add_account_pool_from_file(self.pool_name, self.filename) print 'Account pool configured.'
def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.queue_name = None self.config = Config(self.global_options.config_dir, False)
def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.pool_name = None self.filename = None self.config = Config(self.global_options.config_dir, False)
def _read_config(self): self.config = Config(self.global_options.config_dir, False)
class DaemonConfig(ConfigSection): def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.daemon_name = None self.config = None def _read_config(self): self.config = Config(self.global_options.config_dir, False) @staticmethod def get_description(): return 'daemon-specific configuration' @staticmethod def get_commands(): return (('add', 'configure a new daemon'), ('edit', 'configure an existing daemon')) def getopt_add(self, parser): parser.add_option('--address', dest = 'address', metavar = 'STRING', help = 'the address to listen on, all by default') parser.add_option('--port', dest = 'port', metavar = 'INT', default = 8132, help = 'the TCP port number') parser.add_option('--database', dest = 'database', metavar = 'STRING', help = 'name of the order database') parser.add_option('--account-pool', dest = 'account_pool', metavar = 'STRING', help = 'the account pool used for authenticating' \ + 'HTTP clients') def prepare_add(self, parser, daemon_name): self.daemon_name = daemon_name self._read_config() if self.config.has_daemon(self.daemon_name): parser.error('daemon already exists') def start_add(self): self.config.add_daemon(self.daemon_name, self.options.address, self.options.port, self.options.account_pool, self.options.database) print 'Daemon added.' def getopt_edit(self, parser): self.getopt_add(parser) def prepare_edit(self, parser, daemon_name): self.daemon_name = daemon_name self._read_config() if not self.config.has_daemon(self.daemon_name): parser.error('daemon not found') if not self.config.has_database(self.options.database): parser.error('database not found') def start_edit(self): self.config.add_daemon(self.daemon_name, self.options.address, self.options.port, self.options.account_pool, self.options.database) print 'Daemon configured.'
class BaseConfig(ConfigSection): def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.config = None def _read_config(self): self.config = Config(self.global_options.config_dir, False) @staticmethod def get_description(): return 'global base configuration' @staticmethod def get_commands(): return (('install', 'install exscriptd base config'), ('edit', 'change the base config')) def _generate(self, infilename, outfilename): if not self.options.overwrite and os.path.isfile(outfilename): self.info('file exists, skipping.\n') return vars = {'@CFG_DIR@': self.global_options.config_dir, '@LOG_DIR@': self.options.log_dir, '@SPOOL_DIR@': spool_dir, '@SCRIPT_DIR@': self.script_dir, '@PYTHONPATH@': os.environ.get('PYTHONPATH'), '@PIDFILE@': self.options.pidfile, '@INIT_DIR@': init_dir} sub_re = re.compile('(' + '|'.join(vars.keys()) + ')+') content = open(infilename).read() subst = lambda s: vars[s.group(0)] content = sub_re.sub(subst, content) outfile = open(outfilename, 'w') outfile.write(content) outfile.close() self.info('done.\n') def getopt_install(self, parser): self.getopt_edit(parser) parser.add_option('--overwrite', dest = 'overwrite', action = 'store_true', default = False, help = 'overwrite existing files') parser.add_option('--pidfile', dest = 'pidfile', metavar = 'STRING', default = pidfile, help = 'the location of the pidfile') def _make_executable(self, filename): self.info('making %s executable...\n' % filename) mode = os.stat(filename).st_mode os.chmod(filename, mode|stat.S_IXUSR|stat.S_IXGRP|stat.S_IXOTH) def _create_directories(self): log_dir = self.options.log_dir self.info('creating log directory %s... ' % log_dir) self._mkdir(log_dir) self.info('creating spool directory %s... ' % spool_dir) self._mkdir(spool_dir) cfg_dir = self.global_options.config_dir self.info('creating config directory %s... ' % cfg_dir) self._mkdir(cfg_dir) service_dir = os.path.join(cfg_dir, 'services') self.info('creating service directory %s... ' % service_dir) self._mkdir(service_dir) def start_install(self): # Install the init script. init_template = os.path.join(__dirname__, 'exscriptd.in') init_file = os.path.join('/etc', 'init.d', 'exscriptd') self.info('creating init-file at %s... ' % init_file) self._generate(init_template, init_file) self._make_executable(init_file) # Create directories. self._create_directories() # Install the default config file. cfg_tmpl = os.path.join(__dirname__, 'main.xml.in') cfg_file = os.path.join(self.global_options.config_dir, 'main.xml') self.info('creating config file %s... ' % cfg_file) self._generate(cfg_tmpl, cfg_file) def getopt_edit(self, parser): parser.add_option('--log-dir', dest = 'log_dir', default = default_log_dir, metavar = 'FILE', help = 'where to place log files') def prepare_edit(self, parser): self._read_config() cfg_file = os.path.join(self.global_options.config_dir, 'main.xml') if not os.path.exists(cfg_file): parser.error('no existing base installation found') def start_edit(self): self._create_directories() self.config.set_logdir(self.options.log_dir) print 'Base configuration saved.'
class ServiceConfig(ConfigSection): def __init__(self, *args, **kwargs): ConfigSection.__init__(self, *args, **kwargs) self.service_name = None self.module_name = None self.varname = None self.value = None self.config = Config(self.global_options.config_dir, False) @staticmethod def get_description(): return 'add or configure services' @staticmethod def get_commands(): return (('add', 'configure a new service'), ('edit', 'configure an existing service'), ('set', 'define a service variable'), ('unset', 'remove a service variable')) def _assert_module_exists(self, parser, module_name): try: file, module_path, desc = find_module_recursive(module_name) except ImportError: args = repr(module_name), sys.path msg = 'service %s not found. sys.path is %s' % args parser.error(msg) def getopt_add(self, parser): parser.add_option('--daemon', dest = 'daemon', metavar = 'STRING', help = 'the daemon that is used') parser.add_option('--queue', dest = 'queue', metavar = 'STRING', help = 'the queue that is used') def prepare_add(self, parser, service_name, module_name): self.service_name = service_name self.module_name = module_name self._assert_module_exists(parser, module_name) if self.config.has_service(self.service_name): parser.error('service already exists') def start_add(self): self.config.add_service(self.service_name, self.module_name, self.options.daemon, self.options.queue) print 'Service added.' def getopt_edit(self, parser): self.getopt_add(parser) def prepare_edit(self, parser, service_name): self.service_name = service_name if not self.config.has_service(self.service_name): parser.error('service not found') def start_edit(self): if self.config.add_service(self.service_name, None, self.options.daemon, self.options.queue): print 'Service configured.' else: print 'No changes were made.' def prepare_set(self, parser, service_name, varname, value): self.service_name = service_name self.varname = varname self.value = value def start_set(self): self.config.set_service_variable(self.service_name, self.varname, self.value) print 'Variable set.' def prepare_unset(self, parser, service_name, varname): self.service_name = service_name self.varname = varname def start_unset(self): self.config.unset_service_variable(self.service_name, self.varname) print 'Variable removed.'