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 = "1n-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
31 source = "../terraform-aws-subnet"
32 subnet_cidr_block = "192.168.10.0/24"
33 subnet_ipv6_cidr_block = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 2)
34 subnet_availability_zone = local.availability_zone
35 tags_name = local.name
36 tags_environment = local.environment
37 subnet_vpc_id = module.vpc.vpc_id
41 module "private_key" {
42 source = "pmikus/private-key/tls"
45 private_key_algorithm = var.private_key_algorithm
50 source = "pmikus/key-pair/aws"
53 key_pair_key_name = local.key_pair_key_name
54 key_pair_public_key = module.private_key.public_key_openssh
57 "Environment" = local.environment
61 # Create Placement Group
62 resource "aws_placement_group" "placement_group" {
63 name = local.placement_group_name
64 strategy = var.placement_group_strategy
68 resource "aws_instance" "tg" {
71 aws_placement_group.placement_group
74 availability_zone = local.availability_zone
75 associate_public_ip_address = var.tg_associate_public_ip_address
76 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
77 instance_type = var.tg_instance_type
78 key_name = module.key_pair.key_pair_key_name
79 placement_group = aws_placement_group.placement_group.id
80 private_ip = var.tg_private_ip
81 source_dest_check = var.tg_source_dest_check
82 subnet_id = module.vpc.vpc_subnet_id
83 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
87 delete_on_termination = true
92 "Name" = local.tg_name
93 "Environment" = local.environment
97 resource "aws_network_interface" "tg_if1" {
102 private_ips = [var.tg_if1_private_ip]
103 security_groups = [module.vpc.vpc_security_group_id]
104 source_dest_check = var.tg_source_dest_check
105 subnet_id = module.subnet_b.subnet_id
108 instance = aws_instance.tg.id
113 "Name" = local.tg_name
114 "Environment" = local.environment
118 resource "aws_network_interface" "tg_if2" {
123 private_ips = [var.tg_if2_private_ip]
124 security_groups = [module.vpc.vpc_security_group_id]
125 source_dest_check = var.tg_source_dest_check
126 subnet_id = module.subnet_b.subnet_id
129 instance = aws_instance.tg.id
134 "Name" = local.tg_name
135 "Environment" = local.environment
139 data "aws_network_interface" "tg_if1" {
140 id = aws_network_interface.tg_if1.id
143 data "aws_network_interface" "tg_if2" {
144 id = aws_network_interface.tg_if2.id
147 resource "aws_route" "route_tg_if1" {
151 destination_cidr_block = var.destination_cidr_block_tg_if1
152 network_interface_id = aws_instance.tg.primary_network_interface_id
153 route_table_id = module.vpc.vpc_main_route_table_id
156 resource "aws_route" "route_tg_if2" {
160 destination_cidr_block = var.destination_cidr_block_tg_if2
161 network_interface_id = aws_instance.tg.primary_network_interface_id
162 route_table_id = module.vpc.vpc_main_route_table_id
165 resource "null_resource" "deploy_tg" {
168 aws_network_interface.tg_if1,
169 aws_network_interface.tg_if2
174 host = aws_instance.tg.public_ip
175 private_key = module.private_key.private_key_pem
178 provisioner "remote-exec" {
179 inline = var.first_run_commands
184 resource "null_resource" "deploy_topology" {
189 provisioner "ansible" {
192 file_path = var.ansible_topology_path
196 ansible_python_interpreter = local.ansible_python_executable
197 testbed_name = local.testbed_name
198 cloud_topology = local.topology_name
199 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
200 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
201 tg_public_ip = aws_instance.tg.public_ip
202 public_ip_list = "${aws_instance.tg.public_ip}"