【问题标题】:Complex environments with Ansible使用 Ansible 的复杂环境
【发布时间】:2017-09-05 14:02:52
【问题描述】:

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

我们的环境:

  • 产品
    • A、B、C、D、E、F、G,每个都安装在自己的服务器上,外加一个 HA 备份
  • 预生产
    • A、B、C、D、E、F、G,每个都安装在自己的服务器上
  • 外部开发实例(5 个实例,有时更多)
    • A、B、C、D、E,全部安装在单个 VM 上
    • F、G 在 ext-dev 的共享环境中
  • 内部开发实例(50 多个实例)
    • A、B、C、D、E、F、G 全部安装在单个 VM 上

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

许多配置键/值对是为开发实例共享的,但不是全部。所有外部实例(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 项目结构,以便它能够处理我们复杂的环境?

【问题讨论】:

    标签: deployment configuration ansible production-environment


    【解决方案1】:

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

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

    完全分离环境会更好。

    【讨论】:

    • 请详细说明“完全分离环境”解决方案的外观,我不明白。
    • 每个环境都有一个目录(或文件夹,如果您喜欢该术语)。这些目录中的每一个都有一个hosts 文件和一个ansible.cfg 文件。我们还在那里保存了一个group_vars 文件。我们有一个/etc/profile.d/ansible.sh 脚本,它设置了一个chinv 函数。该函数设置ANSIBLE_INVENTORYANSIBLE_CONFIG 环境变量。所以我们执行chinv /parent_dir/TEST2,然后我们可以切换到 PLAYBOOKS 目录并从那里运行 playbook。剧本将仅在 ANSIBLE_INVENTORY 变量指定的一个环境中运行。
    猜你喜欢
    • 2021-11-19
    • 2020-10-26
    • 2016-07-14
    • 2011-09-27
    • 2015-10-24
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多