from fabric.api import *
from fabric.colors import *
from fabric.tasks import execute
'''
env.hosts = ['192.468.4.50','192.168.4.51']
env.user = 'root'
env.port = 22
env.password = '123456'
env.passwords = {
'root@192.168.4.50:22':'123456',
'root@192.168.4.51:22':'123456',
}
''' env.hosts = [
'root@192.168.4.50:22',
'root@192.168.4.51:22',
'root@192.168.4.52:22',
'root@192.168.4.53:22',
'root@192.168.4.54:22',
'root@192.168.4.55:22',
'root@192.168.4.56:22',
'root@192.168.4.57:22',
'root@192.168.4.58:22',
]
env.password = '' @runs_once
def xxx():
cmd = prompt('请输入要执行的命令:')
run(cmd) # 本地执行命令
@runs_once
def local_cmd(cmd, dir=None):
if dir == None:
dir ='/root'
with settings(hide('everything'), warn_only=True):
with lcd(dir): # 本地切换目录
result = local(cmd) # 本地执行命令
print(green(result)) # 远程执行命令
def remote_cmd(cmd, dir=None):
if dir == None:
dir = '/root'
with settings(hide('everything'), warn_only=True):
with cd(dir): # 远程切换目录
result= run(cmd) # 远程执行命令
print(green(result)) # 查看端口信息
def port_info(port):
cmd = "ss -autnlp | grep {}".format(port)
with settings(hide('everything'), warn_only=True):
result = run(cmd)
print(green(result)) # 安装软件
def install_soft(soft):
cmd = "yum -y install %s"%soft
with settings(hide('everything'), warn_only=True):
run(cmd)
cmd = "rpm -qa | grep %s"%soft
if cmd:
print(green('安装成功')) # 重启服务
def restart(service):
cmd = "systemctl restart {}".format(service)
with settings(hide('everything'), warn_only=True):
result = run(cmd)
print(green(result)) # 停止服务
def stop(service):
cmd = "systemctl stop {}".format(service)
with settings(hide('everything'), warn_only=True):
result = run(cmd)
print(green(result)) # 查看服务状态
def status(service):
cmd = "systemctl status {}".format(service)
with settings(hide('everything'), warn_only=True):
result = run(cmd)
print(green(result))
http://127.0.0.1:8000/
# 上传文件/压缩文件解压
def upload(src, tar=None):
if tar == None:
tar = src
with settings(hide('everything'), warn_only=True):
put(src, tar)
print(green('upload successful'))
print(tar[-3:])
if tar[-3:] == ".gz":
cmd = "tar -xf %s" % tar
run(cmd) # 下载文件
def download(src, tar=None):
if tar == None:
tar = src
with settings(hide('everything'), warn_only=True):
get(src, tar)
print(green('download successful')) #if __name__ == '__main__':
# execute(xxx)
# fab -f fabfile.py update
# 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 = '' @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':'',
'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()

febric的使用的更多相关文章

  1. Azure Service Febric 笔记:Web API应用

    1.什么是Service Febric 贴一段微软官方的介绍 Service Fabric 是一种分布式系统平台,可让你轻松打包.部署和管理可缩放.可靠的微服务.Service Fabric 还解决了 ...

  2. 常用数据库高可用和分区解决方案(1) — MySQL篇

    在本文中我们将会讨论MySQL.Oracle.MongoDB.Redis以及Oceanbase数据库,大家可能会奇怪为什么看不到有名关系型数据库MSSQL.DB2或者有名NoSQL数据库Hbase.L ...

  3. 三、主流区块链技术特点及Hyperledger Fabric V1.0版本特点

    一.Hyperledger fabric V1.0 架构 1.逻辑架构: 2.区块链网络 3.运行时架构 二.架构总结 1.架构要点 分拆Peer的功能,将Blockchain的数据维护和共识服务进行 ...

  4. 003-主流区块链技术特点及Hyperledger Fabric V1.0版本特点

    一.Hyperledger fabric V1.0 架构 1.逻辑架构: 2.区块链网络 3.运行时架构 二.架构总结 1.架构要点 分拆Peer的功能,将Blockchain的数据维护和共识服务进行 ...

  5. 大厂0距离:网易 Linux 运维工程师面试真题,内含答案

    作为 Linux 运维工程师,进入大公司是开启职业新起点的关键,今天马哥 linux 运维及云计算智囊团的小伙伴特别分享了其在网易面试 Linux 运维及云计算工程师的题目和经历,希望对广大 Linu ...

随机推荐

  1. mysql中information_schema.tables字段说明

      1. 获取所有表结构(TABLES) SELECT  *  FROM information_schema.TABLES WHERE  TABLE_SCHEMA='数据库名';  TABLES表: ...

  2. MySQL提供的几种检索行数据的优化方式

    ICP(Index Condition Pushdown): 在MySQL5.6之前,存储引擎会通过遍历索引定位基表中 的行,然后返回给Server层,再去为这些数据进行WHERE后的条件过滤.MyS ...

  3. ARTS第九周打卡

    Algorithm : 做一个 leetcode 的算法题 /* 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. ...

  4. SAS学习笔记21 散点图、条形图

  5. Java内存 模型理解

    概述 在正式讲Java内存模型之前,我们先了解一些物理计算机并发问题,然后一点点的引出Java内存模型的由来. 多任务处理在现在计算机操作系统中几乎是一项必备的功能.这不单是因为计算机计算能力强大,更 ...

  6. C# explicit interface implementation(显式接口实现)

    C# explicit interface implementation 某个类要实现两个包含相同方法名的接口, 应该如何实现这两个方法? namespace ExplicitInterfaceImp ...

  7. JDBC 学习复习7 学习 Apache 开源DBCP 数据源

    DBCP(DataBase connection pool),数据库连接池.是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件.单独使用dbcp需要2个包:comm ...

  8. JSP JSONArray使用遇坑!添加以下6个jar包

    1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...

  9. Snort Inline IPS Mode

    Snort Inline IPS Mode https://forum.netgate.com/topic/143812/snort-package-4-0-inline-ips-mode-intro ...

  10. Map集合中key不存在时使用toString()方法、valueOf()方法和强制转换((String))之间的区别

    1.toString()方法 底层代码 public String toString() { return this; } 其返回值为String类型的字符串本身 Map<String, Obj ...