fabric

简单的了解了下fabric ,为了以后在批量操作中能用的上,写了一个简单的demo 程序

利用fabric 同时操作 100台机器的思路

1.获取一个ip   password 列表,可以使txt、csv 也可以从数据库读

2.动态的设置env

3.执行指定的func

4.在执行指定fuc的时候把 执行结果以 ip cmd status output 的形式写到数据库或者文件

5.如果写回数据库的话,写个简单的web页面可以动态的查看执行结果,如果写回的是文件,那样也可以自己去分析执行结果

6.考虑到速度,可以加上@parallel 参数

----------------------------------------------------

升华版,django+fabric,直接在web上指定机器执行命令

 fabric demo:

from fabric.context_managers import *
from fabric.colors import *
env.hosts=['127.0.0.1']
env.password='12345'
def task1():
    with cd('/home/'):
        run('ls -l')
def task2():
    print(green("I'm fabric"))
def task3():
    open_shell("top -n 5")
def host_type():
    run('uname -s')
    with cd('/usr/local/'):
        ret = run('top')
        print "====================="
        print ret.succeeded,ret.return_code
        print ret
        print "====================="
def my_task():
    with settings(
        hide('warnings', 'running'),
        warn_only=True):
        if run('ls /etc/l'):
            return 'Ubuntu'
        elif run('ls /etc/redhat-release'):
            return 'RedHat'
def deploy():
    a=execute(my_task)
    print a
很简单的例子 执行方式 fab -f demo.py -l 列出可以执行的函数 fab -f demo.py func 执行就可以了

这是一台机器,要是100、1000、10000台机器怎么办

加上这个函数吧:

def set_env():
    with open("all") as fp:
        while 1:
            line=fp.readline()
            if not line:
                break
            else:
                if len(line.split("\t"))==2:
                    env.hosts.append(line.split("\t")[0].strip())
                    env.passwords["root@"+line.split("\t")[0]+":22"]=line.split("\t")[-1].strip()
    print len(env.passwords.keys())
读文件,文件的内容是 ip\tpassword

执行的时候 fab -f demo.py set_env  task1 

先设置env,然后执行task1
比较整洁的demo:

from fabric.api import env
from fabric.api import cd
from fabric.api import run
from fabric.api import local
from fabric.api import get
from fabric.api import put
from fabric.api import parallel
from fabric.api import execute
from fabric.api import lcd
from fabric.api import roles
from fabric.api import hosts
from fabric.context_managers import hide
from fabric.context_managers import settings
 
#env.hosts = ['10.12.136.181','10.12.136.180']
#env.passwords = {'root@10.12.136.181:22':'12345','root@10.12.136.180:22':'12345'}

#demo
#the file of ip_passwd
#10.12.136.181\t12345
#10.12.136.180\t12345
def set_env():
    with open("ip_passwd") as fp:
        while 1:
            line=fp.readline()
            if not line:
                break
            else:
                if len(line.split("\t"))==2:
                    env.hosts.append(line.split("\t")[0].strip())
                    env.passwords["root@"+line.split("\t")[0]+":22"]=line.split("\t")[-1].strip()
    print len(env.passwords.keys())

@parallel
def get_host_name():
    result={}
    with settings(
        hide('warnings', 'running','stdout', 'stderr'),
        warn_only=True
    ):
        ret=run('ls -l')
    return  ret
if __name__=="__main__":
    execute(set_env)
    ret=execute(get_host_name)
    for i in  ret:
        print "run "+ret[i].command+"  in host "+i+":"
        print "status:",ret[i].succeeded
        print "stdout:"+ret[i].stdout


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值