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')
})

环境变量的设置可以通过以下几种方法设置:

  1. 通过在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---------
微信分享/微信扫码阅读