场景:我要在所有 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 → 如果没装就安装,有就跳过 → 保证所有机器状态一致。
场景:我要在所有服务器的 /etc/motd 文件里写一句“禁止随意登录”。
Playbook:
- hosts: all
become: yes
tasks:
- name: 设置登录提示信息
copy: # 复制文件/写入内容的模块
content: "禁止随意登录!\n"
dest: /etc/motd
执行:
ansible-playbook set_motd.yml
结果:
所有服务器的 /etc/motd 文件内容被替换为“禁止随意登录!”。以后你 SSH 登录时,会看到这句话。
场景:我要查看所有服务器的磁盘空间。
命令行方式(不用写 playbook):
ansible all -m shell -a "df -h"
结果:
所有服务器都会执行 df -h,Ansible 会把结果汇总打印出来,你不用一台台登录去看。
场景:我要部署一个网站,步骤是:
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 会自动按顺序跑完三步 → 部署完成。
场景:我要在所有服务器上创建一个叫 devuser 的账号。
Playbook:
- hosts: all
become: yes
tasks:
- name: 创建用户 devuser
user:
name: devuser
shell: /bin/bash
state: present
执行:
ansible-playbook add_user.yml
结果:
所有服务器都会多一个 devuser 用户。
Ansible 的核心思路是: