Ansible 是一个强大且易用的自动化运维工具,广泛用于配置管理、应用部署和任务自动化。虽然 Ansible 自带了大量官方模块,但在实际工作中,我们常常需要根据业务需求开发自己的模块。本教程将带你从零开始,在 Ubuntu 系统上开发一个简单的 Ansible 自定义模块,即使你是编程小白,也能轻松上手!
在开始之前,请确保你的 Ubuntu 系统已安装以下软件:
你可以通过以下命令检查是否已安装:
$ python3 --version$ ansible --version 如果没有安装 Ansible,可以使用以下命令安装:
$ sudo apt update$ sudo apt install ansible -y Ansible 模块本质上是一个 Python 脚本(也可以是其他语言),它接收 JSON 格式的输入,并返回 JSON 格式的输出。模块必须满足以下要求:
为了简化开发,Ansible 提供了 AnsibleModule 辅助类,它能自动处理参数解析、日志记录和结果返回。
我们将创建一个名为 hello_world.py 的简单模块,它接收一个 name 参数,并返回一条问候语。
首先,创建模块目录结构。Ansible 默认会在以下路径查找自定义模块:
your_project/├── library/│ └── hello_world.py└── playbook.yml 现在,创建 library/hello_world.py 文件,内容如下:
#!/usr/bin/python3from 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'] # 执行逻辑(这里只是构造返回信息) greeting = f"Hello, {name}! Welcome to Ubuntu Ansible模块开发!" # 返回结果 module.exit_json(changed=False, msg=greeting)if __name__ == '__main__': main() 代码说明:
argument_spec 定义了模块接受的参数及其类型supports_check_mode=True 表示该模块支持 Ansible 的 check mode(预演模式)module.exit_json() 用于正常返回结果,changed=False 表示系统状态未改变在项目根目录下创建 playbook.yml:
---- name: Test custom hello_world module hosts: localhost connection: local tasks: - name: Say hello hello_world: name: "Alice" register: result - name: Print result debug: var: result.msg 运行 Playbook:
$ ansible-playbook playbook.yml 你应该会看到类似以下的输出:
ok: [localhost] => { "result.msg": "Hello, Alice! Welcome to Ubuntu Ansible模块开发!"} 当你熟悉基础后,可以尝试更复杂的功能,例如:
module.run_command())module.atomic_move())module.fail_json())记住:模块应尽量保持幂等性(多次执行结果一致),这是 Ansible 的核心原则之一。
通过本教程,你已经学会了如何在 Ubuntu 系统上开发一个简单的 Ansible 自定义模块。无论是进行 Ubuntu Ansible模块开发、探索 Ansible自定义模块 的可能性,还是深入 Python Ansible开发,这都是迈向高级自动化运维的重要一步。希望这篇 自动化运维教程 能为你打下坚实基础!
下一步建议:阅读 Ansible 官方文档中的 Developing Modules 章节,尝试开发更实用的模块,如管理服务、操作数据库或调用 API。
本文由主机测评网于2025-12-02发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122030.html