【发布时间】:2021-02-09 10:45:11
【问题描述】:
问题
- 我们使用 Terraform 为 Kubernetes 集群或应用程序编写配置文件
- 其中一些文件必须推送到不同的 git repos
- 只需关注 Kubernetes 和动态配置存储库的 GitOps
问题
- 如何使用 terraform 执行 git clone、提交、推送?
- 我们应该只使用 shell 吗?
- 除了https://github.com/ilya-lesikov/terraform-provider-gitfile,还有其他提供者吗?
- 它与我所拥有的非常接近,但它不受支持,也不支持我正在寻找的用例。
到目前为止,我有以下内容:
- 生成配置:
# https://stackoverflow.com/questions/36629367/getting-an-environment-variable-in-terraform-configuration/36672931#36672931
variable GITLAB_CLONE_TOKEN {}
locals {
carCrdInstance = {
apiVersion = "car.io/v1"
kind = "Car"
metadata = {
name = "super-car"
}
spec = {
convertible = "true"
color = "black"
}
}
# https://docs.gitlab.com/ee/user/project/deploy_tokens/#git-clone-a-repository
clone_location = "${path.module}/.gitops"
branch = "feature/crds-setup"
}
resource "null_resource" "git_clone" {
provisioner "local-exec" {
command = "git clone --branch ${local.branch} https://${var.username}:${var.GITLAB_CLONE_TOKEN}@gitlab.example.com/tanuki/awesome_project.git ${local.clone_location}"
}
}
resource "local_file" "cert_manager_cluster_issuer_object" {
content = yamlencode(local.cert_issuer)
filename = "${git_repo.configs.destination}/crds/instances/white-convertible.yaml"
# https://stackoverflow.com/questions/52421656/terraform-execute-script-before-lambda-creation/52422595#52422595
depends_on = ["null_resource.git_clone"]
# https://stackoverflow.com/questions/7149984/how-do-i-execute-a-git-command-without-being-in-the-repository/35899275#35899275
provisioner "local-exec" {
command = "git -C ${local.clone_location} commit -am ':new: updating cars...'"
}
provisioner "local-exec" {
command = "git -C ${local.clone_location} push origin ${local.branch}'"
}
}
有类似的吗?
- 我没有在上面测试过,但我正在寻找可以让我这样做的东西
【问题讨论】:
-
您能后退一步,解释一下您要达到的目标吗?这感觉很像 X Y 问题,可能有更好的方法来处理这个问题。
-
感谢@ydaetskcoR 的提问...我打算通过使用ArgoCD 的GitOps 管道来使用...这是为了维护Kubernetes 的大部分状态(系统和应用程序级别)。因此,我将为依赖于特定于云的主机(EKS、Google、Azure)的各种系统生成配置……假设我在 AWS 中创建了一个证书;然后我需要使用证书的 ARN 设置 LB...为所有具有该值的应用程序提供 Kustomize 模板,我只需将当前元数据更改推送到 Github 存储库 ArgoCD 同步我的所有应用程序(版本化方式) .现在有意义吗?
-
还有其他应用程序,例如使用这些值更新 CRD,这反过来可以根据其类型、权限等改变任何 K8s 对象......这只是一个自然的流程和需求的分离由 Terraform 设置,以及需要由常规 Kubernetes 设置的内容以及值的来源。一种更加解耦的方式来避免 Terraform 处理实际的 k8s 对象,而是创建 ArgoCD 更新所需的数据。
-
@MarcellodeSales 您是否找到了您喜欢的解决方案?我很想知道。
标签: git kubernetes terraform