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-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
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 resource "tls_private_key" "private_key" {
42 algorithm = var.private_key_algorithm
46 resource "aws_key_pair" "key_pair" {
48 tls_private_key.private_key
50 key_name = local.key_pair_key_name
51 public_key = tls_private_key.private_key.public_key_openssh
54 # Create Placement Group
55 resource "aws_placement_group" "placement_group" {
56 name = local.placement_group_name
57 strategy = var.placement_group_strategy
61 resource "aws_instance" "tg" {
64 aws_placement_group.placement_group
67 availability_zone = local.availability_zone
68 associate_public_ip_address = var.tg_associate_public_ip_address
69 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
70 instance_type = var.tg_instance_type
71 key_name = aws_key_pair.key_pair.key_name
72 placement_group = aws_placement_group.placement_group.id
73 private_ip = var.tg_private_ip
74 source_dest_check = var.tg_source_dest_check
75 subnet_id = module.vpc.vpc_subnet_id
76 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
80 delete_on_termination = true
85 "Name" = local.tg_name
86 "Environment" = local.environment
90 resource "aws_network_interface" "tg_if1" {
95 private_ips = [var.tg_if1_private_ip]
96 security_groups = [module.vpc.vpc_security_group_id]
97 source_dest_check = var.tg_source_dest_check
98 subnet_id = module.subnet_b.subnet_id
101 instance = aws_instance.tg.id
106 "Name" = local.tg_name
107 "Environment" = local.environment
111 resource "aws_network_interface" "tg_if2" {
116 private_ips = [var.tg_if2_private_ip]
117 security_groups = [module.vpc.vpc_security_group_id]
118 source_dest_check = var.tg_source_dest_check
119 subnet_id = module.subnet_b.subnet_id
122 instance = aws_instance.tg.id
127 "Name" = local.tg_name
128 "Environment" = local.environment
132 data "aws_network_interface" "tg_if1" {
133 id = aws_network_interface.tg_if1.id
136 data "aws_network_interface" "tg_if2" {
137 id = aws_network_interface.tg_if2.id
140 resource "aws_route" "route_tg_if1" {
144 destination_cidr_block = var.destination_cidr_block_tg_if1
145 network_interface_id = aws_instance.tg.primary_network_interface_id
146 route_table_id = module.vpc.vpc_main_route_table_id
149 resource "aws_route" "route_tg_if2" {
153 destination_cidr_block = var.destination_cidr_block_tg_if2
154 network_interface_id = aws_instance.tg.primary_network_interface_id
155 route_table_id = module.vpc.vpc_main_route_table_id
158 resource "null_resource" "deploy_tg" {
161 aws_network_interface.tg_if1,
162 aws_network_interface.tg_if2
167 host = aws_instance.tg.public_ip
168 private_key = tls_private_key.private_key.private_key_pem
171 provisioner "remote-exec" {
172 inline = var.first_run_commands
177 resource "null_resource" "deploy_topology" {
182 provisioner "ansible" {
185 file_path = var.ansible_topology_path
189 ansible_python_interpreter = local.ansible_python_executable
190 testbed_name = local.testbed_name
191 cloud_topology = local.topology_name
192 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
193 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
194 tg_public_ip = aws_instance.tg.public_ip
195 public_ip_list = "${aws_instance.tg.public_ip}"