diff options
author | Ian Wienand <iwienand@redhat.com> | 2021-11-04 10:04:58 +1100 |
---|---|---|
committer | rabi <ramishra@redhat.com> | 2021-11-12 15:32:19 +0530 |
commit | bf9186a37e77cb105fd50b4dc2cb89a2556037cc (patch) | |
tree | 014af53244205fe0a9e14a2d7ab531281483a00d | |
parent | ef187fc65b228e798b7d0eb716746197dc5beeed (diff) | |
download | heat-bf9186a37e77cb105fd50b4dc2cb89a2556037cc.tar.gz |
Fallback to upstream for Fedora image
OpenDev infra only keep around the latest two Fedora releases in their
mirrors. Probe for the image from the local test mirror, but if not
found, fallback to upstream. This will be much less reliable, but can
avoid gate breakage until new images can be used.
Also, use endpoint_type when creating keystoneclient
Keystone admin endpoint has been removed from devstack with[1].
This would use the public endpoint by default.
Change-Id: I96ab14871ee8c5d5b83cc0cd4abc840ef0218ca8
-rw-r--r-- | devstack/lib/heat | 11 | ||||
-rw-r--r-- | heat/db/sqlalchemy/types.py | 2 | ||||
-rw-r--r-- | heat/engine/clients/os/keystone/heat_keystoneclient.py | 5 | ||||
-rw-r--r-- | heat/tests/clients/test_heat_client.py | 3 | ||||
-rw-r--r-- | heat_integrationtests/common/clients.py | 1 | ||||
-rw-r--r-- | tox.ini | 1 |
6 files changed, 22 insertions, 1 deletions
diff --git a/devstack/lib/heat b/devstack/lib/heat index 5993d7de2..5f5f17252 100644 --- a/devstack/lib/heat +++ b/devstack/lib/heat @@ -471,10 +471,19 @@ function configure_tempest_for_heat { source $TOP_DIR/openrc admin admin iniset $TEMPEST_CONFIG heat_plugin admin_username $OS_USERNAME iniset $TEMPEST_CONFIG heat_plugin admin_password $OS_PASSWORD + + # NOTE(ianw) OpenDev infra only keeps the latest two Fedora's + # around; prefer the mirror but allow fallback if [[ -e /etc/ci/mirror_info.sh ]]; then source /etc/ci/mirror_info.sh fi - export HEAT_TEST_FEDORA_IMAGE=${NODEPOOL_FEDORA_MIRROR:-https://download.fedoraproject.org/pub/fedora/linux}/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2 + HEAT_TEST_FEDORA_IMAGE_UPSTREAM=https://download.fedoraproject.org/pub/fedora/linux + HEAT_TEST_FEDORA_IMAGE_PATH=releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.qcow2 + if curl --output /dev/null --silent --head --fail "${NODEPOOL_FEDORA_MIRROR}/${HEAT_TEST_FEDORA_IMAGE_PATH}"; then + export HEAT_TEST_FEDORA_IMAGE="${NODEPOOL_FEDORA_MIRROR}/${HEAT_TEST_FEDORA_IMAGE_PATH}" + else + export HEAT_TEST_FEDORA_IMAGE="${HEAT_TEST_FEDORA_IMAGE_UPSTREAM}/${HEAT_TEST_FEDORA_IMAGE_PATH}" + fi TOKEN=$(openstack token issue -c id -f value) local image_exists=$( openstack image list | grep "Fedora-Cloud-Base-33-1.2.x86_64" ) if [[ -z $image_exists ]]; then diff --git a/heat/db/sqlalchemy/types.py b/heat/db/sqlalchemy/types.py index 723d0bc4e..39766b893 100644 --- a/heat/db/sqlalchemy/types.py +++ b/heat/db/sqlalchemy/types.py @@ -21,6 +21,7 @@ loads = jsonutils.loads class LongText(types.TypeDecorator): + impl = types.Text def load_dialect_impl(self, dialect): @@ -42,6 +43,7 @@ class Json(LongText): class List(types.TypeDecorator): + impl = types.Text def load_dialect_impl(self, dialect): diff --git a/heat/engine/clients/os/keystone/heat_keystoneclient.py b/heat/engine/clients/os/keystone/heat_keystoneclient.py index 9754491a9..7f993ec9c 100644 --- a/heat/engine/clients/os/keystone/heat_keystoneclient.py +++ b/heat/engine/clients/os/keystone/heat_keystoneclient.py @@ -26,6 +26,7 @@ from oslo_log import log as logging from oslo_serialization import jsonutils from oslo_utils import importutils +from heat.common import config from heat.common import context from heat.common import exception from heat.common.i18n import _ @@ -76,6 +77,8 @@ class KsClientWrapper(object): self._domain_admin_auth = None self._domain_admin_client = None self._region_name = region_name + self._interface = config.get_client_option('keystone', + 'endpoint_type') self.session = self.context.keystone_session self.v3_endpoint = self.context.keystone_v3_endpoint @@ -158,6 +161,7 @@ class KsClientWrapper(object): session=self.session, auth=self.domain_admin_auth, connect_retries=cfg.CONF.client_retry_limit, + interface=self._interface, region_name=self.auth_region_name) return self._domain_admin_client @@ -165,6 +169,7 @@ class KsClientWrapper(object): def _v3_client_init(self): client = kc_v3.Client(session=self.session, connect_retries=cfg.CONF.client_retry_limit, + interface=self._interface, region_name=self.auth_region_name) if hasattr(self.context.auth_plugin, 'get_access'): diff --git a/heat/tests/clients/test_heat_client.py b/heat/tests/clients/test_heat_client.py index dabd00436..300ad5da9 100644 --- a/heat/tests/clients/test_heat_client.py +++ b/heat/tests/clients/test_heat_client.py @@ -86,6 +86,7 @@ class KeystoneClientTest(common.HeatTestCase): session=utils.AnyInstance(ks_session.Session), auth=self.mock_ks_auth, connect_retries=2, + interface='publicURL', region_name=None) def _stubs_auth(self, method='token', trust_scoped=True, @@ -168,6 +169,7 @@ class KeystoneClientTest(common.HeatTestCase): self.m_client.assert_any_call( session=utils.AnyInstance(ks_session.Session), connect_retries=2, + interface='publicURL', region_name=None) if self.stub_admin_auth: self.mock_admin_ks_auth.get_user_id.assert_called_once_with( @@ -1579,6 +1581,7 @@ class KeystoneClientTestDomainName(KeystoneClientTest): session=utils.AnyInstance(ks_session.Session), auth=self.mock_ks_auth, connect_retries=2, + interface='publicURL', region_name=None) def _stub_domain_admin_client(self, domain_id='adomain123'): diff --git a/heat_integrationtests/common/clients.py b/heat_integrationtests/common/clients.py index 67c1d59b0..2eece155a 100644 --- a/heat_integrationtests/common/clients.py +++ b/heat_integrationtests/common/clients.py @@ -144,6 +144,7 @@ class ClientManager(object): # Create our default Keystone client to use in testing return kc_v3.Client( session=self.identity_client.session, + interface='publicURL', region_name=self.conf.region) def _get_compute_client(self): @@ -9,6 +9,7 @@ basepython = python3 setenv = VIRTUAL_ENV={envdir} PYTHONWARNINGS=default::DeprecationWarning OS_TEST_PATH=heat/tests +install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} {opts} {packages} usedevelop = True deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} -r{toxinidir}/requirements.txt |