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

Posted 区块链兄弟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具fabric的简明使用手册相关的知识,希望对你有一定的参考价值。

点击蓝字,轻松关注

来源:51CTO

原文链接:http://t.cn/RmfmUx8

著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文约2800字+,阅读(观看)需要16分钟



1.简介


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


更具体地说,Fabric 是:


  • 一个让你通过命令行执行Python函数的工具;

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


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


2.安装


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


cd ~mkdir .pipcd .piptouch 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 updatesudo apt-get upgradesudo 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文件所在目录执行如下命令:


wld@trusty:~/fabric$ fab hello
hello world!

Done.


3.2 执行有参python函数


编写fabfile.py如下:


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


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


wld@trusty:~/fabric$ fab hello:name=wld
hello wld!

Done.


3.3 在本地机器执行命令


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


from fabric.api import localdef hello():
    local('ls -l ~')


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


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


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


3.4 在远程机器执行命令



from fabric.api import *

env.passwords = {    "user@10.1.1.1:22":"password"}@hosts("user@10.1.1.1:22")def hello():
    run("ls -l ~")


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


3.5 在内网机器执行命令


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


from fabric.api import *

env.gateway = "user@10.1.1.2:22"env.passwords = {    "user@10.1.1.1:22":"password1"
    "user@123.1.1.1:22":"password2"}

@hosts("user@123.1.1.1:22")
def hello():
    run("ls -l ~")


3.6 在windows服务器执行命令


首先windows机器需要安装ssh服务,注意ssh服务所用的账户需要设置能够运行exec的权限,否则无法启动windwos程序。


其次由于fabric默认使用bash,因此需要设置变量env.shell="cmd /c",否则会报错。


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


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


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

env.roledefs = {    'staging': ['bjhee@example1.com','bjhee@example2.com'],    'build': ['build@example3.com']
}

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.8 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: 设置命令执行前


文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。


猜猜你喜欢





点击“阅读原文”参与区块链问题讨论

以上是关于自动化运维工具fabric的简明使用手册的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维工具Fabric的简单使用

python自动化运维七:fabric

python 自动化部署工具Fabric简介

自动化部署工具Fabric简介

自动化部署工具Fabric简介

Python3自动化运维之Fabric模版详解