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

什么是 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
:
执行以下命令: 你将看到类似输出: 当你熟悉基础后,可以尝试: 通过本教程,你已经掌握了在 RockyLinux 上进行 Ansible模块开发 的基本流程。自定义模块能极大扩展 Ansible 的能力,实现更灵活的 自动化运维。记住,所有模块都应遵循幂等性原则(多次执行结果一致),并妥善处理错误。 现在,你可以尝试开发自己的模块了!无论是管理日志、部署应用,还是集成第三方 API,Python编写Ansible模块 都是你自动化工具箱中的强大武器。 Happy Automating with RockyLinux and Ansible!---- 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:成功或失败时的标准返回方式。进阶建议
state
、path
) 调用系统命令(使用 module.run_command()
) 处理文件或服务状态 编写单元测试(使用 pytest
+ ansible-test
)总结
