ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python运维自动化开发之Fabric模块

2021-03-12 13:51:44  阅读:196  来源: 互联网

标签:run fabric 运维 Python 192.168 1.120 env fab Fabric


本章讲解fabric模块,与上一章的paramiko模块功能类似,fabric是在paramiko基础上又做了一层封装,操作起来更方便。主要用于多台服务器批量执行任务。

非内置Python模块,需要手动安装:pip install fabric
如果安装失败,可以尝试yum安装:yum install fabric
Fabric常用API:

Python运维自动化开发之Fabric模块
当我们写好fabric脚本后,需要用fab命令调用执行任务。
命令格式:fab [options][:arg1,arg2=val2,host=foo,hosts=’h1;h2’,…] …
fab命令有以下常用选项:

Python运维自动化开发之Fabric模块

Python运维自动化开发之Fabric模块

示例:

1、本地执行命令

from fabric.api import local
def command():
    local('ls')
# fab command
[localhost] local: ls
fabfile.py  fabfile.pyc  tab.py  tab.pyc
Done.

使用fab命令调用,默认寻找当前目录的fabfile.py文件。

2、远程执行命令

from fabric.api import run
def command():
    run('ls')
# fab -H 192.168.1.120 -u user command
[192.168.1.120] Executing task 'command'[192.168.1.120] run: ls
[192.168.1.120] Login password for 'user':
[192.168.1.120] out: access.log  a.py
[192.168.1.120] out:
Done.
Disconnecting from 192.168.1.120... done.

如果在多台主机执行,只需要-H后面的IP以逗号分隔即可。

3、给脚本函数传入位置参数

from fabric.api import run
def hello(name="world"):
    print("Hello %s!" % name)
# fab -H localhost hello
[localhost] Executing task 'hello'Hello world!
Done.
# fab -H localhost hello:name=Python
[localhost] Executing task 'hello'Hello Python!
Done.

4、主机列表组

from fabric.api import run, env
env.hosts = ['root@192.168.1.120:22', 'root@192.168.1.130:22']
env.password = '123.com'env.exclude_hosts = ['root@192.168.1.120:22']   # 排除主机
def command():
   run('ls')

env作用是定义fabfile全局设定,类似于变量。还有一些常用的属性:

Python运维自动化开发之Fabric模块

5、定义角色分组

# vi install.py
from fabric.api import run, env
env.roledefs = {    'web': ['192.168.1.10', '192.168.1.20'],    'db': ['192.168.1.30', '192.168.1.40']
}
env.password = '123'@roles('web')
def task1():
   run('yum install httpd -y')
@roles('db')
def task2():
   run('yum install mysql-server -y')
def deploy():
   execute(task1)
   execute(task2)
# fab -f install.py deploy

6、上传目录到远程主机

from fabric.api import *
env.hosts = ['192.168.1.120']
env.user = 'user'env.password = '123.com'def task():
   put('/root/abc', '/home/user')
   run('ls -l /home/user')
# fab task

7、从远程主机下载目录

from fabric.api import *
env.hosts = ['192.168.1.120']
env.user = 'user'env.password = '123.com'def task():
   get('/home/user/b', '/opt')
   local('ls -l /opt')
# fab task

8、打印颜色,有助于关键地方醒目

from fabric.colors import *
def show():
   print green('Successful.')
   print red('Failure!')
   print yellow('Warning.')
# fab show

经过上面示例,有没有觉得fabric模块很适合批量自动部署呢!没错,通过编写简单的脚本,即可完成复杂的部署操作。

而paramiko模块,更擅长远程执行命令,文件传输,可灵活的嵌入到运维系统中。

标签:run,fabric,运维,Python,192.168,1.120,env,fab,Fabric
来源: https://blog.51cto.com/15127501/2657168

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有