Могу ли я включить / отключить некоторые этапы aws_codepipeline в Terraform
У меня есть CodePipeline в Terraform следующим образом:
resource "aws_codepipeline" "main" {
stage {
name = "Source"
....
}
stage {
name = "Test"
....
}
stage {
name = "Approval"
....
}
stage {
name = "Deployment"
....
}
}
Можно ли настроить, нужен ли мне один из вышеперечисленных этапов, например, если переменная enable_approval_stage=1, создается этап утверждения, если enable_approval_stage=0, этап утверждения не создается? как установить количество = 0 в ресурсе {}?
2 ответа
Моя идея состояла в том, чтобы создать два разных конвейера, один с этапом утверждения, а другой без него. И у них вот так:
Если manual_approve равно true (значение равно 1):
resource "aws_codepipeline" "pipeline-manualapprove" {
count = "${var.manual_approve}"
И если manual_approve имеет значение false (значение равно 0):
resource "aws_codepipeline" "pipeline-automatic" {
count = "${1-var.manual_approve}"
У меня очень похожая проблема. У меня есть этап «зеркалирования», который синхронизирует репозиторий CodeCommit с корпоративным сервером Gitlab. Я включил его только для среды разработки , в случае слияния с веткой разработки . Используя динамическое предложение, вы можете достичь своей цели. Он существует по крайней мере с версии 1.1.
Рассмотрим переменную:
variable "stages" {
type = set(string)
default = ["dev","qa","prod"]
}
Скрипт будет выглядеть так:
resource "aws_codepipeline" "pipeline_template" {
for_each = var.stages
name = "Awesome pipeline for ${each.key}"
role_arn = data.aws_iam_role.my_codepipeline_role.arn
stage {
name = "Source"
....
}
stage {
name = "Test"
....
}
dynamic "stage" {
for_each = each.key == "dev" ? [each.key] : []
content {
name = "Mirror"
....
}
}
}