def putFile(fileName): configuration.check() if configuration.current()['runLocally']: log.error("putFile not supported when 'runLocally' is set!") exit(1) methods.call('files', 'put', configuration.current(), filename=fileName)
def copyDBFrom(source_config_name): configuration.check() source_configuration = configuration.get(source_config_name) methods.runTask(configuration.current(), 'copyDBFrom', source_config=source_configuration, nextTasks=['reset'])
def putFile(fileName): configuration.check() if configuration.current()['runLocally']: print red("putFile not supported when 'runLocally' is set!") exit(1) methods.call('files', 'put', configuration.current(), filename=fileName)
def docker(command=False, **kwargs): configuration.check() methods.call('docker', 'runCommand', configuration.current(), command=command, **kwargs)
def createApp(**kwargs): configuration.check(['docker']) stages = [ { 'stage': 'checkExistingInstallation', 'connection': 'docker', 'context': { 'installationExists': False } } ] createDestroyHelper(stages, 'createApp') if stages[0]['context']['installationExists']: print green('Found an existing installaion, running deploy instead!') deploy() return # Install the app. stages = configuration.getSettings('createAppStages', [ { 'stage': 'installCode','connection': 'docker' }, { 'stage': 'installDependencies','connection': 'docker' }, { 'stage': 'spinUp','connection': 'docker' }, { 'stage': 'install','connection': 'ssh' }, ]) createDestroyHelper(stages, 'createApp', **kwargs) if 'copyFrom' in kwargs: copyFrom(kwargs['copyFrom'])
def getBackup(commit): configuration.check() files = get_backup_files(commit) for file in files: remotePath = configuration.current('backupFolder') + "/" + file['file'] localPath = './' + file['file'] get(remote_path=remotePath, local_path=localPath)
def updateApp(**kwargs): configuration.check() config = configuration.current() if config['type'] != 'dev': print red('Task updateApp is not supported for this configuration. Please check if "type" is set correctly.') exit(1) backupDB() methods.runTask(configuration.current(), 'updateApp', **kwargs)
def getBackup(commit): configuration.check() files = get_backup_files(commit) for file in files: remotePath = configuration.current("backupFolder") + "/" + file["file"] localPath = "./" + file["file"] get(remote_path=remotePath, local_path=localPath)
def updateApp(**kwargs): configuration.check() config = configuration.current() if config['type'] != 'dev': log.error('Task updateApp is not supported for this configuration. Please check if "type" is set correctly.') exit(1) backupDB() methods.runTask(configuration.current(), 'updateApp', **kwargs)
def install(**kwargs): configuration.check() config = configuration.current() if config['type'] == 'prod' or not config['supportsInstalls']: print red('Task install is not supported for this configuration. Please check if "type" and "supportsInstalls" is set correctly.') exit(1) methods.runTask(configuration.current(), 'install', nextTasks=['reset'], **kwargs)
def updateApp(**kwargs): configuration.check() config = configuration.current() if config["type"] != "dev": print red('Task updateApp is not supported for this configuration. Please check if "type" is set correctly.') exit(1) backupDB() methods.runTask(configuration.current(), "updateApp", **kwargs)
def getFile(remotePath, localPath='./'): configuration.check() methods.call('files', 'get', configuration.current(), remotePath=remotePath, localPath=localPath)
def restore(commit, cleanupBeforeRestore=0): configuration.check() files = get_backup_files(commit) methods.runTask(configuration.current(), 'restore', files=files, cleanupBeforeRestore=cleanupBeforeRestore) reset()
def destroyApp(**kwargs): configuration.check(['docker']) stages = configuration.getSettings('destroyAppStages', [ { 'stage': 'spinDown','connection': 'docker' }, { 'stage': 'deleteContainer','connection': 'docker' }, { 'stage': 'deleteCode','connection': 'docker' }, ]) createDestroyHelper(stages, 'destroyApp', **kwargs)
def createApp(**kwargs): configuration.check(['docker']) if not configuration.getSettings('repository'): log.error('Missing repository in fabfile, can\'t continue') exit(1) log.info('Create app from source at %s' % configuration.getSettings('repository')) stages = [{ 'stage': 'checkExistingInstallation', 'connection': 'docker', 'context': { 'installationExists': False } }] createDestroyHelper(stages, 'createApp') if stages[0]['context']['installationExists']: log.info('Found an existing installation, running deploy instead!') # Spin up the container. stages = [ { 'stage': 'spinUp', 'connection': 'docker' }, ] createDestroyHelper(stages, 'createApp', **kwargs) deploy() return # Install the app. stages = configuration.getSettings('createAppStages', [ { 'stage': 'installCode', 'connection': 'docker' }, { 'stage': 'spinUp', 'connection': 'docker' }, { 'stage': 'installDependencies', 'connection': 'ssh' }, { 'stage': 'install', 'connection': 'ssh', 'withReset': 'copyFrom' not in kwargs }, ]) createDestroyHelper(stages, 'createApp', **kwargs) if 'copyFrom' in kwargs: copyFrom(kwargs['copyFrom'])
def backup(withFiles = True): configuration.check() log.info('backing up files and database of "%s" @ "%s"' % (configuration.getSettings('name'), configuration.current('config_name'))) i = datetime.datetime.now() basename = [ configuration.current('config_name'), i.strftime('%Y-%m-%d--%H-%M-%S') ] methods.runTask(configuration.current(), 'backup', withFiles = withFiles, baseName = basename)
def backup(withFiles=True): configuration.check() print green( 'backing up files and database of "%s" @ "%s"' % (configuration.getSettings("name"), configuration.current("config_name")) ) i = datetime.datetime.now() basename = [configuration.current("config_name"), i.strftime("%Y-%m-%d--%H-%M-%S")] methods.runTask(configuration.current(), "backup", withFiles=withFiles, baseName=basename)
def install(**kwargs): configuration.check() config = configuration.current() if config["type"] == "prod" or not config["supportsInstalls"]: print red( 'Task install is not supported for this configuration. Please check if "type" and "supportsInstalls" is set correctly.' ) exit(1) methods.runTask(configuration.current(), "install", nextTasks=["reset"], **kwargs)
def deploy(overrideBranch=False): configuration.check() config = configuration.current() if overrideBranch: config['branch'] = overrideBranch if config['backupBeforeDeploy']: backup(withFiles=False) methods.runTask(config, 'deploy', nextTasks=['reset'])
def deploy(overrideBranch=False): configuration.check() config = configuration.current() if overrideBranch: config["branch"] = overrideBranch if config["backupBeforeDeploy"]: backup(withFiles=False) methods.runTask(config, "deploy", nextTasks=["reset"])
def backup(withFiles = True): configuration.check() print green('backing up files and database of "%s" @ "%s"' % (configuration.getSettings('name'), configuration.current('config_name'))) i = datetime.datetime.now() basename = [ configuration.current('config_name'), i.strftime('%Y-%m-%d--%H-%M-%S') ] methods.runTask(configuration.current(), 'backup', withFiles = withFiles, baseName = basename)
def install(**kwargs): configuration.check() config = configuration.current() if config['type'] == 'prod' or not config['supportsInstalls']: log.error('Task install is not supported for this configuration. Please check if "type" and "supportsInstalls" is set correctly.') exit(1) if 'nextTasks' not in kwargs: kwargs['nextTasks'] = ['reset'] methods.runTask(configuration.current(), 'install', **kwargs)
def getFilesDump(): configuration.check(); file_name = '--'.join([configuration.current('config_name'), time.strftime("%Y%m%d-%H%M%S")]) + '.tgz' log.info('Get files dump from %s' % configuration.current('config_name')) file_name = configuration.current('tmpFolder') + '/' + file_name methods.runTask(configuration.current(), 'backupFiles', backup_file_name = file_name) getFile(file_name) if configuration.current()['runLocally']: local('rm ' + file_name) else: run('rm ' + file_name);
def getSQLDump(): configuration.check() file_name = "--".join([configuration.current("config_name"), time.strftime("%Y%m%d-%H%M%S")]) + ".sql" print green("Get SQL dump from %s" % configuration.current("config_name")) file_name = "/tmp/" + file_name methods.runTask(configuration.current(), "backupSql", backup_file_name=file_name) if configuration.current("supportsZippedBackups"): file_name += ".gz" getFile(file_name) run("rm " + file_name)
def install(**kwargs): configuration.check() config = configuration.current() if config['type'] == 'prod' or not config['supportsInstalls']: log.error( 'Task install is not supported for this configuration. Please check if "type" and "supportsInstalls" is set correctly.' ) exit(1) if 'nextTasks' not in kwargs: kwargs['nextTasks'] = ['reset'] methods.runTask(configuration.current(), 'install', **kwargs)
def getProperty(in_key): configuration.check() with hide('output', 'running', 'warnings'): keys = in_key.split('/') c = configuration.current() for key in keys: if key in c: c = c[key] else: print red('property "%s" not found!' % in_key) exit(1) print c exit(0)
def getProperty(in_key): configuration.check() with hide('output', 'running', 'warnings'): keys = in_key.split('/') c = configuration.current() for key in keys: if key in c: c = c[key] else: log.error('property "%s" not found!' % in_key) exit(1) print c exit(0)
def getProperty(in_key): configuration.check() with hide("output", "running", "warnings"): keys = in_key.split("/") c = configuration.current() for key in keys: if key in c: c = c[key] else: print red('property "%s" not found!' % in_key) exit(1) print c exit(0)
def getSQLDump(): configuration.check() file_name = '--'.join([configuration.current('config_name'), time.strftime("%Y%m%d-%H%M%S")]) + '.sql' print green('Get SQL dump from %s' % configuration.current('config_name')) file_name = '/tmp/' + file_name methods.runTask(configuration.current(), 'backupSql', backup_file_name = file_name) if configuration.current('supportsZippedBackups'): file_name += '.gz' getFile(file_name) if configuration.current()['runLocally']: local('rm ' + file_name) else: run('rm ' + file_name);
def getSQLDump(): configuration.check() file_name = '--'.join([configuration.current('config_name'), time.strftime("%Y%m%d-%H%M%S")]) + '.sql' log.info('Get SQL dump from %s' % configuration.current('config_name')) file_name = configuration.current('tmpFolder') + '/' + file_name methods.runTask(configuration.current(), 'backupSql', backup_file_name = file_name) if configuration.current('supportsZippedBackups'): file_name += '.gz' getFile(file_name) if configuration.current()['runLocally']: local('rm ' + file_name) else: run('rm ' + file_name);
def getFilesDump(): configuration.check() file_name = '--'.join( [configuration.current('config_name'), time.strftime("%Y%m%d-%H%M%S")]) + '.tgz' log.info('Get files dump from %s' % configuration.current('config_name')) file_name = configuration.current('tmpFolder') + '/' + file_name methods.runTask(configuration.current(), 'backupFiles', backup_file_name=file_name) getFile(file_name) if configuration.current()['runLocally']: local('rm ' + file_name) else: run('rm ' + file_name)
def script(scriptKey=False, *args, **kwargs): configuration.check() scripts = configuration.current('scripts') scriptData = scripts[scriptKey] if scriptKey in scripts else False if not scriptData: scripts = configuration.getSettings('scripts') scriptData = scripts[scriptKey] if scriptKey in scripts else False if not scriptData: log.error('Could not find any script named "%s" in fabfile.yaml' % scriptKey) if configuration.current('scripts'): print 'Available scripts in %s:\n - ' % configuration.current( 'config_name') + '\n - '.join( configuration.current('scripts').keys()) if configuration.getSettings('scripts'): print 'Available scripts: \n - ' + '\n - '.join( configuration.getSettings('scripts').keys()) exit(1) if isinstance(scriptData, dict): if 'defaults' in scriptData: kwargs = configuration.data_merge(scriptData['defaults'], kwargs) scriptData = scriptData['script'] # compute arguments: arguments = ' '.join(args) for key in kwargs.keys(): arguments += ' ' + key + '="' + kwargs[key] + '"' variables = { 'arguments': kwargs, } variables['arguments']['combined'] = arguments if scriptData: methods.call('script', 'runScript', configuration.current(), script=scriptData, variables=variables)
def listBackups(commit = False): configuration.check() results = [] if commit: results = get_backup_files(commit) print "\nFound last backup for %s and commit %s:" % (configuration.current('config_name'), commit) else: methods.runTask(configuration.current(), 'listBackups', results = results) results = sorted(results, key = lambda l: (l['date'], l['time'])) print "\nFound backups for "+ configuration.current('config_name') + ":" last_date = '' for result in results: if result['date'] == last_date: result['date'] = ' ' else: last_date = result['date'] print "{date} {time} | {commit:<30} | {method:<10} | {file}".format(**result)
def createApp(**kwargs): configuration.check(['docker']) if not configuration.getSettings('repository'): log.error('Missing repository in fabfile, can\'t continue') exit(1) log.info('Create app from source at %s' % configuration.getSettings('repository')) stages = [ { 'stage': 'checkExistingInstallation', 'connection': 'docker', 'context': { 'installationExists': False } } ] createDestroyHelper(stages, 'createApp') if stages[0]['context']['installationExists']: log.info('Found an existing installation, running deploy instead!') # Spin up the container. stages = [ { 'stage': 'spinUp','connection': 'docker' }, ] createDestroyHelper(stages, 'createApp', **kwargs) deploy() return # Install the app. stages = configuration.getSettings('createAppStages', [ { 'stage': 'installCode','connection': 'docker' }, { 'stage': 'spinUp','connection': 'docker' }, { 'stage': 'installDependencies','connection': 'ssh' }, { 'stage': 'install','connection': 'ssh', 'withReset': 'copyFrom' not in kwargs }, ]) createDestroyHelper(stages, 'createApp', **kwargs) if 'copyFrom' in kwargs: copyFrom(kwargs['copyFrom'])
def script(scriptKey = False, *args, **kwargs): configuration.check() scripts = configuration.current('scripts') scriptData = scripts[scriptKey] if scriptKey in scripts else False if not scriptData: scripts = configuration.getSettings('scripts') scriptData = scripts[scriptKey] if scriptKey in scripts else False if not scriptData: log.error('Could not find any script named "%s" in fabfile.yaml' % scriptKey) if configuration.current('scripts'): print 'Available scripts in %s:\n - ' % configuration.current('config_name') + '\n - '.join(configuration.current('scripts').keys()) if configuration.getSettings('scripts'): print 'Available scripts: \n - ' + '\n - '.join(configuration.getSettings('scripts').keys()) exit(1) if isinstance(scriptData, dict): if 'defaults' in scriptData: kwargs = configuration.data_merge(scriptData['defaults'], kwargs) scriptData = scriptData['script'] # compute arguments: arguments = ' '.join(args) for key in kwargs.keys(): arguments += ' ' + key + '="' + kwargs[key]+'"' variables = { 'arguments': kwargs, } variables['arguments']['combined'] = arguments if scriptData: methods.call('script', 'runScript', configuration.current(), script=scriptData, variables=variables)
def script(scriptKey=False, *args, **kwargs): configuration.check() scripts = configuration.current("scripts") scriptData = scripts[scriptKey] if scriptKey in scripts else False if not scriptData: scripts = configuration.getSettings("scripts") scriptData = scripts[scriptKey] if scriptKey in scripts else False if not scriptData: print red('Could not find any script named "%s" in fabfile.yaml' % scriptKey) if configuration.current("scripts"): print "Available scripts in %s:\n - " % configuration.current("config_name") + "\n - ".join( configuration.current("scripts").keys() ) if configuration.getSettings("scripts"): print "Available scripts: \n - " + "\n - ".join(configuration.getSettings("scripts").keys()) exit(1) if isinstance(scriptData, dict): if "defaults" in scriptData: kwargs = configuration.data_merge(scriptData["defaults"], kwargs) scriptData = scriptData["script"] # compute arguments: arguments = " ".join(args) for key in kwargs.keys(): arguments += " " + key + '="' + kwargs[key] + '"' variables = {"arguments": kwargs} variables["arguments"]["combined"] = arguments if scriptData: methods.call("script", "runScript", configuration.current(), script=scriptData, variables=variables)
def copyFrom(source_config_name): configuration.check() copyDBFrom(source_config_name) copyFilesFrom(source_config_name)
def copyFilesFrom(source_config_name): configuration.check() source_configuration = configuration.get(source_config_name) methods.runTask(configuration.current(), 'copyFilesFrom', source_config=source_configuration)
def notify(message): configuration.check() methods.runTask(configuration.current(), 'notify', message=message)
def restore(commit, cleanupBeforeRestore=0): configuration.check() files = get_backup_files(commit) methods.runTask(configuration.current(), 'restore', files = files, cleanupBeforeRestore = cleanupBeforeRestore) reset()
def installFrom(source_config_name, **kwargs): configuration.check() kwargs['nextTasks'] = [] install(**kwargs) copyFrom(source_config_name)
def docker(command = False, **kwargs): configuration.check() methods.call('docker', 'runCommand', configuration.current(), command = command, **kwargs)
def reset(**kwargs): configuration.check() methods.runTask(configuration.current(), 'reset', **kwargs)
def composer(composer_command): configuration.check(['composer']) methods.call('composer', 'composer', configuration.current(), command=composer_command)
def drupalconsole(drupal_command): configuration.check(['drupalconsole']) methods.call('drupalconsole', 'drupalconsole', configuration.current(), command=drupal_command)
def restoreSQLFromFile(full_file_name): configuration.check() methods.runTask(configuration.current(), 'restoreSQLFromFile', sourceFile = full_file_name)
def ssh(): configuration.check(['ssh']) methods.call('ssh', 'openShell', configuration.current())
def doctor(**kwargs): configuration.check() methods.runTask(configuration.current(), 'doctor', **kwargs)
def drush(drush_command): configuration.check(['drush7', 'drush8']) methods.call('drush', 'drush', configuration.current(), command=drush_command)
def version(): configuration.check('git') version = methods.call('git', 'getVersion', configuration.current()) print green('%s @ %s tagged with: %s' % (configuration.getSettings('name'), configuration.current('config_name'), version))