---
###################################
# job configuration for cperf
###################################
- project:
    name: cperf-ci-jobs
    project: cperf

    # -------------------------------
    # BRANCH ANCHORS
    # -------------------------------
    stream: master
    branch: '{stream}'
    gs-pathname: ''
    docker-tag: 'latest'

    installer: apex

    testsuite:
      - csit
      - cbench

    jobs:
      - 'cperf-{installer}-{testsuite}-{stream}'
      - 'cperf-upload-logs-csit'

################################
# job template
################################
- job-template:
    name: 'cperf-{installer}-{testsuite}-{stream}'

    concurrent: true

    properties:
      - throttle:
          enabled: true
          max-per-node: 1
          option: 'project'

    wrappers:
      - build-name:
          name: '$BUILD_NUMBER Suite: $CPERF_SUITE_NAME ODL BRANCH: $ODL_BRANCH'
      - timeout:
          timeout: 400
          abort: true

    parameters:
      - cperf-parameter:
          testsuite: '{testsuite}'
          gs-pathname: '{gs-pathname}'
          docker-tag: '{docker-tag}'
          stream: '{stream}'

    builders:
      - 'cperf-{testsuite}-builder'

- job-template:
    name: 'cperf-upload-logs-csit'

    concurrent: true

    disabled: false

    parameters:
      - cperf-parameter:
          testsuite: 'csit'
          gs-pathname: '{gs-pathname}'
          docker-tag: '{docker-tag}'
          stream: '{stream}'

    # yamllint enable rule:line-length
    properties:
      - logrotate-default
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - 'cperf-upload-logs-csit'

########################
# parameter macros
########################
- parameter:
    name: cperf-parameter
    parameters:
      - string:
          name: CPERF_SUITE_NAME
          default: '{testsuite}'
          description: "Suite name to run"
      - string:
          name: ODL_BRANCH
          default: 'master'
          description: "Branch that OpenDaylight is running"
      - string:
          name: OS_VERSION
          default: 'master'
          description: "OpenStack version (short name, no stable/ prefix)"
      - string:
          name: GS_PATHNAME
          default: '{gs-pathname}'
          description: "Version directory where the opnfv documents will be stored in gs repository"
      - string:
          name: CI_DEBUG
          default: 'false'
          description: "Show debug output information"
      - string:
          name: DOCKER_TAG
          default: '{docker-tag}'
          description: 'Tag to pull docker image'
      - string:
          name: RC_FILE_PATH
          default: ''
          description: "Path to the OS credentials file if given"
      - string:
          name: SSH_KEY_PATH
          default: ''
          description: "Path to the private SSH key to access OPNFV nodes"
      - string:
          name: NODE_FILE_PATH
          default: ''
          description: "Path to the yaml file describing overcloud nodes"
      - string:
          name: ODL_CONTAINERIZED
          default: 'true'
          description: "boolean set true if ODL on overcloud is a container"

########################
# trigger macros
########################

########################
# builder macros
########################
- builder:
    name: cperf-csit-builder
    builders:
      - 'cperf-cleanup'
      - 'cperf-prepare-robot'
      - 'cperf-robot-netvirt-csit'

- builder:
    name: cperf-cbench-builder
    builders:
      - 'cperf-cleanup'
      - 'cperf-prepare-robot'
      - 'cperf-robot-cbench'

- builder:
    name: cperf-prepare-robot
    builders:
      - shell:
          !include-raw: ./cperf-prepare-robot.sh

- builder:
    name: cperf-robot-cbench
    builders:
      - shell: |
          #!/bin/bash
          set -o errexit
          set -o nounset
          set -o pipefail

          # cbench requires the openflow drop test feature to be installed.
          sshpass -p karaf ssh -o StrictHostKeyChecking=no \
                               -o UserKnownHostsFile=/dev/null \
                               -o LogLevel=error \
                               -p 8101 karaf@$SDN_CONTROLLER_IP \
                                feature:install odl-openflowplugin-flow-services-ui odl-openflowplugin-drop-test

          robot_cmd="pybot -e exclude -L TRACE -d /tmp \
                      -v ODL_SYSTEM_1_IP:${SDN_CONTROLLER_IP} \
                      -v ODL_SYSTEM_IP:${SDN_CONTROLLER_IP} \
                      -v BUNDLEFOLDER:/opt/opendaylight \
                      -v RESTCONFPORT:8081 \
                      -v USER_HOME:/tmp \
                      -v USER:heat-admin \
                      -v ODL_SYSTEM_USER:heat-admin \
                      -v TOOLS_SYSTEM_IP:localhost \
                      -v of_port:6653"
          robot_suite="/home/opnfv/repos/odl_test/csit/suites/openflowplugin/Performance/010_Cbench.robot"

          docker run -i -v /tmp:/tmp opnfv/cperf:$DOCKER_TAG ${robot_cmd} ${robot_suite}

- builder:
    name: cperf-robot-netvirt-csit
    builders:
      - shell:
          !include-raw: ./cperf-robot-netvirt-csit.sh

- builder:
    name: cperf-cleanup
    builders:
      - shell: |
          #!/bin/bash
          [[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null"

          echo "Cleaning up docker containers/images..."
          # Remove previous running containers if exist
          if [[ ! -z $(docker ps -a | grep opnfv/cperf) ]]; then
              echo "Removing existing opnfv/cperf containers..."
              docker ps -a | grep opnfv/cperf | awk '{print $1}' | xargs docker rm -f >${redirect}
          fi

- builder:
    name: cperf-upload-logs-csit
    builders:
      - shell: !include-raw: ./cperf-upload-logs-csit.sh