def do(self, args): """Proceeds to the creation of an instance""" # TODO Remove these ugly lines, but I'm lazy to rewrite the variables in this method... class Bunch: __init__ = lambda self, **kw: setattr(self, '__dict__', kw) args = Bunch(**args) engine = args.engine version = args.version name = self.Wp.generateInstanceName(version, integration=args.integration, suffix=args.suffix, identifier=args.identifier) # Wording version versionNice = version if version == 'master': versionNice = self.C.get('wording.master') # Generating names if args.integration: fullname = self.C.get('wording.integration') + ' ' + versionNice + ' ' + self.C.get('wording.%s' % engine) else: fullname = self.C.get('wording.stable') + ' ' + versionNice + ' ' + self.C.get('wording.%s' % engine) # Append the suffix if args.suffix: fullname += ' ' + args.suffix.replace('-', ' ').replace('_', ' ').title() # Create the instance logging.info('Creating instance %s...' % name) kwargs = { 'name': name, 'version': version, 'integration': args.integration } try: M = self.Wp.create(**kwargs) except CreateException as e: logging.error('Error creating %s:\n %s' % (name, e)) return False except Exception as e: logging.exception('Error creating %s:\n %s' % (name, e)) return False # Run the install script if args.install: # Checking database dbname = re.sub(r'[^a-zA-Z0-9]', '', name).lower()[:28] db = DB(engine, self.C.get('db.%s' % engine)) dropDb = False if db.dbexists(dbname): logging.info('Database already exists (%s)' % dbname) dropDb = yesOrNo('Do you want to remove it?') # Install kwargs = { 'engine': engine, 'dbname': dbname, 'dropDb': dropDb, 'fullname': fullname, 'dataDir': self.Wp.getPath(name, 'data') } try: M.install(**kwargs) except InstallException as e: logging.warning('Error while installing %s:\n %s' % (name, e)) return False except Exception as e: logging.exception('Error while installing %s:\n %s' % (name, e)) return False # Running scripts if M.isInstalled() and type(args.run) == list: for script in args.run: logging.info('Running script \'%s\'' % (script)) try: M.runScript(script) except Exception as e: logging.warning('Error while running the script \'%s\':\ %s' % (script, e))