• python三大神器之fabric(2.0新特性)


      fabric经常出现在自动化运维领域,批量处理一些运维工作。fabric是在paramiko之上又封装了一层,操作起来更加简单易用。

      本来只是想写个博客记录一下,然后发现之前写的代码不能运行了,报以下错误:No module named 'fabric.api'

    Traceback (most recent call last):
      File "D:/PycharmProjects/TestTool/Publish/fabric_sample.py", line 3, in <module>
        from fabric.api import *
    ModuleNotFoundError: No module named 'fabric.api'

      然后百度了下,说是2.0以上的fabric版本已经移除了fabric.api,解决方法是指定安装2.0以下的版本,比如pip install fabric==1.14.0  ~_~ ,但都并没有介绍新的特性。然后去官网看了下文档,使用方法如下:

    1.连接服务器

      通过fabric.Connection方法连接服务器:

      conn = fabric.Connection(host , user = 'root',port = 22, config = None, geteway = None, connect_kwargs={"password": "123456"})

      Connection参数的含义:

      def __init__(
        self,
        host,                       #主机ip
        user=None,                  #用户名
        port=None,                  #ssh端口,默认是22
        config=None,                #登录配置文件
        gateway=None,               #连接网关
        forward_agent=None,         #是否开启agent forwarding
        connect_timeout=None,       #设置超时
        connect_kwargs=None,        #设置 密码登录connect_kwargs={"password": "123456"}) 还是 密钥登录connect_kwargs={"key_filename": "/home/myuser/.ssh/private.key"}
        inline_ssh_env=None,      
        )

    2.通过fabric安装软件

      下面通过一段代码实现在Ubuntu上批量安装docker,顺序取走列表中的ip。

    import fabric
    
    def docker_install():
        for host in ['10.1.4.24',
                     '10.1.15.154',
                     '10.1.14.106']:
            conn = fabric.Connection(host , user = 'root', connect_kwargs={"password": "123456"})
            print("%s:" % host)
            conn.run("echo Y|apt-get remove docker.io")
    docker_install()

      是不是很简单,几行代码就解决了~

      cnn获取Connetction对象后,有很多属性方法可以使用,介绍下几个常用的:

    run:                #执行远程命令,如:run('uname -a')
    
    cd:                 #切换远程目录,如:cd('/root');   with conn.cd('/root'):继承这个状态
    
    put:                #上传本地文件到远程主机,如:put('/root/test.py','/root/test.py')
    
    get:                 #获取服务器上文件,如:get('/root/project/test.log')
    
    sudo:               #sudo方式执行远程命令,如:sudo('service docker start')

       全部属性:

    ['cd', 'clear', 'client', 'close', 'config', 'connect_kwargs', 'connect_timeout', 'create_session', 'cwd', 'derive_shorthand', 'forward_agent', 'forward_local', 'forward_remote', 'from_data', 'from_v1', 'gateway', 'get', 'get_gateway', 'host', 'is_connected', 'local', 'open', 'open_gateway', 'original_host', 'pop', 'popitem', 'port', 'prefix', 'put', 'resolve_connect_kwargs', 'run', 'setdefault', 'sftp', 'ssh_config', 'sudo', 'transport', 'update', 'user']
    View Code

      调用本地命令:

    import invoke
    
    invoke.run('uname -a')
  • 相关阅读:
    Docker简介
    分类技术
    龙果支付系统
    [徐培成系列实战课程]docker篇
    高手速成android开源项目【developer篇】
    高手速成android开源项目【项目篇】
    高手速成android开源项目【tool篇】
    高手速成android开源项目【View篇】
    JAVA代理分析
    程序员的2013回顾及2014钱途
  • 原文地址:https://www.cnblogs.com/shenh/p/10060149.html
Copyright © 2020-2023  润新知