您的位置:首页 > 运维架构

Fabric浅析----管理多台服务器脚本的实现

2016-03-10 16:25 495 查看

安装 pip install fabric

Fabric的入口是api模块,里面包含了所有供外部调用的模块

命令行可选参数

-f 指定fabfile文件,默认当前目录下的fabfile.py

-w warn_only=ture 遇到异常,仅提示不退出,默认fail-fast模式

-H host_string[, ...]

-l 显示当前fabfile的可用方法,即顶级方法; -d 显示指定顶级方法到帮助文档

ENV

dict子类(有一个考虑是方便dict-style interpolation: 比如 '%(name)s %(age)s' % {'name': 'Pual', 'age': 23} )

可以指定全局变量

settings 内容管理器,定制局部生效的环境变量:

with settings(**kwarg):
code_block

Execution

指定执行主机,各种方法优先级递减排序

Per-task, command-line host lists (fab mytask:host=host1) override(推翻)absolutely(绝对地) everything else.

Per-task, decorator-specified host lists (@hosts('host1')) override the env variables.

Globally specified(规定的) host lists set in the fabfile (env.hosts = ['host1']) canoverride such lists set on the command-line, but only if you’re not careful (or want them to.)

Globally specified host lists set on the command-line (--hosts=host1) willinitialize(初始化) the env variables(变量), but that’s it.

翻译过来就是(优先级递增排序):

命令行 -H host_str, host_str... 效果

命令行和env.hosts=[host_str, host_str...]等价,但命令行赋值先解析,意味着后续对env的修改会覆盖它

命令行指定pre_tast hosts; fab task_name:hosts=" host_string[; host_string...]" 会覆盖所有其他目标主机的指定

@hosts([host_str, host_str...]) 装饰器包裹函数,只有命令行的pre_tast hosts能覆盖

多个Task运行顺序:

fab -H host1,host2 task1 task2 顺序是

task1@host1,

task1@host2,

task2@host1,

task2@host2

配置分组:

指定服务集群分组上运行不同的任务

env.roledefs = { 'testserver': ['host1', 'host2'], 'realserver': ['host3', ] }
# env.password 全局密码,一般不适用于集群任务
# env.passwords = { 'host1': "pwdofhost1", 'host2': "pwdofhost2", 'host3': "pwdofhost3",  }   我测试时还是让输入密码, anyway,显示写密码也不科学~强烈建议用密钥免密码登录

@roles('testserver')
def task1():
run('ls -l | wc -l')
@roles('realserver')
def task2():
run('ls ~/temp/ | wc -l')
def dotask():
execute(task1)
execute(task2)


错误处理:

当程序返回非0或python异常时触发

默认fail-fast,直接halt

可以设置仅提示错误信息: env.warn_only

颜色

from fabric.colors import blue, red

print blue('this blue msg~')

命令解析:

# 用deploy.py作为fabfile,执行update顶级函数,传入参数a1,a2,指定优先级最高的pre-task,让hosts设置为'web@198.0.1.112;web@198.0.1.113'

fab -f deploy.py update:a1,a2,hosts='web@198.0.1.112;web@198.0.1.113' -w
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Fabric 自动化运维