如何使用terraform克隆git repo、更新文件并向其推送提交? 问题 我们使用Terraform为Kubernetes集群或应用程序编写配置文件 其中一些文件必须推送到不同的git repo 下面是kubernetes和dynamic config repos的GitOps 问题: 如何使用terraform执行git克隆、提交和推送? 我们应该只用shell吗 除此之外还有其他供应商吗? 它与我所拥有的非常接近,但是它没有得到支持,也不支持我正在寻找的用例 到目前为止,我有以下几点: 生成配置文件: 有类似的吗? 我还没有在上面测试过,但我正在寻找一些可以让我做到这一点的东西

如何使用terraform克隆git repo、更新文件并向其推送提交? 问题 我们使用Terraform为Kubernetes集群或应用程序编写配置文件 其中一些文件必须推送到不同的git repo 下面是kubernetes和dynamic config repos的GitOps 问题: 如何使用terraform执行git克隆、提交和推送? 我们应该只用shell吗 除此之外还有其他供应商吗? 它与我所拥有的非常接近,但是它没有得到支持,也不支持我正在寻找的用例 到目前为止,我有以下几点: 生成配置文件: 有类似的吗? 我还没有在上面测试过,但我正在寻找一些可以让我做到这一点的东西,git,kubernetes,terraform,Git,Kubernetes,Terraform,如何使用terraform执行git克隆、提交和推送 我们应该只用shell吗 Terraform是一个很好的工具——它最适合于提供不可变的基础设施。Shell脚本可能也有它的位置,但如果可以,最好使用更具声明性的方法 您所描述的“git克隆、提交、推送”本质上是一些通常在构建或部署管道中完成的步骤。Terraform可能是在某些步骤中使用的一个好工具,但在我看来,它不是协调整个工作流的最佳工具 为编排管道工作流而设计的工具可能最适合于此,例如 -用于Git的任务,并用作工作流中的步骤 而

如何使用terraform执行git克隆、提交和推送

我们应该只用shell吗

Terraform是一个很好的工具——它最适合于提供不可变的基础设施。Shell脚本可能也有它的位置,但如果可以,最好使用更具声明性的方法

您所描述的“git克隆、提交、推送”本质上是一些通常在构建或部署管道中完成的步骤。Terraform可能是在某些步骤中使用的一个好工具,但在我看来,它不是协调整个工作流的最佳工具

为编排管道工作流而设计的工具可能最适合于此,例如

  • -用于Git的任务,并用作工作流中的步骤
  • 而且可能(没有使用过,不能说它是否能完全满足您的要求)
如何使用terraform执行git克隆、提交和推送

我们应该只用shell吗

Terraform是一个很好的工具——它最适合于提供不可变的基础设施。Shell脚本可能也有它的位置,但如果可以,最好使用更具声明性的方法

您所描述的“git克隆、提交、推送”本质上是一些通常在构建或部署管道中完成的步骤。Terraform可能是在某些步骤中使用的一个好工具,但在我看来,它不是协调整个工作流的最佳工具

为编排管道工作流而设计的工具可能最适合于此,例如

  • -用于Git的任务,并用作工作流中的步骤
  • 而且可能(没有使用过,不能说它是否能完全满足您的要求)

请你退一步,解释一下你想要实现的目标好吗?这感觉很像一个X Y问题,可能有更好的方法来处理。谢谢你的问题@ydaetskcoR。。。我打算通过使用ArgoCD的GitOps管道使用。。。这是为了维护大多数Kubernetes状态(系统和应用程序级别)。因此,我将为依赖于特定于云的主机(EKS、Google、Azure)的各种系统生成配置。。。假设我在AWS中创建了一个证书;然后我需要用证书的ARN设置LB。。。对于所有具有该值的应用程序,都有一个Kustomize模板,我只需将当前元数据更改推送到Github repo ArgoCD,即可从中同步所有应用程序(版本化方式)。现在有意义了吗?还有其他应用程序,比如用这些值更新CRD,这反过来可以根据K8s对象的类型、权限等对其进行变异。。。这只是一个自然的流动和分离,需要由地形设置什么,需要由常规库伯内特设置什么,以及这些值来自哪里。这是一种更为解耦的方法,可以避免Terraform处理实际的k8s对象,而是创建ArgoCD需要更新的数据。请您后退一步,解释一下您想要实现的目标?这感觉很像一个X Y问题,可能有更好的方法来处理。谢谢你的问题@ydaetskcoR。。。我打算通过使用ArgoCD的GitOps管道使用。。。这是为了维护大多数Kubernetes状态(系统和应用程序级别)。因此,我将为依赖于特定于云的主机(EKS、Google、Azure)的各种系统生成配置。。。假设我在AWS中创建了一个证书;然后我需要用证书的ARN设置LB。。。对于所有具有该值的应用程序,都有一个Kustomize模板,我只需将当前元数据更改推送到Github repo ArgoCD,即可从中同步所有应用程序(版本化方式)。现在有意义了吗?还有其他应用程序,比如用这些值更新CRD,这反过来可以根据K8s对象的类型、权限等对其进行变异。。。这只是一个自然的流动和分离,需要由地形设置什么,需要由常规库伯内特设置什么,以及这些值来自哪里。一种更为解耦的方法,可以避免Terraform处理实际的k8s对象,而是创建所需的数据供ArgoCD更新。
# 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}'"
  }
}