fabric环境变量
fabric的环境变量非常重要,用于任务间的数据共享。
env是个全局字典,存储了几乎所有的环境变量。在fabric中由fabric.state模块定义。如下代码:
env = _AttributeDict({
'abort_exception': None,
'again_prompt': 'Sorry, try again.',
'all_hosts': [],
'combine_stderr': True,
'colorize_errors': False,
'command': None,
'command_prefixes': [],
'cwd': '', # Must be empty string, not None, for concatenation purposes
'dedupe_hosts': True,
'default_port': default_port,
'eagerly_disconnect': False,
'echo_stdin': True,
'effective_roles': [],
'exclude_hosts': [],
'gateway': None,
'gss_auth': None,
'gss_deleg': None,
'gss_kex': None,
'host': None,
'host_string': None,
'lcwd': '', # Must be empty string, not None, for concatenation purposes
'local_user': _get_system_username(),
'output_prefix': True,
'passwords': {},
'path': '',
'path_behavior': 'append',
'port': default_port,
'real_fabfile': None,
'remote_interrupt': None,
'roles': [],
'roledefs': {},
'shell_env': {},
'skip_bad_hosts': False,
'skip_unknown_tasks': False,
'ssh_config_path': default_ssh_config_path,
'ok_ret_codes': [0], # a list of return codes that indicate success
# -S so sudo accepts passwd via stdin, -p with our known-value prompt for
# later detection (thus %s -- gets filled with env.sudo_prompt at runtime)
'sudo_prefix': "sudo -S -p '%(sudo_prompt)s' ",
'sudo_prompt': 'sudo password:',
'sudo_user': None,
'tasks': [],
'prompts': {},
'use_exceptions_for': {'network': False},
'use_shell': True,
'use_ssh_config': False,
'user': None,
'version': get_version('short')
})
环境变量的设置可以通过以下几种方法设置:
-
通过在fabfile文件中直接设置
env.user = 'haibo'
env.password = '320623
2、通过命令行参数设置
fab -H localhost host1 -p hbnas
3、settgings会话管理器
很多时候,只需要临时修改 env 变量来修改指定设置很有必要。Fabric 提供了会话管理器 settings 上下文管理器,接受一个或多个键/值对参数,用于修改其代码块内部的 env。
def check_local_env():
with settings(warn_only=True):
local('echo $PackagePath')
这里也简单说一下warn_only,当该环境变量设置为True的时候,如果执行语句出现错误,不会退出,而只是发出一个警告。
其实settings是一个上下文管理器,它是和with语句一起结合,方便管理多个上下文表达式。
with cd('/path/to/app'), prefix('workon myvenv'):
run('./manage.py syncdb')
run('./manage.py loaddata myfixture')
上下文的函数定义在context_managers模块中。有cd,show,hide,lcd等等,具体请见源代码。
--------EOF---------
微信分享/微信扫码阅读
微信分享/微信扫码阅读