diff --git a/README.rst b/README.rst
index b2c74ee..8b5bd3c 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,7 @@
-========================
+======================
+Octavia Tempest Plugin
+======================
+
 Team and repository tags
 ========================
 
@@ -7,7 +10,6 @@
 
 .. Change things from this point on
 
-==============================
 Tempest integration of Octavia
 ==============================
 
diff --git a/doc/requirements.txt b/doc/requirements.txt
index ddf8411..90ae115 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -9,3 +9,6 @@
 
 # releasenotes
 reno>=2.5.0 # Apache-2.0
+
+# PDF Docs
+sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 2d5c49f..5bbe295 100755
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import datetime
 import os
 import sys
 
@@ -29,7 +30,8 @@
     'sphinx.ext.viewcode',
     'openstackdocstheme',
     'oslo_config.sphinxext',
-    'sphinxcontrib.apidoc'
+    'sphinxcontrib.apidoc',
+    'sphinxcontrib.rsvgconverter'
 ]
 
 # autodoc generation is a bit aggressive and a nuisance when doing heavy
@@ -45,7 +47,17 @@
 
 # General information about the project.
 project = u'octavia-tempest-plugin'
-copyright = u'2017, OpenStack Foundation'
+copyright = u'2017-2019, OpenStack Foundation'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# Version info
+from octavia_tempest_plugin.version import version_info as octavia_tempest_ver
+release = octavia_tempest_ver.release_string()
+# The short X.Y version.
+version = octavia_tempest_ver.version_string()
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
 add_function_parentheses = True
@@ -60,6 +72,14 @@
 # A list of ignored prefixes for module index sorting.
 modindex_common_prefix = ['octavia_tempest_plugin.']
 
+repository_name = 'openstack/octavia-tempest-plugin'
+bug_project = '910'
+bug_tag = 'docs'
+
+apidoc_output_dir = '_build/modules'
+apidoc_module_dir = '../../octavia_tempest_plugin'
+apidoc_excluded_paths = []
+
 # -- Options for HTML output --------------------------------------------------
 
 # The theme to use for HTML and HTML Help pages.  Major themes that come with
@@ -81,23 +101,66 @@
 # If false, no index is generated.
 html_use_index = True
 
+# -- Options for LaTeX output -------------------------------------------------
+
+# Fix Unicode character for sphinx_feature_classification
+# Sphinx default latex engine (pdflatex) doesn't know much unicode
+latex_preamble = r"""
+\usepackage{newunicodechar}
+\newunicodechar{✖}{\sffamily X}
+\setcounter{tocdepth}{2}
+\authoraddress{\textcopyright %s OpenStack Foundation}
+""" % datetime.datetime.now().year
+
+latex_elements = {
+    # The paper size ('letterpaper' or 'a4paper').
+    # 'papersize': 'letterpaper',
+
+    # The font size ('10pt', '11pt' or '12pt').
+    # 'pointsize': '10pt',
+
+    # Additional stuff for the LaTeX preamble.
+    # openany: Skip blank pages in generated PDFs
+    'extraclassoptions': 'openany,oneside',
+    'makeindex': '',
+    'printindex': '',
+    'preamble': latex_preamble
+}
+
+# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664
+# Some distros are missing xindy
+latex_use_xindy = False
+
+# Fix missing apostrophe
+smartquotes_excludes = {'builders': ['latex']}
+
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, documentclass
 # [howto/manual]).
-latex_documents = [
-    ('index',
-     '%s.tex' % project,
-     u'%s Documentation' % project,
-     u'OpenStack Foundation', 'manual'),
-]
+latex_documents = [(
+    'index',
+    'doc-octavia-tempest-plugin.tex',
+    u'Octavia Tempest Plugin Documentation',
+    u'OpenStack Octavia Team',
+    'manual'
+)]
 
-# Example configuration for intersphinx: refer to the Python standard library.
-#intersphinx_mapping = {'http://docs.python.org/': None}
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+# latex_logo = None
 
-repository_name = 'openstack/octavia-tempest-plugin'
-bug_project = '910'
-bug_tag = 'docs'
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+# latex_use_parts = False
 
-apidoc_output_dir = '_build/modules'
-apidoc_module_dir = '../../octavia_tempest_plugin'
-apidoc_excluded_paths = []
+# If true, show page references after internal links.
+# latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+# latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+# latex_appendices = []
+
+# If false, no module index is generated.
+latex_domain_indices = False
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 494a0b6..b991832 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -6,8 +6,6 @@
 Welcome to octavia-tempest-plugin's documentation!
 ==================================================
 
-Contents:
-
 .. toctree::
    :maxdepth: 2
 
@@ -16,14 +14,16 @@
    contributing
    configref
 
-Indices and tables
-==================
+.. only:: html
 
-.. toctree::
-   :hidden:
+   Indices and tables
+   ------------------
 
-   _build/modules/modules
+   .. toctree::
+      :hidden:
 
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
+      _build/modules/modules
+
+   * :ref:`genindex`
+   * :ref:`modindex`
+   * :ref:`search`
diff --git a/octavia_tempest_plugin/clients.py b/octavia_tempest_plugin/clients.py
index f85404c..f2a7767 100644
--- a/octavia_tempest_plugin/clients.py
+++ b/octavia_tempest_plugin/clients.py
@@ -52,7 +52,7 @@
         params.update({
             'auth_provider': self.auth_provider,
             'service': CONF.load_balancer.catalog_type,
-            'region': CONF.load_balancer.region,
+            'region': CONF.load_balancer.region or CONF.identity.region,
             'endpoint_type': CONF.load_balancer.endpoint_type,
             'build_interval': CONF.load_balancer.build_interval,
             'build_timeout': CONF.load_balancer.build_timeout
diff --git a/octavia_tempest_plugin/config.py b/octavia_tempest_plugin/config.py
index d951a44..5e09ba1 100644
--- a/octavia_tempest_plugin/config.py
+++ b/octavia_tempest_plugin/config.py
@@ -66,7 +66,7 @@
                default=5,
                help='Interval to check for status changes.'),
     cfg.IntOpt('check_timeout',
-               default=60,
+               default=120,
                help='Timeout, in seconds, to wait for a status change.'),
     cfg.BoolOpt('test_with_noop',
                 default=False,
@@ -209,10 +209,10 @@
                default="TCP",
                help="The type of L4 Protocol which is supported with the "
                     "provider driver."),
-    cfg.StrOpt('spare_pool_enabled',
-               default=False,
-               help="Wether spare pool is available with amphora provider "
-                    "driver or not."),
+    cfg.BoolOpt('spare_pool_enabled',
+                default=False,
+                help="Wether spare pool is available with amphora provider "
+                "driver or not."),
     cfg.BoolOpt('session_persistence_enabled',
                 default=True,
                 help="Whether session persistence is supported with the "
diff --git a/octavia_tempest_plugin/tests/act_stdby_scenario/v2/test_active_standby.py b/octavia_tempest_plugin/tests/act_stdby_scenario/v2/test_active_standby.py
new file mode 100644
index 0000000..612bbe2
--- /dev/null
+++ b/octavia_tempest_plugin/tests/act_stdby_scenario/v2/test_active_standby.py
@@ -0,0 +1,287 @@
+# Copyright 2018 GoDaddy
+# Copyright 2018 Rackspace US Inc.  All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import requests
+import testtools
+import time
+
+from oslo_log import log as logging
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib import decorators
+from tempest.lib import exceptions
+
+from octavia_tempest_plugin.common import constants as const
+from octavia_tempest_plugin.tests import test_base
+from octavia_tempest_plugin.tests import waiters
+
+CONF = config.CONF
+LOG = logging.getLogger(__name__)
+
+
+@testtools.skipUnless(
+    CONF.validation.run_validation,
+    'Active-Standby tests will not work without run_validation enabled.')
+class ActiveStandbyScenarioTest(test_base.LoadBalancerBaseTestWithCompute):
+
+    @classmethod
+    def resource_setup(cls):
+        """Setup resources needed by the tests."""
+        super(ActiveStandbyScenarioTest, cls).resource_setup()
+
+        # We have to do this here as the api_version and clients are not
+        # setup in time to use a decorator or the skip_checks mixin
+        if not cls.lb_admin_flavor_profile_client.is_version_supported(
+                cls.api_version, '2.3'):
+            return
+
+        lb_name = data_utils.rand_name("lb_member_lb1_actstdby")
+        lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
+                     const.NAME: lb_name}
+
+        # TODO(rm_work): Make this work with ipv6 and split this test for both
+        ip_version = 4
+        cls._setup_lb_network_kwargs(lb_kwargs, ip_version)
+
+        lb = cls.mem_lb_client.create_loadbalancer(**lb_kwargs)
+        cls.lb_id = lb[const.ID]
+        cls.addClassResourceCleanup(
+            cls.mem_lb_client.cleanup_loadbalancer,
+            cls.lb_id)
+
+        if CONF.validation.connect_method == 'floating':
+            port_id = lb[const.VIP_PORT_ID]
+            result = cls.lb_mem_float_ip_client.create_floatingip(
+                floating_network_id=CONF.network.public_network_id,
+                port_id=port_id)
+            floating_ip = result['floatingip']
+            LOG.info('lb1_floating_ip: {}'.format(floating_ip))
+            cls.addClassResourceCleanup(
+                waiters.wait_for_not_found,
+                cls.lb_mem_float_ip_client.delete_floatingip,
+                cls.lb_mem_float_ip_client.show_floatingip,
+                floatingip_id=floating_ip['id'])
+            cls.lb_vip_address = floating_ip['floating_ip_address']
+        else:
+            cls.lb_vip_address = lb[const.VIP_ADDRESS]
+
+        waiters.wait_for_status(cls.mem_lb_client.show_loadbalancer,
+                                cls.lb_id, const.PROVISIONING_STATUS,
+                                const.ACTIVE,
+                                CONF.load_balancer.lb_build_interval,
+                                CONF.load_balancer.lb_build_timeout)
+
+        listener_name = data_utils.rand_name("lb_member_listener1_actstdby")
+        listener_kwargs = {
+            const.NAME: listener_name,
+            const.PROTOCOL: const.HTTP,
+            const.PROTOCOL_PORT: '80',
+            const.LOADBALANCER_ID: cls.lb_id,
+        }
+        listener = cls.mem_listener_client.create_listener(**listener_kwargs)
+        cls.listener_id = listener[const.ID]
+        cls.addClassResourceCleanup(
+            cls.mem_listener_client.cleanup_listener,
+            cls.listener_id,
+            lb_client=cls.mem_lb_client, lb_id=cls.lb_id)
+
+        waiters.wait_for_status(cls.mem_lb_client.show_loadbalancer,
+                                cls.lb_id, const.PROVISIONING_STATUS,
+                                const.ACTIVE,
+                                CONF.load_balancer.build_interval,
+                                CONF.load_balancer.build_timeout)
+
+        pool_name = data_utils.rand_name("lb_member_pool1_actstdby")
+        pool_kwargs = {
+            const.NAME: pool_name,
+            const.PROTOCOL: const.HTTP,
+            const.LB_ALGORITHM: const.LB_ALGORITHM_ROUND_ROBIN,
+            const.LISTENER_ID: cls.listener_id,
+        }
+        pool = cls.mem_pool_client.create_pool(**pool_kwargs)
+        cls.pool_id = pool[const.ID]
+        cls.addClassResourceCleanup(
+            cls.mem_pool_client.cleanup_pool,
+            cls.pool_id,
+            lb_client=cls.mem_lb_client, lb_id=cls.lb_id)
+
+        waiters.wait_for_status(cls.mem_lb_client.show_loadbalancer,
+                                cls.lb_id, const.PROVISIONING_STATUS,
+                                const.ACTIVE,
+                                CONF.load_balancer.build_interval,
+                                CONF.load_balancer.build_timeout)
+
+        # Set up Member 1 for Webserver 1
+        member1_name = data_utils.rand_name("lb_member_member1_actstdby")
+        member1_kwargs = {
+            const.POOL_ID: cls.pool_id,
+            const.NAME: member1_name,
+            const.ADMIN_STATE_UP: True,
+            const.ADDRESS: cls.webserver1_ip,
+            const.PROTOCOL_PORT: 80,
+        }
+        if cls.lb_member_1_subnet:
+            member1_kwargs[const.SUBNET_ID] = cls.lb_member_1_subnet[const.ID]
+
+        member1 = cls.mem_member_client.create_member(
+            **member1_kwargs)
+        cls.addClassResourceCleanup(
+            cls.mem_member_client.cleanup_member,
+            member1[const.ID], pool_id=cls.pool_id,
+            lb_client=cls.mem_lb_client, lb_id=cls.lb_id)
+        waiters.wait_for_status(
+            cls.mem_lb_client.show_loadbalancer, cls.lb_id,
+            const.PROVISIONING_STATUS, const.ACTIVE,
+            CONF.load_balancer.check_interval,
+            CONF.load_balancer.check_timeout)
+
+        # Set up Member 2 for Webserver 2
+        member2_name = data_utils.rand_name("lb_member_member2_actstdby")
+        member2_kwargs = {
+            const.POOL_ID: cls.pool_id,
+            const.NAME: member2_name,
+            const.ADMIN_STATE_UP: True,
+            const.ADDRESS: cls.webserver2_ip,
+            const.PROTOCOL_PORT: 80,
+        }
+        if cls.lb_member_2_subnet:
+            member2_kwargs[const.SUBNET_ID] = cls.lb_member_2_subnet[const.ID]
+
+        member2 = cls.mem_member_client.create_member(
+            **member2_kwargs)
+        cls.addClassResourceCleanup(
+            cls.mem_member_client.cleanup_member,
+            member2[const.ID], pool_id=cls.pool_id,
+            lb_client=cls.mem_lb_client, lb_id=cls.lb_id)
+        waiters.wait_for_status(
+            cls.mem_lb_client.show_loadbalancer, cls.lb_id,
+            const.PROVISIONING_STATUS, const.ACTIVE,
+            CONF.load_balancer.check_interval,
+            CONF.load_balancer.check_timeout)
+
+    @testtools.skipIf(CONF.load_balancer.test_with_noop,
+                      'Active/Standby tests will not work in noop mode.')
+    @decorators.idempotent_id('e591fa7a-0eee-485a-8ca0-5cf1a556bdf0')
+    def test_active_standby_vrrp_failover(self):
+        """Tests active/standby VRRP failover
+
+        * Test the load balancer to make sure it is functioning
+        * Identifies the Master and Backup amphora
+        * Deletes the Master amphora
+        * Sends traffic through the load balancer
+        * Validates that the Backup has assumed the Master role
+        """
+        # We have to do this here as the api_version and clients are not
+        # setup in time to use a decorator or the skip_checks mixin
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.4'):
+            raise self.skipException(
+                'Active/Standby VRRP failover tests require '
+                'Octavia API version 2.3 or newer.')
+
+        session = requests.Session()
+
+        # Send some traffic
+        self.check_members_balanced(self.lb_vip_address)
+
+        # Get the amphorae associated with this load balancer
+        amphorae = self.os_admin.amphora_client.list_amphorae(
+            query_params='{loadbalancer_id}={lb_id}'.format(
+                loadbalancer_id=const.LOADBALANCER_ID,
+                lb_id=self.lb_id))
+
+        # TODO(johnsom): Fix when LB flavors support act/stdby
+        if len(amphorae) < 2:
+            self.skipTest('Load balancer must be using active/standby '
+                          'topology for the VRRP failover test.')
+
+        # Generate traffic on the LB so we can identify the current Master
+        r = session.get('http://{0}'.format(self.lb_vip_address), timeout=2)
+
+        # Cycle through the amps to find the master
+        master_amp = None
+        backup_amp = None
+        start = int(time.time())
+        while True:
+            for amp in amphorae:
+                amphora_stats = self.os_admin.amphora_client.get_amphora_stats(
+                    amp[const.ID])
+                for listener in amphora_stats:
+                    if listener[const.TOTAL_CONNECTIONS] > 0:
+                        master_amp = amp
+                        break
+                # check if we left the listener for loop by finding the master
+                if master_amp:
+                    break
+            # If we found the master and broke out of the amp for loop, break
+            # out of the while loop too.
+            if master_amp:
+                break
+            if int(time.time()) - start >= CONF.load_balancer.check_timeout:
+                message = ('Unable to find Master amphora in {timeout} '
+                           'seconds.'.format(
+                               timeout=CONF.load_balancer.check_timeout))
+                raise exceptions.TimeoutException(message)
+            time.sleep(CONF.load_balancer.check_interval)
+
+        # Find the backup amphora and check it is ready for the test
+        for amp in amphorae:
+            if amp[const.ID] == master_amp[const.ID]:
+                continue
+            else:
+                backup_amp = amp
+        self.assertIsNotNone(backup_amp)
+        amphora_stats = self.os_admin.amphora_client.get_amphora_stats(
+            backup_amp[const.ID])
+        for listener in amphora_stats:
+            self.assertEqual(0, listener[const.TOTAL_CONNECTIONS])
+
+        # Delete the master amphora compute instance
+        self.os_admin_servers_client.delete_server(
+            master_amp[const.COMPUTE_ID])
+
+        # Pass some traffic through the LB
+        # Note: We want this to loop for longer than the heartbeat interval
+        #       to make sure a stats update has come in to the HM
+        for x in range(0, 20):
+            try:
+                r = session.get('http://{0}'.format(self.lb_vip_address),
+                                timeout=1)
+                LOG.info('Got response: %s', r.text)
+            except Exception:
+                LOG.info('Load balancer request failed. Looping')
+            time.sleep(1)
+
+        # Check that the Backup amphora is now Master
+        amphora_stats = self.os_admin.amphora_client.get_amphora_stats(
+            backup_amp[const.ID])
+        connections = 0
+        for listener in amphora_stats:
+            connections += listener[const.TOTAL_CONNECTIONS]
+        self.assertTrue(connections > 0)
+        LOG.info('Backup amphora is now Master.')
+        # Wait for the amphora failover to start
+        waiters.wait_for_status(
+            self.mem_lb_client.show_loadbalancer,
+            self.lb_id, const.PROVISIONING_STATUS,
+            const.PENDING_UPDATE, CONF.load_balancer.check_interval,
+            CONF.load_balancer.check_timeout)
+        # Wait for the load balancer to return to ACTIVE so the
+        # cleanup steps will pass
+        waiters.wait_for_status(
+            self.mem_lb_client.show_loadbalancer,
+            self.lb_id, const.PROVISIONING_STATUS,
+            const.ACTIVE, CONF.load_balancer.lb_build_interval,
+            CONF.load_balancer.lb_build_timeout)
diff --git a/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py b/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py
index eba7e38..c3610d5 100644
--- a/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py
+++ b/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py
@@ -51,6 +51,12 @@
             cls.mem_lb_client.cleanup_loadbalancer,
             cls.lb_id)
 
+        waiters.wait_for_status(cls.mem_lb_client.show_loadbalancer,
+                                cls.lb_id, const.PROVISIONING_STATUS,
+                                const.ACTIVE,
+                                CONF.load_balancer.lb_build_interval,
+                                CONF.load_balancer.lb_build_timeout)
+
         if CONF.validation.connect_method == 'floating':
             port_id = lb[const.VIP_PORT_ID]
             result = cls.lb_mem_float_ip_client.create_floatingip(
@@ -67,12 +73,6 @@
         else:
             cls.lb_vip_address = lb[const.VIP_ADDRESS]
 
-        waiters.wait_for_status(cls.mem_lb_client.show_loadbalancer,
-                                cls.lb_id, const.PROVISIONING_STATUS,
-                                const.ACTIVE,
-                                CONF.load_balancer.lb_build_interval,
-                                CONF.load_balancer.lb_build_timeout)
-
         protocol = const.HTTP
         lb_feature_enabled = CONF.loadbalancer_feature_enabled
         if not lb_feature_enabled.l7_protocol_enabled:
@@ -338,6 +338,7 @@
             const.ONLINE,
             CONF.load_balancer.build_interval,
             CONF.load_balancer.build_timeout,
+            error_ok=True,
             pool_id=self.pool_id)
         waiters.wait_for_status(
             self.mem_member_client.show_member,
diff --git a/octavia_tempest_plugin/tests/waiters.py b/octavia_tempest_plugin/tests/waiters.py
index 89e8455..eb7410a 100644
--- a/octavia_tempest_plugin/tests/waiters.py
+++ b/octavia_tempest_plugin/tests/waiters.py
@@ -28,7 +28,7 @@
 
 def wait_for_status(show_client, id, status_key, status,
                     check_interval, check_timeout, root_tag=None,
-                    **kwargs):
+                    error_ok=False, **kwargs):
     """Waits for an object to reach a specific status.
 
     :param show_client: The tempest service client show method.
@@ -40,6 +40,7 @@
     :check_interval: How often to check the status, in seconds.
     :check_timeout: The maximum time, in seconds, to check the status.
     :root_tag: The root tag on the response to remove, if any.
+    :error_ok: When true, ERROR status will not raise an exception.
     :raises CommandFailed: Raised if the object goes into ERROR and ERROR was
                            not the desired status.
     :raises TimeoutException: The object did not achieve the status or ERROR in
@@ -75,7 +76,8 @@
             if caller:
                 message = '({caller}) {message}'.format(caller=caller,
                                                         message=message)
-            raise exceptions.UnexpectedResponseCode(message)
+            if not error_ok:
+                raise exceptions.UnexpectedResponseCode(message)
         elif int(time.time()) - start >= check_timeout:
             message = (
                 '{name} {field} failed to update to {expected_status} within '
diff --git a/octavia_tempest_plugin/version.py b/octavia_tempest_plugin/version.py
new file mode 100644
index 0000000..0f2cf15
--- /dev/null
+++ b/octavia_tempest_plugin/version.py
@@ -0,0 +1,32 @@
+#    Copyright 2011-2014 OpenStack Foundation
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import pbr.version
+
+OCTAVIA_TEMPEST_VENDOR = "OpenStack Foundation"
+OCTAVIA_TEMPEST_PRODUCT = "OpenStack Octavia tempest plugin"
+
+version_info = pbr.version.VersionInfo('octavia-tempest-plugin')
+
+
+def vendor_string():
+    return OCTAVIA_TEMPEST_VENDOR
+
+
+def product_string():
+    return OCTAVIA_TEMPEST_PRODUCT
+
+
+def version_string_with_package():
+    return version_info.version_string()
diff --git a/tox.ini b/tox.ini
index 1ca36b7..33b941c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -49,6 +49,17 @@
   rm -rf doc/build
   sphinx-build -W -b html doc/source doc/build/html
 
+[testenv:pdf-docs]
+basepython = python3
+deps = {[testenv:docs]deps}
+whitelist_externals =
+  make
+  rm
+commands =
+  rm -rf doc/build/pdf
+  sphinx-build -W -b latex doc/source doc/build/pdf
+  make -C doc/build/pdf
+
 [testenv:releasenotes]
 basepython = python3
 deps =
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index aa204fd..8f76f28 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -524,6 +524,49 @@
     parent: octavia-v2-dsvm-py2-spare-pool
     override-checkout: stable/queens
 
+- job:
+    name: octavia-v2-dsvm-cinder-amphora
+    parent: octavia-v2-dsvm-scenario
+    required-projects:
+      - openstack/cinder
+      - openstack/diskimage-builder
+      - openstack/octavia
+      - openstack/octavia-lib
+      - openstack/python-cinderclient
+      - openstack/python-octaviaclient
+    vars:
+      devstack_local_conf:
+        post-config:
+          $OCTAVIA_CONF:
+            controller_worker:
+              volume_driver: volume_cinder_driver
+            cinder:
+              volume_size: 2
+      devstack_services:
+        c-bak: true
+        ceilometer-acentral: false
+        ceilometer-acompute: false
+        ceilometer-alarm-evaluator: false
+        ceilometer-alarm-notifier: false
+        ceilometer-anotification: false
+        ceilometer-api: false
+        ceilometer-collector: false
+        c-sch: true
+        c-api: true
+        c-vol: true
+        cinder: true
+        octavia: true
+        o-api: true
+        o-cw: true
+        o-hm: true
+        o-hk: true
+        swift: false
+        s-account: false
+        s-container: false
+        s-object: false
+        s-proxy: false
+        tempest: true
+
 # Temporary transitional aliases for gates used in other repos
 # Remove once octavia has transitioned job names
 - job:
@@ -555,7 +598,6 @@
               loadbalancer_topology: ACTIVE_STANDBY
             task_flow:
               engine: parallel
-              devstack_local_conf:
         test-config:
           "$TEMPEST_CONFIG":
             load_balancer:
@@ -603,3 +645,32 @@
     name: octavia-v2-act-stdby-iptables-dsvm-py2-scenario-stable-queens
     parent: octavia-v2-act-stdby-iptables-dsvm-py2-scenario
     override-checkout: stable/queens
+
+- job:
+    name: octavia-v2-act-stdby-dsvm-scenario
+    parent: octavia-dsvm-live-base
+    vars:
+      devstack_local_conf:
+        post-config:
+          $OCTAVIA_CONF:
+            api_settings:
+              api_v1_enabled: False
+            controller_worker:
+              loadbalancer_topology: ACTIVE_STANDBY
+            task_flow:
+              engine: parallel
+      tempest_concurrency: 2
+      tempest_test_regex: ^octavia_tempest_plugin.tests.act_stdby_scenario.v2.test_active_standby\.
+      tox_envlist: all
+
+- job:
+    name: octavia-v2-act-stdby-dsvm-py2-scenario
+    parent: octavia-v2-act-stdby-dsvm-scenario
+    vars:
+      devstack_localrc:
+        USE_PYTHON3: False
+
+- job:
+    name: octavia-v2-act-stdby-dsvm-scenario-stable-stein
+    parent: octavia-v2-act-stdby-dsvm-scenario
+    override-checkout: stable/stein
diff --git a/zuul.d/projects.yaml b/zuul.d/projects.yaml
index 490d68b..79f0c3d 100644
--- a/zuul.d/projects.yaml
+++ b/zuul.d/projects.yaml
@@ -38,6 +38,12 @@
             voting: false
         - octavia-v2-act-stdby-iptables-dsvm-py2-scenario-stable-queens:
             voting: false
+        - octavia-v2-act-stdby-dsvm-scenario:
+            voting: false
+        - octavia-v2-act-stdby-dsvm-py2-scenario:
+            voting: false
+        - octavia-v2-act-stdby-dsvm-scenario-stable-stein:
+            voting: false
         - octavia-v2-dsvm-tls-barbican:
             voting: false
         - octavia-v2-dsvm-tls-barbican-stable-stein:
@@ -56,6 +62,8 @@
             voting: false
         - octavia-v2-dsvm-py2-spare-pool-stable-queens:
             voting: false
+        - octavia-v2-dsvm-cinder-amphora:
+            voting: false
     gate:
       queue: octavia
       jobs:
