温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样写Ansible playbook

发布时间:2026-09-21 05:31:50 来源:亿速云 阅读:88 作者:小樊 栏目:系统运维

下面我用由浅入深 + 示例的方式,教你如何写 Ansible Playbook。


一、Playbook 是什么?

Playbook 是 Ansible 的“剧本”,用 YAML 格式编写,用来定义:

  • 在哪些主机上
  • 以什么用户
  • 执行哪些任务(模块)

一句话:

Playbook = 一批有序的自动化操作


二、最小可用 Playbook 示例

示例 1:在 web 服务器上安装 nginx

---
- name: Install nginx
  hosts: web
  become: yes
  tasks:
    - name: Install nginx package
      apt:
        name: nginx
        state: present

执行:

ansible-playbook playbook.yml

三、Playbook 的基本结构

---
- name: Play 的名称
  hosts: 主机组
  become: true/false
  vars:
    变量
  tasks:
    - name: 任务名
      模块:
        参数

核心组成

部分 作用
name 给人看的描述
hosts 目标主机(inventory 中定义)
become 是否提权(sudo)
vars 变量
tasks 具体任务

四、常用模块示例

1️⃣ 文件操作

- name: Create file
  file:
    path: /tmp/test.txt
    state: touch

2️⃣ 复制文件

- name: Copy config
  copy:
    src: nginx.conf
    dest: /etc/nginx/nginx.conf

3️⃣ 启动服务

- name: Start nginx
  service:
    name: nginx
    state: started
    enabled: yes

4️⃣ 执行命令

- name: Run command
  command: uptime

五、使用变量(vars)

---
- hosts: web
  vars:
    pkg_name: nginx
  tasks:
    - name: Install package
      apt:
        name: "{{ pkg_name }}"
        state: present

六、使用循环(loop)

tasks:
  - name: Create users
    user:
      name: "{{ item }}"
      state: present
    loop:
      - alice
      - bob
      - tom

七、条件判断(when)

- name: Restart nginx on Ubuntu
  service:
    name: nginx
    state: restarted
  when: ansible_os_family == "Debian"

八、Handlers(触发器)

tasks:
  - name: Copy nginx config
    copy:
      src: nginx.conf
      dest: /etc/nginx/nginx.conf
    notify: Restart nginx

handlers:
  - name: Restart nginx
    service:
      name: nginx
      state: restarted

只有任务“发生变化”时,handler 才会执行


九、多 Play 示例

---
- name: Setup web
  hosts: web
  tasks:
    - name: Install nginx
      apt:
        name: nginx

- name: Setup db
  hosts: db
  tasks:
    - name: Install mysql
      apt:
        name: mysql-server

十、推荐写法(最佳实践)

✅ 用 name 描述每一步
✅ 尽量用模块,不用 command/shell
✅ 使用 become 而不是手动 sudo
✅ 拆分 roles(复杂项目)


十一、学习路径建议

  1. 先写单 Playbook
  2. 再学变量 / loop / when
  3. 然后学 Roles
  4. 最后学 Vault / Tags / Handlers

如果你愿意,可以告诉我:

  • 你是 Linux / Windows
  • 想自动化的 具体场景(如部署网站、装数据库)
  • 是否使用 宝塔 / Docker / K8s

我可以直接帮你写一份 可用 Playbook

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI