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-c6in"
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 module "private_key" {
53 source = "pmikus/private-key/tls"
56 private_key_algorithm = var.private_key_algorithm
61 source = "pmikus/key-pair/aws"
64 key_pair_key_name = local.key_pair_key_name
65 key_pair_public_key = module.private_key.public_key_openssh
68 "Environment" = local.environment
72 # Create Placement Group
73 resource "aws_placement_group" "placement_group" {
74 name = local.placement_group_name
75 strategy = var.placement_group_strategy
79 resource "aws_instance" "tg" {
82 aws_placement_group.placement_group
85 availability_zone = local.availability_zone
86 associate_public_ip_address = var.tg_associate_public_ip_address
87 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
88 instance_type = var.tg_instance_type
89 key_name = module.key_pair.key_pair_key_name
90 placement_group = aws_placement_group.placement_group.id
91 private_ip = var.tg_private_ip
92 source_dest_check = var.tg_source_dest_check
93 subnet_id = module.vpc.vpc_subnet_id
94 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
98 delete_on_termination = true
103 "Name" = local.tg_name
104 "Environment" = local.environment
108 resource "aws_network_interface" "tg_if1" {
113 private_ip = var.tg_if1_private_ip
114 private_ips = [var.tg_if1_private_ip]
115 security_groups = [module.vpc.vpc_security_group_id]
116 source_dest_check = var.tg_source_dest_check
117 subnet_id = module.subnet_b.subnet_id
120 instance = aws_instance.tg.id
125 "Name" = local.tg_name
126 "Environment" = local.environment
130 resource "aws_network_interface" "tg_if2" {
135 private_ip = var.tg_if2_private_ip
136 private_ips = [var.tg_if2_private_ip]
137 security_groups = [module.vpc.vpc_security_group_id]
138 source_dest_check = var.tg_source_dest_check
139 subnet_id = module.subnet_d.subnet_id
142 instance = aws_instance.tg.id
147 "Name" = local.tg_name
148 "Environment" = local.environment
152 data "aws_network_interface" "tg_if1" {
153 id = aws_network_interface.tg_if1.id
156 data "aws_network_interface" "tg_if2" {
157 id = aws_network_interface.tg_if2.id
160 resource "aws_route" "route_tg_if1" {
164 destination_cidr_block = var.destination_cidr_block_tg_if1
165 network_interface_id = aws_instance.tg.primary_network_interface_id
166 route_table_id = module.vpc.vpc_main_route_table_id
169 resource "aws_route" "route_tg_if2" {
173 destination_cidr_block = var.destination_cidr_block_tg_if2
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_instance" "sut1" {
181 aws_placement_group.placement_group
184 availability_zone = local.availability_zone
185 associate_public_ip_address = var.sut1_associate_public_ip_address
186 instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
187 instance_type = var.sut1_instance_type
188 key_name = module.key_pair.key_pair_key_name
189 placement_group = aws_placement_group.placement_group.id
190 private_ip = var.sut1_private_ip
191 source_dest_check = var.sut1_source_dest_check
192 subnet_id = module.vpc.vpc_subnet_id
193 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
197 delete_on_termination = true
202 "Name" = local.sut1_name
203 "Environment" = local.environment
207 resource "aws_network_interface" "sut1_if1" {
212 private_ip = var.sut1_if1_private_ip
213 private_ips = [var.sut1_if1_private_ip]
214 security_groups = [module.vpc.vpc_security_group_id]
215 source_dest_check = var.sut1_source_dest_check
216 subnet_id = module.subnet_b.subnet_id
219 instance = aws_instance.sut1.id
224 "Name" = local.sut1_name
225 "Environment" = local.environment
229 resource "aws_network_interface" "sut1_if2" {
234 private_ip = var.sut1_if2_private_ip
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_d.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 "null_resource" "deploy_tg" {
262 aws_network_interface.tg_if1,
263 aws_network_interface.tg_if2,
265 aws_network_interface.sut1_if1,
266 aws_network_interface.sut1_if2
271 host = aws_instance.tg.public_ip
272 private_key = module.private_key.private_key_pem
275 provisioner "remote-exec" {
276 inline = var.first_run_commands
280 resource "null_resource" "deploy_sut1" {
283 aws_network_interface.tg_if1,
284 aws_network_interface.tg_if2,
286 aws_network_interface.sut1_if1,
287 aws_network_interface.sut1_if2
292 host = aws_instance.sut1.public_ip
293 private_key = module.private_key.private_key_pem
296 provisioner "remote-exec" {
297 inline = var.first_run_commands
301 resource "null_resource" "deploy_topology" {
307 provisioner "ansible" {
310 file_path = var.ansible_topology_path
314 ansible_python_interpreter = local.ansible_python_executable
315 testbed_name = local.testbed_name
316 cloud_topology = local.topology_name
317 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
318 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
319 dut1_if1_mac = data.aws_network_interface.sut1_if1.mac_address
320 dut1_if2_mac = data.aws_network_interface.sut1_if2.mac_address
321 tg_public_ip = aws_instance.tg.public_ip
322 dut1_public_ip = aws_instance.sut1.public_ip
323 public_ip_list = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip}"