自动化运维工具fabric的简明使用手册

1.简介

Fabric 是一个 Python (2.5-2.7) 的库和命令行工具,用来提高基于 SSH 的应用部署和系统管理效率。
更具体地说,Fabric 是:

  • 一个让你通过命令行执行Python函数的工具;
  • 一个让你通过SSH执行Shell命令更加容易、 更符合Python风格的命令库。

自然而然地,大部分用户把这两件事结合着用,使用Fabric来写和执行Python函数或task,以实现与远程服务器的自动化交互。让我们一睹为快吧。

2.安装

创建.pip目录和配置文件:

cd ~
mkdir .pip
cd .pip
touch pip.conf

编辑文件pip.conf如下

[global]
index-url=http://mirrors.zte.com.cn/pypi/simple

[install]
trusted-host=mirrors.zte.com.cn

安装依赖包(如果是centos的,需要使用yum安装)

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-dev
sudo apt-get install libffi-dev

用pip安装fabric

sudo pip install fabric

3、使用

3.1 执行无参python函数

编写fabfile.py如下:

def hello():
    print("hello world!")

def helloEx(name):
    print("hello ", name, "!")

在fabfile文件所在目录执行如下命令:

[email protected]:~/fabric$ fab hello
hello world!

Done.

3.2 执行有参python函数

编写fabfile.py如下:

def hello(name):
    print("hello "+name+" !")

在fabfile文件所在目录执行如下命令:

[email protected]:~/fabric$ fab hello:name=wld
hello wld!

Done.

3.3 执行本地命令

fabric.api包里的local()方法可以用来执行本地Shell命令:

from fabric.api import local

def hello():
    local(‘ls -l ~‘)

local()方法有一个”capture”参数用来捕获标准输出,比如:

def hello():
    output = local(‘ls -l ~‘, capture=True)

这样,Hello字样不会输出到屏幕上,而是保存在变量output里。

3.4 执行远程命令

Fabric真正强大之处不是在执行本地命令,而是可以方便的执行远程机器上的Shell命令。它通过SSH实现,你需要的是在脚本中配置远程机器地址及登录信息:

from fabric.api import *

env.passwords = {
    "[email protected]:22":"password"
}

@hosts("[email protected]:22")
def hello():
    run("ls -l ~")

我们可以通过设置env.passwords来避免在运行过程中输密码,注意ip后面需要加端口号,示例中的22是ssh的端口号。

3.5 执行内网机器命令

有时候我们需要通过一台中转机器才能登录内网机器,这种情况需要设置env.gateway

from fabric.api import *

env.gateway = "[email protected]:22"
env.passwords = {
    "[email protected]:22":"password1"
    "[email protected]:22":"password2"
}

@hosts("[email protected]:22")
def hello():
    run("ls -l ~") 

3.6 定义角色让不同机器执行不同命令

如果对于不同的服务器,我们想执行不同的任务,我们要对服务器定义角色:

from fabric.api import env, roles, run, execute, cd

env.roledefs = {
    ‘staging‘: [‘[email protected]‘,‘[email protected]‘],
    ‘build‘: [‘[email protected]‘]
}

env.passwords = {
    ‘staging‘: ‘11111‘,
    ‘build‘: ‘123456‘
}

@roles(‘build‘)
def build():
    with cd(‘/home/build/myapp/‘):
        run(‘git pull‘)
        run(‘python setup.py‘)

@roles(‘staging‘)
def deploy():
    run(‘tar xfz /tmp/myapp.tar.gz‘)
    run(‘cp /tmp/myapp /home/bjhee/www/‘)

def task():
    execute(build)
    execute(deploy)

现在让我们执行fab task,这时Fabric会先在一台build服务器上执行build任务,然后在两台staging服务器上分别执行deploy任务。”@roles”装饰器指定了它所装饰的任务会被哪个角色的服务器执行。

3.7 SSH功能函数

  • sudo(cmd): 以超级用户权限执行远程命令。 sudo("mkdir /root/xx")
  • get(remote, local): 从远程机器上下载文件到本地
  • put(local, remote): 从本地上传文件到远程机器上
  • prompt(提示字符串, default, validate): 提示输入并返回用户输入值
  • reboot: 重启服务器
  • cd(path): 设置远程机器的当前工作目录
  • lcd(path): 设置本地工作目录
  • path: 添加远程机的PATH路径
  • settings: 设置Fabric环境变量参数
  • shell_env: 设置Shell环境变量
  • prefix: 设置命令执行前缀

原文地址:http://blog.51cto.com/wulingdong/2073536

时间: 2024-11-05 16:07:21

自动化运维工具fabric的简明使用手册的相关文章

Python自动化运维工具fabric的安装

使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自动登录其他服务器进行各种操作,这种实现使用shell是很难做到的,但是使用fabric实现就很简单,所以对于程序员的日常运维部署,建议使用python编写脚本 Linux下默认有python环境,安装fabric有两种方式一种是pip直接安装,另外一种是下载fabric源码,使用setuptools

自动化运维工具介绍

运维目标有三个阶段,第一是追求稳定性,第二是追求标准化,第三是追求自动化.对于第三阶段来说,什么是运维自动化呢?简单地讲,运维自动化就是将日常重复性工作按照事先设定好的规则,在一定时间范围内自动化运行,而不需要人工参与.接下来简单介绍运维自动化工具,要了解运维平时用到的自动化工具,就需要了解运维人员的日常工作有哪些. 一.运维的日常工作 运维的日常工作可以总结为以下四个部分,分别是: (1) 系统安装 (2) 应用程序配置(Configuration) (3) 命令执行与控制(Command a

自动化运维工具之ansible

ansible ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架. 主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定

自动化运维工具之ansible的简单应用

ansible: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,例如shell,copy,ping等,ansible只是提供一种框架.ansible的主要特性: 模块化:调用特定的模块,完成特定任务 基于Python语言实现,由Pa

自动化运维工具Ansible详细部署

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1579894 ========================================================================================== 一.基础介绍 =========================================================

自动化运维工具Ansible实战(一)安装部署

1,基本介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操作

Ansible自动化运维工具部署及使用

一.Ansible介绍 1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inven

自动化运维工具Ansible架构部署应用及playbooks简单应用

在日常服务器运维中,我们经常要配置相同的服务器配置,前期我们都是一台一台的去配置,这种方法操作主要应对于服务器数量不多且配置简单的情况还可以继续这样操作,如果我们后期维护几百服务器或者几万服务器呢? 我应该怎样去快速配置服务器呢?如果需要手动的每台服务器进行安装配置将会给运维人员带来许多繁琐而又重复的工作同时也增加服务器配置的异常,至此自动化运维工具解决我们的瓶颈---Ansible工具. Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfeng

自动化运维工具ansible的基本应用

在很多场景中我们都需要在多个主机上执行相同的命令或者是做相同的配置工作,此时,为了简化操作,我们可以借助一些自动化的工具来完成我们的需求,这种工具我们称之为自动化运维工具.ansible就是其中之一,下面我们就来用ansible来实现一些简单操作. 下面是ansible可以实现很多工具的功能,框架图如下所示:ansible不能实现操作系统的安装 ansible作者就是早期puppet和func的维护者之一,因为ansible充分吸取了puppet和func的优势,又力图避免他们的劣势. OS P