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
57 resource "aws_key_pair" "key_pair" {
59 tls_private_key.private_key
61 key_name = local.key_pair_key_name
62 public_key = tls_private_key.private_key.public_key_openssh
65 # Create Placement Group
66 resource "aws_placement_group" "placement_group" {
67 name = local.placement_group_name
68 strategy = var.placement_group_strategy
72 resource "aws_instance" "tg" {
75 aws_placement_group.placement_group
78 availability_zone = local.availability_zone
79 associate_public_ip_address = var.tg_associate_public_ip_address
80 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
81 instance_type = var.tg_instance_type
82 key_name = aws_key_pair.key_pair.key_name
83 placement_group = aws_placement_group.placement_group.id
84 private_ip = var.tg_private_ip
85 source_dest_check = var.tg_source_dest_check
86 subnet_id = module.vpc.vpc_subnet_id
87 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
91 delete_on_termination = true
96 "Name" = local.tg_name
97 "Environment" = local.environment
101 resource "aws_network_interface" "tg_if1" {
106 private_ip = var.tg_if1_private_ip
107 private_ips = [var.tg_if1_private_ip]
108 security_groups = [module.vpc.vpc_security_group_id]
109 source_dest_check = var.tg_source_dest_check
110 subnet_id = module.subnet_b.subnet_id
113 instance = aws_instance.tg.id
118 "Name" = local.tg_name
119 "Environment" = local.environment
123 resource "aws_network_interface" "tg_if2" {
128 private_ip = var.tg_if2_private_ip
129 private_ips = [var.tg_if2_private_ip]
130 security_groups = [module.vpc.vpc_security_group_id]
131 source_dest_check = var.tg_source_dest_check
132 subnet_id = module.subnet_d.subnet_id
135 instance = aws_instance.tg.id
140 "Name" = local.tg_name
141 "Environment" = local.environment
145 data "aws_network_interface" "tg_if1" {
146 id = aws_network_interface.tg_if1.id
149 data "aws_network_interface" "tg_if2" {
150 id = aws_network_interface.tg_if2.id
153 resource "aws_route" "route_tg_if1" {
157 destination_cidr_block = var.destination_cidr_block_tg_if1
158 network_interface_id = aws_instance.tg.primary_network_interface_id
159 route_table_id = module.vpc.vpc_main_route_table_id
162 resource "aws_route" "route_tg_if2" {
166 destination_cidr_block = var.destination_cidr_block_tg_if2
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_instance" "sut1" {
174 aws_placement_group.placement_group
177 availability_zone = local.availability_zone
178 associate_public_ip_address = var.sut1_associate_public_ip_address
179 instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
180 instance_type = var.sut1_instance_type
181 key_name = aws_key_pair.key_pair.key_name
182 placement_group = aws_placement_group.placement_group.id
183 private_ip = var.sut1_private_ip
184 source_dest_check = var.sut1_source_dest_check
185 subnet_id = module.vpc.vpc_subnet_id
186 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
190 delete_on_termination = true
195 "Name" = local.sut1_name
196 "Environment" = local.environment
200 resource "aws_network_interface" "sut1_if1" {
205 private_ip = var.sut1_if1_private_ip
206 private_ips = [var.sut1_if1_private_ip]
207 security_groups = [module.vpc.vpc_security_group_id]
208 source_dest_check = var.sut1_source_dest_check
209 subnet_id = module.subnet_b.subnet_id
212 instance = aws_instance.sut1.id
217 "Name" = local.sut1_name
218 "Environment" = local.environment
222 resource "aws_network_interface" "sut1_if2" {
227 private_ip = var.sut1_if2_private_ip
228 private_ips = [var.sut1_if2_private_ip]
229 security_groups = [module.vpc.vpc_security_group_id]
230 source_dest_check = var.sut1_source_dest_check
231 subnet_id = module.subnet_d.subnet_id
234 instance = aws_instance.sut1.id
239 "Name" = local.sut1_name
240 "Environment" = local.environment
244 data "aws_network_interface" "sut1_if1" {
245 id = aws_network_interface.sut1_if1.id
248 data "aws_network_interface" "sut1_if2" {
249 id = aws_network_interface.sut1_if2.id
252 resource "null_resource" "deploy_tg" {
255 aws_network_interface.tg_if1,
256 aws_network_interface.tg_if2,
258 aws_network_interface.sut1_if1,
259 aws_network_interface.sut1_if2
264 host = aws_instance.tg.public_ip
265 private_key = tls_private_key.private_key.private_key_pem
268 provisioner "remote-exec" {
269 inline = var.first_run_commands
273 resource "null_resource" "deploy_sut1" {
276 aws_network_interface.tg_if1,
277 aws_network_interface.tg_if2,
279 aws_network_interface.sut1_if1,
280 aws_network_interface.sut1_if2
285 host = aws_instance.sut1.public_ip
286 private_key = tls_private_key.private_key.private_key_pem
289 provisioner "remote-exec" {
290 inline = var.first_run_commands
294 resource "null_resource" "deploy_topology" {
300 provisioner "ansible" {
303 file_path = var.ansible_topology_path
307 ansible_python_interpreter = local.ansible_python_executable
308 testbed_name = local.testbed_name
309 cloud_topology = local.topology_name
310 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
311 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
312 dut1_if1_mac = data.aws_network_interface.sut1_if1.mac_address
313 dut1_if2_mac = data.aws_network_interface.sut1_if2.mac_address
314 tg_public_ip = aws_instance.tg.public_ip
315 dut1_public_ip = aws_instance.sut1.public_ip
316 public_ip_list = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip}"