@@ -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