温馨提示×

温馨提示×

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

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

怎样用Ansible写运维playbook

发布时间:2026-10-11 20:06:06 来源:亿速云 阅读:94 作者:小樊 栏目:系统运维

下面用一个由浅入深、偏实战的方式,教你如何用 Ansible 写运维 Playbook。


一、Ansible 核心概念(先理清)

概念 说明
Inventory 被管理主机清单
Playbook YAML 格式的自动化脚本
Task 最小执行单元
Module 具体功能(如 yum, copy, service)
Role 可复用的 Playbook 结构

二、最简 Playbook 示例

1️⃣ 主机清单 inventory.ini

[web]
192.168.1.10
192.168.1.11

[db]
192.168.1.20

2️⃣ 第一个 Playbook deploy.yml

- name: 安装并启动 Nginx
  hosts: web
  become: yes
  tasks:
    - name: 安装 nginx
      yum:
        name: nginx
        state: present

    - name: 启动 nginx
      service:
        name: nginx
        state: started
        enabled: yes

执行:

ansible-playbook -i inventory.ini deploy.yml

三、常用运维场景写法

✅ 1. 文件分发

- name: 拷贝配置文件
  copy:
    src: ./nginx.conf
    dest: /etc/nginx/nginx.conf
    owner: root
    mode: '0644'

✅ 2. 执行 Shell 命令

- name: 查看磁盘使用
  shell: df -h
  register: disk

- debug:
    var: disk.stdout_lines

✅ 3. 条件判断

- name: 仅 CentOS 安装 httpd
  yum:
    name: httpd
    state: present
  when: ansible_os_family == "RedHat"

✅ 4. 循环

- name: 创建多个用户
  user:
    name: "{{ item }}"
    state: present
  loop:
    - alice
    - bob
    - tom

✅ 5. 使用变量

vars:
  pkg_name: nginx

tasks:
  - name: 安装变量指定的包
    yum:
      name: "{{ pkg_name }}"
      state: present

命令行传参:

ansible-playbook deploy.yml -e "pkg_name=httpd"

四、稍微“专业一点”的写法(Role)

目录结构

roles/
└── nginx/
    ├── tasks/main.yml
    ├── handlers/main.yml
    ├── templates/nginx.conf.j2
    └── vars/main.yml

roles/nginx/tasks/main.yml

- name: 安装 nginx
  yum:
    name: nginx
    state: present

- name: 渲染配置
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify: restart nginx

site.yml

- hosts: web
  roles:
    - nginx

✅ Role 是生产环境推荐方式


五、Handlers(变更后触发)

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

六、运维 Playbook 实战例子(批量检查)

- name: 主机健康检查
  hosts: all
  tasks:
    - name: 内存使用
      shell: free -m
      register: mem

    - name: 输出内存
      debug:
        var: mem.stdout_lines

七、调试 & 常用技巧

# 只检查不执行
ansible-playbook play.yml --check

# 显示详细信息
ansible-playbook play.yml -v

# 从指定任务开始
ansible-playbook play.yml --start-at-task="安装 nginx"

八、适合运维的模块速查

模块 用途
yum/apt 软件安装
service 服务管理
copy/template 文件管理
lineinfile 修改配置行
cron 定时任务
user/group 用户管理
stat 文件状态判断

九、建议你下一步怎么学

  1. ✅ 写一个 “初始化服务器” Playbook(关防火墙、装基础包)
  2. ✅ 用 Role 拆分不同服务
  3. ✅ 接入 Vault 管理密码
  4. ✅ 结合 Jenkins / Git 做 CI/CD

如果你愿意,我可以:

  • ✅ 帮你写一个真实运维场景的 Playbook
  • ✅ 按 Linux / 数据库 / K8s 分类写示例
  • ✅ 帮你把现有 shell 脚本改成 Ansible

你现在是刚开始学,还是想直接写生产用的?

向AI问一下细节

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

AI
助
手