在Ansible系列的第4部分中,我们将说明如何使用静态和动态清单来定义Ansible中的主机组。
![](https://img.haomeiwen.com/i3275724/22e84c538d3d4317.png)
在Ansible中,由Ansible控制节点控制的托管主机或服务器在主机清单文件中定义,如所述。主机清单文件是一个文本文件,由托管主机或远程服务器的主机名或IP地址组成。
托管主机可以列为单个条目,也可以按组名归类,我们将在后面看到。在Ansible中,库存文件有两种类型:静态和动态。
让我们看一下其中的每一个,看看如何管理它们。到目前为止,我们假设您已经在控制节点上安装了Ansible,并配置了到托管主机的无密码SSH连接。
静态主机清单文件
在Ansible中,静态清单文件是纯文本文件,其中包含使用主机名或IP地址在主机组下声明的托管主机的列表。
主机组名称括在方括号中,即[group name]
。托管主机条目稍后在组名称下方列出,每个条目单独一行。如前所述,使用主机名或IP地址列出了主机。
[group name]
Host A ip_address
Host B ip_address
Host c ip_address
为了便于说明,我们将创建一个静态清单文件。
# mkdir test_lab && cd test_lab
# vim hosts
Static Inventory File
[webservers]
173.82.115.165
[database_servers]
173.82.220.239
[datacenter:children]
webservers
database_servers
保存文件并退出。
正如你可以在清单文件上面看到,我们已经创造了2个主机组:webservers
和database_servers
。此外,我们还创建了一个称为数据中心的附加组,其包括一组由主机组,由: children
表示。
Ansible还允许将主机组放置在组名下。在上面的清单文件,所述webservers和database_servers组已被放置在数据中心下。
注意:将托管主机放在主机组中不是强制性的。例如,您可以简单地使用它们的主机名或IP地址列出它们。
173.82.202.239
172.82.115.165
load_balancer.pnl.com
现在,让我们使用一些Ansible命令来引用主机清单文件。库存管理的基本语法如下所示。
$ ansible {host-pattern} -i /path/of/inventory/file --list-hosts
例如,
$ ansible all -i /root/test_labs/hosts --list-hosts
![](https://img.haomeiwen.com/i3275724/d78f216e35ce047e.png)
或者,您可以使用通配符*
替换all
参数。
$ ansible * -i /root/test_labs/hosts --list-hosts
![](https://img.haomeiwen.com/i3275724/4d2bfe2964c1fa83.png)
要列出组中的主机,请在主机模式位置指定主机组。
$ ansible webservers -i /root/test_labs/hosts --list-hosts
![](https://img.haomeiwen.com/i3275724/47d5eaec15395f48.png)
动态主机清单文件
在配置中,尤其是在诸如AWS之类的云设置中,随着添加或停用服务器,库存文件不断变化,在库存文件中定义的主机上保留选项卡成为一个真正的挑战。返回主机文件并使用其IP地址更新主机列表变得很不方便。
这就是动态库存发挥作用的地方。那么什么是动态库存?动态清单是用Python,PHP或任何其他编程语言编写的Shell脚本。它在AWS等云环境中派上用场,一旦虚拟服务器停止并再次启动,IP地址就会更改。
Ansible已经为公共云平台开发了清单脚本,例如Google Compute Engine、Amazon EC2实例、OpenStack、RackSpace、cobbler等等。
动态库存比静态库存有什么优势?
- 当使用脚本收集信息时,动态清单可以很好地减少人为错误。
- 管理库存所需的精力最少。
您可以用自己选择的编程语言编写自定义动态清单。当传递适当的选项后,清单应该返回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地址也是动态的。
PS:本文来自翻译,文中内容有所改动,并非原文所译。
![](https://img.haomeiwen.com/i3275724/22723cb4d80567bd.png)
网友评论