def test_authenticate_failure(self): if isinstance(self.provider, TestMockHelperMixin): raise unittest.SkipTest("Mock providers are not expected to" " authenticate correctly") cloned_provider = CloudProviderFactory().create_provider( self.provider.PROVIDER_ID, self.provider.config) with self.assertRaises(ProviderConnectionException): # Mock up test by clearing credentials on a per provider basis if cloned_provider.PROVIDER_ID == 'aws': cloned_provider.a_key = "dummy_a_key" cloned_provider.s_key = "dummy_s_key" elif cloned_provider.PROVIDER_ID == 'openstack': cloned_provider.username = "******" cloned_provider.password = "******" cloned_provider.authenticate()
def test_authenticate_failure(self): if isinstance(self.provider, TestMockHelperMixin): raise unittest.SkipTest( "Mock providers are not expected to" " authenticate correctly") # Mock up test by clearing credentials on a per provider basis cloned_config = self.provider.config.copy() if self.provider.PROVIDER_ID == 'aws': cloned_config['aws_access_key'] = "dummy_a_key" cloned_config['aws_secret_key'] = "dummy_s_key" elif self.provider.PROVIDER_ID == 'openstack': cloned_config['os_username'] = "******" cloned_config['os_password'] = "******" with self.assertRaises(ProviderConnectionException): cloned_provider = CloudProviderFactory().create_provider( self.provider.PROVIDER_ID, cloned_config) cloned_provider.authenticate()
def _configure_provider(provider, credentials): """ Given a provider name and required credentials, it configures and returns a cloudbridge connection to the provider. :type provider: string :param provider: the name of cloud-based resource provided. A list of supported providers is given in `SUPPORTED_PROVIDERS` variable. :type credentials: dict :param credentials: a dictionary containing all the credentials required to authenticated to the specified provider. :rtype: provider specific, e.g., `cloudbridge.cloud.providers.aws.provider.AWSCloudProvider` for AWS. :return: a cloudbridge connection to the specified provider. """ missing_credentials = [] if provider == 'aws': access = credentials.get('access_key', None) if access is None: missing_credentials.append('access_key') secret = credentials.get('secret_key', None) if secret is None: missing_credentials.append('secret_key') if len(missing_credentials) > 0: raise RequestParameterMissingException( "The following required key(s) are missing from the provided " "credentials object: {}".format(missing_credentials)) config = {'aws_access_key': access, 'aws_secret_key': secret} connection = CloudProviderFactory().create_provider( ProviderList.AWS, config) elif provider == "azure": subscription = credentials.get('subscription_id', None) if subscription is None: missing_credentials.append('subscription_id') client = credentials.get('client_id', None) if client is None: missing_credentials.append('client_id') secret = credentials.get('secret', None) if secret is None: missing_credentials.append('secret') tenant = credentials.get('tenant', None) if tenant is None: missing_credentials.append('tenant') if len(missing_credentials) > 0: raise RequestParameterMissingException( "The following required key(s) are missing from the provided " "credentials object: {}".format(missing_credentials)) config = { 'azure_subscription_id': subscription, 'azure_client_id': client, 'azure_secret': secret, 'azure_tenant': tenant } connection = CloudProviderFactory().create_provider( ProviderList.AZURE, config) elif provider == "openstack": username = credentials.get('username', None) if username is None: missing_credentials.append('username') password = credentials.get('password', None) if password is None: missing_credentials.append('password') auth_url = credentials.get('auth_url', None) if auth_url is None: missing_credentials.append('auth_url') prj_name = credentials.get('project_name', None) if prj_name is None: missing_credentials.append('project_name') prj_domain_name = credentials.get('project_domain_name', None) if prj_domain_name is None: missing_credentials.append('project_domain_name') user_domain_name = credentials.get('user_domain_name', None) if user_domain_name is None: missing_credentials.append('user_domain_name') if len(missing_credentials) > 0: raise RequestParameterMissingException( "The following required key(s) are missing from the provided " "credentials object: {}".format(missing_credentials)) config = { 'os_username': username, 'os_password': password, 'os_auth_url': auth_url, 'os_project_name': prj_name, 'os_project_domain_name': prj_domain_name, 'os_user_domain_name': user_domain_name } connection = CloudProviderFactory().create_provider( ProviderList.OPENSTACK, config) else: raise RequestParameterInvalidException( "Unrecognized provider '{}'; the following are the supported " "providers: {}.".format(provider, SUPPORTED_PROVIDERS)) try: if connection.authenticate(): return connection except ProviderConnectionException as e: raise AuthenticationFailed( "Could not authenticate to the '{}' provider. {}".format( provider, e))
def _configure_provider(provider, credentials): """ Given a provider name and required credentials, it configures and returns a cloudbridge connection to the provider. :type provider: string :param provider: the name of cloud-based resource provided. A list of supported providers is given in `SUPPORTED_PROVIDERS` variable. :type credentials: dict :param credentials: a dictionary containing all the credentials required to authenticated to the specified provider. :rtype: provider specific, e.g., `cloudbridge.cloud.providers.aws.provider.AWSCloudProvider` for AWS. :return: a cloudbridge connection to the specified provider. """ missing_credentials = [] if provider == 'aws': access = credentials.get('access_key', None) if access is None: missing_credentials.append('access_key') secret = credentials.get('secret_key', None) if secret is None: missing_credentials.append('secret_key') if len(missing_credentials) > 0: raise RequestParameterMissingException("The following required key(s) are missing from the provided " "credentials object: {}".format(missing_credentials)) config = {'aws_access_key': access, 'aws_secret_key': secret} connection = CloudProviderFactory().create_provider(ProviderList.AWS, config) elif provider == "azure": subscription = credentials.get('subscription_id', None) if subscription is None: missing_credentials.append('subscription_id') client = credentials.get('client_id', None) if client is None: missing_credentials.append('client_id') secret = credentials.get('secret', None) if secret is None: missing_credentials.append('secret') tenant = credentials.get('tenant', None) if tenant is None: missing_credentials.append('tenant') if len(missing_credentials) > 0: raise RequestParameterMissingException("The following required key(s) are missing from the provided " "credentials object: {}".format(missing_credentials)) config = {'azure_subscription_id': subscription, 'azure_client_id': client, 'azure_secret': secret, 'azure_tenant': tenant} connection = CloudProviderFactory().create_provider(ProviderList.AZURE, config) elif provider == "openstack": username = credentials.get('username', None) if username is None: missing_credentials.append('username') password = credentials.get('password', None) if password is None: missing_credentials.append('password') auth_url = credentials.get('auth_url', None) if auth_url is None: missing_credentials.append('auth_url') prj_name = credentials.get('project_name', None) if prj_name is None: missing_credentials.append('project_name') prj_domain_name = credentials.get('project_domain_name', None) if prj_domain_name is None: missing_credentials.append('project_domain_name') user_domain_name = credentials.get('user_domain_name', None) if user_domain_name is None: missing_credentials.append('user_domain_name') if len(missing_credentials) > 0: raise RequestParameterMissingException("The following required key(s) are missing from the provided " "credentials object: {}".format(missing_credentials)) config = {'os_username': username, 'os_password': password, 'os_auth_url': auth_url, 'os_project_name': prj_name, 'os_project_domain_name': prj_domain_name, 'os_user_domain_name': user_domain_name} connection = CloudProviderFactory().create_provider(ProviderList.OPENSTACK, config) else: raise RequestParameterInvalidException("Unrecognized provider '{}'; the following are the supported " "providers: {}.".format(provider, SUPPORTED_PROVIDERS)) try: if connection.authenticate(): return connection except ProviderConnectionException as e: raise AuthenticationFailed("Could not authenticate to the '{}' provider. {}".format(provider, e))