本文对常见的Ansible中Inventory配置相关内容整理如下
1. 配置文件位置
默认的文件路径为 /etc/ansible/hosts
除此之外还可以使用动态Inventory,如有这个需求可以参考Ansible中文指南网站:http://www.ansible.com.cn/docs/intro_dynamic_inventory.html
2. 配置文件格式
方括号“[]”中表示组名,其下方是主机配置,一个主机可以属于多个不同的组。
组内参数通过“[组名:vars]”格式表示。
组的包含关系通过“[组名:children]”格式表示,其下方是成员组。
3. 指定主机SSH端口
如果主机SSH端口不是默认22端口,可以在主机后添加“:端口”指明端口号,例如:abcd.example.com:9922
注:ansible使用Paramiko进行ssh连接时,不会使用你SSH配置文件中列出的端口,但是如果修改ansible使用openssh进行ssh连接时将会使用
4. 指定主机别名
如果打算给主机起别名给ansible使用,格式如下
web1 ansible_ssh_port = 3333 ansible_ssh_host = 192.168.1.2
注:实际上这是在使用主机变量
5. 指定主机范围
可以按照如下格式对主机名中部分字符进行范围匹配
[webservers]
www[01:50].yanruogu.com
[databases]
db-[a:f].yanruogu.com
6. Inventory自带变量说明
ansible_ssh_host #用于指定被管理的主机的真实IP
ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user #ssh连接时默认使用的用户名
ansible_ssh_pass #ssh连接时的密码
ansible_sudo_pass #使用sudo连接用户时的密码
ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_ssh_private_key_file #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type #目标系统的shell的类型,默认sh
ansible_connection #SSH 连接的类型: local ,
ssh , paramiko,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提)
ansible_python_interpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径
ansible_*_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里"*"可以是ruby或才perl等其他语言
使用方法例如:
[test]
192.168.1.1 ansible_ssh_user=root ansible_ssh_pass='P@ssw0rd'
192.168.1.2 ansible_ssh_user=breeze ansible_ssh_pass='123456'
192.168.1.3 ansible_ssh_user=bernie ansible_ssh_port=3055
ansible_ssh_pass='456789'
7. 主机变量的使用
可以在主机后边追加变量k/v,如:
[websvrs]
192.168.1.1 https_port=8443 max_threads=8
8. 组内变量的使用
通过“[组名:vars]”的方式定义组内变量
[test]
host1
host2
[test:vars]
ntp_server=192.168.1.10
proxy=192.168.1.20
9. 组内包含与组内变量
[haidian]
web1
web2
[yizhuang]
web4
web3
[beijing:children]
haidian
yizhuang
[beijing:vars]
ntp_server=192.168.1.10
zabbix_server=192.168.1.10
[china:children]
beijing
shanghai
上面的示例中,指定了海淀机房有web1、web2;亦庄机房有web3、web4主机;又指定了一个北京组代表北京地区数据中心,同时包含海淀和亦庄机房;为该组内的所有主机指定了2个vars变量。之后设定了一个组中国组,包含北京和上海两地数据中心。
注:vars变量主要用在ansible-playbook中,不支持ad-hoc。
10. 单独的变量文件或目录
在 inventory 主文件中保存所有的变量并不是最佳的方式。还可以保存在独立的文件中,这些独立文件与 inventory 文件保持关联。
配置文件名称要跟主机或组名完全相同。
主机变量文件应放在:/etc/ansible/host_vars
组内变量文件应放在:/etc/ansible/ group_vars
例如创建文件“/etc/ansible/group_vars/raleigh”来保存raleigh组的组内变量
vim /etc/ansible/group_vars/raleigh
---
ntp_server: acme.example.org
database_server: storage.example.org
如果使用变量目录,变量的目录名要跟主机或组的名字完全相同,目录内部的配置文件名可以自行命名。
注:分文件定义变量的方式只适用于 Ansible 1.4 及以上版本
例如创建目录“/etc/ansible/group_vars/raleigh/”来保存raleigh组的组内变量,那么还需要再创建一个“/etc/ansible/group_vars/raleigh/db_settings”文件保存raleigh组的数据库配置相关变量
vim /etc/ansible/group_vars/raleigh/db_settings
---
ntp_server: acme.example.org
database_server: storage.example.org