Skip to content

Commit 1d920fb

Browse files
authored
Topic sk jcs 13348 (#203)
Implemented [JCS-13348] - Use RMS private endpoint in lieu of bastion host Tested following scenarios New vcn/bastion - provisioning and scale out Existing vcn/new subnets - provisioning and scale out Existing vcn/existing subnets/new rms endpoint - provisioning and scaleout Existing vcn/existing subnets/existing rms endpoint - provisioning and scale out Existing vcn/existing subnets/both rms and bastion enabled - provisioning and scale out Existing vcn/existing subnets/ bastion and rms enabled - provisioning and scale out Existing vcn/existing subnets/ bastion and rms disabled - provisioning and scale out cli changes Tested cli with bastion Updated the builds for srg changes Tested auto scaling with rms endpoint
1 parent 9b7f860 commit 1d920fb

File tree

19 files changed

+346
-71
lines changed

19 files changed

+346
-71
lines changed

builds/build_cli.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ replace_variables()
8080
sed -i '/variable "generate_dg_tag" {/!b;n;n;n;cdefault = false' ${TMP_BUILD}/variables.tf
8181
sed -i '/variable "use_marketplace_image" {/!b;n;n;n;cdefault = false' ${TMP_BUILD}/mp_variables.tf
8282
sed -i '/variable "tf_script_version" {/!b;n;n;n;cdefault = \"'"$SCRIPTS_VERSION"'\"' ${TMP_BUILD}/variables.tf
83+
sed -i '/variable "is_rms_private_endpoint_required" {/!b;n;n;n;cdefault = false' ${TMP_BUILD}/variables.tf
84+
sed -i '/variable "is_bastion_instance_required" {/!b;n;n;n;cdefault = true' ${TMP_BUILD}/bastion_variables.tf
8385
}
8486

8587

solutions/jrf/jrf_instance.tfvars

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ wls_node_count = 2
2626
wls_availability_domain_name = "<availability_domain_name>"
2727
wls_subnet_id = "ocid1.subnet.xxxxxxxxxxxxxxx"
2828

29-
### Bastion parameters to create new bastion instance
29+
### Resource Manager Private Endpoint parameter
30+
is_rms_private_endpoint_required = false
31+
32+
### Bastion instance parameters
3033
is_bastion_instance_required = true
3134
bastion_subnet_id = "ocid1.subnet.xxxxxxxxxxxxxxx"
32-
bastion_instance_shape = "VM.Standard.E4.Flex"
35+
bastion_instance_shape = "VM.Standard.E4.Flex"

terraform/bastion_variables.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
variable "is_bastion_instance_required" {
55
type = bool
66
description = "Set to true to use a bastion, either new or existing. If existing_bastion_instance_id is blank, a new bastion will be created"
7-
default = true
7+
default = false
88
}
99

1010
variable "existing_bastion_instance_id" {

terraform/locals.tf

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ locals {
8484
lb_subnet_1_name = var.is_lb_private ? "lbprist1" : "lbpubst1"
8585
lb_subnet_2_name = var.is_lb_private ? "lbprist2" : "lbpubst2"
8686

87-
8887
lb_id = local.use_existing_lb ? var.existing_load_balancer_id : local.new_lb_id
8988
lb_ip = local.use_existing_lb ? local.existing_lb_ip : local.new_lb_ip
9089

@@ -105,7 +104,7 @@ locals {
105104
local.lb_ip,
106105
) : ""
107106

108-
async_prov_mode = !local.assign_weblogic_public_ip && !var.is_bastion_instance_required ? "Asynchronous provisioning is enabled. Connect to each compute instance and confirm that the file /u01/data/domains/${format("%s_domain", local.service_name_prefix)}/provCompletedMarker exists. Details are found in the file /u01/logs/provisioning.log." : ""
107+
async_prov_mode = !local.assign_weblogic_public_ip && !var.is_rms_private_endpoint_required && !var.is_bastion_instance_required ? "Asynchronous provisioning is enabled. Connect to each compute instance and confirm that the file /u01/data/domains/${format("%s_domain", local.service_name_prefix)}/provCompletedMarker exists. Details are found in the file /u01/logs/provisioning.log." : ""
109108

110109
jdk_labels = { jdk7 = "JDK 7", jdk8 = "JDK 8", jdk11 = "JDK 11" }
111110
jdk_version = var.wls_version == "14.1.1.0" ? local.jdk_labels[var.wls_14c_jdk_version] : (var.wls_version == "11.1.1.7" ? local.jdk_labels["jdk7"] : local.jdk_labels["jdk8"])
@@ -151,13 +150,11 @@ locals {
151150
use_apm_service = (var.use_apm_service || var.use_autoscaling)
152151
apm_domain_compartment_id = local.use_apm_service ? lookup(data.oci_apm_apm_domain.apm_domain[0], "compartment_id") : ""
153152

154-
155-
156153
ocir_namespace = data.oci_objectstorage_namespace.object_namespace.namespace
157154

158-
ocir_namespace_with_slash = format("%s/",local.ocir_namespace)
159-
ocir_user_starts_with = substr(var.ocir_user, 0, length(local.ocir_namespace_with_slash))
160-
ocir_user = local.ocir_user_starts_with == local.ocir_namespace_with_slash ? var.ocir_user : "${format("%s%s", local.ocir_namespace_with_slash, var.ocir_user)}"
155+
ocir_namespace_with_slash = format("%s/", local.ocir_namespace)
156+
ocir_user_starts_with = substr(var.ocir_user, 0, length(local.ocir_namespace_with_slash))
157+
ocir_user = local.ocir_user_starts_with == local.ocir_namespace_with_slash ? var.ocir_user : "${format("%s%s", local.ocir_namespace_with_slash, var.ocir_user)}"
161158

162159
region_keys = data.oci_identity_regions.all_regions.regions.*.key
163160
region_names = data.oci_identity_regions.all_regions.regions.*.name
@@ -180,4 +177,11 @@ locals {
180177
"instanceShape" = var.bastion_instance_shape,
181178
"ocpus" = 1
182179
}
180+
181+
is_bastion_instance_required = (var.is_bastion_instance_required && var.subnet_type != "Use Public Subnet") || var.wls_existing_vcn_id == "" || (var.wls_existing_vcn_id != "" && var.wls_subnet_id == "") ? true : false
182+
183+
# Resource Manager Endpoint
184+
is_rms_private_endpoint_required = var.is_rms_private_endpoint_required && var.wls_existing_vcn_id != "" && var.wls_subnet_id != "" && !local.assign_weblogic_public_ip ? true : false
185+
add_new_rms_private_endpoint = local.is_rms_private_endpoint_required && var.add_rms_private_endpoint == "Create New Resource Manager Endpoint" ? true : false
186+
add_existing_rms_private_endpoint = local.is_rms_private_endpoint_required && var.add_rms_private_endpoint == "Use Existing Resource Manager Endpoint" ? true : false
183187
}

terraform/main.tf

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ module "network-vcn-config" {
7272
create_load_balancer = local.add_load_balancer
7373
resource_name_prefix = local.service_name_prefix
7474
bastion_subnet_cidr = local.bastion_subnet_cidr
75-
is_bastion_instance_required = var.is_bastion_instance_required
75+
is_bastion_instance_required = local.is_bastion_instance_required
7676
existing_bastion_instance_id = var.existing_bastion_instance_id
7777
vcn_cidr = var.wls_vcn_name == "" ? data.oci_core_vcn.wls_vcn[0].cidr_block : element(concat(module.network-vcn.*.vcn_cidr, tolist([""])), 0)
7878
existing_mt_subnet_id = var.mount_target_subnet_id
@@ -116,7 +116,7 @@ module "network-lb-nsg" {
116116

117117
module "network-bastion-nsg" {
118118
source = "./modules/network/nsg"
119-
count = var.is_bastion_instance_required && var.existing_bastion_instance_id == "" && !local.use_existing_subnets && local.bastion_subnet_cidr != "" ? 1 : 0
119+
count = local.is_bastion_instance_required && var.existing_bastion_instance_id == "" && !local.use_existing_subnets && local.bastion_subnet_cidr != "" ? 1 : 0
120120
compartment_id = local.network_compartment_id
121121
vcn_id = local.vcn_id
122122
nsg_name = "${local.service_name_prefix}-bastion-nsg"
@@ -190,13 +190,13 @@ module "network-lb-subnet-1" {
190190
/* Create back end subnet for bastion subnet */
191191
module "network-bastion-subnet" {
192192
source = "./modules/network/subnet"
193-
count = !local.assign_weblogic_public_ip && var.bastion_subnet_id == "" && var.is_bastion_instance_required && var.existing_bastion_instance_id == "" ? 1 : 0
193+
count = !local.assign_weblogic_public_ip && var.bastion_subnet_id == "" && local.is_bastion_instance_required && var.existing_bastion_instance_id == "" ? 1 : 0
194194
compartment_id = local.network_compartment_id
195195
vcn_id = local.vcn_id
196196
dhcp_options_id = length(module.network-vcn-config) > 0 ? module.network-vcn-config[0].dhcp_options_id : ""
197197
route_table_id = length(module.network-vcn-config) > 0 ? module.network-vcn-config[0].route_table_id : ""
198198
subnet_name = "${local.service_name_prefix}-${var.bastion_subnet_name}"
199-
dns_label = "${var.bastion_subnet_name}-${substr(uuid(), -7, -1)}"
199+
dns_label = local.is_bastion_instance_required && local.is_rms_private_endpoint_required ? format("%s-%s", var.bastion_subnet_name, substr(strrev(var.service_name), 0, 7)) : "${var.bastion_subnet_name}-${substr(uuid(), -7, -1)}"
200200
cidr_block = local.bastion_subnet_cidr
201201
prohibit_public_ip = false
202202

@@ -240,11 +240,10 @@ module "policies" {
240240
mount_target_compartment_id = var.mount_target_compartment_id == "" ? var.compartment_ocid : var.mount_target_compartment_id
241241
}
242242

243-
244243
module "bastion" {
245244
#depends_on = [module.network-validation]
246245
source = "./modules/compute/bastion"
247-
count = (!local.assign_weblogic_public_ip && var.is_bastion_instance_required && var.existing_bastion_instance_id == "") ? 1 : 0
246+
count = (!local.assign_weblogic_public_ip && local.is_bastion_instance_required && var.existing_bastion_instance_id == "") ? 1 : 0
248247
availability_domain = local.bastion_availability_domain
249248
bastion_subnet_id = var.bastion_subnet_id != "" ? var.bastion_subnet_id : module.network-bastion-subnet[0].subnet_id
250249

@@ -349,7 +348,7 @@ module "vcn-peering" {
349348

350349
module "validators" {
351350
#depends_on = [module.network-validation]
352-
source = "./modules/validators"
351+
source = "./modules/validators"
353352
compartment_id = var.compartment_ocid
354353
service_name = var.service_name
355354
wls_ms_port = var.wls_ms_extern_port
@@ -394,7 +393,7 @@ module "validators" {
394393
lb_subnet_1_cidr = var.lb_subnet_1_cidr
395394
bastion_subnet_cidr = local.bastion_subnet_cidr
396395
assign_public_ip = local.assign_weblogic_public_ip
397-
is_bastion_instance_required = var.is_bastion_instance_required
396+
is_bastion_instance_required = local.is_bastion_instance_required
398397
existing_bastion_instance_id = var.existing_bastion_instance_id
399398
bastion_ssh_private_key = var.bastion_ssh_private_key
400399

@@ -468,8 +467,8 @@ module "validators" {
468467

469468
module "fss" {
470469
#depends_on = [module.network-validation]
471-
source = "./modules/fss"
472-
count = var.add_fss ? 1 : 0
470+
source = "./modules/fss"
471+
count = var.add_fss ? 1 : 0
473472

474473
compartment_id = var.compartment_ocid
475474
availability_domain = local.fss_availability_domain
@@ -491,8 +490,8 @@ module "fss" {
491490

492491
module "load-balancer" {
493492
#depends_on = [module.network-validation]
494-
source = "./modules/lb/loadbalancer"
495-
count = (local.add_load_balancer && var.existing_load_balancer_id == "") ? 1 : 0
493+
source = "./modules/lb/loadbalancer"
494+
count = (local.add_load_balancer && var.existing_load_balancer_id == "") ? 1 : 0
496495

497496
compartment_id = local.network_compartment_id
498497
lb_reserved_public_ip_id = compact([var.lb_reserved_public_ip_id])
@@ -510,10 +509,26 @@ module "load-balancer" {
510509
}
511510
}
512511

512+
module "rms-private-endpoint" {
513+
source = "./modules/rms-private-endpoint"
514+
count = local.is_rms_private_endpoint_required && local.add_new_rms_private_endpoint ? 1 : 0
515+
516+
vcn_id = local.vcn_id
517+
compartment_id = local.network_compartment_id
518+
private_endpoint_subnet_id = var.wls_subnet_id != "" ? var.wls_subnet_id : element(concat(module.network-wls-private-subnet[*].subnet_id, [""]), 0)
519+
private_endpoint_nsg_id = var.wls_subnet_id != "" ? (var.add_existing_nsg ? [var.existing_admin_server_nsg_id] : []) : element(module.network-compute-admin-nsg[*].nsg_id, 0)
520+
resource_name_prefix = var.service_name
521+
522+
tags = {
523+
defined_tags = local.defined_tags
524+
freeform_tags = local.free_form_tags
525+
}
526+
}
527+
513528
module "observability-common" {
514529
#depends_on = [module.network-validation]
515-
source = "./modules/observability/common"
516-
count = var.use_oci_logging ? 1 : 0
530+
source = "./modules/observability/common"
531+
count = var.use_oci_logging ? 1 : 0
517532

518533
compartment_id = var.compartment_ocid
519534
service_prefix_name = local.service_name_prefix
@@ -522,8 +537,8 @@ module "observability-common" {
522537

523538
module "observability-autoscaling" {
524539
#depends_on = [module.network-validation]
525-
source = "./modules/observability/autoscaling"
526-
count = var.use_autoscaling ? 1 : 0
540+
source = "./modules/observability/autoscaling"
541+
count = var.use_autoscaling ? 1 : 0
527542

528543
compartment_id = var.compartment_ocid
529544
metric_compartment_id = local.apm_domain_compartment_id
@@ -608,7 +623,7 @@ module "compute" {
608623

609624
deploy_sample_app = local.deploy_sample_app
610625

611-
is_bastion_instance_required = var.is_bastion_instance_required
626+
is_bastion_instance_required = local.is_bastion_instance_required
612627

613628
is_idcs_selected = var.is_idcs_selected
614629
idcs_host = var.idcs_host
@@ -683,8 +698,8 @@ module "compute" {
683698

684699
module "load-balancer-backends" {
685700
#depends_on = [module.network-validation]
686-
source = "./modules/lb/backends"
687-
count = local.add_load_balancer ? 1 : 0
701+
source = "./modules/lb/backends"
702+
count = local.add_load_balancer ? 1 : 0
688703

689704
resource_name_prefix = local.service_name_prefix
690705
load_balancer_id = local.add_load_balancer ? (var.existing_load_balancer_id != "" ? var.existing_load_balancer_id : element(coalescelist(module.load-balancer[*].wls_loadbalancer_id, [""]), 0)) : ""
@@ -698,8 +713,8 @@ module "load-balancer-backends" {
698713

699714
module "observability-logging" {
700715
#depends_on = [module.network-validation]
701-
source = "./modules/observability/logging"
702-
count = var.use_oci_logging ? 1 : 0
716+
source = "./modules/observability/logging"
717+
count = var.use_oci_logging ? 1 : 0
703718

704719
compartment_id = var.compartment_ocid
705720
oci_managed_instances_principal_group = element(concat(module.policies[*].oci_managed_instances_principal_group, [""]), 0)
@@ -716,16 +731,18 @@ module "observability-logging" {
716731

717732
module "provisioners" {
718733
#depends_on = [module.network-validation]
719-
source = "./modules/provisioners"
720-
721-
existing_bastion_instance_id = var.existing_bastion_instance_id
722-
host_ips = coalescelist(compact(module.compute.instance_public_ips), compact(module.compute.instance_private_ips), [""])
723-
num_vm_instances = var.wls_node_count
724-
ssh_private_key = module.compute.ssh_private_key_opc
725-
assign_public_ip = local.assign_weblogic_public_ip
726-
bastion_host = local.assign_weblogic_public_ip || !var.is_bastion_instance_required ? "" : var.existing_bastion_instance_id == "" ? module.bastion[0].public_ip : data.oci_core_instance.existing_bastion_instance[0].public_ip
727-
bastion_host_private_key = local.assign_weblogic_public_ip || !var.is_bastion_instance_required ? "" : var.existing_bastion_instance_id == "" ? module.bastion[0].bastion_private_ssh_key : file(var.bastion_ssh_private_key)
728-
is_bastion_instance_required = var.is_bastion_instance_required
734+
source = "./modules/provisioners"
735+
736+
existing_bastion_instance_id = var.existing_bastion_instance_id
737+
host_ips = coalescelist(compact(module.compute.instance_public_ips), compact(module.compute.instance_private_ips), [""])
738+
num_vm_instances = var.wls_node_count
739+
ssh_private_key = module.compute.ssh_private_key_opc
740+
is_rms_private_endpoint_required = local.is_rms_private_endpoint_required
741+
rms_private_endpoint_id = local.is_rms_private_endpoint_required ? local.add_new_rms_private_endpoint ? module.rms-private-endpoint[0].rms_private_endpoint_id : var.rms_existing_private_endpoint_id : ""
742+
assign_public_ip = local.assign_weblogic_public_ip
743+
bastion_host = local.assign_weblogic_public_ip || !local.is_bastion_instance_required ? "" : var.existing_bastion_instance_id == "" ? module.bastion[0].public_ip : data.oci_core_instance.existing_bastion_instance[0].public_ip
744+
bastion_host_private_key = local.assign_weblogic_public_ip || !local.is_bastion_instance_required ? "" : var.existing_bastion_instance_id == "" ? module.bastion[0].bastion_private_ssh_key : file(var.bastion_ssh_private_key)
745+
is_bastion_instance_required = local.is_bastion_instance_required
729746

730747
mode = var.mode
731748
wlsoci_vmscripts_zip_bundle_path = var.wlsoci_vmscripts_zip_bundle_path

terraform/modules/policies/locals.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ locals {
3535
apm_domain_policy_statement = var.use_apm_service ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_instance_principal_group.name} to use apm-domains in compartment id ${var.apm_domain_compartment_id}" : ""
3636
# This policy with "use load_balancer" verb is needed to create load balancer for new vcn
3737
lb_policy_statement = var.add_load_balancer ? length(oci_identity_dynamic_group.wlsc_instance_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_instance_principal_group.name} to use load-balancers in compartment id ${var.network_compartment_id}" : "" : ""
38-
3938
service_statements = compact([local.core_policy_statement1, local.core_policy_statement2, local.core_policy_statement3, local.network_policy_statement1, local.secrets_policy_statement1, local.secrets_policy_statement2,
4039
local.atp_policy_statement1, local.atp_policy_statement2, local.atp_policy_statement3, local.oci_db_policy_statement1, local.oci_db_policy_statement2, local.oci_db_policy_statement3, local.logging_policy,
4140
local.apm_domain_policy_statement, local.lb_policy_statement
@@ -76,6 +75,7 @@ locals {
7675
autoscaling_statement25 = var.use_autoscaling ? length(oci_identity_dynamic_group.wlsc_functions_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_functions_principal_group[0].name} to inspect dynamic-groups in tenancy" : "" : ""
7776
autoscaling_statement26 = var.use_autoscaling ? length(oci_identity_dynamic_group.wlsc_functions_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_functions_principal_group[0].name} to manage policies in tenancy" : "" : ""
7877
autoscaling_statement27 = var.use_autoscaling ? length(oci_identity_dynamic_group.wlsc_functions_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_functions_principal_group[0].name} to use tag-namespaces in tenancy" : "" : ""
78+
autoscaling_statement28 = var.use_autoscaling ? length(oci_identity_dynamic_group.wlsc_functions_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_functions_principal_group[0].name} to manage orm-family in compartment id ${var.network_compartment_id}" : "" : ""
7979
autoscaling_atp_policy_statement = (var.atp_db.is_atp && var.use_autoscaling) ? length(oci_identity_dynamic_group.wlsc_functions_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_functions_principal_group[0].name} to inspect autonomous-transaction-processing-family in compartment id ${var.atp_db.compartment_id}" : "" : ""
8080
autoscaling_db_policy_statement = (local.is_oci_db && var.use_autoscaling) ? length(oci_identity_dynamic_group.wlsc_functions_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_functions_principal_group[0].name} to inspect database-family in compartment id ${var.oci_db.compartment_id}" : "" : ""
8181
autoscaling_fss_mount_target_policy_statement = (var.add_fss && var.use_autoscaling) ? length(oci_identity_dynamic_group.wlsc_functions_principal_group) > 0 ? "Allow dynamic-group ${oci_identity_dynamic_group.wlsc_functions_principal_group[0].name} to manage mount-targets in compartment id ${var.mount_target_compartment_id}" : "" : ""
@@ -96,7 +96,7 @@ locals {
9696
local.autoscaling_statement18, local.autoscaling_statement19, local.autoscaling_statement20,
9797
local.autoscaling_statement21, local.autoscaling_statement22, local.autoscaling_statement23,
9898
local.autoscaling_statement24, local.autoscaling_statement25, local.autoscaling_statement26,
99-
local.autoscaling_statement27,
99+
local.autoscaling_statement27, local.autoscaling_statement28,
100100
local.autoscaling_logging_policy_1, local.autoscaling_logging_policy_2, local.autoscaling_logging_policy_3,
101101
local.autoscaling_atp_policy_statement,
102102
local.autoscaling_db_policy_statement,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Copyright (c) 2023, Oracle and/or its affiliates.
2+
# Licensed under the Universal Permissive License v1.0 as shown at https://oss.oracle.com/licenses/upl.
3+
4+
5+
// Resolves the private IP of the customer's private endpoint to a NAT IP. Used as the host address in the "remote-exec" resource
6+
data "oci_resourcemanager_private_endpoint_reachable_ip" "private_endpoint_reachable_ips" {
7+
count = var.is_rms_private_endpoint_required ? var.num_vm_instances : 0
8+
private_endpoint_id = var.rms_private_endpoint_id
9+
private_ip = var.host_ips[count.index]
10+
}

0 commit comments

Comments
 (0)