summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bindep.txt41
-rw-r--r--doc/requirements.txt3
-rw-r--r--heat/db/sqlalchemy/api.py2
-rw-r--r--heat/engine/resources/openstack/heat/none_resource.py4
-rw-r--r--heat/engine/resources/openstack/heat/software_deployment.py21
-rw-r--r--heat/tests/openstack/heat/test_software_deployment.py3
-rw-r--r--test-requirements.txt2
-rw-r--r--tox.ini12
8 files changed, 76 insertions, 12 deletions
diff --git a/bindep.txt b/bindep.txt
new file mode 100644
index 000000000..7071c188b
--- /dev/null
+++ b/bindep.txt
@@ -0,0 +1,41 @@
+# This is a cross-platform list tracking distribution packages needed for install and tests;
+# see https://docs.openstack.org/infra/bindep/ for additional information.
+
+mysql-server [platform:dpkg]
+mariadb-server [platform:redhat]
+postgresql
+
+build-essential [platform:dpkg]
+python-dev [platform:dpkg]
+python3-all-dev [platform:dpkg]
+libxml2-dev [platform:dpkg]
+libxslt1-dev [platform:dpkg]
+libyaml-dev [platform:dpkg]
+libssl-dev [platform:dpkg]
+libffi-dev [platform:dpkg]
+libmysqlclient-dev [platform:dpkg]
+libpq-dev [platform:dpkg]
+mysql-client [platform:dpkg]
+postgresql-client [platform:dpkg]
+
+gcc [platform:rpm]
+python-devel [platform:rpm]
+python3-devel [platform:fedora platform:suse]
+python3 [platform:suse]
+libxml2-devel [platform:rpm]
+libxslt-devel [platform:rpm]
+libyaml-devel [platform:rpm]
+openssl-devel [platform:rpm]
+libffi-devel [platform:redhat platform:suse !platform:opensuse423]
+libffi48-devel [platform:opensuse423]
+mariadb-devel [platform:redhat]
+libmysqlclient-devel [platform:suse]
+postgresql-devel [platform:rpm]
+
+dev-libs/libxml2 [platform:gentoo]
+dev-libs/libxslt [platform:gentoo]
+dev-libs/libyaml [platform:gentoo]
+dev-libs/openssl [platform:gentoo]
+virtual/libffi [platform:gentoo]
+dev-db/mariadb [platform:gentoo]
+
diff --git a/doc/requirements.txt b/doc/requirements.txt
index 7488c4b07..94f9fa042 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -4,7 +4,8 @@
openstackdocstheme>=1.18.1 # Apache-2.0
os-api-ref>=1.4.0 # Apache-2.0
-sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD
+sphinx!=1.6.6,!=1.6.7,>=1.6.2;python_version>='3.4' # BSD
+sphinx!=1.6.6,!=1.6.7,>=1.6.2,<2.0.0;python_version=='2.7' # BSD
reno>=2.5.0 # Apache-2.0
sphinxcontrib-apidoc>=0.2.0 # BSD
sphinxcontrib-httpdomain>=1.3.0 # BSD
diff --git a/heat/db/sqlalchemy/api.py b/heat/db/sqlalchemy/api.py
index e7dae5e19..030501bb4 100644
--- a/heat/db/sqlalchemy/api.py
+++ b/heat/db/sqlalchemy/api.py
@@ -1118,6 +1118,8 @@ def _delete_event_rows(context, stack_id, limit):
return retval
+@oslo_db_api.wrap_db_retry(max_retries=3, retry_on_deadlock=True,
+ retry_interval=0.5, inc_retry_interval=True)
def event_create(context, values):
if 'stack_id' in values and cfg.CONF.max_events_per_stack:
# only count events and purge on average
diff --git a/heat/engine/resources/openstack/heat/none_resource.py b/heat/engine/resources/openstack/heat/none_resource.py
index 1c97dea77..8932344eb 100644
--- a/heat/engine/resources/openstack/heat/none_resource.py
+++ b/heat/engine/resources/openstack/heat/none_resource.py
@@ -38,6 +38,10 @@ class NoneResource(resource.Resource):
prev_resource, check_init_complete=True):
return False
+ def frozen_definition(self):
+ return self.t.freeze(
+ properties=properties.Properties(schema={}, data={}))
+
def reparse(self, client_resolve=True):
self.properties = properties.Properties(schema={}, data={})
self.translate_properties(self.properties, client_resolve)
diff --git a/heat/engine/resources/openstack/heat/software_deployment.py b/heat/engine/resources/openstack/heat/software_deployment.py
index 99cd8794e..2e46efc27 100644
--- a/heat/engine/resources/openstack/heat/software_deployment.py
+++ b/heat/engine/resources/openstack/heat/software_deployment.py
@@ -416,9 +416,11 @@ class SoftwareDeployment(signal_responder.SignalResponder):
yield swc_io.InputConfig(
name=self.DEPLOY_PROJECT_ID, value=creds['project_id'],
description=_('ID of project for API authentication'))
- yield swc_io.InputConfig(
- name=self.DEPLOY_REGION_NAME, value=creds['region_name'],
- description=_('Region name for API authentication'))
+ if creds['region_name']:
+ yield swc_io.InputConfig(
+ name=self.DEPLOY_REGION_NAME,
+ value=creds['region_name'],
+ description=_('Region name for API authentication'))
if self._signal_transport_zaqar():
yield swc_io.InputConfig(
name=self.DEPLOY_QUEUE_ID,
@@ -545,12 +547,13 @@ class SoftwareDeployment(signal_responder.SignalResponder):
def get_attribute(self, key, *path):
"""Resource attributes map to deployment outputs values."""
- sd = self.rpc_client().show_software_deployment(
- self.context, self.resource_id)
- ov = sd[rpc_api.SOFTWARE_DEPLOYMENT_OUTPUT_VALUES] or {}
- if key in ov:
- attribute = ov.get(key)
- return attributes.select_from_attribute(attribute, path)
+ if self.resource_id is not None:
+ sd = self.rpc_client().show_software_deployment(
+ self.context, self.resource_id)
+ ov = sd[rpc_api.SOFTWARE_DEPLOYMENT_OUTPUT_VALUES] or {}
+ if key in ov:
+ attribute = ov.get(key)
+ return attributes.select_from_attribute(attribute, path)
# Since there is no value for this key yet, check the output schemas
# to find out if the key is valid
diff --git a/heat/tests/openstack/heat/test_software_deployment.py b/heat/tests/openstack/heat/test_software_deployment.py
index 1ee154994..985030813 100644
--- a/heat/tests/openstack/heat/test_software_deployment.py
+++ b/heat/tests/openstack/heat/test_software_deployment.py
@@ -201,7 +201,6 @@ class SoftwareDeploymentTest(common.HeatTestCase):
get_ec2_signed_url.return_value = 'http://192.0.2.2/signed_url'
self.deployment = self.stack['deployment_mysql']
-
self.rpc_client = mock.MagicMock()
self.deployment._rpc_client = self.rpc_client
@@ -1097,6 +1096,7 @@ class SoftwareDeploymentTest(common.HeatTestCase):
def test_fn_get_att(self):
self._create_stack(self.template)
+ self.deployment.resource_id = 'c8a19429-7fde-47ea-a42f-40045488226c'
mock_sd = {
'outputs': [
{'name': 'failed', 'error_output': True},
@@ -1132,6 +1132,7 @@ class SoftwareDeploymentTest(common.HeatTestCase):
def test_fn_get_att_error(self):
self._create_stack(self.template)
+ self.deployment.resource_id = 'c8a19429-7fde-47ea-a42f-40045488226c'
mock_sd = {
'outputs': [],
diff --git a/test-requirements.txt b/test-requirements.txt
index 4500a40b8..678a0e443 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -4,7 +4,7 @@
# Hacking already pins down pep8, pyflakes and flake8
hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
-bandit>=1.1.0 # Apache-2.0
+bandit<1.6.0,>=1.1.0 # Apache-2.0
coverage!=4.4,>=4.0 # Apache-2.0
fixtures>=3.0.0 # Apache-2.0/BSD
kombu!=4.0.2,>=4.0.0 # BSD
diff --git a/tox.ini b/tox.ini
index 1fa292e6b..df109af8a 100644
--- a/tox.ini
+++ b/tox.ini
@@ -133,6 +133,18 @@ basepython = python3
deps = -r{toxinidir}/doc/requirements.txt
commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
+[testenv:bindep]
+basepython = python3
+# Do not install any requirements. We want this to be fast and work even if
+# system dependencies are missing, since it's used to tell you what system
+# dependencies are missing! This also means that bindep must be installed
+# separately, outside of the requirements files, and develop mode disabled
+# explicitly to avoid unnecessarily installing the checked-out repo too (this
+# further relies on "tox.skipsdist = True" above).
+deps = bindep
+commands = bindep test
+usedevelop = False
+
[testenv:lower-constraints]
basepython = python3
deps =