@@ -23,21 +23,53 @@ locals {
2323 worker_pools_map = module. dynamic_values . worker_pools_map # Convert list to map
2424 clusters_map = module. dynamic_values . clusters_map # Convert list to map
2525 default_kube_version = {
26- openshift = " ${ data . ibm_container_cluster_versions . cluster_versions . default_openshift_version } _openshift"
27- iks = data.ibm_container_cluster_versions.cluster_versions.default_kube_version
26+ iks = data.ibm_container_cluster_versions.cluster_versions.default_kube_version
2827 }
28+ cluster_data = merge ({
29+ for cluster in ibm_container_vpc_cluster . cluster :
30+ cluster.name = > {
31+ crn = cluster.crn
32+ id = cluster.id
33+ resource_group_name = cluster.resource_group_name
34+ resource_group_id = cluster.resource_group_id
35+ vpc_id = cluster.vpc_id
36+ region = var.region
37+ private_service_endpoint_url = cluster.private_service_endpoint_url
38+ public_service_endpoint_url = (cluster.public_service_endpoint_url != " " && cluster.public_service_endpoint_url != null ) ? cluster.public_service_endpoint_url : null
39+ ingress_hostname = cluster.ingress_hostname
40+ cluster_console_url = (cluster.public_service_endpoint_url != " " && cluster.public_service_endpoint_url != null ) ? " https://console-openshift-console.${ cluster . ingress_hostname } " : null
41+
42+ }
43+ }, {
44+ for cluster in module . cluster :
45+ cluster.cluster_name = > {
46+ crn = cluster.cluster_crn
47+ id = cluster.cluster_id
48+ resource_group_id = cluster.resource_group_id
49+ vpc_id = cluster.vpc_id
50+ region = var.region
51+ private_service_endpoint_url = cluster.private_service_endpoint_url
52+ public_service_endpoint_url = cluster.public_service_endpoint_url
53+ ingress_hostname = cluster.ingress_hostname
54+ cluster_console_url = (cluster.public_service_endpoint_url != " " && cluster.public_service_endpoint_url != null ) ? " https://console-openshift-console.${ cluster . ingress_hostname } " : null
55+ }
56+ }
57+ )
2958}
3059
3160# #############################################################################
3261
3362
3463# #############################################################################
35- # Create IKS/ROKS on VPC Cluster
64+ # Create IKS on VPC Cluster
3665# #############################################################################
3766
3867resource "ibm_container_vpc_cluster" "cluster" {
39- depends_on = [ibm_iam_authorization_policy . policy ]
40- for_each = local. clusters_map
68+ depends_on = [ibm_iam_authorization_policy . policy ]
69+ for_each = {
70+ for index , cluster in local . clusters_map : index => cluster
71+ if cluster . kube_type == " iks"
72+ }
4173 name = " ${ var . prefix } -${ each . value . name } "
4274 vpc_id = each. value . vpc_id
4375 resource_group_id = local. resource_groups [each . value . resource_group ]
@@ -96,7 +128,10 @@ resource "ibm_container_vpc_cluster" "cluster" {
96128}
97129
98130resource "ibm_resource_tag" "cluster_tag" {
99- for_each = local. clusters_map
131+ for_each = {
132+ for index , cluster in local . clusters_map : index => cluster
133+ if cluster . kube_type == " iks"
134+ }
100135 resource_id = ibm_container_vpc_cluster. cluster [each . key ]. crn
101136 tag_type = " access"
102137 tags = each. value . access_tags
@@ -106,11 +141,14 @@ resource "ibm_resource_tag" "cluster_tag" {
106141
107142
108143# #############################################################################
109- # Create Worker Pools
144+ # Create IKS Worker Pools
110145# #############################################################################
111146
112147resource "ibm_container_vpc_worker_pool" "pool" {
113- for_each = local. worker_pools_map
148+ for_each = {
149+ for index , cluster in local . worker_pools_map : index => cluster
150+ if cluster . kube_type == " iks"
151+ }
114152 vpc_id = each. value . vpc_id
115153 resource_group_id = local. resource_groups [each . value . resource_group ]
116154 entitlement = each. value . entitlement
@@ -157,14 +195,14 @@ locals {
157195
158196 # for each cluster in the clusters_map, get the addons and their versions and create an addons map including the corosponding csi_driver_version
159197 cluster_addons = {
160- for cluster in var . clusters : " ${ var . prefix } -${ cluster . name } " => {
198+ for cluster in local . clusters_map : " ${ var . prefix } -${ cluster . name } " => {
161199 id = ibm_container_vpc_cluster.cluster[" ${ var . prefix } -${ cluster . name } " ].id
162200 resource_group_id = ibm_container_vpc_cluster.cluster[" ${ var . prefix } -${ cluster . name } " ].resource_group_id
163201 addons = merge (
164202 { for addon_name , addon_version in (cluster. addons != null ? cluster. addons : {}) : addon_name => addon_version if addon_version != null },
165203 local. csi_driver_version [" ${ var . prefix } -${ cluster . name } " ] != null ? { vpc-block-csi-driver = local.csi_driver_version[" ${ var . prefix } -${ cluster . name } " ] } : {}
166204 )
167- }
205+ } if cluster . kube_type == " iks "
168206 }
169207}
170208
@@ -193,3 +231,77 @@ resource "ibm_container_addons" "addons" {
193231 create = " 1h"
194232 }
195233}
234+
235+ # #############################################################################
236+ # Create ROKS on VPC Cluster
237+ # #############################################################################
238+
239+ module "cluster" {
240+ for_each = {
241+ for index , cluster in local . clusters_map : index => cluster
242+ if cluster . kube_type == " openshift"
243+ }
244+ source = " terraform-ibm-modules/base-ocp-vpc/ibm"
245+ version = " 3.30.1"
246+ resource_group_id = local. resource_groups [each . value . resource_group ]
247+ region = var. region
248+ cluster_name = each. value . cluster_name
249+ vpc_id = each. value . vpc_id
250+ ocp_entitlement = each. value . entitlement
251+ vpc_subnets = each. value . vpc_subnets
252+ access_tags = each. value . access_tags
253+ worker_pools = concat (
254+ [
255+ {
256+ subnet_prefix = each.value.subnet_names[0 ]
257+ pool_name = " default"
258+ machine_type = each.value.machine_type
259+ workers_per_zone = each.value.workers_per_subnet
260+ operating_system = each.value.operating_system
261+ labels = each.value.labels
262+ boot_volume_encryption_kms_config = {
263+ crk = each.value.boot_volume_crk_name == null ? null : regex (" key:(.*)" , module. key_management . key_map [each . value . boot_volume_crk_name ]. crn )[0 ]
264+ kms_instance_id = each.value.boot_volume_crk_name == null ? null : regex (" .*:(.*):key:.*" , module. key_management . key_map [each . value . boot_volume_crk_name ]. crn )[0 ]
265+ kms_account_id = each.value.boot_volume_crk_name == null ? null : regex (" a/([a-f0-9]{32})" , module. key_management . key_map [each . value . boot_volume_crk_name ]. crn )[0 ] == data.ibm_iam_account_settings.iam_account_settings.account_id ? null : regex (" a/([a-f0-9]{32})" , module. key_management . key_map [each . value . boot_volume_crk_name ]. crn )[0 ]
266+ }
267+ }
268+ ],
269+ each. value . worker != null ? [
270+ for pool in each . value . worker :
271+ {
272+ vpc_subnets = pool.vpc_subnets
273+ pool_name = pool.name
274+ machine_type = pool.flavor
275+ workers_per_zone = pool.workers_per_subnet
276+ operating_system = pool.operating_system
277+ labels = pool.labels
278+ boot_volume_encryption_kms_config = {
279+ crk = pool.boot_volume_crk_name == null ? null : regex (" key:(.*)" , module. key_management . key_map [pool . boot_volume_crk_name ]. crn )[0 ]
280+ kms_instance_id = pool.boot_volume_crk_name == null ? null : regex (" .*:(.*):key:.*" , module. key_management . key_map [pool . boot_volume_crk_name ]. crn )[0 ]
281+ kms_account_id = pool.boot_volume_crk_name == null ? null : regex (" a/([a-f0-9]{32})" , module. key_management . key_map [pool . boot_volume_crk_name ]. crn )[0 ] == data.ibm_iam_account_settings.iam_account_settings.account_id ? null : regex (" a/([a-f0-9]{32})" , module. key_management . key_map [pool . boot_volume_crk_name ]. crn )[0 ]
282+ }
283+ }
284+ ] : []
285+ )
286+ force_delete_storage = each. value . cluster_force_delete_storage
287+ operating_system = each. value . operating_system
288+ ocp_version = each. value . kube_version == null || each. value . kube_version == " default" ? each. value . kube_version : replace (each. value . kube_version , " _openshift" , " " )
289+ import_default_worker_pool_on_create = each. value . import_default_worker_pool_on_create
290+ allow_default_worker_pool_replacement = each. value . allow_default_worker_pool_replacement
291+ tags = var. tags
292+ use_existing_cos = true
293+ existing_cos_id = each. value . cos_instance_crn
294+ disable_public_endpoint = coalesce (each. value . disable_public_endpoint , true ) # disable if not set or null
295+ verify_worker_network_readiness = each. value . verify_worker_network_readiness
296+ use_private_endpoint = each. value . use_private_endpoint
297+ addons = each. value . addons
298+ manage_all_addons = each. value . manage_all_addons
299+ disable_outbound_traffic_protection = each. value . disable_outbound_traffic_protection
300+ kms_config = each. value . kms_config == null ? {} : {
301+ crk_id = regex (" key:(.*)" , module. key_management . key_map [each . value . kms_config . crk_name ]. crn )[0 ]
302+ instance_id = regex (" .*:(.*):key:.*" , module. key_management . key_map [each . value . kms_config . crk_name ]. crn )[0 ]
303+ private_endpoint = each.value.kms_config.private_endpoint
304+ account_id = regex (" a/([a-f0-9]{32})" , module. key_management . key_map [each . value . kms_config . crk_name ]. crn )[0 ] == data.ibm_iam_account_settings.iam_account_settings.account_id ? null : regex (" a/([a-f0-9]{32})" , module. key_management . key_map [each . value . kms_config . crk_name ]. crn )[0 ]
305+ wait_for_apply = each.value.kms_wait_for_apply
306+ }
307+ }
0 commit comments