Python3中详解fabfile的编写

木白
木白
发布时间:2026-10-13| 6人浏览过
原创

本文详解Python Fabric库中fabfile的编写方法。介绍如何通过env对象配置主机、密码及角色分组,利用@roles修饰符实现不同角色的差异化任务执行,并列举local、run、sudo等常用API,帮助开发者高效完成远程服务器管理与自动化部署。

fab命令通常与用户编写的fabfile.py文件配合使用(若文件名不同,需通过-f参数指定文件名)。为了提升灵活性,部分命令行参数可通过代码方式替代。例如,原本在命令行中通过"-H 192.168.56.133,192.168.56.134"指定主机,可以在fabfile中通过定义env.hosts来实现,即设置"env.hosts=['192.168.56.133', '192.168.56.134']"。fabfile的核心内容由多个自定义的任务函数构成,每个函数负责实现特定的操作逻辑。

全局属性设定

env对象用于定义fabfile的全局配置,支持多种属性,包括目标主机、用户名、密码及角色划分等。各属性的具体说明如下:

  • env.host:用于定义目标主机,支持使用IP地址或主机名,需以Python列表形式定义,例如:env.hosts=['192.168.56.133', '192.168.56.134']。
  • env.exclude_hosts:用于排除指定的主机,例如:env.exclude_hosts=['192.168.56.133']。
  • env.user:用于定义登录用户名,例如:env.user="root"。
  • env.port:用于定义目标主机的SSH端口,默认值为22,例如:env.port="22"。
  • env.password:用于定义统一密码,例如:env.password='1234567'。
  • env.passwords:功能与password类似,但适用于不同主机需要不同密码的场景。需要注意的是,配置passwords时需同时指定用户、主机及端口信息,例如:
env.passwords = {
  'root@192.168.56.131:22':'1234567',
  'root@192.168.56.132:22':'1234567',
  'root@192.168.56.133:22':'1234567',
  'root@192.168.56.134:22':'1234567'
}
  • env.gateway:用于定义网关(如中转服务器或堡垒机)的IP地址,例如:env.gateway = '192.168.56.1'。
  • env.deploy_release_dir:用于自定义全局变量,格式为env.+"变量名称",例如env.deploy_release_dir、env.age、env.sex等。
  • env.roledefs:用于定义角色分组,例如将主机划分为web组和db组,定义方式如下:
env.roledefs = {
  'webservers':['192.168.56.131','192.168.56.132','192.168.56.133'],
  'dbserver':['192.168.56.134','192.168.56.135']
}

在引用角色时,使用Python修饰符的形式。角色修饰符下方的任务函数即为其作用域。以下是一个示例:

@roles('webservers')
def webtask():
  run('/etc/init.d/nginx start')


@roles('dbservers')
def dbtask():
  run('/etc/init.d/mysql start')


@roles('webservers','dbservers')
def pubclitasj():
  run('uptime')

def deploy():
  execute(webtask)
  execute(dbtask)
  execute(pubclitask)

执行命令fab deploy即可实现不同角色执行对应的任务函数。

常用API

Fabric提供了一组简单但功能强大的fabric.api命令集,通过简单调用这些API即可满足大部分应用场景的需求。Fabric常用方法及说明如下:

  • local:执行本地命令,例如:local('uname -s');
  • lcd:切换本地目录,例如:lcd('/home');
  • cd:切换远程目录,例如:cd('/data/logs');
  • run:执行远程命令,例如:run('free -m');
  • sudo:以sudo权限执行远程命令,例如:sudo('/etc/init.d/httpd start');
  • put:上传本地文件到远程主机,例如:put('/home/user.info','/data/user.info');
  • prompt:获取用户输入信息,例如:prompt('please input user password:');
  • confirm:获取提示信息确认,例如:confirm("Tests failed. Continue[Y/N]?");
  • reboot:重启远程主机,例如:reboot();
  • @task:函数修饰符,标识该函数为fab可调用的任务,未标记的函数对fab不可见,仅作为纯业务逻辑存在;
  • runs_once:函数修饰符,标识该函数只会执行一次,不受多台主机并发执行的影响。
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。