febric的使用

  1 from fabric.api import *
  2 from fabric.colors import *
  3 from fabric.tasks import execute
  4 '''
  5 env.hosts = ['192.468.4.50','192.168.4.51']
  6 env.user = 'root'
  7 env.port = 22
  8 env.password = '123456'
  9 env.passwords = {
 10     'root@192.168.4.50:22':'123456',
 11     'root@192.168.4.51:22':'123456',
 12 }
 13 '''
 14 
 15 
 16 env.hosts = [
 17     'root@192.168.4.50:22',
 18     'root@192.168.4.51:22',
 19     'root@192.168.4.52:22',
 20     'root@192.168.4.53:22',
 21     'root@192.168.4.54:22',
 22     'root@192.168.4.55:22',
 23     'root@192.168.4.56:22',
 24     'root@192.168.4.57:22',
 25     'root@192.168.4.58:22',
 26     ]
 27 env.password = '123456'
 28 
 29 
 30 @runs_once
 31 def xxx():
 32     cmd = prompt('请输入要执行的命令:')
 33     run(cmd)
 34 
 35 
 36 # 本地执行命令
 37 @runs_once
 38 def local_cmd(cmd, dir=None):
 39     if dir == None:
 40         dir ='/root'
 41     with settings(hide('everything'), warn_only=True):
 42         with lcd(dir):                                          # 本地切换目录
 43             result = local(cmd)                                 # 本地执行命令
 44             print(green(result))
 45 
 46 # 远程执行命令
 47 def remote_cmd(cmd, dir=None):
 48     if dir == None:
 49         dir = '/root'
 50     with settings(hide('everything'), warn_only=True):
 51         with cd(dir):                                           # 远程切换目录
 52             result= run(cmd)                                    # 远程执行命令
 53             print(green(result))
 54 
 55 # 查看端口信息
 56 def port_info(port):
 57     cmd = "ss -autnlp | grep {}".format(port)
 58     with settings(hide('everything'), warn_only=True):
 59         result = run(cmd)
 60         print(green(result))
 61 
 62 
 63 
 64 # 安装软件
 65 def install_soft(soft):
 66     cmd = "yum -y install %s"%soft
 67     with settings(hide('everything'), warn_only=True):
 68         run(cmd)
 69         cmd = "rpm -qa | grep %s"%soft
 70         if cmd:
 71             print(green('安装成功'))
 72 
 73 # 重启服务
 74 def restart(service):
 75     cmd = "systemctl restart {}".format(service)
 76     with settings(hide('everything'), warn_only=True):
 77         result = run(cmd)
 78         print(green(result))
 79 
 80 # 停止服务
 81 def stop(service):
 82     cmd = "systemctl stop {}".format(service)
 83     with settings(hide('everything'), warn_only=True):
 84         result = run(cmd)
 85         print(green(result))
 86 
 87 # 查看服务状态
 88 def status(service):
 89     cmd = "systemctl status {}".format(service)
 90     with settings(hide('everything'), warn_only=True):
 91         result = run(cmd)
 92         print(green(result))
 93 http://127.0.0.1:8000/
 94 # 上传文件/压缩文件解压
 95 def upload(src, tar=None):
 96     if tar == None:
 97         tar = src
 98     with settings(hide('everything'), warn_only=True):
 99         put(src, tar)
100         print(green('upload successful'))
101         print(tar[-3:])
102         if tar[-3:] == ".gz":
103             cmd = "tar -xf %s" % tar
104             run(cmd)
105 
106 
107 # 下载文件
108 def download(src, tar=None):
109     if tar == None:
110         tar = src
111     with settings(hide('everything'), warn_only=True):
112         get(src, tar)
113         print(green('download successful'))
114 
115 
116 
117 
118 #if __name__ == '__main__':
119 #   execute(xxx)
120 # fab -f fabfile.py update
121 # fab -f fabfile.py port_status:80
from fabric.api import *



env.user = 'root'
env.hosts = [
    '192.168.4.50',
    '192.168.4.51',
]
env.password = '123456'

@runs_once                                  # 只执行一次
@task
def local_update(dir):
    with lcd(dir):                          # 切换到本地某目录下
        local("git add -A")
        local("git commit -m update")
        local("git pull origin master")
        local("git push origin master")

@task
def remote_update(dir):
    with cd(dir):                           # 切换到远程某目录
        run("git checkout")
        run("git pull origin master")


@task
def deploy():
    local_update()
    remote_update()
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm

env.user = 'root'
env.gateway = '192.168.1.23'   #定义堡垒机IP,作为文件上传、执行的中转设置
env.hosts = ['192.168.1.21','192.168.1.22']
env.passwords = {
    'root@192.168.1.21:22':'123456',
    'root@192.168.1.22:22':'abcdef',
    'root@192.168.1.23:22':'123abc',  #堡垒机账号信息
}

lpackpath = '/home/install/lnmp.tar.gz'   #本地安装包路径
rpackpath = '/tmp/install'    #远程安装包路径


@task
def put_task():  #上传文件
    run('mkdir -p /tmp/install')
    #默认情况下,当命令执行失败时,Fabric会停止执行后续命令。有时,我们允许忽略失败的命令继续执行,比如run(‘rm /tmp/abc')在文件不存在的时候有可能失败,这时可以用with settings(warn_only=True):执行命令,这样Fabric只会打出警告信息而不会中断执行。
    with settings(warn_only=True):
        result = put(lpackpath,rpackpath)   #上传
    if result.failed and not confirm('put file failed,Continue[Y/N]?'):
        abort('Aborting file put task!')

@task
def run_task():   #安装
    with cd('/tmp/install'):
        run('tar -zxvf lnmp.tar.gz')
        with cd('lnmp/'):    #使用with继承/tmp/install目录位置状态
            run('./centos.sh')


@task
def go():   #上传、安装组合命令
    put_task()
    run_task()
原文地址:https://www.cnblogs.com/ray-mmss/p/10688329.html