You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by pq...@apache.org on 2012/10/02 01:37:12 UTC

svn commit: r1392694 - /libcloud/trunk/libcloud/compute/drivers/openstack.py

Author: pquerna
Date: Mon Oct  1 23:37:12 2012
New Revision: 1392694

URL: http://svn.apache.org/viewvc?rev=1392694&view=rev
Log:
Add basic support for OpenStack Quantum networks API extensions.

Modified:
    libcloud/trunk/libcloud/compute/drivers/openstack.py

Modified: libcloud/trunk/libcloud/compute/drivers/openstack.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/openstack.py?rev=1392694&r1=1392693&r2=1392694&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/openstack.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/openstack.py Mon Oct  1 23:37:12 2012
@@ -904,6 +904,23 @@ class OpenStack_1_1_Response(OpenStackRe
         super(OpenStack_1_1_Response, self).__init__(*args, **kwargs)
 
 
+class OpenStackNetwork(object):
+    """
+    A Virtual Network.
+    """
+
+    def __init__(self, id, name, cidr, driver, extra=None):
+        self.id = str(id)
+        self.name = name
+        self.cidr = cidr
+        self.driver = driver
+        self.extra = extra or {}
+
+    def __repr__(self):
+        return '<OpenStackNetwork id="%s" name="%s" cidr="%s">' % (self.id,
+               self.name, self.cidr,)
+
+
 class OpenStack_1_1_Connection(OpenStackComputeConnection):
     responseCls = OpenStack_1_1_Response
     accept_format = 'application/json'
@@ -947,6 +964,9 @@ class OpenStack_1_1_NodeDriver(OpenStack
                                  see
                                  https://help.ubuntu.com/community/CloudInit
         @type       ex_userdata: C{str}
+
+        @keyword    networks: The server is launched into a set of Networks.
+        @type       networks: C{OpenStackNetwork}
         """
 
         server_params = self._create_args_to_params(None, **kwargs)
@@ -1013,6 +1033,11 @@ class OpenStack_1_1_NodeDriver(OpenStack
             server_params['user_data'] = base64.b64encode(
                 b(kwargs['ex_userdata'])).decode('ascii')
 
+        if 'networks' in kwargs:
+            networks = kwargs['networks']
+            networks = [{'uuid': network.id} for network in networks]
+            server_params['networks'] = networks
+
         if 'name' in kwargs:
             server_params['name'] = kwargs.get('name')
         else:
@@ -1201,6 +1226,46 @@ class OpenStack_1_1_NodeDriver(OpenStack
         updates = {'name': potential_data['name']}
         return self._update_node(node, **updates)
 
+    def _to_networks(self, obj):
+        networks = obj['networks']
+        return [self._to_network(network) for network in networks]
+
+    def _to_network(self, obj):
+        return OpenStackNetwork(id=obj['id'],
+                                name=obj['label'],
+                                cidr=obj.get('cidr', None),
+                                driver=self)
+
+    def ex_list_networks(self):
+        """
+        Get a list of Networks that are available.
+
+        @rtype: C{list} of L{OpenStackNetwork}
+        """
+        return self._to_networks(
+            self.connection.request('/os-networksv2').object)
+
+    def ex_create_network(self, name, cidr):
+        """
+        Create a new Network
+
+        @rtype: L{OpenStackNetwork}
+        """
+        return self._to_network(self.connection.request(
+            '/os-networksv2', method='POST',
+            data={'network': {'cidr': cidr, 'label': name}}
+        ).object['network'])
+
+    def ex_delete_network(self, network):
+        """
+        Get a list of NodeNetorks that are available.
+
+        @rtype: L{bool}
+        """
+        resp = self.connection.request('/os-networksv2/%s' % (network.id),
+                                       method='DELETE')
+        return resp.status == httplib.ACCEPTED
+
     def ex_get_size(self, size_id):
         """
         Get a NodeSize