有没有一种方式可以将项目中定义的所有模块的提供者进行抽象化。
例如,我有这个项目
├── modules
│ ├── RDS
│ └── VPC
└── stacks
├── production
│ └── main.tf
└── staging
└── main.tf
它能够正常工作......问题在于模块的定义。
├── RDS
│ ├── README.md
│ ├── main.tf
│ ├── providers.tf
│ └── variables.tf
└── VPC
├── README.md
├── main.tf
├── providers.tf
└── variables.tf
这两个模块中的提供者完全相同
# providers.tf
provider "aws" {
region = "${var.region}"
version = "~> 1.26"
}
每个模块中的变量都不同,但它们都有region
变量。
Each module has different variables, but they all have the region
variable.
# variables.tf
variable "region" {
default = "eu-central-1"
description = "AWS region."
}
# other module dependent variables...
有没有一种方法可以在模块级别上定义这些信息位,以便最终我得到类似于以下内容的东西
├── modules
│ ├── providers.tf <<< include the *shared* provider definition block
│ ├── variables.tf <<< include the *shared* region vaiable definition block
│ ├── RDS
│ │ ├── README.md
│ │ ├── main.tf
│ │ └── variables.tf
│ └── VPC
│ ├── README.md
│ ├── main.tf
│ └── variables.tf
最后一件事,模块定义大多数时候都有一个资源属性(从terraform注册中心拉取一个模块……因此我不知道是否可行同时继承来自注册中心的源和基础模块)