在Ansible系列的 第4部分中,我们将说明如何使用静态和动态清单来定义Ansible中的主机组。
在Ansible中 ,由Ansible控制节点控制的托管主机或服务器在主机清单文件中定义,如所述。主机清单文件是一个文本文件,由托管主机或远程服务器的主机名或IP地址组成。
托管主机可以列为单个条目,也可以按组名归类,我们将在后面看到。 在Ansible中,库存文件有两种类型: 静态和动态 。
让我们看一下其中的每一个,看看如何管理它们。 到目前为止,我们假设您已经在控制节点上安装了Ansible ,并配置了到托管主机的无密码SSH连接。
静态主机清单文件
在Ansible中 ,静态清单文件是纯文本文件,其中包含使用主机名或IP地址在主机组下声明的托管主机的列表。
主机组名称包含在方括号中,即[group name]
。 托管主机条目稍后在组名称下方列出,每个条目单独一行。 如前所述,使用主机名或IP地址列出了主机。
[group name]Host A ip_address Host B ip_addressHost c ip_address
为了便于说明,我们将创建一个静态清单文件。
# mkdir test_lab && cd test_lab# vim hosts
[webservers]173.82.115.165[database_servers]173.82.220.239[datacenter:children]webserversdatabase_servers
保存文件并退出。
如您在上面的清单文件中看到的,我们已经创建了2个主机组: webservers和database_servers 。 另外,我们还创建了一个称为数据中心的附加组,其中包括一组主机组,由Postfix': children'
表示。
Ansible还允许将主机组放置在组名下。 在上面的清单文件中, webservers和database_servers组已放置在数据中心下 。
注意 :将托管主机放在主机组中不是强制性的。 例如,您可以简单地使用它们的主机名或IP地址列出它们。
173.82.202.239172.82.115.165load_balancer.pnl.com
现在,让我们使用一些Ansible命令来引用主机清单文件。 库存管理的基本语法如下所示。
$ ansible {host-pattern} -i /path/of/inventory/file --list-hosts
例如,
$ ansible all -i /root/test_labs/hosts --list-hosts
或者,您可以使用通配符*
替换'all'
参数。
$ ansible * -i /root/test_labs/hosts --list-hosts
要列出组中的主机,请在主机模式位置指定主机组。
$ ansible webservers -i /root/test_labs/hosts --list-hosts
动态主机清单文件
在配置中,尤其是在诸如AWS之类的云设置中,随着添加或停用服务器,库存文件不断变化,在库存文件中定义的主机上保留选项卡成为一个真正的挑战。 返回主机文件并使用其IP地址更新主机列表变得很不方便。
这就是动态库存发挥作用的地方。 那么什么是动态库存? 动态清单是用Python,PHP或任何其他编程语言编写的Shell脚本。 它在AWS等云环境中派上用场,一旦虚拟服务器停止并再次启动,IP地址就会更改。
Ansible已经为公共云平台开发了清单脚本,例如Google Compute Engine,Amazon EC2实例,OpenStack,RackSpace,补鞋匠等。
动态库存比静态库存有什么优势?
- 当使用脚本收集信息时,动态清单可以很好地减少人为错误。
- 管理库存所需的精力最少。
您可以使用所选的编程语言编写自己的定制动态清单。 传递适当的选项后,广告资源应返回JSON格式。
利用现有的动态清单脚本
必须使用于创建动态清单的脚本可执行,以便Ansible可以使用它。
要检索有关动态清单脚本中的主机的信息,只需运行即可。
# ./script --list
如前所述,输出应为JSON,格式如下。
由组(即网络服务器,数据库服务器)组成的字典
- 每个组的托管主机列表
- 变量字典
元字典
- 主机和主机变量
样本输出
{ "webservers": { "hosts": [ "webserver1.example.com", "webserver2.example.com" ], "vars": {} }, "database_servers": { "hosts": [ "mysql_db1", "mysql_db2" ], "vars": {} }, "_meta": { "hostvars": { "mysql_db2": {}, "webserver2.example.com": {}, "webserver1.example.com": {}, "mysql_db1": {} } }}
结论
在本文中,我们演示了如何创建静态和动态清单。 总之,静态清单文件是纯文本文件,其中包含其编号和IP地址保持相当恒定的受管主机或远程节点的列表。
另一方面,动态主机文件会随着您添加新主机或停用旧主机而不断变化。 在停止和启动新的主机系统时,主机的IP地址也是动态的。 我们希望您能从本教程中学到知识。