Ansible Inventory详解

Inventory文件用来定义你想控制管理的服务器,默认配置文件是/etc/ansible/hosts,如下是一个简单的例子:

[test]
10.0.3.56

[zabbix]
10.0.1.30

[web]
10.0.2.57

[zabbix], [web]是对服务器分组的名称,指定组名。主机可以直接用ip地址,也可以用域名,还可以用数字和字母指定一批连续的服务器,如:

blog[1:3].os.com  相当于blog1.os.com  blog2.os.com blog3.os.com

我们已经了解到,Ansible默认是通过ssh的方式来远程管理批量服务器的,所以我们这里使用ssh key加密的方式来进行ssh的认证会更方便,当然,你也可以选择使用Ansible的时候加-k选项,来通过交互的方式输入密码。

Ansible已经可以通过密钥的方式管理主机后,我们就可以用Ansible直接来做一些简单的测试,如下:

ansible all -m ping  # 用于检测所有的主机是否存活,all默认指所有主机

如果只想检测某个组的话,可以把all替换成组名,例如:

ansible test -m ping

当然也可以直接输入管理主机的ip地址,例如:

ansible 10.0.3.56 -m ping

在默认的情况下Ansible是使用root用户来进行远程管理的,在大多数情况下,为了安全起见,一般会使用一个普通账户来管理。

我们可以在所有的被管理的机器上面创建一个ansible的用户,并且可以使用sudo来提升权限到root。当然我们在Ansible主机上面也需要这样一个用户,并且为其生成ssh key

然后通过修改/etc/ansible/ansible.cfg配置文件中的remote_user = ansibleAnsible默认使用ansible用户来进行管理,然后使用--sudo参数来获取root权限。

你也可以通过修改/etc/ansible/ansible.cfg里的remote_port端口来修改默认远程管理的ssh22端口。

一切完成后你就可以测试了:

ansible all -m ping --sudo

如果多台主机的管理账户各有不同的话,我们也可以在Inventory文件中处理,分割进行设置,例子如下:

[webserver]
10.0.1.3 ansible_ssh_user=root
10.0.2.3 ansible_ssh_user=nock
10.0.3.3 ansible_ssh_host=10.0.3.3 ansible_ssh_port=22000

[production]
10.0.1.3
10.0.2.3
aliyun-bj-tomcat1 ansible_ssh_user=work ansible_ssh_private_key_file=/home/work/.ssh/id_rsa

简单说明:

ansible_ssh_user —-> 用于管理远程主机的用户名
ansible_ssh_host —-> 用于指定被管理主机的端口
ansible_ssh_port —-> 用于指定ssh连接端口
ansible_ssh_private_key_file —-> 指定ssh key文件
host_key_checking=False 当你第一次连接远程主机的时候,会提示yes/no,设置为False会跳过这个环节。

主机组直接还可以嵌套,需要使用关键字children,示例:

[aliyunhost:children]
aliyunhost-mysql
aliyunhost-web
aliyunhost-redis

[aliyunhost-mysql]
10.0.1.81
10.0.1.82
10.0.1.88
10.0.1.89
10.0.1.96
10.0.1.107

[aliyunhost-web]
10.0.1.104
10.0.1.105

[aliyunhost-redis]
10.0.1.181
10.0.1.18

我们也可以通过多个Inventory文件来进行主机管理,默认是/etc/ansible/hosts,如果多个管理文件,需要执行ansible命令的时候,通过-i参数来指定:

ansible -i /etc/ansible/hosts2 -m ping

关于host就讲到这里,这是用来管理客户端的。

0 个评论

要回复文章请先登录注册