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]?");