@@ -10,71 +10,89 @@ module "resource_group" {
10
10
existing_resource_group_name = var. resource_group
11
11
}
12
12
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
27
22
}
28
23
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
33
28
zone = " ${ var . region } -1"
34
29
total_ipv4_address_count = 256
30
+ resource_group = module. resource_group . resource_group_id
35
31
}
36
32
37
- # #######################################################################################################################
38
- # OCP VPC cluster (single zone)
39
- # #######################################################################################################################
40
-
33
+ # Lookup the current default kube version
34
+ data "ibm_container_cluster_versions" "cluster_versions" {}
41
35
locals {
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
+ }
51
38
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
61
54
}
62
55
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"
66
69
resource_group_id = module. resource_group . resource_group_id
67
- region = var. region
68
70
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"
74
92
}
75
93
76
94
data "ibm_container_cluster_config" "cluster_config" {
77
- cluster_name_id = module . ocp_base . cluster_id
95
+ cluster_name_id = local . cluster_name_id
78
96
resource_group_id = module. resource_group . resource_group_id
79
97
}
80
98
@@ -85,30 +103,46 @@ resource "time_sleep" "wait_operators" {
85
103
}
86
104
87
105
# #############################################################################
88
- # Monitoring Instance
106
+ # Monitoring instance
89
107
# #############################################################################
90
108
91
109
module "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
99
132
}
100
133
101
134
# #############################################################################
102
135
# Monitoring Agents
103
136
# #############################################################################
104
137
105
138
module "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
109
144
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
114
148
}
0 commit comments