Fabric使用笔记
安装
# python2
$ pip install -y fabric
# python3
$ pip install -y fabric3
基本使用
使用命令行fab
执行,默认寻找当前目录下的fabfile.py文件中定义的任务。
$ fab some_task:role=somerole,argument1=someval
全局变量
在fabfile.py中,适用于全局的变量有:
#
env.disable_known_hosts = True
# 定义默认的用户和密码
env.user = 'user'
env.password='pwd'
# 定义可用的角色
env.roledefs = {
'role1': ['192.168.0.111', '192.168.0.112'],
}
局部变量
def task():
# ip 即为远程主机的ip
ip = env['host_string']
print(ip)
核心命令
from fabric.api import *
# 在远程运行
run('cmd')
# 本地运行
local()
# 本地切换目录
lcd('/path/to/dir')
# 远程切换目录
cd('/path/to/dir')
# root权限运行命令
sudo()
# 使用上下文管理器
with cd():
# do_something()
pass
# 命令报错时仅显示警告而不中断程序运行
with settings(warn_only=True):
# do_something()
pass
# 并行执行命令
@parallel
def some_task():
pass
命令行传参
命令行参数仅支持字符串格式,传参方式与传入roles一样,用key=value表示,用逗号相连
def do_somethins(arg1=None, arg2=None):
# some work here
pass
$ fab do_something:roles=role1,arg1=val1,arg2=val2
主机管理
可以通过几种方式决定一个任务要在哪些机器上执行:
- 命令行参数 -H、-R
- fabfile.py中的env.user
- 任务中的@roles('role1') 装饰器
- 执行命令时传入的roles=val 参数
rsync文件传输
fabric特别提供了对rsync的支持:
from fabric.contrib.project import rsync_project
def transfer_file():
rsync_project(remote_dir='/path/to/dir', local_dir='/path/to/local/dir')