1. -i inventory
指定配置文件
默认情况下,Ansible 会去 /etc/ansible/hosts
找主机清单。
如果你有自己写的,比如 inventory.ini
,执行时要指定:
ansible -i inventory.ini all -m ping
这样它就用你给的文件。
2. all
的含义
all
并不是你 inventory 里写的一个组,而是 Ansible 内置的 隐含组:
all
= 你在 inventory 文件里定义的 所有主机。
3. inventory 里有重复主机会怎样?
Ansible 会自动去重,不会执行两遍。
- 如果你在
[webservers]
和[dbservers]
里都写了192.168.1.10
, - 执行
ansible all -m ping
时,它只会对192.168.1.10
执行一次。
不过:
- 主机还是会出现在两个组里,查询组的时候你会看到它属于多个组。
4. 只执行某个组
假设你 inventory 里有:
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
192.168.1.20
如果你只想执行 webservers 组:
ansible -i inventory.ini webservers -m ping
只想执行 dbservers 组:
ansible -i inventory.ini dbservers -m ping
5. 指定某台主机
你也可以直接写 IP 或主机名,不用组:
ansible -i inventory.ini 192.168.1.10 -m ping
6. 多组/逻辑表达式
Ansible 支持在命令里写组的组合:
同时执行多个组:
ansible -i inventory.ini "webservers:dbservers" -m ping
执行两个组的交集(属于两个组的主机):
ansible -i inventory.ini "webservers:&dbservers" -m ping
执行属于 webservers 但不属于 dbservers 的主机:
ansible -i inventory.ini "webservers:!dbservers" -m ping
总结
all
= 所有主机-i inventory.ini
用来指定清单文件- 重复主机不会执行两遍
- 想只执行一个组,直接写组名
- 想执行单个主机,直接写主机名/IP
- 想做更复杂的选择,可以用组表达式(
:
、&
、!
)