使用 Ansible 的复杂环境

Complex environments with Ansible

我已阅读 question and this 指南,但我仍然不明白如何使用 ansible 正确建模我们的环境。

我们的环境:

A-G 的每个部分都有很多配置 key/value 对分布在 ~30 个文件中,例如由 url/db-connection-strings/...、其他实例的主机名(A 需要 B 的 hostname/port 的名称等)或各种性能设置组成。

许多配置 key/value 对为开发实例共享,但不是全部。所有外部实例(Dev、Pre-Prod、Prod)共享一些进一步的对。

我应该如何构建我的环境,以便我可以将所有密钥放在适当的级别,例如prod、ext-dev,以一种我不必多次重复共享密钥的方式?

以上所有的现有答案似乎只适用于更简单的环境。即使我创建了这样一个复杂的结构:

env/
  prod/
    group_vars/
      all.yml
      a.yml
      b.yml
      c.yml
      d.yml
      e.yml
      f.yml
      g.yml
    hosts
  pre_prod/
    group_vars/
      all.yml
      a.yml
      b.yml
      c.yml
      d.yml
      e.yml
      f.yml
      g.yml
    hosts
  ext_dev/
    group_vars/
      all.yml
      abcd.yml
      fg.yml
    hosts
  int_dev/
    group_vars/
      all.yml
      abcdefg.yml
    hosts
roles/... [not important for this part]
playbook.yml

我似乎无法正确设置主 playbook.yml 文件,以便正确映射所有内容。但我不确定我做错了什么,因为(对我而言)这似乎是将上述两个资源中描述的设置正确映射到我们的环境。

特别是因为有些配置项是特定于实例的,有些是 prod/dev/.. 特定的,有些是全局的。

我应该如何设置我们的 ansible 项目结构以便它能够处理我们的复杂环境?

"How should I structure my environment so I can place all keys at the proper level , e.g. prod, ext-dev, in a way that I don't have to repeat the shared keys multiple times?"

你不应该。这些键现在可能具有相同的值,但您不能保证它们将来总是相同的。

你最好完全分离你的环境。