Add: Use containers for shared TG 52/22052/10
authorPeter Mikus <pmikus@cisco.com>
Fri, 13 Sep 2019 12:00:49 +0000 (12:00 +0000)
committerPeter Mikus <pmikus@cisco.com>
Wed, 30 Oct 2019 07:15:38 +0000 (07:15 +0000)
+ Ansible
  + Service for auto load during restart
  + By default created 2 instances of Docker container
+ Small modification of Trex to use prefixes
+ DNV topology to use ssh port to connect to docker

Signed-off-by: Peter Mikus <pmikus@cisco.com>
Change-Id: Ibc2b2f0e509d920fc3e05d012b88abc388f5c3e7

resources/libraries/python/TrafficGenerator.py
resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.10.yaml
resources/tools/testbed-setup/ansible/roles/tg/files/csit-initialize-docker-tg.service [new file with mode: 0644]
resources/tools/testbed-setup/ansible/roles/tg/files/csit-initialize-docker-tg.sh [new file with mode: 0755]
resources/tools/testbed-setup/ansible/roles/tg/handlers/main.yaml [new file with mode: 0644]
resources/tools/testbed-setup/ansible/roles/tg/tasks/main.yaml
topologies/available/lf_2n_dnv_testbed26.yaml
topologies/available/lf_3n_dnv_testbed35.yaml

index 751dc88..8c3abfb 100644 (file)
@@ -330,8 +330,8 @@ class TrafficGenerator(AbstractMeasurer):
 
             # Start TRex.
             cmd = ("sh -c 'cd {dir}/scripts/ && "
 
             # Start TRex.
             cmd = ("sh -c 'cd {dir}/scripts/ && "
-                   "nohup ./t-rex-64 --hdrh{mode} -i -c 7 > "
-                   "/tmp/trex.log 2>&1 &' > /dev/null"
+                   "nohup ./t-rex-64 --hdrh{mode} --prefix $(hostname)"
+                   " -i -c 7 > /tmp/trex.log 2>&1 &' > /dev/null"
                    .format(dir=Constants.TREX_INSTALL_DIR,
                            mode=' --astf' if osi_layer == 'L7' else ''))
             try:
                    .format(dir=Constants.TREX_INSTALL_DIR,
                            mode=' --astf' if osi_layer == 'L7' else ''))
             try:
index f2091b7..dc89370 100644 (file)
@@ -16,3 +16,4 @@ sysctl:
 inventory_ipmi_hostname: '10.30.55.10'
 cobbler_profile: 'ubuntu-18.04.2-server-x86_64'
 cpu_microarchitecture: "skylake"
 inventory_ipmi_hostname: '10.30.55.10'
 cobbler_profile: 'ubuntu-18.04.2-server-x86_64'
 cpu_microarchitecture: "skylake"
+docker_tg: true
diff --git a/resources/tools/testbed-setup/ansible/roles/tg/files/csit-initialize-docker-tg.service b/resources/tools/testbed-setup/ansible/roles/tg/files/csit-initialize-docker-tg.service
new file mode 100644 (file)
index 0000000..1191120
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=CSIT Initialize Docker TG
+After=network.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=True
+ExecStart=/usr/local/bin/csit-initialize-docker-tg.sh start 2
+ExecStop=/usr/local/bin/csit-initialize-docker-tg.sh stop
+
+[Install]
+WantedBy=default.target
diff --git a/resources/tools/testbed-setup/ansible/roles/tg/files/csit-initialize-docker-tg.sh b/resources/tools/testbed-setup/ansible/roles/tg/files/csit-initialize-docker-tg.sh
new file mode 100755 (executable)
index 0000000..0c6dbee
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2019 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# CSIT SRIOV VF initialization and isolation.
+
+set -euo pipefail
+
+case "${1:-start}" in
+    "start" )
+        # Run TG
+        for cnt in $(seq 1 ${2:-1}); do
+            # If the IMAGE is not already loaded then docker run will pull the
+            # IMAGE, and all image dependencies, before it starts the container.
+            dcr_image="snergster/csit-sut:latest"
+            # Run the container in the background and print the new container
+            # ID.
+            dcr_stc_params="--detach=true "
+            # Give extended privileges to this container. A "privileged"
+            # container is given access to all devices and able to run nested
+            # containers.
+            dcr_stc_params+="--privileged "
+            # Publish all exposed ports to random ports on the host interfaces.
+            dcr_stc_params+="--publish 600${cnt}:22 "
+            # Automatically remove the container when it exits.
+            dcr_stc_params+="--rm "
+            # Size of /dev/shm.
+            dcr_stc_params+="--shm-size 4G "
+            # Mount vfio to be able to bind to see binded interfaces. We cannot
+            # use --device=/dev/vfio as this does not see newly binded
+            # interfaces.
+            dcr_stc_params+="--volume /dev:/dev "
+            # Mount /opt/boot/ where VM kernel and initrd are located.
+            dcr_stc_params+="--volume /opt:/opt "
+            # Mount host hugepages for VMs.
+            dcr_stc_params+="--volume /dev/hugepages:/dev/hugepages "
+
+            params=(${dcr_stc_params} --name csit-tg-"${cnt}" "${dcr_image}")
+            docker run "${params[@]}"
+        done
+        ;;
+    "stop" )
+        docker rm --force $(docker ps --all --quiet --filter name=csit-tg)
+        ;;
+esac
diff --git a/resources/tools/testbed-setup/ansible/roles/tg/handlers/main.yaml b/resources/tools/testbed-setup/ansible/roles/tg/handlers/main.yaml
new file mode 100644 (file)
index 0000000..53cbb48
--- /dev/null
@@ -0,0 +1,9 @@
+---
+# file: roles/tg/handlers/main.yaml
+
+- name: Start csit-initialize-docker-tg.service
+  systemd:
+    enabled: yes
+    state: 'started'
+    name: 'csit-initialize-docker-tg.service'
+  tags: docker-tg
index 0b32002..a7ab90d 100644 (file)
 - name: Install TRex
   include_tasks: 'trex.yaml'
   tags: install-trex
 - name: Install TRex
   include_tasks: 'trex.yaml'
   tags: install-trex
+
+- name: Copy csit-initialize-docker-tg.sh
+  copy:
+   src: 'files/csit-initialize-docker-tg.sh'
+   dest: '/usr/local/bin/csit-initialize-docker-tg.sh'
+   owner: 'root'
+   group: 'root'
+   mode: '744'
+  when: docker_tg is defined
+  tags: docker-tg
+
+- name: Start csit-initialize-docker-tg.service
+  copy:
+   src: 'files/csit-initialize-docker-tg.service'
+   dest: '/etc/systemd/system/'
+   owner: 'root'
+   group: 'root'
+   mode: '644'
+  notify:
+    - 'Start csit-initialize-docker-tg.service'
+  when: docker_tg is defined
+  tags: docker-tg
+
+- meta: flush_handlers
index 9b0d132..c844323 100644 (file)
@@ -12,8 +12,8 @@ nodes:
     subtype: TREX
     host: "10.32.8.10"
     arch: x86_64
     subtype: TREX
     host: "10.32.8.10"
     arch: x86_64
-    port: 22
-    username: testuser
+    port: 6001
+    username: root
     password: Csit1234
     interfaces:
       port1:
     password: Csit1234
     interfaces:
       port1:
index da2892f..934e11a 100644 (file)
@@ -12,8 +12,8 @@ nodes:
     subtype: TREX
     host: "10.32.8.10"
     arch: x86_64
     subtype: TREX
     host: "10.32.8.10"
     arch: x86_64
-    port: 22
-    username: testuser
+    port: 6002
+    username: root
     password: Csit1234
     interfaces:
       port1:
     password: Csit1234
     interfaces:
       port1: