- job-template:
    name: 'check-dg-tempest-dsvm-full'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - experimental-devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export RE_EXEC=true
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log
      - zuul-swift-devstack-logs-with-console

- job-template:
    name: 'check-dg-tempest-dsvm-full-reexec'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - experimental-devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log
      - zuul-swift-devstack-logs-with-console

- job-template:
    name: 'check-dg-hooks-dsvm'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 60
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true

          # place calls for all hooks in here
          function pre_test_hook {{
              echo "I'm totally an awesome pre_test_hook"
          }}
          export -f pre_test_hook

          function gate_hook {{
              echo "I'm totally an awesome gate_hook"
          }}
          export -f gate_hook

          function post_test_hook {{
              echo "I'm totally an awesome post_test_hook"
          }}
          export -f post_test_hook

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - print-node-uuid
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

# tempest-dsvm-src-{name} - run a devstack tempest job, but use the
# zuul git ref for name instead of the released library version.
#
# Purpose: this allows libraries to test their proposed commits to
# ensure they don't break OpenStack on their next release. It is
# expected to eventually be part of all library jobs in OpenStack, as
# the main tempest-dsvm jobs will be using only released versions of
# libraries.
- job-template:
    name: '{pipeline}-tempest-dsvm-src-{name}{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          export DEVSTACK_PROJECT_FROM_GIT={name}
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

# tempest-dsvm-neutron-src-{name} - run a devstack tempest job, but
# use the zuul git ref for name instead of the released library
# version. This uses neutron instead of nova-network.
#
# Purpose: this allows libraries to test their proposed commits to
# ensure they don't break OpenStack on their next release. It is
# expected to eventually be part of all library jobs in OpenStack, as
# the main tempest-dsvm jobs will be using only released versions of
# libraries.
#
# Expiration: once neutron replaces nova-network as the default, this
# can be removed.
- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-src-{name}{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          # neutron icehouse does not pass tempest full reliably
          if [ "$BRANCH_OVERRIDE" != "stable/icehouse" ] ; then
              export DEVSTACK_GATE_TEMPEST_FULL=1
          fi

          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          export DEVSTACK_PROJECT_FROM_GIT={name}
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

# tempest-dsvm-largeops-src-{name} - run a devstack tempest job, but
# use the zuul git ref for name instead of the released library
# version.
#
# Purpose: this allows libraries to test their proposed commits to
# ensure they don't break OpenStack on their next release. It is
# expected to eventually be part of all library jobs in OpenStack, as
# the main tempest-dsvm jobs will be using only released versions of
# libraries.
#
# The large ops job uses a fake virt driver and a special set of
# tempest tests so that it can stress the API layers in OpenStack
# without being artificially limited by the rate at which actual
# virtual machines can boot. It is important for libraries like
# rootwrap, olso.db, and oslo.messaging that can create performance
# regressions in the API layer.
- job-template:
    name: '{pipeline}-tempest-dsvm-largeops-src-{name}{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 65
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=60
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NO_SERVICES=1
          export ENABLED_SERVICES=n-api,n-crt,n-obj,n-cpu,n-sch,n-cond,g-api,g-reg,key,n-net
          export DEVSTACK_GATE_TEMPEST_LARGE_OPS=100
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          export DEVSTACK_PROJECT_FROM_GIT={name}
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-master-dsvm-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          export OVERRIDE_TEMPEST_PROJECT_BRANCH=master
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-full-non-isolated{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_DISABLE_TENANT_ISOLATION=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-full-non-isolated{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 185
      - timestamps

    builders:
      - link-logs
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=180
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_TEMPEST_DISABLE_TENANT_ISOLATION=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-full-non-admin{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 185
      - timestamps

    builders:
      - link-logs
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=180
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_TEMPEST_DISABLE_TENANT_ISOLATION=1
          export DEVSTACK_LOCAL_CONFIG="TEMPEST_HAS_ADMIN=False"
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-neutron{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_SMOKE_SERIAL=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-master-dsvm-neutron{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_SMOKE_SERIAL=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          export OVERRIDE_TEMPEST_PROJECT_BRANCH=master
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-dvr{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_NEUTRON_DVR=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-pg-full{branch-designator}'
    node: '{node}'

    wrappers:
      - timeout:
          timeout: 125
          fail: true
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_POSTGRES=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_CONFIGDRIVE=0
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-nova-v21-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_NOVA_REPLACE_V2_ENDPOINT_WITH_V21_API=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

# dsvm-updown builds up an devstack and shuts it down, this ensures
# that things like unstack.sh and clean.sh work correctly. This should
# only be run on the devstack tree.
- job-template:
    name: '{pipeline}-devstack-dsvm-updown{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 65
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=60
          export DEVSTACK_GATE_TROVE=1
          export DEVSTACK_GATE_HEAT=1
          export DEVSTACK_GATE_SAHARA=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          # ensure that the unstack.sh and clean.sh scripts run
          # without errors, so that we can
          function post_test_hook {{
              cd /opt/stack/new/devstack
              ./gate/updown.sh
          }}
          export -f post_test_hook

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-nova-v21-neutron-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_NOVA_REPLACE_V2_ENDPOINT_WITH_V21_API=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-devstack-dsvm-cells{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 65
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=60
          export DEVSTACK_GATE_CELLS=1
          export DEVSTACK_GATE_EXERCISES=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- builder:
    # NOTE(adam_g): This is a temporary macro until we can define the Ironic d-s-g job in a
    # standard, minimal fashion.
    name: devstack-virtual-ironic
    builders:
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_POSTGRES={postgres}
          export DEVSTACK_GATE_IRONIC=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_VIRT_DRIVER=ironic
          export DEVSTACK_GATE_IRONIC_DRIVER={deploy_driver}
          export DEVSTACK_GATE_IRONIC_BUILD_RAMDISK={build-ramdisk}
          export TEMPEST_CONCURRENCY=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi

          export IRONICCLIENT_FROM_SOURCE={client-from-source}
          if [ "$IRONICCLIENT_FROM_SOURCE" == "1" ]; then
              export DEVSTACK_PROJECT_FROM_GIT="python-ironicclient"
          fi

          # The IPA ramdisk need at least 1GB of RAM to run
          export DEVSTACK_LOCAL_CONFIG="IRONIC_VM_SPECS_RAM=1024"$'\n'"IRONIC_VM_COUNT=1"

          export DEPLOY_WITH_IPA={deploy-with-ipa}
          if [ "$DEPLOY_WITH_IPA" == "1" ] ; then
              export DEVSTACK_LOCAL_CONFIG+=$'\n'"IRONIC_DEPLOY_DRIVER_ISCSI_WITH_IPA=True"
          fi

          # Run only baremetal tests
          export DEVSTACK_GATE_TEMPEST_REGEX="baremetal"

          if $(grep -Eqs 'Ubuntu 12.04' /etc/lsb-release); then
              # pull in libvirt /w ovs support from ubuntu cloud-archive for
              # Precise.
              sudo apt-get update
              sudo add-apt-repository cloud-archive:icehouse
              sudo apt-get update
          fi

          # prevent sshd from jumping to the ovs bridge on Precise instances.
          IP=$(ip addr show eth0 | grep 'inet ' | sed 's/inet \([0-9\.]*\)\/.*/\1/' | tr -d ' ')
          sudo sed -i "s/#ListenAddress 0.0.0.0/ListenAddress $IP/" /etc/ssh/sshd_config
          sudo service ssh restart

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

- job-template:
    name: '{pipeline}-grenade-dsvm-trove{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_GRENADE=pullup
          export DEVSTACK_GATE_TROVE=1
          export TEMPEST_CONCURRENCY=2
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-ironic-pxe_ssh{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - devstack-virtual-ironic:
          postgres: 0
          build-ramdisk: 1
          deploy_driver: pxe_ssh
          deploy-with-ipa: 0
          client-from-source: 0
          branch-override: '{branch-override}'
    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-ironic-pxe_ssh-postgres{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - devstack-virtual-ironic:
          postgres: 1
          build-ramdisk: 1
          deploy_driver: pxe_ssh
          deploy-with-ipa: 0
          client-from-source: 0
          branch-override: '{branch-override}'

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-ironic-parallel{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_IRONIC=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_VIRT_DRIVER=ironic
          export TEMPEST_CONCURRENCY=2
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          # Run only baremetal tests
          export DEVSTACK_GATE_TEMPEST_REGEX="baremetal"

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-ironic-pxe_ipa{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - devstack-virtual-ironic:
          postgres: 0
          build-ramdisk: 0
          deploy_driver: pxe_ssh
          deploy-with-ipa: 1
          client-from-source: 0
          branch-override: '{branch-override}'

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-ironic-pxe_ipa-src{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - devstack-virtual-ironic:
          postgres: 0
          build-ramdisk: 1
          deploy_driver: pxe_ssh
          deploy-with-ipa: 1
          client-from-source: 0
          branch-override: '{branch-override}'

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-ironic-agent_ssh{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - devstack-virtual-ironic:
          postgres: 0
          build-ramdisk: 0
          deploy_driver: agent_ssh
          deploy-with-ipa: 0
          client-from-source: 0
          branch-override: '{branch-override}'
    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-ironic-agent_ssh-src{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - devstack-virtual-ironic:
          postgres: 0
          build-ramdisk: 1
          deploy_driver: agent_ssh
          deploy-with-ipa: 1
          client-from-source: 0
          branch-override: '{branch-override}'
    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-python-ironicclient-src{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - devstack-virtual-ironic:
          postgres: 0
          build-ramdisk: 1
          deploy_driver: pxe_ssh
          deploy-with-ipa: 0
          client-from-source: 1
          branch-override: '{branch-override}'
    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-cells{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_CELLS=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi

          # Construct a regex to use when limiting scope of tempest
          # to avoid features unsupported by Nova Cells.
          r="^(?!.*"
          # skip security group tests
          r="$r(?:tempest\.api\.compute\.security_groups.*)"
          # skip test that requires security groups
          r="$r|(?:tempest\.thirdparty\.boto\.test_ec2_instance_run\.InstanceRunTest\.test_compute_with_volumes*)"
          # skip aggregates tests
          r="$r|(?:tempest\.api\.compute\.admin\.test_aggregates*)|(?:tempest\.scenario\.test_aggregates_basic_ops*)"
          # skip availability zone tests
          r="$r|(?:(tempest\.api\.compute\.)(servers\.|admin\.)(test_availability_zone*))"
          # skip fixed-ip tests
          r="$r|(?:tempest\.api\.compute\.admin\.test_fixed_ips*)"
          # skip floating-ip tests
          r="$r|(?:tempest\.api\.compute\.floating_ips*)"
          # exclude the slow tag
          r="$r|(?:.*\[.*\bslow\b.*\])"
          # skip current regressions
          r="$r|(?:tempest\.api\.compute\.admin\.test_networks\.NetworksTest\.test_get_network*)"
          r="$r|(?:tempest\.api\.compute\.admin\.test_networks\.NetworksTest\.test_list_all_networks*)"
          r="$r|(?:tempest\.api\.compute\.admin\.test_migrations\.MigrationsAdminTest\.test_list_migrations_in_flavor_resize_situation*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_server_actions\.ServerActionsTestJSON\.test_resize_server_confirm*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_server_actions\.ServerActionsTestJSON\.test_resize_server_confirm_from_stopped*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_server_actions\.ServerActionsTestJSON\.test_resize_server_revert*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_server_actions\.ServerActionsTestJSON\.test_shelve_unshelve_server*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_server_rescue\.ServerRescueTestJSON*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_disk_config\.ServerDiskConfigTestJSON\.test_resize_server_from_auto_to_manual*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_disk_config\.ServerDiskConfigTestJSON\.test_resize_server_from_manual_to_auto*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_create_server\.ServersTestJSON\.test_create_server_with_scheduler_hint_group*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_servers_negative\.ServersNegativeTestJSON\.test_shelve_shelved_server*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_create_server\.ServersTestManualDisk\.test_create_server_with_scheduler_hint_group*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_servers\.ServersTestJSON\.test_create_specify_keypair*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_virtual_interfaces\.VirtualInterfacesTestJSON\.test_list_virtual_interfaces*)"
          r="$r|(?:tempest\.api\.compute\.test_networks\.NetworksTestJSON\.test_list_networks*)"
          r="$r|(?:tempest\.scenario\.test_minimum_basic\.TestMinimumBasicScenario\.test_minimum_basic_scenario*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_delete_server\.DeleteServersTestJSON\.test_delete_server_while_in_verify_resize_state*)"
          r="$r|(?:tempest\.api\.compute\.servers\.test_server_rescue_negative\.ServerRescueNegativeTestJSON*)"
          r="$r|(?:tempest\.scenario\.test_encrypted_cinder_volumes\.TestEncryptedCinderVolumes\.test_encrypted_cinder_volumes_cryptsetup*)"
          r="$r|(?:tempest\.scenario\.test_encrypted_cinder_volumes\.TestEncryptedCinderVolumes\.test_encrypted_cinder_volumes_luks*)"
          r="$r|(?:tempest\.scenario\.test_server_advanced_ops\.TestServerAdvancedOps\.test_resize_server_confirm*)"
          r="$r|(?:tempest\.scenario\.test_shelve_instance\.TestShelveInstance\.test_shelve_instance*)"
          r="$r|(?:tempest\.thirdparty\.boto\.test_ec2_network\.EC2NetworkTest\.test_disassociate_not_associated_floating_ip*)"
          r="$r|(?:tempest\.scenario\.test_server_basic_ops\.TestServerBasicOps\.test_server_basicops*)"
          r="$r|(?:tempest\.scenario\.test_snapshot_pattern\.TestSnapshotPattern\.test_snapshot_pattern*)"
          r="$r|(?:tempest\.api\.compute\.admin\.test_hosts\.HostsAdminTestJSON\.test_show_host_detail*)"
          r="$r|(?:tempest\.api\.compute\.test_tenant_networks\.NetworksTestJSON\.test_list_show_tenant_networks*)"
          r="$r|(?:tempest\.scenario\.test_volume_boot_pattern\.TestVolumeBootPattern\.test_volume_boot_pattern*)"
          r="$r|(?:tempest\.scenario\.test_volume_boot_pattern\.TestVolumeBootPatternV2\.test_volume_boot_pattern*)"
          # https://bugs.launchpad.net/nova/+bug/1445628
          r="$r|(?:tempest\.thirdparty\.boto\.test_ec2_instance_run\.InstanceRunTest\.test_run_idempotent_instances*)"
          # https://bugs.launchpad.net/nova/+bug/1445629
          r="$r|(?:tempest\.api\.compute.servers\.test_disk_config\.ServerDiskConfigTestJSON\.test_rebuild_server_with_manual_disk_config*)"
          # https://bugs.launchpad.net/nova/+bug/1445631
          r="$r|(?:tempest\.api\.compute\.servers\.test_server_actions\.ServerActionsTestJSON\\.test_rebuild_server_in_stop_state*)"
          r="$r).*$"
          export DEVSTACK_GATE_TEMPEST_REGEX="$r"

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-large-ops{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 65
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=60
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NO_SERVICES=1
          export ENABLED_SERVICES=n-api,n-crt,n-obj,n-cpu,n-sch,n-cond,g-api,g-reg,key,n-net
          export DEVSTACK_GATE_TEMPEST_LARGE_OPS=100
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-large-ops-testing{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 65
      - timestamps

    builders:
      - link-logs
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=60
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NO_SERVICES=1
          export ENABLED_SERVICES=n-api,n-crt,n-obj,n-cpu,n-sch,n-cond,g-api,g-reg,key,n-net
          export DEVSTACK_GATE_TEMPEST_LARGE_OPS=100
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-large-ops{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 65
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=60
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NO_SERVICES=1
          export ENABLED_SERVICES=n-api,n-crt,n-obj,n-cpu,n-sch,n-cond,g-api,g-reg,key
          export DEVSTACK_GATE_TEMPEST_LARGE_OPS=100
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-large-ops-testing{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 65
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=60
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NO_SERVICES=1
          export ENABLED_SERVICES=n-api,n-crt,n-obj,n-cpu,n-sch,n-cond,g-api,g-reg,key
          export DEVSTACK_GATE_TEMPEST_LARGE_OPS=100
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-postgres-zeromq-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_POSTGRES=1
          export DEVSTACK_GATE_MQ_DRIVER="zeromq"
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-postgres-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_POSTGRES=1
          export DEVSTACK_GATE_CONFIGDRIVE=0
          export DEVSTACK_GATE_ENABLE_HTTPD_MOD_WSGI_SERVICES=0
          export DEVSTACK_GATE_NOVA_API_METADATA_SPLIT=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-keystonev3-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 185
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=180
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_KEYSTONE_V3=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-keystonev3-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_KEYSTONE_V3=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-grenade-dsvm{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=pullup
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-grenade-dsvm-forward{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=forward
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-grenade-dsvm-neutron{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=pullup
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-grenade-dsvm-neutron-forward{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=forward
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-grenade-dsvm-partial-ncpu{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=partial-ncpu
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-grenade-dsvm-ironic{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=pullup
          export DEVSTACK_GATE_IRONIC=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_VIRT_DRIVER=ironic
          export TEMPEST_CONCURRENCY=2
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          # Run only baremetal tests
          export DEVSTACK_GATE_TEMPEST_REGEX="baremetal"
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-grenade-dsvm-partial-ironic{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=partial-ironic
          export DEVSTACK_GATE_IRONIC=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_VIRT_DRIVER=ironic
          export TEMPEST_CONCURRENCY=2
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-grenade-dsvm-ironic-sideways{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=sideways-ironic
          export DEVSTACK_GATE_IRONIC=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_VIRT_DRIVER=ironic
          export TEMPEST_CONCURRENCY=2
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-grenade-dsvm-neutron-sideways{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 130
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=0
          export DEVSTACK_GATE_GRENADE=sideways-neutron
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-all{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_ALL=1
          export DEVSTACK_GATE_NEUTRON=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-coverage{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_COVERAGE=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-stress{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_TEMPEST_STRESS=1
          export DEVSTACK_GATE_TEMPEST_STRESS_ARGS="-d 3600 -S -s -t tempest/stress/etc/stress-tox-job.json"
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-stress-keystonev3{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_TEMPEST_STRESS=1
          export DEVSTACK_GATE_TEMPEST_STRESS_ARGS="-d 3600 -S -s -t tempest/stress/etc/stress-tox-job.json"
          export DEVSTACK_GATE_KEYSTONE_V3=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-f{fedora-release}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job:
    name: 'check-tempest-dsvm-centos7'
    node: 'devstack-centos7'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log

- job-template:
    name: '{pipeline}-tempest-dsvm-multinode-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_CONFIGDRIVE=0
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          export DEVSTACK_GATE_TOPOLOGY="multinode"

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-neutron-multinode-full{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_NEUTRON=1
          export DEVSTACK_GATE_CONFIGDRIVE=0
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_NEUTRON_DVR=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          export DEVSTACK_GATE_TOPOLOGY="multinode"

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-full-ceph{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export DEVSTACK_GATE_CEPH=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


# A template for any project with a devstack-plugin to run the full
# tempest suite with their project/plugin enabled.
- job-template:
    name: '{pipeline}-tempest-dsvm-full-{plugin}{branch-designator}'
    node: 'devstack-precise || devstack-trusty'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_FULL=1
          export PROJECTS="{plugin-repo} $PROJECTS"
          export DEVSTACK_LOCAL_CONFIG="enable_plugin devstack-plugin-{plugin} git://git.openstack.org/{plugin-repo}"

          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job-template:
    name: '{pipeline}-tempest-dsvm-trove{branch-designator}'
    node: '{node}'

    wrappers:
      - build-timeout:
          timeout: 125
      - timestamps

    builders:
      - link-logs
      - net-info
      - devstack-checkout
      - shell: |
          #!/bin/bash -xe
          export PYTHONUNBUFFERED=true
          export DEVSTACK_GATE_TIMEOUT=120
          export DEVSTACK_GATE_TEMPEST=1
          export DEVSTACK_GATE_TEMPEST_REGEX="database"
          export DEVSTACK_GATE_TROVE=1
          export BRANCH_OVERRIDE={branch-override}
          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
          fi
          cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
          ./safe-devstack-vm-gate-wrap.sh

    publishers:
      - devstack-logs
      - console-log


- job:
    name: gate-devstack-gate-unittests
    node: 'bare-precise || bare-trusty'

    builders:
      - revoke-sudo
      - gerrit-git-prep
      - shell: "./run-tests.sh"

    publishers:
      - console-log


- job-group:
    name: devstack-gate-jobs
    jobs:
      - 'check-dg-tempest-dsvm-full'
      - 'check-dg-tempest-dsvm-full-reexec'
      - 'check-dg-hooks-dsvm'


- job-group:
    name: devstack-jobs
    jobs:
      - '{pipeline}-tempest-dsvm-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-src-{name}{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-src-{name}{branch-designator}'
      - '{pipeline}-tempest-dsvm-largeops-src-{name}{branch-designator}'
      - '{pipeline}-tempest-master-dsvm-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron{branch-designator}'
      - '{pipeline}-tempest-master-dsvm-neutron{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-dvr{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-pg-full{branch-designator}'
      - '{pipeline}-devstack-dsvm-cells{branch-designator}'
      - '{pipeline}-devstack-dsvm-updown{branch-designator}'
      - '{pipeline}-tempest-dsvm-cells{branch-designator}'
      - '{pipeline}-tempest-dsvm-large-ops{branch-designator}'
      - '{pipeline}-tempest-dsvm-large-ops-testing{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-large-ops{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-large-ops-testing{branch-designator}'
      - '{pipeline}-tempest-dsvm-postgres-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-postgres-zeromq-full{branch-designator}'
      - '{pipeline}-grenade-dsvm{branch-designator}'
      - '{pipeline}-grenade-dsvm-forward{branch-designator}'
      - '{pipeline}-grenade-dsvm-neutron{branch-designator}'
      - '{pipeline}-grenade-dsvm-neutron-forward{branch-designator}'
      - '{pipeline}-grenade-dsvm-partial-ncpu{branch-designator}'
      - '{pipeline}-grenade-dsvm-ironic{branch-designator}'
      - '{pipeline}-grenade-dsvm-ironic-sideways{branch-designator}'
      - '{pipeline}-grenade-dsvm-partial-ironic{branch-designator}'
      - '{pipeline}-grenade-dsvm-neutron-sideways{branch-designator}'
      - '{pipeline}-tempest-dsvm-ironic-pxe_ssh{branch-designator}'
      - '{pipeline}-tempest-dsvm-ironic-pxe_ssh-postgres{branch-designator}'
      - '{pipeline}-tempest-dsvm-ironic-agent_ssh{branch-designator}'
      - '{pipeline}-tempest-dsvm-ironic-agent_ssh-src{branch-designator}'
      - '{pipeline}-tempest-dsvm-ironic-pxe_ipa{branch-designator}'
      - '{pipeline}-tempest-dsvm-ironic-pxe_ipa-src{branch-designator}'
      - '{pipeline}-tempest-dsvm-ironic-parallel{branch-designator}'
      - '{pipeline}-tempest-dsvm-all{branch-designator}'
      - '{pipeline}-tempest-dsvm-coverage{branch-designator}'
      - '{pipeline}-tempest-dsvm-stress{branch-designator}'
      - '{pipeline}-tempest-dsvm-stress-keystonev3{branch-designator}'
      - '{pipeline}-tempest-dsvm-full-non-isolated{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-full-non-isolated{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-full-non-admin{branch-designator}'
      - '{pipeline}-tempest-dsvm-keystonev3-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-neutron-keystonev3-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-full-ceph{branch-designator}'
      - '{pipeline}-tempest-dsvm-nova-v21-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-nova-v21-neutron-full{branch-designator}'
      - '{pipeline}-tempest-dsvm-full-glusterfs{branch-designator}'
      - '{pipeline}-tempest-dsvm-trove{branch-designator}'
      - '{pipeline}-grenade-dsvm-trove{branch-designator}'