---
- project:
    name: 'apex'
    project: 'apex'
    jobs:
      - 'apex-fetch-logs-{stream}'
      - 'apex-runner-cperf-{stream}'
      - 'apex-virtual-{stream}'
      - 'apex-deploy-{platform}-{stream}'
      - 'apex-daily-{stream}'
      - 'apex-{snap_type}-promote-daily-{stream}-os-{os_version}-{topology}'
      - 'apex-fdio-promote-daily-{stream}'
      - 'apex-{scenario}-baremetal-{scenario_stream}'
      - 'apex-testsuite-{scenario}-baremetal-{scenario_stream}'
      - 'apex-upload-snapshot'
      - 'apex-create-snapshot'
      - 'apex-fetch-snap-info'
      - 'apex-flex-daily-os-nosdn-nofeature-ha-{stream}'
    # stream:    branch with - in place of / (eg. stable-arno)
    # branch:    branch (eg. stable/arno)
    stream:
      - master: &master
          branch: 'master'
          gs-pathname: ''
          build-slave: 'apex-build-master'
          virtual-slave: 'apex-virtual-master'
          baremetal-slave: 'apex-baremetal-master'
          verify-scenario: 'os-nosdn-nofeature-noha'
          scenario_stream: 'master'
          disable_daily: false
          disable_promote: true
      - hunter: &hunter
          branch: 'stable/hunter'
          gs-pathname: '/hunter'
          build-slave: 'apex-build-master'
          virtual-slave: 'apex-virtual-master'
          baremetal-slave: 'apex-baremetal-master'
          verify-scenario: 'os-nosdn-nofeature-ha'
          scenario_stream: 'hunter'
          disable_daily: false
          disable_promote: true
      - gambia: &gambia
          branch: 'stable/gambia'
          gs-pathname: '/gambia'
          build-slave: 'apex-build-master'
          virtual-slave: 'apex-virtual-master'
          baremetal-slave: 'apex-baremetal-master'
          verify-scenario: 'os-nosdn-nofeature-ha'
          scenario_stream: 'gambia'
          disable_daily: true
          disable_promote: true
      - fraser: &fraser
          branch: 'stable/fraser'
          gs-pathname: '/fraser'
          build-slave: 'apex-build-master'
          virtual-slave: 'apex-virtual-master'
          baremetal-slave: 'apex-baremetal-master'
          verify-scenario: 'os-nosdn-nofeature-ha'
          scenario_stream: 'fraser'
          disable_daily: true
          disable_promote: true
      - euphrates: &euphrates
          branch: 'stable/euphrates'
          gs-pathname: '/euphrates'
          build-slave: 'apex-build-master'
          virtual-slave: 'apex-virtual-master'
          baremetal-slave: 'apex-baremetal-master'
          verify-scenario: 'os-odl-nofeature-ha'
          scenario_stream: 'euphrates'
          disable_daily: true
          disable_promote: true
      - danube: &danube
          branch: 'stable/danube'
          gs-pathname: '/danube'
          build-slave: 'apex-build-danube'
          virtual-slave: 'apex-virtual-danube'
          baremetal-slave: 'apex-baremetal-danube'
          verify-scenario: 'os-odl_l3-nofeature-ha'
          scenario_stream: 'danube'
          disabled: true
          disable_daily: true
          disable_promote: true

    scenario:
      {%- for stream in scenarios %}
      {%- for scenario in scenarios[stream] %}
      - '{{scenario}}':
          <<: *{{stream}}
      {%- endfor %}
      {%- endfor %}

    platform:
      - 'baremetal'
      - 'virtual'

    os_version:
      - 'queens':
          os_scenario: 'nofeature'
          odl_branch: 'stable/oxygen'
      - 'rocky':
          os_scenario: 'rocky'
          odl_branch: 'stable/oxygen'
      - 'master':
          os_scenario: 'nofeature'
          odl_branch: 'stable/fluorine'

    topology:
      - 'noha'
      - 'ha'
      - 'noha-allinone'

    snap_type:
      - csit:
          sdn: 'odl'
      - functest:
          sdn: 'nosdn'
# Fetch Logs Job
- job-template:
    name: 'apex-fetch-logs-{stream}'

    concurrent: true

    disabled: false
    scm:
      - git-scm-gerrit
    parameters:
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
    # yamllint enable rule:line-length
    properties:
      - logrotate-default
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - 'apex-fetch-logs'

- job-template:
    name: 'apex-runner-cperf-{stream}'

    # runner cperf job
    project-type: 'multijob'
    node: 'intel-pod2'

    disabled: false

    parameters:
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - string:
          name: GIT_BASE
          default: https://gerrit.opnfv.org/gerrit/$PROJECT
          description: "Used for overriding the GIT URL coming from parameters macro."

    scm:
      - git-scm

    properties:
      - logrotate-default
      - build-blocker:
          use-build-blocker: false
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-deploy.*'
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - description-setter:
          description: "Deployed on $NODE_NAME"
      - multijob:
          name: 'Baremetal Deploy'
          condition: ALWAYS
          projects:
            - name: 'apex-deploy-baremetal-{stream}'
              node-parameters: false
              current-parameters: true
              predefined-parameters: |
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=
                OPNFV_CLEAN=yes
                DEPLOY_SCENARIO={verify-scenario}
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false
      - multijob:
          name: CPERF
          condition: SUCCESSFUL
          projects:
            - name: 'cperf-apex-intel-pod2-daily-master'
              node-parameters: true
              current-parameters: false
              predefined-parameters:
                DEPLOY_SCENARIO={verify-scenario}
              kill-phase-on: NEVER
              abort-all-job: false
              git-revision: false

# Deploy job
- job-template:
    name: 'apex-deploy-{platform}-{stream}'

    concurrent: true

    disabled: false
    quiet-period: 30
    scm:
      - git-scm-gerrit

    wrappers:
      - timeout:
          timeout: 140
          fail: true

    parameters:
      - '{project}-{platform}-{stream}-defaults'
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
      - string:
          name: DEPLOY_SCENARIO
          default: '{verify-scenario}'
          description: "Scenario to deploy with."
      # yamllint disable rule:line-length
      - string:
          name: OPNFV_CLEAN
          default: 'no'
          description: "Use yes in lower case to invoke clean. Indicates if the deploy environment should be cleaned before deployment"

    # yamllint enable rule:line-length
    properties:
      - logrotate-default
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-deploy.*'
            - 'functest.*'
            - 'yardstick.*'
            - 'dovetail.*'
            - 'storperf.*'
            - 'odl-netvirt.*'
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - description-setter:
          description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
      - 'apex-download-artifact'
      - 'apex-deploy'
      - 'clean-workspace'


# Virtual Deploy and Test
- job-template:
    name: 'apex-virtual-{stream}'

    project-type: 'multijob'

    concurrent: true

    disabled: false

    scm:
      - git-scm-gerrit

    parameters:
      - '{project}-defaults'
      - '{project}-virtual-{stream}-defaults'
      - 'functest-suite-parameter'
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
      - string:
          name: DEPLOY_SCENARIO
          default: '{verify-scenario}'
          description: "Scenario to deploy with."
      - string:
          name: ARTIFACT_VERSION
          default: dev
          description: "Used for overriding the ARTIFACT_VERSION"

    properties:
      - logrotate-default
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-runner.*'
            - 'apex-run.*'
            - 'apex-virtual-.*'
            - 'apex-verify-gate-.*'
            - 'odl-netvirt.*'
            - 'apex-.*-promote.*'
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - description-setter:
          description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
      - multijob:
          name: deploy-virtual
          condition: SUCCESSFUL
          projects:
            - name: 'apex-deploy-virtual-{stream}'
              current-parameters: false
              predefined-parameters: |
                ARTIFACT_VERSION=$ARTIFACT_VERSION
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                OPNFV_CLEAN=yes
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                PROMOTE=$PROMOTE
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: true
      - multijob:
          name: functest-smoke
          condition: ALWAYS
          projects:
            - name: 'functest-apex-virtual-suite-{stream}'
              current-parameters: false
              predefined-parameters: |
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                FUNCTEST_MODE=$FUNCTEST_MODE
                FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: true
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false
      - multijob:
          name: apex-fetch-logs
          projects:
            - name: 'apex-fetch-logs-{stream}'
              current-parameters: false
              predefined-parameters: |
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: true
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false

# Baremetal Deploy and Test
- job-template:
    name: 'apex-{scenario}-baremetal-{scenario_stream}'

    project-type: 'multijob'

    disabled: false

    scm:
      - git-scm

    parameters:
      - '{project}-defaults'
      - '{project}-baremetal-{scenario_stream}-defaults'
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
      - string:
          name: DEPLOY_SCENARIO
          default: '{scenario}'
          description: "Scenario to deploy with."

    properties:
      - logrotate-default
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-verify.*'
            - 'apex-runner.*'
            - 'apex-.*-promote.*'
            - 'apex-run.*'
            - 'apex-.+-baremetal-.+'
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - description-setter:
          description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
      - multijob:
          name: 'Baremetal Deploy'
          condition: SUCCESSFUL
          execution-type: SEQUENTIALLY
          projects:
            - name: 'apex-deploy-baremetal-{scenario_stream}'
              node-parameters: true
              current-parameters: true
              predefined-parameters: |
                OPNFV_CLEAN=yes
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false
            - name: 'apex-fetch-logs-{scenario_stream}'
              current-parameters: true
              predefined-parameters: |
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=
              node-parameters: true
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false
      - shell:
          !include-raw-escape: ./apex-functest-scenario.sh
      - inject:
          properties-file: functest_scenario
          override-build-parameters: true
      - multijob:
          name: 'OPNFV Test Suite'
          condition: ALWAYS
          projects:
            - name: 'apex-testsuite-{scenario}-baremetal-{scenario_stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters: |
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                DOCKER_TAG=$DOCKER_TAG
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false
      - multijob:
          name: apex-fetch-logs
          projects:
            - name: 'apex-fetch-logs-{scenario_stream}'
              current-parameters: true
              predefined-parameters: |
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=
              node-parameters: true
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false
    publishers:
      - groovy-postbuild:
          script:
            !include-raw-escape: ./update-build-result.groovy

# Baremetal test job
- job-template:
    name: 'apex-testsuite-{scenario}-baremetal-{scenario_stream}'

    project-type: 'multijob'

    disabled: false

    parameters:
      - '{project}-defaults'
      - '{project}-baremetal-{scenario_stream}-defaults'
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
      - string:
          name: DEPLOY_SCENARIO
          default: '{scenario}'
          description: "Scenario to deploy with."
      - string:
          name: DOCKER_TAG
          default: ''
          description: Default docker tag to pass to functest

    properties:
      - logrotate-default
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-verify.*'
            - 'apex-runner.*'
            - 'apex-run.*'
            - 'apex-testsuite-.+-baremetal-.+'
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - description-setter:
          description: "Testing on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
      - multijob:
          name: Functest
          condition: ALWAYS
          projects:
            - name: 'functest-apex-baremetal-daily-{scenario_stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters: |
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                DOCKER_TAG=$DOCKER_TAG
              kill-phase-on: NEVER
              abort-all-job: false
              git-revision: false
      - multijob:
          name: Yardstick
          condition: ALWAYS
          projects:
            - name: 'yardstick-apex-baremetal-daily-{scenario_stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters:
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              kill-phase-on: NEVER
              abort-all-job: false
              git-revision: false
      - multijob:
          name: Dovetail-default-mandatory
          condition: ALWAYS
          projects:
            - name: 'dovetail-apex-baremetal-default-mandatory-{scenario_stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters:
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              kill-phase-on: NEVER
              enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/"
              abort-all-job: false
              git-revision: false
      - multijob:
          name: Dovetail-default-optional
          condition: ALWAYS
          projects:
            - name: 'dovetail-apex-baremetal-default-optional-{scenario_stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters:
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              kill-phase-on: NEVER
              enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/"
              abort-all-job: false
              git-revision: false
      - multijob:
          name: Dovetail-proposed_tests
          condition: ALWAYS
          projects:
            - name: 'dovetail-apex-baremetal-proposed_tests-optional-{scenario_stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters:
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              kill-phase-on: NEVER
              enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/"
              abort-all-job: false
              git-revision: false
      - multijob:
          name: StorPerf
          condition: ALWAYS
          projects:
            - name: 'storperf-apex-baremetal-daily-{scenario_stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters:
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-nosdn-nofeature-ha/"
              kill-phase-on: NEVER
              abort-all-job: false
              git-revision: false
# Build status is always success due conditional plugin prefetching
# build status before multijob phases execute
#        - conditional-step:
#            condition-kind: current-status
#            condition-worst: SUCCESS
#            condtion-best: SUCCESS
#            on-evaluation-failure: mark-unstable
#            steps:
#                - shell: 'echo "Tests Passed"'

- job-template:
    name: 'apex-daily-{stream}'

    # Job template for daily build
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    project-type: 'multijob'

    disabled: '{obj:disable_daily}'

    scm:
      - git-scm

    parameters:
      - '{project}-defaults'
      - '{project}-baremetal-{stream}-defaults'
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'

    properties:
      - logrotate-default
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-daily.*'

    triggers:
      - 'apex-{stream}'

    builders:
      - multijob:
          name: build
          condition: SUCCESSFUL
          projects:
            - name: 'apex-build-{stream}'
              current-parameters: false
              predefined-parameters: |
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: true
      - multijob:
          name: 'Verify and upload ISO'
          condition: SUCCESSFUL
          projects:
            - name: 'apex-verify-iso-{stream}'
              current-parameters: false
              predefined-parameters: |
                BUILD_DIRECTORY=$WORKSPACE/../apex-build-{stream}/.build
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: true
      - apex-builder-{stream}

# snapshot info fetch
- job-template:
    name: 'apex-fetch-snap-info'

    disabled: false

    parameters:
      - '{project}-defaults'

    builders:
      - shell:
          !include-raw-escape: ./apex-fetch-snap-info.sh

# snapshot create
- job-template:
    name: 'apex-create-snapshot'

    disabled: false

    parameters:
      - '{project}-defaults'

    builders:
      - shell:
          !include-raw-escape: ./apex-snapshot-create.sh

# snapshot upload
- job-template:
    name: 'apex-upload-snapshot'

    disabled: false

    parameters:
      - '{project}-defaults'

    builders:
      - inject:
          properties-content: ARTIFACT_TYPE=snapshot
      - 'apex-upload-artifact'

# CSIT promote
- job-template:
    name: 'apex-{snap_type}-promote-daily-{stream}-os-{os_version}-{topology}'

    # Job template for promoting CSIT Snapshots
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{virtual-slave}'
    project-type: 'multijob'
    disabled: '{disable_promote}'

    scm:
      - git-scm

    parameters:
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
      - string:
          name: ARTIFACT_VERSION
          default: dev
          description: "Used for overriding the ARTIFACT_VERSION"
      - string:
          name: PROMOTE
          default: 'True'
          description: "Used for overriding the PROMOTE"
      - string:
          name: GS_URL
          default: 'artifacts.opnfv.org/apex/{os_version}/{topology}'
          description: "User for overriding GS_URL from apex params"
      - string:
          name: OS_VERSION
          default: '{os_version}'
          description: OpenStack version short name
      - string:
          name: ODL_BRANCH
          default: '{odl_branch}'
          description: ODL branch being used
      - string:
          name: FORCE_PROMOTE
          default: 'False'
          description: "Used to force promotion and skip CSIT"
      - string:
          name: SNAP_TYPE
          default: '{snap_type}'
          description: Type of snapshot to promote
    properties:
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-verify.*'
            - 'apex-runner.*'
            - 'apex-daily.*'
            - 'apex-.*-promote.*'
            - 'odl-netvirt.*'
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    triggers:
      - '{stream}-{snap_type}-{os_version}'

    builders:
      - multijob:
          name: apex-virtual-deploy
          condition: SUCCESSFUL
          projects:
            - name: 'apex-deploy-virtual-{stream}'
              current-parameters: true
              predefined-parameters: |
                DEPLOY_SCENARIO=os-{sdn}-{os_scenario}-{topology}-{snap_type}
                OPNFV_CLEAN=yes
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: true
      - multijob:
          name: fetch snapshot info
          condition: SUCCESSFUL
          projects:
            - name: 'apex-fetch-snap-info'
              current-parameters: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false
      - multijob:
          name: test phase
          condition: SUCCESSFUL
          execution-type: SEQUENTIALLY
          projects:
            - name: cperf-apex-csit-master
              predefined-parameters: |
                ODL_BRANCH=$ODL_BRANCH
                RC_FILE_PATH=/tmp/snap/overcloudrc
                NODE_FILE_PATH=/tmp/snap/node.yaml
                SSH_KEY_PATH=/tmp/snap/id_rsa
                ODL_CONTAINERIZED=true
                OS_VERSION=$OS_VERSION
                SKIP_CSIT=$FORCE_PROMOTE
                SNAP_TYPE=$SNAP_TYPE
              node-parameters: true
              kill-phase-on: NEVER
              abort-all-job: false
              enable-condition: "def m = '$SNAP_TYPE' ==~ /csit/"
            - name: cperf-upload-logs-csit
              predefined-parameters: |
                ODL_BRANCH=$ODL_BRANCH
                OS_VERSION=$OS_VERSION
                SNAP_TYPE=$SNAP_TYPE
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: false
              enable-condition: "def m = '$SNAP_TYPE' ==~ /csit/"
            - name: 'functest-apex-virtual-suite-{stream}'
              current-parameters: false
              predefined-parameters: |
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                DOCKER_TAG=$DOCKER_TAG
                FUNCTEST_SUITE_NAME=tempest_smoke
                FUNCTEST_MODE=testcase
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: true
              kill-phase-on: NEVER
              enable-condition: "def m = '$SNAP_TYPE' ==~ /functest/"
              abort-all-job: true
              git-revision: false
            - name: 'apex-fetch-logs-{stream}'
              current-parameters: false
              predefined-parameters: |
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: true
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false
      - multijob:
          name: create snapshot
          condition: SUCCESSFUL
          projects:
            - name: 'apex-create-snapshot'
              current-parameters: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false
      - multijob:
          name: upload snapshot
          condition: SUCCESSFUL
          projects:
            - name: 'apex-upload-snapshot'
              current-parameters: true
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false

# FDIO promote
- job-template:
    name: 'apex-fdio-promote-daily-{stream}'

    # Job template for promoting CSIT Snapshots
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{virtual-slave}'
    project-type: 'multijob'
    disabled: false

    scm:
      - git-scm

    parameters:
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'

    properties:
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-verify.*'
            - 'apex-deploy.*'
            - 'apex-runner.*'
            - 'apex-daily.*'

    builders:
      - multijob:
          name: build
          condition: SUCCESSFUL
          projects:
            - name: 'apex-build-{stream}'
              current-parameters: false
              predefined-parameters: |
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              node-parameters: false
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: true
      - multijob:
          name: deploy-virtual
          condition: SUCCESSFUL
          projects:
            - name: 'apex-deploy-virtual-{stream}'
              current-parameters: false
              predefined-parameters: |
                DEPLOY_SCENARIO=os-odl_netvirt-fdio-noha
                OPNFV_CLEAN=yes
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                PROMOTE=True
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false
      - multijob:
          name: create snapshot
          condition: SUCCESSFUL
          projects:
            - name: 'apex-create-snapshot'
              current-parameters: false
              predefined-parameters: |
                SNAP_TYPE=fdio
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false
      - multijob:
          name: upload snapshot
          condition: SUCCESSFUL
          projects:
            - name: 'apex-upload-snapshot'
              current-parameters: false
              predefined-parameters: |
                SNAP_TYPE=fdio
              node-parameters: true
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false

# Flex job
- job-template:
    name: 'apex-flex-daily-os-nosdn-nofeature-ha-{stream}'

    project-type: 'multijob'

    disabled: true

    node: 'flex-pod2'

    scm:
      - git-scm

    triggers:
      - 'apex-{stream}'

    parameters:
      - '{project}-defaults'
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - apex-parameter:
          gs-pathname: '{gs-pathname}'
      - string:
          name: DEPLOY_SCENARIO
          default: 'os-nosdn-nofeature-ha'
          description: "Scenario to deploy with."
      - string:
          name: GIT_BASE
          default: https://gerrit.opnfv.org/gerrit/$PROJECT
          description: 'Git URL to use on this Jenkins Slave'
      - string:
          name: SSH_KEY
          default: /root/.ssh/id_rsa
          description: 'SSH key to use for Apex'

    properties:
      - logrotate-default
      - build-blocker:
          use-build-blocker: true
          blocking-level: 'NODE'
          blocking-jobs:
            - 'apex-verify.*'
            - 'apex-runner.*'
            - 'apex-.*-promote.*'
            - 'apex-run.*'
            - 'apex-.+-baremetal-.+'
      - throttle:
          max-per-node: 1
          max-total: 10
          option: 'project'

    builders:
      - description-setter:
          description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
      - multijob:
          name: 'Baremetal Deploy'
          condition: SUCCESSFUL
          projects:
            - name: 'apex-deploy-baremetal-{stream}'
              node-parameters: true
              current-parameters: true
              predefined-parameters: |
                OPNFV_CLEAN=yes
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              kill-phase-on: FAILURE
              abort-all-job: true
              git-revision: false
      - multijob:
          name: Yardstick
          condition: ALWAYS
          projects:
            - name: 'yardstick-apex-baremetal-daily-{stream}'
              node-parameters: true
              current-parameters: false
              predefined-parameters:
                DEPLOY_SCENARIO=$DEPLOY_SCENARIO
              kill-phase-on: NEVER
              abort-all-job: false
              git-revision: false


########################
# parameter macros
########################
- parameter:
    name: apex-parameter
    parameters:
      - string:
          name: ARTIFACT_NAME
          default: 'latest'
          description: "RPM Artifact name that will be appended to GS_URL to deploy a specific artifact"
      - string:
          name: ARTIFACT_VERSION
          default: 'daily'
          description: "Artifact version type"
      - string:
          name: BUILD_DIRECTORY
          default: $WORKSPACE/.build
          description: "Directory where the build artifact will be located upon the completion of the build."
      - string:
          name: CACHE_DIRECTORY
          default: $HOME/opnfv/apex-cache{gs-pathname}
          description: "Directory where the cache to be used during the build is located."
      # yamllint disable rule:line-length
      - string:
          name: GIT_BASE
          default: https://gerrit.opnfv.org/gerrit/$PROJECT
          description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW."
      # yamllint enable rule:line-length
      - string:
          name: GS_PATHNAME
          default: '{gs-pathname}'
          description: "Version directory where opnfv artifacts are stored in gs repository"
      - string:
          name: GS_URL
          default: $GS_BASE{gs-pathname}
          description: "URL to Google Storage."
      - string:
          name: PROMOTE
          default: 'False'
          description: "Flag to know if we should promote/upload snapshot artifacts."

########################
# builder macros
########################
{% for stream in scenarios %}
# {{ stream }} Builder
- builder:
    name: apex-builder-{{ stream }}
    builders:
      - multijob:
          name: Baremetal Deploy and Test Phase
          condition: SUCCESSFUL
          projects:
{%- for scenario in scenarios[stream] %}
            - name: 'apex-{{ scenario }}-baremetal-{{ stream }}'
              node-parameters: false
              current-parameters: false
              predefined-parameters: |
                OPNFV_CLEAN=yes
              kill-phase-on: NEVER
              abort-all-job: true
              git-revision: false
{%- endfor %}
{% endfor -%}

- builder:
    name: 'apex-upload-artifact'
    builders:
      - shell:
          !include-raw: ./apex-upload-artifact.sh

- builder:
    name: 'apex-download-artifact'
    builders:
      - shell:
          !include-raw: ./apex-download-artifact.sh

- builder:
    name: 'apex-deploy'
    builders:
      - shell:
          !include-raw: ./apex-deploy.sh

- builder:
    name: 'apex-fetch-logs'
    builders:
      - shell:
          !include-raw: ./apex-fetch-logs.sh

#######################
# trigger macros
# timed is in format: 'min hour daymonth month dayweek'
########################
- trigger:
    name: 'apex-master'
    triggers:
      - timed: '0 0 1-31/2 * *'

- trigger:
    name: 'apex-hunter'
    triggers:
      - timed: '0 4 2-30/2 * *'

- trigger:
    name: 'apex-gambia'
    triggers:
      - timed: '0 4 2-30/2 * *'

- trigger:
    name: 'apex-fraser'
    triggers:
      - timed: '0 0 2-30/2 * *'

- trigger:
    name: 'apex-euphrates'
    triggers:
      - timed: '0 0 2-30/2 * *'

- trigger:
    name: 'apex-danube'
    triggers:
      - timed: '0 3 1 1 7'

- trigger:
    name: 'master-csit-master'
    triggers:
      - timed: '0 5 * * *'

- trigger:
    name: 'master-csit-rocky'
    triggers:
      - timed: '0 5 * * *'

- trigger:
    name: 'master-csit-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'hunter-csit-master'
    triggers:
      - timed: ''

- trigger:
    name: 'hunter-csit-rocky'
    triggers:
      - timed: '0 5 * * *'

- trigger:
    name: 'hunter-csit-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'gambia-csit-master'
    triggers:
      - timed: ''

- trigger:
    name: 'gambia-csit-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'gambia-csit-queens'
    triggers:
      - timed: '0 5 * * *'

- trigger:
    name: 'fraser-csit-master'
    triggers:
      - timed: ''

- trigger:
    name: 'fraser-csit-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'fraser-csit-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'euphrates-csit-master'
    triggers:
      - timed: ''

- trigger:
    name: 'euphrates-csit-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'euphrates-csit-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'danube-csit-master'
    triggers:
      - timed: ''

- trigger:
    name: 'danube-csit-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'danube-csit-queens'
    triggers:
      - timed: ''
- trigger:
    name: 'master-functest-master'
    triggers:
      - timed: '0 3 * * *'

- trigger:
    name: 'master-functest-rocky'
    triggers:
      - timed: '0 3 * * *'

- trigger:
    name: 'master-functest-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'hunter-functest-master'
    triggers:
      - timed: ''

- trigger:
    name: 'hunter-functest-rocky'
    triggers:
      - timed: '0 3 * * *'

- trigger:
    name: 'hunter-functest-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'gambia-functest-master'
    triggers:
      - timed: ''

- trigger:
    name: 'gambia-functest-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'gambia-functest-queens'
    triggers:
      - timed: '0 3 * * *'

- trigger:
    name: 'fraser-functest-master'
    triggers:
      - timed: ''

- trigger:
    name: 'fraser-functest-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'fraser-functest-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'euphrates-functest-master'
    triggers:
      - timed: ''

- trigger:
    name: 'euphrates-functest-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'euphrates-functest-queens'
    triggers:
      - timed: ''

- trigger:
    name: 'danube-functest-master'
    triggers:
      - timed: ''

- trigger:
    name: 'danube-functest-rocky'
    triggers:
      - timed: ''

- trigger:
    name: 'danube-functest-queens'
    triggers:
      - timed: ''