编辑
2025-11-14
Ansible
00

目录

一、Playbook介绍
二、Playbook 的基本结构

一、Playbook介绍

在 Ansible 中,Playbook(剧本) 是用于定义复杂、流程化任务的配置文件,采用 YAML 格式编写。它可以将多个任务(如安装软件、配置文件、启动服务等)按顺序组织起来,实现自动化部署、配置管理或应用发布,是 Ansible 实现 “代码化运维” 的核心工具。

  • 为什么需要 Playbook?
  • ad-hoc 模式适合执行简单的临时命令,但面对以下场景时力不从心:
  • 多步骤任务(如 “安装软件 → 配置文件 → 启动服务 → 验证状态”);
  • 需要条件判断(如 “只在 CentOS 主机上执行某操作”);
  • 需要循环处理(如 “批量创建 10 个用户”);
  • 任务需要复用(如 “多环境部署同一套服务”)。
  • Playbook 则专门解决这些问题:它可以将任务 “代码化”,保存为文件,支持版本控制(如 Git),方便复用、修改和团队协作。
  • Playbook 的核心特点:
  • 声明式语法:描述 “目标状态”(如 “确保 Nginx 已安装且启动”),而非 “具体步骤”(Ansible 会自动处理实现过程)。
  • 幂等性:多次执行同一 Playbook,结果始终一致(不会重复操作或报错)。
  • 可扩展性:支持变量、条件判断、循环、模板、角色(Role)等高级功能。
  • 可读性强:YAML 格式简洁直观,即使非技术人员也能大致看懂内容。

二、Playbook 的基本结构

yml
# 示例:部署 Nginx 的 Playbook(nginx.yml) - name: 部署 Nginx 服务 # Play 的名称(描述此 Play 的作用) hosts: elk1 # 目标主机/组(对应 hosts 文件中的定义) remote_user: root # 远程执行用户 vars: # 变量定义(可在任务中引用) nginx_port: 80 tasks: # 任务列表(按顺序执行) - name: 安装 Nginx # 任务名称(描述此步骤的作用) yum: # 调用 yum 模块 name: nginx state: present # 确保已安装(幂等性:已安装则不重复操作) - name: 复制 Nginx 配置文件 copy: src: ./nginx.conf # 控制机本地配置文件 dest: /etc/nginx/nginx.conf notify: 重启 Nginx # 若配置文件变化,触发 Handler - name: 确保 Nginx 服务启动并开机自启 service: name: nginx state: started enabled: yes handlers: # 处理器(仅在被 notify 触发时执行,通常用于重启服务) - name: 重启 Nginx service: name: nginx state: restarted
js
ansible-playbook <playbook文件名.yml>
  • Play:一个 Playbook 可以包含多个 Play(用 - 开头),每个 Play 定义 “对哪些主机执行哪些任务”。
  • name:Play 的描述(可选,便于阅读)。
  • hosts:指定目标主机 / 组(如 webservers、elk1,必须存在于 hosts 文件中)。
  • remote_user:远程执行任务的用户(可覆盖 ansible.cfg 配置)。
  • Tasks:任务列表,是 Play 的核心,按顺序执行。每个任务包含:
  • name:任务描述(可选,但强烈建议写,便于调试和阅读)。
  • 模块调用:如 yum、copy、service 等,模块参数根据需求填写。
  • notify:当任务导致远程主机状态变化时(如配置文件被修改),通知 handlers 中的某个处理器执行(如重启服务)。
  • Vars:变量定义,用于存储可复用的值(如端口号、文件路径),在任务中用 {{ 变量名 }} 引用(例如 {{ nginx_port }})。
  • Handlers:处理器,本质是特殊的任务,仅在被 notify 触发时执行(通常用于 “配置变化后重启服务” 等场景),避免不必要的重复操作。

本文作者:松轩(^U^)

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

Document