1. 批量安装软件
场景:我要在所有 Web 服务器上装 nginx。
Playbook:
- hosts: webservers # 作用的主机组(定义在 inventory 里)
become: yes # 需要 sudo 提权
tasks:
- name: 安装 nginx
apt: # apt 是 Ubuntu/Debian 的包管理模块
name: nginx # 软件名字
state: present # 确保 nginx 已安装(不存在就装,存在就不动)
执行:
ansible-playbook install_nginx.yml
结果:
Ansible 登录 webservers 里的每台机器 → 检查 nginx → 如果没装就安装,有就跳过 → 保证所有机器状态一致。
2. 批量修改配置文件
场景:我要在所有服务器的 /etc/motd 文件里写一句“禁止随意登录”。
Playbook:
- hosts: all
become: yes
tasks:
- name: 设置登录提示信息
copy: # 复制文件/写入内容的模块
content: "禁止随意登录!\n"
dest: /etc/motd
执行:
ansible-playbook set_motd.yml
结果:
所有服务器的 /etc/motd 文件内容被替换为“禁止随意登录!”。以后你 SSH 登录时,会看到这句话。
3. 批量执行命令
场景:我要查看所有服务器的磁盘空间。
命令行方式(不用写 playbook):
ansible all -m shell -a "df -h"
结果:
所有服务器都会执行 df -h,Ansible 会把结果汇总打印出来,你不用一台台登录去看。
4. 部署应用(有顺序)
场景:我要部署一个网站,步骤是:
- 安装 nginx
- 上传配置文件
- 启动 nginx
Playbook:
- hosts: webservers
become: yes
tasks:
- name: 安装 nginx
apt:
name: nginx
state: present
- name: 上传 nginx 配置文件
copy:
src: ./nginx.conf
dest: /etc/nginx/nginx.conf
- name: 重启 nginx
service:
name: nginx
state: restarted
执行:
ansible-playbook deploy_website.yml
结果:
Ansible 会自动按顺序跑完三步 → 部署完成。
5. 用户管理
场景:我要在所有服务器上创建一个叫 devuser 的账号。
Playbook:
- hosts: all
become: yes
tasks:
- name: 创建用户 devuser
user:
name: devuser
shell: /bin/bash
state: present
执行:
ansible-playbook add_user.yml
结果:
所有服务器都会多一个 devuser 用户。
总结
Ansible 的核心思路是:
- 你写 Playbook(YAML 文件) → 描述“最终想要的状态”;
- Ansible 会 自动执行任务 → 把所有机器调到这个状态;
- 不需要你一台台手工操作。
