1.2.2:Ansible 主机清单文件 hosts
hosts文件定义的是被管理主机的清单(Inventory)。改文件的路径由ansible.cfg
中的inventory
配置项定义。
关于如何创建主机清单的官方文档:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
1.2.2.1:hosts 文件路径的定义(inventory 配置项)
hosts文件的路径定义方式通常有两种:
- 默认配置文件
/etc/ansible/ansible.cfg
中,将inventory的路径也定义为默认路径,即/etc/ansible/hosts
,这个hosts文件中定义平时使用ansible命令行管理的主机; - 特定Ansible项目的配置文件
./ansible.cfg
中,将inventory的路径也定义为项目当前目录下的hosts文件,即./hosts
,这样当执行Ansible项目时,读取的就是自己的hosts文件。
1.2.2.2:常用的 behavioral inventory parameters
通过为主机清单中的特定主机设置behavioral inventory参数,来定义如何连接这个主机。
定义格式为:HOST PARAMETER1=VALUE1 PARAMETER2=VALUE2 ……
参数 | 说明 |
---|---|
ansible_connection | 定义Ansible连接该主机的SSH类型(smart、ssh、paramiko),默认为smart类型(如果定义ansible_connection=ssh,需要将ssh_config中的StrictHostKeyChecking设为no,使第一次验证密钥时直接信任被管理主机,而不用输入yes来确认)。 ansible_connection=local表示本地连接,无需SSH连接。 |
ansible_host | 当需要定义主机的别名时,使用ansible_host指定真正需要连接的主机IP地址(或主机名) |
ansible_port | 定义该主机的连接端口,比如,该主机的ssh端口不是默认的22,则使用ansible_port定义 |
ansible_user | 连接该主机时使用的SSH用户 |
ansible_password | 连接该主机时使用的SSH密码。在hosts中定义明文的密码是非常不建议的,最好使用SSH密钥或者询问密码的方式进行连接。 |
ansible_ssh_private_key_file | 指定SSH连接时使用的私钥文件。 |
ansible_become_password | sudo密码,同样不建议在hosts文件中保存密码,使用询问密码的方式进行sudo。 |
ansible_shell_type | 该被管理主机的shell类型(sh、csh、fish),默认为sh。 |
ansible_XX_interpreter | 设置被管理主机的解释器路径,包括python、ruby、perl等,设置的路径将会替换该主机上对应解释器的shebang。 如:ansible_python_interpreter=/usr/local/bin/python |
1.2.2.3:hosts 内容示例
hosts文件内容为ini风格,使用[GROUP_NAME]
来定义组名,每个组包含多个被管理主机;同时,一个被管理主机可以属于多个不同的组。
1.2.2.3.1:定义组
定义websrvs组:
[websrvs]
node101.yqc.com
node102.yqc.com
node103.yqc.com
1.2.2.3.2:使用列表定义主机
使用列表定义主机:
[websrvs]
node[101:103].yqc.com
1.2.2.3.3:组嵌套
组的嵌套(即定义一个组包含其它几个组),使用children定义:
testsrvs组中包含websrvs和dbsrvs组。
[websrvs]
node[101:103].yqc.com
[dbsrvs]
db[1:3].yqc.com
[testsrvs:children]
websrvs
dbsrvs
1.2.2.3.4:定义主机别名
比如,在调用主机时使用web1来指定主机,而web1对应的实际连接地址是node101.yqc.com。
[websrvs]
web1 ansible_host=node101.yqc.com
web2 ansible_host=node102.yqc.com
web3 ansible_host=node103.yqc.com
1.2.2.3.5:定义 inventory 参数
指定本地连接,无需ssh:
[websrvs]
192.168.1.101 ansible_connection=local
指定特定ssh连接参数:
[websrvs]
192.168.1.101 ansible_connection=ssh ansible_port=222 ansible_user=manage ansible_password=123456