1 data "vault_aws_access_credentials" "creds" {
2 backend = "${var.vault-name}-path"
3 role = "${var.vault-name}-role"
7 ansible_python_executable = "/usr/bin/python3"
8 availability_zone = "eu-central-1a"
10 environment = "csit-vpc-environment"
11 key_pair_key_name = "${var.resource_prefix}-${var.testbed_name}-pk"
12 placement_group_name = "${var.resource_prefix}-${var.testbed_name}-pg"
13 security_group_name = "${var.resource_prefix}-${var.testbed_name}-sg"
14 testbed_name = "testbed1"
15 topology_name = "2n-aws-c5n"
16 tg_name = "${var.resource_prefix}-${var.testbed_name}-tg"
17 sut1_name = "${var.resource_prefix}-${var.testbed_name}-sut1"
22 source = "../terraform-aws-vpc"
23 security_group_name = local.security_group_name
24 subnet_availability_zone = local.availability_zone
25 tags_name = local.name
26 tags_environment = local.environment
31 source = "../terraform-aws-subnet"
32 subnet_cidr_block = "192.168.10.0/24"
33 subnet_ipv6_cidr_block = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 2)
34 subnet_availability_zone = local.availability_zone
35 tags_name = local.name
36 tags_environment = local.environment
37 subnet_vpc_id = module.vpc.vpc_id
41 source = "../terraform-aws-subnet"
42 subnet_cidr_block = "192.168.20.0/24"
43 subnet_ipv6_cidr_block = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 4)
44 subnet_availability_zone = local.availability_zone
45 tags_name = local.name
46 tags_environment = local.environment
47 subnet_vpc_id = module.vpc.vpc_id
51 resource "tls_private_key" "private_key" {
52 algorithm = var.private_key_algorithm
53 ecdsa_curve = var.private_key_ecdsa_curve
54 rsa_bits = var.private_key_rsa_bits
58 resource "aws_key_pair" "key_pair" {
60 tls_private_key.private_key
62 key_name = local.key_pair_key_name
63 public_key = tls_private_key.private_key.public_key_openssh
66 # Create Placement Group
67 resource "aws_placement_group" "placement_group" {
68 name = local.placement_group_name
69 strategy = var.placement_group_strategy
73 resource "aws_instance" "tg" {
76 aws_placement_group.placement_group
79 availability_zone = local.availability_zone
80 associate_public_ip_address = var.tg_associate_public_ip_address
81 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
82 instance_type = var.tg_instance_type
83 key_name = aws_key_pair.key_pair.key_name
84 placement_group = aws_placement_group.placement_group.id
85 private_ip = var.tg_private_ip
86 source_dest_check = var.tg_source_dest_check
87 subnet_id = module.vpc.vpc_subnet_id
88 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
92 delete_on_termination = true
97 "Name" = local.tg_name
98 "Environment" = local.environment
102 resource "aws_network_interface" "tg_if1" {
107 private_ip = var.tg_if1_private_ip
108 private_ips = [var.tg_if1_private_ip]
109 security_groups = [module.vpc.vpc_security_group_id]
110 source_dest_check = var.tg_source_dest_check
111 subnet_id = module.subnet_b.subnet_id
114 instance = aws_instance.tg.id
119 "Name" = local.tg_name
120 "Environment" = local.environment
124 resource "aws_network_interface" "tg_if2" {
129 private_ips = [var.tg_if2_private_ip]
130 security_groups = [module.vpc.vpc_security_group_id]
131 source_dest_check = var.tg_source_dest_check
132 subnet_id = module.subnet_d.subnet_id
135 instance = aws_instance.tg.id
140 "Name" = local.tg_name
141 "Environment" = local.environment
145 data "aws_network_interface" "tg_if1" {
146 id = aws_network_interface.tg_if1.id
149 data "aws_network_interface" "tg_if2" {
150 id = aws_network_interface.tg_if2.id
153 resource "aws_route" "route_tg_if1" {
157 destination_cidr_block = var.destination_cidr_block_tg_if1
158 network_interface_id = aws_instance.tg.primary_network_interface_id
159 route_table_id = module.vpc.vpc_main_route_table_id
162 resource "aws_route" "route_tg_if2" {
166 destination_cidr_block = var.destination_cidr_block_tg_if2
167 network_interface_id = aws_instance.tg.primary_network_interface_id
168 route_table_id = module.vpc.vpc_main_route_table_id
171 resource "aws_instance" "sut1" {
174 aws_placement_group.placement_group
177 availability_zone = local.availability_zone
178 associate_public_ip_address = var.sut1_associate_public_ip_address
179 instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
180 instance_type = var.sut1_instance_type
181 key_name = aws_key_pair.key_pair.key_name
182 placement_group = aws_placement_group.placement_group.id
183 private_ip = var.sut1_private_ip
184 source_dest_check = var.sut1_source_dest_check
185 subnet_id = module.vpc.vpc_subnet_id
186 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
190 delete_on_termination = true
195 "Name" = local.sut1_name
196 "Environment" = local.environment
200 resource "aws_network_interface" "sut1_if1" {
205 private_ips = [var.sut1_if1_private_ip]
206 security_groups = [module.vpc.vpc_security_group_id]
207 source_dest_check = var.sut1_source_dest_check
208 subnet_id = module.subnet_b.subnet_id
211 instance = aws_instance.sut1.id
216 "Name" = local.sut1_name
217 "Environment" = local.environment
221 resource "aws_network_interface" "sut1_if2" {
226 private_ips = [var.sut1_if2_private_ip]
227 security_groups = [module.vpc.vpc_security_group_id]
228 source_dest_check = var.sut1_source_dest_check
229 subnet_id = module.subnet_d.subnet_id
232 instance = aws_instance.sut1.id
237 "Name" = local.sut1_name
238 "Environment" = local.environment
242 data "aws_network_interface" "sut1_if1" {
243 id = aws_network_interface.sut1_if1.id
246 data "aws_network_interface" "sut1_if2" {
247 id = aws_network_interface.sut1_if2.id
250 resource "null_resource" "deploy_tg" {
253 aws_network_interface.tg_if1,
254 aws_network_interface.tg_if2,
256 aws_network_interface.sut1_if1,
257 aws_network_interface.sut1_if2
262 host = aws_instance.tg.public_ip
263 private_key = tls_private_key.private_key.private_key_pem
266 provisioner "remote-exec" {
267 inline = var.first_run_commands
271 resource "null_resource" "deploy_sut1" {
274 aws_network_interface.tg_if1,
275 aws_network_interface.tg_if2,
277 aws_network_interface.sut1_if1,
278 aws_network_interface.sut1_if2
283 host = aws_instance.sut1.public_ip
284 private_key = tls_private_key.private_key.private_key_pem
287 provisioner "remote-exec" {
288 inline = var.first_run_commands
292 resource "null_resource" "deploy_topology" {
298 provisioner "ansible" {
301 file_path = var.ansible_topology_path
305 ansible_python_interpreter = local.ansible_python_executable
306 testbed_name = local.testbed_name
307 cloud_topology = local.topology_name
308 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
309 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
310 dut1_if1_mac = data.aws_network_interface.sut1_if1.mac_address
311 dut1_if2_mac = data.aws_network_interface.sut1_if2.mac_address
312 tg_public_ip = aws_instance.tg.public_ip
313 dut1_public_ip = aws_instance.sut1.public_ip
314 public_ip_list = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip}"