fabric入门
author: headsen chen
date: 2018-08-12 23:13:16
1,安装
yum -y install epel-release
yum -y install fabric
2,指定密码的使用:
fab -p 123456 -H 192.168.10.10 -f f1.py w
#cat f1.py
#!/usr/bin/env python
from fabric.api import run
def w():
run('w')
确定:当指定的密码不正确的时候,会一直让你尝试输入密码
3,通过定义的密码文件来执行fab命令
[root@localhost mnt]# vim f2.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from fabric.api import *
env.hosts = ['192.168.10.104','192.168.10.105','192.168.10.101']
env.port = ''
env.user = 'root'
env.password = '' def a():
with cd('/tmp'):
run('touch a{1..10}')
run('ls /tmp')
def b():
run('uptime')
@task
def go():
a()
b()
[root@localhost mnt]# fab -f f2.py go
[192.168.10.104] Executing task 'go'
[192.168.10.104] run: touch a{1..10}
[192.168.10.104] run: ls /tmp
[192.168.10.104] out: a1 a10 a2 a3 a4 a5 a6 a7 a8 a9 yum.log
[192.168.10.104] out: [192.168.10.104] run: uptime
[192.168.10.104] out: 05:21:33 up 57 min, 3 users, load average: 0.00, 0.00, 0.00
[192.168.10.104] out: [192.168.10.105]
...
[192.168.10.101]
...
Done.
Disconnecting from 192.168.10.101... done.
Disconnecting from 192.168.10.104... done.
Disconnecting from 192.168.10.105... done.
4,指定秘钥对连接(将该密钥对的公钥放到对方的机器的 /root/.ssh/id_pub_rsa文件中去)
[root@localhost mnt]# cat bak-com.py
#!/usr/bin/env python
from fabric.api import * def w():
run("w")
[root@localhost mnt]# fab -i /root/.ssh/id_rsa -H 192.168.8.222 -f bak-com.py w
[192.168.8.222] Executing task 'w'
[192.168.8.222] run: w
[192.168.8.222] out: :: up days, :, users, load average: 0.16, 0.15, 0.10
[192.168.8.222] out: USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
[192.168.8.222] out: root pts/ 192.168.20.29 : : .28s .04s -bash
[192.168.8.222] out: root pts/ 192.168.20.29 : .00s .01s .01s w
[192.168.8.222] out:
Done.
Disconnecting from 192.168.8.222... done.
4,多个客户端的不同端口和不同密码的模板
[root@localhost mnt]# cat f4.py
#!/usr/bin/env python
# coding:utf-8
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import * env.hosts=['root@192.168.10.104:22','root@192.168.10.105:22','root@192.168.10.101:22']
# -----> 这一步当都为root和22端口时可以简写为:env.hosts=['192.168.10.104','192.168.10.105','192.168.10.101']
env.user = 'root'
env.passwords = {
'root@192.168.10.104:22':'', # ------->注意:这里的为固定格式,22端口指定不可少,否则报错
'root@192.168.10.105:22':'',
'root@192.168.10.101:22':'jack123',
}
def a():
with cd('/tmp'):
run('touch a{1..10}')
def b():
run('uptime')
@task
def c():
a()
b()
5,利用fabric来传送本地文件到客户端上去
[root@localhost mnt]# vim f6.py
#!/usr/bin/env python
# coding:utf-8
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import *
env.hosts=['192.168.10.104','192.168.10.105','192.168.10.101']
env.user = 'root'
env.passwords = {
'root@192.168.10.104:22':'',
'root@192.168.10.105:22':'',
'root@192.168.10.101:22':'jack123',
}
def a():
put('/tmp/jack123','/tmp/') # --------> 此时在客户端上生成 jack123的文件,如果要在客户度上改名:put('/tmp/jack123','/tmp/jack')
[root@localhost mnt]# fab -f f6.py a
[192.168.10.104] Executing task 'a'
[192.168.10.104] put: /tmp/jack123 -> /tmp/jack123
[192.168.10.105] Executing task 'a'
[192.168.10.105] put: /tmp/jack123 -> /tmp/jack123
[192.168.10.101] Executing task 'a'
[192.168.10.101] put: /tmp/jack123 -> /tmp/jack123 Done.
Disconnecting from 192.168.10.101... done.
Disconnecting from 192.168.10.104... done.
Disconnecting from 192.168.10.105... done.
6,从客户端上拉取文件到本地
[root@localhost mnt]# cat f7.py
#!/usr/bin/env python
# coding:utf-8
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import *
env.host=['192.168.10.104']
env.user = 'root'
env.password = 'jack123'
def a():
get('/tmp/tom','/opt/')
[root@localhost mnt]# fab -f f7.py a
[192.168.10.104] Executing task 'a'
[192.168.10.104] download: /opt/tom <- /tmp/tom
Disconnecting from 192.168.10.104... done.
7,task装饰器的作用
被标识的函数为fab可调用的,程序内的其他函数不可通过fab -f x.py go 调用,当整个程序内都没有@task时,则任何函数都可以被
fab命令调用
实例:
#!/usr/bin/env python
from fabric.api import *
def lsfab():
with lcd('/mnt/'):
local('ls')
def host_name():
local('uptime')
@task
def go():
lsfab()
host_name()
此时不可以通过:fab -f f1.py lsfab 此时不成功。当没有@task时,这样调用可以
8,run_once
标识的函数只会执行一次,只会在第一台主机执行,后面的主机不再执行其下的函数,不受多台主机影响。
实例:
[root@localhost mnt]# cat f3.py
#!/usr/bin/env python
# coding:utf-8
from fabric.api import * env.hosts=['192.168.13.128','192.168.13.130']
env.user='root'
env.password=''
def a():
with cd('/tmp'):
run('ls')
def b():
run('uptime')
@runs_once
def c():
a()
b()
[root@localhost mnt]# fab -f f3.py c # 此时在13.130机器上就不执行了。
[root@192.168.13.128:10000] Executing task 'c'
[root@192.168.13.128:10000] run: ls
[root@192.168.13.128:10000] out: yum.log [root@192.168.13.128:10000] run: uptime
[root@192.168.13.128:10000] out: 01:59:19 up 2:21, 3 users, load average: 0.00, 0.00, 0.00 Done.
Disconnecting from 192.168.13.128:10000... done.
[root@localhost mnt]#
9,fab的本地执行和远程执行
[root@localhost 7]# cat f2.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from fabric.api import *
env.user='root'
env.hosts=['192.168.13.128','192.168.13.129']
env.password='' @runs_once
def local_task () : #本地任务函数
local("uname -a") def remote_task():
with cd ("/home") : # “with”的作用是让后面的表达式的语句继承当前状态,实现
run ("ls -1") # “cd /data/logs && Is -1"的效果
10,交互式fab使用方法(执行命令时输入参数)
[root@localhost 7]# cat f3.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from fabric.api import *
env.user='root'
env.hosts=['192.168.13.128','192.168.13.129']
env.password='' @runs_once #主机遍历过程中,只有第一台触发此函数
def input_raw():
return prompt("please input directory name:",default="/home") def worktask(dirname):
run("ls -l "+dirname)
@task #限定只有go函数对fab命令可见
def go():
getdirname = input_raw()
worktask(getdirname)
[root@localhost mnt]# fab -f f8.py go
[192.168.10.104] Executing task 'go'
please input directory name: [/home] /tmp
[192.168.10.104] run: ls -l /tmp
[192.168.10.104] out: total 12
[192.168.10.104] out: -rw-r--r-- 1 root root 0 Aug 13 05:45 a1
... [192.168.10.105] Executing task 'go'
[192.168.10.105] run: ls -l /tmp
[192.168.10.105] out: total 8
[192.168.10.105] out: -rw-r--r-- 1 root root 0 Aug 13 05:45 a1
...
[192.168.10.105] out: Done.
Disconnecting from 192.168.10.104... done.
Disconnecting from 192.168.10.105... done.
fabric入门的更多相关文章
- Hyperledger Fabric 入门 first-network 搭建
1.准备环境: 安装git.docker.curl.go [root@test_vonedao_83 fabric]# git --version git version 1.8.3.1 [root@ ...
- fabric 更详尽的用法
项目发布和运维的工作相当机械,频率还蛮高,导致时间浪费在敲大量重复的命令上. 修复bug什么的,测试,提交版本库(2分钟),ssh到测试环境pull部署(2分钟),rsync到线上机器A,B,C,D, ...
- HyperLedger Fabric 学习思路分享
HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...
- fabric 自动化部署
fabric 项目发布和运维的工作相当机械,频率还蛮高,导致时间浪费在敲大量重复的命令上. 修复bug什么的,测试,提交版本库(2分钟),ssh到测试环境pull部署(2分钟),rsync到线上机器A ...
- 从零使用Python测试。Testing Using Python.
0. 写在前面 本人使用Python测试已有多年,略有些皮毛经验.每次有新员工入职,都会从头教一遍如何入门上手使用Python进行测试.趁这段有空,整理成文档,也好方便后续新员工学习.文章如有不妥之处 ...
- Linux 自动化部署
1.pexpect Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Py ...
- Python学习笔记—自动化部署【新手必学】
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:唯恋殊雨 目录 pexpect fabric pexpect P ...
- django开发环境搭建(参考流程)
django开发环境搭建(参考流程) 2013-08-08 01:09:06 分类: LINUX 原文地址:django开发环境搭建(参考流程) 作者:bailiangcn 对于一个初学者,在实际的开 ...
- Linux上天之路(十八)之自动化部署
pexpect Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Pyth ...
随机推荐
- 网络配置vlan
1. # This file describes the network interfaces available on your system # and how to activate them. ...
- windows用命令行查看硬件信息
如何在windows系统自带命令查看硬件信息,怎样dos命令查看硬盘和内存/CPU信息?最直接的是:开始→运行→CMD打开命令提示符,在该窗口下输入systeminfo执行,即可看到几乎所有想知道的系 ...
- MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装
工程需要加上各个路径: 库使用需要几个文件: 1.include 文件夹 c/c++ /常规/附加包含目录 Connector/c++ 的安装版里面的Include 文件夹.或者把 /driver以及 ...
- 关于SqlServer数据库C盘占用空间太大问题
工程需要用上了SQL SERVER2008 ,主要作为数据仓库使用,使用SSIS包从ORACEL10G中抽取数据到MS SQL中.环境是win2003x64的,驱动使用的oracle10gX64.使用 ...
- 怎么让一个div 悬浮在另一个div上
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- bootstrap 兼容哪些浏览器
Bootstrap的目标是在最新的桌面和移动浏览器上有最佳的表现,也就是说,在较老旧的浏览器上可能会导致某些组件表现出的样式有些不同,但是功能是完整的.bootstrap3支持的浏览器: Chrome ...
- java笔记知识点总结
1.switch case default 语句 : switch case 语句是一个条件选择语句,找到相同的case值做为入口,执行后面的程序:若所有的case都不满足,则找default入口:若 ...
- (转)音频输出PCM与LPCM有什么不同
多声道LPCM:无损音轨原始存在格式,概念上等效于wave文件,并不需要运算解码,可直接输入功放进行DA转换,光纤和同轴接口只能传输2声道LPCM,多声道LPCM需要HDMI接口传输. PCM: ...
- MVC中导航菜单,选中项的高亮问题。。
先上图: 这个菜单是放在母板页的.比如当前选中的是异常业务监控.如果页面刷新了.就会变成第一张图..选择其他的选项也会,因为页面会刷新嘛.. 怎么处理这个问题了? 答案是记录当 ...
- NET Core 环境搭建和命令行CLI入门[转]
NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19 阅读:258 评论:0 收藏:0 [点我收藏+] 标签: N ...