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
67 resource "aws_key_pair" "key_pair" {
69 tls_private_key.private_key
71 key_name = local.key_pair_key_name
72 public_key = tls_private_key.private_key.public_key_openssh
75 # Create Placement Group
76 resource "aws_placement_group" "placement_group" {
77 name = local.placement_group_name
78 strategy = var.placement_group_strategy
82 resource "aws_instance" "tg" {
85 aws_placement_group.placement_group
88 availability_zone = local.availability_zone
89 associate_public_ip_address = var.tg_associate_public_ip_address
90 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
91 instance_type = var.tg_instance_type
92 key_name = aws_key_pair.key_pair.key_name
93 placement_group = aws_placement_group.placement_group.id
94 private_ip = var.tg_private_ip
95 source_dest_check = var.tg_source_dest_check
96 subnet_id = module.vpc.vpc_subnet_id
97 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
101 delete_on_termination = true
106 "Name" = local.tg_name
107 "Environment" = local.environment
111 resource "aws_network_interface" "tg_if1" {
116 private_ip = var.tg_if1_private_ip
117 private_ips = [var.tg_if1_private_ip]
118 security_groups = [module.vpc.vpc_security_group_id]
119 source_dest_check = var.tg_source_dest_check
120 subnet_id = module.subnet_b.subnet_id
123 instance = aws_instance.tg.id
128 "Name" = local.tg_name
129 "Environment" = local.environment
133 resource "aws_network_interface" "tg_if2" {
138 private_ips = [var.tg_if2_private_ip]
139 security_groups = [module.vpc.vpc_security_group_id]
140 source_dest_check = var.tg_source_dest_check
141 subnet_id = module.subnet_d.subnet_id
144 instance = aws_instance.tg.id
149 "Name" = local.tg_name
150 "Environment" = local.environment
154 data "aws_network_interface" "tg_if1" {
155 id = aws_network_interface.tg_if1.id
158 data "aws_network_interface" "tg_if2" {
159 id = aws_network_interface.tg_if2.id
162 resource "aws_route" "route_tg_if1" {
166 destination_cidr_block = var.destination_cidr_block_tg_if1
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_route" "route_tg_if2" {
175 destination_cidr_block = var.destination_cidr_block_tg_if2
176 network_interface_id = aws_instance.tg.primary_network_interface_id
177 route_table_id = module.vpc.vpc_main_route_table_id
180 resource "aws_instance" "sut1" {
183 aws_placement_group.placement_group
186 availability_zone = local.availability_zone
187 associate_public_ip_address = var.sut1_associate_public_ip_address
188 instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
189 instance_type = var.sut1_instance_type
190 key_name = aws_key_pair.key_pair.key_name
191 placement_group = aws_placement_group.placement_group.id
192 private_ip = var.sut1_private_ip
193 source_dest_check = var.sut1_source_dest_check
194 subnet_id = module.vpc.vpc_subnet_id
195 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
199 delete_on_termination = true
204 "Name" = local.sut1_name
205 "Environment" = local.environment
209 resource "aws_network_interface" "sut1_if1" {
214 private_ips = [var.sut1_if1_private_ip]
215 security_groups = [module.vpc.vpc_security_group_id]
216 source_dest_check = var.sut1_source_dest_check
217 subnet_id = module.subnet_b.subnet_id
220 instance = aws_instance.sut1.id
225 "Name" = local.sut1_name
226 "Environment" = local.environment
230 resource "aws_network_interface" "sut1_if2" {
235 private_ips = [var.sut1_if2_private_ip]
236 security_groups = [module.vpc.vpc_security_group_id]
237 source_dest_check = var.sut1_source_dest_check
238 subnet_id = module.subnet_c.subnet_id
241 instance = aws_instance.sut1.id
246 "Name" = local.sut1_name
247 "Environment" = local.environment
251 data "aws_network_interface" "sut1_if1" {
252 id = aws_network_interface.sut1_if1.id
255 data "aws_network_interface" "sut1_if2" {
256 id = aws_network_interface.sut1_if2.id
259 resource "aws_instance" "sut2" {
262 aws_placement_group.placement_group
265 availability_zone = local.availability_zone
266 associate_public_ip_address = var.sut2_associate_public_ip_address
267 instance_initiated_shutdown_behavior = var.sut2_instance_initiated_shutdown_behavior
268 instance_type = var.sut2_instance_type
269 key_name = aws_key_pair.key_pair.key_name
270 placement_group = aws_placement_group.placement_group.id
271 private_ip = var.sut2_private_ip
272 source_dest_check = var.sut2_source_dest_check
273 subnet_id = module.vpc.vpc_subnet_id
274 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
278 delete_on_termination = true
283 "Name" = local.sut2_name
284 "Environment" = local.environment
288 resource "aws_network_interface" "sut2_if1" {
293 private_ips = [var.sut2_if1_private_ip]
294 security_groups = [module.vpc.vpc_security_group_id]
295 source_dest_check = var.sut2_source_dest_check
296 subnet_id = module.subnet_c.subnet_id
299 instance = aws_instance.sut2.id
304 "Name" = local.sut2_name
305 "Environment" = local.environment
309 resource "aws_network_interface" "sut2_if2" {
314 private_ips = [var.sut2_if2_private_ip]
315 security_groups = [module.vpc.vpc_security_group_id]
316 source_dest_check = var.sut2_source_dest_check
317 subnet_id = module.subnet_d.subnet_id
320 instance = aws_instance.sut2.id
325 "Name" = local.sut2_name
326 "Environment" = local.environment
330 data "aws_network_interface" "sut2_if1" {
331 id = aws_network_interface.sut2_if1.id
334 data "aws_network_interface" "sut2_if2" {
335 id = aws_network_interface.sut2_if2.id
338 resource "null_resource" "deploy_tg" {
341 aws_network_interface.tg_if1,
342 aws_network_interface.tg_if2,
344 aws_network_interface.sut1_if1,
345 aws_network_interface.sut1_if2,
347 aws_network_interface.sut2_if1,
348 aws_network_interface.sut2_if2
353 host = aws_instance.tg.public_ip
354 private_key = tls_private_key.private_key.private_key_pem
357 provisioner "remote-exec" {
358 inline = var.first_run_commands
362 resource "null_resource" "deploy_sut1" {
365 aws_network_interface.tg_if1,
366 aws_network_interface.tg_if2,
368 aws_network_interface.sut1_if1,
369 aws_network_interface.sut1_if2,
371 aws_network_interface.sut2_if1,
372 aws_network_interface.sut2_if2
377 host = aws_instance.sut1.public_ip
378 private_key = tls_private_key.private_key.private_key_pem
381 provisioner "remote-exec" {
382 inline = var.first_run_commands
386 resource "null_resource" "deploy_sut2" {
389 aws_network_interface.tg_if1,
390 aws_network_interface.tg_if2,
392 aws_network_interface.sut1_if1,
393 aws_network_interface.sut1_if2,
395 aws_network_interface.sut2_if1,
396 aws_network_interface.sut2_if2
401 host = aws_instance.sut2.public_ip
402 private_key = tls_private_key.private_key.private_key_pem
405 provisioner "remote-exec" {
406 inline = var.first_run_commands
410 resource "null_resource" "deploy_topology" {
417 provisioner "ansible" {
420 file_path = var.ansible_topology_path
424 ansible_python_interpreter = local.ansible_python_executable
425 testbed_name = local.testbed_name
426 cloud_topology = local.topology_name
427 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
428 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
429 dut1_if1_mac = data.aws_network_interface.sut1_if1.mac_address
430 dut1_if2_mac = data.aws_network_interface.sut1_if2.mac_address
431 dut2_if1_mac = data.aws_network_interface.sut2_if1.mac_address
432 dut2_if2_mac = data.aws_network_interface.sut2_if2.mac_address
433 tg_public_ip = aws_instance.tg.public_ip
434 dut1_public_ip = aws_instance.sut1.public_ip
435 dut2_public_ip = aws_instance.sut2.public_ip
436 public_ip_list = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip},${aws_instance.sut2.public_ip}"