From 900fc8ba5d8aa9e0eafce2fbb64a10555618b577 Mon Sep 17 00:00:00 2001 From: Maros Mullner Date: Mon, 15 Jun 2020 10:35:08 +0200 Subject: [PATCH] AWS 2n topology Signed-off-by: Maros Mullner Change-Id: Idc9317d3e37d9ed0a82adc273e0628a8defcfdf6 --- .../tools/terraform/{aws => 2n_aws_c5n}/.gitignore | 0 resources/tools/terraform/2n_aws_c5n/main.tf | 304 +++++++++++++++++++++ resources/tools/terraform/2n_aws_c5n/nic.tf | 67 +++++ .../terraform/{azure => 3n_aws_c5n}/.gitignore | 0 .../tools/terraform/{aws => 3n_aws_c5n}/main.tf | 2 +- .../tools/terraform/{aws => 3n_aws_c5n}/nic.tf | 0 resources/tools/terraform/3n_azure_fsv2/.gitignore | 4 + .../terraform/{azure => 3n_azure_fsv2}/main.tf | 2 +- .../terraform/{azure => 3n_azure_fsv2}/nic.tf | 0 .../ansible/roles/topology/tasks/main.yaml | 2 +- .../ansible/templates/topology_2n_aws_c5n.j2 | 56 ++++ .../{topology_aws.j2 => topology_3n_aws_c5n.j2} | 0 ...topology_azure.j2 => topology_3n_azure_Fsv2.j2} | 0 13 files changed, 434 insertions(+), 3 deletions(-) rename resources/tools/terraform/{aws => 2n_aws_c5n}/.gitignore (100%) create mode 100644 resources/tools/terraform/2n_aws_c5n/main.tf create mode 100644 resources/tools/terraform/2n_aws_c5n/nic.tf rename resources/tools/terraform/{azure => 3n_aws_c5n}/.gitignore (100%) rename resources/tools/terraform/{aws => 3n_aws_c5n}/main.tf (99%) rename resources/tools/terraform/{aws => 3n_aws_c5n}/nic.tf (100%) create mode 100644 resources/tools/terraform/3n_azure_fsv2/.gitignore rename resources/tools/terraform/{azure => 3n_azure_fsv2}/main.tf (99%) rename resources/tools/terraform/{azure => 3n_azure_fsv2}/nic.tf (100%) create mode 100644 resources/tools/testbed-setup/ansible/templates/topology_2n_aws_c5n.j2 rename resources/tools/testbed-setup/ansible/templates/{topology_aws.j2 => topology_3n_aws_c5n.j2} (100%) rename resources/tools/testbed-setup/ansible/templates/{topology_azure.j2 => topology_3n_azure_Fsv2.j2} (100%) diff --git a/resources/tools/terraform/aws/.gitignore b/resources/tools/terraform/2n_aws_c5n/.gitignore similarity index 100% rename from resources/tools/terraform/aws/.gitignore rename to resources/tools/terraform/2n_aws_c5n/.gitignore diff --git a/resources/tools/terraform/2n_aws_c5n/main.tf b/resources/tools/terraform/2n_aws_c5n/main.tf new file mode 100644 index 0000000000..c0da7a487e --- /dev/null +++ b/resources/tools/terraform/2n_aws_c5n/main.tf @@ -0,0 +1,304 @@ +provider "aws" { + region = "eu-central-1" +} + +variable "avail_zone" { + type = string + default = "eu-central-1a" +} +# Base VPC CIDRs +variable "vpc_cidr_mgmt" { + type = string + default = "192.168.0.0/24" +} +variable "vpc_cidr_b" { + type = string + default = "192.168.10.0/24" +} +variable "vpc_cidr_c" { + type = string + default = "200.0.0.0/24" +} +variable "vpc_cidr_d" { + type = string + default = "192.168.20.0/24" +} + +# Trex Dummy CIDRs +variable "trex_dummy_cidr_port_0" { + type = string + default = "10.0.0.0/24" +} +variable "trex_dummy_cidr_port_1" { + type = string + default = "20.0.0.0/24" +} + +# IPs +variable "tg_if1_ip" { + type = string + default = "192.168.10.254" +} +variable "tg_if2_ip" { + type = string + default = "192.168.20.254" +} +variable "dut1_if1_ip" { + type = string + default = "192.168.10.11" +} +variable "dut1_if2_ip" { + type = string + default = "192.168.20.11" +} +variable "tg_mgmt_ip" { + type = string + default = "192.168.0.10" +} +variable "dut1_mgmt_ip" { + type = string + default = "192.168.0.11" +} + +# Instance Type +variable "instance_type" { + type = string + default = "c5n.2xlarge" +} + +resource "aws_vpc" "CSIT" { + cidr_block = var.vpc_cidr_mgmt +} + +resource "aws_security_group" "CSIT" { + name = "CSIT" + description = "Allow inbound traffic" + vpc_id = aws_vpc.CSIT.id + + ingress { + from_port = 22 + to_port = 22 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + ingress { + from_port = 0 + to_port = 0 + protocol = -1 + self = true + } + + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + + depends_on = [aws_vpc.CSIT] +} + +resource "aws_vpc_ipv4_cidr_block_association" "b" { + vpc_id = aws_vpc.CSIT.id + cidr_block = var.vpc_cidr_b + depends_on = [aws_vpc.CSIT] +} +resource "aws_vpc_ipv4_cidr_block_association" "c" { + vpc_id = aws_vpc.CSIT.id + cidr_block = var.vpc_cidr_c + depends_on = [aws_vpc.CSIT] +} +resource "aws_vpc_ipv4_cidr_block_association" "d" { + vpc_id = aws_vpc.CSIT.id + cidr_block = var.vpc_cidr_d + depends_on = [aws_vpc.CSIT] +} + +resource "aws_subnet" "mgmt" { + vpc_id = aws_vpc.CSIT.id + cidr_block = var.vpc_cidr_mgmt + availability_zone = var.avail_zone + depends_on = [aws_vpc.CSIT] +} + +resource "aws_subnet" "b" { + vpc_id = aws_vpc.CSIT.id + cidr_block = var.vpc_cidr_b + availability_zone = var.avail_zone + depends_on = [aws_vpc.CSIT, aws_vpc_ipv4_cidr_block_association.b] +} + +resource "aws_subnet" "c" { + vpc_id = aws_vpc.CSIT.id + cidr_block = var.vpc_cidr_c + availability_zone = var.avail_zone + depends_on = [aws_vpc.CSIT, aws_vpc_ipv4_cidr_block_association.c] +} + +resource "aws_subnet" "d" { + vpc_id = aws_vpc.CSIT.id + cidr_block = var.vpc_cidr_d + availability_zone = var.avail_zone + depends_on = [aws_vpc.CSIT, aws_vpc_ipv4_cidr_block_association.d] +} + +resource "aws_internet_gateway" "CSIT" { + vpc_id = aws_vpc.CSIT.id + depends_on = [aws_vpc.CSIT] +} + +resource "aws_key_pair" "CSIT" { + key_name = "CSIT" + public_key = file("~/.ssh/id_rsa.pub") +} + +data "aws_ami" "ubuntu" { + most_recent = true + + filter { + name = "name" + values = ["*hvm-ssd/ubuntu-bionic-18.04-amd64*"] + } + + filter { + name = "virtualization-type" + values = ["hvm"] + } + + owners = ["099720109477"] # Canonical +} + +resource "aws_placement_group" "CSIT" { + name = "CSIT" + strategy = "cluster" +} + +resource "aws_instance" "tg" { + ami = data.aws_ami.ubuntu.id + instance_type = var.instance_type +# cpu_threads_per_core = 1 +# cpu_core_count = 18 + key_name = aws_key_pair.CSIT.key_name + associate_public_ip_address = true + subnet_id = aws_subnet.mgmt.id + root_block_device { + volume_size = 50 + } + private_ip = var.tg_mgmt_ip + vpc_security_group_ids = [aws_security_group.CSIT.id] + depends_on = [aws_vpc.CSIT, aws_placement_group.CSIT] + placement_group = aws_placement_group.CSIT.id + source_dest_check = false +} + +resource "aws_instance" "dut1" { + ami = data.aws_ami.ubuntu.id +# cpu_threads_per_core = 1 +# cpu_core_count = 18 + instance_type = var.instance_type + key_name = aws_key_pair.CSIT.key_name + associate_public_ip_address = true + subnet_id = aws_subnet.mgmt.id + root_block_device { + volume_size = 50 + } + private_ip = var.dut1_mgmt_ip + vpc_security_group_ids = [aws_security_group.CSIT.id] + depends_on = [aws_vpc.CSIT, aws_placement_group.CSIT] + placement_group = aws_placement_group.CSIT.id + source_dest_check = false +} + +resource "aws_route" "CSIT-igw" { + route_table_id = aws_vpc.CSIT.main_route_table_id + gateway_id = aws_internet_gateway.CSIT.id + destination_cidr_block = "0.0.0.0/0" + depends_on = [aws_vpc.CSIT, aws_internet_gateway.CSIT] +} +resource "aws_route" "dummy-trex-port-0" { + route_table_id = aws_vpc.CSIT.main_route_table_id + network_interface_id = aws_instance.tg.primary_network_interface_id + destination_cidr_block = var.trex_dummy_cidr_port_0 + depends_on = [aws_vpc.CSIT, aws_instance.dut1] +} +resource "aws_route" "dummy-trex-port-1" { + route_table_id = aws_vpc.CSIT.main_route_table_id + network_interface_id = aws_instance.tg.primary_network_interface_id + destination_cidr_block = var.trex_dummy_cidr_port_1 + depends_on = [aws_vpc.CSIT, aws_instance.dut1] +} + +resource "null_resource" "deploy_tg" { + depends_on = [ aws_instance.tg ] + connection { + user = "ubuntu" + host = aws_instance.tg.public_ip + private_key = file("~/.ssh/id_rsa") + } + provisioner "ansible" { + plays { + playbook { + file_path = "../../testbed-setup/ansible/site_aws.yaml" + force_handlers = true + } + hosts = ["tg"] + extra_vars = { + ansible_python_interpreter = "/usr/bin/python3" + aws = true + } + } + } +} +resource "null_resource" "deploy_dut1" { + depends_on = [ aws_instance.dut1 ] + connection { + user = "ubuntu" + host = aws_instance.dut1.public_ip + private_key = file("~/.ssh/id_rsa") + } + provisioner "ansible" { + plays { + playbook { + file_path = "../../testbed-setup/ansible/site_aws.yaml" + force_handlers = true + } + hosts = ["sut"] + extra_vars = { + ansible_python_interpreter = "/usr/bin/python3" + aws = true + } + } + } +} + +resource "null_resource" "deploy_topology" { + depends_on = [ aws_instance.tg, aws_instance.dut1 ] + provisioner "ansible" { + plays { + playbook { + file_path = "../../testbed-setup/ansible/cloud_topology.yaml" + } + hosts = ["local"] + extra_vars = { + ansible_python_interpreter = "/usr/bin/python3" + cloud_topology = "2n_aws_c5n" + tg_if1_mac = data.aws_network_interface.tg_if1.mac_address + tg_if2_mac = data.aws_network_interface.tg_if2.mac_address + dut1_if1_mac = data.aws_network_interface.dut1_if1.mac_address + dut1_if2_mac = data.aws_network_interface.dut1_if2.mac_address + tg_public_ip = aws_instance.tg.public_ip + dut1_public_ip = aws_instance.dut1.public_ip + } + } + } +} + +output "dbg_tg" { + value = "TG IP: ${aws_instance.tg.public_ip}" +} + +output "dbg_dut1" { + value = "DUT1 IP: ${aws_instance.dut1.public_ip}" +} + diff --git a/resources/tools/terraform/2n_aws_c5n/nic.tf b/resources/tools/terraform/2n_aws_c5n/nic.tf new file mode 100644 index 0000000000..b0a54e9b98 --- /dev/null +++ b/resources/tools/terraform/2n_aws_c5n/nic.tf @@ -0,0 +1,67 @@ +resource "aws_network_interface" "dut1_if1" { + subnet_id = aws_subnet.b.id + source_dest_check = false + private_ip = var.dut1_if1_ip + private_ips = [var.dut1_if1_ip] + security_groups = [aws_security_group.CSIT.id] + attachment { + instance = aws_instance.dut1.id + device_index = 1 + } + depends_on = [aws_vpc.CSIT, aws_subnet.b] +} + +data "aws_network_interface" "dut1_if1" { + id = aws_network_interface.dut1_if1.id +} + +resource "aws_network_interface" "dut1_if2" { + subnet_id = aws_subnet.d.id + source_dest_check = false + private_ip = var.dut1_if2_ip + private_ips = [var.dut1_if2_ip] + security_groups = [aws_security_group.CSIT.id] + attachment { + instance = aws_instance.dut1.id + device_index = 2 + } + depends_on = [aws_vpc.CSIT] +} + +data "aws_network_interface" "dut1_if2" { + id = aws_network_interface.dut1_if2.id +} + +resource "aws_network_interface" "tg_if1" { + subnet_id = aws_subnet.b.id + source_dest_check = false + private_ip = var.tg_if1_ip + private_ips = [var.tg_if1_ip] + security_groups = [aws_security_group.CSIT.id] + attachment { + instance = aws_instance.tg.id + device_index = 1 + } + depends_on = [aws_vpc.CSIT, aws_subnet.b] +} + +data "aws_network_interface" "tg_if1" { + id = aws_network_interface.tg_if1.id +} + +resource "aws_network_interface" "tg_if2" { + subnet_id = aws_subnet.d.id + source_dest_check = false + private_ip = var.tg_if2_ip + private_ips = [var.tg_if2_ip] + security_groups = [aws_security_group.CSIT.id] + attachment { + instance = aws_instance.tg.id + device_index = 2 + } + depends_on = [aws_vpc.CSIT, aws_subnet.d] +} + +data "aws_network_interface" "tg_if2" { + id = aws_network_interface.tg_if2.id +} diff --git a/resources/tools/terraform/azure/.gitignore b/resources/tools/terraform/3n_aws_c5n/.gitignore similarity index 100% rename from resources/tools/terraform/azure/.gitignore rename to resources/tools/terraform/3n_aws_c5n/.gitignore diff --git a/resources/tools/terraform/aws/main.tf b/resources/tools/terraform/3n_aws_c5n/main.tf similarity index 99% rename from resources/tools/terraform/aws/main.tf rename to resources/tools/terraform/3n_aws_c5n/main.tf index edb179990a..9ba2b19abe 100644 --- a/resources/tools/terraform/aws/main.tf +++ b/resources/tools/terraform/3n_aws_c5n/main.tf @@ -333,7 +333,7 @@ resource "null_resource" "deploy_topology" { hosts = ["local"] extra_vars = { ansible_python_interpreter = "/usr/bin/python3" - cloud_topology = "aws" + cloud_topology = "3n_aws_c5n" tg_if1_mac = data.aws_network_interface.tg_if1.mac_address tg_if2_mac = data.aws_network_interface.tg_if2.mac_address dut1_if1_mac = data.aws_network_interface.dut1_if1.mac_address diff --git a/resources/tools/terraform/aws/nic.tf b/resources/tools/terraform/3n_aws_c5n/nic.tf similarity index 100% rename from resources/tools/terraform/aws/nic.tf rename to resources/tools/terraform/3n_aws_c5n/nic.tf diff --git a/resources/tools/terraform/3n_azure_fsv2/.gitignore b/resources/tools/terraform/3n_azure_fsv2/.gitignore new file mode 100644 index 0000000000..fc64f0039f --- /dev/null +++ b/resources/tools/terraform/3n_azure_fsv2/.gitignore @@ -0,0 +1,4 @@ +.terraform/ +.terraform.tfstate.lock.info +terraform.tfstate +terraform.tfstate.backup diff --git a/resources/tools/terraform/azure/main.tf b/resources/tools/terraform/3n_azure_fsv2/main.tf similarity index 99% rename from resources/tools/terraform/azure/main.tf rename to resources/tools/terraform/3n_azure_fsv2/main.tf index 89f1905800..9f6739e676 100644 --- a/resources/tools/terraform/azure/main.tf +++ b/resources/tools/terraform/3n_azure_fsv2/main.tf @@ -565,7 +565,7 @@ resource "null_resource" "deploy_topology" { hosts = ["local"] extra_vars = { ansible_python_interpreter = "/usr/bin/python3" - cloud_topology = "azure" + cloud_topology = "3n_azure_Fsv2" tg_if1_mac = data.azurerm_network_interface.tg_if1.mac_address tg_if2_mac = data.azurerm_network_interface.tg_if2.mac_address dut1_if1_mac = data.azurerm_network_interface.dut1_if1.mac_address diff --git a/resources/tools/terraform/azure/nic.tf b/resources/tools/terraform/3n_azure_fsv2/nic.tf similarity index 100% rename from resources/tools/terraform/azure/nic.tf rename to resources/tools/terraform/3n_azure_fsv2/nic.tf diff --git a/resources/tools/testbed-setup/ansible/roles/topology/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/topology/tasks/main.yaml index a2e67f4153..9efdc71759 100644 --- a/resources/tools/testbed-setup/ansible/roles/topology/tasks/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/topology/tasks/main.yaml @@ -4,6 +4,6 @@ - name: Create topology file template: src: 'templates/topology_{{ cloud_topology }}.j2' - dest: '../../../../topologies/available/{{ cloud_topology }}_3n_skx_testbed.yaml' + dest: '../../../../topologies/available/{{ cloud_topology }}_testbed.yaml' tags: - create-topology-file diff --git a/resources/tools/testbed-setup/ansible/templates/topology_2n_aws_c5n.j2 b/resources/tools/testbed-setup/ansible/templates/topology_2n_aws_c5n.j2 new file mode 100644 index 0000000000..1d99a34994 --- /dev/null +++ b/resources/tools/testbed-setup/ansible/templates/topology_2n_aws_c5n.j2 @@ -0,0 +1,56 @@ +--- +metadata: + version: 0.1 + schema: + - resources/topology_schemas/2_node_topology.sch.yaml + - resources/topology_schemas/topology.sch.yaml + tags: [hw, 2-node] + +nodes: + TG: + type: TG + subtype: TREX + host: "{{ tg_public_ip }}" + arch: x86_64 + port: 22 + username: testuser + password: Csit1234 + interfaces: + port1: + # tg_instance/p1 - 50GE port1 on ENA NIC. + mac_address: {{ tg_if1_mac }} + pci_address: "0000:00:06.0" + link: link1 + model: Amazon-Nitro-50G + port2: + # tg_instance/p2 - 50GE port2 on ENA NIC. + mac_address: {{ tg_if2_mac }} + pci_address: "0000:00:07.0" + link: link2 + model: Amazon-Nitro-50G + DUT1: + type: DUT + host: "{{ dut1_public_ip }}" + arch: x86_64 + port: 22 + username: testuser + password: Csit1234 + uio_driver: vfio-pci + honeycomb: + user: admin + passwd: admin + port: 8183 + netconf_port: 2831 + interfaces: + port1: + # dut1_instance/p1 - 50GE port1 on ENA NIC. + mac_address: {{ dut1_if1_mac }} + pci_address: "0000:00:06.0" + link: link1 + model: Amazon-Nitro-50G + port2: + # dut1_instance/p2 - 50GE port2 on ENA NIC. + mac_address: {{ dut1_if2_mac }} + pci_address: "0000:00:07.0" + link: link2 + model: Amazon-Nitro-50G diff --git a/resources/tools/testbed-setup/ansible/templates/topology_aws.j2 b/resources/tools/testbed-setup/ansible/templates/topology_3n_aws_c5n.j2 similarity index 100% rename from resources/tools/testbed-setup/ansible/templates/topology_aws.j2 rename to resources/tools/testbed-setup/ansible/templates/topology_3n_aws_c5n.j2 diff --git a/resources/tools/testbed-setup/ansible/templates/topology_azure.j2 b/resources/tools/testbed-setup/ansible/templates/topology_3n_azure_Fsv2.j2 similarity index 100% rename from resources/tools/testbed-setup/ansible/templates/topology_azure.j2 rename to resources/tools/testbed-setup/ansible/templates/topology_3n_azure_Fsv2.j2 -- 2.16.6