运维管理器Fabric使用方法_服务器其它

Fabric的安装

Fabric支持pip,easy_install或源码方式安装,很方便解决包依赖问题,(根据用户环境,自行选择pip或ease_install)
pip install fabric
easy_install fabric

源码安装不介绍了。
校验安装结果,如果导入模块没有提示异常,则说明安装成功:

root@Python_S6:~# python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import fabric
>>>

官网提供了一个简单的入门示例:

root@Python_S6:/home/chart7/test/fabric# cat farbic.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import run

def host_type(): #定义一个任务函数,通过run方法实现远程执行'uname -s'命令
  run('uname -s')

运行结果如果下图所示

命令引用默认文件名为fabfile.py,如果使用非默认文件名称,则需通过'-f'来制定,如:fab -H 192.168.1.23,192.168.1.24 -f host_type.py host_type,如果管理机与目标主机未配置密钥认证信任,将提示会输入目标主机对应账户登录密码。

一、fab的常用参数

fab作为Fabric程序的命令入口,提供了丰富的参数调用,命令格式如下:
fab [options] <command>[:arg1,arg2=val2,host=foo,hosts='h1;h2',....]
下面列举了常用的几个参数,更多参数可使用fab -help查看.
-l,显示定义好的任务函数名;
-f,指定fab入口文件,默认入口文件名为fabfile.py;
-g,指定网关设备,比如堡垒机环境,填写堡垒机IP即可;
-H,指定目标主机,多台主机用','号分隔;
-P,以异步并行方式运行多个主机任务,默认为串行运行;
-R,指定role(角色),以角色名区分不同业务组设备;
-t,设置设备连接超时时间;
-T,设置远程主机命令执行超时时间;
-w,当命令执行失败,发出警告,而非默认终止任务

二、fabfile的编写

fab命令是结合我们编写的fabfile.py(其他文件名必须添加-f filename引用)来搭配使用,部分命令行参数可以通过相应的方法来代替,使之更加灵活,列如"-H 192.168.1.23,192.168.1.24",我们可以通过定义env.hosts来实现,如"env.hosts=[192.168.1.23,192.168.1.24]".fabfile的主体由多个自定义的任务函数组成,不同任务函数实现不同的操作逻辑,下面详细介绍

三、全局属性设定

env对象的作用是定义fabfile的全局设定,支持多个属性,包括目标主机,用户,密码角色,各属性说明如下:

复制代码 代码如下:

env.host,定义目标主机,可以用IP或主机名表示,以Python的列表形式定义,如env.hosts=['192.168.1.23,192.168.1.24'].
env.exculde_hosts,排除指定主机,如env.exclude_hosts=['192.168.1.23']
env.user,定义用户名,如env.user="root"
env.port,定义目标主机端口,如env.port = '22'
env.password,定义密码,如env.password='123456'
env.passwords,与password功能一样,区别在于不同主机不同密码的应用场景,需要注意的是,配置passwords时需要配置用户,主机,端口等信息,如:env.passwords = {'root@192.168.1.21:22':'123456',
'root@192.168.1.23:22':'3234234',
'root@192.168.1.24:23':'09887',
}
env.gateway,定义网关(中转,堡垒机)IP,如env.gateway = '192.168.1.1'
env.roledefs,定义角色分组,比如web组与db组主机区分开来,定义如下:
env.roledefs = {
'webservers':['192.168.1.21','192.168.1.22','192.168.1.23'],
'dbservers':['192.168.1.24','192.168.1.25'],
}

引用时使用python修饰符的形式进行,角色修饰符下面的任务函数为其作用域,下面来看一个示例:

@roles('webservers')
def webtask():
  run('/etc/init.d/nginx start')
@roles('dbservers'):
def dbtask():
  run('/etc/init.d/mysql start')
@roles('webservers','dbservers')
def publictask():
  run('uptime')
def deploy():
  execute(webtask)
  execute(dbtask)
  execute(publictask)

在命令执行fab deploy就可以实现不同角色执行不同的任务函数。

常用API

Fabric提供了一组简单但功能强大的fabric.api命令集,简单地调用这样API就能完成大部分应用场景需求,Fabric支持常用的方法及说明如下:

复制代码 代码如下:

local,执行本地命令,如local:('uname -s');
lcd,切换本地目录,如lcd:('/home');
cd,切换远程目录,如cd:('/data/logs/');
run,执行远程命令,如:run('free -m')
sudo,sudo方式执行远程命令,如:sudo('/etc/init.d/httpd start');
put,上传本地文件到远程主机,如:put('/home/user.info','/data/user.info');
get,从远程主机下载文件到本地,如:get('/home/user.info','/data/user.info');
prompt,获得用户输入信息,如:prompt('please input user password:');
confirm,获得提示信息确认,如:confirm('Test failed,Continue[Y/N]');
reboot,重启远程主机,如reboot();
@task,函数修饰符,标识符的函数为fab可调用,非标记对fab不可见,纯业务逻辑;
@runs_once,函数修饰符,标识符的函数只会执行一次,不受多台主机影响;

示例1:查看本地与远程主机信息
本示例调用local()方法执行本地命令,添加"@runs_once"修饰保证该任务函数只执行一次。调用run()方法执行远程命令,

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.43','192.168.1.23','192.168.1.24']
env.port = '22'
env.password = '123456'

@runs_once #查看本地系统信息,当有多台主机时只运行一次
def local_task(): #本地任务函数
  local('uname -a')

def remote_task():
  with cd('/data'): #with的作用是让后面的表达式语句继承当前状态,实现cd /var && ls -l的效果
    run('ls -l')

通过fab命令分别调用local_task任务函数运行效果如下图所示

结果中显示了[192.168.1.23] Executing task 'local_task',但事实上并非在主机192.168.1.23上执行任务,而是返回Fabric主机本地的'uname -a'的执行效果

调用remtoe_task任务函数的执行结果如下图所示

示例2;动态获取远程目录列表
本示例使用"@task"修饰符标志入口函数go()对外部可以,配合"@runs_once"符等待接受用户输入,最后调用worktask()任务函数实现远程命令执行,

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.23','192.168.1.24']
env.password = '123456'
@runs_once #在主机遍历过程中,只有一台出发此函数
def input_raw():
  return prompt("please input direcotry name:",default="/home")

def worktask(dirname):
  run("ls -l %s" %dirname)

@task
def go():
  getdirname = input_raw()
  worktask(getdirname)

该示例实现了一个动态输入远程目录名称,在获取目录列表的功能,由于我们只要求输入一次,再显示所有主机上该目录的列表信息,调用了一个子函数input_raw(同时配置)@runs_once修饰符来达到此目的,执行结果如下图

文件上传与执行

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.hosts=['192.168.1.23','192.168.1.24']
#假如所有主机密码都不一样,可以通过env.passwords字典变量一一指定
env.passwords = {
  'root@192.168.1.23:22': '123456',
  'root@192.168.1.24:22': '123456',
}

lpackpath="/home/a.tar.gz"
rpackpath="/tmp/install"

@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
def run_task():
  with cd("/tmp/install"):
    run("tar -zxvf a.tar.gz")

@task
def go():
  put_task()
  run_task()

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索fabric
python运维工具fabric、服务器管理器、服务器管理器怎么打开、文件服务器资源管理器、win10 服务器管理器,以便于您获取更多的相关知识。

时间: 2024-06-10 23:53:41

运维管理器Fabric使用方法_服务器其它的相关文章

摩卡IT运维管理(Mocha ITOM)解决方案

方案概述 专家研究和大量企业实践表明,IT项目生命周期中,大约80%的时间与IT项目运营维护有关,而该阶段的投资仅占整个IT投资的20%,形成了典型的"轻服务.重技术"现象.国际著名咨询调查机构Gartner集团的调查发现,在经常出现的问题中,源自技术或产品(包括硬件.软件.网络.电力失常及天灾等)方面的问题其实只占20%,而流程失误问题占40%,人员疏失问题占40%.流程失误包括未做好变更管理.超载.无测试等程序上的错误或不完整,人员疏失包括忘做某些事情.训练不足.备份错误或安全疏忽

望、闻、问、切”四大技巧轻松搞定IT运维管理

中华医学博大精深,精髓莫过于"望.闻.问.切",这四大法宝成为调查了解疾病过程中重要的手段,可谓各司其职,各尽其能,相辅相成,缺一不可.中医大夫在应诊时,只有将 它们有机地结合起来,即"四诊合参"才可能全面而系统地了解病情,从而做出正确判断,果断采取措施.是否有是曾相识的感觉?事实上 IT运维管理跟中医诊疗法有异曲同工之处,一套完整的.基于事前管理的网络运维管理系统针对日常运维工作的特点,能做到及时发现网络中潜在的故障隐患,并能够进行及时处理,以保证整个系统的正常运

如何在AWS中落实安全运维管理

安全在传统上总是被当成软件开发过程中"事后再想"的部分.但人人闻之色变Heartbleed漏洞及其相关的补丁困难使安全性被推到了最前线.而一个使用安全 运维管理,或SecOps的安全软件开发周期方式将可以加强AWS应用的安全性. SecOps方法就有如DevOps原则一样,促进了开发者和运营之间更好的沟通,只是对应的是安全方面,Todd Vernon,一家DevOps工具供应商VictorOps的CEO说道.DevOps允许IT团队能够在部署 云应用至生产前快速做出改动.但这也产生了显

ITIL与IT运维管理的“前世姻缘”

IT运维管理的由来 在企业IT管理的早期,更侧重于对网络.硬件等设备的管理.那时的IT管理就是通过某种方式对网络进行管理,使网络能正常高效地运行.早期的这种IT管理是NSM的阶段,主要的面向目标就是底层的基础网络设备.NSM系统是对网络中的底层设备进行实时的,统一的监控,当网络中出现了问题或者即将出现问题的时候,NSM向网络管理者提出故障定位和报警,这样做无疑大大方便了网络管理员的工作.但是,NSM系统对于网络上运行的各种业务系统以及业务系统的用户只能做一些简单的管理,这个时期的IT管理,可称之

面向NFV的运维管理,打造绿色“软”网络

NFV网络功能虚拟化是一场正在发生的网络革命.这场变革借助IT先进技术,将对运营商运营业务产生持久深刻的影响.当前,关于虚拟化和云如何用于电信产业以改善架构与运维TCO有颇多论述.从NFV的应用上看,早期的工作集中在利用虚拟化能力优化硬件,现在则逐渐转向运维. NFV重新定义运维 尽管将某些网络功能虚拟化确实会带来CAPEX方面的节省,然而NFV最大的贡献并不在此,而是它提供了一种实现电信能力的新方式,意义远不止对当前流程的效率优化这样简单. 按照NFV 标准架构,为便于虚拟资源的动态管理,特别

“洗衣机之争”与IT运维管理

近年来,随着信息化的发展企业IT系统越来越庞大,应用也越来越 复杂,IT运维管理已经一跃成为信息化的热门领域.然而,一些企业对IT运维管理软件的重视和认识程度还停留在为什么上,"头痛医头,脚痛医脚",不到万不得己,仍然是"能省则省"."IT运维管理对企业来说,不是锦上 添花,而是'必备用品'.就好比,手工洗衣与洗衣机,同样都可以把衣服洗干净, 但是,很少有家庭会因为衣服可以手工洗而不买洗衣机.与其把时间浪费在人工管理还是运维管理的争执上,不如象买洗衣机一样

只需四步轻松搞定瘦客户机运维管理

为用户挑选合适的设备可以为运行在数据中心的桌面带来诸多益处,但首先,你得选对瘦客户机.在之前的文章中,我们介绍了一些选择瘦客户机的技巧,例如要考虑一致性.内存扩展性等.实际上,企业真正要用好瘦客户机就必须拥有一套集中管理基础设施,这样才能降低长期运维开销. 第一步:找对管理工具 主要的还是你要明白你自己环境中的具体需求,然后看供应商是否有相应工具可用.如果工具不够灵活或者难以使用,就需要考虑更换终端类型或者供应商了.一些供应商针对特殊的瘦客户端类型提供了不同的工具.寻找能够针对瘦客户端应用组策略

大型数据中心如何做运维管理?

摘要:在云大行其道的今天,随着数据中心建设规模的不断扩大,新技术的层出不穷,数据中心变得越来越复杂.大型数据中心往往是由很多规模庞大的集群系统组成,其运维工作需要具备方方面面的知识,包括硬件.网络.服务器.存储.安全以及业务上的东西,需要上下打通地去做运维工作. 当一个数据中心的规模非常大,面临的挑战和问题也比较超前,很多在小环境小体系下不是问题的问题在这样的规模下也就凸显出来了,所以要做好大型数据中心的运维工作,对整个数据中心技术体系的系统学习就要花费比较长的时间,只有对这个数据中心整体非常了

zk日常运维管理

清理数据目录 dataDir目录指定了ZK的数据目录,用于存储ZK的快照文件(snapshot).另外,默认情况下,ZK的事务日志也会存储在这个目录中.在完成若干次事务日志之后(在ZK中,凡是对数据有更新的操作,比如创建节点,删除节点或是对节点数据内容进行更新等,都会记录事务日志),ZK会触发一次快照(snapshot),将当前server上所有节点的状态以快照文件的形式dump到磁盘上去,即snapshot文件.这里的若干次事务日志是可以配置的,默认是100000,具体参看下文中关于配置参数"