Terraform 带地形和头盔的外部部署配置

Terraform 带地形和头盔的外部部署配置,terraform,kubernetes-helm,Terraform,Kubernetes Helm,我对地形很陌生,所以我的问题可能很幼稚,但我仍然不知道如何解决它。 我有一个使用helm_release()的terraform脚本,问题是我在一个单独的git存储库中有部署配置。让我们说:。 我想要实现的是能够将所有文件(例如用于dev env部署)添加到配置映射中。 地形模块的结构为: +project +-helm +--templates +---configmap.yaml +---deployment.yaml +---ingress.yaml +---service.yaml +-

我对地形很陌生,所以我的问题可能很幼稚,但我仍然不知道如何解决它。
我有一个使用helm_release()的terraform脚本,问题是我在一个单独的git存储库中有部署配置。让我们说:。
我想要实现的是能够将所有文件(例如用于dev env部署)添加到配置映射中。
地形模块的结构为:

+project
+-helm
+--templates
+---configmap.yaml
+---deployment.yaml
+---ingress.yaml
+---service.yaml
+--chart.yaml
+--values.yaml
+-helm.tf
+-other tf files
我需要将配置存储库中的所有文件放在

+project
+-helm
+--configuration
因为只有这样我才能使用这个:

apiVersion: v1
kind: ConfigMap
metadata:
...
data:
{{- (.Files.Glob "configuration/*").AsConfig | nindent 2 }}

在my configmap.yaml中,helm要求将这些文件放在图表目录中。

您只能使用helm
.files
机制处理实际与图表绑定的文件,而不是尝试注入的外部配置

如果您计划使用Terraform来管理一切,一个选项是让Terraform创建一个包含您需要的文件内容的,并将对该
${kubernetes\u config\u map.with\u files.name}
的引用传递给掌舵图

如果您希望主要使用Helm,但在外部传递文件,则可以将这些文件作为值传递。如果您有Helm
值.yaml
语法:

配置文件:
test.yaml:|
关键词:价值
键2:值2
您可以将其发送到ConfigMap中。您可以迭代
configFiles
,或者使用文档较少的Helm
toYaml
扩展来渲染整个内容

apiVersion:v1 种类:配置地图 元数据: 名称:{{模板“mychart.name”。}} 数据: {{.Values.configFiles | toYaml | indent 2} 完成后,您可以通过
helm install--set
options或等效的Terraform
helm\u release
设置将这些信息传递进来:


经过多次尝试。。。我带来了最简单的解决方案。我使用了
.gitmodules
()。在git克隆项目期间,配置作为子模块在./project/helm/configuration中提供。不需要地形技巧。唯一需要做的事情是,必须设置特定的git设置,以便在克隆过程中强制下载子模块(默认目录为空)。

我还希望将https://project.git/configuration设置为terraform模块。所以我可以把它用作子模块。但问题仍然是,如何使这些文件在project/helm/configuration中可用非常感谢。这看起来很棒。我的解决方案设计得有点过火,但你的方法看起来更简单,我一定会尝试的。我目前所做的是将配置存储库作为一个最小的terraform模块(将环境名称作为输入,并返回到主terraform中部署配置目录的完整路径,例如${path.module}/dev),我只是使用本地exec(在null_资源中)从那里复制所有文件到舵手所在的目录,呼叫舵手释放。行得通,但我闻起来很难闻。
resource "helm_release" "chart" {
  name = "chart"
  chart = "..."
  set_string {
    name = "configFiles.test\\.yaml"
    value = "${file("${path.module}/test.yaml")}"
  }
}