Как использовать terraform для клонирования репозитория git, обновления файлов и отправки на него коммитов?
Проблема
- Мы пишем файлы конфигурации с помощью Terraform как для нашего кластера Kubernetes, так и для приложений.
- Некоторые из этих файлов необходимо отправить в разные репозитории git.
- Просто следуйте GitOps для кубернетов и репозиториев динамической конфигурации
Вопрос
- Как я могу выполнить git clone, commit, push с помощью terraform?
- Должны ли мы просто использовать оболочку?
- Есть ли другой провайдер, кроме https://github.com/ilya-lesikov/terraform-provider-gitfile?
- Он очень близок к тому, что есть у меня, но не поддерживается и не поддерживает те варианты использования, которые я ищу.
Пока у меня есть следующее:
- Сгенерируйте конфиги:
# https://stackru.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://stackru.com/questions/52421656/terraform-execute-script-before-lambda-creation/52422595#52422595
depends_on = ["null_resource.git_clone"]
# https://stackru.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}'"
}
}
Есть что-нибудь подобное?
- Я не тестировал это выше, но я ищу что-то, что позволяет мне это сделать
1 ответ
Как я могу выполнить git clone, commit, push с помощью terraform?
Должны ли мы просто использовать оболочку?
Terraform — хороший инструмент, он лучше всего подходит для предоставления неизменяемой инфраструктуры . Сценарий оболочки также может иметь свое место, но там, где это возможно, предпочтительно использовать более декларативный подход.
То, что вы описываете как «git clone, commit, push», по сути является некоторыми из шагов, которые обычно выполняются в чем-то вроде конвейера сборки или развертывания. Terraform может быть хорошим инструментом для использования на некоторых этапах, но, с моей точки зрения, это не лучший инструмент для организации всего рабочего процесса.
Лучше всего для этого может подойти инструмент, созданный для организации рабочих процессов конвейера, например, например.
- Tekton Pipelines — с задачами для Git и Terraform , которые можно использовать в качестве шагов рабочего процесса.
- Рабочие процессы Арго
- Действия на GitHub
- И, возможно, Terraform Cloud (не использовал его, не могу сказать, может ли он делать именно то, что вы просите)