diff --git a/docs/compute/drivers/outscale_inc.rst b/docs/compute/drivers/outscale_inc.rst new file mode 100644 index 0000000000..b765ad264e --- /dev/null +++ b/docs/compute/drivers/outscale_inc.rst @@ -0,0 +1,31 @@ +Outscale INC Driver Documentation +================================= + +`Outscale INC`_ provides an IaaS platform allowing +developers to benefit from all the flexibility of the Cloud. +This IaaS platform relies on TINA OS, its Cloud manager which purpose is to +provide great performances on the Cloud. +TINA OS is an own developed software with APIs compatible with AWS EC2 (TM). + +.. figure:: /_static/images/provider_logos/outscale.png + :align: center + :width: 300 + :target: https://www.outscale.com/ + +Outscale users can start virtual machines in the following regions: + +* EU West (Paris France) Region +* US East (Boston US) Region +* (Soon) US East (New Jersey) Region +* (Soon) Asia (Hong Kong) Region + +Outscale INC is an american company: prices are in $. + +API Docs +-------- + +.. autoclass:: libcloud.compute.drivers.ec2.OutscaleINCNodeDriver + :members: + :inherited-members: + +.. _`Outscale INC`: https://www.outscale.com/ diff --git a/docs/compute/drivers/outscale_sas.rst b/docs/compute/drivers/outscale_sas.rst index 03e7d4e3c2..80a1fcd9e0 100644 --- a/docs/compute/drivers/outscale_sas.rst +++ b/docs/compute/drivers/outscale_sas.rst @@ -1,5 +1,5 @@ -Outscale Driver Documentation -============================= +Outscale SAS Driver Documentation +================================= `Outscale SAS`_ provides an IaaS platform allowing developers to benefit from all the flexibility of the Cloud. @@ -24,7 +24,7 @@ Outscale SAS is an european company: prices are in €. API Docs -------- -.. autoclass:: libcloud.compute.drivers.ec2.OutscaleNodeDriver +.. autoclass:: libcloud.compute.drivers.ec2.OutscaleSASNodeDriver :members: :inherited-members: diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index 494336936d..e4e564afa4 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -49,6 +49,7 @@ 'INSTANCE_TYPES', 'OUTSCALE_INSTANCE_TYPES', 'OUTSCALE_SAS_REGION_DETAILS', + 'OUTSCALE_INC_REGION_DETAILS', 'DEFAULT_EUCA_API_VERSION', 'EUCA_NAMESPACE', @@ -59,6 +60,7 @@ 'EucNodeDriver', 'OutscaleSASNodeDriver', + 'OutscaleINCNodeDriver', 'EC2NodeLocation', 'EC2ReservedNode', @@ -873,7 +875,7 @@ """ The function manipulating Outscale cloud regions will be overriden because Outscale instances types are in a separate dict so also declare Outscale cloud -regions in another constant. +regions in some other constants. """ OUTSCALE_SAS_REGION_DETAILS = { 'eu-west-3': { @@ -960,6 +962,91 @@ } +OUTSCALE_INC_REGION_DETAILS = { + 'eu-west-1': { + 'endpoint': 'api.eu-west-1.outscale.com', + 'api_name': 'osc_inc_eu_west_1', + 'country': 'FRANCE', + 'instance_types': [ + 't1.micro', + 'm1.small', + 'm1.medium', + 'm1.large', + 'm1.xlarge', + 'c1.medium', + 'c1.xlarge', + 'm2.xlarge', + 'm2.2xlarge', + 'm2.4xlarge', + 'nv1.small', + 'nv1.medium', + 'nv1.large', + 'nv1.xlarge', + 'cc1.4xlarge', + 'cc2.8xlarge', + 'm3.xlarge', + 'm3.2xlarge', + 'cr1.8xlarge', + 'os1.8xlarge' + ] + }, + 'eu-west-3': { + 'endpoint': 'api-ppd.outscale.com', + 'api_name': 'osc_inc_eu_west_3', + 'country': 'FRANCE', + 'instance_types': [ + 't1.micro', + 'm1.small', + 'm1.medium', + 'm1.large', + 'm1.xlarge', + 'c1.medium', + 'c1.xlarge', + 'm2.xlarge', + 'm2.2xlarge', + 'm2.4xlarge', + 'nv1.small', + 'nv1.medium', + 'nv1.large', + 'nv1.xlarge', + 'cc1.4xlarge', + 'cc2.8xlarge', + 'm3.xlarge', + 'm3.2xlarge', + 'cr1.8xlarge', + 'os1.8xlarge' + ] + }, + 'us-east-1': { + 'endpoint': 'api.us-east-1.outscale.com', + 'api_name': 'osc_inc_us_east_1', + 'country': 'USA', + 'instance_types': [ + 't1.micro', + 'm1.small', + 'm1.medium', + 'm1.large', + 'm1.xlarge', + 'c1.medium', + 'c1.xlarge', + 'm2.xlarge', + 'm2.2xlarge', + 'm2.4xlarge', + 'nv1.small', + 'nv1.medium', + 'nv1.large', + 'nv1.xlarge', + 'cc1.4xlarge', + 'cc2.8xlarge', + 'm3.xlarge', + 'm3.2xlarge', + 'cr1.8xlarge', + 'os1.8xlarge' + ] + } +} + + """ Define the extra dictionary for specific resources """ @@ -4629,6 +4716,32 @@ class OutscaleNodeDriver(BaseEC2NodeDriver): 'stopped': NodeState.STOPPED } + def __init__(self, key, secret=None, secure=True, host=None, port=None, + region='us-east-1', region_details=None, **kwargs): + if hasattr(self, '_region'): + region = self._region + + if region_details is None: + raise ValueError('Invalid region_details argument') + + if region not in region_details.keys(): + raise ValueError('Invalid region: %s' % (region)) + + self.region_name = region + self.region_details = region_details + details = self.region_details[region] + self.api_name = details['api_name'] + self.country = details['country'] + + self.connectionCls.host = details['endpoint'] + + self._not_implemented_msg =\ + 'This method is not supported in the Outscale driver' + + super(BaseEC2NodeDriver, self).__init__(key=key, secret=secret, + secure=secure, host=host, + port=port, **kwargs) + def create_node(self, **kwargs): """ Create a new Outscale node. The ex_iamprofile keyword is not supported. @@ -4806,36 +4919,6 @@ def ex_detach_network_interface(self, attachment_id, force=False): """ raise NotImplementedError(self._not_implemented_msg) - -class OutscaleSASNodeDriver(OutscaleNodeDriver): - """ - Outscale SAS node driver - """ - name = 'Outscale SAS' - type = Provider.OUTSCALE_SAS - - def __init__(self, key, secret=None, secure=True, host=None, port=None, - region='us-east-1', **kwargs): - if hasattr(self, '_region'): - region = self._region - - if region not in OUTSCALE_SAS_REGION_DETAILS.keys(): - raise ValueError('Invalid region: %s' % (region)) - - details = OUTSCALE_SAS_REGION_DETAILS[region] - self.region_name = region - self.api_name = details['api_name'] - self.country = details['country'] - - self.connectionCls.host = details['endpoint'] - - self._not_implemented_msg =\ - 'This method is not supported in the Outscale driver' - - super(OutscaleNodeDriver, self).__init__(key=key, secret=secret, - secure=secure, host=host, - port=port, **kwargs) - def list_sizes(self, location=None): """ List available instance flavors/sizes @@ -4845,7 +4928,7 @@ def list_sizes(self, location=None): :rtype: ``list`` of :class:`NodeSize` """ available_types =\ - OUTSCALE_SAS_REGION_DETAILS[self.region_name]['instance_types'] + self.region_details[self.region_name]['instance_types'] sizes = [] for instance_type in available_types: @@ -4855,3 +4938,33 @@ def list_sizes(self, location=None): attributes.update({'price': price}) sizes.append(NodeSize(driver=self, **attributes)) return sizes + + +class OutscaleSASNodeDriver(OutscaleNodeDriver): + """ + Outscale SAS node driver + """ + name = 'Outscale SAS' + type = Provider.OUTSCALE_SAS + + def __init__(self, key, secret=None, secure=True, host=None, port=None, + region='us-east-1', region_details=None, **kwargs): + super(OutscaleSASNodeDriver, self).__init__( + key=key, secret=secret, secure=secure, host=host, port=port, + region=region, region_details=OUTSCALE_SAS_REGION_DETAILS, + **kwargs) + + +class OutscaleINCNodeDriver(OutscaleNodeDriver): + """ + Outscale INC node driver + """ + name = 'Outscale INC' + type = Provider.OUTSCALE_INC + + def __init__(self, key, secret=None, secure=True, host=None, port=None, + region='us-east-1', region_details=None, **kwargs): + super(OutscaleINCNodeDriver, self).__init__( + key=key, secret=secret, secure=secure, host=host, port=port, + region=region, region_details=OUTSCALE_INC_REGION_DETAILS, + **kwargs) diff --git a/libcloud/compute/providers.py b/libcloud/compute/providers.py index 2fc280bd55..3de579c0b9 100644 --- a/libcloud/compute/providers.py +++ b/libcloud/compute/providers.py @@ -143,6 +143,8 @@ ('libcloud.compute.drivers.ikoula', 'IkoulaNodeDriver'), Provider.OUTSCALE_SAS: ('libcloud.compute.drivers.ec2', 'OutscaleSASNodeDriver'), + Provider.OUTSCALE_INC: + ('libcloud.compute.drivers.ec2', 'OutscaleINCNodeDriver'), # Deprecated Provider.CLOUDSIGMA_US: diff --git a/libcloud/compute/types.py b/libcloud/compute/types.py index 290f38e82f..b2edf2d460 100644 --- a/libcloud/compute/types.py +++ b/libcloud/compute/types.py @@ -75,6 +75,7 @@ class Provider(object): :cvar EXOSCALE: Exoscale driver. :cvar IKOULA: Ikoula driver. :cvar OUTSCALE_SAS: Outscale SAS driver. + :cvar OUTSCALE_INC: Outscale INC driver. """ DUMMY = 'dummy' EC2 = 'ec2_us_east' @@ -119,6 +120,7 @@ class Provider(object): EXOSCALE = 'exoscale' IKOULA = 'ikoula' OUTSCALE_SAS = 'outscale_sas' + OUTSCALE_INC = 'outscale_inc' # OpenStack based providers HPCLOUD = 'hpcloud' diff --git a/libcloud/data/pricing.json b/libcloud/data/pricing.json index 6034ec49e4..e8aa7bf3c2 100644 --- a/libcloud/data/pricing.json +++ b/libcloud/data/pricing.json @@ -490,6 +490,75 @@ "cr1.8xlarge": "3.750", "os1.8xlarge": "6.400", "os1.8xlarge": "6.400" + }, + "osc_inc_eu_west_1": { + "t1.micro": "0.040", + "m1.small": "0.090", + "m1.medium": "0.120", + "m1.large": "0.360", + "m1.xlarge": "0.730", + "c1.medium": "0.230", + "c1.xlarge": "0.900", + "m2.xlarge": "0.410", + "m2.2xlarge": "0.820", + "m2.4xlarge": "1.640", + "nv1.small": "5.220", + "nv1.medium": "5.250", + "nv1.large": "5.490", + "nv1.xlarge": "5.610", + "cc1.4xlarge": "1.300", + "cc2.8xlarge": "2.400", + "m3.xlarge": "0.780", + "m3.2xlarge": "1.560", + "cr1.8xlarge": "3.500", + "os1.8xlarge": "4.310", + "os1.8xlarge": "4.310" + }, + "osc_inc_eu_west_3": { + "t1.micro": "0.040", + "m1.small": "0.090", + "m1.medium": "0.120", + "m1.large": "0.360", + "m1.xlarge": "0.730", + "c1.medium": "0.230", + "c1.xlarge": "0.900", + "m2.xlarge": "0.410", + "m2.2xlarge": "0.820", + "m2.4xlarge": "1.640", + "nv1.small": "5.220", + "nv1.medium": "5.250", + "nv1.large": "5.490", + "nv1.xlarge": "5.610", + "cc1.4xlarge": "1.300", + "cc2.8xlarge": "2.400", + "m3.xlarge": "0.780", + "m3.2xlarge": "1.560", + "cr1.8xlarge": "3.500", + "os1.8xlarge": "4.310", + "os1.8xlarge": "4.310" + }, + "osc_inc_us_east_1": { + "t1.micro": "0.020", + "m1.small": "0.060", + "m1.medium": "0.180", + "m1.large": "0.240", + "m1.xlarge": "0.730", + "c1.medium": "0.150", + "c1.xlarge": "0.580", + "m2.xlarge": "0.410", + "m2.2xlarge": "1.020", + "m2.4xlarge": "2.040", + "nv1.small": "5.190", + "nv1.medium": "5.250", + "nv1.large": "5.490", + "nv1.xlarge": "5.610", + "cc1.4xlarge": "1.610", + "cc2.8xlarge": "2.400", + "m3.xlarge": "0.500", + "m3.2xlarge": "1.560", + "cr1.8xlarge": "3.500", + "os1.8xlarge": "6.400", + "os1.8xlarge": "6.400" } }, "storage": {},