diff --git a/.gitignore b/.gitignore index f50856b..26777e8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,4 @@ terraform.auto.tfvars backend.tf .sshkey.pem -Makefile diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/CloudShell/connect.sh b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/CloudShell/connect.sh new file mode 100644 index 0000000..7bf79dd --- /dev/null +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/CloudShell/connect.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +while getopts i: flag +do + case "${flag}" in + i) PublicIp=${OPTARG};; + esac +done + +aws ec2 describe-instances \ + --filters "Name=instance-state-name,Values=running" "Name=network-interface.association.public-ip,Values=$PublicIp" \ + --query "Reservations[].Instances[].[InstanceId,Tags[?Key=='Name'].Value|[0]]" \ + --output table +AgentId=$(aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=network-interface.association.public-ip,Values=$PublicIp" --query "Reservations[].Instances[].[InstanceId,Tags[?Key=='Name'].Value|[0]]" --output json | jq .[0][0] --raw-output) +aws ssm start-session \ + --target $AgentId \ No newline at end of file diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/Makefile b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/Makefile new file mode 100644 index 0000000..390662d --- /dev/null +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/Makefile @@ -0,0 +1,56 @@ +SHELL := /bin/bash + +aws: install all + +all: init apply ssh output + +clean: state destroy + +install: +ifeq ($(shell grep "^ID=" /etc/*elease | cut -d "=" -f 2| sed -e 's/^"//' -e 's/"$$//' 2> /dev/null), amzn) +ifeq ($(shell command -v terraform 2> /dev/null),) + sudo yum install -y yum-utils + sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo + sudo yum -y install terraform +endif +endif + +version: + time terraform version + +init: + time terraform init + +validate: + time terraform validate + +update: + time terraform get -update + +plan: + time terraform plan + +apply: + time terraform apply -auto-approve + +destroy: + time terraform destroy -auto-approve + +output: + time terraform output + +ssh: + time terraform output SshKey | tail -n +3 | head -n-3 | sed "s/^[ \t]*//" > .sshkey.pem + +state: + time terraform state list + +connect: connect-app + +connect-app: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json App | jq -r .eth0.eip.public_ip) + +connect-agent1: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json Agent1 | jq -r .eth0.eip.public_ip) diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md index acf8243..6349a3b 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md @@ -1,4 +1,4 @@ -# BPS-on-AWS-1-App-1-Agent-1-VPC-1-Public-Subnet-1-Private-Subnet +# BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet ## Description This deployment creates a topology with a single virtual private cloud having a single public facing subnet and a single private subnet. @@ -23,4 +23,4 @@ terraform validate terraform plan terraform state list terraform output -``` \ No newline at end of file +``` diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf index fad38f7..99c7d64 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf @@ -1,5 +1,13 @@ data "aws_caller_identity" "current" {} +data "aws_ec2_instance_type" "Agent" { + instance_type = local.AgentInstanceType +} + +data "aws_ec2_instance_type" "App" { + instance_type = local.AppInstanceType +} + data "aws_region" "current" {} data "aws_availability_zones" "available" { @@ -21,4 +29,8 @@ data "cloudinit_config" "init_cli" { UserName: local.AppUserName }) } -} \ No newline at end of file +} + +data "http" "ip" { + url = "https://ifconfig.me/ip" +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf index 142f47a..cda6265 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf @@ -1,27 +1,30 @@ locals { AgentInstanceType = var.AgentInstanceType Agent1Eth2PrivateIpAddresses = [ "10.0.2.22", "10.0.2.23", "10.0.2.24", "10.0.2.25", "10.0.2.26", "10.0.2.27", "10.0.2.28", "10.0.2.29", "10.0.2.30", "10.0.2.31" ] + Agent1InstanceId = "agent1" ApiMaxRetries = var.ApiMaxRetries AppInstanceType = var.AppInstanceType AppTag = "bps" AppUserName = "ixia" AwsAccessCredentialsAccessKey = var.AwsAccessCredentialsAccessKey AwsAccessCredentialsSecretKey = var.AwsAccessCredentialsSecretKey - InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks + InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks == null ? [ "${data.http.ip.response_body}/32" ] : var.InboundIPv4CidrBlocks File1Content = tls_private_key.SshKey.private_key_pem File1Name = "id_rsa" File2Content = tls_private_key.SshKey.public_key_openssh File2Name = "authorized_keys" File3Content = tls_private_key.SshKey.public_key_openssh File3Name = "id_rsa.pub" + PlacementGroupName = "${local.Preamble}-placement-group-${local.Region}" + PlacementGroupStrategy = "cluster" Preamble = "${local.UserLoginTag}-${local.UserProjectTag}-${local.AppTag}" PrivateSubnetAvailabilityZone = var.PrivateSubnetAvailabilityZone PublicSubnetAvailabilityZone = var.PublicSubnetAvailabilityZone - Region = data.aws_region.current.name + Region = data.aws_region.current.id SshKeyAlgorithm = "RSA" SshKeyName = "${local.Preamble}-ssh-key" SshKeyRsaBits = "4096" UserEmailTag = var.UserEmailTag == null ? data.aws_caller_identity.current.user_id : var.UserEmailTag UserLoginTag = var.UserLoginTag == null ? "terraform" : var.UserLoginTag UserProjectTag = var.UserProjectTag == null ? random_id.RandomId.id : var.UserProjectTag -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf index 4004404..9b69ee7 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf @@ -1,5 +1,5 @@ module "App" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-app.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-app.git?ref=26.0.0" Eth0SecurityGroupId = module.Vpc.PublicSecurityGroup.id Eth0SubnetId = module.Vpc.PublicSubnet.id InstanceType = local.AppInstanceType @@ -13,7 +13,7 @@ module "App" { } module "Agent1" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-agent.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-agent.git?ref=26.0.0" Eth0SecurityGroupId = module.Vpc.PublicSecurityGroup.id Eth0SubnetId = module.Vpc.PublicSubnet.id Eth1SecurityGroupId = module.Vpc.PrivateSecurityGroup.id @@ -21,16 +21,24 @@ module "Agent1" { Eth2PrivateIpAddresses = local.Agent1Eth2PrivateIpAddresses Eth2SecurityGroupId = module.Vpc.PrivateSecurityGroup.id Eth2SubnetId = module.Vpc.PrivateSubnet.id + InstanceId = local.Agent1InstanceId InstanceType = local.AgentInstanceType + PlacementGroupId = aws_placement_group.PlacementGroup.id UserEmailTag = local.UserEmailTag UserLoginTag = local.UserLoginTag UserProjectTag = local.UserProjectTag init_cli = data.cloudinit_config.init_cli.rendered depends_on = [ + aws_placement_group.PlacementGroup, module.Vpc ] } +resource "aws_placement_group" "PlacementGroup" { + name = local.PlacementGroupName + strategy = local.PlacementGroupStrategy +} + resource "random_id" "RandomId" { byte_length = 4 -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf index f10aa20..20532cb 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf @@ -1,42 +1,99 @@ -output "AgentAmi" { +output "Agent1" { value = { - "image_id" : module.Agent1.Ami.image_id - "name" : module.Agent1.Ami.name - "owner_id" : module.Agent1.Ami.owner_id + ami = { + image_id = module.Agent1.Ami.image_id + name = module.Agent1.Ami.name + owner_id = module.Agent1.Ami.owner_id + } + availability_zone = module.Agent1.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.Agent1.Eth0ElasticIp.public_dns + public_ip = module.Agent1.Eth0ElasticIp.public_ip + } + } + id = module.Agent1.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.Agent.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.Agent.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.Agent.default_cores + default_network_card_index = data.aws_ec2_instance_type.Agent.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.Agent.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.Agent.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.Agent.ena_srd_supported + ena_support = data.aws_ec2_instance_type.Agent.ena_support + hypervisor = data.aws_ec2_instance_type.Agent.hypervisor + ipv6_supported = data.aws_ec2_instance_type.Agent.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.Agent.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.Agent.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.Agent.memory_size + name = module.Agent1.Instance.instance_type + network_performance = data.aws_ec2_instance_type.Agent.network_performance + supported_architectures = data.aws_ec2_instance_type.Agent.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.Agent.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.Agent.supported_placement_strategies + } + private_dns = module.Agent1.Instance.private_dns + private_ip = module.Agent1.Instance.private_ip } } -output "Agent1Eth0ElasticIp" { +output "App" { value = { - "public_dns" : module.Agent1.Eth0ElasticIp.public_dns - "public_ip" : module.Agent1.Eth0ElasticIp.public_ip - } -} - -output "AppAmi" { - value = { - "image_id" : module.App.Ami.image_id - "name" : module.App.Ami.name - "owner_id" : module.App.Ami.owner_id - } -} - -output "AppEth0ElasticIp" { - value = { - "public_dns" : module.App.Eth0ElasticIp.public_dns - "public_ip" : module.App.Eth0ElasticIp.public_ip + ami = { + image_id = module.App.Ami.image_id + name = module.App.Ami.name + owner_id = module.App.Ami.owner_id + } + availability_zone = module.App.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.App.Eth0ElasticIp.public_dns + public_ip = module.App.Eth0ElasticIp.public_ip + } + } + id = module.App.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.App.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.App.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.App.default_cores + default_network_card_index = data.aws_ec2_instance_type.App.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.App.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.App.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.App.ena_srd_supported + ena_support = data.aws_ec2_instance_type.App.ena_support + hypervisor = data.aws_ec2_instance_type.App.hypervisor + ipv6_supported = data.aws_ec2_instance_type.App.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.App.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.App.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.App.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.App.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.App.memory_size + name = module.App.Instance.instance_type + network_performance = data.aws_ec2_instance_type.App.network_performance + supported_architectures = data.aws_ec2_instance_type.App.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.App.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.App.supported_placement_strategies + } + private_dns = module.App.Instance.private_dns + private_ip = module.App.Instance.private_ip } } output "AvailabilityZones" { value = { - "available.names" : data.aws_availability_zones.available.names + available = { + names = data.aws_availability_zones.available.names + } + region = data.aws_availability_zones.available.region } } output "SshKey" { sensitive = true value = { - "private_key_pem" : tls_private_key.SshKey.private_key_pem + private_key_pem = tls_private_key.SshKey.private_key_pem } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars index edb2618..83366ef 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars @@ -1,4 +1,4 @@ -# AgentInstanceType = "c5n.xlarge" +# AgentInstanceType = "c6in.xlarge" # ApiMaxRetries = 1 # AppInstanceType = "c5.xlarge" # InboundIPv4CidrBlocks = [ "0.0.0.0/0" ] @@ -7,4 +7,4 @@ # Region = "us-east-1" # UserEmailTag = "terraform@example.com" # UserLoginTag = "terraform" -# UserProjectTag = "cloud-ist" \ No newline at end of file +# UserProjectTag = "cloud-ist" diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf index cffb479..168aed7 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf @@ -1,41 +1,14 @@ variable "AgentInstanceType" { - default = "c5n.xlarge" + default = "c6in.xlarge" description = "Instance type of Agent VM" type = string validation { - condition = contains([ "t3.xlarge", "t3.2xlarge", - "t3a.xlarge", "t3a.2xlarge", - "m6i.xlarge", "m6i.2xlarge", "m6i.4xlarge", "m6i.8xlarge", "m6i.12xlarge", "m6i.16xlarge", "m6i.24xlarge", "m6i.32xlarge", - "m6a.xlarge", "m6a.2xlarge", "m6a.4xlarge", "m6a.8xlarge", "m6a.12xlarge", "m6a.16xlarge", "m6a.24xlarge", "m6a.32xlarge", "m6a.48xlarge", - "m6in.xlarge", "m6in.2xlarge", "m6in.4xlarge", "m6in.8xlarge", "m6in.12xlarge", "m6in.16xlarge", "m6in.24xlarge", "m6in.32xlarge", - "m5.xlarge", "m5.2xlarge", "m5.4xlarge", "m5.8xlarge", "m5.12xlarge", "m5.16xlarge", "m5.24xlarge", - "m5a.xlarge", "m5a.2xlarge", "m5a.4xlarge", "m5a.8xlarge", "m5a.12xlarge", "m5a.16xlarge", "m5a.24xlarge", - "m5n.xlarge", "m5n.2xlarge", "m5n.4xlarge", "m5n.8xlarge", "m5n.12xlarge", "m5n.16xlarge", "m5n.24xlarge", - "c6i.xlarge", "c6i.2xlarge", "c6i.4xlarge", "c6i.8xlarge", "c6i.12xlarge", "c6i.16xlarge", "c6i.24xlarge", "c6i.32xlarge", - "c6a.xlarge", "c6a.2xlarge", "c6a.4xlarge", "c6a.8xlarge", "c6a.12xlarge", "c6a.16xlarge", "c6a.24xlarge", "c6a.32xlarge", "c6a.48xlarge", - "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge", - "c5.xlarge", "c5.2xlarge", "c5.4xlarge", "c5.9xlarge", "c5.12xlarge", "c5.18xlarge", "c5.24xlarge", - "c5a.xlarge", "c5a.2xlarge", "c5a.4xlarge", "c5a.8xlarge", "c5a.12xlarge", "c5a.16xlarge", "c5a.24xlarge", - "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", - "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge" - ], var.AgentInstanceType) + condition = contains([ "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", + "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge" ], var.AgentInstanceType) error_message = < /dev/null), amzn) +ifeq ($(shell command -v terraform 2> /dev/null),) + sudo yum install -y yum-utils + sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo + sudo yum -y install terraform +endif +endif + +version: + time terraform version + +init: + time terraform init + +validate: + time terraform validate + +update: + time terraform get -update + +plan: + time terraform plan + +apply: + time terraform apply -auto-approve + +destroy: + time terraform destroy -auto-approve + +output: + time terraform output + +ssh: + time terraform output SshKey | tail -n +3 | head -n-3 | sed "s/^[ \t]*//" > .sshkey.pem + +state: + time terraform state list + +connect: connect-app + +connect-app: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json App | jq -r .eth0.eip.public_ip) + +connect-agent1: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json Agent1 | jq -r .eth0.eip.public_ip) diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md index 28ec2ec..849b950 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md @@ -1,4 +1,4 @@ -# BPS-on-AWS-1-App-1-Agent-1-VPC-1-Public-Subnet-2-Private-Subnets +# BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets ## Description This deployment creates a topology with a single virtual private cloud having a single public facing subnet and two private subnets. @@ -23,4 +23,4 @@ terraform validate terraform plan terraform state list terraform output -``` \ No newline at end of file +``` diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf index fad38f7..99c7d64 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf @@ -1,5 +1,13 @@ data "aws_caller_identity" "current" {} +data "aws_ec2_instance_type" "Agent" { + instance_type = local.AgentInstanceType +} + +data "aws_ec2_instance_type" "App" { + instance_type = local.AppInstanceType +} + data "aws_region" "current" {} data "aws_availability_zones" "available" { @@ -21,4 +29,8 @@ data "cloudinit_config" "init_cli" { UserName: local.AppUserName }) } -} \ No newline at end of file +} + +data "http" "ip" { + url = "https://ifconfig.me/ip" +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf index 6bc81ff..af0cfea 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf @@ -1,27 +1,30 @@ locals { AgentInstanceType = var.AgentInstanceType + Agent1InstanceId = "agent1" ApiMaxRetries = var.ApiMaxRetries AppInstanceType = var.AppInstanceType AppTag = "bps" AppUserName = "ixia" AwsAccessCredentialsAccessKey = var.AwsAccessCredentialsAccessKey AwsAccessCredentialsSecretKey = var.AwsAccessCredentialsSecretKey - InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks + InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks == null ? [ "${data.http.ip.response_body}/32" ] : var.InboundIPv4CidrBlocks File1Content = tls_private_key.SshKey.private_key_pem File1Name = "id_rsa" File2Content = tls_private_key.SshKey.public_key_openssh File2Name = "authorized_keys" File3Content = tls_private_key.SshKey.public_key_openssh File3Name = "id_rsa.pub" + PlacementGroupName = "${local.Preamble}-placement-group-${local.Region}" + PlacementGroupStrategy = "cluster" Preamble = "${local.UserLoginTag}-${local.UserProjectTag}-${local.AppTag}" Private1SubnetAvailabilityZone = var.Private1SubnetAvailabilityZone Private2SubnetAvailabilityZone = var.Private2SubnetAvailabilityZone PublicSubnetAvailabilityZone = var.PublicSubnetAvailabilityZone - Region = data.aws_region.current.name + Region = data.aws_region.current.id SshKeyAlgorithm = "RSA" SshKeyName = "${local.Preamble}-ssh-key" SshKeyRsaBits = "4096" UserEmailTag = var.UserEmailTag == null ? data.aws_caller_identity.current.user_id : var.UserEmailTag UserLoginTag = var.UserLoginTag == null ? "terraform" : var.UserLoginTag UserProjectTag = var.UserProjectTag == null ? random_id.RandomId.id : var.UserProjectTag -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf index e9333ad..c75de00 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf @@ -1,5 +1,5 @@ module "App" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-app.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-app.git?ref=26.0.0" Eth0SecurityGroupId = module.Vpc.PublicSecurityGroup.id Eth0SubnetId = module.Vpc.PublicSubnet.id InstanceType = local.AppInstanceType @@ -13,23 +13,31 @@ module "App" { } module "Agent1" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-agent.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-agent.git?ref=26.0.0" Eth0SecurityGroupId = module.Vpc.PublicSecurityGroup.id Eth0SubnetId = module.Vpc.PublicSubnet.id Eth1SecurityGroupId = module.Vpc.PrivateSecurityGroup.id Eth1SubnetId = module.Vpc.Private1Subnet.id Eth2SecurityGroupId = module.Vpc.PrivateSecurityGroup.id Eth2SubnetId = module.Vpc.Private2Subnet.id + InstanceId = local.Agent1InstanceId InstanceType = local.AgentInstanceType + PlacementGroupId = aws_placement_group.PlacementGroup.id UserEmailTag = local.UserEmailTag UserLoginTag = local.UserLoginTag UserProjectTag = local.UserProjectTag init_cli = data.cloudinit_config.init_cli.rendered depends_on = [ + aws_placement_group.PlacementGroup, module.Vpc ] } +resource "aws_placement_group" "PlacementGroup" { + name = local.PlacementGroupName + strategy = local.PlacementGroupStrategy +} + resource "random_id" "RandomId" { byte_length = 4 -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf index f10aa20..20532cb 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf @@ -1,42 +1,99 @@ -output "AgentAmi" { +output "Agent1" { value = { - "image_id" : module.Agent1.Ami.image_id - "name" : module.Agent1.Ami.name - "owner_id" : module.Agent1.Ami.owner_id + ami = { + image_id = module.Agent1.Ami.image_id + name = module.Agent1.Ami.name + owner_id = module.Agent1.Ami.owner_id + } + availability_zone = module.Agent1.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.Agent1.Eth0ElasticIp.public_dns + public_ip = module.Agent1.Eth0ElasticIp.public_ip + } + } + id = module.Agent1.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.Agent.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.Agent.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.Agent.default_cores + default_network_card_index = data.aws_ec2_instance_type.Agent.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.Agent.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.Agent.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.Agent.ena_srd_supported + ena_support = data.aws_ec2_instance_type.Agent.ena_support + hypervisor = data.aws_ec2_instance_type.Agent.hypervisor + ipv6_supported = data.aws_ec2_instance_type.Agent.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.Agent.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.Agent.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.Agent.memory_size + name = module.Agent1.Instance.instance_type + network_performance = data.aws_ec2_instance_type.Agent.network_performance + supported_architectures = data.aws_ec2_instance_type.Agent.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.Agent.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.Agent.supported_placement_strategies + } + private_dns = module.Agent1.Instance.private_dns + private_ip = module.Agent1.Instance.private_ip } } -output "Agent1Eth0ElasticIp" { +output "App" { value = { - "public_dns" : module.Agent1.Eth0ElasticIp.public_dns - "public_ip" : module.Agent1.Eth0ElasticIp.public_ip - } -} - -output "AppAmi" { - value = { - "image_id" : module.App.Ami.image_id - "name" : module.App.Ami.name - "owner_id" : module.App.Ami.owner_id - } -} - -output "AppEth0ElasticIp" { - value = { - "public_dns" : module.App.Eth0ElasticIp.public_dns - "public_ip" : module.App.Eth0ElasticIp.public_ip + ami = { + image_id = module.App.Ami.image_id + name = module.App.Ami.name + owner_id = module.App.Ami.owner_id + } + availability_zone = module.App.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.App.Eth0ElasticIp.public_dns + public_ip = module.App.Eth0ElasticIp.public_ip + } + } + id = module.App.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.App.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.App.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.App.default_cores + default_network_card_index = data.aws_ec2_instance_type.App.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.App.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.App.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.App.ena_srd_supported + ena_support = data.aws_ec2_instance_type.App.ena_support + hypervisor = data.aws_ec2_instance_type.App.hypervisor + ipv6_supported = data.aws_ec2_instance_type.App.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.App.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.App.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.App.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.App.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.App.memory_size + name = module.App.Instance.instance_type + network_performance = data.aws_ec2_instance_type.App.network_performance + supported_architectures = data.aws_ec2_instance_type.App.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.App.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.App.supported_placement_strategies + } + private_dns = module.App.Instance.private_dns + private_ip = module.App.Instance.private_ip } } output "AvailabilityZones" { value = { - "available.names" : data.aws_availability_zones.available.names + available = { + names = data.aws_availability_zones.available.names + } + region = data.aws_availability_zones.available.region } } output "SshKey" { sensitive = true value = { - "private_key_pem" : tls_private_key.SshKey.private_key_pem + private_key_pem = tls_private_key.SshKey.private_key_pem } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars index 57bbcbe..874e81c 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars @@ -1,4 +1,4 @@ -# AgentInstanceType = "c5n.xlarge" +# AgentInstanceType = "c6in.xlarge" # ApiMaxRetries = 1 # AppInstanceType = "c5.xlarge" # InboundIPv4CidrBlocks = [ "0.0.0.0/0" ] @@ -8,4 +8,4 @@ # Region = "us-east-1" # UserEmailTag = "terraform@example.com" # UserLoginTag = "terraform" -# UserProjectTag = "cloud-ist" \ No newline at end of file +# UserProjectTag = "cloud-ist" diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf index 17d1953..1975b57 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf @@ -1,41 +1,14 @@ variable "AgentInstanceType" { - default = "c5n.xlarge" + default = "c6in.xlarge" description = "Instance type of Agent VM" type = string validation { - condition = contains([ "t3.xlarge", "t3.2xlarge", - "t3a.xlarge", "t3a.2xlarge", - "m6i.xlarge", "m6i.2xlarge", "m6i.4xlarge", "m6i.8xlarge", "m6i.12xlarge", "m6i.16xlarge", "m6i.24xlarge", "m6i.32xlarge", - "m6a.xlarge", "m6a.2xlarge", "m6a.4xlarge", "m6a.8xlarge", "m6a.12xlarge", "m6a.16xlarge", "m6a.24xlarge", "m6a.32xlarge", "m6a.48xlarge", - "m6in.xlarge", "m6in.2xlarge", "m6in.4xlarge", "m6in.8xlarge", "m6in.12xlarge", "m6in.16xlarge", "m6in.24xlarge", "m6in.32xlarge", - "m5.xlarge", "m5.2xlarge", "m5.4xlarge", "m5.8xlarge", "m5.12xlarge", "m5.16xlarge", "m5.24xlarge", - "m5a.xlarge", "m5a.2xlarge", "m5a.4xlarge", "m5a.8xlarge", "m5a.12xlarge", "m5a.16xlarge", "m5a.24xlarge", - "m5n.xlarge", "m5n.2xlarge", "m5n.4xlarge", "m5n.8xlarge", "m5n.12xlarge", "m5n.16xlarge", "m5n.24xlarge", - "c6i.xlarge", "c6i.2xlarge", "c6i.4xlarge", "c6i.8xlarge", "c6i.12xlarge", "c6i.16xlarge", "c6i.24xlarge", "c6i.32xlarge", - "c6a.xlarge", "c6a.2xlarge", "c6a.4xlarge", "c6a.8xlarge", "c6a.12xlarge", "c6a.16xlarge", "c6a.24xlarge", "c6a.32xlarge", "c6a.48xlarge", - "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge", - "c5.xlarge", "c5.2xlarge", "c5.4xlarge", "c5.9xlarge", "c5.12xlarge", "c5.18xlarge", "c5.24xlarge", - "c5a.xlarge", "c5a.2xlarge", "c5a.4xlarge", "c5a.8xlarge", "c5a.12xlarge", "c5a.16xlarge", "c5a.24xlarge", - "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", - "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge" - ], var.AgentInstanceType) + condition = contains([ "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", + "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge" ], var.AgentInstanceType) error_message = < /dev/null), amzn) +ifeq ($(shell command -v terraform 2> /dev/null),) + sudo yum install -y yum-utils + sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo + sudo yum -y install terraform +endif +endif + +version: + time terraform version + +init: + time terraform init + +validate: + time terraform validate + +update: + time terraform get -update + +plan: + time terraform plan + +apply: + time terraform apply -auto-approve + +destroy: + time terraform destroy -auto-approve + +output: + time terraform output + +ssh: + time terraform output SshKey | tail -n +3 | head -n-3 | sed "s/^[ \t]*//" > .sshkey.pem + +state: + time terraform state list + +connect: connect-app + +connect-app: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json App | jq -r .eth0.eip.public_ip) + +connect-agent1: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json Agent1 | jq -r .eth0.eip.public_ip) diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/README.md b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/README.md index fa35251..c5c7a5f 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/README.md +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/README.md @@ -1,4 +1,4 @@ -# BPS-on-AWS-1-App-1-Agent-Add-On +# BPS-on-AWS-1-App-1-Virtual-Blade-Add-On ## Description This deployment creates resources that will be attached to an existing network topology. @@ -30,4 +30,4 @@ terraform validate terraform plan terraform state list terraform output -``` \ No newline at end of file +``` diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/data.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/data.tf index 410fbca..c0b870e 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/data.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/data.tf @@ -1,5 +1,13 @@ data "aws_caller_identity" "current" {} +data "aws_ec2_instance_type" "Agent" { + instance_type = local.AgentInstanceType +} + +data "aws_ec2_instance_type" "App" { + instance_type = local.AppInstanceType +} + data "aws_region" "current" {} data "aws_availability_zones" "available" { @@ -49,4 +57,4 @@ data "cloudinit_config" "init_cli" { UserName: local.AppUserName }) } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/locals.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/locals.tf index bac8d49..8f173b3 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/locals.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/locals.tf @@ -1,6 +1,7 @@ locals { AgentInstanceType = var.AgentInstanceType Agent1Eth2PrivateIpAddresses = [ "10.0.2.22", "10.0.2.23", "10.0.2.24", "10.0.2.25", "10.0.2.26", "10.0.2.27", "10.0.2.28", "10.0.2.29", "10.0.2.30", "10.0.2.31" ] + Agent1InstanceId = "agent1" ApiMaxRetries = var.ApiMaxRetries AppInstanceType = var.AppInstanceType AppTag = "bps" @@ -13,16 +14,18 @@ locals { File2Name = "authorized_keys" File3Content = tls_private_key.SshKey.public_key_openssh File3Name = "id_rsa.pub" + PlacementGroupName = "${local.Preamble}-placement-group-${local.Region}" + PlacementGroupStrategy = "cluster" Preamble = "${local.UserLoginTag}-${local.UserProjectTag}-${local.AppTag}" PrivateSecurityGroupName = var.PrivateSecurityGroupName PrivateSubnetName = var.PrivateSubnetName PublicSecurityGroupName = var.PublicSecurityGroupName PublicSubnetName = var.PublicSubnetName - Region = data.aws_region.current.name + Region = data.aws_region.current.id SshKeyAlgorithm = "RSA" SshKeyName = "${local.Preamble}-ssh-key" SshKeyRsaBits = "4096" UserEmailTag = var.UserEmailTag == null ? data.aws_caller_identity.current.user_id : var.UserEmailTag UserLoginTag = var.UserLoginTag == null ? "terraform" : var.UserLoginTag UserProjectTag = var.UserProjectTag == null ? random_id.RandomId.id : var.UserProjectTag -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/main.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/main.tf index 77ca7b9..3ace56a 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/main.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/main.tf @@ -1,5 +1,5 @@ module "App" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-app.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-app.git?ref=26.0.0" Eth0SecurityGroupId = data.aws_security_group.PublicSecurityGroup.id Eth0SubnetId = data.aws_subnet.PublicSubnet.id InstanceType = local.AppInstanceType @@ -10,7 +10,7 @@ module "App" { } module "Agent1" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-agent.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-agent.git?ref=26.0.0" Eth0SecurityGroupId = data.aws_security_group.PublicSecurityGroup.id Eth0SubnetId = data.aws_subnet.PublicSubnet.id Eth1SecurityGroupId = data.aws_security_group.PrivateSecurityGroup.id @@ -18,13 +18,23 @@ module "Agent1" { Eth2PrivateIpAddresses = local.Agent1Eth2PrivateIpAddresses Eth2SecurityGroupId = data.aws_security_group.PrivateSecurityGroup.id Eth2SubnetId = data.aws_subnet.PrivateSubnet.id + InstanceId = local.Agent1InstanceId InstanceType = local.AgentInstanceType + PlacementGroupId = aws_placement_group.PlacementGroup.id UserEmailTag = local.UserEmailTag UserLoginTag = local.UserLoginTag UserProjectTag = local.UserProjectTag init_cli = data.cloudinit_config.init_cli.rendered + depends_on = [ + aws_placement_group.PlacementGroup + ] +} + +resource "aws_placement_group" "PlacementGroup" { + name = local.PlacementGroupName + strategy = local.PlacementGroupStrategy } resource "random_id" "RandomId" { byte_length = 4 -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/output.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/output.tf index f10aa20..20532cb 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/output.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/output.tf @@ -1,42 +1,99 @@ -output "AgentAmi" { +output "Agent1" { value = { - "image_id" : module.Agent1.Ami.image_id - "name" : module.Agent1.Ami.name - "owner_id" : module.Agent1.Ami.owner_id + ami = { + image_id = module.Agent1.Ami.image_id + name = module.Agent1.Ami.name + owner_id = module.Agent1.Ami.owner_id + } + availability_zone = module.Agent1.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.Agent1.Eth0ElasticIp.public_dns + public_ip = module.Agent1.Eth0ElasticIp.public_ip + } + } + id = module.Agent1.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.Agent.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.Agent.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.Agent.default_cores + default_network_card_index = data.aws_ec2_instance_type.Agent.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.Agent.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.Agent.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.Agent.ena_srd_supported + ena_support = data.aws_ec2_instance_type.Agent.ena_support + hypervisor = data.aws_ec2_instance_type.Agent.hypervisor + ipv6_supported = data.aws_ec2_instance_type.Agent.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.Agent.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.Agent.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.Agent.memory_size + name = module.Agent1.Instance.instance_type + network_performance = data.aws_ec2_instance_type.Agent.network_performance + supported_architectures = data.aws_ec2_instance_type.Agent.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.Agent.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.Agent.supported_placement_strategies + } + private_dns = module.Agent1.Instance.private_dns + private_ip = module.Agent1.Instance.private_ip } } -output "Agent1Eth0ElasticIp" { +output "App" { value = { - "public_dns" : module.Agent1.Eth0ElasticIp.public_dns - "public_ip" : module.Agent1.Eth0ElasticIp.public_ip - } -} - -output "AppAmi" { - value = { - "image_id" : module.App.Ami.image_id - "name" : module.App.Ami.name - "owner_id" : module.App.Ami.owner_id - } -} - -output "AppEth0ElasticIp" { - value = { - "public_dns" : module.App.Eth0ElasticIp.public_dns - "public_ip" : module.App.Eth0ElasticIp.public_ip + ami = { + image_id = module.App.Ami.image_id + name = module.App.Ami.name + owner_id = module.App.Ami.owner_id + } + availability_zone = module.App.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.App.Eth0ElasticIp.public_dns + public_ip = module.App.Eth0ElasticIp.public_ip + } + } + id = module.App.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.App.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.App.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.App.default_cores + default_network_card_index = data.aws_ec2_instance_type.App.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.App.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.App.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.App.ena_srd_supported + ena_support = data.aws_ec2_instance_type.App.ena_support + hypervisor = data.aws_ec2_instance_type.App.hypervisor + ipv6_supported = data.aws_ec2_instance_type.App.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.App.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.App.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.App.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.App.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.App.memory_size + name = module.App.Instance.instance_type + network_performance = data.aws_ec2_instance_type.App.network_performance + supported_architectures = data.aws_ec2_instance_type.App.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.App.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.App.supported_placement_strategies + } + private_dns = module.App.Instance.private_dns + private_ip = module.App.Instance.private_ip } } output "AvailabilityZones" { value = { - "available.names" : data.aws_availability_zones.available.names + available = { + names = data.aws_availability_zones.available.names + } + region = data.aws_availability_zones.available.region } } output "SshKey" { sensitive = true value = { - "private_key_pem" : tls_private_key.SshKey.private_key_pem + private_key_pem = tls_private_key.SshKey.private_key_pem } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars index 559eabf..8a137da 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars @@ -1,7 +1,7 @@ -# AgentInstanceType = "c5n.xlarge" +# AgentInstanceType = "c6in.xlarge" # ApiMaxRetries = 1 # AppInstanceType = "c5.xlarge" # Region = "us-east-1" # UserEmailTag = "terraform@example.com" # UserLoginTag = "terraform" -# UserProjectTag = "cloud-ist" \ No newline at end of file +# UserProjectTag = "cloud-ist" diff --git a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/variables.tf b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/variables.tf index 94f65b4..ed4df53 100644 --- a/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/variables.tf +++ b/aws/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-AWS-1-App-1-Virtual-Blade-Add-On/variables.tf @@ -1,41 +1,14 @@ variable "AgentInstanceType" { - default = "c5n.xlarge" + default = "c6in.xlarge" description = "Instance type of Agent VM" type = string validation { - condition = contains([ "t3.xlarge", "t3.2xlarge", - "t3a.xlarge", "t3a.2xlarge", - "m6i.xlarge", "m6i.2xlarge", "m6i.4xlarge", "m6i.8xlarge", "m6i.12xlarge", "m6i.16xlarge", "m6i.24xlarge", "m6i.32xlarge", - "m6a.xlarge", "m6a.2xlarge", "m6a.4xlarge", "m6a.8xlarge", "m6a.12xlarge", "m6a.16xlarge", "m6a.24xlarge", "m6a.32xlarge", "m6a.48xlarge", - "m6in.xlarge", "m6in.2xlarge", "m6in.4xlarge", "m6in.8xlarge", "m6in.12xlarge", "m6in.16xlarge", "m6in.24xlarge", "m6in.32xlarge", - "m5.xlarge", "m5.2xlarge", "m5.4xlarge", "m5.8xlarge", "m5.12xlarge", "m5.16xlarge", "m5.24xlarge", - "m5a.xlarge", "m5a.2xlarge", "m5a.4xlarge", "m5a.8xlarge", "m5a.12xlarge", "m5a.16xlarge", "m5a.24xlarge", - "m5n.xlarge", "m5n.2xlarge", "m5n.4xlarge", "m5n.8xlarge", "m5n.12xlarge", "m5n.16xlarge", "m5n.24xlarge", - "c6i.xlarge", "c6i.2xlarge", "c6i.4xlarge", "c6i.8xlarge", "c6i.12xlarge", "c6i.16xlarge", "c6i.24xlarge", "c6i.32xlarge", - "c6a.xlarge", "c6a.2xlarge", "c6a.4xlarge", "c6a.8xlarge", "c6a.12xlarge", "c6a.16xlarge", "c6a.24xlarge", "c6a.32xlarge", "c6a.48xlarge", - "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge", - "c5.xlarge", "c5.2xlarge", "c5.4xlarge", "c5.9xlarge", "c5.12xlarge", "c5.18xlarge", "c5.24xlarge", - "c5a.xlarge", "c5a.2xlarge", "c5a.4xlarge", "c5a.8xlarge", "c5a.12xlarge", "c5a.16xlarge", "c5a.24xlarge", - "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", - "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge" - ], var.AgentInstanceType) + condition = contains([ "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", + "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge" ], var.AgentInstanceType) error_message = < /dev/null), amzn) +ifeq ($(shell command -v terraform 2> /dev/null),) + sudo yum install -y yum-utils + sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo + sudo yum -y install terraform +endif +endif + +version: + time terraform version + +init: + time terraform init + +validate: + time terraform validate + +update: + time terraform get -update + +plan: + time terraform plan + +apply: + time terraform apply -auto-approve + +destroy: + time terraform destroy -auto-approve + +output: + time terraform output + +ssh: + time terraform output SshKey | tail -n +3 | head -n-3 | sed "s/^[ \t]*//" > .sshkey.pem + +state: + time terraform state list + +connect: connect-app + +connect-app: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json App | jq -r .eth0.eip.public_ip) + +connect-agent1: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json Agent1 | jq -r .eth0.eip.public_ip) diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md index 7f1d596..ddfc229 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/README.md @@ -1,4 +1,4 @@ -# BPS-on-AWS-1-Agent-1-VPC-1-Public-Subnet-1-Private-Subnet +# BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet ## Description This deployment creates a topology with a single virtual private cloud having a single public facing subnet and a single private subnet. @@ -23,4 +23,4 @@ terraform validate terraform plan terraform state list terraform output -``` \ No newline at end of file +``` diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf index fad38f7..8558743 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/data.tf @@ -1,5 +1,9 @@ data "aws_caller_identity" "current" {} +data "aws_ec2_instance_type" "Agent" { + instance_type = local.AgentInstanceType +} + data "aws_region" "current" {} data "aws_availability_zones" "available" { @@ -21,4 +25,8 @@ data "cloudinit_config" "init_cli" { UserName: local.AppUserName }) } -} \ No newline at end of file +} + +data "http" "ip" { + url = "https://ifconfig.me/ip" +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf index 5c86fae..fcff602 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/locals.tf @@ -1,26 +1,29 @@ locals { AgentInstanceType = var.AgentInstanceType Agent1Eth2PrivateIpAddresses = [ "10.0.2.22", "10.0.2.23", "10.0.2.24", "10.0.2.25", "10.0.2.26", "10.0.2.27", "10.0.2.28", "10.0.2.29", "10.0.2.30", "10.0.2.31" ] + Agent1InstanceId = "agent1" ApiMaxRetries = var.ApiMaxRetries AppTag = "bps" AppUserName = "ixia" AwsAccessCredentialsAccessKey = var.AwsAccessCredentialsAccessKey AwsAccessCredentialsSecretKey = var.AwsAccessCredentialsSecretKey - InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks + InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks == null ? [ "${data.http.ip.response_body}/32" ] : var.InboundIPv4CidrBlocks File1Content = tls_private_key.SshKey.private_key_pem File1Name = "id_rsa" File2Content = tls_private_key.SshKey.public_key_openssh File2Name = "authorized_keys" File3Content = tls_private_key.SshKey.public_key_openssh File3Name = "id_rsa.pub" + PlacementGroupName = "${local.Preamble}-placement-group-${local.Region}" + PlacementGroupStrategy = "cluster" Preamble = "${local.UserLoginTag}-${local.UserProjectTag}-${local.AppTag}" PrivateSubnetAvailabilityZone = var.PrivateSubnetAvailabilityZone PublicSubnetAvailabilityZone = var.PublicSubnetAvailabilityZone - Region = data.aws_region.current.name + Region = data.aws_region.current.id SshKeyAlgorithm = "RSA" SshKeyName = "${local.Preamble}-ssh-key" SshKeyRsaBits = "4096" UserEmailTag = var.UserEmailTag == null ? data.aws_caller_identity.current.user_id : var.UserEmailTag UserLoginTag = var.UserLoginTag == null ? "terraform" : var.UserLoginTag UserProjectTag = var.UserProjectTag == null ? random_id.RandomId.id : var.UserProjectTag -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf index b43fca6..28c7569 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/main.tf @@ -1,5 +1,5 @@ module "Agent1" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-agent.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-agent.git?ref=26.0.0" Eth0SecurityGroupId = module.Vpc.PublicSecurityGroup.id Eth0SubnetId = module.Vpc.PublicSubnet.id Eth1SecurityGroupId = module.Vpc.PrivateSecurityGroup.id @@ -7,16 +7,24 @@ module "Agent1" { Eth2PrivateIpAddresses = local.Agent1Eth2PrivateIpAddresses Eth2SecurityGroupId = module.Vpc.PrivateSecurityGroup.id Eth2SubnetId = module.Vpc.PrivateSubnet.id + InstanceId = local.Agent1InstanceId InstanceType = local.AgentInstanceType + PlacementGroupId = aws_placement_group.PlacementGroup.id UserEmailTag = local.UserEmailTag UserLoginTag = local.UserLoginTag UserProjectTag = local.UserProjectTag init_cli = data.cloudinit_config.init_cli.rendered depends_on = [ + aws_placement_group.PlacementGroup, module.Vpc ] } +resource "aws_placement_group" "PlacementGroup" { + name = local.PlacementGroupName + strategy = local.PlacementGroupStrategy +} + resource "random_id" "RandomId" { byte_length = 4 -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf index 48aa86b..6f8a8c0 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/output.tf @@ -1,27 +1,57 @@ -output "AgentAmi" { +output "Agent1" { value = { - "image_id" : module.Agent1.Ami.image_id - "name" : module.Agent1.Ami.name - "owner_id" : module.Agent1.Ami.owner_id - } -} - -output "Agent1Eth0ElasticIp" { - value = { - "public_dns" : module.Agent1.Eth0ElasticIp.public_dns - "public_ip" : module.Agent1.Eth0ElasticIp.public_ip + ami = { + image_id = module.Agent1.Ami.image_id + name = module.Agent1.Ami.name + owner_id = module.Agent1.Ami.owner_id + } + availability_zone = module.Agent1.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.Agent1.Eth0ElasticIp.public_dns + public_ip = module.Agent1.Eth0ElasticIp.public_ip + } + } + id = module.Agent1.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.Agent.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.Agent.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.Agent.default_cores + default_network_card_index = data.aws_ec2_instance_type.Agent.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.Agent.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.Agent.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.Agent.ena_srd_supported + ena_support = data.aws_ec2_instance_type.Agent.ena_support + hypervisor = data.aws_ec2_instance_type.Agent.hypervisor + ipv6_supported = data.aws_ec2_instance_type.Agent.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.Agent.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.Agent.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.Agent.memory_size + name = module.Agent1.Instance.instance_type + network_performance = data.aws_ec2_instance_type.Agent.network_performance + supported_architectures = data.aws_ec2_instance_type.Agent.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.Agent.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.Agent.supported_placement_strategies + } + private_dns = module.Agent1.Instance.private_dns + private_ip = module.Agent1.Instance.private_ip } } output "AvailabilityZones" { value = { - "available.names" : data.aws_availability_zones.available.names + available = { + names = data.aws_availability_zones.available.names + } + region = data.aws_availability_zones.available.region } } output "SshKey" { sensitive = true value = { - "private_key_pem" : tls_private_key.SshKey.private_key_pem + private_key_pem = tls_private_key.SshKey.private_key_pem } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars index 8ee2806..8381861 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/terraform.optional.auto.tfvars @@ -1,4 +1,4 @@ -# AgentInstanceType = "c5n.xlarge" +# AgentInstanceType = "c6in.xlarge" # ApiMaxRetries = 1 # InboundIPv4CidrBlocks = [ "0.0.0.0/0" ] # PrivateSubnetAvailabilityZone = "us-east-1a" @@ -6,4 +6,4 @@ # Region = "us-east-1" # UserEmailTag = "terraform@example.com" # UserLoginTag = "terraform" -# UserProjectTag = "cloud-ist" \ No newline at end of file +# UserProjectTag = "cloud-ist" diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf index edf65f8..01169ee 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-1-Private-Subnet/variables.tf @@ -1,41 +1,14 @@ variable "AgentInstanceType" { - default = "c5n.xlarge" + default = "c6in.xlarge" description = "Instance type of Agent VM" type = string validation { - condition = contains([ "t3.xlarge", "t3.2xlarge", - "t3a.xlarge", "t3a.2xlarge", - "m6i.xlarge", "m6i.2xlarge", "m6i.4xlarge", "m6i.8xlarge", "m6i.12xlarge", "m6i.16xlarge", "m6i.24xlarge", "m6i.32xlarge", - "m6a.xlarge", "m6a.2xlarge", "m6a.4xlarge", "m6a.8xlarge", "m6a.12xlarge", "m6a.16xlarge", "m6a.24xlarge", "m6a.32xlarge", "m6a.48xlarge", - "m6in.xlarge", "m6in.2xlarge", "m6in.4xlarge", "m6in.8xlarge", "m6in.12xlarge", "m6in.16xlarge", "m6in.24xlarge", "m6in.32xlarge", - "m5.xlarge", "m5.2xlarge", "m5.4xlarge", "m5.8xlarge", "m5.12xlarge", "m5.16xlarge", "m5.24xlarge", - "m5a.xlarge", "m5a.2xlarge", "m5a.4xlarge", "m5a.8xlarge", "m5a.12xlarge", "m5a.16xlarge", "m5a.24xlarge", - "m5n.xlarge", "m5n.2xlarge", "m5n.4xlarge", "m5n.8xlarge", "m5n.12xlarge", "m5n.16xlarge", "m5n.24xlarge", - "c6i.xlarge", "c6i.2xlarge", "c6i.4xlarge", "c6i.8xlarge", "c6i.12xlarge", "c6i.16xlarge", "c6i.24xlarge", "c6i.32xlarge", - "c6a.xlarge", "c6a.2xlarge", "c6a.4xlarge", "c6a.8xlarge", "c6a.12xlarge", "c6a.16xlarge", "c6a.24xlarge", "c6a.32xlarge", "c6a.48xlarge", - "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge", - "c5.xlarge", "c5.2xlarge", "c5.4xlarge", "c5.9xlarge", "c5.12xlarge", "c5.18xlarge", "c5.24xlarge", - "c5a.xlarge", "c5a.2xlarge", "c5a.4xlarge", "c5a.8xlarge", "c5a.12xlarge", "c5a.16xlarge", "c5a.24xlarge", - "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", - "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge" - ], var.AgentInstanceType) + condition = contains([ "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", + "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge" ], var.AgentInstanceType) error_message = < /dev/null), amzn) +ifeq ($(shell command -v terraform 2> /dev/null),) + sudo yum install -y yum-utils + sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo + sudo yum -y install terraform +endif +endif + +version: + time terraform version + +init: + time terraform init + +validate: + time terraform validate + +update: + time terraform get -update + +plan: + time terraform plan + +apply: + time terraform apply -auto-approve + +destroy: + time terraform destroy -auto-approve + +output: + time terraform output + +ssh: + time terraform output SshKey | tail -n +3 | head -n-3 | sed "s/^[ \t]*//" > .sshkey.pem + +state: + time terraform state list + +connect: connect-app + +connect-app: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json App | jq -r .eth0.eip.public_ip) + +connect-agent1: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json Agent1 | jq -r .eth0.eip.public_ip) diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md index f900f80..da0cc54 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/README.md @@ -1,4 +1,4 @@ -# BPS-on-AWS-1-Agent-1-VPC-1-Public-Subnet-2-Private-Subnets +# BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets ## Description This deployment creates a topology with a single virtual private cloud having a single public facing subnet and two private subnets. @@ -23,4 +23,4 @@ terraform validate terraform plan terraform state list terraform output -``` \ No newline at end of file +``` diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf index fad38f7..8558743 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/data.tf @@ -1,5 +1,9 @@ data "aws_caller_identity" "current" {} +data "aws_ec2_instance_type" "Agent" { + instance_type = local.AgentInstanceType +} + data "aws_region" "current" {} data "aws_availability_zones" "available" { @@ -21,4 +25,8 @@ data "cloudinit_config" "init_cli" { UserName: local.AppUserName }) } -} \ No newline at end of file +} + +data "http" "ip" { + url = "https://ifconfig.me/ip" +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf index d24aed2..f99de8a 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/locals.tf @@ -1,26 +1,29 @@ locals { AgentInstanceType = var.AgentInstanceType + Agent1InstanceId = "agent1" ApiMaxRetries = var.ApiMaxRetries AppTag = "bps" AppUserName = "ixia" AwsAccessCredentialsAccessKey = var.AwsAccessCredentialsAccessKey AwsAccessCredentialsSecretKey = var.AwsAccessCredentialsSecretKey - InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks + InboundIPv4CidrBlocks = var.InboundIPv4CidrBlocks == null ? [ "${data.http.ip.response_body}/32" ] : var.InboundIPv4CidrBlocks File1Content = tls_private_key.SshKey.private_key_pem File1Name = "id_rsa" File2Content = tls_private_key.SshKey.public_key_openssh File2Name = "authorized_keys" File3Content = tls_private_key.SshKey.public_key_openssh File3Name = "id_rsa.pub" + PlacementGroupName = "${local.Preamble}-placement-group-${local.Region}" + PlacementGroupStrategy = "cluster" Preamble = "${local.UserLoginTag}-${local.UserProjectTag}-${local.AppTag}" Private1SubnetAvailabilityZone = var.Private1SubnetAvailabilityZone Private2SubnetAvailabilityZone = var.Private2SubnetAvailabilityZone PublicSubnetAvailabilityZone = var.PublicSubnetAvailabilityZone - Region = data.aws_region.current.name + Region = data.aws_region.current.id SshKeyAlgorithm = "RSA" SshKeyName = "${local.Preamble}-ssh-key" SshKeyRsaBits = "4096" UserEmailTag = var.UserEmailTag == null ? data.aws_caller_identity.current.user_id : var.UserEmailTag UserLoginTag = var.UserLoginTag == null ? "terraform" : var.UserLoginTag UserProjectTag = var.UserProjectTag == null ? random_id.RandomId.id : var.UserProjectTag -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf index 385936c..97dd8d6 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/main.tf @@ -1,21 +1,29 @@ module "Agent1" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-agent.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-agent.git?ref=26.0.0" Eth0SecurityGroupId = module.Vpc.PublicSecurityGroup.id Eth0SubnetId = module.Vpc.PublicSubnet.id Eth1SecurityGroupId = module.Vpc.PrivateSecurityGroup.id Eth1SubnetId = module.Vpc.Private1Subnet.id Eth2SecurityGroupId = module.Vpc.PrivateSecurityGroup.id Eth2SubnetId = module.Vpc.Private2Subnet.id + InstanceId = local.Agent1InstanceId InstanceType = local.AgentInstanceType + PlacementGroupId = aws_placement_group.PlacementGroup.id UserEmailTag = local.UserEmailTag UserLoginTag = local.UserLoginTag UserProjectTag = local.UserProjectTag init_cli = data.cloudinit_config.init_cli.rendered depends_on = [ + aws_placement_group.PlacementGroup, module.Vpc ] } +resource "aws_placement_group" "PlacementGroup" { + name = local.PlacementGroupName + strategy = local.PlacementGroupStrategy +} + resource "random_id" "RandomId" { byte_length = 4 -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf index 48aa86b..6f8a8c0 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/output.tf @@ -1,27 +1,57 @@ -output "AgentAmi" { +output "Agent1" { value = { - "image_id" : module.Agent1.Ami.image_id - "name" : module.Agent1.Ami.name - "owner_id" : module.Agent1.Ami.owner_id - } -} - -output "Agent1Eth0ElasticIp" { - value = { - "public_dns" : module.Agent1.Eth0ElasticIp.public_dns - "public_ip" : module.Agent1.Eth0ElasticIp.public_ip + ami = { + image_id = module.Agent1.Ami.image_id + name = module.Agent1.Ami.name + owner_id = module.Agent1.Ami.owner_id + } + availability_zone = module.Agent1.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.Agent1.Eth0ElasticIp.public_dns + public_ip = module.Agent1.Eth0ElasticIp.public_ip + } + } + id = module.Agent1.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.Agent.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.Agent.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.Agent.default_cores + default_network_card_index = data.aws_ec2_instance_type.Agent.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.Agent.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.Agent.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.Agent.ena_srd_supported + ena_support = data.aws_ec2_instance_type.Agent.ena_support + hypervisor = data.aws_ec2_instance_type.Agent.hypervisor + ipv6_supported = data.aws_ec2_instance_type.Agent.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.Agent.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.Agent.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.Agent.memory_size + name = module.Agent1.Instance.instance_type + network_performance = data.aws_ec2_instance_type.Agent.network_performance + supported_architectures = data.aws_ec2_instance_type.Agent.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.Agent.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.Agent.supported_placement_strategies + } + private_dns = module.Agent1.Instance.private_dns + private_ip = module.Agent1.Instance.private_ip } } output "AvailabilityZones" { value = { - "available.names" : data.aws_availability_zones.available.names + available = { + names = data.aws_availability_zones.available.names + } + region = data.aws_availability_zones.available.region } } output "SshKey" { sensitive = true value = { - "private_key_pem" : tls_private_key.SshKey.private_key_pem + private_key_pem = tls_private_key.SshKey.private_key_pem } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars index 35209ab..f519d0f 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/terraform.optional.auto.tfvars @@ -1,4 +1,4 @@ -# AgentInstanceType = "c5n.xlarge" +# AgentInstanceType = "c6in.xlarge" # ApiMaxRetries = 1 # InboundIPv4CidrBlocks = [ "0.0.0.0/0" ] # Private1SubnetAvailabilityZone = "us-east-1a" @@ -7,4 +7,4 @@ # Region = "us-east-1" # UserEmailTag = "terraform@example.com" # UserLoginTag = "terraform" -# UserProjectTag = "cloud-ist" \ No newline at end of file +# UserProjectTag = "cloud-ist" diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf index c4d3d25..1a59304 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-1-VPC-1-Public-Subnet-2-Private-Subnets/variables.tf @@ -1,41 +1,14 @@ variable "AgentInstanceType" { - default = "c5n.xlarge" + default = "c6in.xlarge" description = "Instance type of Agent VM" type = string validation { - condition = contains([ "t3.xlarge", "t3.2xlarge", - "t3a.xlarge", "t3a.2xlarge", - "m6i.xlarge", "m6i.2xlarge", "m6i.4xlarge", "m6i.8xlarge", "m6i.12xlarge", "m6i.16xlarge", "m6i.24xlarge", "m6i.32xlarge", - "m6a.xlarge", "m6a.2xlarge", "m6a.4xlarge", "m6a.8xlarge", "m6a.12xlarge", "m6a.16xlarge", "m6a.24xlarge", "m6a.32xlarge", "m6a.48xlarge", - "m6in.xlarge", "m6in.2xlarge", "m6in.4xlarge", "m6in.8xlarge", "m6in.12xlarge", "m6in.16xlarge", "m6in.24xlarge", "m6in.32xlarge", - "m5.xlarge", "m5.2xlarge", "m5.4xlarge", "m5.8xlarge", "m5.12xlarge", "m5.16xlarge", "m5.24xlarge", - "m5a.xlarge", "m5a.2xlarge", "m5a.4xlarge", "m5a.8xlarge", "m5a.12xlarge", "m5a.16xlarge", "m5a.24xlarge", - "m5n.xlarge", "m5n.2xlarge", "m5n.4xlarge", "m5n.8xlarge", "m5n.12xlarge", "m5n.16xlarge", "m5n.24xlarge", - "c6i.xlarge", "c6i.2xlarge", "c6i.4xlarge", "c6i.8xlarge", "c6i.12xlarge", "c6i.16xlarge", "c6i.24xlarge", "c6i.32xlarge", - "c6a.xlarge", "c6a.2xlarge", "c6a.4xlarge", "c6a.8xlarge", "c6a.12xlarge", "c6a.16xlarge", "c6a.24xlarge", "c6a.32xlarge", "c6a.48xlarge", - "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge", - "c5.xlarge", "c5.2xlarge", "c5.4xlarge", "c5.9xlarge", "c5.12xlarge", "c5.18xlarge", "c5.24xlarge", - "c5a.xlarge", "c5a.2xlarge", "c5a.4xlarge", "c5a.8xlarge", "c5a.12xlarge", "c5a.16xlarge", "c5a.24xlarge", - "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", - "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge" - ], var.AgentInstanceType) + condition = contains([ "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", + "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge" ], var.AgentInstanceType) error_message = < /dev/null), amzn) +ifeq ($(shell command -v terraform 2> /dev/null),) + sudo yum install -y yum-utils + sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo + sudo yum -y install terraform +endif +endif + +version: + time terraform version + +init: + time terraform init + +validate: + time terraform validate + +update: + time terraform get -update + +plan: + time terraform plan + +apply: + time terraform apply -auto-approve + +destroy: + time terraform destroy -auto-approve + +output: + time terraform output + +ssh: + time terraform output SshKey | tail -n +3 | head -n-3 | sed "s/^[ \t]*//" > .sshkey.pem + +state: + time terraform state list + +connect: connect-app + +connect-app: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json App | jq -r .eth0.eip.public_ip) + +connect-agent1: + chmod +x ./CloudShell/connect.sh + ./CloudShell/connect.sh -i $$(terraform output -json Agent1 | jq -r .eth0.eip.public_ip) diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/README.md b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/README.md index 85fadfb..09ee32e 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/README.md +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/README.md @@ -1,4 +1,4 @@ -# BPS-on-AWS-1-Agent-Add-On +# BPS-on-AWS-1-Virtual-Blade-Add-On ## Description This deployment creates resources that will be attached to an existing network topology. @@ -30,4 +30,4 @@ terraform validate terraform plan terraform state list terraform output -``` \ No newline at end of file +``` diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/data.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/data.tf index 410fbca..82db6bd 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/data.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/data.tf @@ -1,5 +1,9 @@ data "aws_caller_identity" "current" {} +data "aws_ec2_instance_type" "Agent" { + instance_type = local.AgentInstanceType +} + data "aws_region" "current" {} data "aws_availability_zones" "available" { @@ -49,4 +53,4 @@ data "cloudinit_config" "init_cli" { UserName: local.AppUserName }) } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/locals.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/locals.tf index a1f14bc..406aa12 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/locals.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/locals.tf @@ -1,6 +1,7 @@ locals { AgentInstanceType = var.AgentInstanceType Agent1Eth2PrivateIpAddresses = [ "10.0.2.22", "10.0.2.23", "10.0.2.24", "10.0.2.25", "10.0.2.26", "10.0.2.27", "10.0.2.28", "10.0.2.29", "10.0.2.30", "10.0.2.31" ] + Agent1InstanceId = "agent1" ApiMaxRetries = var.ApiMaxRetries AppTag = "bps" AppUserName = "ixia" @@ -12,16 +13,18 @@ locals { File2Name = "authorized_keys" File3Content = tls_private_key.SshKey.public_key_openssh File3Name = "id_rsa.pub" + PlacementGroupName = "${local.Preamble}-placement-group-${local.Region}" + PlacementGroupStrategy = "cluster" Preamble = "${local.UserLoginTag}-${local.UserProjectTag}-${local.AppTag}" PrivateSecurityGroupName = var.PrivateSecurityGroupName PrivateSubnetName = var.PrivateSubnetName PublicSecurityGroupName = var.PublicSecurityGroupName PublicSubnetName = var.PublicSubnetName - Region = data.aws_region.current.name + Region = data.aws_region.current.id SshKeyAlgorithm = "RSA" SshKeyName = "${local.Preamble}-ssh-key" SshKeyRsaBits = "4096" UserEmailTag = var.UserEmailTag == null ? data.aws_caller_identity.current.user_id : var.UserEmailTag UserLoginTag = var.UserLoginTag == null ? "terraform" : var.UserLoginTag UserProjectTag = var.UserProjectTag == null ? random_id.RandomId.id : var.UserProjectTag -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/main.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/main.tf index 1974b70..57a5190 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/main.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/main.tf @@ -1,5 +1,5 @@ module "Agent1" { - source = "git::https://github.com/armdupre/terraform-aws-module-bps-agent.git?ref=11.20.0" + source = "git::https://github.com/Keysight/terraform-aws-module-bps-agent.git?ref=26.0.0" Eth0SecurityGroupId = data.aws_security_group.PublicSecurityGroup.id Eth0SubnetId = data.aws_subnet.PublicSubnet.id Eth1SecurityGroupId = data.aws_security_group.PrivateSecurityGroup.id @@ -7,13 +7,23 @@ module "Agent1" { Eth2PrivateIpAddresses = local.Agent1Eth2PrivateIpAddresses Eth2SecurityGroupId = data.aws_security_group.PrivateSecurityGroup.id Eth2SubnetId = data.aws_subnet.PrivateSubnet.id + InstanceId = local.Agent1InstanceId InstanceType = local.AgentInstanceType + PlacementGroupId = aws_placement_group.PlacementGroup.id UserEmailTag = local.UserEmailTag UserLoginTag = local.UserLoginTag UserProjectTag = local.UserProjectTag init_cli = data.cloudinit_config.init_cli.rendered + depends_on = [ + aws_placement_group.PlacementGroup + ] +} + +resource "aws_placement_group" "PlacementGroup" { + name = local.PlacementGroupName + strategy = local.PlacementGroupStrategy } resource "random_id" "RandomId" { byte_length = 4 -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/output.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/output.tf index 48aa86b..6f8a8c0 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/output.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/output.tf @@ -1,27 +1,57 @@ -output "AgentAmi" { +output "Agent1" { value = { - "image_id" : module.Agent1.Ami.image_id - "name" : module.Agent1.Ami.name - "owner_id" : module.Agent1.Ami.owner_id - } -} - -output "Agent1Eth0ElasticIp" { - value = { - "public_dns" : module.Agent1.Eth0ElasticIp.public_dns - "public_ip" : module.Agent1.Eth0ElasticIp.public_ip + ami = { + image_id = module.Agent1.Ami.image_id + name = module.Agent1.Ami.name + owner_id = module.Agent1.Ami.owner_id + } + availability_zone = module.Agent1.Instance.availability_zone + eth0 = { + eip = { + public_dns = module.Agent1.Eth0ElasticIp.public_dns + public_ip = module.Agent1.Eth0ElasticIp.public_ip + } + } + id = module.Agent1.Instance.id + instance_type = { + current_generation = data.aws_ec2_instance_type.Agent.current_generation + dedicated_hosts_supported = data.aws_ec2_instance_type.Agent.dedicated_hosts_supported + default_cores = data.aws_ec2_instance_type.Agent.default_cores + default_network_card_index = data.aws_ec2_instance_type.Agent.default_network_card_index + default_threads_per_core = data.aws_ec2_instance_type.Agent.default_threads_per_core + default_vcpus = data.aws_ec2_instance_type.Agent.default_vcpus + ena_srd_supported = data.aws_ec2_instance_type.Agent.ena_srd_supported + ena_support = data.aws_ec2_instance_type.Agent.ena_support + hypervisor = data.aws_ec2_instance_type.Agent.hypervisor + ipv6_supported = data.aws_ec2_instance_type.Agent.ipv6_supported + maximum_ipv4_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv4_addresses_per_interface + maximum_ipv6_addresses_per_interface = data.aws_ec2_instance_type.Agent.maximum_ipv6_addresses_per_interface + maximum_network_cards = data.aws_ec2_instance_type.Agent.maximum_network_cards + maximum_network_interfaces = data.aws_ec2_instance_type.Agent.maximum_network_interfaces + memory_size = data.aws_ec2_instance_type.Agent.memory_size + name = module.Agent1.Instance.instance_type + network_performance = data.aws_ec2_instance_type.Agent.network_performance + supported_architectures = data.aws_ec2_instance_type.Agent.supported_architectures + supported_cpu_features = data.aws_ec2_instance_type.Agent.supported_cpu_features + supported_placement_strategies = data.aws_ec2_instance_type.Agent.supported_placement_strategies + } + private_dns = module.Agent1.Instance.private_dns + private_ip = module.Agent1.Instance.private_ip } } output "AvailabilityZones" { value = { - "available.names" : data.aws_availability_zones.available.names + available = { + names = data.aws_availability_zones.available.names + } + region = data.aws_availability_zones.available.region } } output "SshKey" { sensitive = true value = { - "private_key_pem" : tls_private_key.SshKey.private_key_pem + private_key_pem = tls_private_key.SshKey.private_key_pem } -} \ No newline at end of file +} diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars index 7fa417d..dab79d2 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/terraform.optional.auto.tfvars @@ -1,6 +1,6 @@ -# AgentInstanceType = "c5n.xlarge" +# AgentInstanceType = "c6in.xlarge" # ApiMaxRetries = 1 # Region = "us-east-1" # UserEmailTag = "terraform@example.com" # UserLoginTag = "terraform" -# UserProjectTag = "cloud-ist" \ No newline at end of file +# UserProjectTag = "cloud-ist" diff --git a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/variables.tf b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/variables.tf index 1b28b7c..af3ffbf 100644 --- a/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/variables.tf +++ b/aws/Deployment/Terraform/BPS-VE-VirtualBladeOnly/BPS-on-AWS-1-Virtual-Blade-Add-On/variables.tf @@ -1,41 +1,14 @@ variable "AgentInstanceType" { - default = "c5n.xlarge" + default = "c6in.xlarge" description = "Instance type of Agent VM" type = string validation { - condition = contains([ "t3.xlarge", "t3.2xlarge", - "t3a.xlarge", "t3a.2xlarge", - "m6i.xlarge", "m6i.2xlarge", "m6i.4xlarge", "m6i.8xlarge", "m6i.12xlarge", "m6i.16xlarge", "m6i.24xlarge", "m6i.32xlarge", - "m6a.xlarge", "m6a.2xlarge", "m6a.4xlarge", "m6a.8xlarge", "m6a.12xlarge", "m6a.16xlarge", "m6a.24xlarge", "m6a.32xlarge", "m6a.48xlarge", - "m6in.xlarge", "m6in.2xlarge", "m6in.4xlarge", "m6in.8xlarge", "m6in.12xlarge", "m6in.16xlarge", "m6in.24xlarge", "m6in.32xlarge", - "m5.xlarge", "m5.2xlarge", "m5.4xlarge", "m5.8xlarge", "m5.12xlarge", "m5.16xlarge", "m5.24xlarge", - "m5a.xlarge", "m5a.2xlarge", "m5a.4xlarge", "m5a.8xlarge", "m5a.12xlarge", "m5a.16xlarge", "m5a.24xlarge", - "m5n.xlarge", "m5n.2xlarge", "m5n.4xlarge", "m5n.8xlarge", "m5n.12xlarge", "m5n.16xlarge", "m5n.24xlarge", - "c6i.xlarge", "c6i.2xlarge", "c6i.4xlarge", "c6i.8xlarge", "c6i.12xlarge", "c6i.16xlarge", "c6i.24xlarge", "c6i.32xlarge", - "c6a.xlarge", "c6a.2xlarge", "c6a.4xlarge", "c6a.8xlarge", "c6a.12xlarge", "c6a.16xlarge", "c6a.24xlarge", "c6a.32xlarge", "c6a.48xlarge", - "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge", - "c5.xlarge", "c5.2xlarge", "c5.4xlarge", "c5.9xlarge", "c5.12xlarge", "c5.18xlarge", "c5.24xlarge", - "c5a.xlarge", "c5a.2xlarge", "c5a.4xlarge", "c5a.8xlarge", "c5a.12xlarge", "c5a.16xlarge", "c5a.24xlarge", - "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", - "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge" - ], var.AgentInstanceType) + condition = contains([ "c5n.xlarge", "c5n.2xlarge", "c5n.4xlarge", "c5n.9xlarge", "c5n.18xlarge", + "c6in.xlarge", "c6in.2xlarge", "c6in.4xlarge", "c6in.8xlarge", "c6in.12xlarge", "c6in.16xlarge", "c6in.24xlarge", "c6in.32xlarge" ], var.AgentInstanceType) error_message = <&2; } - -# 1) Prereqs -log "Installing prerequisites..." -sudo apt update -sudo apt install -y apt-transport-https ca-certificates gnupg curl - -# 2) Official Google Cloud APT repo (with keyring) -REPO_LIST="/etc/apt/sources.list.d/google-cloud-cli.list" -KEYRING="/usr/share/keyrings/cloud.google.gpg" - -log "Adding Google Cloud CLI repository..." -echo "deb [signed-by=${KEYRING}] https://packages.cloud.google.com/apt cloud-sdk main" | \ - sudo tee "${REPO_LIST}" >/dev/null - -log "Importing Google Cloud public key into keyring..." -curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | \ - sudo gpg --dearmor -o "${KEYRING}" - -# 3) Install CLI -log "Installing google-cloud-cli..." -sudo apt update -sudo apt install -y google-cloud-cli - -# Optionally install kubectl via APT (comment out if you prefer gcloud components) -if ! command -v kubectl >/dev/null 2>&1; then - log "Installing kubectl via APT (optional)..." - sudo apt install -y kubectl || warn "kubectl APT install failed; you can later run: gcloud components install kubectl" -fi - -## 4) Verify -log "Verifying installation..." -gcloud --version || err "gcloud not found on PATH" - -# 5) Initialize -log "Starting gcloud init (browser auth + default project/region/zone)..." -gcloud init - diff --git a/google-cloud-platform/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-GCP-1-App-1-Virtual-Blade-Add-On/CloudShell/connect.sh b/google-cloud-platform/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-GCP-1-App-1-Virtual-Blade-Add-On/CloudShell/connect.sh deleted file mode 100644 index 248eeb9..0000000 --- a/google-cloud-platform/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-GCP-1-App-1-Virtual-Blade-Add-On/CloudShell/connect.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -while getopts n:z:p: flag -do - case "${flag}" in - n) InstanceName=${OPTARG};; - z) Zone=${OPTARG};; - p) ProjectId=${OPTARG};; - esac -done - -# Connect -gcloud compute ssh $InstanceName \ - --zone=$Zone \ - --project=$ProjectId \ - --tunnel-through-iap \ No newline at end of file diff --git a/google-cloud-platform/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-GCP-1-App-1-Virtual-Blade-Add-On/CloudShell/install-gcloud.sh b/google-cloud-platform/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-GCP-1-App-1-Virtual-Blade-Add-On/CloudShell/install-gcloud.sh deleted file mode 100644 index 8015f06..0000000 --- a/google-cloud-platform/Deployment/Terraform/BPS-VE-FullDeployment/BPS-on-GCP-1-App-1-Virtual-Blade-Add-On/CloudShell/install-gcloud.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env bash -# Install Google Cloud CLI (gcloud) on Ubuntu 24.04+ using the official APT repo -# - Uses keyring (no apt-key deprecation) -# - Installs google-cloud-cli (includes gsutil, bq, alpha/beta commands) -# - Optionally installs kubectl via APT -# - Runs gcloud init at the end - -set -euo pipefail - -log() { printf "\033[1;32m[*]\033[0m %s\n" "$*"; } -warn(){ printf "\033[1;33m[!]\033[0m %s\n" "$*"; } -err() { printf "\033[1;31m[x]\033[0m %s\n" "$*" >&2; } - -# 1) Prereqs -log "Installing prerequisites..." -sudo apt update -sudo apt install -y apt-transport-https ca-certificates gnupg curl - -# 2) Official Google Cloud APT repo (with keyring) -REPO_LIST="/etc/apt/sources.list.d/google-cloud-cli.list" -KEYRING="/usr/share/keyrings/cloud.google.gpg" - -log "Adding Google Cloud CLI repository..." -echo "deb [signed-by=${KEYRING}] https://packages.cloud.google.com/apt cloud-sdk main" | \ - sudo tee "${REPO_LIST}" >/dev/null - -log "Importing Google Cloud public key into keyring..." -curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | \ - sudo gpg --dearmor -o "${KEYRING}" - -# 3) Install CLI -log "Installing google-cloud-cli..." -sudo apt update -sudo apt install -y google-cloud-cli - -# Optionally install kubectl via APT (comment out if you prefer gcloud components) -if ! command -v kubectl >/dev/null 2>&1; then - log "Installing kubectl via APT (optional)..." - sudo apt install -y kubectl || warn "kubectl APT install failed; you can later run: gcloud components install kubectl" -fi - -## 4) Verify -log "Verifying installation..." -gcloud --version || err "gcloud not found on PATH" - -# 5) Initialize -log "Starting gcloud init (browser auth + default project/region/zone)..." -gcloud init -