自动化运维工具Ansible使用(二)

Inventory配置

Inventory指的是Client服务器的信息。默认放在/etc/ansible/hosts文件中(如果不存在就创建一个)。这个文件存储了服务器的相关信息,使用类ini格式进行排版。可以进行分组,变量赋予等操作。下面给出典型的hosts文件进行说明:

# /etc/ansible/hosts

site-1 ansible_ssh_host=111.111.111.111 domain=zivers-1.com db=db-001
site-2 ansible_ssh_host=122.122.122.122 domain=zivers-2.com db=db-002
site-3 ansible_ssh_host=133.133.133.133 domain=zivers-3.com db=db-003
site-4 ansible_ssh_host=144.144.144.144 domain=zivers-4.com db=db-004
site-5 ansible_ssh_host=155.155.155.155 domain=zivers-5.com db=db-005

[group-all:children]
group-c
site-5

[group-a]
site-1
site-2

[group-b]
site-3
site-4

[group-c:children]
group-a
group-b

[group-b:vars]
zivers=false

在这个文件中,我们对Client服务器的信息进行了定义。

首先定义了5台Client服务器,并给予他们一些变量值。这五台服务器名分别为site-1,site-2,site-3,site-4,site-5,在执行ansible命令时就可以使用这个名字来直接执行,例如:

ansible site-1 -a 'date'

site-1后面就是有关这台服务器的一些变量配置,第一个是ansible自带的变量字段ansible_ssh_host,定义了服务器的IP地址。之后的两个变量domain和db是自定义的变量,这些变量可以在ansible执行的过程中很方便的使用。

比如,我的Client的服务器上,网站的文件被放在了网站域名对应的目录下:/var/www/site-1.com/。我现在需要查看这个目录下的内容,这样每个网站的命令并不相同,而我却需要批量执行:

ls /var/www/site-1.com/httpdocs
ls /var/www/site-2.com/httpdocs
ls /var/www/site-3.com/httpdocs
ls /var/www/site-4.com/httpdocs
ls /var/www/site-5.com/httpdocs

这时,我就可以使用刚才定义的变量来解决这个问题:

ansible group-all -a 'ls /var/www/{{ domain }}/httpdocs

这里我就使用了{{ domain }}这个变量来代替这些内容。

注意到,上面我的命令使用了group-all做为hosts。group-all是在hosts文件中定义的一个组。

Inventory中,组的定义和一般的ini文件相同,使用[ ]作为标识。组的内容可以是服务器也可以是其他组(也就是说,组与组之间可以嵌套),如果是嵌套,则需要加上”:children”进行说明。

最后,可以使用”:var”为组成员添加额外的属性。例如最后的:

[group-b:vars]
zivers=false

就为group-b中的所有成员添加了一个属性zivers,在命令中就可以使用这个属性了。调用方法依然是{{ zivers }}。

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注