From d8a1f71d755198c21c3fd2bc58d6f9bac9c3a23d Mon Sep 17 00:00:00 2001 From: Alexandru Mahmoud Date: Fri, 17 Jun 2022 16:06:36 -0400 Subject: [PATCH 1/7] Add app creds support to OS provider for JS2 --- cloudbridge/providers/openstack/provider.py | 31 ++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/cloudbridge/providers/openstack/provider.py b/cloudbridge/providers/openstack/provider.py index b24f6be2..011507d3 100644 --- a/cloudbridge/providers/openstack/provider.py +++ b/cloudbridge/providers/openstack/provider.py @@ -18,6 +18,8 @@ from cloudbridge.base import BaseCloudProvider from cloudbridge.base.helpers import get_env +from cloudbridge.interfaces.exceptions import ProviderConnectionException + from .services import OpenStackComputeService from .services import OpenStackDnsService from .services import OpenStackNetworkingService @@ -34,6 +36,10 @@ def __init__(self, config): super(OpenStackCloudProvider, self).__init__(config) # Initialize cloud connection fields + self.app_cred_id = self._get_config_value( + 'os_application_credential_id', get_env('OS_APPLICATION_CREDENTIAL_ID')) + self.app_cred_secret = self._get_config_value( + 'os_application_credential_secret', get_env('OS_APPLICATION_CREDENTIAL_SECRET')) self.username = self._get_config_value( 'os_username', get_env('OS_USERNAME')) self.password = self._get_config_value( @@ -112,13 +118,24 @@ def _keystone_session(self): if self._keystone_version == 3: from keystoneauth1.identity import v3 - auth = v3.Password(auth_url=self.auth_url, - username=self.username, - password=self.password, - user_domain_name=self.user_domain_name, - project_domain_id=self.project_domain_id, - project_domain_name=self.project_domain_name, - project_name=self.project_name) + if self.username and self.password: + auth = v3.Password(auth_url=self.auth_url, + username=self.username, + password=self.password, + user_domain_name=self.user_domain_name, + project_domain_id=self.project_domain_id, + project_domain_name=self.project_domain_name, + project_name=self.project_name) + elif self.app_cred_id and self.app_cred_secret: + auth = v3.ApplicationCredential(auth_url=self.auth_url, + application_credential_id=self.app_cred_id, + application_credential_secret=self.app_cred_secret, + user_domain_name=self.user_domain_name, + project_domain_id=self.project_domain_id, + project_domain_name=self.project_domain_name, + project_name=self.project_name) + else raise ProviderConnectionException("No valid credentials were found. You must supply either \ + 'os_username' and 'os_password', or 'os_application_credential_id' and 'os_application_credential_secret'") self._cached_keystone_session = session.Session(auth=auth) else: from keystoneauth1.identity import v2 From 25ce1639e89f99d9a2b54fa6d6aaae52ff40cf9e Mon Sep 17 00:00:00 2001 From: Alexandru Mahmoud Date: Fri, 17 Jun 2022 16:16:48 -0400 Subject: [PATCH 2/7] Multiline string --- cloudbridge/providers/openstack/provider.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cloudbridge/providers/openstack/provider.py b/cloudbridge/providers/openstack/provider.py index 011507d3..73a662dd 100644 --- a/cloudbridge/providers/openstack/provider.py +++ b/cloudbridge/providers/openstack/provider.py @@ -134,8 +134,10 @@ def _keystone_session(self): project_domain_id=self.project_domain_id, project_domain_name=self.project_domain_name, project_name=self.project_name) - else raise ProviderConnectionException("No valid credentials were found. You must supply either \ - 'os_username' and 'os_password', or 'os_application_credential_id' and 'os_application_credential_secret'") + else: + raise ProviderConnectionException("""No valid credentials were found. You must supply either + 'os_username' and 'os_password', or 'os_application_credential_id' + and 'os_application_credential_secret'""") self._cached_keystone_session = session.Session(auth=auth) else: from keystoneauth1.identity import v2 From a143868d3829c27c62dec1aa867f9194f9dbe2b6 Mon Sep 17 00:00:00 2001 From: Alexandru Mahmoud Date: Fri, 17 Jun 2022 16:41:10 -0400 Subject: [PATCH 3/7] Remove domains --- cloudbridge/providers/openstack/provider.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cloudbridge/providers/openstack/provider.py b/cloudbridge/providers/openstack/provider.py index 73a662dd..4ce243ad 100644 --- a/cloudbridge/providers/openstack/provider.py +++ b/cloudbridge/providers/openstack/provider.py @@ -129,11 +129,7 @@ def _keystone_session(self): elif self.app_cred_id and self.app_cred_secret: auth = v3.ApplicationCredential(auth_url=self.auth_url, application_credential_id=self.app_cred_id, - application_credential_secret=self.app_cred_secret, - user_domain_name=self.user_domain_name, - project_domain_id=self.project_domain_id, - project_domain_name=self.project_domain_name, - project_name=self.project_name) + application_credential_secret=self.app_cred_secret) else: raise ProviderConnectionException("""No valid credentials were found. You must supply either 'os_username' and 'os_password', or 'os_application_credential_id' From 365284fdba5eabc1157973325ceb39927f909e14 Mon Sep 17 00:00:00 2001 From: Alexandru Mahmoud Date: Fri, 17 Jun 2022 16:44:42 -0400 Subject: [PATCH 4/7] Update versions to latest --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index b71b2413..758283c4 100644 --- a/setup.py +++ b/setup.py @@ -48,8 +48,8 @@ ] REQS_OPENSTACK = [ 'openstacksdk>=0.12.0,<1.0.0', - 'python-novaclient>=7.0.0,<18.0', - 'python-swiftclient>=3.2.0,<4.0', + 'python-novaclient>=7.0.0,<=18.0', + 'python-swiftclient>=3.2.0,<=4.0', 'python-neutronclient>=6.0.0,<8.0', 'python-keystoneclient>=3.13.0,<5.0' ] From c14c741f6642a14604289b7f1de154722140bc38 Mon Sep 17 00:00:00 2001 From: Alexandru Mahmoud Date: Fri, 17 Jun 2022 17:14:22 -0400 Subject: [PATCH 5/7] Update setup.py Co-authored-by: Nuwan Goonasekera <2070605+nuwang@users.noreply.github.com> --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 758283c4..a177062e 100644 --- a/setup.py +++ b/setup.py @@ -48,8 +48,8 @@ ] REQS_OPENSTACK = [ 'openstacksdk>=0.12.0,<1.0.0', - 'python-novaclient>=7.0.0,<=18.0', - 'python-swiftclient>=3.2.0,<=4.0', + 'python-novaclient>=7.0.0,<19.0', + 'python-swiftclient>=3.2.0,<5.0', 'python-neutronclient>=6.0.0,<8.0', 'python-keystoneclient>=3.13.0,<5.0' ] From 0aece7919e1f79153848aeb5022890b7e1cedacb Mon Sep 17 00:00:00 2001 From: Alexandru Mahmoud Date: Fri, 17 Jun 2022 17:16:08 -0400 Subject: [PATCH 6/7] Bump version --- cloudbridge/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudbridge/__init__.py b/cloudbridge/__init__.py index 69b076a5..d9334512 100644 --- a/cloudbridge/__init__.py +++ b/cloudbridge/__init__.py @@ -2,7 +2,7 @@ import logging # Current version of the library -__version__ = '3.0.0' +__version__ = '3.1.0' def get_version(): From f5d77fa7966d82a6bf2dfa75c690d47480833265 Mon Sep 17 00:00:00 2001 From: Alexandru Mahmoud Date: Tue, 21 Jun 2022 13:40:20 -0400 Subject: [PATCH 7/7] Fix OS connection for images service --- cloudbridge/providers/openstack/provider.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cloudbridge/providers/openstack/provider.py b/cloudbridge/providers/openstack/provider.py index 4ce243ad..a948fecc 100644 --- a/cloudbridge/providers/openstack/provider.py +++ b/cloudbridge/providers/openstack/provider.py @@ -148,12 +148,7 @@ def _connect_openstack(self): region_name=self.region_name, user_agent='cloudbridge', auth_url=self.auth_url, - project_name=self.project_name, - username=self.username, - password=self.password, - user_domain_name=self.user_domain_name, - project_domain_id=self.project_domain_id, - project_domain_name=self.project_domain_name + session=self._keystone_session, ) @property