Revert "fix(jobspec): Delete ipsec nfv density tests"
[csit.git] / fdio.infra.terraform / terraform-aws-1n-aws-c5n / main.tf
1 data "vault_aws_access_credentials" "creds" {
2   backend = "${var.vault-name}-path"
3   role    = "${var.vault-name}-role"
4 }
5
6 locals {
7   ansible_python_executable = "/usr/bin/python3"
8   availability_zone         = "eu-central-1a"
9   name                      = "csit-vpc"
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"
18 }
19
20 # Create VPC
21 module "vpc" {
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 }
28
29 # Create Subnet
30 module "subnet_b" {
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
38 }
39
40 # Create Private Key
41 module "private_key" {
42   source  = "pmikus/private-key/tls"
43   version = "4.0.4"
44
45   private_key_algorithm = var.private_key_algorithm
46 }
47
48 # Create Key Pair
49 module "key_pair" {
50   source  = "pmikus/key-pair/aws"
51   version = "5.7.0"
52
53   key_pair_key_name   = local.key_pair_key_name
54   key_pair_public_key = module.private_key.public_key_openssh
55
56   key_pair_tags = {
57     "Environment" = local.environment
58   }
59 }
60
61 # Create Placement Group
62 resource "aws_placement_group" "placement_group" {
63   name     = local.placement_group_name
64   strategy = var.placement_group_strategy
65 }
66
67 # Create Instance
68 resource "aws_instance" "tg" {
69   depends_on = [
70     module.vpc,
71     aws_placement_group.placement_group
72   ]
73   ami                                  = var.tg_ami
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]
84   # host_id                            = "1"
85
86   root_block_device {
87     delete_on_termination = true
88     volume_size           = 50
89   }
90
91   tags = {
92     "Name"        = local.tg_name
93     "Environment" = local.environment
94   }
95 }
96
97 resource "aws_network_interface" "tg_if1" {
98   depends_on = [
99     module.subnet_b,
100     aws_instance.tg
101   ]
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
106
107   attachment {
108     instance     = aws_instance.tg.id
109     device_index = 1
110   }
111
112   tags = {
113     "Name"        = local.tg_name
114     "Environment" = local.environment
115   }
116 }
117
118 resource "aws_network_interface" "tg_if2" {
119   depends_on = [
120     module.subnet_b,
121     aws_instance.tg
122   ]
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
127
128   attachment {
129     instance     = aws_instance.tg.id
130     device_index = 2
131   }
132
133   tags = {
134     "Name"        = local.tg_name
135     "Environment" = local.environment
136   }
137 }
138
139 data "aws_network_interface" "tg_if1" {
140   id = aws_network_interface.tg_if1.id
141 }
142
143 data "aws_network_interface" "tg_if2" {
144   id = aws_network_interface.tg_if2.id
145 }
146
147 resource "aws_route" "route_tg_if1" {
148   depends_on = [
149     aws_instance.tg
150   ]
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
154 }
155
156 resource "aws_route" "route_tg_if2" {
157   depends_on = [
158     aws_instance.tg
159   ]
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
163 }
164
165 resource "null_resource" "deploy_tg" {
166   depends_on = [
167     aws_instance.tg,
168     aws_network_interface.tg_if1,
169     aws_network_interface.tg_if2
170   ]
171
172   connection {
173     user        = "ubuntu"
174     host        = aws_instance.tg.public_ip
175     private_key = module.private_key.private_key_pem
176   }
177
178   provisioner "remote-exec" {
179     inline = var.first_run_commands
180   }
181 }
182
183 resource "local_file" "topology_file" {
184   depends_on = [
185     aws_instance.tg
186   ]
187
188   content = templatefile(
189     "${path.module}/topology-${local.topology_name}.tftpl",
190     {
191       tg_if1_mac     = data.aws_network_interface.tg_if1.mac_address
192       tg_if2_mac     = data.aws_network_interface.tg_if2.mac_address
193       tg_public_ip   = aws_instance.tg.public_ip
194     }
195   )
196   filename = "${path.module}/../../topologies/available/${local.topology_name}-${local.testbed_name}.yaml"
197 }
198
199 resource "local_file" "hosts" {
200   depends_on = [
201     aws_instance.tg
202   ]
203
204   content = templatefile(
205     "${path.module}/hosts.tftpl",
206     {
207       tg_public_ip   = aws_instance.tg.public_ip
208     }
209   )
210   filename = "${path.module}/../../fdio.infra.ansible/inventories/cloud_inventory/hosts.yaml"
211 }