如何在Ansible中使用静态和动态库存-第4部分

在Ansible中,静态清单文件是纯文本文件,其中包含使用主机名或IP地址在主机组下声明的托管主机的列表。

Ansible系列的 第4部分中,我们将说明如何使用静态和动态清单来定义Ansible中的主机组。

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
静态库存文件
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

保存文件并退出。

如您在上面的清单文件中看到的,我们已经创建了2个主机组: webserversdatabase_servers 另外,我们还创建了一个称为数据中心的附加组,其中包括一组主机组,由Postfix': children'表示。

Ansible还允许将主机组放置在组名下。 在上面的清单文件中, webserversdatabase_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
列出Ansible主机

列出Ansible主机

或者,您可以使用通配符*替换'all'参数。

$ ansible * -i /root/test_labs/hosts --list-hosts
使用通配符列出Ansible主机

使用通配符列出Ansible主机

要列出组中的主机,请在主机模式位置指定主机组。

$ ansible webservers -i /root/test_labs/hosts --list-hosts
列出组中的Ansible主机

列出组中的Ansible主机

动态主机清单文件

在配置中,尤其是在诸如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地址也是动态的。 我们希望您能从本教程中学到知识。