【Fabric】

Fabric是一个用Python开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署。

安装

 wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
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 /test')
  • put : 上传本地文件到远程主机,如:put('/hello', '/home/yanjun_wang/hello')
  • get : 从远程主机下载文件到本地,如:get('/home/python/world', '/home/yanjun_wang/world')
  • reboot : 重启远程主机,如:reboot()
  • @task : 函数装饰器,标识的函数为fab可调用的,非标记的对fab不可见,纯业务逻辑
  • @runs_once : 函数装饰器,标识的函数只会执行一次,不受多台主机影响

fabric全局属性设定

  • env.host : 定义目标主机,如:env.host=['192.168.56.1', '192.168.56.2']
  • env.user : 定义用户名,如:env.user="root"
  • env.port : 定义目标主机端口,默认为22,如:env.port="22"
  • env.password : 定义密码,如:env.password="passwd"
  • env.passwords : 不同的主机不同的密码,如:env.passwords={'root@192.168.56.1:22':'passwd', 'root@192.168.56.2:22':'python'}

示例:上传文件并执行

from fabric.api import *

env.user = 'mysql'
env.hosts = ['192.168.56.1', '192.168.56.2']
#env.password = '1qaz@WSX'
env.passwords = {
'root@192.168.56.1:22':'1qaz@WSX',
'root@192.168.56.2:22':'1qaz@WSX',
} @task
@runs_once
def tar_task():
with lcd('/home/mysql/yanjun_wang'):
local('tar zcvf hello.tar.gz hello_world.py') @task
def put_task():
run('mkdir -p /home/mysql/yanjun_wang')
with cd('/home/mysql/yanjun_wang'):
put('/home/mysql/yanjun_wang/hello.tar.gz', '/home/mysql/yanjun_wang/hello.tar.gz') @task
def check_task():
lmd5 = local('md5sum /home/mysql/yanjun_wang/hello.tar.gz', capture=True).split(' ')[0]
rmd5 = run('md5sum /home/mysql/yanjun_wang/hello.tar.gz').split(' ')[0]
if lmd5 == rmd5:
print('OK ...')
else:
print('ERROR ...') @task
def run_task():
with cd('/home/mysql/yanjun_wang'):
run('tar zxvf hello.tar.gz')
run('python hello_world.py') @task
def execute():
print('start ...')
tar_task()
put_task()
check_task()
run_task()
print('end ...')

  

Python之Fabric的更多相关文章

  1. python使用Fabric模块实现自动化运维

    简介:Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行.文件上传.下载及完整 ...

  2. python之fabric(二):执行模式(转)

    执行模式 执行模式可以让你在多个主机上执行多个任务. 执行策略: 默认fabric是单个有序地执行方法,其行为如下: 1. 创建一系列任务,通过fab任务执行要执行的任务: 2. 根据主机列表定义,去 ...

  3. Python之Fabric模块

    Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行.文件上传.下载及完整执行日 ...

  4. python之fabric(一):环境env

    原文:https://my.oschina.net/indestiny/blog/289587 1. fabric有很多可配置的环境,如: user:默认用于ssh登录的本地用户名. password ...

  5. python之fabric(一):环境env (转)

    原文地址:https://my.oschina.net/indestiny/blog/289587 1. fabric有很多可配置的环境,如: user:默认用于ssh登录的本地用户名. passwo ...

  6. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  7. Python fabric实践操作

    前面学习了理论,下面该练练手了.两台机器:10.1.6.186.10.1.6.159.fabric部署在10.1.6.186上面. 1  执行一个简单的task任务,显示两台机器的/home/guol ...

  8. python部署工具fabric

    两台机器:10.1.6.186.10.1.6.159.fabric部署在10.1.6.186上面 1  执行和1相同的任务,不过排除掉10.1.6.159这台机器 1 #!/usr/bin/pytho ...

  9. 9.python 系统批量运维管理器之Fabric模块

    前面介绍了paramiko,pexpect模块,今天来说比较适合大型应用自动化部署的模块,或者执行系统命令的模块Fabric. Fabric 是一个 Python 的库,同时它也是一个命令行工具.它提 ...

随机推荐

  1. Spring-1-I 233 Matrix(HDU 5015)解题报告及测试数据

    233 Matrix Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Descript ...

  2. ansible playbook基本操作

    一.ansible playbook简单使用 相当于是把模块写入到配置文件里面 vim /etc/ansible/test.yml //写入如下内容: --- - hosts: 127.0.0.1 r ...

  3. Statement与PreparedStatement

    Statement 用于通用查询,能批处理 PreparedStatement(简称PS) 用于执行参数化查询,能批处理 什么是参数化查询? 指在设计与数据库链接并访问数据时,在需要填入数值或数据的地 ...

  4. windows server 2012泛域名解析配置

    应测试要求,要将一个泛域名(*.office.baibai.com)解析到一个内网的IP(10.1.100.240)地址上(使用域控DNS解析)...以下为我的配置过程,做的时候将图顺便接了下来: 1 ...

  5. linux下如何使用自己安装的SunJDK替换默认的OpenJDK

    在linux系统中,由于涉及到版权问题,在大部分linux系统的发行版本中,默认都安装了OpenJDK,并且OpenJDK的java命令也已经加入到环境变量中了. 在刚装好的linux系统中,运行ja ...

  6. LeetCode——Increasing Triplet Subsequence

    Question Given an unsorted array return whether an increasing subsequence of length 3 exists or not ...

  7. LeetCode——Single Element in a Sorted Array

    Question Given a sorted array consisting of only integers where every element appears twice except f ...

  8. 2017 ACM/ICPC Asia 南宁区 L The Heaviest Non-decreasing Subsequence Problem

    2017-09-24 20:15:22 writer:pprp 题目链接:https://nanti.jisuanke.com/t/17319 题意:给你一串数,给你一个处理方法,确定出这串数的权值, ...

  9. 组合数模板 - Lucas

    2017-08-10 19:35:32 整理者:pprp 用于计算C(m,n) % p 代码如下: //lucas #include <iostream> using namespace ...

  10. OpenDayLight "Error executing command: java.lang.NullPointerException"问题解决

    参考: Fedora 21 mostly working but NullPointerException at Karaf shell 在使用ODL的时候,安装功能组件时出现: Error exec ...