首先是安装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={'baagee@192.168.117.192:22':'lovelijin', 'lijin@192.168.117.193:22':'lovebaagee'}
简单入门示例
from fabric.api import run def host_type(): run('uname -s')
执行的话就不能用python fabfile.py执行了要使用:fab -f fabfile.py host_type -H baagee@192.168.117.136
意思就是-f指定文件,后面跟要执行的函数,-H指明登录用户名和host,
[root@localhost pythontest]# fab -f fabfile.py host_type -H baagee@192.168.117.136 [baagee@192.168.117.136] Executing task 'host_type' [baagee@192.168.117.136] run: uname -s [baagee@192.168.117.136] Login password for 'baagee': [baagee@192.168.117.136] out: Linux [baagee@192.168.117.136] out: Done. Disconnecting from baagee@192.168.117.136... 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.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.
熟悉了之后接下来就是写一个小程序将本地某个文件夹的代码上传到执行服务器,然后执行它;
示例2:上传文件并执行
首先写个小代码:(demo.py)
#coding:utf-8 def add(a,b): print('开始计算a+b') print(a+b) add(9,1)
将本机centos7上的demo.py上传到ubuntu上并执行:
#coding:utf-8 from fabric.api import * env.user = 'baagee' env.hosts = ['192.168.117.136'] env.password = 'ubuntu@2017' @task @runs_once def tar_task(): #进入本地目录 with lcd('/home/vagrant/windowshare/pythontest'): #打包 local('tar zcvf demo.tar.gz demo.py') @task def put_task(): #创建远程服务器文件夹 run('mkdir -p /home/baagee/testdemo') with cd('/home/baagee/testdemo'): #上传文件 put('/home/vagrant/windowshare/pythontest/demo.tar.gz', '/home/baagee/testdemo/demo.tar.gz') @task def check_task(): #md5验证文件 lmd5 = local('md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz', capture=True).split(' ')[0] rmd5 = run('md5sum /home/baagee/testdemo/demo.tar.gz').split(' ')[0] if lmd5 == rmd5: print('md5 OK ...') else: print('md5 ERROR ...') @task def run_task(): with cd('/home/baagee/testdemo'): run('tar zxvf demo.tar.gz') run('python demo.py') @task def go(): tar_task() put_task() check_task() run_task()
步骤就是
1,找到demo.py打包,。2,上传,。3,验证文件md5。4,然后就是解压执行。
也很简单,当然你也可以一次性填写多个host,将他们同时上传到多台服务器上。
最后程序在我centos上执行的效果是:
[root@localhost pythontest]# fab -f upload1.py go [192.168.117.136] Executing task 'go' [localhost] local: tar zcvf demo.tar.gz demo.py demo.py [192.168.117.136] run: mkdir -p /home/baagee/testdemo [192.168.117.136] put: /home/vagrant/windowshare/pythontest/demo.tar.gz -> /home/baagee/testdemo/demo.tar.gz [localhost] local: md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz [192.168.117.136] run: md5sum /home/baagee/testdemo/demo.tar.gz [192.168.117.136] out: 12b4bed255ad7afb6a53cc84bd7a25e7 /home/baagee/testdemo/demo.tar.gz [192.168.117.136] out: md5 OK ... [192.168.117.136] run: tar zxvf demo.tar.gz [192.168.117.136] out: demo.py [192.168.117.136] out: [192.168.117.136] run: python demo.py [192.168.117.136] out: 开始计算a+b [192.168.117.136] out: 10 [192.168.117.136] out: Done. Disconnecting from 192.168.117.136... done.
最后结合git完成代码部署:
需要服务器和本地都需要安装git
#coding:utf-8 from fabric.api import * #这两台服务器用户名和密码都一样,所以就不用env.passwords了 env.user = 'baagee' env.hosts = ['192.168.117.192', '192.168.117.193'] env.password = 'pythontestpass' @runs_once @task def local_update(): #本地代码上传到git with lcd("/home/baagee/tmp/baageehello"): local("git add -A") local("git commit -m 'update'") local("git pull origin master") local("git push origin master") @task def remote_update(): #服务器将git上的代码拉下来 with cd("/home/baagee/tmp/baageehello"): run("git checkout master") run("git pull origin master") @task def deploy(): #本地上传 local_update() #服务器下拉 remote_update()
over。。。。。。。。。。。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]