1- // Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
1+ resource "oci_core_instance_configuration" "bridge_instance_configuration" {
2+ compartment_id = " ${ var . compartment_ocid } "
3+ display_name = " BridgeInstance"
4+ instance_details {
5+ instance_type = " compute"
6+ launch_details {
7+ source_details {
8+ source_type = " image"
9+ image_id = " ${ var . InstanceImageOCID [var . region ]} "
10+ }
11+ create_vnic_details {
12+ skip_source_dest_check = true
13+ }
214
3- # Creating the Bridge Instance
4- resource "oci_core_instance" "BridgeInstance" {
5- availability_domain = " ${ lookup (data. oci_identity_availability_domains . ADs . availability_domains [var . AD - 1 ]," name" )} "
6- compartment_id = " ${ var . compartment_ocid } "
7- display_name = " BridgeInstance"
8- image = " ${ var . InstanceImageOCID [var . region ]} "
9- shape = " ${ var . InstanceShape } "
15+ compartment_id = " ${ var . compartment_ocid } "
16+ display_name = " BridgeInstance"
17+ shape = " ${ var . InstanceShape } "
18+ metadata {
19+ ssh_authorized_keys = " ${ file (var. ssh_public_key_path )} "
20+ user_data = " ${ base64encode (file (" user_data.tpl" ))} "
21+ }
22+ timeouts {
23+ create = " 10m"
24+ }
25+ }
26+ secondary_vnics {
27+ display_name = " SecondaryVNIC"
28+ create_vnic_details {
29+ skip_source_dest_check = true
30+ assign_public_ip = false
31+ }
32+ }
33+ }
34+ }
1035
11- create_vnic_details {
12- subnet_id = " ${ oci_core_subnet . MgmtSubnet . id } "
13- skip_source_dest_check = true
14- }
36+ resource "oci_core_instance_pool" "bridge_instance_pool" {
37+ display_name = " BridgeInstancePool"
38+ compartment_id = " ${ var . compartment_ocid } "
39+ instance_configuration_id = " ${ oci_core_instance_configuration . bridge_instance_configuration . id } "
40+ placement_configurations {
41+ availability_domain = " ${ lookup (data. oci_identity_availability_domains . ADs . availability_domains [var . AD - 1 ]," name" )} "
42+ primary_subnet_id = " ${ oci_core_subnet . MgmtSubnet . id } "
43+ secondary_vnic_subnets {
44+ subnet_id = " ${ oci_core_subnet . MgmtSubnet2 . id } "
45+ display_name = " SecondaryVNIC"
46+ }
47+ }
48+ size = " 1"
49+ }
1550
16- metadata {
17- ssh_authorized_keys = " ${ var . ssh_public_key } "
18- user_data = " ${ base64encode (file (" user_data.tpl" ))} "
19- }
51+ data "oci_core_instance_pool_instances" "bridge_instance_pool_instances" {
2052
21- timeouts {
22- create = " 10m"
23- }
53+ compartment_id = " ${ var . compartment_ocid } "
54+ instance_pool_id = " ${ oci_core_instance_pool . bridge_instance_pool . id } "
2455}
2556
26- # Gets a list of VNIC attachments on the instance
27- data "oci_core_vnic_attachments" "BridgeInstanceVnics" {
28- compartment_id = " ${ var . compartment_ocid } "
29- availability_domain = " ${ lookup (data. oci_identity_availability_domains . ADs . availability_domains [var . AD - 1 ]," name" )} "
30- instance_id = " ${ oci_core_instance . BridgeInstance . id } "
57+ data "oci_core_instance" "bridge_instance" {
58+
59+ instance_id = " ${ lookup (data. oci_core_instance_pool_instances . bridge_instance_pool_instances . instances [0 ]," id" )} "
3160}
3261
33- # Create PrivateIP
62+ # Gets a list of private IPs on the second VNIC
63+
3464resource "oci_core_private_ip" "BridgeInstancePrivateIP" {
35- vnic_id = " ${ lookup ( data. oci_core_vnic_attachments . BridgeInstanceVnics . vnic_attachments [ 0 ], " vnic_id " ) } "
65+ vnic_id = " ${ data . oci_core_vnic . BridgeInstanceVnic1 . id } "
3666 display_name = " BridgeInstancePrivateIP"
3767}
38-
39- # Get the OCID of the first (default) VNIC
40- data "oci_core_vnic" "BridgeInstanceVnic1" {
41- vnic_id = " ${ lookup (data. oci_core_vnic_attachments . BridgeInstanceVnics . vnic_attachments [0 ]," vnic_id" )} "
68+ data "oci_core_private_ips" "BridgeInstancePrivateIP2" {
69+ vnic_id = " ${ data . oci_core_vnic . BridgeInstanceVnic2 . id } "
4270}
4371
44- # Creating secondary VNIC on BridgeInstance and attaching it to Second VCN Mgmt subnet
45- resource "oci_core_vnic_attachment" "SecondaryVnicAttachment" {
46- create_vnic_details {
47- subnet_id = " ${ oci_core_subnet . MgmtSubnet2 . id } "
48- display_name = " SecondaryVNIC"
49- skip_source_dest_check = true
50- }
51-
52- instance_id = " ${ oci_core_instance . BridgeInstance . id } "
53- }
5472
55- # Gets a list of VNIC attachments on the instance
56- data "oci_core_vnic_attachments" "BridgeInstanceVnics2" {
57- compartment_id = " ${ var . compartment_ocid } "
58- availability_domain = " ${ lookup (data. oci_identity_availability_domains . ADs . availability_domains [var . AD - 1 ]," name" )} "
59- instance_id = " ${ oci_core_instance . BridgeInstance . id } "
73+ # Get the OCID of the primary VNIC
74+ data "oci_core_vnic" "BridgeInstanceVnic1" {
75+ vnic_id = " ${ lookup (data. oci_core_vnic_attachments . BridgeInstanceVnics . vnic_attachments [0 ]," vnic_id" )} "
6076}
6177
62- # Gets the OCID of the second VNIC
78+ # Get the OCID of the secondary VNIC
6379data "oci_core_vnic" "BridgeInstanceVnic2" {
64- vnic_id = " ${ oci_core_vnic_attachment . SecondaryVnicAttachment . vnic_id } "
80+ depends_on = [" oci_core_instance_pool.bridge_instance_pool" ]
81+ vnic_id = " ${ lookup (data. oci_core_vnic_attachments . BridgeInstanceVnics . vnic_attachments [1 ]," vnic_id" )} "
6582}
6683
67- # Gets a list of private IPs on the second VNIC
68- data "oci_core_private_ips" "BridgeInstancePrivateIP2" {
69- vnic_id = " ${ data . oci_core_vnic . BridgeInstanceVnic2 . id } "
70- }
84+ data "oci_core_vnic_attachments" "BridgeInstanceVnics" {
85+ compartment_id = " ${ var . compartment_ocid } "
86+ availability_domain = " ${ lookup (data. oci_identity_availability_domains . ADs . availability_domains [var . AD - 1 ]," name" )} "
87+ instance_id = " ${ data . oci_core_instance . bridge_instance . id } "
88+ }
7189
7290# Configurations for setting up the secondary VNIC
7391resource "null_resource" "configure-secondary-vnic" {
92+ depends_on = [" oci_core_instance_pool.bridge_instance_pool" ]
7493 connection {
7594 type = " ssh"
7695 user = " opc"
77- private_key = " ${ var . ssh_private_key } "
78- host = " ${ data . oci_core_vnic . BridgeInstanceVnic1 . public_ip_address } "
96+ private_key = " ${ file ( var. ssh_private_key_path ) } "
97+ host = " ${ data . oci_core_instance . bridge_instance . public_ip } "
7998 timeout = " 30m"
8099 }
81-
82- provisioner "remote-exec" {
100+ provisioner "file" {
101+ source = " scripts/secondary_vnic_all_configure.sh"
102+ destination = " /tmp/secondary_vnic_all_configure.sh"
103+ }
104+ provisioner "remote-exec" {
83105 inline = [
84- " sudo wget https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/secondary_vnic_all_configure.sh" ,
85- " sudo chmod 777 secondary_vnic_all_configure.sh" ,
86- " sudo ./secondary_vnic_all_configure.sh -c ${ lookup (data. oci_core_private_ips . BridgeInstancePrivateIP2 . private_ips [0 ]," id" )} " ,
106+ " sudo chmod 777 /tmp/secondary_vnic_all_configure.sh" ,
107+ " sudo /tmp/secondary_vnic_all_configure.sh -c ${ lookup (data. oci_core_private_ips . BridgeInstancePrivateIP2 . private_ips [0 ]," id" )} " ,
87108 " sudo ip route add ${ var . vcn_cidr2 } dev ens4 via ${ oci_core_subnet . MgmtSubnet2 . virtual_router_ip } " ,
88109 ]
89110 }
90- }
111+ }
0 commit comments