当前位置:首页 > RockyLinux > 正文

RockyLinux Ansible模块开发(手把手教你用Python编写自定义Ansible模块)

在现代自动化运维体系中,Ansible 因其简单、无代理架构和强大的模块系统而广受欢迎。而 RockyLinux 作为 CentOS 的继任者,正成为企业级服务器部署的热门选择。本文将带你从零开始,学习如何为 RockyLinux 环境开发自定义 Ansible 模块,即使你是编程小白,也能轻松上手!

RockyLinux Ansible模块开发(手把手教你用Python编写自定义Ansible模块) Ansible模块开发 Ansible自定义模块 RockyLinux自动化运维 Python编写Ansible模块 第1张

什么是 Ansible 模块?

Ansible 模块是执行特定任务的独立脚本,比如安装软件包、管理服务、操作文件等。官方提供了大量模块,但有时我们需要定制功能——这就需要自己开发模块。

自定义模块通常使用 Python 编写(也支持 Shell、Go 等),因为 Ansible 控制节点默认依赖 Python。在 RockyLinux 上,Python 3 已成为标准,非常适合开发新模块。

开发环境准备

首先确保你的 RockyLinux 系统已安装 Ansible 和 Python 3:

# 安装 EPEL 仓库sudo dnf install -y epel-release# 安装 Ansible 和 Python3sudo dnf install -y ansible python3 python3-pip# 验证版本ansible --versionpython3 --version

创建你的第一个自定义模块

我们将编写一个名为 hello_rocky 的简单模块,它接收一个名字参数,并返回一条问候语。

步骤 1:创建模块目录

Ansible 默认会在以下路径查找自定义模块:

  • ./library/(当前 playbook 目录下)
  • ~/.ansible/plugins/modules/
  • /usr/share/ansible/plugins/modules/

我们使用第一种方式,在项目根目录创建 library 文件夹:

mkdir -p my_playbook/librarycd my_playbook

步骤 2:编写模块代码

library/ 目录下创建文件 hello_rocky.py

#!/usr/bin/python3# -*- coding: utf-8 -*-from ansible.module_utils.basic import AnsibleModuledef main():    # 定义模块参数    module_args = dict(        name=dict(type='str', required=True)    )    # 创建模块实例    module = AnsibleModule(        argument_spec=module_args,        supports_check_mode=True    )    # 获取传入参数    name = module.params['name']    # 构造返回结果    result = dict(        changed=False,        message=f"Hello, {name}! Welcome to RockyLinux Ansible automation."    )    # 如果不是 check mode,才真正“执行”(本例无实际变更)    if not module.check_mode:        result['changed'] = False  # 本模块不修改系统状态    # 成功退出并返回结果    module.exit_json(**result)if __name__ == '__main__':    main()

步骤 3:编写 Playbook 测试模块

my_playbook/ 目录下创建 test_hello.yml

---- name: Test custom hello_rocky module  hosts: localhost  connection: local  tasks:    - name: Say hello to Rocky      hello_rocky:        name: "Rocky User"      register: hello_result    - name: Print the message      debug:        msg: "{{ hello_result.message }}"

步骤 4:运行测试

执行以下命令:

ansible-playbook test_hello.yml

你将看到类似输出:

ok: [localhost] => {    "msg": "Hello, Rocky User! Welcome to RockyLinux Ansible automation."}

关键概念解析

  • AnsibleModule:所有自定义模块的核心类,用于处理参数、返回结果、错误等。
  • argument_spec:定义模块接受的参数及其类型、是否必填等。
  • supports_check_mode:支持 Ansible 的 dry-run 模式(--check),避免意外变更。
  • exit_json / fail_json:成功或失败时的标准返回方式。

进阶建议

当你熟悉基础后,可以尝试:

  • 添加更多参数(如 statepath
  • 调用系统命令(使用 module.run_command()
  • 处理文件或服务状态
  • 编写单元测试(使用 pytest + ansible-test

总结

通过本教程,你已经掌握了在 RockyLinux 上进行 Ansible模块开发 的基本流程。自定义模块能极大扩展 Ansible 的能力,实现更灵活的 自动化运维。记住,所有模块都应遵循幂等性原则(多次执行结果一致),并妥善处理错误。

现在,你可以尝试开发自己的模块了!无论是管理日志、部署应用,还是集成第三方 API,Python编写Ansible模块 都是你自动化工具箱中的强大武器。

Happy Automating with RockyLinux and Ansible!