Repository: libcloud Updated Branches: refs/heads/trunk 771c8fb0d -> ca6ad2ad0
LIBCLOUD-553: Add support for the Outscale INC cloud. This commits add the support for Outscale INC a parent company of Outscale SAS working under the American laws. Closes #293 Signed-off-by: Tomaz Muraus <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/ca6ad2ad Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/ca6ad2ad Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/ca6ad2ad Branch: refs/heads/trunk Commit: ca6ad2ad08c1db37acc98e4a62a401336771c3b5 Parents: 771c8fb Author: Tomaz Muraus <[email protected]> Authored: Fri May 16 23:35:24 2014 +0200 Committer: Tomaz Muraus <[email protected]> Committed: Fri May 16 23:38:43 2014 +0200 ---------------------------------------------------------------------- CHANGES.rst | 5 +- .../_supported_methods_block_storage.rst | 2 + .../_supported_methods_image_management.rst | 2 + .../_supported_methods_key_pair_management.rst | 2 + docs/compute/_supported_methods_main.rst | 2 + docs/compute/_supported_providers.rst | 2 + docs/compute/drivers/outscale_inc.rst | 31 ++++ docs/compute/drivers/outscale_sas.rst | 6 +- libcloud/compute/drivers/ec2.py | 177 +++++++++++++++---- libcloud/compute/providers.py | 2 + libcloud/compute/types.py | 2 + libcloud/data/pricing.json | 69 ++++++++ 12 files changed, 265 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/CHANGES.rst ---------------------------------------------------------------------- diff --git a/CHANGES.rst b/CHANGES.rst index 6027815..73bf6b6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -130,8 +130,9 @@ Compute (GITHUB-287) [earthgecko] -- Add a new driver for Outscale cloud (http://www.outscale.com). - (GITHUB-285) +- Add a new driver for Outscale SAS and Outscale INC cloud + (http://www.outscale.com). + (GITHUB-285, GITHUB-293, LIBCLOUD-536, LIBCLOUD-553) [Benoit Canet] - Add new driver for HP Public Cloud (Helion) available via Provider.HPCLOUD http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/docs/compute/_supported_methods_block_storage.rst ---------------------------------------------------------------------- diff --git a/docs/compute/_supported_methods_block_storage.rst b/docs/compute/_supported_methods_block_storage.rst index ffbd0bc..b371fde 100644 --- a/docs/compute/_supported_methods_block_storage.rst +++ b/docs/compute/_supported_methods_block_storage.rst @@ -47,6 +47,7 @@ Provider list volumes create volume destroy volume `OpenNebula (v3.8)`_ yes yes yes yes yes no no `OpenStack`_ yes yes yes yes yes no no `Opsource`_ no no no no no no no +`Outscale INC`_ yes yes yes yes yes yes yes `Outscale SAS`_ yes yes yes yes yes yes yes `Rackspace Cloud (Next Gen)`_ yes yes yes yes yes no no `Rackspace Cloud (First Gen)`_ yes yes yes yes yes no no @@ -107,6 +108,7 @@ Provider list volumes create volume destroy volume .. _`OpenNebula (v3.8)`: http://opennebula.org/ .. _`OpenStack`: http://openstack.org/ .. _`Opsource`: http://www.opsource.net/ +.. _`Outscale INC`: http://www.outscale.com .. _`Outscale SAS`: http://www.outscale.com .. _`Rackspace Cloud (Next Gen)`: http://www.rackspace.com .. _`Rackspace Cloud (First Gen)`: http://www.rackspace.com http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/docs/compute/_supported_methods_image_management.rst ---------------------------------------------------------------------- diff --git a/docs/compute/_supported_methods_image_management.rst b/docs/compute/_supported_methods_image_management.rst index 9dcb206..b1ec17b 100644 --- a/docs/compute/_supported_methods_image_management.rst +++ b/docs/compute/_supported_methods_image_management.rst @@ -47,6 +47,7 @@ Provider list images get image create image delete `OpenNebula (v3.8)`_ yes no no no no `OpenStack`_ yes yes no no no `Opsource`_ yes no no no no +`Outscale INC`_ yes yes yes yes yes `Outscale SAS`_ yes yes yes yes yes `Rackspace Cloud (Next Gen)`_ yes yes yes yes no `Rackspace Cloud (First Gen)`_ yes yes yes yes no @@ -107,6 +108,7 @@ Provider list images get image create image delete .. _`OpenNebula (v3.8)`: http://opennebula.org/ .. _`OpenStack`: http://openstack.org/ .. _`Opsource`: http://www.opsource.net/ +.. _`Outscale INC`: http://www.outscale.com .. _`Outscale SAS`: http://www.outscale.com .. _`Rackspace Cloud (Next Gen)`: http://www.rackspace.com .. _`Rackspace Cloud (First Gen)`: http://www.rackspace.com http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/docs/compute/_supported_methods_key_pair_management.rst ---------------------------------------------------------------------- diff --git a/docs/compute/_supported_methods_key_pair_management.rst b/docs/compute/_supported_methods_key_pair_management.rst index d37d987..7467c50 100644 --- a/docs/compute/_supported_methods_key_pair_management.rst +++ b/docs/compute/_supported_methods_key_pair_management.rst @@ -47,6 +47,7 @@ Provider list key pairs get key pair create key pai `OpenNebula (v3.8)`_ no no no no no no `OpenStack`_ no no no no no no `Opsource`_ no no no no no no +`Outscale INC`_ yes yes yes yes no yes `Outscale SAS`_ yes yes yes yes no yes `Rackspace Cloud (Next Gen)`_ yes yes yes yes no yes `Rackspace Cloud (First Gen)`_ no no no no no no @@ -107,6 +108,7 @@ Provider list key pairs get key pair create key pai .. _`OpenNebula (v3.8)`: http://opennebula.org/ .. _`OpenStack`: http://openstack.org/ .. _`Opsource`: http://www.opsource.net/ +.. _`Outscale INC`: http://www.outscale.com .. _`Outscale SAS`: http://www.outscale.com .. _`Rackspace Cloud (Next Gen)`: http://www.rackspace.com .. _`Rackspace Cloud (First Gen)`: http://www.rackspace.com http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/docs/compute/_supported_methods_main.rst ---------------------------------------------------------------------- diff --git a/docs/compute/_supported_methods_main.rst b/docs/compute/_supported_methods_main.rst index c2f728e..5c3bd08 100644 --- a/docs/compute/_supported_methods_main.rst +++ b/docs/compute/_supported_methods_main.rst @@ -47,6 +47,7 @@ Provider list nodes create node reboot node destroy `OpenNebula (v3.8)`_ yes yes yes yes yes yes no `OpenStack`_ yes no yes yes yes yes no `Opsource`_ yes yes yes yes yes yes yes +`Outscale INC`_ yes yes yes yes yes yes yes `Outscale SAS`_ yes yes yes yes yes yes yes `Rackspace Cloud (Next Gen)`_ yes yes yes yes yes yes yes `Rackspace Cloud (First Gen)`_ yes yes yes yes yes yes yes @@ -107,6 +108,7 @@ Provider list nodes create node reboot node destroy .. _`OpenNebula (v3.8)`: http://opennebula.org/ .. _`OpenStack`: http://openstack.org/ .. _`Opsource`: http://www.opsource.net/ +.. _`Outscale INC`: http://www.outscale.com .. _`Outscale SAS`: http://www.outscale.com .. _`Rackspace Cloud (Next Gen)`: http://www.rackspace.com .. _`Rackspace Cloud (First Gen)`: http://www.rackspace.com http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/docs/compute/_supported_providers.rst ---------------------------------------------------------------------- diff --git a/docs/compute/_supported_providers.rst b/docs/compute/_supported_providers.rst index 5960b8c..5ca1534 100644 --- a/docs/compute/_supported_providers.rst +++ b/docs/compute/_supported_providers.rst @@ -47,6 +47,7 @@ Provider Documentation `OpenNebula (v3.8)`_ OPENNEBULA :mod:`libcloud.compute.drivers.opennebula` :class:`OpenNebulaNodeDriver` `OpenStack`_ :doc:`Click </compute/drivers/openstack>` OPENSTACK :mod:`libcloud.compute.drivers.openstack` :class:`OpenStackNodeDriver` `Opsource`_ OPSOURCE :mod:`libcloud.compute.drivers.opsource` :class:`OpsourceNodeDriver` +`Outscale INC`_ :doc:`Click </compute/drivers/outscale_inc>` OUTSCALE_INC :mod:`libcloud.compute.drivers.ec2` :class:`OutscaleINCNodeDriver` `Outscale SAS`_ :doc:`Click </compute/drivers/outscale_sas>` OUTSCALE_SAS :mod:`libcloud.compute.drivers.ec2` :class:`OutscaleSASNodeDriver` `Rackspace Cloud (Next Gen)`_ :doc:`Click </compute/drivers/rackspace>` RACKSPACE :mod:`libcloud.compute.drivers.rackspace` :class:`RackspaceNodeDriver` `Rackspace Cloud (First Gen)`_ RACKSPACE_FIRST_GEN :mod:`libcloud.compute.drivers.rackspace` :class:`RackspaceFirstGenNodeDriver` @@ -107,6 +108,7 @@ Provider Documentation .. _`OpenNebula (v3.8)`: http://opennebula.org/ .. _`OpenStack`: http://openstack.org/ .. _`Opsource`: http://www.opsource.net/ +.. _`Outscale INC`: http://www.outscale.com .. _`Outscale SAS`: http://www.outscale.com .. _`Rackspace Cloud (Next Gen)`: http://www.rackspace.com .. _`Rackspace Cloud (First Gen)`: http://www.rackspace.com http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/docs/compute/drivers/outscale_inc.rst ---------------------------------------------------------------------- diff --git a/docs/compute/drivers/outscale_inc.rst b/docs/compute/drivers/outscale_inc.rst new file mode 100644 index 0000000..b765ad2 --- /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/ http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/docs/compute/drivers/outscale_sas.rst ---------------------------------------------------------------------- diff --git a/docs/compute/drivers/outscale_sas.rst b/docs/compute/drivers/outscale_sas.rst index 03e7d4e..80a1fcd 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: http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/libcloud/compute/drivers/ec2.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index f39deea..9962b2d 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -49,6 +49,7 @@ __all__ = [ 'INSTANCE_TYPES', 'OUTSCALE_INSTANCE_TYPES', 'OUTSCALE_SAS_REGION_DETAILS', + 'OUTSCALE_INC_REGION_DETAILS', 'DEFAULT_EUCA_API_VERSION', 'EUCA_NAMESPACE', @@ -59,6 +60,7 @@ __all__ = [ 'EucNodeDriver', 'OutscaleSASNodeDriver', + 'OutscaleINCNodeDriver', 'EC2NodeLocation', 'EC2ReservedNode', @@ -877,7 +879,7 @@ OUTSCALE_INSTANCE_TYPES = { """ 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': { @@ -964,6 +966,91 @@ OUTSCALE_SAS_REGION_DETAILS = { } +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 """ @@ -4633,6 +4720,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. @@ -4810,36 +4923,6 @@ class OutscaleNodeDriver(BaseEC2NodeDriver): """ 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 @@ -4849,7 +4932,7 @@ class OutscaleSASNodeDriver(OutscaleNodeDriver): :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: @@ -4859,3 +4942,33 @@ class OutscaleSASNodeDriver(OutscaleNodeDriver): 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) http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/libcloud/compute/providers.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/providers.py b/libcloud/compute/providers.py index 2fc280b..3de579c 100644 --- a/libcloud/compute/providers.py +++ b/libcloud/compute/providers.py @@ -143,6 +143,8 @@ DRIVERS = { ('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: http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/libcloud/compute/types.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/types.py b/libcloud/compute/types.py index 290f38e..b2edf2d 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' http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca6ad2ad/libcloud/data/pricing.json ---------------------------------------------------------------------- diff --git a/libcloud/data/pricing.json b/libcloud/data/pricing.json index 6034ec4..e8aa7bf 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": {},
