美文网首页Linux学习|Gentoo/Arch/FreeBSDLinuxLinux学习之路
如何在Ansible中使用静态和动态库存(4)

如何在Ansible中使用静态和动态库存(4)

作者: 尘世不扰 | 来源:发表于2019-11-05 22:00 被阅读0次

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

Use-Static-and-Dynamic-Inventories-in-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

Static Inventory File

[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

保存文件并退出。

正如你可以在清单文件上面看到,我们已经创造了2个主机组:webserversdatabase_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
列出Ansible主机

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

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

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

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

动态主机清单文件

在配置中,尤其是在诸如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:本文来自翻译,文中内容有所改动,并非原文所译。

相关文章

网友评论

    本文标题:如何在Ansible中使用静态和动态库存(4)

    本文链接:https://www.haomeiwen.com/subject/zypebctx.html