5 resource "aws_vpc" "CSITVPC" {
6 cidr_block = var.vpc_cidr_mgmt
9 "Name" = "${var.resources_name_prefix}_${var.testbed_name}-vpc"
10 "Environment" = var.environment_name
14 resource "aws_security_group" "CSITSG" {
15 name = "${var.resources_name_prefix}_${var.testbed_name}-sg"
16 description = "Allow inbound traffic"
17 vpc_id = aws_vpc.CSITVPC.id
18 depends_on = [aws_vpc.CSITVPC]
24 cidr_blocks = ["0.0.0.0/0"]
38 cidr_blocks = ["0.0.0.0/0"]
42 "Name" = "${var.resources_name_prefix}_${var.testbed_name}-sg"
43 "Environment" = var.environment_name
47 resource "aws_vpc_ipv4_cidr_block_association" "b" {
48 vpc_id = aws_vpc.CSITVPC.id
49 cidr_block = var.vpc_cidr_b
50 depends_on = [aws_vpc.CSITVPC]
52 resource "aws_vpc_ipv4_cidr_block_association" "c" {
53 vpc_id = aws_vpc.CSITVPC.id
54 cidr_block = var.vpc_cidr_c
55 depends_on = [aws_vpc.CSITVPC]
57 resource "aws_vpc_ipv4_cidr_block_association" "d" {
58 vpc_id = aws_vpc.CSITVPC.id
59 cidr_block = var.vpc_cidr_d
60 depends_on = [aws_vpc.CSITVPC]
64 resource "aws_subnet" "mgmt" {
65 vpc_id = aws_vpc.CSITVPC.id
66 cidr_block = var.vpc_cidr_mgmt
67 availability_zone = var.avail_zone
68 depends_on = [aws_vpc.CSITVPC]
71 "Environment" = var.environment_name
74 resource "aws_subnet" "b" {
75 vpc_id = aws_vpc.CSITVPC.id
76 cidr_block = var.vpc_cidr_b
77 availability_zone = var.avail_zone
78 depends_on = [aws_vpc.CSITVPC, aws_vpc_ipv4_cidr_block_association.b]
81 "Environment" = var.environment_name
84 resource "aws_subnet" "c" {
85 vpc_id = aws_vpc.CSITVPC.id
86 cidr_block = var.vpc_cidr_c
87 availability_zone = var.avail_zone
88 depends_on = [aws_vpc.CSITVPC, aws_vpc_ipv4_cidr_block_association.c]
91 "Environment" = var.environment_name
94 resource "aws_subnet" "d" {
95 vpc_id = aws_vpc.CSITVPC.id
96 cidr_block = var.vpc_cidr_d
97 availability_zone = var.avail_zone
98 depends_on = [aws_vpc.CSITVPC, aws_vpc_ipv4_cidr_block_association.d]
101 "Environment" = var.environment_name
105 resource "aws_internet_gateway" "CSITGW" {
106 vpc_id = aws_vpc.CSITVPC.id
107 depends_on = [aws_vpc.CSITVPC]
110 "Environment" = var.environment_name
115 # Temporary key for provisioning only
116 resource "tls_private_key" "CSITTLS" {
120 resource "aws_key_pair" "CSITKP" {
121 key_name = "CSIT_3n_aws_c5n_${var.testbed_name}-key"
122 public_key = tls_private_key.CSITTLS.public_key_openssh
125 resource "aws_placement_group" "CSITPG" {
126 name = "${var.resources_name_prefix}_${var.testbed_name}-pg"
131 resource "aws_network_interface" "dut1_if1" {
132 subnet_id = aws_subnet.b.id
133 source_dest_check = false
134 private_ip = var.dut1_if1_ip
135 private_ips = [var.dut1_if1_ip]
136 security_groups = [aws_security_group.CSITSG.id]
137 depends_on = [aws_vpc.CSITVPC, aws_subnet.b, aws_instance.dut1]
140 instance = aws_instance.dut1.id
145 "Environment" = var.environment_name
149 resource "aws_network_interface" "dut1_if2" {
150 subnet_id = aws_subnet.c.id
151 source_dest_check = false
152 private_ip = var.dut1_if2_ip
153 private_ips = [var.dut1_if2_ip]
154 security_groups = [aws_security_group.CSITSG.id]
155 depends_on = [aws_vpc.CSITVPC, aws_subnet.c, aws_instance.dut1]
158 instance = aws_instance.dut1.id
163 "Environment" = var.environment_name
167 resource "aws_network_interface" "dut2_if1" {
168 subnet_id = aws_subnet.c.id
169 source_dest_check = false
170 private_ip = var.dut2_if1_ip
171 private_ips = [var.dut2_if1_ip]
172 security_groups = [aws_security_group.CSITSG.id]
173 depends_on = [aws_vpc.CSITVPC, aws_subnet.c, aws_instance.dut2]
176 instance = aws_instance.dut2.id
181 "Environment" = var.environment_name
185 resource "aws_network_interface" "dut2_if2" {
186 subnet_id = aws_subnet.d.id
187 source_dest_check = false
188 private_ip = var.dut2_if2_ip
189 private_ips = [var.dut2_if2_ip]
190 security_groups = [aws_security_group.CSITSG.id]
191 depends_on = [aws_vpc.CSITVPC, aws_subnet.d, aws_instance.dut2]
194 instance = aws_instance.dut2.id
199 "Environment" = var.environment_name
203 resource "aws_network_interface" "tg_if1" {
204 subnet_id = aws_subnet.b.id
205 source_dest_check = false
206 private_ip = var.tg_if1_ip
207 private_ips = [var.tg_if1_ip]
208 security_groups = [aws_security_group.CSITSG.id]
209 depends_on = [aws_vpc.CSITVPC, aws_subnet.b, aws_instance.tg]
212 instance = aws_instance.tg.id
217 "Environment" = var.environment_name
221 resource "aws_network_interface" "tg_if2" {
222 subnet_id = aws_subnet.d.id
223 source_dest_check = false
224 private_ip = var.tg_if2_ip
225 private_ips = [var.tg_if2_ip]
226 security_groups = [aws_security_group.CSITSG.id]
227 depends_on = [aws_vpc.CSITVPC, aws_subnet.d, aws_instance.tg]
230 instance = aws_instance.tg.id
235 "Environment" = var.environment_name
239 data "aws_network_interface" "dut1_if1" {
240 id = aws_network_interface.dut1_if1.id
243 data "aws_network_interface" "dut1_if2" {
244 id = aws_network_interface.dut1_if2.id
247 data "aws_network_interface" "dut2_if1" {
248 id = aws_network_interface.dut2_if1.id
251 data "aws_network_interface" "dut2_if2" {
252 id = aws_network_interface.dut2_if2.id
255 data "aws_network_interface" "tg_if1" {
256 id = aws_network_interface.tg_if1.id
259 data "aws_network_interface" "tg_if2" {
260 id = aws_network_interface.tg_if2.id
264 resource "aws_instance" "tg" {
266 availability_zone = var.avail_zone
267 instance_type = var.instance_type
268 key_name = aws_key_pair.CSITKP.key_name
269 associate_public_ip_address = true
270 subnet_id = aws_subnet.mgmt.id
271 private_ip = var.tg_mgmt_ip
272 vpc_security_group_ids = [aws_security_group.CSITSG.id]
273 placement_group = aws_placement_group.CSITPG.id
274 source_dest_check = false
279 aws_placement_group.CSITPG,
287 "Name" = "${var.resources_name_prefix}_${var.testbed_name}-tg"
288 "Environment" = var.environment_name
292 resource "aws_instance" "dut1" {
294 availability_zone = var.avail_zone
295 instance_type = var.instance_type
296 key_name = aws_key_pair.CSITKP.key_name
297 associate_public_ip_address = true
298 subnet_id = aws_subnet.mgmt.id
299 private_ip = var.dut1_mgmt_ip
300 vpc_security_group_ids = [aws_security_group.CSITSG.id]
301 placement_group = aws_placement_group.CSITPG.id
302 source_dest_check = false
307 aws_placement_group.CSITPG,
316 "Name" = "${var.resources_name_prefix}_${var.testbed_name}-dut1"
317 "Environment" = var.environment_name
321 resource "aws_instance" "dut2" {
323 availability_zone = var.avail_zone
324 instance_type = var.instance_type
325 key_name = aws_key_pair.CSITKP.key_name
326 associate_public_ip_address = true
327 subnet_id = aws_subnet.mgmt.id
328 private_ip = var.dut2_mgmt_ip
329 vpc_security_group_ids = [aws_security_group.CSITSG.id]
330 placement_group = aws_placement_group.CSITPG.id
331 source_dest_check = false
336 aws_placement_group.CSITPG,
346 "Name" = "${var.resources_name_prefix}_${var.testbed_name}-dut2"
347 "Environment" = var.environment_name
352 resource "aws_route" "CSIT-igw" {
353 route_table_id = aws_vpc.CSITVPC.main_route_table_id
354 gateway_id = aws_internet_gateway.CSITGW.id
355 destination_cidr_block = "0.0.0.0/0"
356 depends_on = [aws_vpc.CSITVPC, aws_internet_gateway.CSITGW]
358 resource "aws_route" "dummy-trex-port-0" {
359 route_table_id = aws_vpc.CSITVPC.main_route_table_id
360 network_interface_id = aws_instance.tg.primary_network_interface_id
361 destination_cidr_block = var.trex_dummy_cidr_port_0
362 depends_on = [aws_vpc.CSITVPC, aws_instance.dut1]
364 resource "aws_route" "dummy-trex-port-1" {
365 route_table_id = aws_vpc.CSITVPC.main_route_table_id
366 network_interface_id = aws_instance.tg.primary_network_interface_id
367 destination_cidr_block = var.trex_dummy_cidr_port_1
368 depends_on = [aws_vpc.CSITVPC, aws_instance.dut1]
372 resource "null_resource" "deploy_tg" {
375 aws_network_interface.tg_if1,
376 aws_network_interface.tg_if2,
378 aws_network_interface.dut1_if1,
379 aws_network_interface.dut1_if2,
381 aws_network_interface.dut2_if1,
382 aws_network_interface.dut2_if2
387 host = aws_instance.tg.public_ip
388 private_key = tls_private_key.CSITTLS.private_key_pem
391 provisioner "remote-exec" {
392 inline = var.first_run_commands
395 provisioner "ansible" {
398 file_path = var.ansible_file_path
399 force_handlers = true
403 ansible_ssh_pass = var.ansible_provision_pwd
404 ansible_python_interpreter = var.ansible_python_executable
410 provisioner "remote-exec" {
411 on_failure = continue
412 inline = ["sudo reboot"]
416 resource "null_resource" "deploy_dut1" {
419 aws_network_interface.tg_if1,
420 aws_network_interface.tg_if2,
422 aws_network_interface.dut1_if1,
423 aws_network_interface.dut1_if2,
425 aws_network_interface.dut2_if1,
426 aws_network_interface.dut2_if2
431 host = aws_instance.dut1.public_ip
432 private_key = tls_private_key.CSITTLS.private_key_pem
435 provisioner "remote-exec" {
436 inline = var.first_run_commands
439 provisioner "ansible" {
442 file_path = var.ansible_file_path
443 force_handlers = true
447 ansible_ssh_pass = var.ansible_provision_pwd
448 ansible_python_interpreter = var.ansible_python_executable
454 provisioner "remote-exec" {
455 on_failure = continue
456 inline = ["sudo reboot"]
460 resource "null_resource" "deploy_dut2" {
463 aws_network_interface.tg_if1,
464 aws_network_interface.tg_if2,
466 aws_network_interface.dut1_if1,
467 aws_network_interface.dut1_if2,
469 aws_network_interface.dut2_if1,
470 aws_network_interface.dut2_if2
475 host = aws_instance.dut2.public_ip
476 private_key = tls_private_key.CSITTLS.private_key_pem
479 provisioner "remote-exec" {
480 inline = var.first_run_commands
483 provisioner "ansible" {
486 file_path = var.ansible_file_path
487 force_handlers = true
491 ansible_ssh_pass = var.ansible_provision_pwd
492 ansible_python_interpreter = var.ansible_python_executable
498 provisioner "remote-exec" {
499 on_failure = continue
500 inline = ["sudo reboot"]
504 resource "null_resource" "deploy_topology" {
505 depends_on = [ aws_instance.tg, aws_instance.dut1, aws_instance.dut2 ]
507 provisioner "ansible" {
510 file_path = var.ansible_topology_path
514 ansible_python_interpreter = var.ansible_python_executable
515 testbed_name = var.testbed_name
516 cloud_topology = var.topology_name
517 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
518 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
519 dut1_if1_mac = data.aws_network_interface.dut1_if1.mac_address
520 dut1_if2_mac = data.aws_network_interface.dut1_if2.mac_address
521 dut2_if1_mac = data.aws_network_interface.dut2_if1.mac_address
522 dut2_if2_mac = data.aws_network_interface.dut2_if2.mac_address
523 tg_public_ip = aws_instance.tg.public_ip
524 dut1_public_ip = aws_instance.dut1.public_ip
525 dut2_public_ip = aws_instance.dut2.public_ip
526 public_ip_list = "${aws_instance.tg.public_ip},${aws_instance.dut1.public_ip},${aws_instance.dut2.public_ip}"