前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fabric远程自动化

Fabric远程自动化

作者头像
以谁为师
发布2019-05-28 22:59:07
6610
发布2019-05-28 22:59:07
举报
文章被收录于专栏:小网管的运维之路

Fabric远程自动化

fabric是基于paramiko的ssh远程命令的再次封装,功能更强大

环境

python3.6 pip -V # pip3

安装部署

pip install fabric3

fabric常用函数 api

代码语言:javascript
复制
## from fabric.api import *
local    #执行本地命令,如local('uname -s')
lcd      #切换本地目录,如lcd('/home')
cd       #切换远程目录,如cd('/var/logs')
run      #执行远程命令,如run('free -m')
sudo     #sudo方式执行远程命令,如sudo('/etc/init.d/httpd start')
put      #上次本地文件导远程主机,如put('/home/user.info','/data/user.info')
get      #从远程主机下载文件到本地,如:get('/data/user.info','/home/user.info')
prompt   #获得用户输入信息,如:prompt('please input user password:')
reboot   #重启远程主机,如:reboot()
env      #环境变量
@task       #函数修饰符,标识的函数为 fab 可调用的,不标记的对 fab 不可见。`fab list`
@runs_once  #函数修饰符,标识的函数只会执行一次,不受多台主机影响
@roles      #函数修饰符,配合 env.roledefs 的角色使用
with xx:   #上下关联
with settings(hide('warnings','running','stderr','stdout','everything',warn_only=True)):
#指定输出内容,异常不操作

## from fabric.colors import *
print blue(text)
print cyan(text)
print green(text)
print magenta(text)
print red(text)
print white(text)
print yellow(text)


## from fabric.contrib.console import confirm 
confirm  #获得提示信息确认,如:confirm('Test failed,Continue[Y/N]?')

fabric常用参数

  • env.host -- 主机ip,当然也可以-H参数指定
  • env.password -- 密码,打好通道的请无视
  • env.roledefs -- 角色分组,比如:{'web': ['x', 'y'], 'db': ['z']}
  • fab -l -- 显示可用的task(命令)
  • fab -H -- 指定host,支持多host逗号分开
  • fab -R -- 指定role,支持多个
  • fab -P -- 并发数,默认是串行
  • fab -w -- warn_only,默认是碰到异常直接abort退出
  • fab -f -- 指定入口文件,fab默认入口文件是:fabfile/fabfile.py

实例

实例 hello world

vi fabfile.py

代码语言:javascript
复制
def hello():
    print("Hello world!")

fab hello

运行结果: Hello world! Done. fab -f test.py hello (非默认fabfile.py需要指定)

本地执行

vi fabfile.py

代码语言:javascript
复制
from fabric.api import local, lcd

def lsfab():
    with lcd('~/'): #with 上下关联,下面继承路径
        local('ls')

fab lsfab

传入参数

vi fabfile.py

代码语言:javascript
复制
from fabric.api import env,prompt

env.user = 'root'
env.hosts = str(input("输入主机:\n"))
@runs_once #只匹配一次,避免每个主机处理都输入一次
def input_raw():
    return prompt("请输入密码",default="123456")


def cmd (name):
    env.password = input_raw()
    run(name)
代码语言:javascript
复制
fab cmd:name="uptime"

并发方式

代码语言:javascript
复制
@parallel(pool_size=5) #使用@parallel装饰器
def cmd (name):
    env.password = input_raw()
    run(name)
代码语言:javascript
复制
fab -P -z 5 #命令行参数

批量远程执行

http://list.attacker.club/scripts/python/fabric_file/fabfile.py

代码语言:javascript
复制
fab  list
#查看自定义方法

fab ping #主机ping测试
fab cmd:name="ifconfig eth0 |grep inet "  #批量执行命令
fab do #指定fabfile.py中do函数运行的命令

fab upload #  上传
fab download # 下载
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年4月9日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Fabric远程自动化
  • 环境
  • 安装部署
  • fabric常用函数 api
  • fabric常用参数
  • 实例
    • 实例 hello world
      • 本地执行
        • 传入参数
          • 并发方式
            • 批量远程执行
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档