一 Inventory配置文件
目标:按需定制ansible的inventory文件
(1)定义主机和组
# Inventory可以直接为IP地址
172.25.0.2
# 端口号不是默认22端口时,可明确的表示为:
server2:1000
server2 ansible_port=2222 ansible_host=172.25.0.2 # 携带变量
其他
# 定义主机和组
# 中括号表示一个组,也可以表示一个范围
[webserver]
www[1:10].example.com
db-[a:f].example.com
# 定义主机变量,可以在playbook中使用时对主机进行个性化定制
[webserver]
web1 http_port=8080 maxRequestsPerChild=1024
定义组变量
# 定义组变量
[webserver]
server2
server3
# 注意:vars是关键字-->注意格式
[webserver:vars]
ntp_server=time.aliyun.com
# 说明:webserver组中的所有主机ntp_server值为time.aliyun.com-->所有组的共性!
定义组嵌套及组变量
# 关键字
[webservers:children]
apache
nginx
[webservers:vars]
ntp_server=time1.aliyun.com
说明:组与组之间可以相互调用,并且可以向组中的主机指定变量。但是这些变量只能在Ansible-playbook中使用!
变量的检索位置
Inventory配置文件(默认/etc/ansible/hosts)
Playbook中vars定义的区域 # 常常采用
Roles中vars目录下的文件 # 常常采用
Roles同级目录group_vars和hosts_vars目录下的文件
# 说明:设置变量时尽量沿用同一种方式,方便后续维护!
Ansible与正则
# 匹配所有主机,all或*号功能相同。
ansible all –m ping
ansible "*" -m ping
ansible 172.25.0.* -m ping
# 对多台主机或多个组同时执行,相互之间用冒号分隔即可,根据上下文判断!
ansible "web1:web2" -m ping
# 在webserver组但不在database组的主机,用感叹号表示
ansible 'webservers:!database' -m ping
# 在webserver组和database组中同时存在的主机,用&符号表示
ansible "webservers:&database" -m ping
# 模糊匹配
*.example.com
www*.com:database