震惊!我用一个脚本干掉了手写 Ansible 剧本的痛苦!
在日常的运维工作中,我们经常会和Ansible打交道。
不管是批量部署服务、修改配置文件,还是重启集群中的服务节点,Ansible的“自动化”确实帮我们省下了不少时间。
但是——每次都要手写一份新的Playbook,是不是让你也头大过?😅

🚨 手写剧本的“重复劳动”
还记得上个月,我接到这样一个需求:
“帮我在 web 集群上批量安装 Nginx,然后再启动一下服务。”
好嘛,这看似简单的一句话,对运维来说,就是要写这样一个 deploy_nginx.yml:
- name: 部署Nginx
hosts: webservers
become: true
tasks:
- name: 安装Nginx
yum:
name: nginx
state: present
- name: 启动Nginx
service:
name: nginx
state: started
写一次没问题,但问题在于:
- 明天要安装 Redis;
- 后天要部署 Node;
- 再过几天要批量拷贝配置文件……
每次都是复制粘贴改一改,改错一个缩进,ansible-playbook 就直接报错。 更别说临时任务多的时候,一天下来Playbook目录能塞满几十个 .yml 文件,看着都累。
这时候我心想:
“这些任务的逻辑都差不多,能不能用脚本自动生成Playbook?”
于是,干就完了。💪
💡 让脚本替我“写”剧本
我给自己定了三个目标:
- 简单交互即可生成剧本,不再手写
YAML; - 支持多任务,比如一
Playbook包含“安装 + 启动 + 配置”; - 支持模板化,常见任务(安装、拷贝、执行命令)都能复用。
经过几天折腾,一个名为 generator_playbook.py 的小工具诞生了。 它的功能很简单——根据用户输入自动生成Ansible剧本。
🧠 像点餐一样“生成剧本”
运行命令:
python3 generator_playbook.py
终端会弹出交互界面:

接着,它会列出可选模板:

选择一个,比如“安装软件包”,然后输入参数:

最后生成的Playbook文件就长这样👇:
- name: Web集群部署
hosts: webservers
become: true
tasks:
- name: 安装Nginx
yum:
name: nginx
state: present
- name: 重启Nginx
service:
name: nginx
state: restarted
是不是很整齐?
整个过程不到 分钟,再也不用担心写错缩进或忘加冒号。
⚙️ 模板驱动的 YAML 生成
脚本的核心是模板化设计。
每种常见任务(比如安装、拷贝、执行命令)都有预设模板:
TEMPLATES = {
"install_package": {
"desc": "安装软件包",
"module": "yum",
"args": {"name": "", "state": "present"}
},
"copy_file": {
"desc": "复制文件到远程主机",
"module": "copy",
"args": {"src": "", "dest": ""}
},
"run_command": {
"desc": "执行 Shell 命令",
"module": "shell",
"args": {"cmd": ""}
}
}
用户只需填写参数,脚本就能自动组装出YAML结构,然后用 PyYAML 库输出成标准的Playbook文件。
逻辑清晰、扩展方便 —— 新增模板只要加一段配置就行!
⚡ 让自动化更“自动”
自从用了这个工具,我的工作效率真的是“肉眼可见”的提升。
过去:
- 每次写剧本要10分钟;
- 重复任务还容易抄错;
- 多人协作剧本风格不统一。
现在:
- 1分钟生成 Playbook;
- 风格统一,参数清晰;
🌟 小结
Ansible是自动化的基础,而这个工具,是“让自动化更自动”的一步。 我们不再被YAML文件牵着鼻子走,而是通过模板思维,让任务生成更灵活、更高效。
这其实正体现了运维工作的一个核心理念:
“不要重复造轮子,而要造一个能自动造轮子的轮子。”
所以,当你下一次再打开编辑器准备手写 playbook.yml 时,不妨试试让 Python 帮你写—— 毕竟,懒惰是推动自动化进步的第一生产力。
⚡⚡⚡福利
脚本以上传到gitee:
地址是:https://gitee.com/didiplus/script.git