我有一个git存储库来控制我的基础架构部署。我有一个本地OpenStack实例,并且同时使用Azure和AWS。最近,我开始添加大量数据,并且我想重构一下git存储库,在层次结构中添加模块。我意识到我想拥有很多共享数据,以避免重复。我将举一些我可以在各种VM上使用的东西的例子:
我想拥有这种层次结构:
/
├── local
│ ├── main.tf
│ ├── flavors
│ │ └── main.tf
│ ├── security-rules
│ │ ├── main.tf
│ │ └── sec-rule1
│ │ └── main.tf
│ └── vms
│ │ ├── main.tf
│ │ └── vm1
│ │ └── main.tf
| ├── etc.
| ...
├── aws
| ...
├── azure
| ...
└── main.tf
当我开始使用它时,我意识到我无法轻松地在不同模块之间共享数据。例如,当我想创建一个新的虚拟机时,我想引用(按名称或ID)其他模块的风格,安全组等。我知道我可以使用Input Variables,Output Values和/或Dependency Inversion,但是我最终会遇到麻烦的设置,很多棘手的结构只能共享一个简单的字符串。
出于各种原因,我想避免像现在这样使用硬编码的字符串(例如,带有图像ID或安全组):
是否存在使用对其他模块中ID或名称的引用来构建git存储库的良好做法?
免责声明:我已经在官方文档中阅读了这句话:
但是,在大多数情况下,我们强烈建议保持模块树平坦,只有一个子级模块...
-> https://www.terraform.io/docs/modules/composition.html
但是遵循这个规则,我将以成千上万行的文件结尾...?