Ejemplo 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)
Ejemplo n.º 2
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'),
            'config':
            Config(signature_version=self._get_config_value(
                's3_signature_version', 's3v4'))
        }

        # 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)
        self._dns = AWSDnsService(self)
Ejemplo 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
Ejemplo 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)
Ejemplo n.º 5
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_id = self._get_config_value(
            'os_project_domain_id',
            get_env('OS_PROJECT_DOMAIN_ID'))
        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._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)
        self._dns = OpenStackDnsService(self)
Ejemplo n.º 6
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
Ejemplo n.º 7
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)
Ejemplo n.º 8
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)
Ejemplo n.º 9
0
        def wrapper(self, *args, **kwargs):
            op_func = stringToOperator(op)
            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"
    },
    'GCPCloudProvider': {
        'image': cb_helpers.get_env(
            'CB_IMAGE_GCP',
            'https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/'
Ejemplo n.º 10
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'))
        self.secret = self._get_config_value('azure_secret',
                                             get_env('AZURE_SECRET'))
        self.tenant = self._get_config_value('azure_tenant',
                                             get_env('AZURE_TENANT'))

        # optional config values
        self.access_token = self._get_config_value(
            'azure_access_token', get_env('AZURE_ACCESS_TOKEN'))
        self._region_name = self._get_config_value(
            'azure_region_name', get_env('AZURE_REGION_NAME', 'eastus'))
        self._zone_name = self._get_config_value('azure_zone_name',
                                                 get_env('AZURE_ZONE_NAME'))
        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')) \
            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)