美文网首页
python fabric详解

python fabric详解

作者: 爱吃土豆的程序猿 | 来源:发表于2017-05-09 12:31 被阅读0次

    简介

    Fabirc是基于python实现的SSH命令行工具,非常适合应用的自动化部署,或者执行系统管理任务。

    简单的例子:

    root@openstack:~# cat fabfile.py
    def hello():
        print 'hello world!'
     
    root@openstack:~# fab hello
    hello world!
    
    Done.
    

    这个fab简单地导入了fabfile,并执行定义的hello函数。

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

    root@openstack:~# fab --help
    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 当命令执行失败,发出告警,而非默认终止任务

    实例分析

    #自定义fabfile文件如下
    #/root/fab.py
    from fabric.api import *
    
    #local_node和remote_node都可以为多个
    local_node = ['127.0.0.1']
    remote_node = ['10.116.97.30']
    #定义local和remote角色
    env.roledefs['local'] = local_node
    env.roledefs['remote'] = remote_node
    #定义用户名
    env.user = 'root'
    #定义密码
    env.password = 'xxx'
    
    #不同的角色执行不同的命令
    @roles('local')
    def test_local():
        #run命令在roles为local的主机上执行命令"hostname"
        run("hostname")
    
    @roles('remote')
    def test_remote():
        run("hostname")
    
    

    在python中调用:

    root@openstack:~# python
    Python 2.7.6 (default, Oct 26 2016, 20:30:19)
    [GCC 4.8.4] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from fabric.api import execute
    >>> import sys
    >>> sys.path.append('/root')
    >>> import fab
    >>> execute(fab.test_local)
    [127.0.0.1] Executing task 'test_local'
    [127.0.0.1] run: hostname
    [127.0.0.1] out: openstack
    [127.0.0.1] out:
    
    {'127.0.0.1': None}
    
    >>> execute(fab.test_remote)
    [10.116.97.30] Executing task 'test_remote'
    [10.116.97.30] run: hostname
    [10.116.97.30] out: openstack
    [10.116.97.30] out:
    
    {'10.116.97.30': None}
    

    fabfile全局属性设定

    env对象的作用是定义fabfile的全局设定,各属性说明如下:

    属性 含义
    env.host 定义目标主机,以python的列表表示,如env.host=['xx.xx.xx.xx','xx.xx.xx.xx']
    env.exclude_hosts 排除指定主机,以python的列表表示
    env.port 定义目标主机端口,默认为22
    env.user 定义用户名
    env.password 定义密码
    env.passwords 与password功能一样,区别在于不同主机配置不同密码的应用情景,配置此项的时候需要配置用户、主机、端口等信息,如:env.passwords = {'root@xx.xx.xx.xx:22': '123', 'root@xx.xx.xx.xx':'234'}
    env.getway 定义网关
    env.deploy_release_dir 自定义全局变量
    env.roledefs 定义角色分组

    常用的API

    Fabric支持常用的方法及说明如下:

    方法 说明
    local 执行本地命令,如:local('hostname')
    lcd 切换本地目录,lcd('/root')
    cd 切换远程目录,cd('cd')
    run 执行远程命令,如:run('hostname')
    sudo sudo执行远程命令,如:sudo('echo “123456″ passwd --stdin root')
    put 上传本地文件到远程主机,如:put(src,des)
    get 从远程主机下载文件到本地,如:get(des,src)
    prompt 获取用户输入信息,如:prompt(‘please enter a new password:’)
    confirm 获取提示信息确认,如:confirm('failed.Continue[Y/n]?')
    reboot 重启远程主机,reboot()
    @task 函数修饰符,标识的函数为fab可调用的
    @runs_once 函数修饰符,表示的函数只会执行一次

    相关文章

      网友评论

          本文标题:python fabric详解

          本文链接:https://www.haomeiwen.com/subject/wrbbtxtx.html