diff options
-rw-r--r-- | bindep.txt | 41 | ||||
-rw-r--r-- | doc/requirements.txt | 3 | ||||
-rw-r--r-- | heat/db/sqlalchemy/api.py | 2 | ||||
-rw-r--r-- | heat/engine/resources/openstack/heat/none_resource.py | 4 | ||||
-rw-r--r-- | heat/engine/resources/openstack/heat/software_deployment.py | 21 | ||||
-rw-r--r-- | heat/tests/openstack/heat/test_software_deployment.py | 3 | ||||
-rw-r--r-- | test-requirements.txt | 2 | ||||
-rw-r--r-- | tox.ini | 12 |
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 @@ -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 = |