Skip to content

Commit 8428254

Browse files
Khuzaima-ShakeelKhuzaima-Shakeel
authored andcommitted
feat: updated code to use cross-object referencing for validations
1 parent 5cd300f commit 8428254

File tree

2 files changed

+67
-40
lines changed

2 files changed

+67
-40
lines changed

main.tf

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,6 @@
11
##############################################################################
22
# terraform-ibm-landing-zone-vpc
3-
##############################################################################
4-
locals {
5-
# input variable validation
6-
# tflint-ignore: terraform_unused_declarations
7-
validate_default_secgroup_rules = var.clean_default_sg_acl && (var.security_group_rules != null && length(var.security_group_rules) > 0) ? tobool("var.clean_default_sg_acl is true and var.security_group_rules are not empty, which are in direct conflict of each other. If you would like the default VPC Security Group to be empty, you must remove default rules from var.security_group_rules.") : true
8-
9-
# tflint-ignore: terraform_unused_declarations
10-
validate_existing_vpc_id = !var.create_vpc && var.existing_vpc_id == null ? tobool("If var.create_vpc is false, then provide a value for var.existing_vpc_id to create vpc.") : true
11-
12-
# tflint-ignore: terraform_unused_declarations
13-
validate_existing_subnet_id = !var.create_subnets && length(var.existing_subnets) == 0 ? tobool("If var.create_subnet is false, then provide a value for var.existing_subnets to create subnets.") : true
14-
# tflint-ignore: terraform_unused_declarations
15-
validate_existing_vpc_and_subnet = var.create_vpc == true && var.create_subnets == false ? tobool("If user is not providing a vpc then they should also not be providing a subnet") : true
16-
17-
# tflint-ignore: terraform_unused_declarations
18-
validate_hub_vpc_input = (var.hub_vpc_id != null && var.hub_vpc_crn != null) ? tobool("var.hub_vpc_id and var.hub_vpc_crn are mutually exclusive. Hence cannot have values at the same time.") : true
19-
20-
# tflint-ignore: terraform_unused_declarations
21-
validate_hub_vpc_id_input = (var.enable_hub_vpc_id && var.hub_vpc_id == null) ? tobool("var.hub_vpc_id must be passed when var.enable_hub_vpc_id is True.") : true
22-
23-
# tflint-ignore: terraform_unused_declarations
24-
validate_enable_hub_vpc_id_input = (!var.enable_hub_vpc_id && var.hub_vpc_id != null) ? tobool("var.enable_hub_vpc_id must be true when var.hub_vpc_id is not null.") : true
253

26-
# tflint-ignore: terraform_unused_declarations
27-
validate_hub_vpc_crn_input = (var.enable_hub_vpc_crn && var.hub_vpc_crn == null) ? tobool("var.hub_vpc_crn must be passed when var.enable_hub_vpc_crn is True.") : true
28-
29-
# tflint-ignore: terraform_unused_declarations
30-
validate_enable_hub_vpc_crn_input = (!var.enable_hub_vpc_crn && var.hub_vpc_crn != null) ? tobool("var.enable_hub_vpc_crn must be true when var.hub_vpc_crn is not null.") : true
31-
32-
# tflint-ignore: terraform_unused_declarations
33-
validate_manual_servers_input = (var.resolver_type == "manual" && length(var.manual_servers) == 0) ? tobool("var.manual_servers must be set when var.resolver_type is manual") : true
34-
35-
# tflint-ignore: terraform_unused_declarations
36-
validate_resolver_type_input = (var.resolver_type != null && var.update_delegated_resolver == true) ? tobool("var.resolver_type cannot be set if var.update_delegated_resolver is set to true. Only one type of resolver can be created by VPC.") : true
37-
38-
# tflint-ignore: terraform_unused_declarations
39-
validate_vpc_flow_logs_inputs = (var.enable_vpc_flow_logs) ? ((var.create_authorization_policy_vpc_to_cos) ? ((var.existing_cos_instance_guid != null && var.existing_storage_bucket_name != null) ? true : tobool("Please provide COS instance & bucket name to create flow logs collector.")) : ((var.existing_storage_bucket_name != null) ? true : tobool("Please provide COS bucket name to create flow logs collector"))) : false
40-
41-
# tflint-ignore: terraform_unused_declarations
42-
validate_skip_spoke_auth_policy_input = (var.hub_account_id == null && !var.skip_spoke_auth_policy && !var.enable_hub && (var.enable_hub_vpc_id || var.enable_hub_vpc_crn)) ? tobool("var.hub_account_id must be set when var.skip_spoke_auth_policy is False and either var.enable_hub_vpc_id or var.enable_hub_vpc_crn is true.") : true
43-
}
444

455
##############################################################################
466
# Check if existing vpc id is passed

variables.tf

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ variable "create_vpc" {
66
description = "Indicates whether user wants to use an existing vpc or create a new one. Set it to true to create a new vpc"
77
type = bool
88
default = true
9+
10+
validation {
11+
condition = var.create_vpc || var.existing_vpc_id != null
12+
error_message = "If 'create_vpc' is false, then you must provide a value for 'existing_vpc_id'."
13+
}
14+
15+
validation {
16+
condition = !(var.create_vpc == false && var.create_subnets == true)
17+
error_message = "If 'create_vpc' is false, then 'create_subnets' must also be false. You cannot create subnets without providing a VPC."
18+
}
919
}
1020

1121
variable "existing_vpc_id" {
@@ -383,6 +393,11 @@ variable "create_subnets" {
383393
description = "Indicates whether user wants to use existing subnets or create new. Set it to true to create new subnets."
384394
type = bool
385395
default = true
396+
397+
validation {
398+
condition = var.create_subnets || length(var.existing_subnets) > 0
399+
error_message = "If 'create_subnets' is false, then you must provide a non-empty list for 'existing_subnets'."
400+
}
386401
}
387402

388403
variable "existing_subnets" {
@@ -454,6 +469,11 @@ variable "security_group_rules" {
454469
])
455470
)) == 0
456471
}
472+
473+
validation {
474+
error_message = "var.clean_default_sg_acl is true and var.security_group_rules are not empty, which are in direct conflict. If you want to clean the default SG, you must not pass security_group_rules."
475+
condition = !(var.clean_default_sg_acl && length(var.security_group_rules) > 0)
476+
}
457477
}
458478

459479
variable "clean_default_sg_acl" {
@@ -501,6 +521,18 @@ variable "enable_vpc_flow_logs" {
501521
description = "Flag to enable vpc flow logs. If true, flow log collector will be created"
502522
type = bool
503523
default = false
524+
525+
validation {
526+
condition = (
527+
!var.enable_vpc_flow_logs ||
528+
(
529+
var.create_authorization_policy_vpc_to_cos
530+
? (var.existing_cos_instance_guid != null && var.existing_storage_bucket_name != null)
531+
: (var.existing_storage_bucket_name != null)
532+
)
533+
)
534+
error_message = "To enable VPC flow logs, provide COS bucket name. If authorization policy creation is enabled, also provide COS instance GUID."
535+
}
504536
}
505537

506538
variable "create_authorization_policy_vpc_to_cos" {
@@ -543,6 +575,16 @@ variable "skip_spoke_auth_policy" {
543575
description = "Set to true to skip the creation of an authorization policy between the DNS resolution spoke and hub, only enable this if a policy already exists between these two VPCs. See https://cloud.ibm.com/docs/vpc?topic=vpc-vpe-dns-sharing-s2s-auth&interface=ui for more details."
544576
type = bool
545577
default = false
578+
579+
validation {
580+
condition = (
581+
var.hub_account_id != null ||
582+
var.skip_spoke_auth_policy ||
583+
var.enable_hub ||
584+
!(var.enable_hub_vpc_id || var.enable_hub_vpc_crn)
585+
)
586+
error_message = "var.hub_account_id must be set when var.skip_spoke_auth_policy is false and either var.enable_hub_vpc_id or var.enable_hub_vpc_crn is true and enable_hub is false."
587+
}
546588
}
547589

548590
variable "hub_account_id" {
@@ -561,6 +603,16 @@ variable "hub_vpc_id" {
561603
description = "Indicates the id of the hub VPC for DNS resolution. See https://cloud.ibm.com/docs/vpc?topic=vpc-hub-spoke-model. Mutually exclusive with hub_vpc_crn."
562604
type = string
563605
default = null
606+
607+
validation {
608+
condition = !(var.hub_vpc_id != null && var.hub_vpc_crn != null)
609+
error_message = "The inputs 'hub_vpc_id' and 'hub_vpc_crn' are mutually exclusive. Only one of them can be set at a time."
610+
}
611+
612+
validation {
613+
condition = !(var.enable_hub_vpc_id && var.hub_vpc_id == null)
614+
error_message = "The input 'hub_vpc_id' must be provided when 'enable_hub_vpc_id' is set to true."
615+
}
564616
}
565617

566618
variable "enable_hub_vpc_crn" {
@@ -573,12 +625,22 @@ variable "hub_vpc_crn" {
573625
description = "Indicates the crn of the hub VPC for DNS resolution. See https://cloud.ibm.com/docs/vpc?topic=vpc-hub-spoke-model. Mutually exclusive with hub_vpc_id."
574626
type = string
575627
default = null
628+
629+
validation {
630+
condition = !(var.enable_hub_vpc_crn && var.hub_vpc_crn == null)
631+
error_message = "The input 'hub_vpc_crn' must be provided when 'enable_hub_vpc_crn' is set to true."
632+
}
576633
}
577634

578635
variable "update_delegated_resolver" {
579636
description = "If set to true, and if the vpc is configured to be a spoke for DNS resolution (enable_hub_vpc_crn or enable_hub_vpc_id set), then the spoke VPC resolver will be updated to a delegated resolver."
580637
type = bool
581638
default = false
639+
640+
validation {
641+
condition = !(var.update_delegated_resolver == true && var.resolver_type != null)
642+
error_message = "var.resolver_type cannot be set if var.update_delegated_resolver is true. Only one type of resolver can be created by VPC."
643+
}
582644
}
583645

584646
variable "skip_custom_resolver_hub_creation" {
@@ -620,6 +682,11 @@ variable "manual_servers" {
620682
zone_affinity = optional(string)
621683
}))
622684
default = []
685+
686+
validation {
687+
condition = !(var.resolver_type == "manual" && length(var.manual_servers) == 0)
688+
error_message = "The input 'manual_servers' must be set when 'resolver_type' is 'manual'."
689+
}
623690
}
624691

625692
variable "dns_location" {

0 commit comments

Comments
 (0)