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()

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

  其他方法使用:

run:                #执行远程命令,如:run('uname -a');

local: #执行本地命令,如:local('uname -a');

lcd: #切换本地目录,如:lcd('/root');

cd: #切换远程目录,如:cd('/root'); with conn.cd('/root'):继承这个状态

put: #上传本地文件到远程主机,如:put('/root/test.py','/root/test.py');

sudo: #sudo方式执行远程命令,如:sudo('service docker start');

reboot: #重启远程主机,如:reboot();

prompt: #获得用户输入信息,如:prompt('please input user password:');

confirm: #获得提示信息确认,如:confirm("Continue[Y/N]?");

猜你喜欢

转载自www.cnblogs.com/shenh/p/10060149.html
今日推荐