一、最常用 TOP 10(每天必用)
| 命令 | 使用频率 | 说明 |
|---|---|---|
ansible all -m ping |
⭐⭐⭐⭐⭐ | 测试所有主机 SSH 连通性 |
ansible-playbook site.yml |
⭐⭐⭐⭐⭐ | 执行 Playbook |
ansible-playbook site.yml --check |
⭐⭐⭐⭐ | 模拟执行,看会改什么(不实际改动) |
ansible-playbook site.yml --syntax-check |
⭐⭐⭐⭐ | 检查 Playbook 语法是否有误 |
ansible all -m shell -a "df -h" |
⭐⭐⭐⭐ | 在所有主机上执行系统命令(查磁盘/内存等) |
ansible web -m systemctl -a "name=nginx state=restarted" |
⭐⭐⭐⭐ | 重启指定服务(替代手动的 systemctl) |
ansible web -m copy -a "src=./app.conf dest=/etc/" |
⭐⭐⭐⭐ | 批量分发配置文件 |
ansible-playbook site.yml --limit web-01 |
⭐⭐⭐⭐ | 只在单台或部分主机上执行 |
| `ansible-doc -l | grep 关键词` | ⭐⭐⭐ |
ansible-playbook site.yml -vv |
⭐⭐⭐ | 执行失败时查看详细错误日志 |
二、Ad-Hoc 临时命令(日常运维)
查系统状态:
bash
ansible all -m shell -a "uptime" # 查看负载
ansible all -m shell -a "free -h" # 查看内存
ansible all -m shell -a "df -h" # 查看磁盘
ansible all -m shell -a "ps aux | grep nginx" # 查看进程
ansible all -m shell -a "netstat -tlnp" # 查看端口监听
文件/目录操作:
bash
ansible all -m file -a "path=/tmp/test state=directory" # 创建目录
ansible all -m file -a "path=/tmp/test state=absent" # 删除文件/目录
ansible all -m file -a "path=/tmp/test owner=root mode=755" # 修改权限
ansible all -m copy -a "src=/local/hosts dest=/tmp/" # 上传文件
ansible all -m fetch -a "src=/var/log/messages dest=/tmp/" # 下载文件到本地
软件包管理:
bash
ansible all -m yum -a "name=nginx state=present" # CentOS 安装
ansible all -m apt -a "name=nginx state=present" # Ubuntu 安装
ansible all -m yum -a "name=nginx state=latest" # 升级到最新
ansible all -m yum -a "name=nginx state=absent" # 卸载
服务管理:
bash
ansible all -m systemctl -a "name=nginx state=started enabled=true" # 启动并设置开机自启
ansible all -m systemctl -a "name=nginx state=stopped" # 停止
ansible all -m systemctl -a "name=nginx state=restarted" # 重启
ansible all -m systemctl -a "name=nginx state=reloaded" # 重载配置
用户管理:
bash
ansible all -m user -a "name=deploy state=present" # 创建用户
ansible all -m user -a "name=deploy state=absent remove=yes" # 删除用户(删家目录)
ansible all -m user -a "name=deploy groups=sudo" # 添加到组
三、Playbook 执行(日常工作流)
最常用的组合:
bash
# 1. 先查语法
ansible-playbook site.yml --syntax-check
2. 看会影响到哪些主机
ansible-playbook site.yml --list-hosts
3. 看会执行哪些任务
ansible-playbook site.yml --list-tasks
4. 模拟运行(看差异)
ansible-playbook site.yml --check --diff
5. 正式执行(只跑一台,灰度)
ansible-playbook site.yml --limit web-01
6. 正式全量执行
ansible-playbook site.yml
常用参数搭配:
bash
# 指定 inventory 文件
ansible-playbook site.yml -i production/hosts.yml
传递变量(覆盖默认值)
ansible-playbook site.yml -e "env=prod version=v2.1"
只执行打了某标签的任务
ansible-playbook site.yml --tags "restart"
跳过某标签
ansible-playbook site.yml --skip-tags "debug"
从某个任务开始执行(故障续跑)
ansible-playbook site.yml --start-at-task="Install packages"
增加并发数(默认 5)
ansible-playbook site.yml -f 20
四、查文档与调试(遇到问题必用)
查模块用法:
bash
ansible-doc -l # 列出所有模块(太多了,一般加 grep)
ansible-doc -l | grep copy # 查找 copy 相关模块
ansible-doc copy # 看 copy 模块完整文档
ansible-doc -s copy # 只看 copy 模块的参数(最实用)
ansible-doc shell # 看 shell 模块文档
查看主机清单:
bash
ansible-inventory --list # 查看当前所有主机和变量
ansible-inventory --graph # 树形结构查看组关系
ansible all --list-hosts # 列出 all 组下所有主机
收集/查看主机信息(Facts):
bash
ansible web-01 -m setup # 收集这台主机的所有系统信息
ansible web-01 -m setup -a "filter=*ipv4*" # 只看 IP 相关信息
ansible web-01 -m setup -a "filter=ansible_os_family" # 只看操作系统系列
五、敏感信息(Vault 常用操作)
bash
ansible-vault encrypt secrets.yml # 加密文件
ansible-vault decrypt secrets.yml # 解密文件
ansible-vault view secrets.yml # 查看加密内容(不解密到磁盘)
ansible-vault edit secrets.yml # 编辑加密文件
ansible-vault encrypt_string 'MyP@ssw0rd' --name 'db_password' # 加密单字符串
执行带加密文件的 Playbook:
bash
ansible-playbook site.yml --ask-vault-pass
# 或从文件读密码(CI/CD 用)
ansible-playbook site.yml --vault-password-file .vault_pass
六、角色与集合(复用别人代码)
bash
# 初始化一个自己的角色骨架
ansible-galaxy init my_role
从 Galaxy 安装别人写的角色
ansible-galaxy role install geerlingguy.nginx
安装 Collection(新标准)
ansible-galaxy collection install community.general
查看已安装的内容
ansible-galaxy role list
ansible-galaxy collection list
七、快速诊断三板斧
当 Playbook 执行失败时,按顺序执行:
- 看语法 :
ansible-playbook site.yml --syntax-check - 看连通性 :
ansible 目标主机 -m ping - 看详细报错 :
ansible-playbook site.yml -vv(v 越多越详细,最多-vvvv)
八、个人常用命令速记口诀
查、测、拟、限、行
------ 查语法 → 测连通 → 模拟跑 → 限制范围 → 正式执行
日常执行固定套路:
-
检查语法
ansible-playbook site.yml --syntax-check -
预览变更 (全量模拟)
ansible-playbook site.yml --check --diff -
实际执行第一台
ansible-playbook site.yml --limit web-01 -
验证无误后,逐步扩大范围
ansible-playbook site.yml --limit web-01,web-02最后全量:
ansible-playbook site.yml
某个模块的具体用法记不清了,用 ansible-doc -s 模块名 查参数。