系统批量运维管理器Fabric详解

简介:

1、fab常用的参数

fab作为Fabric程序的命令行入口,提供了丰富的参数调用,命令格式如下:

fab [options] <command>[:arg1,arg2=val2,host=foo,hosts='h1;h2',...]...

  • -l,显示定义好的任务函数名;

  • -f,指定fab入口文件,默认入口文件名为fabfile.py;

  • -g,指定网关(中转)设备,比如堡垒机环境,填写堡垒机IP即可;

  • -H,指定目标主机,多台主机用","号分隔;

  • -P,以异步并行方式运行多主机任务,默认为串行运行;

  • -R,指定role,以角色名区分不同业务组设备;

  • -t,设置设备连接超时时间(秒);

  • -T,设置远程主机命令执行超时时间(秒);

  • -w,当命令执行失败,发出告警,而而默认中止任务。

2、全局属性设定

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

  • env.host,定义目标主机,可以用IP或主机名表示,以Python的列表形式定义,如env.hosts=['192.168.1.21','192.168.1.22']

  • env.exclude_hosts,排除指定主机,如env.exclude_hosts=['192.168.1.22']

  • env.user,定义用户名,如env.user='root'

  • env.port,定义目标主机端口,默认为22,如env.port='22'

  • env.password,定义密码,如env.password='111111'

  • env.passwords,与password功能一样,区别在于不同主机不同密码的应用场景,需要注意的是,配置passwords时需要配置用户、主机、端口等信息,如下:

env.passwords={

'root@192.168.1.21:22':'111111'

'root@192.168.1.22:22':'111111'

'root@192.168.1.23:22':'111111'

}

  • env.gateway,定义网关(中转、堡垒机)IP,如env.gateway='192.168.1.23'

  • env.deploy_release_dir,自定义全局变量,格式:env.+"变量名称",如env.deploy_release_dir、env.age、env.sex等

  • env.roledefs,定义角色分组,比如web组与db组主机区分开来,定义如下:

 env.roledefs={

    'webservers':['192.168.1.21','192.168.1.22','192.168.1.23']

    'dbservers':['192.168.1.25','192.168.1.26']

    }

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

@roles('webservers')def webtask():

    run('/etc/init.d/nginx start')

@roles('dbservers')def dbtask():

    run('/etc/init.d/mysql start')

@roles('webservers','dbservers')

    run('uptime')def deploy():

    execute(webtask)

    execute(dbtask)

    execute(pubclitask)

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

3、常用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('/data/user.info','/home/root.info')

  • prompt,获得用户输入信息,如prompt('please input user password:')

  • confirm,获得提示信息确认,如confirm('Tests failed.Continue[Y/N]?')

  • reboot,重启远程主机,如reboot()

  • @task,函数修饰符,标识的函数为fab可调用的,非标记对fab不可见,纯业务逻辑

  • @runs_once,函数修饰符,标识的函数只会执行一次,不受多台主机影响

4、示例1:查看本地与远程主机信息

#!/usr/bin/env python
#-*- codeing:utf-8 -*-

from fabric.api import *

display local or remote host information
env.user = 'root'
env.hosts=['192.168.110.129']
env.password='111111'
@runs_once
def host_type():
    run('uname -s')

def remote_task():
    with cd('packets'):
        run('ls -l')

5、示例2:动态获取远程目录列表

#!/usr/bin/env python
#-*- codeing:utf-8 -*-

#dynamic obtain remote host directory list
env.user = 'root'
env.hosts=['192.168.110.129']
env.password='111111'
@runs_once
def input_raw():
    return prompt('please input diectory name:',default='/root')
def worktask(dirname):
    run('ls -l ' + dirname)
@task
def go():
    getdirname = input_raw()
    worktask(getdirname)

6、示例3:网关模式文件上传与执行

#!/usr/bin/env python
#-*- codeing:utf-8 -*-

#gateway mode put file and execute
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.user='root'
env.gateway='192.168.110.129'
env.hosts=['192.168.110.130','192.168.110.131']
env.passwords={
    'root@192.168.110.129:22':'111111',
    'root@192.168.110.130:22':'111111',
    'root@192.168.110.131:22':'111111',
}
lpackpath="/home/install/lnmp0.0.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 lnmp0.9.tar.gz')
        with cd('lnmp0.9/'):
            run('./centos.sh')
@task
def go():
    put_task()
    run_task()


本文转自 gswljy 51CTO博客,原文链接:http://blog.51cto.com/guoshiwei/1925009

相关文章
|
20天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
41 3
|
29天前
|
运维 监控 安全
高效运维管理:提升系统稳定性的策略与实践
【10月更文挑战第2天】 在当今数字化时代,运维管理成为企业IT部门的重要任务。本文将探讨如何通过高效的运维管理策略和最佳实践,提升系统的稳定性,确保业务持续平稳运行。通过分析常见问题、预防措施以及应对策略,我们将揭示高效运维的关键要素,助您打造一个可靠的IT环境。
|
3天前
|
运维 监控 中间件
数据中心运维监控系统产品价值与优势
华汇数据运维监控系统面向IT基础架构及IT支撑平台的监控和运维管理,包含监测、分析、展现和告警。监控范围涵盖了网络设备、主机系统、数据库、中间件和应用软件等。
18 4
|
17天前
|
运维 监控 安全
高效运维管理:提升系统稳定性的策略与实践
【10月更文挑战第13天】 本文探讨了高效运维管理的关键策略和实践,旨在帮助运维团队提升系统的稳定性。通过分析常见问题,提出具体的解决方案,包括监控与告警、自动化工具的应用、故障排查与恢复、性能优化以及安全防护等方面。通过这些策略和实践,可以帮助企业构建一个稳定、可靠且高效的IT系统。
59 1
|
27天前
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全面指南在当今数字化时代,运维作为保障系统稳定性和效率的重要环节,其重要性不言而喻。本文将深入探讨如何构建一个高效的运维体系,从监控系统的搭建到自动化运维的实施,旨在为读者提供一套完整的解决方案。
本文详细介绍了高效运维体系的构建过程,包括监控系统的选择与部署、日志分析的方法、性能优化的策略以及自动化运维工具的应用。通过对这些关键环节的深入剖析,帮助运维人员提升系统的可靠性和响应速度,降低人工干预成本,实现业务的快速发展和稳定运行。
|
29天前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。
|
1月前
|
运维 监控 大数据
高效运维管理:提升系统稳定性的策略与实践
在当今信息技术飞速发展的时代,运维管理作为保障系统稳定运行的关键环节,其重要性不言而喻。本文将深入探讨如何通过优化运维流程、引入自动化工具和建立完善的监控体系等策略,来有效提升系统的稳定性。同时,结合具体实践案例,分析这些策略在实际工作中的应用效果,为运维人员提供有益的参考和启示。
70 6
|
1月前
|
运维 负载均衡 监控
提升系统性能:高效运维的秘密武器——负载均衡技术
在当今数字化时代,系统的高可用性和高性能成为各类企业和组织追求的目标。本文旨在探讨负载均衡技术在运维工作中的关键作用,通过深入分析其原理、类型及实际应用案例,揭示如何利用这项技术优化资源分配,提高系统的响应速度和可靠性,确保用户体验的稳定与流畅。无论是面对突如其来的高流量冲击,还是日常的运维管理,负载均衡都展现出了不可或缺的重要性,成为现代IT架构中的基石之一。
45 4
|
2月前
|
存储 弹性计算 运维
自动化监控和响应ECS系统事件
阿里云提供的ECS系统事件用于记录云资源信息,如实例启停、到期通知等。为实现自动化运维,如故障处理与动态调度,可使用云助手插件`ecs-tool-event`。该插件定时获取并转化ECS事件为日志存储,便于监控与响应,无需额外开发,适用于大规模集群管理。详情及示例可见链接文档。
|
2月前
|
运维 监控 安全
高效运维管理:提升系统可靠性的策略与实践
本文将深入探讨高效运维管理的关键策略和实践,旨在帮助运维团队提高系统的可靠性、可用性和稳定性。通过分析常见的运维挑战,提出相应的解决方案,并结合实际案例进行说明,为读者提供一套行之有效的运维管理指南。无论是新手还是经验丰富的运维工程师,都能从中获得有价值的见解和实用技巧。