- Remove ability to install from framework.
- Control via ansible with other dependencies.
Signed-off-by: Peter Mikus <pmikus@cisco.com>
Change-Id: I5fd0ca18b4f76c30b6c28b4dcd15e538e01cb315
| | 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}
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'
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:
inventory_ipmi_hostname: 'x.x.x.x'
cobbler_profile: 'ubuntu-18.04.2-server-x86_64'
+cpu_microarchitecture: "skylake"
- 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
apt:
name:
- 'unzip'
+ - 'libssl-dev'
state: 'present'
install_recommends: False
tags: install-csit-dependencies
--- /dev/null
+---
+# 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
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:
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):
#!/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
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}"