【Python】自动化部署神器fabric2

简介

fabric2 是一个python(2.7,3.4+)的库,用来通过SSH远程执行shell命令,并返回有用的python对象。

它建立在 invoke 和 paramiko 库之上,同时扩展了他们的API以提供更多的功能。

https://www.fabfile.org/

安装与使用

1.安装

pip uninstall fabric
pip uninstall fabric3
pip install fabric2

2.Connection类

实现对单个主机的SSh连接,返回一个该主机的连接对象。通过该对象,对主机进行操作和管理。

类的属性:

host:主机名或IP地址,可用格式:user@host, host:port, user@host:port

user:登录用户名

port:(int)登录端口

config:登录配置文件

gateway:连接的网关或代理

forword_agent:(bool)是否开启agent_forwording

connect_timeout:(int)连接超时时间

connect_kwargs:(dict)提交连接参数的字典,多用于密码,密钥等。

inline_ssh_env:(bool)

类的方法:

run:执行命令,返回结果的属性有 stdout,exited,ok,command,connection 等

get:从远程下载文件

put:上传文件,put(src_path, remote= dst_path)

sudo:sudo远程执行命令

sftp:返回一个sftp对象

local:在本地执行shell命令

is_connected:此链接是否打开

open

open_gateway

close

create_session

forward_local

forward_remote

例子

from fabric import Connection

ssh_conn = Connection(host='xxx.xxx.xxx.xxx', user='root', connect_kwargs={'password': '***'})

3.Group类

连接多个服务器,组成一个group,一个group同时执行run命令时,会返回一个 GroupResult-dict,包含了每个服务器的运行结果。

例子:

from fabric import SerialGroup as Group

hosts = (
  		"[email protected]:22", "[email protected]:22"
)

pool = Group(*hosts,connect_kwargs={"password": "123"})

results = pool.run('uname -s')
for connection, result in results.items():
	print("{0.host}: {1.stdout}".format(connection, result))

4.自动响应程序的输出

比如运行sudo命令时,会要求输入代码,此时如果手动输入则显得很笨拙,fabric提供了自动响应输入请求的功能:

from invoke import Responder
from fabric import Connection
c = Connection('host')
passwd = "1234
sudopass = Responder(
	pattern=r'\[sudo\] password:',
	response='{passwd }\n',format(passwd = passwd),
)
c.run('sudo whoami', pty=True, watchers=[sudopass])

5.将功能封装成函数

def upload_and_unpack(ssh_conn ):
    c.put('myfiles.tgz', '/opt/mydata')
    c.run('tar -C /opt/mydata -xzvf /opt/mydata/myfiles.tgz')

实用案例

多机安装与配置Docker

你可能感兴趣的:(【Python】)