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
27 vpc_enable_dns_hostnames = false
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 = "192.168.20.0/24"
44 subnet_ipv6_cidr_block = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 4)
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 resource "tls_private_key" "private_key" {
53 algorithm = var.private_key_algorithm
54 ecdsa_curve = var.private_key_ecdsa_curve
55 rsa_bits = var.private_key_rsa_bits
59 resource "aws_key_pair" "key_pair" {
61 tls_private_key.private_key
63 key_name = local.key_pair_key_name
64 public_key = tls_private_key.private_key.public_key_openssh
67 # Create Placement Group
68 resource "aws_placement_group" "placement_group" {
69 name = local.placement_group_name
70 strategy = var.placement_group_strategy
74 resource "aws_instance" "tg" {
77 aws_placement_group.placement_group
80 availability_zone = local.availability_zone
81 associate_public_ip_address = var.tg_associate_public_ip_address
82 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
83 instance_type = var.tg_instance_type
84 key_name = aws_key_pair.key_pair.key_name
85 placement_group = aws_placement_group.placement_group.id
86 private_ip = var.tg_private_ip
87 source_dest_check = var.tg_source_dest_check
88 subnet_id = module.vpc.vpc_subnet_id
89 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
93 delete_on_termination = true
98 "Name" = local.tg_name
99 "Environment" = local.environment
103 resource "aws_network_interface" "tg_if1" {
108 private_ip = var.tg_if1_private_ip
109 private_ips = [var.tg_if1_private_ip]
110 security_groups = [module.vpc.vpc_security_group_id]
111 source_dest_check = var.tg_source_dest_check
112 subnet_id = module.subnet_b.subnet_id
115 instance = aws_instance.tg.id
120 "Name" = local.tg_name
121 "Environment" = local.environment
125 resource "aws_network_interface" "tg_if2" {
130 private_ip = var.tg_if2_private_ip
131 private_ips = [var.tg_if2_private_ip]
132 security_groups = [module.vpc.vpc_security_group_id]
133 source_dest_check = var.tg_source_dest_check
134 subnet_id = module.subnet_d.subnet_id
137 instance = aws_instance.tg.id
142 "Name" = local.tg_name
143 "Environment" = local.environment
147 data "aws_network_interface" "tg_if1" {
148 id = aws_network_interface.tg_if1.id
151 data "aws_network_interface" "tg_if2" {
152 id = aws_network_interface.tg_if2.id
155 resource "aws_route" "route_tg_if1" {
159 destination_cidr_block = var.destination_cidr_block_tg_if1
160 network_interface_id = aws_instance.tg.primary_network_interface_id
161 route_table_id = module.vpc.vpc_main_route_table_id
164 resource "aws_route" "route_tg_if2" {
168 destination_cidr_block = var.destination_cidr_block_tg_if2
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_instance" "sut1" {
176 aws_placement_group.placement_group
179 availability_zone = local.availability_zone
180 associate_public_ip_address = var.sut1_associate_public_ip_address
181 instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
182 instance_type = var.sut1_instance_type
183 key_name = aws_key_pair.key_pair.key_name
184 placement_group = aws_placement_group.placement_group.id
185 private_ip = var.sut1_private_ip
186 source_dest_check = var.sut1_source_dest_check
187 subnet_id = module.vpc.vpc_subnet_id
188 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
192 delete_on_termination = true
197 "Name" = local.sut1_name
198 "Environment" = local.environment
202 resource "aws_network_interface" "sut1_if1" {
207 private_ip = var.sut1_if1_private_ip
208 private_ips = [var.sut1_if1_private_ip]
209 security_groups = [module.vpc.vpc_security_group_id]
210 source_dest_check = var.sut1_source_dest_check
211 subnet_id = module.subnet_b.subnet_id
214 instance = aws_instance.sut1.id
219 "Name" = local.sut1_name
220 "Environment" = local.environment
224 resource "aws_network_interface" "sut1_if2" {
229 private_ip = var.sut1_if2_private_ip
230 private_ips = [var.sut1_if2_private_ip]
231 security_groups = [module.vpc.vpc_security_group_id]
232 source_dest_check = var.sut1_source_dest_check
233 subnet_id = module.subnet_d.subnet_id
236 instance = aws_instance.sut1.id
241 "Name" = local.sut1_name
242 "Environment" = local.environment
246 data "aws_network_interface" "sut1_if1" {
247 id = aws_network_interface.sut1_if1.id
250 data "aws_network_interface" "sut1_if2" {
251 id = aws_network_interface.sut1_if2.id
254 resource "null_resource" "deploy_tg" {
257 aws_network_interface.tg_if1,
258 aws_network_interface.tg_if2,
260 aws_network_interface.sut1_if1,
261 aws_network_interface.sut1_if2
266 host = aws_instance.tg.public_ip
267 private_key = tls_private_key.private_key.private_key_pem
270 provisioner "remote-exec" {
271 inline = var.first_run_commands
275 resource "null_resource" "deploy_sut1" {
278 aws_network_interface.tg_if1,
279 aws_network_interface.tg_if2,
281 aws_network_interface.sut1_if1,
282 aws_network_interface.sut1_if2
287 host = aws_instance.sut1.public_ip
288 private_key = tls_private_key.private_key.private_key_pem
291 provisioner "remote-exec" {
292 inline = var.first_run_commands
296 resource "null_resource" "deploy_topology" {
302 provisioner "ansible" {
305 file_path = var.ansible_topology_path
309 ansible_python_interpreter = local.ansible_python_executable
310 testbed_name = local.testbed_name
311 cloud_topology = local.topology_name
312 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
313 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
314 dut1_if1_mac = data.aws_network_interface.sut1_if1.mac_address
315 dut1_if2_mac = data.aws_network_interface.sut1_if2.mac_address
316 tg_public_ip = aws_instance.tg.public_ip
317 dut1_public_ip = aws_instance.sut1.public_ip
318 public_ip_list = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip}"