feat(terraform): Add 3n-c6in, use intel TG for ARM 49/39249/3 oper-230724
authorpmikus <peter.mikus@protonmail.ch>
Thu, 20 Jul 2023 08:47:57 +0000 (08:47 +0000)
committerPeter Mikus <peter.mikus@protonmail.ch>
Thu, 20 Jul 2023 09:41:28 +0000 (09:41 +0000)
Signed-off-by: pmikus <peter.mikus@protonmail.ch>
Change-Id: Icac039f959b0dda007bc06152602e6fb42e5f7a1

14 files changed:
fdio.infra.ansible/roles/trex/defaults/main.yaml
fdio.infra.terraform/terraform-aws-1n-c6gn/main.tf [deleted file]
fdio.infra.terraform/terraform-aws-2n-c6gn/variables.tf
fdio.infra.terraform/terraform-aws-3n-c6gn/main.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-3n-c6gn/output.tf [moved from fdio.infra.terraform/terraform-aws-1n-c6gn/output.tf with 100% similarity]
fdio.infra.terraform/terraform-aws-3n-c6gn/providers.tf [moved from fdio.infra.terraform/terraform-aws-1n-c6gn/providers.tf with 100% similarity]
fdio.infra.terraform/terraform-aws-3n-c6gn/variables.tf [moved from fdio.infra.terraform/terraform-aws-1n-c6gn/variables.tf with 54% similarity]
fdio.infra.terraform/terraform-aws-3n-c6gn/versions.tf [moved from fdio.infra.terraform/terraform-aws-1n-c6gn/versions.tf with 99% similarity]
fdio.infra.terraform/terraform-aws-3n-c6in/main.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-3n-c6in/output.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-3n-c6in/providers.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-3n-c6in/variables.tf [new file with mode: 0644]
fdio.infra.terraform/terraform-aws-3n-c6in/versions.tf [new file with mode: 0644]
fdio.infra/packer-aws-sut/ubuntu_jammy_arm.pkr.hcl

index ad7a576..18a2b56 100644 (file)
@@ -23,8 +23,7 @@ packages_by_distro:
 
 packages_by_arch:
   aarch64:
-    - "libibverbs-dev"
-    - "libibverbs1"
+    - []
   x86_64:
     - []
 
diff --git a/fdio.infra.terraform/terraform-aws-1n-c6gn/main.tf b/fdio.infra.terraform/terraform-aws-1n-c6gn/main.tf
deleted file mode 100644 (file)
index 4dc33d6..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-data "vault_aws_access_credentials" "creds" {
-  backend = "${var.vault-name}-path"
-  role    = "${var.vault-name}-role"
-}
-
-locals {
-  ansible_python_executable = "/usr/bin/python3"
-  availability_zone         = "eu-central-1a"
-  name                      = "csit-vpc"
-  environment               = "csit-vpc-environment"
-  key_pair_key_name         = "${var.resource_prefix}-${var.testbed_name}-pk"
-  placement_group_name      = "${var.resource_prefix}-${var.testbed_name}-pg"
-  security_group_name       = "${var.resource_prefix}-${var.testbed_name}-sg"
-  testbed_name              = "testbed1"
-  topology_name             = "1n-c6gn"
-  tg_name                   = "${var.resource_prefix}-${var.testbed_name}-tg"
-  sut1_name                 = "${var.resource_prefix}-${var.testbed_name}-sut1"
-}
-
-# Create VPC
-module "vpc" {
-  source                   = "../terraform-aws-vpc"
-  security_group_name      = local.security_group_name
-  subnet_availability_zone = local.availability_zone
-  tags_name                = local.name
-  tags_environment         = local.environment
-}
-
-# Create Subnet
-module "subnet_b" {
-  source                   = "../terraform-aws-subnet"
-  subnet_cidr_block        = "192.168.10.0/24"
-  subnet_ipv6_cidr_block   = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 2)
-  subnet_availability_zone = local.availability_zone
-  tags_name                = local.name
-  tags_environment         = local.environment
-  subnet_vpc_id            = module.vpc.vpc_id
-}
-
-# Create Private Key
-module "private_key" {
-  source  = "pmikus/private-key/tls"
-  version = "4.0.4"
-
-  private_key_algorithm = var.private_key_algorithm
-}
-
-# Create Key Pair
-module "key_pair" {
-  source  = "pmikus/key-pair/aws"
-  version = "5.7.0"
-
-  key_pair_key_name   = local.key_pair_key_name
-  key_pair_public_key = module.private_key.public_key_openssh
-
-  key_pair_tags = {
-    "Environment" = local.environment
-  }
-}
-
-# Create Placement Group
-resource "aws_placement_group" "placement_group" {
-  name     = local.placement_group_name
-  strategy = var.placement_group_strategy
-}
-
-# Create Instance
-resource "aws_instance" "tg" {
-  depends_on = [
-    module.vpc,
-    aws_placement_group.placement_group
-  ]
-  ami                                  = var.tg_ami
-  availability_zone                    = local.availability_zone
-  associate_public_ip_address          = var.tg_associate_public_ip_address
-  instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
-  instance_type                        = var.tg_instance_type
-  key_name                             = module.key_pair.key_pair_key_name
-  placement_group                      = aws_placement_group.placement_group.id
-  private_ip                           = var.tg_private_ip
-  source_dest_check                    = var.tg_source_dest_check
-  subnet_id                            = module.vpc.vpc_subnet_id
-  vpc_security_group_ids               = [module.vpc.vpc_security_group_id]
-  # host_id                            = "1"
-
-  root_block_device {
-    delete_on_termination = true
-    volume_size           = 50
-  }
-
-  tags = {
-    "Name"        = local.tg_name
-    "Environment" = local.environment
-  }
-}
-
-resource "aws_network_interface" "tg_if1" {
-  depends_on = [
-    module.subnet_b,
-    aws_instance.tg
-  ]
-  private_ips       = [var.tg_if1_private_ip]
-  security_groups   = [module.vpc.vpc_security_group_id]
-  source_dest_check = var.tg_source_dest_check
-  subnet_id         = module.subnet_b.subnet_id
-
-  attachment {
-    instance     = aws_instance.tg.id
-    device_index = 1
-  }
-
-  tags = {
-    "Name"        = local.tg_name
-    "Environment" = local.environment
-  }
-}
-
-resource "aws_network_interface" "tg_if2" {
-  depends_on = [
-    module.subnet_b,
-    aws_instance.tg
-  ]
-  private_ips       = [var.tg_if2_private_ip]
-  security_groups   = [module.vpc.vpc_security_group_id]
-  source_dest_check = var.tg_source_dest_check
-  subnet_id         = module.subnet_b.subnet_id
-
-  attachment {
-    instance     = aws_instance.tg.id
-    device_index = 2
-  }
-
-  tags = {
-    "Name"        = local.tg_name
-    "Environment" = local.environment
-  }
-}
-
-data "aws_network_interface" "tg_if1" {
-  id = aws_network_interface.tg_if1.id
-}
-
-data "aws_network_interface" "tg_if2" {
-  id = aws_network_interface.tg_if2.id
-}
-
-resource "aws_route" "route_tg_if1" {
-  depends_on = [
-    aws_instance.tg
-  ]
-  destination_cidr_block = var.destination_cidr_block_tg_if1
-  network_interface_id   = aws_instance.tg.primary_network_interface_id
-  route_table_id         = module.vpc.vpc_main_route_table_id
-}
-
-resource "aws_route" "route_tg_if2" {
-  depends_on = [
-    aws_instance.tg
-  ]
-  destination_cidr_block = var.destination_cidr_block_tg_if2
-  network_interface_id   = aws_instance.tg.primary_network_interface_id
-  route_table_id         = module.vpc.vpc_main_route_table_id
-}
-
-resource "null_resource" "deploy_tg" {
-  depends_on = [
-    aws_instance.tg,
-    aws_network_interface.tg_if1,
-    aws_network_interface.tg_if2
-  ]
-
-  connection {
-    user        = "ubuntu"
-    host        = aws_instance.tg.public_ip
-    private_key = module.private_key.private_key_pem
-  }
-
-  provisioner "remote-exec" {
-    inline = var.first_run_commands
-  }
-}
-
-
-resource "null_resource" "deploy_topology" {
-  depends_on = [
-    aws_instance.tg
-  ]
-
-  provisioner "ansible" {
-    plays {
-      playbook {
-        file_path = var.ansible_topology_path
-      }
-      hosts = ["local"]
-      extra_vars = {
-        ansible_python_interpreter = local.ansible_python_executable
-        testbed_name               = local.testbed_name
-        cloud_topology             = local.topology_name
-        tg_if1_mac                 = data.aws_network_interface.tg_if1.mac_address
-        tg_if2_mac                 = data.aws_network_interface.tg_if2.mac_address
-        tg_public_ip               = aws_instance.tg.public_ip
-        public_ip_list             = "${aws_instance.tg.public_ip}"
-      }
-    }
-  }
-}
\ No newline at end of file
index edad0c2..ccf2ce2 100644 (file)
@@ -50,7 +50,7 @@ variable "placement_group_strategy" {
 variable "tg_ami" {
   description = "AMI to use for the instance."
   type        = string
-  default     = "ami-0c2d02d48236a23dd"
+  default     = "ami-07430bfa17fd4e597"
 }
 
 variable "tg_associate_public_ip_address" {
diff --git a/fdio.infra.terraform/terraform-aws-3n-c6gn/main.tf b/fdio.infra.terraform/terraform-aws-3n-c6gn/main.tf
new file mode 100644 (file)
index 0000000..df6ef9a
--- /dev/null
@@ -0,0 +1,447 @@
+data "vault_aws_access_credentials" "creds" {
+  backend = "${var.vault-name}-path"
+  role    = "${var.vault-name}-role"
+}
+
+locals {
+  ansible_python_executable = "/usr/bin/python3"
+  availability_zone         = "eu-central-1a"
+  name                      = "csit-vpc"
+  environment               = "csit-vpc-environment"
+  key_pair_key_name         = "${var.resource_prefix}-${var.testbed_name}-pk"
+  placement_group_name      = "${var.resource_prefix}-${var.testbed_name}-pg"
+  security_group_name       = "${var.resource_prefix}-${var.testbed_name}-sg"
+  testbed_name              = "testbed1"
+  topology_name             = "3n-c6gn"
+  tg_name                   = "${var.resource_prefix}-${var.testbed_name}-tg"
+  sut1_name                 = "${var.resource_prefix}-${var.testbed_name}-sut1"
+  sut2_name                 = "${var.resource_prefix}-${var.testbed_name}-sut2"
+}
+
+# Create VPC
+module "vpc" {
+  source                   = "../terraform-aws-vpc"
+  security_group_name      = local.security_group_name
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+}
+
+# Create Subnet
+module "subnet_b" {
+  source                   = "../terraform-aws-subnet"
+  subnet_cidr_block        = "192.168.10.0/24"
+  subnet_ipv6_cidr_block   = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 2)
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+  subnet_vpc_id            = module.vpc.vpc_id
+}
+
+module "subnet_c" {
+  source                   = "../terraform-aws-subnet"
+  subnet_cidr_block        = "200.0.0.0/24"
+  subnet_ipv6_cidr_block   = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 3)
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+  subnet_vpc_id            = module.vpc.vpc_id
+}
+
+module "subnet_d" {
+  source                   = "../terraform-aws-subnet"
+  subnet_cidr_block        = "192.168.20.0/24"
+  subnet_ipv6_cidr_block   = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 4)
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+  subnet_vpc_id            = module.vpc.vpc_id
+}
+
+# Create Private Key
+module "private_key" {
+  source  = "pmikus/private-key/tls"
+  version = "4.0.4"
+
+  private_key_algorithm = var.private_key_algorithm
+}
+
+# Create Key Pair
+module "key_pair" {
+  source  = "pmikus/key-pair/aws"
+  version = "5.7.0"
+
+  key_pair_key_name   = local.key_pair_key_name
+  key_pair_public_key = module.private_key.public_key_openssh
+
+  key_pair_tags = {
+    "Environment" = local.environment
+  }
+}
+
+# Create Placement Group
+resource "aws_placement_group" "placement_group" {
+  name     = local.placement_group_name
+  strategy = var.placement_group_strategy
+}
+
+# Create Instance
+resource "aws_instance" "tg" {
+  depends_on = [
+    module.vpc,
+    aws_placement_group.placement_group
+  ]
+  ami                                  = var.tg_ami
+  availability_zone                    = local.availability_zone
+  associate_public_ip_address          = var.tg_associate_public_ip_address
+  instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
+  instance_type                        = var.tg_instance_type
+  key_name                             = module.key_pair.key_pair_key_name
+  placement_group                      = aws_placement_group.placement_group.id
+  private_ip                           = var.tg_private_ip
+  source_dest_check                    = var.tg_source_dest_check
+  subnet_id                            = module.vpc.vpc_subnet_id
+  vpc_security_group_ids               = [module.vpc.vpc_security_group_id]
+  # host_id                            = "1"
+
+  root_block_device {
+    delete_on_termination = true
+    volume_size           = 50
+  }
+
+  tags = {
+    "Name"        = local.tg_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "tg_if1" {
+  depends_on = [
+    module.subnet_b,
+    aws_instance.tg
+  ]
+  private_ip        = var.tg_if1_private_ip
+  private_ips       = [var.tg_if1_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.tg_source_dest_check
+  subnet_id         = module.subnet_b.subnet_id
+
+  attachment {
+    instance     = aws_instance.tg.id
+    device_index = 1
+  }
+
+  tags = {
+    "Name"        = local.tg_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "tg_if2" {
+  depends_on = [
+    module.subnet_d,
+    aws_instance.tg
+  ]
+  private_ips       = [var.tg_if2_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.tg_source_dest_check
+  subnet_id         = module.subnet_d.subnet_id
+
+  attachment {
+    instance     = aws_instance.tg.id
+    device_index = 2
+  }
+
+  tags = {
+    "Name"        = local.tg_name
+    "Environment" = local.environment
+  }
+}
+
+data "aws_network_interface" "tg_if1" {
+  id = aws_network_interface.tg_if1.id
+}
+
+data "aws_network_interface" "tg_if2" {
+  id = aws_network_interface.tg_if2.id
+}
+
+resource "aws_route" "route_tg_if1" {
+  depends_on = [
+    aws_instance.tg
+  ]
+  destination_cidr_block = var.destination_cidr_block_tg_if1
+  network_interface_id   = aws_instance.tg.primary_network_interface_id
+  route_table_id         = module.vpc.vpc_main_route_table_id
+}
+
+resource "aws_route" "route_tg_if2" {
+  depends_on = [
+    aws_instance.tg
+  ]
+  destination_cidr_block = var.destination_cidr_block_tg_if2
+  network_interface_id   = aws_instance.tg.primary_network_interface_id
+  route_table_id         = module.vpc.vpc_main_route_table_id
+}
+
+resource "aws_instance" "sut1" {
+  depends_on = [
+    module.vpc,
+    aws_placement_group.placement_group
+  ]
+  ami                                  = var.sut1_ami
+  availability_zone                    = local.availability_zone
+  associate_public_ip_address          = var.sut1_associate_public_ip_address
+  instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
+  instance_type                        = var.sut1_instance_type
+  key_name                             = module.key_pair.key_pair_key_name
+  placement_group                      = aws_placement_group.placement_group.id
+  private_ip                           = var.sut1_private_ip
+  source_dest_check                    = var.sut1_source_dest_check
+  subnet_id                            = module.vpc.vpc_subnet_id
+  vpc_security_group_ids               = [module.vpc.vpc_security_group_id]
+  # host_id                            = "2"
+
+  root_block_device {
+    delete_on_termination = true
+    volume_size           = 50
+  }
+
+  tags = {
+    "Name"        = local.sut1_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut1_if1" {
+  depends_on = [
+    module.subnet_b,
+    aws_instance.sut1
+  ]
+  private_ips       = [var.sut1_if1_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut1_source_dest_check
+  subnet_id         = module.subnet_b.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut1.id
+    device_index = 1
+  }
+
+  tags = {
+    "Name"        = local.sut1_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut1_if2" {
+  depends_on = [
+    module.subnet_c,
+    aws_instance.sut1
+  ]
+  private_ips       = [var.sut1_if2_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut1_source_dest_check
+  subnet_id         = module.subnet_c.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut1.id
+    device_index = 2
+  }
+
+  tags = {
+    "Name"        = local.sut1_name
+    "Environment" = local.environment
+  }
+}
+
+data "aws_network_interface" "sut1_if1" {
+  id = aws_network_interface.sut1_if1.id
+}
+
+data "aws_network_interface" "sut1_if2" {
+  id = aws_network_interface.sut1_if2.id
+}
+
+resource "aws_instance" "sut2" {
+  depends_on = [
+    module.vpc,
+    aws_placement_group.placement_group
+  ]
+  ami                                  = var.sut2_ami
+  availability_zone                    = local.availability_zone
+  associate_public_ip_address          = var.sut2_associate_public_ip_address
+  instance_initiated_shutdown_behavior = var.sut2_instance_initiated_shutdown_behavior
+  instance_type                        = var.sut2_instance_type
+  key_name                             = module.key_pair.key_pair_key_name
+  placement_group                      = aws_placement_group.placement_group.id
+  private_ip                           = var.sut2_private_ip
+  source_dest_check                    = var.sut2_source_dest_check
+  subnet_id                            = module.vpc.vpc_subnet_id
+  vpc_security_group_ids               = [module.vpc.vpc_security_group_id]
+  # host_id                            = "2"
+
+  root_block_device {
+    delete_on_termination = true
+    volume_size           = 50
+  }
+
+  tags = {
+    "Name"        = local.sut2_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut2_if1" {
+  depends_on = [
+    module.subnet_c,
+    aws_instance.sut2
+  ]
+  private_ips       = [var.sut2_if1_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut2_source_dest_check
+  subnet_id         = module.subnet_c.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut2.id
+    device_index = 1
+  }
+
+  tags = {
+    "Name"        = local.sut2_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut2_if2" {
+  depends_on = [
+    module.subnet_d,
+    aws_instance.sut2
+  ]
+  private_ips       = [var.sut2_if2_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut2_source_dest_check
+  subnet_id         = module.subnet_d.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut2.id
+    device_index = 2
+  }
+
+  tags = {
+    "Name"        = local.sut2_name
+    "Environment" = local.environment
+  }
+}
+
+data "aws_network_interface" "sut2_if1" {
+  id = aws_network_interface.sut2_if1.id
+}
+
+data "aws_network_interface" "sut2_if2" {
+  id = aws_network_interface.sut2_if2.id
+}
+
+resource "null_resource" "deploy_tg" {
+  depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
+    aws_instance.sut1,
+    aws_network_interface.sut1_if1,
+    aws_network_interface.sut1_if2,
+    aws_instance.sut2,
+    aws_network_interface.sut2_if1,
+    aws_network_interface.sut2_if2
+  ]
+
+  connection {
+    user        = "ubuntu"
+    host        = aws_instance.tg.public_ip
+    private_key = module.private_key.private_key_pem
+  }
+
+  provisioner "remote-exec" {
+    inline = var.first_run_commands
+  }
+}
+
+resource "null_resource" "deploy_sut1" {
+  depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
+    aws_instance.sut1,
+    aws_network_interface.sut1_if1,
+    aws_network_interface.sut1_if2,
+    aws_instance.sut2,
+    aws_network_interface.sut2_if1,
+    aws_network_interface.sut2_if2
+  ]
+
+  connection {
+    user        = "ubuntu"
+    host        = aws_instance.sut1.public_ip
+    private_key = module.private_key.private_key_pem
+  }
+
+  provisioner "remote-exec" {
+    inline = var.first_run_commands
+  }
+}
+
+resource "null_resource" "deploy_sut2" {
+  depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
+    aws_instance.sut1,
+    aws_network_interface.sut1_if1,
+    aws_network_interface.sut1_if2,
+    aws_instance.sut2,
+    aws_network_interface.sut2_if1,
+    aws_network_interface.sut2_if2
+  ]
+
+  connection {
+    user        = "ubuntu"
+    host        = aws_instance.sut2.public_ip
+    private_key = module.private_key.private_key_pem
+  }
+
+  provisioner "remote-exec" {
+    inline = var.first_run_commands
+  }
+}
+
+resource "null_resource" "deploy_topology" {
+  depends_on = [
+    aws_instance.tg,
+    aws_instance.sut1,
+    aws_instance.sut2
+  ]
+
+  provisioner "ansible" {
+    plays {
+      playbook {
+        file_path = var.ansible_topology_path
+      }
+      hosts = ["local"]
+      extra_vars = {
+        ansible_python_interpreter = local.ansible_python_executable
+        testbed_name               = local.testbed_name
+        cloud_topology             = local.topology_name
+        tg_if1_mac                 = data.aws_network_interface.tg_if1.mac_address
+        tg_if2_mac                 = data.aws_network_interface.tg_if2.mac_address
+        dut1_if1_mac               = data.aws_network_interface.sut1_if1.mac_address
+        dut1_if2_mac               = data.aws_network_interface.sut1_if2.mac_address
+        dut2_if1_mac               = data.aws_network_interface.sut2_if1.mac_address
+        dut2_if2_mac               = data.aws_network_interface.sut2_if2.mac_address
+        tg_public_ip               = aws_instance.tg.public_ip
+        dut1_public_ip             = aws_instance.sut1.public_ip
+        dut2_public_ip             = aws_instance.sut2.public_ip
+        public_ip_list             = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip},${aws_instance.sut2.public_ip}"
+      }
+    }
+  }
+}
\ No newline at end of file
@@ -11,7 +11,7 @@ variable "region" {
 variable "resource_prefix" {
   description = "Resources name prefix."
   type        = string
-  default     = "csit-1n-c6gn"
+  default     = "csit-3n-c6gn"
 }
 
 variable "testbed_name" {
@@ -56,7 +56,7 @@ variable "tg_instance_initiated_shutdown_behavior" {
 variable "tg_instance_type" {
   description = "The instance type to use for the instance."
   type        = string
-  default     = "c6gn.4xlarge"
+  default     = "c6in.4xlarge"
 }
 
 variable "tg_private_ip" {
@@ -71,6 +71,78 @@ variable "tg_source_dest_check" {
   default     = false
 }
 
+variable "sut1_ami" {
+  description = "AMI to use for the instance."
+  type        = string
+  default     = "ami-0cebabdc14ee56909"
+}
+
+variable "sut1_associate_public_ip_address" {
+  description = "Whether to associate a public IP address with an instance in a VPC."
+  type        = bool
+  default     = true
+}
+
+variable "sut1_instance_initiated_shutdown_behavior" {
+  description = "Shutdown behavior for the instance."
+  type        = string
+  default     = "terminate"
+}
+
+variable "sut1_instance_type" {
+  description = "The instance type to use for the instance."
+  type        = string
+  default     = "c6gn.4xlarge"
+}
+
+variable "sut1_private_ip" {
+  description = "Private IP address to associate with the instance in a VPC."
+  type        = string
+  default     = "192.168.0.11"
+}
+
+variable "sut1_source_dest_check" {
+  description = "Controls if traffic is routed to the instance when the destination address does not match the instance."
+  type        = bool
+  default     = false
+}
+
+variable "sut2_ami" {
+  description = "AMI to use for the instance."
+  type        = string
+  default     = "ami-0cebabdc14ee56909"
+}
+
+variable "sut2_associate_public_ip_address" {
+  description = "Whether to associate a public IP address with an instance in a VPC."
+  type        = bool
+  default     = true
+}
+
+variable "sut2_instance_initiated_shutdown_behavior" {
+  description = "Shutdown behavior for the instance."
+  type        = string
+  default     = "terminate"
+}
+
+variable "sut2_instance_type" {
+  description = "The instance type to use for the instance."
+  type        = string
+  default     = "c6gn.4xlarge"
+}
+
+variable "sut2_private_ip" {
+  description = "Private IP address to associate with the instance in a VPC."
+  type        = string
+  default     = "192.168.0.12"
+}
+
+variable "sut2_source_dest_check" {
+  description = "Controls if traffic is routed to the instance when the destination address does not match the instance."
+  type        = bool
+  default     = false
+}
+
 # Variables for Network Interface
 variable "tg_if1_private_ip" {
   description = "List of private IPs to assign to the ENI without regard to order."
@@ -81,19 +153,43 @@ variable "tg_if1_private_ip" {
 variable "tg_if2_private_ip" {
   description = "List of private IPs to assign to the ENI without regard to order."
   type        = string
-  default     = "192.168.10.11"
+  default     = "192.168.20.254"
 }
 
 variable "destination_cidr_block_tg_if1" {
   description = "The destination CIDR block."
   type        = string
-  default     = "10.0.0.0/16"
+  default     = "10.0.0.0/24"
 }
 
 variable "destination_cidr_block_tg_if2" {
   description = "The destination CIDR block."
   type        = string
-  default     = "20.0.0.0/16"
+  default     = "20.0.0.0/24"
+}
+
+variable "sut1_if1_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "192.168.10.11"
+}
+
+variable "sut1_if2_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "200.0.0.101"
+}
+
+variable "sut2_if1_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "200.0.0.102"
+}
+
+variable "sut2_if2_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "192.168.20.11"
 }
 
 # Variables for Null Resource
diff --git a/fdio.infra.terraform/terraform-aws-3n-c6in/main.tf b/fdio.infra.terraform/terraform-aws-3n-c6in/main.tf
new file mode 100644 (file)
index 0000000..ddfe924
--- /dev/null
@@ -0,0 +1,447 @@
+data "vault_aws_access_credentials" "creds" {
+  backend = "${var.vault-name}-path"
+  role    = "${var.vault-name}-role"
+}
+
+locals {
+  ansible_python_executable = "/usr/bin/python3"
+  availability_zone         = "eu-central-1a"
+  name                      = "csit-vpc"
+  environment               = "csit-vpc-environment"
+  key_pair_key_name         = "${var.resource_prefix}-${var.testbed_name}-pk"
+  placement_group_name      = "${var.resource_prefix}-${var.testbed_name}-pg"
+  security_group_name       = "${var.resource_prefix}-${var.testbed_name}-sg"
+  testbed_name              = "testbed1"
+  topology_name             = "3n-c6in"
+  tg_name                   = "${var.resource_prefix}-${var.testbed_name}-tg"
+  sut1_name                 = "${var.resource_prefix}-${var.testbed_name}-sut1"
+  sut2_name                 = "${var.resource_prefix}-${var.testbed_name}-sut2"
+}
+
+# Create VPC
+module "vpc" {
+  source                   = "../terraform-aws-vpc"
+  security_group_name      = local.security_group_name
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+}
+
+# Create Subnet
+module "subnet_b" {
+  source                   = "../terraform-aws-subnet"
+  subnet_cidr_block        = "192.168.10.0/24"
+  subnet_ipv6_cidr_block   = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 2)
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+  subnet_vpc_id            = module.vpc.vpc_id
+}
+
+module "subnet_c" {
+  source                   = "../terraform-aws-subnet"
+  subnet_cidr_block        = "200.0.0.0/24"
+  subnet_ipv6_cidr_block   = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 3)
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+  subnet_vpc_id            = module.vpc.vpc_id
+}
+
+module "subnet_d" {
+  source                   = "../terraform-aws-subnet"
+  subnet_cidr_block        = "192.168.20.0/24"
+  subnet_ipv6_cidr_block   = cidrsubnet(module.vpc.vpc_ipv6_cidr_block, 8, 4)
+  subnet_availability_zone = local.availability_zone
+  tags_name                = local.name
+  tags_environment         = local.environment
+  subnet_vpc_id            = module.vpc.vpc_id
+}
+
+# Create Private Key
+module "private_key" {
+  source  = "pmikus/private-key/tls"
+  version = "4.0.4"
+
+  private_key_algorithm = var.private_key_algorithm
+}
+
+# Create Key Pair
+module "key_pair" {
+  source  = "pmikus/key-pair/aws"
+  version = "5.7.0"
+
+  key_pair_key_name   = local.key_pair_key_name
+  key_pair_public_key = module.private_key.public_key_openssh
+
+  key_pair_tags = {
+    "Environment" = local.environment
+  }
+}
+
+# Create Placement Group
+resource "aws_placement_group" "placement_group" {
+  name     = local.placement_group_name
+  strategy = var.placement_group_strategy
+}
+
+# Create Instance
+resource "aws_instance" "tg" {
+  depends_on = [
+    module.vpc,
+    aws_placement_group.placement_group
+  ]
+  ami                                  = var.tg_ami
+  availability_zone                    = local.availability_zone
+  associate_public_ip_address          = var.tg_associate_public_ip_address
+  instance_initiated_shutdown_behavior = var.tg_instance_initiated_shutdown_behavior
+  instance_type                        = var.tg_instance_type
+  key_name                             = module.key_pair.key_pair_key_name
+  placement_group                      = aws_placement_group.placement_group.id
+  private_ip                           = var.tg_private_ip
+  source_dest_check                    = var.tg_source_dest_check
+  subnet_id                            = module.vpc.vpc_subnet_id
+  vpc_security_group_ids               = [module.vpc.vpc_security_group_id]
+  # host_id                            = "1"
+
+  root_block_device {
+    delete_on_termination = true
+    volume_size           = 50
+  }
+
+  tags = {
+    "Name"        = local.tg_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "tg_if1" {
+  depends_on = [
+    module.subnet_b,
+    aws_instance.tg
+  ]
+  private_ip        = var.tg_if1_private_ip
+  private_ips       = [var.tg_if1_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.tg_source_dest_check
+  subnet_id         = module.subnet_b.subnet_id
+
+  attachment {
+    instance     = aws_instance.tg.id
+    device_index = 1
+  }
+
+  tags = {
+    "Name"        = local.tg_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "tg_if2" {
+  depends_on = [
+    module.subnet_d,
+    aws_instance.tg
+  ]
+  private_ips       = [var.tg_if2_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.tg_source_dest_check
+  subnet_id         = module.subnet_d.subnet_id
+
+  attachment {
+    instance     = aws_instance.tg.id
+    device_index = 2
+  }
+
+  tags = {
+    "Name"        = local.tg_name
+    "Environment" = local.environment
+  }
+}
+
+data "aws_network_interface" "tg_if1" {
+  id = aws_network_interface.tg_if1.id
+}
+
+data "aws_network_interface" "tg_if2" {
+  id = aws_network_interface.tg_if2.id
+}
+
+resource "aws_route" "route_tg_if1" {
+  depends_on = [
+    aws_instance.tg
+  ]
+  destination_cidr_block = var.destination_cidr_block_tg_if1
+  network_interface_id   = aws_instance.tg.primary_network_interface_id
+  route_table_id         = module.vpc.vpc_main_route_table_id
+}
+
+resource "aws_route" "route_tg_if2" {
+  depends_on = [
+    aws_instance.tg
+  ]
+  destination_cidr_block = var.destination_cidr_block_tg_if2
+  network_interface_id   = aws_instance.tg.primary_network_interface_id
+  route_table_id         = module.vpc.vpc_main_route_table_id
+}
+
+resource "aws_instance" "sut1" {
+  depends_on = [
+    module.vpc,
+    aws_placement_group.placement_group
+  ]
+  ami                                  = var.sut1_ami
+  availability_zone                    = local.availability_zone
+  associate_public_ip_address          = var.sut1_associate_public_ip_address
+  instance_initiated_shutdown_behavior = var.sut1_instance_initiated_shutdown_behavior
+  instance_type                        = var.sut1_instance_type
+  key_name                             = module.key_pair.key_pair_key_name
+  placement_group                      = aws_placement_group.placement_group.id
+  private_ip                           = var.sut1_private_ip
+  source_dest_check                    = var.sut1_source_dest_check
+  subnet_id                            = module.vpc.vpc_subnet_id
+  vpc_security_group_ids               = [module.vpc.vpc_security_group_id]
+  # host_id                            = "2"
+
+  root_block_device {
+    delete_on_termination = true
+    volume_size           = 50
+  }
+
+  tags = {
+    "Name"        = local.sut1_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut1_if1" {
+  depends_on = [
+    module.subnet_b,
+    aws_instance.sut1
+  ]
+  private_ips       = [var.sut1_if1_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut1_source_dest_check
+  subnet_id         = module.subnet_b.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut1.id
+    device_index = 1
+  }
+
+  tags = {
+    "Name"        = local.sut1_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut1_if2" {
+  depends_on = [
+    module.subnet_c,
+    aws_instance.sut1
+  ]
+  private_ips       = [var.sut1_if2_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut1_source_dest_check
+  subnet_id         = module.subnet_c.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut1.id
+    device_index = 2
+  }
+
+  tags = {
+    "Name"        = local.sut1_name
+    "Environment" = local.environment
+  }
+}
+
+data "aws_network_interface" "sut1_if1" {
+  id = aws_network_interface.sut1_if1.id
+}
+
+data "aws_network_interface" "sut1_if2" {
+  id = aws_network_interface.sut1_if2.id
+}
+
+resource "aws_instance" "sut2" {
+  depends_on = [
+    module.vpc,
+    aws_placement_group.placement_group
+  ]
+  ami                                  = var.sut2_ami
+  availability_zone                    = local.availability_zone
+  associate_public_ip_address          = var.sut2_associate_public_ip_address
+  instance_initiated_shutdown_behavior = var.sut2_instance_initiated_shutdown_behavior
+  instance_type                        = var.sut2_instance_type
+  key_name                             = module.key_pair.key_pair_key_name
+  placement_group                      = aws_placement_group.placement_group.id
+  private_ip                           = var.sut2_private_ip
+  source_dest_check                    = var.sut2_source_dest_check
+  subnet_id                            = module.vpc.vpc_subnet_id
+  vpc_security_group_ids               = [module.vpc.vpc_security_group_id]
+  # host_id                            = "2"
+
+  root_block_device {
+    delete_on_termination = true
+    volume_size           = 50
+  }
+
+  tags = {
+    "Name"        = local.sut2_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut2_if1" {
+  depends_on = [
+    module.subnet_c,
+    aws_instance.sut2
+  ]
+  private_ips       = [var.sut2_if1_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut2_source_dest_check
+  subnet_id         = module.subnet_c.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut2.id
+    device_index = 1
+  }
+
+  tags = {
+    "Name"        = local.sut2_name
+    "Environment" = local.environment
+  }
+}
+
+resource "aws_network_interface" "sut2_if2" {
+  depends_on = [
+    module.subnet_d,
+    aws_instance.sut2
+  ]
+  private_ips       = [var.sut2_if2_private_ip]
+  security_groups   = [module.vpc.vpc_security_group_id]
+  source_dest_check = var.sut2_source_dest_check
+  subnet_id         = module.subnet_d.subnet_id
+
+  attachment {
+    instance     = aws_instance.sut2.id
+    device_index = 2
+  }
+
+  tags = {
+    "Name"        = local.sut2_name
+    "Environment" = local.environment
+  }
+}
+
+data "aws_network_interface" "sut2_if1" {
+  id = aws_network_interface.sut2_if1.id
+}
+
+data "aws_network_interface" "sut2_if2" {
+  id = aws_network_interface.sut2_if2.id
+}
+
+resource "null_resource" "deploy_tg" {
+  depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
+    aws_instance.sut1,
+    aws_network_interface.sut1_if1,
+    aws_network_interface.sut1_if2,
+    aws_instance.sut2,
+    aws_network_interface.sut2_if1,
+    aws_network_interface.sut2_if2
+  ]
+
+  connection {
+    user        = "ubuntu"
+    host        = aws_instance.tg.public_ip
+    private_key = module.private_key.private_key_pem
+  }
+
+  provisioner "remote-exec" {
+    inline = var.first_run_commands
+  }
+}
+
+resource "null_resource" "deploy_sut1" {
+  depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
+    aws_instance.sut1,
+    aws_network_interface.sut1_if1,
+    aws_network_interface.sut1_if2,
+    aws_instance.sut2,
+    aws_network_interface.sut2_if1,
+    aws_network_interface.sut2_if2
+  ]
+
+  connection {
+    user        = "ubuntu"
+    host        = aws_instance.sut1.public_ip
+    private_key = module.private_key.private_key_pem
+  }
+
+  provisioner "remote-exec" {
+    inline = var.first_run_commands
+  }
+}
+
+resource "null_resource" "deploy_sut2" {
+  depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
+    aws_instance.sut1,
+    aws_network_interface.sut1_if1,
+    aws_network_interface.sut1_if2,
+    aws_instance.sut2,
+    aws_network_interface.sut2_if1,
+    aws_network_interface.sut2_if2
+  ]
+
+  connection {
+    user        = "ubuntu"
+    host        = aws_instance.sut2.public_ip
+    private_key = module.private_key.private_key_pem
+  }
+
+  provisioner "remote-exec" {
+    inline = var.first_run_commands
+  }
+}
+
+resource "null_resource" "deploy_topology" {
+  depends_on = [
+    aws_instance.tg,
+    aws_instance.sut1,
+    aws_instance.sut2
+  ]
+
+  provisioner "ansible" {
+    plays {
+      playbook {
+        file_path = var.ansible_topology_path
+      }
+      hosts = ["local"]
+      extra_vars = {
+        ansible_python_interpreter = local.ansible_python_executable
+        testbed_name               = local.testbed_name
+        cloud_topology             = local.topology_name
+        tg_if1_mac                 = data.aws_network_interface.tg_if1.mac_address
+        tg_if2_mac                 = data.aws_network_interface.tg_if2.mac_address
+        dut1_if1_mac               = data.aws_network_interface.sut1_if1.mac_address
+        dut1_if2_mac               = data.aws_network_interface.sut1_if2.mac_address
+        dut2_if1_mac               = data.aws_network_interface.sut2_if1.mac_address
+        dut2_if2_mac               = data.aws_network_interface.sut2_if2.mac_address
+        tg_public_ip               = aws_instance.tg.public_ip
+        dut1_public_ip             = aws_instance.sut1.public_ip
+        dut2_public_ip             = aws_instance.sut2.public_ip
+        public_ip_list             = "${aws_instance.tg.public_ip},${aws_instance.sut1.public_ip},${aws_instance.sut2.public_ip}"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-3n-c6in/output.tf b/fdio.infra.terraform/terraform-aws-3n-c6in/output.tf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/fdio.infra.terraform/terraform-aws-3n-c6in/providers.tf b/fdio.infra.terraform/terraform-aws-3n-c6in/providers.tf
new file mode 100644 (file)
index 0000000..2482ca2
--- /dev/null
@@ -0,0 +1,11 @@
+provider "aws" {
+  region     = var.region
+  access_key = data.vault_aws_access_credentials.creds.access_key
+  secret_key = data.vault_aws_access_credentials.creds.secret_key
+}
+
+provider "vault" {
+  address         = "http://10.30.51.24:8200"
+  skip_tls_verify = true
+  token           = "s.4z5PsufFwV3sHbCzK9Y2Cojd"
+}
\ No newline at end of file
diff --git a/fdio.infra.terraform/terraform-aws-3n-c6in/variables.tf b/fdio.infra.terraform/terraform-aws-3n-c6in/variables.tf
new file mode 100644 (file)
index 0000000..3255cab
--- /dev/null
@@ -0,0 +1,216 @@
+variable "vault-name" {
+  default = "dynamic-aws-creds-vault-fdio-csit-jenkins"
+}
+
+variable "region" {
+  description = "AWS Region."
+  type        = string
+  default     = "eu-central-1"
+}
+
+variable "resource_prefix" {
+  description = "Resources name prefix."
+  type        = string
+  default     = "csit-3n-c6in"
+}
+
+variable "testbed_name" {
+  description = "Testbed name."
+  type        = string
+  default     = "testbed1"
+}
+
+# Variables for Private Key
+variable "private_key_algorithm" {
+  description = "The name of the algorithm to use for the key."
+  type        = string
+  default     = "ED25519"
+}
+
+# Variables for Placement Group
+variable "placement_group_strategy" {
+  description = "The placement strategy. Can be cluster, partition or spread."
+  type        = string
+  default     = "cluster"
+}
+
+# Variables for Instance
+variable "tg_ami" {
+  description = "AMI to use for the instance."
+  type        = string
+  default     = "ami-07430bfa17fd4e597"
+}
+
+variable "tg_associate_public_ip_address" {
+  description = "Whether to associate a public IP address with an instance in a VPC."
+  type        = bool
+  default     = true
+}
+
+variable "tg_instance_initiated_shutdown_behavior" {
+  description = "Shutdown behavior for the instance."
+  type        = string
+  default     = "terminate"
+}
+
+variable "tg_instance_type" {
+  description = "The instance type to use for the instance."
+  type        = string
+  default     = "c6in.4xlarge"
+}
+
+variable "tg_private_ip" {
+  description = "Private IP address to associate with the instance in a VPC."
+  type        = string
+  default     = "192.168.0.10"
+}
+
+variable "tg_source_dest_check" {
+  description = "Controls if traffic is routed to the instance when the destination address does not match the instance."
+  type        = bool
+  default     = false
+}
+
+variable "sut1_ami" {
+  description = "AMI to use for the instance."
+  type        = string
+  default     = "ami-0a890555652963ec2"
+}
+
+variable "sut1_associate_public_ip_address" {
+  description = "Whether to associate a public IP address with an instance in a VPC."
+  type        = bool
+  default     = true
+}
+
+variable "sut1_instance_initiated_shutdown_behavior" {
+  description = "Shutdown behavior for the instance."
+  type        = string
+  default     = "terminate"
+}
+
+variable "sut1_instance_type" {
+  description = "The instance type to use for the instance."
+  type        = string
+  default     = "c6in.4xlarge"
+}
+
+variable "sut1_private_ip" {
+  description = "Private IP address to associate with the instance in a VPC."
+  type        = string
+  default     = "192.168.0.11"
+}
+
+variable "sut1_source_dest_check" {
+  description = "Controls if traffic is routed to the instance when the destination address does not match the instance."
+  type        = bool
+  default     = false
+}
+
+variable "sut2_ami" {
+  description = "AMI to use for the instance."
+  type        = string
+  default     = "ami-07898402cb1fd6561"
+}
+
+variable "sut2_associate_public_ip_address" {
+  description = "Whether to associate a public IP address with an instance in a VPC."
+  type        = bool
+  default     = true
+}
+
+variable "sut2_instance_initiated_shutdown_behavior" {
+  description = "Shutdown behavior for the instance."
+  type        = string
+  default     = "terminate"
+}
+
+variable "sut2_instance_type" {
+  description = "The instance type to use for the instance."
+  type        = string
+  default     = "c6in.4xlarge"
+}
+
+variable "sut2_private_ip" {
+  description = "Private IP address to associate with the instance in a VPC."
+  type        = string
+  default     = "192.168.0.12"
+}
+
+variable "sut2_source_dest_check" {
+  description = "Controls if traffic is routed to the instance when the destination address does not match the instance."
+  type        = bool
+  default     = false
+}
+
+# Variables for Network Interface
+variable "tg_if1_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "192.168.10.254"
+}
+
+variable "tg_if2_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "192.168.20.254"
+}
+
+variable "destination_cidr_block_tg_if1" {
+  description = "The destination CIDR block."
+  type        = string
+  default     = "10.0.0.0/24"
+}
+
+variable "destination_cidr_block_tg_if2" {
+  description = "The destination CIDR block."
+  type        = string
+  default     = "20.0.0.0/24"
+}
+
+variable "sut1_if1_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "192.168.10.11"
+}
+
+variable "sut1_if2_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "200.0.0.101"
+}
+
+variable "sut2_if1_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "200.0.0.102"
+}
+
+variable "sut2_if2_private_ip" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = string
+  default     = "192.168.20.11"
+}
+
+# Variables for Null Resource
+variable "first_run_commands" {
+  description = "List of private IPs to assign to the ENI without regard to order."
+  type        = list(string)
+  default = [
+    "sudo sed -i 's/^PasswordAuthentication/#PasswordAuthentication/' /etc/ssh/sshd_config",
+    "sudo systemctl restart sshd",
+    "sudo useradd --create-home -s /bin/bash provisionuser",
+    "echo 'provisionuser:Csit1234' | sudo chpasswd",
+    "echo 'provisionuser ALL = (ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers",
+    "sudo useradd --create-home -s /bin/bash testuser",
+    "echo 'testuser:Csit1234' | sudo chpasswd",
+    "echo 'testuser ALL = (ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers"
+  ]
+}
+
+# Variables for Null Resource
+variable "ansible_topology_path" {
+  description = "Ansible topology path."
+  type        = string
+  default     = "../../fdio.infra.ansible/cloud_topology.yaml"
+}
diff --git a/fdio.infra.terraform/terraform-aws-3n-c6in/versions.tf b/fdio.infra.terraform/terraform-aws-3n-c6in/versions.tf
new file mode 100644 (file)
index 0000000..5896996
--- /dev/null
@@ -0,0 +1,20 @@
+terraform {
+  required_providers {
+    aws = {
+      source  = "hashicorp/aws"
+      version = ">= 5.7.0"
+    }
+    null = {
+      source  = "hashicorp/null"
+      version = ">= 3.2.1"
+    }
+    tls = {
+      source  = "hashicorp/tls"
+      version = ">= 4.0.4"
+    }
+    vault = {
+      version = ">= 3.15.2"
+    }
+  }
+  required_version = ">= 1.4.2"
+}
\ No newline at end of file
index 6a81b70..135d1c3 100644 (file)
@@ -64,23 +64,6 @@ source "amazon-ebs" "csit_ubuntu_jammy_arm_sut" {
   ssh_username     = "ubuntu"
 }
 
-source "amazon-ebs" "csit_ubuntu_jammy_arm_tg" {
-  ami_name        = "csit_ubuntu_jammy_arm_tg"
-  ami_description = "CSIT TG image based on Ubuntu jammy"
-  ena_support     = true
-  instance_type   = "c6gn.4xlarge"
-  launch_block_device_mappings {
-    device_name = "/dev/sda1"
-    volume_size = 40
-    volume_type = "gp2"
-  }
-  force_deregister = true
-  region           = "eu-central-1"
-  skip_create_ami  = false
-  source_ami       = "ami-0329d3839379bfd15"
-  ssh_username     = "ubuntu"
-}
-
 build {
   name = "csit_ubuntu_jammy_arm_sut-packer"
   sources = [
@@ -102,27 +85,4 @@ build {
   provisioner "shell" {
     inline = var.last_run_commands
   }
-}
-
-build {
-  name = "csit_ubuntu_jammy_arm_tg-packer"
-  sources = [
-    "source.amazon-ebs.csit_ubuntu_jammy_arm_tg"
-  ]
-  provisioner "shell" {
-    inline = var.first_run_commands
-  }
-  provisioner "ansible" {
-    playbook_file = var.ansible_file_path
-    user          = "ubuntu"
-    groups        = ["tg_aws"]
-    extra_arguments = [
-      "--extra-vars", "ansible_ssh_pass=${var.ansible_provision_pwd}",
-      "--extra-vars", "ansible_python_interpreter=${var.ansible_python_executable}",
-      "--extra-vars", "aws=true"
-    ]
-  }
-  provisioner "shell" {
-    inline = var.last_run_commands
-  }
-}
+}
\ No newline at end of file