@@ -10,71 +10,89 @@ module "resource_group" {
1010  existing_resource_group_name  =   var. resource_group 
1111}
1212
13- # #######################################################################################################################
14- #  VPC + Subnet + Public Gateway
15- # 
16- #  NOTE: This is a very simple VPC with single subnet in a single zone with a public gateway enabled, that will allow
17- #  all traffic ingress/egress by default.
18- #  For production use cases this would need to be enhanced by adding more subnets and zones for resiliency, and
19- #  ACLs/Security Groups for network security.
20- # #######################################################################################################################
21- 
22- resource  "ibm_is_vpc"  "vpc"  {
23-   name                       =  " ${ var . prefix } -vpc" 
24-   resource_group             =   module. resource_group . resource_group_id 
25-   address_prefix_management  =  " auto" 
26-   tags                       =   var. resource_tags 
13+ # #############################################################################
14+ #  Create VPC and IKS Cluster
15+ # #############################################################################
16+ 
17+ resource  "ibm_is_vpc"  "example_vpc"  {
18+   count           =   var. is_vpc_cluster  ?  1  :  0 
19+   name            =  " ${ var . prefix } -vpc" 
20+   resource_group  =   module. resource_group . resource_group_id 
21+   tags            =   var. resource_tags 
2722}
2823
29- resource  "ibm_is_subnet"  "subnet_zone_1 "  {
30-   name                       =   " ${ var . prefix } -subnet-1 " 
31-   vpc                        =   ibm_is_vpc . vpc . id 
32-   resource_group            =   module . resource_group . resource_group_id 
24+ resource  "ibm_is_subnet"  "testacc_subnet "  {
25+   count                     =    var. is_vpc_cluster   ?   1   :   0 
26+   name                      =   " ${ var . prefix } -subnet " 
27+   vpc                        =   ibm_is_vpc . example_vpc [ 0 ] . id 
3328  zone                      =  " ${ var . region } -1" 
3429  total_ipv4_address_count  =  256 
30+   resource_group            =   module. resource_group . resource_group_id 
3531}
3632
37- # #######################################################################################################################
38- #  OCP VPC cluster (single zone)
39- # #######################################################################################################################
40- 
33+ #  Lookup the current default kube version
34+ data  "ibm_container_cluster_versions"  "cluster_versions"  {}
4135locals  {
42-   cluster_vpc_subnets  =   {
43-     default =  [
44-       {
45-         id         =  ibm_is_subnet.subnet_zone_1.id
46-         cidr_block =  ibm_is_subnet.subnet_zone_1.ipv4_cidr_block
47-         zone       =  ibm_is_subnet.subnet_zone_1.zone
48-       }
49-     ]
50-   }
36+   default_version  =   data. ibm_container_cluster_versions . cluster_versions . default_kube_version 
37+ }
5138
52-   worker_pools  =   [
53-     {
54-       subnet_prefix    =  " default" 
55-       pool_name        =  " default"   #  ibm_container_vpc_cluster automatically names default pool "default" (See https://github.com/IBM-Cloud/terraform-provider-ibm/issues/2849)
56-       machine_type     =  " bx2.4x16" 
57-       operating_system =  " REDHAT_8_64" 
58-       workers_per_zone =  2  #  minimum of 2 is allowed when using single zone
59-     }
60-   ]
39+ resource  "ibm_container_vpc_cluster"  "cluster"  {
40+   count                 =   var. is_vpc_cluster  ?  1  :  0 
41+   name                  =   var. prefix 
42+   vpc_id                =   ibm_is_vpc. example_vpc [0 ]. id 
43+   kube_version          =   local. default_version 
44+   flavor                =  " bx2.4x16" 
45+   worker_count          =  " 2" 
46+   force_delete_storage  =  true 
47+   wait_till             =  " IngressReady" 
48+   zones  {
49+     subnet_id  =   ibm_is_subnet. testacc_subnet [0 ]. id 
50+     name       =  " ${ var . region } -1" 
51+   }
52+   resource_group_id  =   module. resource_group . resource_group_id 
53+   tags               =   var. resource_tags 
6154}
6255
63- module  "ocp_base"  {
64-   source                =  " terraform-ibm-modules/base-ocp-vpc/ibm" 
65-   version               =  " 3.52.0" 
56+ resource  "ibm_container_cluster"  "cluster"  {
57+   # checkov:skip=CKV2_IBM_7:Public endpoint is required for testing purposes
58+   count                 =   var. is_vpc_cluster  ?  0  :  1 
59+   name                  =   var. prefix 
60+   datacenter            =   var. datacenter 
61+   default_pool_size     =  2 
62+   hardware              =  " shared" 
63+   kube_version          =   local. default_version 
64+   force_delete_storage  =  true 
65+   machine_type          =  " b3c.4x16" 
66+   public_vlan_id        =   ibm_network_vlan. public_vlan [0 ]. id 
67+   private_vlan_id       =   ibm_network_vlan. private_vlan [0 ]. id 
68+   wait_till             =  " Normal" 
6669  resource_group_id     =   module. resource_group . resource_group_id 
67-   region                =   var. region 
6870  tags                  =   var. resource_tags 
69-   cluster_name          =   var. prefix 
70-   force_delete_storage  =  true 
71-   vpc_id                =   ibm_is_vpc. vpc . id 
72-   vpc_subnets           =   local. cluster_vpc_subnets 
73-   worker_pools          =   local. worker_pools 
71+ 
72+   timeouts  {
73+     delete  =  " 2h" 
74+     create  =  " 3h" 
75+   }
76+ }
77+ 
78+ locals  {
79+   cluster_name_id  =   var. is_vpc_cluster  ?  ibm_container_vpc_cluster. cluster [0 ]. id  :  ibm_container_cluster. cluster [0 ]. id 
80+ }
81+ 
82+ resource  "ibm_network_vlan"  "public_vlan"  {
83+   count       =   var. is_vpc_cluster  ?  0  :  1 
84+   datacenter  =   var. datacenter 
85+   type        =  " PUBLIC" 
86+ }
87+ 
88+ resource  "ibm_network_vlan"  "private_vlan"  {
89+   count       =   var. is_vpc_cluster  ?  0  :  1 
90+   datacenter  =   var. datacenter 
91+   type        =  " PRIVATE" 
7492}
7593
7694data  "ibm_container_cluster_config"  "cluster_config"  {
77-   cluster_name_id    =  module . ocp_base . cluster_id 
95+   cluster_name_id    =  local . cluster_name_id 
7896  resource_group_id  =   module. resource_group . resource_group_id 
7997}
8098
@@ -85,30 +103,46 @@ resource "time_sleep" "wait_operators" {
85103}
86104
87105# #############################################################################
88- #  Monitoring Instance 
106+ #  Monitoring instance 
89107# #############################################################################
90108
91109module  "cloud_monitoring"  {
92-   source                   =  " terraform-ibm-modules/observability-instances/ibm//modules/cloud_monitoring" 
93-   version                  =  " 3.5.3" 
94-   instance_name            =  " ${ var . prefix } -cloud-monitoring" 
95-   resource_group_id        =   module. resource_group . resource_group_id 
96-   region                   =   var. region 
97-   plan                     =  " graduated-tier" 
98-   enable_platform_metrics  =   var. enable_platform_metrics 
110+   source             =  " terraform-ibm-modules/cloud-monitoring/ibm" 
111+   version            =  " 1.3.0" 
112+   instance_name      =  " ${ var . prefix } -cloud-monitoring" 
113+   resource_group_id  =   module. resource_group . resource_group_id 
114+   resource_tags      =   var. resource_tags 
115+   region             =   var. region 
116+   plan               =  " graduated-tier" 
117+ }
118+ 
119+ # #############################################################################
120+ #  SCC Workload Protection instance
121+ # #############################################################################
122+ 
123+ module  "scc_wp"  {
124+   source                         =  " terraform-ibm-modules/scc-workload-protection/ibm" 
125+   version                        =  " 1.10.3" 
126+   name                           =  " ${ var . prefix } -scc-wp" 
127+   resource_group_id              =   module. resource_group . resource_group_id 
128+   region                         =   var. region 
129+   resource_tags                  =   var. resource_tags 
130+   cloud_monitoring_instance_crn  =   module. cloud_monitoring . crn 
131+   cspm_enabled                   =  false 
99132}
100133
101134# #############################################################################
102135#  Monitoring Agents
103136# #############################################################################
104137
105138module  "monitoring_agents"  {
106-   source                     =  " ../.." 
107-   depends_on                 =   [time_sleep . wait_operators ]
108-   cluster_id                 =   module. ocp_base . cluster_id 
139+   source  =  " ../.." 
140+   #  remove the above line and uncomment the below 2 lines to consume the module from the registry
141+   #  source  = "terraform-ibm-modules/monitoring-agent/ibm"
142+   #  version = "X.Y.Z" # Replace "X.Y.Z" with a release version to lock into a specific release
143+   cluster_id                 =   local. cluster_name_id 
109144  cluster_resource_group_id  =   module. resource_group . resource_group_id 
110-   #  # Monitoring agent
111-   access_key                        =   module. cloud_monitoring . access_key 
112-   cloud_monitoring_instance_region  =   var. region 
113-   enable_universal_ebpf             =  true 
145+   is_vpc_cluster             =   var. is_vpc_cluster 
146+   access_key                 =   module. cloud_monitoring . access_key 
147+   instance_region            =   var. region 
114148}
0 commit comments