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 = "3n-aws-c5n"
16 tg_name = "${var.resource_prefix}-${var.testbed_name}-tg"
17 sut1_name = "${var.resource_prefix}-${var.testbed_name}-sut1"
18 sut2_name = "${var.resource_prefix}-${var.testbed_name}-sut2"
23 source = "../terraform-aws-vpc"
24 security_group_name = local.security_group_name
25 subnet_availability_zone = local.availability_zone
26 tags_name = local.name
27 tags_environment = local.environment
32 source = "../terraform-aws-subnet"
33 subnet_cidr_block = "192.168.10.0/24"
34 subnet_ipv6_cidr_block = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 2)
35 subnet_availability_zone = local.availability_zone
36 tags_name = local.name
37 tags_environment = local.environment
38 subnet_vpc_id = module.vpc.vpc_id
42 source = "../terraform-aws-subnet"
43 subnet_cidr_block = "200.0.0.0/24"
44 subnet_ipv6_cidr_block = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 3)
45 subnet_availability_zone = local.availability_zone
46 tags_name = local.name
47 tags_environment = local.environment
48 subnet_vpc_id = module.vpc.vpc_id
52 source = "../terraform-aws-subnet"
53 subnet_cidr_block = "192.168.20.0/24"
54 subnet_ipv6_cidr_block = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 4)
55 subnet_availability_zone = local.availability_zone
56 tags_name = local.name
57 tags_environment = local.environment
58 subnet_vpc_id = module.vpc.vpc_id
62 resource "tls_private_key" "private_key" {
63 algorithm = var.private_key_algorithm
64 ecdsa_curve = var.private_key_ecdsa_curve
65 rsa_bits = var.private_key_rsa_bits
69 resource "aws_key_pair" "key_pair" {
71 tls_private_key.private_key
73 key_name = local.key_pair_key_name
74 public_key = tls_private_key.private_key.public_key_openssh
77 # Create Placement Group
78 resource "aws_placement_group" "placement_group" {
79 name = local.placement_group_name
80 strategy = var.placement_group_strategy
84 resource "aws_instance" "tg" {
87 aws_placement_group.placement_group
90 availability_zone = local.availability_zone
91 associate_public_ip_address = var.tg_associate_public_ip_address
92 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
93 instance_type = var.tg_instance_type
94 key_name = aws_key_pair.key_pair.key_name
95 placement_group = aws_placement_group.placement_group.id
96 private_ip = var.tg_private_ip
97 source_dest_check = var.tg_source_dest_check
98 subnet_id = module.vpc.vpc_subnet_id
99 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
103 delete_on_termination = true
108 "Name" = local.tg_name
109 "Environment" = local.environment
113 resource "aws_network_interface" "tg_if1" {
118 private_ip = var.tg_if1_private_ip
119 private_ips = [var.tg_if1_private_ip]
120 security_groups = [module.vpc.vpc_security_group_id]
121 source_dest_check = var.tg_source_dest_check
122 subnet_id = module.subnet_b.subnet_id
125 instance = aws_instance.tg.id
130 "Name" = local.tg_name
131 "Environment" = local.environment
135 resource "aws_network_interface" "tg_if2" {
140 private_ips = [var.tg_if2_private_ip]
141 security_groups = [module.vpc.vpc_security_group_id]
142 source_dest_check = var.tg_source_dest_check
143 subnet_id = module.subnet_d.subnet_id
146 instance = aws_instance.tg.id
151 "Name" = local.tg_name
152 "Environment" = local.environment
156 data "aws_network_interface" "tg_if1" {
157 id = aws_network_interface.tg_if1.id
160 data "aws_network_interface" "tg_if2" {
161 id = aws_network_interface.tg_if2.id
164 resource "aws_route" "route_tg_if1" {
168 destination_cidr_block = var.destination_cidr_block_tg_if1
169 network_interface_id = aws_instance.tg.primary_network_interface_id
170 route_table_id = module.vpc.vpc_main_route_table_id
173 resource "aws_route" "route_tg_if2" {
177 destination_cidr_block = var.destination_cidr_block_tg_if2
178 network_interface_id = aws_instance.tg.primary_network_interface_id
179 route_table_id = module.vpc.vpc_main_route_table_id
182 resource "aws_instance" "sut1" {
185 aws_placement_group.placement_group
188 availability_zone = local.availability_zone
189 associate_public_ip_address = var.sut1_associate_public_ip_address
190 instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
191 instance_type = var.sut1_instance_type
192 key_name = aws_key_pair.key_pair.key_name
193 placement_group = aws_placement_group.placement_group.id
194 private_ip = var.sut1_private_ip
195 source_dest_check = var.sut1_source_dest_check
196 subnet_id = module.vpc.vpc_subnet_id
197 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
201 delete_on_termination = true
206 "Name" = local.sut1_name
207 "Environment" = local.environment
211 resource "aws_network_interface" "sut1_if1" {
216 private_ips = [var.sut1_if1_private_ip]
217 security_groups = [module.vpc.vpc_security_group_id]
218 source_dest_check = var.sut1_source_dest_check
219 subnet_id = module.subnet_b.subnet_id
222 instance = aws_instance.sut1.id
227 "Name" = local.sut1_name
228 "Environment" = local.environment
232 resource "aws_network_interface" "sut1_if2" {
237 private_ips = [var.sut1_if2_private_ip]
238 security_groups = [module.vpc.vpc_security_group_id]
239 source_dest_check = var.sut1_source_dest_check
240 subnet_id = module.subnet_c.subnet_id
243 instance = aws_instance.sut1.id
248 "Name" = local.sut1_name
249 "Environment" = local.environment
253 data "aws_network_interface" "sut1_if1" {
254 id = aws_network_interface.sut1_if1.id
257 data "aws_network_interface" "sut1_if2" {
258 id = aws_network_interface.sut1_if2.id
261 resource "aws_instance" "sut2" {
264 aws_placement_group.placement_group
267 availability_zone = local.availability_zone
268 associate_public_ip_address = var.sut2_associate_public_ip_address
269 instance_initiated_shutdown_behavior = var.sut2_instance_initiated_shutdown_behavior
270 instance_type = var.sut2_instance_type
271 key_name = aws_key_pair.key_pair.key_name
272 placement_group = aws_placement_group.placement_group.id
273 private_ip = var.sut2_private_ip
274 source_dest_check = var.sut2_source_dest_check
275 subnet_id = module.vpc.vpc_subnet_id
276 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
280 delete_on_termination = true
285 "Name" = local.sut2_name
286 "Environment" = local.environment
290 resource "aws_network_interface" "sut2_if1" {
295 private_ips = [var.sut2_if1_private_ip]
296 security_groups = [module.vpc.vpc_security_group_id]
297 source_dest_check = var.sut2_source_dest_check
298 subnet_id = module.subnet_c.subnet_id
301 instance = aws_instance.sut2.id
306 "Name" = local.sut2_name
307 "Environment" = local.environment
311 resource "aws_network_interface" "sut2_if2" {
316 private_ips = [var.sut2_if2_private_ip]
317 security_groups = [module.vpc.vpc_security_group_id]
318 source_dest_check = var.sut2_source_dest_check
319 subnet_id = module.subnet_d.subnet_id
322 instance = aws_instance.sut2.id
327 "Name" = local.sut2_name
328 "Environment" = local.environment
332 data "aws_network_interface" "sut2_if1" {
333 id = aws_network_interface.sut2_if1.id
336 data "aws_network_interface" "sut2_if2" {
337 id = aws_network_interface.sut2_if2.id
340 resource "null_resource" "deploy_tg" {
343 aws_network_interface.tg_if1,
344 aws_network_interface.tg_if2,
346 aws_network_interface.sut1_if1,
347 aws_network_interface.sut1_if2,
349 aws_network_interface.sut2_if1,
350 aws_network_interface.sut2_if2
355 host = aws_instance.tg.public_ip
356 private_key = tls_private_key.private_key.private_key_pem
359 provisioner "remote-exec" {
360 inline = var.first_run_commands
364 resource "null_resource" "deploy_sut1" {
367 aws_network_interface.tg_if1,
368 aws_network_interface.tg_if2,
370 aws_network_interface.sut1_if1,
371 aws_network_interface.sut1_if2,
373 aws_network_interface.sut2_if1,
374 aws_network_interface.sut2_if2
379 host = aws_instance.sut1.public_ip
380 private_key = tls_private_key.private_key.private_key_pem
383 provisioner "remote-exec" {
384 inline = var.first_run_commands
388 resource "null_resource" "deploy_sut2" {
391 aws_network_interface.tg_if1,
392 aws_network_interface.tg_if2,
394 aws_network_interface.sut1_if1,
395 aws_network_interface.sut1_if2,
397 aws_network_interface.sut2_if1,
398 aws_network_interface.sut2_if2
403 host = aws_instance.sut2.public_ip
404 private_key = tls_private_key.private_key.private_key_pem
407 provisioner "remote-exec" {
408 inline = var.first_run_commands
412 resource "null_resource" "deploy_topology" {
419 provisioner "ansible" {
422 file_path = var.ansible_topology_path
426 ansible_python_interpreter = local.ansible_python_executable
427 testbed_name = local.testbed_name
428 cloud_topology = local.topology_name
429 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
430 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
431 dut1_if1_mac = data.aws_network_interface.sut1_if1.mac_address
432 dut1_if2_mac = data.aws_network_interface.sut1_if2.mac_address
433 dut2_if1_mac = data.aws_network_interface.sut2_if1.mac_address
434 dut2_if2_mac = data.aws_network_interface.sut2_if2.mac_address
435 tg_public_ip = aws_instance.tg.public_ip
436 dut1_public_ip = aws_instance.sut1.public_ip
437 dut2_public_ip = aws_instance.sut2.public_ip
438 public_ip_list = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip},${aws_instance.sut2.public_ip}"