写点什么

Fabric | 自动化神器

发布于: 2021 年 05 月 28 日
Fabric | 自动化神器

什么是 Fabric

Fabric 是一款可以实现远程执行命令和完成操作的库,相比 PramikoFabric 更加简洁,高效和易用。它提供了很多开箱即用的功能,可以帮助开发者快速实现自动化任务。

常用的方法

什么是 local 方法

local 方法可以实现在本地执行命令,和 Pythonos.system()作用一样。整体感觉功能强大,使用简单。

Demo-1

demo 实现在本地主机上执行命令查看 hostname


from fabric.api import *
env.user='root'env.password='pwd@123'env.hosts=['10.x.x.1','10.x.x.2']
def exec_local(): local('hostname')
if __name__ == '__main__': import os,sys cmd='fab -f {} exec_local'.format(sys.argv[0]) os.system(cmd)
复制代码


执行结果:


PS C:\> python test.py[10.x.x.1] Executing task 'exec_local'[localhost] local: hostnameLenovo-PC-I7-64G[10.x.x.2] Executing task 'exec_local'[localhost] local: hostnameLenovo-PC-I7-64G
Done.
复制代码

单次执行

以上,我们可以看到 hostname 的命令执行了两次,因为我们的主机有 2 个。那如果我们想要某个命令只在第一台主机上执行,怎么做呢?Fabric 为我们提供了 runs_once 装饰器来帮我们解决这个问题。

Demo-2

代码:


from fabric.api import *
env.user='root'env.password='Panyun@123'env.hosts=['10.135.3.3','10.135.3.22']
@runs_oncedef exec_local(): local('hostname')
if __name__ == '__main__': import os,sys cmd='fab -f {} exec_local'.format(sys.argv[0]) os.system(cmd)
复制代码


执行结果:


PS C:\> python test.py[10.x.x.1] Executing task 'exec_local'[localhost] local: hostnameLenovo-PC-I7-64G
Done.
复制代码

什么是 run 方法

run 方法可以实现在远端主机执行命令,可以和 paramikoexec_command 实现同样的功能。

Demo-1

demo 实现在远端主机执行 hostname 命令。


from fabric.api import *
env.user='root'env.password='pwd@123'env.hosts=['10.x.x.1','10.x.x.2']
def exec_local(): local('hostname')
if __name__ == '__main__': import os,sys cmd='fab -f {} exec_local'.format(sys.argv[0]) os.system(cmd)
复制代码


执行结果:


PS C:\> python test.py[10.x.x.1] Executing task 'exec_local'[10.x.x.1] run: hostname[10.x.x.1] out: ubuntu[10.x.x.1] out:
[10.x.x.2] Executing task 'exec_local'[10.x.x.2] run: hostname[10.x.x.2] out: centos[10.x.x.2] out:

Done.Disconnecting from 10.x.x.1... done.Disconnecting from 10.x.x.2... done.
复制代码

什么是 put 方法

put 方法可以实现将本地文件上传的远端的功能。

Demo-1

demo 实现将本地主机的文件上传到远端主机。


from fabric.api import *
env.user='root'env.password='pwd@123'env.hosts=['10.x.x.1','10.x.x.2']
def put_file(): put('empty.ok','/home/ok.empty')
if __name__ == '__main__': import os,sys cmd='fab -f {} put_file'.format(sys.argv[0]) os.system(cmd)
复制代码


执行结果:


PS C:\> python test.py[10.x.x.1] Executing task 'put_file'[10.x.x.1] put: empty.ok -> /home/ok.empty[10.x.x.2] Executing task 'put_file'[10.x.x.2] put: empty.ok -> /home/ok.empty
Done.Disconnecting from 10.x.x.1... done.Disconnecting from 10.x.x.2... done.
复制代码


查看上传到远端主机的文件:


什么是 prompt 方法

prompt 方法可以获取用户输入,从而实现动态参数注入、交互式输入等功能。

Demo-1

demo 实现在远端主机执行 echo 命令,根据用户输入而输出。


from fabric.api import *
env.user='root'env.password='pwd@123'env.hosts=['10.x.x.1','10.x.x.2']
def exec_local(): local('hostname')
def echo_some(): msg=prompt('Please input msg:') run('hostname && echo {}'.format(msg))
if __name__ == '__main__': import os,sys cmd='fab -f {} echo_some'.format(sys.argv[0]) os.system(cmd)
复制代码


执行结果:


PS C:\> python test.py[10.x.x.1] Executing task 'echo_some'Please input msg: phyger[10.x.x.1] run: hostname && echo phyger[10.x.x.1] out: ubuntu[10.x.x.1] out: phyger[10.x.x.1] out:
[10.x.x.2] Executing task 'echo_some'Please input msg: niubi[10.x.x.2] run: hostname && echo niubi[10.x.x.2] out: centos[10.x.x.2] out: niubi[10.x.x.2] out:

Done.Disconnecting from 10.x.x.1... done.Disconnecting from 10.x.x.2... done.
复制代码


更多内容请移步 Fabric 官网。


https://fabric-chs.readthedocs.io/zh_CN/chs/

发布于: 2021 年 05 月 28 日阅读数: 41
用户头像

公众号:Python测试和开发 2018.10.14 加入

混迹于云原生领域的测试开发。

评论

发布
暂无评论
Fabric | 自动化神器