fabric运行环境变量设置

Fabric 的大部分默认参数的修改可以通过修改 env 变量来完成。


主机地址

例如 env.hosts 是远程主机的域名或者ip ,如:

env.host = "192.16.8.1.3"

用户名

env.user :Fabric 在建立 SSH 连接时默认使用的用户名,必要情况下可以通过修改 env.user 来设置。如:

env.user = "root"

密码

env.password :用来显式设置默认连接或者在需要的时候提供 sudo 密码。如果没有设置密码或密码错误,Fabric 将会提示你输入。


检测远程错误标志

warn_only:布尔值,用来设置 Fabric 是否在检测到远程错误时退出。如:

env.warn_only = True

标准Python程序,出错程序就停止结束了,很多时间,也许并不想让它就此结束,想让它跳过继续执行后面的,那这里就要用到fab的错误处理方法了


abort_exception

默认值: None

通常情况下,Fabric 处理错误的方式是先打印错误信息至 stderr,然后调用 sys.exit(1)。这项设置提供覆盖这个默认行为的方法。

它接受一个接受单个字符串变量(需要打印的错误信息)的可调用对象,并返回一个异常实例。这样 Fabric 就会抛出该异常,而非 退出系统 (如 sys.exit 所做)

大部分情况下,你可以简单地将它设置为一个异常类,因为它完美地符合了上面的要求(可调用、接受一个字符串、返回一个异常实例)。例如: env.abort_exception = MyExceptionClass 。


abort_on_prompts

默认: False

当这个值为 True 时,Fabric 将以非交互模式运行。此模式下,任何需要提示用户输入(如提示输入密码、询问连接到哪个主机、fabfile 中触发的 prompt 等等)时,都会调用 abort 。这就保证 Fabric 会话总是明确地中止,而不是在某些意外的情况下傻傻地等待用户输入。

1.1 新版功能.

参见 --abort-on-prompts


all_hosts

默认: []

如有多台主机需要连接,可以在all_hosts中设置。


always_use_pty

默认: True

设置为 False 时, ~fabric.operations.run/~fabric.operations.sudo` 的行为会和使用 ``pty=False 参数调用一样。


colorize_errors

默认: False

设置为 True 时,终端输出的错误信息会显示为红色,警告信息则是洋红色,以突出它们的显示。如:

env.colorize_errors = Ture

注意,如果你的终端不支持颜色,那么这个设置也没用。


combine_stderr

默认: True

使 SSH 层合并远程程序的 stdout 和 stderr 流输出,以避免它们在打印时混在一起。查看 合并 stdout 和 stderr 来了解为什么需要这个功能,以及它的实际效果。

1.0 新版功能.


command

Default: None

fab 设置的正在执行的命令名称(例如,执行 $ fab task1 task2 命令,当执行 task1 时, env.command 会被设置为 “task1” ,然后设置为 “task2” )。仅供显示。

参见 Execution model

command_prefixes Default: []

通过 prefix 来修改,并会附加在由 run/sudo 执行的命令前面。

1.0 新版功能.

command_timeout Default: None

远程命令的超时时间,单位为秒。

1.6 新版功能.

参见 --command-timeout

connection_attempts Default: 1

Fabric 连接一台新服务器的重试次数。出于向后兼容的目的,它默认只尝试连接一次。

1.4 新版功能.

参见 --connection-attempts、timeout

cwd Default: ''

当前工作目录,用于 cd 上下文管理器保持状态。

dedupe_hosts Default: True

去除合并后的主机列表中的重复项,以保证一个主机只会出现一次。(例如,在同时使用 @hosts 和 @roles ,或 -H 和 -R 的时候。)

设置为 False 时不会去除重复项,这将允许用户显式地在同一台主机上将一个任务(并行地,当然也支持串行)运行多次。

1.5 新版功能.

disable_known_hosts Default: False

如果为 True ,SSH 层将不会加载用户的 know-hosts 文件。这样可以有效地避免当一个“已知主机”改变了 key、但仍然有效时(比如 EC2 这样的云服务器中)的异常。

参见 --disable-known-hosts、SSH 行为

eagerly_disconnect Default: False

设置为 True 时, fab 会在每个独立任务完成后关闭连接,而不是在整个运行结束后。这有助于避免大量无用的网络会话堆积,或因每个进程可打开的文件限制,或网络硬件的限制而引发问题。

注解 激活时,断开连接地信息会贯穿你的输出信息始终,而非最后。这一点可能会在以后的版本中得到改进。

effective_roles Default: []

由 fab 设置的当前正在执行命令的角色列表。仅供显示。

1.9 新版功能.

参见 Execution model

exclude_hosts Default: []

指定一个主机串列表, fab 执行期间会跳过列表中的主机。通常通过 --exclude-hosts/-x 来设置。

1.1 新版功能.

fabfile Default: fabfile.py

fab 在加载 fabfile 时查找的文件名。要指定特定的 fabfile 文件,需要使用该文件的完整路径。显然,这个参数不可能在 fabfile 中设置,但可以将它设置在 .fabricrc 文件中,或者通过命令行参数来设置。

参见 --fabfile、fab 选项和参数

gateway Default: None

允许通过指定主机创建 SSH 驱动的网关。它的值应该是一个普通的 Fabric 主机串,和 env.host_string 中使用的一样。当它被设置时,新创建的连接将会通过这个远程 SSH 连接到最终的目的地。

1.5 新版功能.

参见 --gateway

host_string Default: None

指定 Fabric 在执行 run 、 put 等命令时使用的用户/主机/端口。 fab 在与已设置的主机列表交互时设置这个值,将 Fabric 作为库使用时也可以手动设置它。

参见 Execution model

forward_agent Default: False

值为 True 时允许本地 SSH 代理连接远程终端时跳转(forwarding)。

1.4 新版功能.

参见 --forward-agent

host Default: None

设置使用 fab 时 env.host_string 的主机名部分,仅用于传递信息目的。

hosts Default: []

组合任务对应主机列表时会包含的全局主机列表。

参见 --hosts, Execution model

keepalive 默认值: 0 (不保持连接)

用于指定 SSH keepalive 间隔的数字,基本上对应 SSH 设置参数 ServerAliveInterval。如果有多事的网络硬件或者其它因素导致连接超时时会很有帮助。

参见 --keepalive

1.1 新版功能.

key Default: None

一个字符串或者类似文件的对象,包含了 SSH 密钥。用于连接的身份认证。

注解 最常见的 SSH 密钥用法是设置 key_filename。

1.7 新版功能.

key_filename Default: None

字符串类型或者字符串列表,指向用于连接的 SSH 密钥文件。它将被肢解传给 SSH 层,可以使用 -i 选项添加/新增。

参见 Paramiko 的 SSHClient.connect() 帮助文档

linewise Default: False

强制以行为缓冲区单位,以替换字符/比特,通常用在并行模式下。可以使用 --linewise 参数来激活。env.parallel 模式隐含了这项设置——即使 linewise 为 False,parallel 如果为 True 就会引发行级输出。

参见 行级输出 vs 比特级输出

1.3 新版功能.

local_user 一个包含本地系统用户名的只读值。该值即 user 的初始值,不过 user 可以通过 CLI 参数、Python 代码或者指定 host 字符串的方式覆盖,local_user 则会一直保持不变。

no_agent Default: False

如为 True 则告诉 SSH 层使用密钥进行身份验证时不使用代理。

0.9.1 新版功能.

参见 --no_agent

no_keys Default: False

如为 True 则告诉 SSH 层不从 $HOME/.ssh/ 目录加载密钥。(当然,你可以显示地使用 fab -i 来指定密钥。)

0.9.1 新版功能.

参见 -k

parallel Default: False

如为 True,强制所有任务并行执行。隐式指定 env.linewise。

1.3 新版功能.

参见 --parallel、并行执行

password Default: None

SSH 层连接原程主机 以及/或者 sudo 时使用的默认密码。

参见 --initial-password-prompt, env.passwords,Password management

passwords Default: {}

这个字典主要用于内部使用,and is filled automatically as a per-host-string password cache。键是 host strings 全称,值为密码(字符串格式)。

警告 如果你手动生成该字典,就必须使用完整的主机登录字符,包括用户和登录信息。查看上面的链接以获取主机字符串 API 的详细信息。

参见 Password management

1.0 新版功能.

path Default: ''

用于执行 run/sudo/local 等命令时设置 shell 环境变量 $PATH。推荐使用上下文管理器 path 来管理该值,不建议手动设置。

1.0 新版功能.

pool_size Default: 0

设置并行执行任务时并发的进程数。

1.3 新版功能.

参见 --pool-size、并行执行

prompts Default: {}

prompts 字典允许用户控制交互行为。如果命令标准输出流中出现了字典中的减,Fabric 会立刻以对应的值作为回答。

1.9 新版功能.

port Default: None

fab 在迭代主机列表时设置的 env.host_string 的端口部分。也可以用于设置默认端口。

real_fabfile Default: None

fab 所设置的已加载的 fabfile 的真正位置,仅用于获取信息目的。

参见 fab 选项和参数

remote_interrupt Default: None

用于设置 Ctrl-C 是用于终止远程命令还是在本地捕获。使用如下:

None (默认值):只有 open_shell 会向远程发送终止命令,run/sudo 会在本地捕获。

False:即使 open_shell 也只在本地捕获。

True:所有函数都可以向远程发送终止命令。

1.6 新版功能.

rcfile Default: $HOME/.fabricrc

加载用户本地 Fabric 配置文件的位置。

参见 --config、fab 选项和参数

reject_unknown_hosts Default: False

设置为 True 时,SSH 层在连接到用户 know-hosts 列表之外的的主机时会抛出异常。

参见 --reject-unknown-hosts、SSH 行为

system_known_hosts Default: None

只能设置为 known_hosts 文件路径。SSH 层在读取用户 known-hosts文件前会先读取该文件。

参见 SSH 行为

roledefs Default: {}

定义角色名和主机列表的映射字典。

参见 Execution model

roles Default: []

按任务足额和主机列表时使用的全局任务列表。

参见 --roles、Execution model

shell Default: /bin/bash -l -c

在使用 run 等命令时会使用到,作为 shell 包裹在程序外。该值会像这样使用 <env.shell> ""——比如默认的 Bash -c 选项可以接受命令字符串作为其参数。

参见 --shell、Bash 作为默认 shell 时的常见问题、Execution model

skip_bad_hosts Default: False

如果为 True,fab(或者其它非fab 命令引起的 execute 调用)会跳过不存在的主机。

1.4 新版功能.

参见 --skip-bad-hosts、Excluding specific hosts、Execution model

skip_unknown_tasks Default: False

如果为 True,fab(或者其它非fab 命令引起的 execute 调用)会跳过不存在的任务而不会报错跳出。

参见 --skip-unknown-tasks

ssh_config_path Default: $HOME/.ssh/config

用于设置备用 SSH 配置文件路径。

1.4 新版功能.

参见 --ssh-config-path、Leveraging native SSH config files

ok_ret_codes Default: [0]

列表中的代码用于标记 run/sudo/sudo 命令是否成功调用了。

1.6 新版功能.

sudo_prefix Default: "sudo -S -p '%(sudo_prompt)s' " % env

sudo 命令调用时的 sudo 命令前缀。如果用户在远程主机默认 $PATH上没有sudo,或者需要一些其它设置时(比如应用无密码的 sudo 时删除 -p 参数),会需要它。

参见 sudo 操作、env.sudo_prompt

sudo_prompt Default: "sudo password:"

传递给远程系统的 sudo 程序,Fabric 可以通过它正确识别密码输入请求。

参见 fabric.operations.sudo、env.sudo_prefix

sudo_user Default: None

sudo 的 user 参数为 None 时使用的回调值。和 settings 一起使用时能起到很大作用。

参见 sudo

tasks Default: []

由 fab 设置,应用于当前执行的所有任务列表。仅用于信息目的。

参见 Execution model

timeout Default: 10

网络连接超时时间,单位为秒。

1.4 新版功能.

参见 --timeout,connection_attempts

use_shell Default: True

全局设置参数,作用类似于 run/sudo 的 shell 参数:如果设置为 False,操作命令将不会包裹在 env.shell 中。

use_ssh_config Default: False

设置为 True Fabric 将会导入本地 SSH 配置文件。

1.4 新版功能.

参见 Leveraging native SSH config files

user Default: 用户的默认用户名

SSH 层连接远程服务器时用到的用户名,可以设置为全局,在不显式指定的情况下都会被应用于主机连接字符串。不过,如果显式指定了,它将被临时覆盖为该值——例如,它可以永远是连接时使用的用户。

下面我们使用一个 fabfile 来模拟一下:

from fabric.api import env, run

env.user = 'implicit_user' env.hosts = ['host1', 'explicit_user@host2', 'host3']

def print_user(): with hide('running'): run('echo "%(user)s"' % env) 用于:

$ fab print_user

[host1] out: implicit_user [explicit_user@host2] out: explicit_user [host3] out: implicit_user

Done. Disconnecting from host1... done. Disconnecting from host2... done. Disconnecting from host3... done. 如你所见,在 host2 上运行时 env.user 被设置为了 "explicit_user",但是之后又重新设置为原来的值("implicit_user")。

注解 env.user的使用有点让人困惑(它同时用于设置 和 信息展示目的),因此未来可能会对其进行修改——信息展示可能会另外采取一个新的 env 变量。

参见 Execution model,--user

version Default: 字符串格式的当前 Fabric 版本号

为了获取有用信息,通常不建议修改,不过修改了也不会导致程序错误。

参见 --version

warn_only Default: False

指定在 run / sudo / local 遇到错误时究竟是警告还是退出。

参见 --warn-only,Execution model