Exemple #1
0
 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)
Exemple #2
0
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.'
Exemple #3
0
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.'
Exemple #4
0
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.'
Exemple #5
0
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.'
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.'
Exemple #7
0
 def __init__(self, *args, **kwargs):
     ConfigSection.__init__(self, *args, **kwargs)
     self.queue_name = None
     self.config     = Config(self.global_options.config_dir, False)
Exemple #8
0
 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)
Exemple #9
0
 def _read_config(self):
     self.config = Config(self.global_options.config_dir, False)
Exemple #10
0
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.'
Exemple #11
0
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.'
Exemple #12
0
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.'