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
43 ecdsa_curve = var.private_key_ecdsa_curve
44 rsa_bits = var.private_key_rsa_bits
48 resource "aws_key_pair" "key_pair" {
50 tls_private_key.private_key
52 key_name = local.key_pair_key_name
53 public_key = tls_private_key.private_key.public_key_openssh
56 # Create Placement Group
57 resource "aws_placement_group" "placement_group" {
58 name = local.placement_group_name
59 strategy = var.placement_group_strategy
63 resource "aws_instance" "tg" {
66 aws_placement_group.placement_group
69 availability_zone = local.availability_zone
70 associate_public_ip_address = var.tg_associate_public_ip_address
71 instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
72 instance_type = var.tg_instance_type
73 key_name = aws_key_pair.key_pair.key_name
74 placement_group = aws_placement_group.placement_group.id
75 private_ip = var.tg_private_ip
76 source_dest_check = var.tg_source_dest_check
77 subnet_id = module.vpc.vpc_subnet_id
78 vpc_security_group_ids = [module.vpc.vpc_security_group_id]
82 delete_on_termination = true
87 "Name" = local.tg_name
88 "Environment" = local.environment
92 resource "aws_network_interface" "tg_if1" {
97 private_ips = [var.tg_if1_private_ip]
98 security_groups = [module.vpc.vpc_security_group_id]
99 source_dest_check = var.tg_source_dest_check
100 subnet_id = module.subnet_b.subnet_id
103 instance = aws_instance.tg.id
108 "Name" = local.tg_name
109 "Environment" = local.environment
113 resource "aws_network_interface" "tg_if2" {
118 private_ips = [var.tg_if2_private_ip]
119 security_groups = [module.vpc.vpc_security_group_id]
120 source_dest_check = var.tg_source_dest_check
121 subnet_id = module.subnet_b.subnet_id
124 instance = aws_instance.tg.id
129 "Name" = local.tg_name
130 "Environment" = local.environment
134 data "aws_network_interface" "tg_if1" {
135 id = aws_network_interface.tg_if1.id
138 data "aws_network_interface" "tg_if2" {
139 id = aws_network_interface.tg_if2.id
142 resource "aws_route" "route_tg_if1" {
146 destination_cidr_block = var.destination_cidr_block_tg_if1
147 network_interface_id = aws_instance.tg.primary_network_interface_id
148 route_table_id = module.vpc.vpc_main_route_table_id
151 resource "aws_route" "route_tg_if2" {
155 destination_cidr_block = var.destination_cidr_block_tg_if2
156 network_interface_id = aws_instance.tg.primary_network_interface_id
157 route_table_id = module.vpc.vpc_main_route_table_id
160 resource "null_resource" "deploy_tg" {
163 aws_network_interface.tg_if1,
164 aws_network_interface.tg_if2
169 host = aws_instance.tg.public_ip
170 private_key = tls_private_key.private_key.private_key_pem
173 provisioner "remote-exec" {
174 inline = var.first_run_commands
179 resource "null_resource" "deploy_topology" {
184 provisioner "ansible" {
187 file_path = var.ansible_topology_path
191 ansible_python_interpreter = local.ansible_python_executable
192 testbed_name = local.testbed_name
193 cloud_topology = local.topology_name
194 tg_if1_mac = data.aws_network_interface.tg_if1.mac_address
195 tg_if2_mac = data.aws_network_interface.tg_if2.mac_address
196 tg_public_ip = aws_instance.tg.public_ip
197 public_ip_list = "${aws_instance.tg.public_ip}"