Exemplo n.º 1
0
    def test_type_validation(self):
        # Make sure internal type checking implementation properly sets types.
        self.provider.config['text_type_check'] = 'test-text'
        # pylint:disable=protected-access
        config_value = self.provider._get_config_value('text_type_check', None)
        self.assertIsInstance(config_value, six.string_types)

        # pylint:disable=protected-access
        env_value = self.provider._get_config_value(
            'some_config_value', get_env('MOTO_AMIS_PATH'))
        self.assertIsInstance(env_value, six.string_types)

        # pylint:disable=protected-access
        none_value = self.provider._get_config_value(
            'some_config_value', get_env('MISSING_ENV', None))
        self.assertIsNone(none_value)

        # pylint:disable=protected-access
        bool_value = self.provider._get_config_value(
            'some_config_value', get_env('MISSING_ENV', True))
        self.assertIsInstance(bool_value, bool)

        # pylint:disable=protected-access
        int_value = self.provider._get_config_value(
            'default_result_limit', None)
        self.assertIsInstance(int_value, int)
Exemplo n.º 2
0
    def __init__(self, config):
        super(AzureCloudProvider, self).__init__(config)

        # mandatory config values
        self.subscription_id = self._get_config_value(
            'azure_subscription_id', get_env('AZURE_SUBSCRIPTION_ID'))
        self.client_id = self._get_config_value(
            'azure_client_id', get_env('AZURE_CLIENT_ID', None))
        self.secret = self._get_config_value(
            'azure_secret', get_env('AZURE_SECRET', None))
        self.tenant = self._get_config_value(
            'azure_tenant', get_env('AZURE_TENANT', None))

        # optional config values
        self.access_token = self._get_config_value(
            'azure_access_token', get_env('AZURE_ACCESS_TOKEN', None))
        self.region_name = self._get_config_value(
            'azure_region_name', get_env('AZURE_REGION_NAME', 'eastus'))
        self.resource_group = self._get_config_value(
            'azure_resource_group', get_env('AZURE_RESOURCE_GROUP',
                                            'cloudbridge'))
        # Storage account name is limited to a max length of 24 alphanum chars
        # and unique across all of Azure. Thus, a uuid is used to generate a
        # unique name for the Storage Account based on the resource group,
        # while also using the subscription ID to ensure that different users
        # having the same resource group name do not have the same SA name.
        self.storage_account = self._get_config_value(
            'azure_storage_account',
            get_env(
                'AZURE_STORAGE_ACCOUNT',
                'storacc' + self.subscription_id[-6:] +
                str(uuid.uuid5(uuid.NAMESPACE_OID,
                               str(self.resource_group)))[-6:]))

        self.vm_default_user_name = self._get_config_value(
                'azure_vm_default_username', get_env(
                    'AZURE_VM_DEFAULT_USERNAME', None)) \
            or self.__get_deprecated_username('cbuser')

        self.public_key_storage_table_name = self._get_config_value(
            'azure_public_key_storage_table_name', get_env(
                'AZURE_PUBLIC_KEY_STORAGE_TABLE_NAME', 'cbcerts'))

        self._azure_client = None

        self._security = AzureSecurityService(self)
        self._storage = AzureStorageService(self)
        self._compute = AzureComputeService(self)
        self._networking = AzureNetworkingService(self)
Exemplo n.º 3
0
 def __get_deprecated_username(self, default):
     username = self._get_config_value(
         'azure_vm_default_user_name', get_env(
             'AZURE_VM_DEFAULT_USER_NAME', None))
     if username:
         return self.__wrap_deprecated_username(username)
     else:
         return default
Exemplo n.º 4
0
    def _connect_cinder(self):
        """Get an OpenStack Cinder (block storage) client object."""
        api_version = self._get_config_value(
            'os_volume_api_version', get_env('OS_VOLUME_API_VERSION', 2))

        return cinder_client.Client(api_version,
                                    auth_url=self.auth_url,
                                    session=self._keystone_session,
                                    region_name=self.region_name)
Exemplo n.º 5
0
    def _connect_nova_region(self, region_name):
        """Get an OpenStack Nova (compute) client object."""
        # Force reauthentication with Keystone
        self._cached_keystone_session = None

        api_version = self._get_config_value(
            'os_compute_api_version', get_env('OS_COMPUTE_API_VERSION', 2))
        service_name = self._get_config_value(
            'nova_service_name', get_env('NOVA_SERVICE_NAME', None))

        if self.config.debug_mode:
            nova_shell.OpenStackComputeShell().setup_debugging(True)

        nova = nova_client.Client(
            api_version,
            session=self._keystone_session,
            auth_url=self.auth_url,
            region_name=region_name,
            service_name=service_name,
            http_log_debug=True if self.config.debug_mode else False)
        return nova
Exemplo n.º 6
0
    def __init__(self, config):
        super(AWSCloudProvider, self).__init__(config)

        # Initialize cloud connection fields
        # These are passed as-is to Boto
        self._region_name = self._get_config_value('aws_region_name',
                                                   'us-east-1')
        self._zone_name = self._get_config_value('aws_zone_name')
        self.session_cfg = {
            'aws_access_key_id':
            self._get_config_value('aws_access_key',
                                   get_env('AWS_ACCESS_KEY')),
            'aws_secret_access_key':
            self._get_config_value('aws_secret_key',
                                   get_env('AWS_SECRET_KEY')),
            'aws_session_token':
            self._get_config_value('aws_session_token', None)
        }
        self.ec2_cfg = {
            'use_ssl': self._get_config_value('ec2_is_secure', True),
            'verify': self._get_config_value('ec2_validate_certs', True),
            'endpoint_url': self._get_config_value('ec2_endpoint_url')
        }
        self.s3_cfg = {
            'use_ssl': self._get_config_value('s3_is_secure', True),
            'verify': self._get_config_value('s3_validate_certs', True),
            'endpoint_url': self._get_config_value('s3_endpoint_url')
        }

        # service connections, lazily initialized
        self._session = None
        self._ec2_conn = None
        self._vpc_conn = None
        self._s3_conn = None

        # Initialize provider services
        self._compute = AWSComputeService(self)
        self._networking = AWSNetworkingService(self)
        self._security = AWSSecurityService(self)
        self._storage = AWSStorageService(self)
Exemplo n.º 7
0
    def _connect_swift(self, options=None):
        """
        Get an OpenStack Swift (object store) client connection.

        :param options: A dictionary of options from which values will be
            passed to the connection.
        :return: A Swift client connection using the auth credentials held by
            the OpenStackCloudProvider instance
        """
        clean_options = self._clean_options(options,
                                            swift_client.Connection.__init__)
        storage_url = self._get_config_value('os_storage_url',
                                             get_env('OS_STORAGE_URL', None))
        auth_token = self._get_config_value('os_auth_token',
                                            get_env('OS_AUTH_TOKEN', None))
        if storage_url and auth_token:
            clean_options['preauthurl'] = storage_url
            clean_options['preauthtoken'] = auth_token
        else:
            clean_options['authurl'] = self.auth_url
            clean_options['session'] = self._keystone_session
        return swift_client.Connection(**clean_options)
Exemplo n.º 8
0
    def test_type_validation(self):
        """
        Make sure internal type checking implementation properly sets types.
        """
        self.provider.config['text_type_check'] = 'test-text'
        config_value = self.provider._get_config_value('text_type_check', None)
        self.assertIsInstance(config_value, six.string_types)

        env_value = self.provider._get_config_value('some_config_value',
                                                    get_env('MOTO_AMIS_PATH'))
        self.assertIsInstance(env_value, six.string_types)

        none_value = self.provider._get_config_value(
            'some_config_value', get_env('MISSING_ENV', None))
        self.assertIsNone(none_value)

        bool_value = self.provider._get_config_value(
            'some_config_value', get_env('MISSING_ENV', True))
        self.assertIsInstance(bool_value, bool)

        int_value = self.provider._get_config_value('default_result_limit',
                                                    None)
        self.assertIsInstance(int_value, int)
Exemplo n.º 9
0
 def create_provider_instance(self):
     provider_name = get_env("CB_TEST_PROVIDER", "aws")
     use_mock_drivers = parse_bool(
         os.environ.get("CB_USE_MOCK_PROVIDERS", "True"))
     factory = CloudProviderFactory()
     provider_class = factory.get_provider_class(provider_name,
                                                 get_mock=use_mock_drivers)
     config = {
         'default_wait_interval':
         self.get_provider_wait_interval(provider_class),
         'default_result_limit':
         5
     }
     return provider_class(config)
Exemplo n.º 10
0
 def create_provider_instance(self):
     provider_name = cb_helpers.get_env("CB_TEST_PROVIDER", "aws")
     zone_cfg_key = get_provider_test_data(provider_name,
                                           'placement_cfg_key')
     factory = CloudProviderFactory()
     provider_class = factory.get_provider_class(provider_name)
     config = {
         'default_wait_interval':
         self.get_provider_wait_interval(provider_class),
         'default_result_limit':
         5,
         zone_cfg_key:
         get_provider_test_data(provider_name, 'placement')
     }
     return provider_class(config)
Exemplo n.º 11
0
    def __init__(self, config):
        super(OpenStackCloudProvider, self).__init__(config)

        # Initialize cloud connection fields
        self.username = self._get_config_value(
            'os_username', get_env('OS_USERNAME'))
        self.password = self._get_config_value(
            'os_password', get_env('OS_PASSWORD'))
        self.project_name = self._get_config_value(
            'os_project_name', get_env('OS_PROJECT_NAME')
            or get_env('OS_TENANT_NAME'))
        self.auth_url = self._get_config_value(
            'os_auth_url', get_env('OS_AUTH_URL'))
        self._region_name = self._get_config_value(
            'os_region_name', get_env('OS_REGION_NAME'))
        self._zone_name = self._get_config_value(
            'os_zone_name', get_env('OS_ZONE_NAME'))
        self.project_domain_name = self._get_config_value(
            'os_project_domain_name',
            get_env('OS_PROJECT_DOMAIN_NAME'))
        self.user_domain_name = self._get_config_value(
            'os_user_domain_name',
            get_env('OS_USER_DOMAIN_NAME'))

        # Service connections, lazily initialized
        self._nova = None
        self._keystone = None
        self._glance = None
        self._cinder = None
        self._swift = None
        self._neutron = None
        self._os_conn = None

        # Additional cached variables
        self._cached_keystone_session = None

        # Initialize provider services
        self._compute = OpenStackComputeService(self)
        self._networking = OpenStackNetworkingService(self)
        self._security = OpenStackSecurityService(self)
        self._storage = OpenStackStorageService(self)
Exemplo n.º 12
0
class BaseInternetGateway(BaseCloudResource, BaseObjectLifeCycleMixin,
                          InternetGateway):

    CB_DEFAULT_INET_GATEWAY_NAME = cb_helpers.get_env(
        'CB_DEFAULT_INET_GATEWAY_NAME', 'cloudbridge-inetgateway')

    def __init__(self, provider):
        super(BaseInternetGateway, self).__init__(provider)
        self.__provider = provider

    def __eq__(self, other):
        return (isinstance(other, InternetGateway) and
                # pylint:disable=protected-access
                self._provider == other._provider and self.id == other.id)

    def wait_till_ready(self, timeout=None, interval=None):
        self.wait_for(
            [GatewayState.AVAILABLE],
            terminal_states=[GatewayState.ERROR, GatewayState.UNKNOWN],
            timeout=timeout,
            interval=interval)
Exemplo n.º 13
0
            if op_func(sys.version_info, (major, minor)):
                self.skipTest(
                    "Skipping test because python version {0} is {1} expected"
                    " version {2}".format(sys.version_info[:2], op,
                                          (major, minor)))
            func(self, *args, **kwargs)

        return wrapper

    return wrap


TEST_DATA_CONFIG = {
    "AWSCloudProvider": {
        # Match the ami value with entry in custom_amis.json for use with moto
        "image": cb_helpers.get_env('CB_IMAGE_AWS', 'ami-aa2ea6d0'),
        "vm_type": cb_helpers.get_env('CB_VM_TYPE_AWS', 't2.nano'),
        "placement": cb_helpers.get_env('CB_PLACEMENT_AWS', 'us-east-1a'),
        "placement_cfg_key": "aws_zone_name"
    },
    'OpenStackCloudProvider': {
        'image':
        cb_helpers.get_env('CB_IMAGE_OS',
                           'c66bdfa1-62b1-43be-8964-e9ce208ac6a5'),
        "vm_type":
        cb_helpers.get_env('CB_VM_TYPE_OS', 'm1.tiny'),
        "placement":
        cb_helpers.get_env('CB_PLACEMENT_OS', 'nova'),
        "placement_cfg_key":
        "os_zone_name"
    },
Exemplo n.º 14
0
            if provider:
                for service in services:
                    if not provider.has_service(service):
                        self.skipTest("Skipping test because '%s' service is"
                                      " not implemented" % (service, ))
            func(self, *args, **kwargs)

        return wrapper

    return wrap


TEST_DATA_CONFIG = {
    "AWSCloudProvider": {
        # Match the ami value with entry in custom_amis.json for use with moto
        "image": get_env('CB_IMAGE_AWS', 'ami-aa2ea6d0'),
        "vm_type": get_env('CB_VM_TYPE_AWS', 't2.nano'),
        "placement": get_env('CB_PLACEMENT_AWS', 'us-east-1a'),
    },
    "OpenStackCloudProvider": {
        "image":
        os.environ.get('CB_IMAGE_OS', 'c66bdfa1-62b1-43be-8964-e9ce208ac6a5'),
        "vm_type":
        os.environ.get('CB_VM_TYPE_OS', 'm1.tiny'),
        "placement":
        os.environ.get('CB_PLACEMENT_OS', 'nova'),
    },
    "AzureCloudProvider": {
        "placement":
        get_env('CB_PLACEMENT_AZURE', 'eastus'),
        "image":