本文介绍一下Ansible的多机器选取和切片特性,这个还是一个比较有用的技巧,可以快速选取仓库中我们需要的机器清单。
因为该特性可能与其他工具语法稍微有些不一样,时间长了会忘,值得记录一下
根据官网的介绍,选取机器或机器组使用的符号无外乎:“ *? :? !? &” ,这几种符号覆盖了常用的逻辑,比较好理解
描述 | 例子???????? | 效果 |
---|---|---|
所有主机 | all (or *) | 选取所有主机 |
单个主机 | host1 | 选取了host1这台主机 |
多个主机 | host1:host2 (or host1,host2) | 选取了host1和host2两台,注意这里的:不表示范围 |
一组主机???????? | webservers | 选取名为webservers的主机组 |
多组主机 | webservers:dbservers | 使用:来选取多个主机组,把:当,理解就行 |
排除某个主机 | webservers:!atlanta | 选取在web组中没有出现在atl组的机器 |
选取主机组的交集 | webservers:&staging | 选取同时在两个组中的机器 |
以上逻辑可以复合使用,比如Group1:Group2:&Group3:!Group4
另外ansible也支持对机器组进行切片,不过注意,这里的切片首尾关系和Python稍微不同。
这三台机器为例:
[webservers]
cobweb
webbing
weber
webservers[0:2] # == webservers[0],webservers[1],webservers[2] # == cobweb,webbing,weber webservers[1:2] # == webservers[1],webservers[2] # == webbing,weber webservers[1:] # == webbing,weber webservers[:3] # == cobweb,webbing,weber
我们这里以Python切片做对比,可以发现Ansible的切片“顾头也顾尾”,但是Python切片索引“顾头不顾尾”
list = [0,1,2,3,4,5]
print(list[1:2])
# [1]
print(list[1:])
# [1, 2, 3, 4, 5]
print(list[:4])
# [0, 1, 2, 3]