首先是安装fabric包
pip install fabric
fabric常用参数
-l : 显示定义好的任务函数名
-f : 指定fab入口文件,默认入口文件名为fabfile.py
-H : 指定目标主机,多台主机用”,”号分割
fabric常用API
local : 执行本地命令,如:local(‘uname -s’)
lcd : 切换本地目录,如:lcd(‘/home’)
cd : 切换远程目录,如:cd(‘/etc’)
run : 执行远程命令,如:run(‘free -m’)
sudo : sudo方式执行远程命令,如:sudo(‘touch /abc’)
put : 上传本地文件到远程主机,如:put(‘/hello’, ‘/home/baagee/hello’)
get : 从远程主机下载文件到本地,如:get(‘/home/python/world’, ‘/home/baagee/world’)
reboot : 重启远程主机,如:reboot()
@task : 函数装饰器,标识的函数为fab可调用的,非标记的对fab不可见,纯业务逻辑
@runs_once : 函数装饰器,标识的函数只会执行一次,不受多台主机影响
fabric全局属性设定
env.hosts : 定义目标主机,如:env.hosts=[‘192.168.117.192’, ‘192.168.117.193’]
env.user : 定义用户名,如:env.user=”root”
env.port : 定义目标主机端口,默认为22,如:env.port=”22″
env.password : 定义密码,如:env.password=”lijin”
env.passwords : 不同的主机不同的密码,如:env.passwords={‘[email protected]:22′:’lovelijin’, ‘[email protected]:22′:’lovebaagee’}
简单入门示例
from fabric.api import run def host_type(): run('uname -s')
执行的话就不能用python fabfile.py执行了要使用:fab -f fabfile.py host_type -H [email protected]
意思就是-f指定文件,后面跟要执行的函数,-H指明登录用户名和host,
[root@localhost pythontest]# fab -f fabfile.py host_type -H [email protected] [[email protected]] Executing task 'host_type' [[email protected]] run: uname -s [[email protected]] Login password for 'baagee': [[email protected]] out: Linux [[email protected]] out: Done. Disconnecting from [email protected]... done. [root@localhost pythontest]
示例1:动态获取远程目录列表
首先写个小例子熟悉一下这东西到底要怎么用:
from fabric.api import * env.hosts=['192.168.117.136'] env.user='baagee' env.password = 'ubuntu@2017' @runs_once def input_raw(): return prompt("please input directory name:", default="/home") def workask(dirname): run('ls -l ' + dirname) @task def go(): print('start ...') getdirname = input_raw() workask(getdirname) print('end ...')
go函数是入口函数,首先获取用户输入的路径,然后ls它,显示里面的文件就是这么简单。
执行结果显示:
[root@localhost pythontest]# fab -f test3.py go [192.168.117.136] Executing task 'go' start ... please input directory name: [/home] /home/baagee/baagee-blog [192.168.117.136] run: ls -l /home/baagee/baagee-blog [192.168.117.136] out: 总用量 24 [192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 0 8月 22 15:05 abcd [192.168.117.136] out: drwxrwxr-x 6 baagee baagee 4096 8月 3 10:37 Application [192.168.117.136] out: drwxrwxr-x 2 baagee baagee 4096 8月 3 10:37 DB_back [192.<span style="color:transparent">来1源gaodai#ma#com搞*代#码1网</span>168.117.136] out: -rw-rw-r-- 1 baagee baagee 1009 8月 3 10:37 index.php [192.168.117.136] out: drwxrwxr-x 3 baagee baagee 4096 8月 3 10:37 Public [192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 97 8月 3 10:37 README.md [192.168.117.136] out: drwxrwxr-x 8 baagee baagee 4096 8月 3 10:37 ThinkPHP [192.168.117.136] out: end ... Done. Disconnecting from 192.168.117.136... done.