Repository: libcloud Updated Branches: refs/heads/trunk 0452d98fd -> 4ffa70380
Add new driver for Kili public cloud. Kili public cloud is a public cloud provider in Africa powered by OpenStack. Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/4ffa7038 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/4ffa7038 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/4ffa7038 Branch: refs/heads/trunk Commit: 4ffa70380ee76ecf0b4b3947d90b6e086085a44b Parents: 0452d98 Author: Tomaz Muraus <[email protected]> Authored: Tue May 27 14:21:55 2014 +0200 Committer: Tomaz Muraus <[email protected]> Committed: Tue May 27 14:46:31 2014 +0200 ---------------------------------------------------------------------- CHANGES.rst | 3 + .../_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/kili.rst | 35 ++++++++ .../compute/openstack/kilicloud_native.py | 10 +++ libcloud/compute/drivers/kili.py | 87 ++++++++++++++++++++ libcloud/compute/providers.py | 2 + libcloud/compute/types.py | 1 + 11 files changed, 148 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/CHANGES.rst ---------------------------------------------------------------------- diff --git a/CHANGES.rst b/CHANGES.rst index 8be428f..e1e0a39 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -159,6 +159,9 @@ Compute (GITHUB-299, LIBCLOUD-562) [Magnus Andersson] +- Add new driver for Kili public cloud (http://kili.io/) + [Tomaz Muraus] + Storage ~~~~~~~ http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/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 36aa971..1776d0a 100644 --- a/docs/compute/_supported_methods_block_storage.rst +++ b/docs/compute/_supported_methods_block_storage.rst @@ -39,6 +39,7 @@ Provider list volumes create volume destroy volume `IBM SmartCloud Enterprise`_ yes yes yes yes yes no no `Ikoula`_ yes yes yes yes yes no no `Joyent`_ no no no no no no no +`Kili Public Cloud`_ yes yes yes yes yes no no `KTUCloud`_ yes yes yes yes yes no no `Libvirt`_ no no no no no no no `Linode`_ no no no no no no no @@ -101,6 +102,7 @@ Provider list volumes create volume destroy volume .. _`IBM SmartCloud Enterprise`: http://ibm.com/services/us/en/cloud-enterprise/ .. _`Ikoula`: http://express.ikoula.co.uk/cloudstack .. _`Joyent`: http://www.joyentcloud.com +.. _`Kili Public Cloud`: http://kili.io/ .. _`KTUCloud`: https://ucloudbiz.olleh.com/ .. _`Libvirt`: http://libvirt.org/ .. _`Linode`: http://www.linode.com/ http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/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 5516774..0734374 100644 --- a/docs/compute/_supported_methods_image_management.rst +++ b/docs/compute/_supported_methods_image_management.rst @@ -39,6 +39,7 @@ Provider list images get image create image delete `IBM SmartCloud Enterprise`_ yes no yes no no `Ikoula`_ yes no no no no `Joyent`_ yes no no no no +`Kili Public Cloud`_ yes yes yes yes no `KTUCloud`_ yes no no no no `Libvirt`_ no no no no no `Linode`_ yes no no no no @@ -101,6 +102,7 @@ Provider list images get image create image delete .. _`IBM SmartCloud Enterprise`: http://ibm.com/services/us/en/cloud-enterprise/ .. _`Ikoula`: http://express.ikoula.co.uk/cloudstack .. _`Joyent`: http://www.joyentcloud.com +.. _`Kili Public Cloud`: http://kili.io/ .. _`KTUCloud`: https://ucloudbiz.olleh.com/ .. _`Libvirt`: http://libvirt.org/ .. _`Linode`: http://www.linode.com/ http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/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 938ceeb..f474959 100644 --- a/docs/compute/_supported_methods_key_pair_management.rst +++ b/docs/compute/_supported_methods_key_pair_management.rst @@ -39,6 +39,7 @@ Provider list key pairs get key pair create key pai `IBM SmartCloud Enterprise`_ no no no no no no `Ikoula`_ yes yes yes yes no yes `Joyent`_ no no no no no no +`Kili Public Cloud`_ yes yes yes yes no yes `KTUCloud`_ yes yes yes yes no yes `Libvirt`_ no no no no no no `Linode`_ no no no no no no @@ -101,6 +102,7 @@ Provider list key pairs get key pair create key pai .. _`IBM SmartCloud Enterprise`: http://ibm.com/services/us/en/cloud-enterprise/ .. _`Ikoula`: http://express.ikoula.co.uk/cloudstack .. _`Joyent`: http://www.joyentcloud.com +.. _`Kili Public Cloud`: http://kili.io/ .. _`KTUCloud`: https://ucloudbiz.olleh.com/ .. _`Libvirt`: http://libvirt.org/ .. _`Linode`: http://www.linode.com/ http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/docs/compute/_supported_methods_main.rst ---------------------------------------------------------------------- diff --git a/docs/compute/_supported_methods_main.rst b/docs/compute/_supported_methods_main.rst index 3510369..5fab349 100644 --- a/docs/compute/_supported_methods_main.rst +++ b/docs/compute/_supported_methods_main.rst @@ -39,6 +39,7 @@ Provider list nodes create node reboot node destroy `IBM SmartCloud Enterprise`_ yes yes yes yes yes yes no `Ikoula`_ yes yes yes yes yes yes yes `Joyent`_ yes yes yes yes yes yes yes +`Kili Public Cloud`_ yes yes yes yes yes yes yes `KTUCloud`_ yes yes yes yes yes yes yes `Libvirt`_ yes no yes yes no no no `Linode`_ yes yes yes yes yes yes yes @@ -101,6 +102,7 @@ Provider list nodes create node reboot node destroy .. _`IBM SmartCloud Enterprise`: http://ibm.com/services/us/en/cloud-enterprise/ .. _`Ikoula`: http://express.ikoula.co.uk/cloudstack .. _`Joyent`: http://www.joyentcloud.com +.. _`Kili Public Cloud`: http://kili.io/ .. _`KTUCloud`: https://ucloudbiz.olleh.com/ .. _`Libvirt`: http://libvirt.org/ .. _`Linode`: http://www.linode.com/ http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/docs/compute/_supported_providers.rst ---------------------------------------------------------------------- diff --git a/docs/compute/_supported_providers.rst b/docs/compute/_supported_providers.rst index 0528390..53c7099 100644 --- a/docs/compute/_supported_providers.rst +++ b/docs/compute/_supported_providers.rst @@ -39,6 +39,7 @@ Provider Documentation `IBM SmartCloud Enterprise`_ IBM :mod:`libcloud.compute.drivers.ibm_sce` :class:`IBMNodeDriver` `Ikoula`_ :doc:`Click </compute/drivers/ikoula>` IKOULA :mod:`libcloud.compute.drivers.ikoula` :class:`IkoulaNodeDriver` `Joyent`_ JOYENT :mod:`libcloud.compute.drivers.joyent` :class:`JoyentNodeDriver` +`Kili Public Cloud`_ :doc:`Click </compute/drivers/kili>` KILI :mod:`libcloud.compute.drivers.kili` :class:`KiliCloudNodeDriver` `KTUCloud`_ KTUCLOUD :mod:`libcloud.compute.drivers.ktucloud` :class:`KTUCloudNodeDriver` `Libvirt`_ :doc:`Click </compute/drivers/libvirt>` LIBVIRT :mod:`libcloud.compute.drivers.libvirt_driver` :class:`LibvirtNodeDriver` `Linode`_ LINODE :mod:`libcloud.compute.drivers.linode` :class:`LinodeNodeDriver` @@ -101,6 +102,7 @@ Provider Documentation .. _`IBM SmartCloud Enterprise`: http://ibm.com/services/us/en/cloud-enterprise/ .. _`Ikoula`: http://express.ikoula.co.uk/cloudstack .. _`Joyent`: http://www.joyentcloud.com +.. _`Kili Public Cloud`: http://kili.io/ .. _`KTUCloud`: https://ucloudbiz.olleh.com/ .. _`Libvirt`: http://libvirt.org/ .. _`Linode`: http://www.linode.com/ http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/docs/compute/drivers/kili.rst ---------------------------------------------------------------------- diff --git a/docs/compute/drivers/kili.rst b/docs/compute/drivers/kili.rst new file mode 100644 index 0000000..71a93e2 --- /dev/null +++ b/docs/compute/drivers/kili.rst @@ -0,0 +1,35 @@ +Kili Cloud Computer Driver Documentation +======================================== + +`Kili Cloud`_ is a public cloud provider based in Africa. + +Kili Cloud driver is based on the OpenStack one. For more information +information and OpenStack specific documentation, please refer to +:doc:`OpenStack Compute Driver Documentation <openstack>` page. + +Examples +-------- + +1. Instantiating the driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Unlike other OpenStack based providers, Kili cloud also requires you to specify +tenant name when connecting to their cloud. You can do that by passing +``tenant_name`` argument to the driver constructor as shown in the code example +bellow. + +This attribute represents a company name you have entered while signing up for +Kili. + +.. literalinclude:: /examples/compute/openstack/kilicloud_native.py + :language: python + +API Docs +-------- + +.. autoclass:: libcloud.compute.drivers.kili.KiliCloudNodeDriver + :members: + :inherited-members: + +.. _`Kili Cloud`: http://kili.io/ +.. _`Kili Cloud dashboard`: https://dash.kili.io http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/docs/examples/compute/openstack/kilicloud_native.py ---------------------------------------------------------------------- diff --git a/docs/examples/compute/openstack/kilicloud_native.py b/docs/examples/compute/openstack/kilicloud_native.py new file mode 100644 index 0000000..2c83e12 --- /dev/null +++ b/docs/examples/compute/openstack/kilicloud_native.py @@ -0,0 +1,10 @@ +from libcloud.compute.types import Provider +from libcloud.compute.providers import get_driver + +USERNAME = 'your account username' +PASSWORD = 'your account password' +TENANT_NAME = 'project name' + +cls = get_driver(Provider.KILI) +driver = cls(USERNAME, PASSWORD, tenant_name=TENANT_NAME) +print(driver.list_nodes()) http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/libcloud/compute/drivers/kili.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/kili.py b/libcloud/compute/drivers/kili.py new file mode 100644 index 0000000..de61067 --- /dev/null +++ b/libcloud/compute/drivers/kili.py @@ -0,0 +1,87 @@ +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +HP Public cloud driver which is esentially just a small wrapper around +OpenStack driver. +""" + +from libcloud.compute.types import Provider, LibcloudError +from libcloud.compute.drivers.openstack import OpenStack_1_1_Connection +from libcloud.compute.drivers.openstack import OpenStack_1_1_NodeDriver + +__all__ = [ + 'KiliCloudNodeDriver' +] + +ENDPOINT_ARGS = { + 'service_type': 'compute', + 'name': 'nova', + 'region': 'RegionOne' +} + +AUTH_URL = 'https://api.kili.io/keystone/v2.0/tokens' + + +class KiliCloudConnection(OpenStack_1_1_Connection): + _auth_version = '2.0_password' + + def __init__(self, *args, **kwargs): + self.region = kwargs.pop('region', None) + self.get_endpoint_args = kwargs.pop('get_endpoint_args', None) + super(KiliCloudConnection, self).__init__(*args, **kwargs) + + def get_endpoint(self): + if not self.get_endpoint_args: + raise LibcloudError( + 'KiliCloudConnection must have get_endpoint_args set') + + if '2.0_password' in self._auth_version: + ep = self.service_catalog.get_endpoint(**self.get_endpoint_args) + else: + raise LibcloudError( + 'Auth version "%s" not supported' % (self._auth_version)) + + public_url = ep.get('publicURL', None) + + if not public_url: + raise LibcloudError('Could not find specified endpoint') + + return public_url + + +class KiliCloudNodeDriver(OpenStack_1_1_NodeDriver): + name = 'Kili Public Cloud' + website = 'http://kili.io/' + connectionCls = KiliCloudConnection + type = Provider.HPCLOUD + + def __init__(self, key, secret, tenant_name, secure=True, + host=None, port=None, **kwargs): + """ + Note: tenant_name argument is required for Kili cloud. + """ + self.tenant_name = tenant_name + super(KiliCloudNodeDriver, self).__init__(key=key, secret=secret, + secure=secure, host=host, + port=port, + **kwargs) + + def _ex_connection_class_kwargs(self): + kwargs = self.openstack_connection_kwargs() + kwargs['get_endpoint_args'] = ENDPOINT_ARGS + kwargs['ex_force_auth_url'] = AUTH_URL + kwargs['ex_tenant_name'] = self.tenant_name + + return kwargs http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/libcloud/compute/providers.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/providers.py b/libcloud/compute/providers.py index 3de579c..87b3f32 100644 --- a/libcloud/compute/providers.py +++ b/libcloud/compute/providers.py @@ -81,6 +81,8 @@ DRIVERS = { ('libcloud.compute.drivers.rackspace', 'RackspaceFirstGenNodeDriver'), Provider.HPCLOUD: ('libcloud.compute.drivers.hpcloud', 'HPCloudNodeDriver'), + Provider.KILI: + ('libcloud.compute.drivers.kili', 'KiliCloudNodeDriver'), Provider.VPSNET: ('libcloud.compute.drivers.vpsnet', 'VPSNetNodeDriver'), Provider.LINODE: http://git-wip-us.apache.org/repos/asf/libcloud/blob/4ffa7038/libcloud/compute/types.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/types.py b/libcloud/compute/types.py index b2edf2d..9f7a308 100644 --- a/libcloud/compute/types.py +++ b/libcloud/compute/types.py @@ -124,6 +124,7 @@ class Provider(object): # OpenStack based providers HPCLOUD = 'hpcloud' + KILI = 'kili' # Deprecated constants which are still supported EC2_US_EAST = 'ec2_us_east'
