Files
hunfabric/modules/cloud-deploy/delivery-pipeline.tf
vineeteldochan dede2ca7c2 Addition of Cloud Deploy Module (#3169)
* Addition of Cloud Deploy Module

* Addition of IAM and fixes as per review

* Updated README to add IAM information, ran tfdocs and tests

* Correcting linting errors

* Correcting version.tf

* Ordered arguments and variables

* Updated README on module and root levels to include Cloud Deploy

* Fixing formatting and test issues

* fixing formatting

---------

Co-authored-by: Vineet Eldochan <vineet.eldochan@withriley.com>
2025-06-22 20:39:13 +02:00

159 lines
5.1 KiB
HCL

/**
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
resource "google_clouddeploy_delivery_pipeline" "default" {
project = var.project_id
location = var.region
name = var.name
annotations = var.annotations
description = var.description
labels = var.labels
suspended = var.suspended
dynamic "serial_pipeline" {
for_each = lower(local.pipeline_type) == "serial" ? [""] : []
content {
dynamic "stages" {
for_each = {
for k, v in var.targets :
k => v if v.exclude_from_pipeline == false
}
iterator = et
content {
profiles = et.value.profiles
target_id = et.value.name
dynamic "deploy_parameters" {
for_each = {
for k, v in et.value.delivery_pipeline_deploy_parameters :
k => v
}
iterator = edp
content {
match_target_labels = edp.value.matching_target_labels
values = edp.value.values
}
}
dynamic "strategy" {
for_each = et.value.strategy == null ? [] : [""]
content {
dynamic "canary" {
for_each = upper(et.value.strategy) == "CANARY" ? [""] : []
content {
canary_deployment {
percentages = et.value.deployment_percentages
verify = et.value.verify
dynamic "postdeploy" {
for_each = et.value.postdeploy_actions == null ? [] : [""]
content {
actions = et.value.postdeploy_actions
}
}
dynamic "predeploy" {
for_each = et.value.predeploy_actions == null ? [] : [""]
content {
actions = et.value.predeploy_actions
}
}
}
dynamic "custom_canary_deployment" {
for_each = length(et.value.custom_canary_phase_configs) > 0 ? [""] : []
content {
dynamic "phase_configs" {
for_each = et.value.custom_canary_phase_configs
iterator = epc
content {
percentage = epc.value.percentage
phase_id = epc.key
verify = epc.value.verify
dynamic "postdeploy" {
for_each = epc.value.postdeploy_actions == null ? [] : [""]
content {
actions = epc.value.postdeploy_actions
}
}
dynamic "predeploy" {
for_each = epc.value.predeploy_actions == null ? [] : [""]
content {
actions = epc.value.predeploy_actions
}
}
}
}
}
}
runtime_config {
dynamic "cloud_run" {
for_each = et.value.cloud_run_configs == null ? [] : [""]
content {
automatic_traffic_control = et.value.cloud_run_configs.automatic_traffic_control
canary_revision_tags = et.value.cloud_run_configs.canary_revision_tags
prior_revision_tags = et.value.cloud_run_configs.prior_revision_tags
stable_revision_tags = et.value.cloud_run_configs.stable_revision_tags
}
}
}
}
}
dynamic "standard" {
for_each = upper(et.value.strategy) == "STANDARD" ? [""] : []
content {
verify = et.value.verify
dynamic "postdeploy" {
for_each = et.value.postdeploy_actions == null ? [] : [""]
content {
actions = et.value.postdeploy_actions
}
}
dynamic "predeploy" {
for_each = et.value.predeploy_actions == null ? [] : [""]
content {
actions = et.value.predeploy_actions
}
}
}
}
}
}
}
}
}
}
}