def _(s, **kwargs): if kwargs: params = dict((k,v) for (k,v) in env.items() + kwargs.items()) else: params = env return s.format(**params)
def app_settings(**kwargs): """ Manages django settings file """ settings_present = fabtools.files.is_file(path=env.previous_settings_file, use_sudo=True) # if values are set within the --set option on command line kwargs.update({key: value for key, value in env.items() if key in env.map_settings}) if settings_present: fabric.api.execute(extract_settings) else: if "secret_key" in env.map_settings: fabric.api.execute(generate_secret_key) for map_setting, setting_value in kwargs.items(): if setting_value: setattr(env, map_setting, setting_value) fabric.api.require(*env.map_settings.keys()) settings_dir = os.path.join(env.local_tmp_root_app_package, "settings") fabtools.files.upload_template( "%s.py" % env.goal, env.remote_settings_file, template_dir=settings_dir, context=env, use_sudo=True, user=env.remote_owner, mode="644", chown=True, use_jinja=True, )
def wrapper(*args, **kwargs): setattr(env, host_type, {}) for k, v in env.items(): if k.startswith(host_type): getattr(env, host_type)[k.replace('%s_' % host_type, '')] = v with settings(**getattr(env, host_type)): return func(*args, **kwargs)
def app_settings(**kwargs): """ Manages django settings file """ settings_present = fabtools.files.is_file(path=env.previous_settings_file, use_sudo=True) # if values are set within the --set option on command line kwargs.update( {key: value for key, value in env.items() if key in env.map_settings}) if settings_present: fabric.api.execute(extract_settings) else: if "secret_key" in env.map_settings: fabric.api.execute(generate_secret_key) for map_setting, setting_value in kwargs.items(): if setting_value: setattr(env, map_setting, setting_value) fabric.api.require(*env.map_settings.keys()) settings_dir = os.path.join(env.local_tmp_root_app_package, 'settings') fabtools.files.upload_template('%s.py' % env.goal, env.remote_settings_file, template_dir=settings_dir, context=env, use_sudo=True, user=env.remote_owner, mode='644', chown=True, use_jinja=True)
def zappa_env(): orig_shell = env['shell'] env_vars_str = ' '.join('{0}={1}'.format(key, value) for key, value in env.items()) env['shell'] = '{0} {1}'.format(env_vars_str, orig_shell) yield env['shell'] = orig_shell
def vacuum_indexes(apps): """ Vacuum indexes for apps. """ app_defns = get_app_definitions(apps.split(';')) for app_defn in app_defns: local("%(appcfg)s --oauth2 -A %(application)s vacuum_indexes ." % (dict(env.items() + app_defn.items())))
def vacuum_indexes(apps): """ Vacuum indexes for apps. """ app_defns = get_app_definitions(apps.split(';')) for app_defn in app_defns: local("%(appcfg)s --oauth2 -A %(application)s vacuum_indexes ." % ( dict(env.items() + app_defn.items())) )
def get_vars(prefix=None): rv = {} for key, value in env.items(): if not prefix: rv[key] = value continue if key.startswith(prefix): rv[key.replace(prefix, '')] = value return rv
def envs(): ''' 环境变量 ''' from prettytable import PrettyTable tab = PrettyTable(["KEY", "VALUE"]) tab.align["KEY"] = "l" tab.align["VALUE"] = "l" tab.padding_width = 1 _ = [tab.add_row([k, v]) for k, v in env.items() if k != 'excludes'] print(tab)
def printenv(): """ Print out the Fabric env settings. """ # Load settings from the config file loadconfig() # Loop through the Fabric env for k, v in sorted(env.items()): # Print out each setting print("{}:{}".format(k, v))
def wrapper(*args, **kwargs): setattr(env, host_type, {}) for k, v in env.items(): if k.startswith(host_type): key = k.replace('%s_' % host_type, '') if key in BOOLEAN_SETTINGS and isinstance(v, basestring): v = eval(v) getattr(env, host_type)[key] = v for default in DEFAULTS: if not hasattr(env, default): setattr(env, default, DEFAULTS[default]) with settings(**getattr(env, host_type)): return func(*args, **kwargs)
def fs(): """ Create some empty dirs for the static and config files. """ for name, value in env.items(): if name.endswith('dir') and 'local' not in name: require.directory(value, owner=env.user) if not exists(env.settings_dir / 'local_settings.py'): append(env.local_settings, ('# -*- coding: utf-8 -*-\n\n' 'from __future__ import unicode_literals, ' 'absolute_import\n\n' 'from .{} import *\n\n').format(env.stage))
def perform_env_substitutions(): """ Do recursive substitution until the value doesn't change Change the type of some env variable that should not be string """ for key, value in env.items(): if isinstance(env[key], basestring): old_value = env[key] while True: # value = old_value.format(**env) if value == old_value: break old_value = value env[key] = value if getattr(env, 'USE_SUPERVISOR', 'False') == 'False': env.USE_SUPERVISOR = False
def load_env(): env.ccc_environment = get_environment(env.env_name) vars_not_to_overwrite = {key: value for key, value in env.items() if key not in ('sudo_user', 'keepalive')} vars = env.ccc_environment.translated_app_processes_config.to_json() vars.update(env.ccc_environment.fab_settings_config.to_json()) # Variables that were already in `env` # take precedence over variables set in app-processes.yml # except a short blacklist that we expect app-processes.yml vars to overwrite overlap = set(vars_not_to_overwrite) & set(vars) for key in overlap: print('NOTE: ignoring app-processes.yml var {}={!r}. Using value {!r} instead.'.format(key, vars[key], vars_not_to_overwrite[key])) vars.update(vars_not_to_overwrite) env.update(vars) env.deploy_env = env.ccc_environment.meta_config.deploy_env
def record_manifest(): """ Called after a deployment to record any data necessary to detect changes for a future deployment. """ data = {} # Record settings. data['settings'] = dict( (k, v) for k, v in env.items() if not isinstance(v, types.GeneratorType) and k.strip() and not k.startswith('_') and not callable(v) ) # Record tarball hash. # Record database migrations. # Record media hash. return data
def load_env(): env.ccc_environment = get_environment(env.env_name) vars_not_to_overwrite = {key: value for key, value in env.items() if key not in ('sudo_user', 'keepalive')} vars = env.ccc_environment.app_processes_config.to_json() vars.update(env.ccc_environment.fab_settings_config.to_json()) # Variables that were already in `env` # take precedence over variables set in app-processes.yml # except a short blacklist that we expect app-processes.yml vars to overwrite overlap = set(vars_not_to_overwrite) & set(vars) for key in overlap: print('NOTE: ignoring app-processes.yml var {}={!r}. Using value {!r} instead.'.format(key, vars[key], vars_not_to_overwrite[key])) vars.update(vars_not_to_overwrite) env.update(vars) env.deploy_env = env.ccc_environment.meta_config.deploy_env
def format_definition(): defs = dict(env.items()) cals = {} def _apply_basic(val): if not isinstance(val, str): return val keys = re.findall(r'%\(([^)]*)\)', val) ctx = { k: _format_basic(k) for k in keys } return val % ctx def _format_basic(key): if key in cals: return cals[key] elif not isinstance(key, str): cals[key] = defs[key] return cals[key] else: cals[key] = _apply_basic(defs[key]) return cals[key] def _format_structure(structure, key): if isinstance(structure, str): return _apply_basic(structure) elif not isinstance(structure, (list, dict)): return structure elif isinstance(structure, list): cals[key] = [_format_structure(elem, key) for elem in structure] return cals[key] else: cals[key] = {k: _format_structure(structure[k], key) for k in structure} return cals[key] for key in defs: if isinstance(defs[key], (int, str, long, bool, )): _format_basic(key) for key in defs: if isinstance(defs[key], (list, dict, )): _format_structure(defs[key], key) return cals
def perform_env_substitutions(): """ Do recursive substitution until the value doesn't change Change the type of some env variable that should not be string """ for key, value in env.items(): if isinstance(env[key], basestring): old_value = env[key] while True: value = old_value.format(**env) if value == old_value: break old_value = value env[key] = value if env.USE_SUPERVISOR == 'False': env.USE_SUPERVISOR = False if env.USE_SUPERVISOR and not env.SUPERVISOR_JOBNAME: print "Please specify the SUPERVISOR_JOBNAME to use Supervisor" sys.exit(1)
def format_definition(): def _format(key, defs, cals): if key in cals: return cals[key] elif not isinstance(defs[key], str): cals[key] = defs[key] return defs[key] else: keys = re.findall(r'%\(([^)]*)\)', defs[key]) ctx = {k: _format(k, defs, cals) for k in keys} cals[key] = defs[key] % ctx return cals[key] defs = dict(env.items()) cals = {} for key in defs: _format(key, defs, cals) return cals
def test_env_obj(): # with settings(host_string="liang@dev"): for (index, (key, value)) in enumerate(sorted(env.items())): print("{}: {} = {}".format(index, key, value))
def print_env(): for k,v in env.items(): puts("%s : %s" % ( yellow(k),v ) )