fabric介绍

3 篇文章 0 订阅

Fabric-SSH命令行工具

Fabric是基于python2.5及以上版本实现的SSH命令行工具,简化了SSH应用程序部署及系统管理任务,他提供了系统基础的操作组件,可以实现本地或远程shell命令,包括命令执行、文件上传、下载及完整执行日志输出等功能。Fabric在paramiko的基础上做更高一层的封装,操作起来更加简单。

官网地址:http://www.fabfile.org/

fab的常用参数

Usage: 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,当命令执行失败,发出告警,而非默认终止任务。

有时候我们可已不需要写一行python代码也可以完成远程操作,直接使用命令的形式,例如:

fab -p 123456(密码) -H 192.168.1.21,192.168.1.22 -- 'uname -s'

fabric的环境变量

fabric的环境变量有很多,存放在一个字典中,
fabric.state.env,而它包含在fabric.api中。
为了方便,我们一般使用env来指代环境变量。
env环境变量可以控制很多fabric的行为,一般通过env.xxx可以进行设置。

fabric默认使用本地用户通过ssh进行连接远程机器,不过你可以通过env.user变量进行覆盖。
当你进行ssh连接时,fabric会让你交互的让你输入远程机器密码,如果你设置了env.password变量,则就不需要交互的输入密码。
下面介绍一些常用的环境变量:

  • abort_on_prompts 设置是否运行在交互模式下,例如会提示输入密码之类,默认是false
  • connection_attempts fabric尝试连接到新服务器的次数,默认1次
  • cwd 目前的工作目录,一般用来确定cd命令的上下文环境
  • disable_known_hosts 默认是false,如果是true,则会跳过用户知道的hosts文件
  • exclude_hosts 指定一个主机列表,在fab执行时,忽略列表中的机器
  • fabfile 默认值是fabfile.py在fab命令执行时,会自动搜索这个文件执行。
  • host_string 当fabric连接远程机器执行run、put时,设置的user/host/port等
  • hosts 一个全局的host列表
  • keepalive 默认0 设置ssh的keepalive
  • loacl_user 一个只读的变量,包含了本地的系统用户,同user变量一样,但是user可以修改
  • parallel 默认false,如果是true则会并行的执行所有的task
  • pool_size 默认0 在使用parallel执行任务时设置的进程数
  • password ssh远程连接时使用的密码,也可以是在使用sudo时使用的密码
  • passwords 一个字典,可以为每一台机器设置一个密码,key是ip,value是密码
  • path 在使用run/sudo/local执行命令时设置的$PATH环境变量
  • port 设置主机的端口
  • roledefs 一个字典,设置主机名到规则组的映射
  • roles 一个全局的role列表
  • shell 默认是/bin/bash -1 -c 在执行run命令时,默认的shell环境
  • skip_bad_hosts 默认false,为ture时,会导致fab跳过无法连接的主机
  • sudo_prefix 默认值"sudo -S -p '%(sudo_prompt)s' " % env 执行sudo命令时调用的sudo环境
  • sudo_prompt 默认值"sudo password:"
  • timeout 默认10 网络连接的超时时间
  • user ssh使用哪个用户登录远程主机
  • 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:')
  • confirm 获得提示信息确认, 如: confirm('Tests failed. Continue[Y/N]?')
  • reboot 重启远程主机,如: reboot();
  • @task 函数修饰符,标识的函数为fab可调用的,非标记对fab不可见,纯业务逻辑。
  • @runs_once, 函数修饰符,标识的函数只会执行一次,不会受多台主机的影响。

示例: fab_test.py

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

from fabric.api import *

env.user = 'root'
env.hosts = ['192.168.17.232','192.168.18.6']
env.password='123456'

@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 = raw_input()
    worktask(getdirname)

执行方式: fab -f fab_test.py go

示例:网关模式文件上传与执行,就是通过堡垒机执行远程主机操作

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

# from fabric.api import *
#
# env.user = 'root'
# env.hosts = ['192.168.17.232','192.168.18.6']
# env.password='123456'
#
# @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 = raw_input()
#     worktask(getdirname)

from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm

env.user='root'
env.gateway='192.168.1.23' #定义堡垒机ip,作为文件上传、执行的设备
env.hosts=['192.168.1.21','192.168.1.22']
#假如所有主机密码都不一样,可以通过env.passwords字典变量--指定
env.passwords = {
    'root@192.168.1.21:22': '123456',
    'root@192.168.1.22:22': '1123456',
    'root@192.168.1.23:22': 'test111'#堡垒机
}
lpackpath = "/home/install/test" #本地安装包路径
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(): #执行远程命令,安装lnmp环境
    with cd("/tmp/install"):
        run("tar -zxvf test")
        with cd("test/"):
            run("./install")
@task
def go(): #上传、安装组合
    put_task()
    run_task()

实现不同业务环境,安装部署不同软件包

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


from fabric.api import *
from fabric.colors import *

env.user='root'
env.roledefs = {
    'webservers': ['192.168.1.21','192.168.1.22'],
    'dbservers': ['192.168.1.23']
}
env.passwords = {
    'root@192.168.1.21:22': '123456',
    'root@192.168.1.22:22': '1123456',
    'root@192.168.1.23:22': 'test111'
}

@roles('webservers')
def webtask(): #部署nginx php php-fpm等环境
    print yellow("Install nginx php php-fpm ...")
    with settings(warn_only=True):
        run("yum -y install nginx")
        run("yum -y install php-fpm php-mysql php-mbstring php-xml php-gd")
        run("chkconfig --levels 235 php-fpm on ")


@roles('dbservers') #dbtask 任务函数引用'dbservers'角色修饰符
def dbtask(): #部署mysql环境
    print yellow("Install Mysql...")
    with settings(warn_only=True):
        run("yum -y install mysql mysql-server")
        run("chkconfig --leverls 235 mysqld on")
@roles('webservers','dbservers')
def publictask():
    print yellow("Install epel ntp...")
    with settings(warn_only=True):
        run("rpm -Uvh  http://mirrors.aliyun.com/repo/epel-7.repo")
        run("yum -y install ntp")
def deploy():
    execute(publictask)
    execute(webtask)
    execute(dbtask)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值