转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79032776
# -*- coding:UTF-8 -*-
'''
查看本地和远程主机信息
本实例调用local()方法执行本地(主控端)命令,添加"@runs_once"修饰符保证该任务函数只执行一次
Created on 2018年1月11日
@author: liuyazhuang
'''
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.209.121', '192.168.209.122']
env.password = '密码'
#查看本地系统信息,当有多台主机时只运行一次
@runs_once
def local_task(): #本地任务函数
local("uname -a")
def remote_task():
#with后面的作用是让后面的表达式的语句继承当前状态,实现cd/data/logs && ls -l 效果
with cd("/data/logs"):
run("ls -l")
# -*- coding:UTF-8 -*-
'''
动态获取远程目录列表
本实例使用@task 修饰符标志入口函数go()对外部可见,配合"@runs_once"修饰符接收用户输入,
最后调用worktask()任务函数实现远程命令执行,
主要实现了一个动态输入远程目录名称,再获取目录列表的功能,由于我们只要求输入一次,再显示所有主机上
该目录的列表信息,调用了一个子函数input_raw()同时配置@runs_once修饰符来达到此目的
Created on 2018年1月11日
@author: liuyazhuang
'''
from fabric.api import *
env.user = "root"
env.hosts = ['192.168.209.121', '192.168.209.122']
env.password = '密码'
#主机遍历过程中,只有第一台触发此函数
@runs_once
def input_raw():
return prompt("please input dircectory name:" , default="/home")
def worktask(dirname):
run("ls -l " + dirname)
#限定只有go函数对fab命令可见 ,对fab命令可见,执行pip install fabric后,可通过fab go执行任务
@task
def go():
getdirname = input_raw()
worktask(getdirname)
# -*- coding:UTF-8 -*-
'''
网关模式文件上传与执行
本实例通过Fabric的evn对象定义网关模式,也就是中转、堡垒机环境。定义的格式为:
env.gateway = '192.168.209.121' 其中,IP'192.168.209.121'为堡垒机IP,再结合任务函数实现
目标机文件上传与执行操作。相比paramiko的实现方法简洁了很多,编写的任务函数完全不用考虑堡垒机环境,
配置env.gateway即可。
Created on 2018年1月11日
@author: liuyazhuang
'''
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.user = 'root'
#定义堡垒机IP,作为文件上传、执行的中转设备
env.gateway = '192.168.209.123'
#远程主机列表
env.hosts = ['192.168.209.121', '192.168.209.122']
#假设所有主机的密码都不一样,可以通过env.passwords字典变量一一指定
env.passwords = {
'[email protected]:22' : '密码1',
'[email protected]:22' : '密码2',
'[email protected]:22' : '密码3',
}
#本地安装包路径
lpackpath = "/home/install/lnmp0.9.tar.gz"
#远程安装包路径
rpackpath = "/tmp/install"
@task #对fab命令可见,执行pip install fabric后,可通过fab put_task执行任务
def put_task():
run("mkdir -p /tmp/install")
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 #对fab命令可见,执行pip install fabric后,可通过fab run_task执行任务
def run_task(): #执行远程命令,安装lnmp环境
with cd("/tmp/install"):
run("tar -zxvf lnmp0.9.tar.gz")
with cd("lnmp0.9/"): #使用with继续继承/tmp/install 目录位置状态
run("./centos.sh")
@task #对fab命令可见,执行pip install fabric后,可通过fab go执行任务
def go(): #上传、安装组合
put_task()
run_task()