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-1b"
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-c6in"
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 module "private_key" {
63 source = "pmikus/private-key/tls"
66 private_key_algorithm = var.private_key_algorithm
71 source = "pmikus/key-pair/aws"
74 key_pair_key_name = local.key_pair_key_name
75 key_pair_public_key = module.private_key.public_key_openssh
78 "Environment" = local.environment
82 # Create Placement Group
83 resource "aws_placement_group" "placement_group" {
84 name = local.placement_group_name
85 strategy = var.placement_group_strategy
89 resource "aws_instance" "tg" {
92 aws_placement_group.placement_group
95 availability_zone = local.availability_zone
96 associate_public_ip_address = var.tg_associate_public_ip_address
97 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
98 instance_type = var.tg_instance_type
99 key_name = module.key_pair.key_pair_key_name
100 placement_group = aws_placement_group.placement_group.id
101 private_ip = var.tg_private_ip
102 source_dest_check = var.tg_source_dest_check
103 subnet_id = module.vpc.vpc_subnet_id
104 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
108 delete_on_termination = true
113 "Name" = local.tg_name
114 "Environment" = local.environment
118 resource "aws_network_interface" "tg_if1" {
123 private_ip = var.tg_if1_private_ip
124 private_ips = [var.tg_if1_private_ip]
125 security_groups = [module.vpc.vpc_security_group_id]
126 source_dest_check = var.tg_source_dest_check
127 subnet_id = module.subnet_b.subnet_id
130 instance = aws_instance.tg.id
135 "Name" = local.tg_name
136 "Environment" = local.environment
140 resource "aws_network_interface" "tg_if2" {
145 private_ips = [var.tg_if2_private_ip]
146 security_groups = [module.vpc.vpc_security_group_id]
147 source_dest_check = var.tg_source_dest_check
148 subnet_id = module.subnet_d.subnet_id
151 instance = aws_instance.tg.id
156 "Name" = local.tg_name
157 "Environment" = local.environment
161 data "aws_network_interface" "tg_if1" {
162 id = aws_network_interface.tg_if1.id
165 data "aws_network_interface" "tg_if2" {
166 id = aws_network_interface.tg_if2.id
169 resource "aws_route" "route_tg_if1" {
173 destination_cidr_block = var.destination_cidr_block_tg_if1
174 network_interface_id = aws_instance.tg.primary_network_interface_id
175 route_table_id = module.vpc.vpc_main_route_table_id
178 resource "aws_route" "route_tg_if2" {
182 destination_cidr_block = var.destination_cidr_block_tg_if2
183 network_interface_id = aws_instance.tg.primary_network_interface_id
184 route_table_id = module.vpc.vpc_main_route_table_id
187 resource "aws_instance" "sut1" {
190 aws_placement_group.placement_group
193 availability_zone = local.availability_zone
194 associate_public_ip_address = var.sut1_associate_public_ip_address
195 instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
196 instance_type = var.sut1_instance_type
197 key_name = module.key_pair.key_pair_key_name
198 placement_group = aws_placement_group.placement_group.id
199 private_ip = var.sut1_private_ip
200 source_dest_check = var.sut1_source_dest_check
201 subnet_id = module.vpc.vpc_subnet_id
202 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
206 delete_on_termination = true
211 "Name" = local.sut1_name
212 "Environment" = local.environment
216 resource "aws_network_interface" "sut1_if1" {
221 private_ips = [var.sut1_if1_private_ip]
222 security_groups = [module.vpc.vpc_security_group_id]
223 source_dest_check = var.sut1_source_dest_check
224 subnet_id = module.subnet_b.subnet_id
227 instance = aws_instance.sut1.id
232 "Name" = local.sut1_name
233 "Environment" = local.environment
237 resource "aws_network_interface" "sut1_if2" {
242 private_ips = [var.sut1_if2_private_ip]
243 security_groups = [module.vpc.vpc_security_group_id]
244 source_dest_check = var.sut1_source_dest_check
245 subnet_id = module.subnet_c.subnet_id
248 instance = aws_instance.sut1.id
253 "Name" = local.sut1_name
254 "Environment" = local.environment
258 data "aws_network_interface" "sut1_if1" {
259 id = aws_network_interface.sut1_if1.id
262 data "aws_network_interface" "sut1_if2" {
263 id = aws_network_interface.sut1_if2.id
266 resource "aws_instance" "sut2" {
269 aws_placement_group.placement_group
272 availability_zone = local.availability_zone
273 associate_public_ip_address = var.sut2_associate_public_ip_address
274 instance_initiated_shutdown_behavior = var.sut2_instance_initiated_shutdown_behavior
275 instance_type = var.sut2_instance_type
276 key_name = module.key_pair.key_pair_key_name
277 placement_group = aws_placement_group.placement_group.id
278 private_ip = var.sut2_private_ip
279 source_dest_check = var.sut2_source_dest_check
280 subnet_id = module.vpc.vpc_subnet_id
281 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
285 delete_on_termination = true
290 "Name" = local.sut2_name
291 "Environment" = local.environment
295 resource "aws_network_interface" "sut2_if1" {
300 private_ips = [var.sut2_if1_private_ip]
301 security_groups = [module.vpc.vpc_security_group_id]
302 source_dest_check = var.sut2_source_dest_check
303 subnet_id = module.subnet_c.subnet_id
306 instance = aws_instance.sut2.id
311 "Name" = local.sut2_name
312 "Environment" = local.environment
316 resource "aws_network_interface" "sut2_if2" {
321 private_ips = [var.sut2_if2_private_ip]
322 security_groups = [module.vpc.vpc_security_group_id]
323 source_dest_check = var.sut2_source_dest_check
324 subnet_id = module.subnet_d.subnet_id
327 instance = aws_instance.sut2.id
332 "Name" = local.sut2_name
333 "Environment" = local.environment
337 data "aws_network_interface" "sut2_if1" {
338 id = aws_network_interface.sut2_if1.id
341 data "aws_network_interface" "sut2_if2" {
342 id = aws_network_interface.sut2_if2.id
345 resource "null_resource" "deploy_tg" {
348 aws_network_interface.tg_if1,
349 aws_network_interface.tg_if2,
351 aws_network_interface.sut1_if1,
352 aws_network_interface.sut1_if2,
354 aws_network_interface.sut2_if1,
355 aws_network_interface.sut2_if2
360 host = aws_instance.tg.public_ip
361 private_key = module.private_key.private_key_pem
364 provisioner "remote-exec" {
365 inline = var.first_run_commands
369 resource "null_resource" "deploy_sut1" {
372 aws_network_interface.tg_if1,
373 aws_network_interface.tg_if2,
375 aws_network_interface.sut1_if1,
376 aws_network_interface.sut1_if2,
378 aws_network_interface.sut2_if1,
379 aws_network_interface.sut2_if2
384 host = aws_instance.sut1.public_ip
385 private_key = module.private_key.private_key_pem
388 provisioner "remote-exec" {
389 inline = var.first_run_commands
393 resource "null_resource" "deploy_sut2" {
396 aws_network_interface.tg_if1,
397 aws_network_interface.tg_if2,
399 aws_network_interface.sut1_if1,
400 aws_network_interface.sut1_if2,
402 aws_network_interface.sut2_if1,
403 aws_network_interface.sut2_if2
408 host = aws_instance.sut2.public_ip
409 private_key = module.private_key.private_key_pem
412 provisioner "remote-exec" {
413 inline = var.first_run_commands
417 resource "local_file" "topology_file" {
424 content = templatefile(
425 "${path.module}/topology-${local.topology_name}.tftpl",
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
438 filename = "${path.module}/../../topologies/available/${local.topology_name}-${local.testbed_name}.yaml"
441 resource "local_file" "hosts" {
448 content = templatefile(
449 "${path.module}/hosts.tftpl",
451 tg_public_ip = aws_instance.tg.public_ip
452 dut1_public_ip = aws_instance.sut1.public_ip
453 dut2_public_ip = aws_instance.sut2.public_ip
456 filename = "${path.module}/../../fdio.infra.ansible/inventories/cloud_inventory/hosts.yaml"