Move: WRK installation into ansible 09/21309/1
authorPeter Mikus <pmikus@cisco.com>
Wed, 14 Aug 2019 12:30:06 +0000 (12:30 +0000)
committerPeter Mikus <pmikus@cisco.com>
Wed, 14 Aug 2019 14:34:12 +0000 (14:34 +0000)
- Remove ability to install from framework.
- Control via ansible with other dependencies.

Signed-off-by: Peter Mikus <pmikus@cisco.com>
Change-Id: I5fd0ca18b4f76c30b6c28b4dcd15e538e01cb315
(cherry picked from commit 37a9451377f7239365b5af778b8072d1585a2d2a)

resources/libraries/robot/shared/suite_setup.robot
resources/tools/testbed-setup/ansible/inventories/lf_inventory/group_vars/all.yaml
resources/tools/testbed-setup/ansible/inventories/sample_inventory/group_vars/all.yaml
resources/tools/testbed-setup/ansible/inventories/sample_inventory/host_vars/1.1.1.1.yaml
resources/tools/testbed-setup/ansible/roles/tg/tasks/main.yaml
resources/tools/testbed-setup/ansible/roles/tg/tasks/ubuntu_bionic.yaml
resources/tools/testbed-setup/ansible/roles/tg/tasks/wrk.yaml [new file with mode: 0644]
resources/tools/wrk/wrk.py
resources/tools/wrk/wrk_utils.sh

index 27f7ddb..d5cc583 100644 (file)
 | | Set Linux interface IP | ${tg} | ${intf_name} | 192.168.70.1 | 24
 | | Set Linux interface IP | ${tg} | ${intf_name} | 192.168.80.1 | 24
 | | Set Linux interface up | ${tg} | ${intf_name}
-| | Install wrk | ${tg}
+| | Check wrk | ${tg}
index 907f5af..40d7544 100644 (file)
@@ -51,6 +51,12 @@ dpdk:
     aarch64: "arm64-armv8a"
     x86_64: "x86_64-native"
 
+# WRK settings.
+wrk:
+  target_dir: '/opt'
+  version: '4.0.2'
+  url: 'https://github.com/wg/wrk/archive'
+
 # Calibration settings.
 jitter:
   directory: '/tmp/pma_tools'
index a8e6d0f..484e6dd 100644 (file)
@@ -47,6 +47,15 @@ dpdk:
   target_dir: '/opt'
   version: 'dpdk-19.02'
   url: 'https://fast.dpdk.org/rel'
+  build_targets:
+    aarch64: "arm64-armv8a"
+    x86_64: "x86_64-native"
+
+# WRK settings.
+wrk:
+  target_dir: '/opt'
+  version: '4.0.2'
+  url: 'https://github.com/wg/wrk/archive'
 
 # Calibration settings.
 jitter:
index f3f5d85..24f433f 100644 (file)
@@ -3,3 +3,7 @@
 
 - name: Install distribution - release - machine prerequisites
   include_tasks: '{{ ansible_distribution|lower }}_{{ ansible_distribution_release }}.yaml'
+
+- name: Install WRK
+  include_tasks: 'wrk.yaml'
+  tags: install-wrk
index 27b8b72..95a47b0 100644 (file)
@@ -5,6 +5,7 @@
   apt:
     name:
       - 'unzip'
+      - 'libssl-dev'
     state: 'present'
     install_recommends: False
   tags: install-csit-dependencies
diff --git a/resources/tools/testbed-setup/ansible/roles/tg/tasks/wrk.yaml b/resources/tools/testbed-setup/ansible/roles/tg/tasks/wrk.yaml
new file mode 100644 (file)
index 0000000..1da45fb
--- /dev/null
@@ -0,0 +1,33 @@
+---
+# file: roles/tg/tasks/wrk.yaml
+
+- name: Download WRK release archive
+  get_url:
+    url: '{{ wrk.url }}/{{ wrk.version }}.tar.gz'
+    dest: '{{ wrk.target_dir }}/{{ wrk.version }}.tar.gz'
+    mode: 0644
+  register: 'linux__wrk_downloaded'
+  tags: install-wrk
+
+- name: Extract WRK release archive
+  become: yes
+  unarchive:
+    src: '{{ wrk.target_dir }}/{{ wrk.version }}.tar.gz'
+    dest: '{{ wrk.target_dir }}/wrk-{{ wrk.version }}'
+    remote_src: yes
+  when: 'linux__wrk_downloaded'
+  register: 'linux__wrk_extracted'
+  tags: install-wrk
+
+- name: Compile WRK release
+  become: yes
+  shell: 'cd {{ wrk.target_dir }}/wrk-{{ wrk.version }}; make'
+  when: 'linux__wrk_extracted'
+  register: 'linux__wrk_compiled'
+  tags: install-wrk
+
+- name: Move WRK binary
+  become: yes
+  command: 'mv {{ wrk.target_dir }}/wrk-{{ wrk.version }}/wrk /usr/local/bin/'
+  when: 'linux__wrk_compiled'
+  tags: install-wrk
index 43355b9..b7989b8 100644 (file)
@@ -57,13 +57,13 @@ REGEX_LATENCY_DIST = \
 REGEX_NUM = r"(\d*\.*\d*)(\D*)"
 
 
-def install_wrk(tg_node):
-    """Install wrk on the TG node.
+def check_wrk(tg_node):
+    """Check if wrk is installed on the TG node.
 
     :param tg_node: Traffic generator node.
     :type tg_node: dict
     :raises: RuntimeError if the given node is not a TG node or if the
-    installation fails.
+        command is not availble.
     """
 
     if tg_node['type'] != NodeType.TG:
@@ -74,33 +74,10 @@ def install_wrk(tg_node):
 
     ret, _, _ = ssh.exec_command(
         "sudo -E "
-        "sh -c '{0}/resources/tools/wrk/wrk_utils.sh install false'".
-        format(Constants.REMOTE_FW_DIR), timeout=1800)
+        "sh -c '{0}/resources/tools/wrk/wrk_utils.sh installed'".
+        format(Constants.REMOTE_FW_DIR))
     if int(ret) != 0:
-        raise RuntimeError('Installation of wrk on TG node failed.')
-
-
-def destroy_wrk(tg_node):
-    """Destroy wrk on the TG node.
-
-    :param tg_node: Traffic generator node.
-    :type tg_node: dict
-    :raises: RuntimeError if the given node is not a TG node or the removal of
-    wrk failed.
-    """
-
-    if tg_node['type'] != NodeType.TG:
-        raise RuntimeError('Node type is not a TG.')
-
-    ssh = SSH()
-    ssh.connect(tg_node)
-
-    ret, _, _ = ssh.exec_command(
-        "sudo -E "
-        "sh -c '{0}/resources/tools/wrk/wrk_utils.sh destroy'".
-        format(Constants.REMOTE_FW_DIR), timeout=1800)
-    if int(ret) != 0:
-        raise RuntimeError('Removal of wrk from the TG node failed.')
+        raise RuntimeError('WRK is not installed on TG node.')
 
 
 def run_wrk(tg_node, profile_name, tg_numa, test_type, warm_up=False):
index 2b9f6cf..1c77fea 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright (c) 2018 Cisco and/or its affiliates.
+# 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:
 
 set -x
 
-WRK_VERSION="4.0.2"
-WRK_TAR=${WRK_VERSION}".tar.gz"
-WRK_DWNLD_PATH="https://github.com/wg/wrk/archive"
-WRK_TARGET="/opt"
-WRK_INSTALL_DIR=${WRK_TARGET}/wrk-${WRK_VERSION}
+function wrk_utils.installed {
 
-function wrk_utils.install {
-    # Install wrk
+    # Check if the WRK utility is installed. Fail if not installed.
 
-    # Directory for wrk:
-    dir=${1}
-    # Force the installation:
-    force=${2:-false}
+    # Returns:
+    # - 0 - If command is installed.
+    # - 1 - If command is not installed.
 
-    # Check if wrk is installed:
-    if [ "${force}" = true ]; then
-        wrk_utils.destroy
-    else
-        which wrk
-        if [ $? -eq 0 ]; then
-            test -d ${dir}/${WRK_INSTALL_DIR} && echo "WRK already installed: ${dir}/${WRK_INSTALL_DIR}" && exit 0
-        fi
-    fi
-
-    # Install pre-requisites:
-    apt-get update
-    apt-get install build-essential libssl-dev -y
-
-    # Remove previous installation:
-    wrk_utils.destroy
-
-    # Change the directory:
-    cd ${WRK_TARGET}
+    set -exuo pipefail
 
-    # Get the specified version:
-    wget ${WRK_DWNLD_PATH}/${WRK_TAR}
-    tar xzf ${WRK_TAR}
-    rm ${WRK_TAR}
-    cd ${WRK_INSTALL_DIR}
-
-    # Build the wrk:
-    make
-
-    # Move the executable to somewhere in the PATH:
-    cp wrk /usr/local/bin
+    command -v wrk
 }
 
-function wrk_utils.destroy {
-    # Remove wrk
-
-    sudo rm /usr/local/bin/wrk || true
-    sudo rm -rf ${WRK_INSTALL_DIR} || true
-}
 
 function wrk_utils.traffic_1_url_1_core {
     # Send traffic
@@ -271,12 +231,8 @@ function wrk_utils.traffic_n_urls_m_cores {
 
 args=("$@")
 case ${1} in
-    install)
-        force=${2}
-        wrk_utils.install ${force}
-        ;;
-    destroy)
-        wrk_utils.destroy
+    installed)
+        wrk_utils.installed
         ;;
     traffic_1_url_1_core)
         wrk_utils.traffic_1_url_1_core  "${args[@]:1}"