我想知道什么是管理具有动态和静态主机、变量和组组合的环境的好的解决方案。
我正在考虑将数据中心中的物理主机与特定任务(物理数据库节点)相结合,再加上管理一些动态虚拟机的 Proxmox 主机,以及一些云提供商,用于在某些情况下管理新的虚拟机,在物理性能不够的情况下(外包性能高峰)。
在这种情况下,动态清单是一种很好的做法。当然,AWS、Hetzner 等也有一些插件。但是否可以将其与静态条目结合起来?
我构建了一个包含所有条目和脚本的数据库,用于更新数据库中每个请求的云虚拟机列表。所有动态主机以及静态主机和一些组变量、主机变量都存储在数据库中。还有一个 Web 服务,用于输出 Python 脚本加载的 JSON 动态清单,并将其用作我的剧本中的动态清单。
我的问题是 - 我是唯一一个有这种设置的人吗?当我想到一家公司拥有一些 VMWare 主机,这些主机上有动态数量的 VM 以及一些其他物理系统时,就会“清楚”地认为应该有某种“工具”或帮助来进行这种设置。但据我所知,要么有静态库存(YAML、INI),要么有动态库存(JSON)。但每个管理员都会开发自己的动态库存数据库吗?或者有特定的软件“产品”或“项目”?或者为“静态”和“动态”环境提供不同的库存是一种“更好”的做法?
答案1
Ansible 已经发布了几个库存插件。是的,您可以将它们组合起来,作为多个-i
选项,或者指定包含多个清单的目录。
例如,您可能在inventory/stage/
和inventory/prod/
目录中拥有所有这些内容:
- Hetzner 的 hcloud
- 适用于 AWS 的 aws_ec2
- 具有静态主机列表的 YAML
- 您的自定义库存脚本
- 构造用于从表达式生成组和变量
对于给定的事物,组名应该保持一致,因此游戏可以使用静态模式。
建非常简洁。使用 Jinja 表达式对清单或主机中的事实进行创建组和变量。例如,您可能希望一些 ec2 标签以及一些主机名正则表达式成为组的成员。
如果这还不够,您可以编写自己的库存插件。通常,这些插件只与一个 API 通信,例如,如果您破解了 Proxmox 库存插件。或者,放弃 Ansible 端的多个库存,找到适合您的多云工具,并使其为库存发出 JSON。