Python自动化自动运维

Fabric自动化工具实践

2021-07-31  本文已影响0人  刘小白DOER

    Fabric依赖paramiko进行ssh交互, Fabric的作者也是paramiko的作者。Fabric对paramiko进行了封装,不需要像使用paramiko一样自己处理ssh连接、任务分发、异常处理等繁琐工作,只需要专注于自己的需求即可。fabric是在paramiko之上又封装了一层,操作起来更加简单易用。Fabric对基本的系统管理操作进行了封装,如命令执行、文件上传、并行操作和异常处理。

1、安装Fabric

    pip3 install fabric

    安装好后,可以使用python3 -c "import fabric"来验证安装准确。Fabric既是一个python库,也是一个命令行工具,命令行工具是fab 。

    需要注意的是,Fabric大于2.0版本已经移除fabric.api模块,接口与1.x版本完全不同。

2、Fabric Connection模块使用

    笔者使用的是端口转发的虚拟机ubuntu-server,已经配置了ssh免密,当然也可以使用connect_kwargs来指定连接密码,key_filename来指定密钥。

    导入Connection模块: from fabric import Connection

    连接远程服务器:conn = Connection("ubuntu@localhost:333")

    run运行hostname查看主机名:conn.run("hostname")

    run查看磁盘使用率:conn.run("df -h / | tail -n1 | awk '{print $5}'")

3、Fabric SerialGroup模块使用

    单个命令在多个主机上执行。

    导入SerialGroup模块:from fabric import SerialGroup

    多个主机上执行hostname:result = SerialGroup(host1, host2).run('hostname')

    我们也可以在py文件中来定义函数操作。

    运行结果如下:

4、入口文件fabfile.py    

    Fabric典型的使用方法是创建一个入口文件fabfile.py,在文件中定义多个函数,然后使用fab命令调用这些函数。这些函数在Fabric中叫做task。

    Fabric默认引用fabfile.py文件,也可以通过“-f”来指定fabfile文件。

    现在我们将上面的基本重命名为fabfile.py,同时调用task模块,将main函数都定义为task任务,那么没有被@task的函数将不会被认为是任务task。同时,task函数需要有一个参数:Tasks must have an initial Context argument! 不然会报错,笔者在main里面写了个null在里面。

    那么就可以使用fab命令在命令行里面操作了。

    查看可用的任务:fab -l

    运行main任务:fab main

    5、在上面的代码基础上,测试Connection、SerialGroup、ThreadingGroup

        三种方式是单个连接、串行、多线程并行方式来远程执行。

        测试结果如下:

上一篇下一篇

猜你喜欢

热点阅读