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

posted @ 2020-03-10 22:57  zhangjpn  阅读(360)  评论(0编辑  收藏  举报