在日常的运维工作中,我们经常会和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?”

于是,干就完了。💪

💡 让脚本替我“写”剧本

我给自己定了三个目标:

  1. 简单交互即可生成剧本,不再手写 YAML
  2. 支持多任务,比如一 Playbook包含“安装 + 启动 + 配置”;
  3. 支持模板化,常见任务(安装、拷贝、执行命令)都能复用。

经过几天折腾,一个名为 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