Fabric是一个python的库和命令行工具,高效使用ssh部署应用或系统管理任务.
可以运行本地或远程shell命令,上传下载文件,
典型应用就是创建一个python模块,然后通过fab命令行来执行,
.
安装fabric模块:
sudo pip install fabric
安装了fabric模块之后可以在shell命令行使用下面命令查看fab命令:
fab - -help
fab [-options] <command>[:arg1, arg2=val2,host=foo,hosts=’h1;h2’, …] …
-f fabfile #如果python程序不是fabfile命名需要指定。
-H hostname #指定远程主机列表
-p password #指定远程机器密码
-R roles #指定角色
##########################################
怎样写一个fabric命令:
def command (args):
…
如果文件名为fabfile.py执行方法:
fab command
如果文件名为其它执行方法为:
fab -f filename.py command
##########################################
怎样给command传参数:
def command(arg):
…
fab command:arg=val
fab command:val
##########################################
Fabric有下面模块:
Auth
Contrib
Decorators
Docs
Exceptions
Io
Job_queue
Main
Network
Operations
Sftp
State
Task_utils
Thread_handling
Utils
##########################################
from fabric.api import *
abort(msg) : 使程序异常退出,打印msg到stderr,返回1。
execute(task,*args, **kwargs):执行task。
fastprint(text,show_prefix=False, end=’’, flush=True):立即打印text。
get(*args,**kwargs):从远程机器下载文件。
get(source-file,destination) : 下载文件
local(command,capture=False, shell=None):在本地机器运行一个命令。
open_shell(*args,**kwargs):在远程机器调用一个完整的交互shell。
path(path,behavior=’append’):将path加到PATH里。
prefix(command):在run/sudo包裹的命令和command之间加上&&。
prompt(text,key=None, default='', validate=None):提示text
put(*args,**kwargs):上传一个或多个文件到远程机器。
put(source,destination) : 上传文件或文件夹
puts(text,show_prefix=None, end='\n', flush=False):
reboot(*args,**kwargs):重启远程机器。
remote_tunnel(*args,**kwds):创建一个本地端口到远程机器。
require(*keys,**kwargs):检查键在环境变量的字典中是否存在。
run(*args,**kwargs):在远程机器运行命令。
shell_env(**kw):设置shell环境变量。
sudo(*args,**kwargs):用超级用户权限在远程机器运行一个命令。
warn(msg):输出警告信息。
+++++++++++++++++++
lambda匿名函数:
quiet():
warn_only():
+++++++++++++++++++
with上下文管理器:
cd(path): 远程机器切换到path路径。
lcd(path):本地机器切换到path路径.
hide(*args,**kwds):
settings(*args,**kwargs):设置环境变量并且覆盖env的。
show(*args,**kwds):
+++++++++++++++++++
@装饰器:
runs_once(func):防止包裹函数跑多次。
serial(func):让包裹函数非并行的连续运行。
hosts(*host_list):host_list中的server执行装饰器函数:
@hosts(‘user1@host1’,‘host2’, ‘user3@host3’)
def my_func():
pass
user1@host1和host2和user3@host3都回运行my_func函数。
parallel(pool_size=None):
@parallel
def my_func():
pass
roles(*rols_list): 分组,同一个角色都执行下面的函数。
task(*args,**kwargs):申明包裹函数是新风格的任务。
with_settings(*arg_settings,**kw_settings):
+++++++++++++++++++
env:属性字典。
clear','copy', 'first', 'fromkeys', 'get', 'has_key', 'items', 'iteritems','iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault','update', 'values', 'viewitems', 'viewkeys', 'viewvalues
env.host_string= user@ip
env.port= 22
env.password= 'password'
env.roles
env.hosts= ['user1@ip1:port1', 'user2@ip2:port2']
env.password= {'host1':'password1', 'host2':'password2'}
env.exclude_hosts 忽略这个列表中的机器
env.roledefs = {
'rolename1':['host1','host2'],
'rolename2':['host3','host4']
} 使用字典定义角色名字对应的主机ip
+++++++++++++++++++
output:
aliases,'clear', 'copy', 'expand_aliases', 'first', 'fromkeys', 'get','has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys','pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems','viewkeys', 'viewvalues
##########################################
import fabric.colors import *
给text附上颜色,bold=True表示加粗。
blue(text,bold=False)
cyan'(text,bold=False):蓝绿
green(text,bold=False)
magenta(text,bold=False):红紫色
red(text,bold=False)
white(text,bold=False)
yellow(text,bold=False)
##########################################
from fabric.context_manager import *
cd(path): 远程机器切换到path路径。
lcd(path):本地机器切换到path路径.
hide(*args,**kwds):
settings(*args,**kwargs):设置环境变量并且覆盖env的。
show(*args,**kwds):
shell_env(**kw) :
char_buffered(*args, **kwds)
path(path, behavior='append') :将path添加到PATH环境变量。
behavior还可以是:prepend或者replace
prefix(command):在command和run/sudo命令之间加&&。
quiet():是settings(hide('everything'), warn_only=True)的别名。
remote_tunnel(*args, **kwds):创建一个本地可见的连到远程及其上的端口。
args一般是端口号,还可以有下面四个参数:
remote_port, remote_bind_address, local_port, local_host.
'connections','contextmanager', 'documented_contextmanager', 'env', '', 'isatty','', 'nested', 'output', 'select', '',, '', 'socket', 'state', 'sys','termios', 'tty', 'warn_only', 'win32
##########################################
目前主要粗略研究下,具体参考文档。