You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by vd...@apache.org on 2018/09/19 08:09:37 UTC
[01/18] libcloud git commit: Fix #LIBCLOUD-925
Repository: libcloud
Updated Branches:
refs/heads/trunk 20186b9e8 -> bad71c41e
Fix #LIBCLOUD-925
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/814bc3e3
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/814bc3e3
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/814bc3e3
Branch: refs/heads/trunk
Commit: 814bc3e366bdce7f2b935eeb3c7ed21d562cf3e8
Parents: 98c4fe0
Author: micafer <mi...@upv.es>
Authored: Tue Jun 20 08:21:37 2017 +0200
Committer: micafer <mi...@upv.es>
Committed: Tue Jun 20 08:21:37 2017 +0200
----------------------------------------------------------------------
libcloud/common/google.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/814bc3e3/libcloud/common/google.py
----------------------------------------------------------------------
diff --git a/libcloud/common/google.py b/libcloud/common/google.py
index 39d94e4..806e022 100644
--- a/libcloud/common/google.py
+++ b/libcloud/common/google.py
@@ -220,7 +220,9 @@ class GoogleResponse(JsonResponse):
code = err.get('code')
message = err.get('message')
else:
- code = err.get('reason', None)
+ code = None
+ if 'reason' in err:
+ code = err.get('reason')
message = body.get('error_description', err)
return (code, message)
[16/18] libcloud git commit: Fix lint issue
Posted by vd...@apache.org.
Fix lint issue
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/45d33fda
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/45d33fda
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/45d33fda
Branch: refs/heads/trunk
Commit: 45d33fdacc79c182f8a17bd2f628e10c8ab184ec
Parents: 5728c2b
Author: micafer <mi...@upv.es>
Authored: Wed Sep 5 16:18:43 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Wed Sep 5 16:18:43 2018 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/openstack.py | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/45d33fda/libcloud/compute/drivers/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py
index 024961d..211c651 100644
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@ -2849,6 +2849,7 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
response = self.network_connection.request(
self._subnets_url_prefix).object
return self._to_subnets(response)
+
def ex_list_ports(self):
"""
List all OpenStack_2_PortInterfaces
[03/18] libcloud git commit: Improve error message
Posted by vd...@apache.org.
Improve error message
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/00efcf2b
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/00efcf2b
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/00efcf2b
Branch: refs/heads/trunk
Commit: 00efcf2be242acfa8821dec7c2ec14537a5f9584
Parents: 7deee73
Author: micafer <mi...@upv.es>
Authored: Wed Nov 29 13:51:18 2017 +0100
Committer: micafer <mi...@upv.es>
Committed: Wed Nov 29 13:51:18 2017 +0100
----------------------------------------------------------------------
libcloud/common/openstack_identity.py | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/00efcf2b/libcloud/common/openstack_identity.py
----------------------------------------------------------------------
diff --git a/libcloud/common/openstack_identity.py b/libcloud/common/openstack_identity.py
index 102e2e0..966c12b 100644
--- a/libcloud/common/openstack_identity.py
+++ b/libcloud/common/openstack_identity.py
@@ -1518,7 +1518,8 @@ class OpenStackIdentity_3_0_Connection_OIDC_access_token(
driver=self.driver)
else:
raise MalformedResponseError('Malformed response',
- driver=self.driver)
+ driver=self.driver,
+ body=response.body)
def _get_project_id(self, token):
"""
@@ -1542,7 +1543,8 @@ class OpenStackIdentity_3_0_Connection_OIDC_access_token(
raise MalformedResponseError('Failed to parse JSON', e)
else:
raise MalformedResponseError('Malformed response',
- driver=self.driver)
+ driver=self.driver,
+ body=response.body)
class OpenStackIdentity_2_0_Connection_VOMS(OpenStackIdentityConnection,
@@ -1622,7 +1624,8 @@ class OpenStackIdentity_2_0_Connection_VOMS(OpenStackIdentityConnection,
raise MalformedResponseError('Failed to parse JSON', e)
else:
raise MalformedResponseError('Malformed response',
- driver=self.driver)
+ driver=self.driver,
+ body=response.body)
def _get_tenant_name(self, token):
"""
@@ -1645,7 +1648,8 @@ class OpenStackIdentity_2_0_Connection_VOMS(OpenStackIdentityConnection,
raise MalformedResponseError('Failed to parse JSON', e)
else:
raise MalformedResponseError('Malformed response',
- driver=self.driver)
+ driver=self.driver,
+ body=response.body)
def _authenticate_2_0_with_body(self, reqbody):
resp = self.request('/v2.0/tokens', data=reqbody,
[12/18] libcloud git commit: Fix lint errors
Posted by vd...@apache.org.
Fix lint errors
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/9980d03a
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/9980d03a
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/9980d03a
Branch: refs/heads/trunk
Commit: 9980d03a4edafd92606d0ec762ee786a8c7f590d
Parents: c7464b5
Author: micafer <mi...@upv.es>
Authored: Fri May 25 09:23:21 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Fri May 25 09:23:21 2018 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/openstack.py | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/9980d03a/libcloud/compute/drivers/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py
index dc164fb..a4300ae 100644
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@ -2554,7 +2554,7 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
# We run the init once to get the Glance V2 API connection
# and put that on the object under self.image_connection.
self._ex_force_base_url = str(kwargs.pop('ex_force_image_url',
- None))
+ None))
kwargs['ex_force_base_url'] = self._ex_force_base_url
self.connectionCls = self.image_connectionCls
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
@@ -2563,7 +2563,7 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
# We run the init once to get the Neutron V2 API connection
# and put that on the object under self.image_connection.
self._ex_force_base_url = str(kwargs.pop('ex_force_network_url',
- None))
+ None))
kwargs['ex_force_base_url'] = self._ex_force_base_url
self.connectionCls = self.network_connectionCls
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
@@ -2736,7 +2736,6 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
)
return self._to_image_member(response.object)
-
def _to_networks(self, obj):
networks = obj['networks']
return [self._to_network(network) for network in networks]
@@ -2759,7 +2758,8 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
:rtype: ``list`` of :class:`OpenStackNetwork`
"""
- response = self.network_connection.request(self._networks_url_prefix).object
+ response = self.network_connection.request(
+ self._networks_url_prefix).object
return self._to_networks(response)
def _to_subnets(self, obj):
@@ -2784,7 +2784,8 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
:rtype: ``list`` of :class:`OpenStack_2_SubNet`
"""
- response = self.network_connection.request(self._subnets_url_prefix).object
+ response = self.network_connection.request(
+ self._subnets_url_prefix).object
return self._to_subnets(response)
@@ -2908,4 +2909,4 @@ class OpenStack_2_SubNet(object):
def __repr__(self):
return '<OpenStack_2_SubNet id="%s" name="%s" cidr="%s">' % (self.id,
self.name,
- self.cidr)
\ No newline at end of file
+ self.cidr)
[11/18] libcloud git commit: Fix LIBCLOUD-997,
implements LIBCLOUD-998 and LIBCLOUD-604
Posted by vd...@apache.org.
Fix LIBCLOUD-997, implements LIBCLOUD-998 and LIBCLOUD-604
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/c7464b57
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/c7464b57
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/c7464b57
Branch: refs/heads/trunk
Commit: c7464b57dcc7e09fdfa01348de85f85046dac3a1
Parents: 271813f
Author: micafer <mi...@upv.es>
Authored: Fri May 25 09:05:49 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Fri May 25 09:05:49 2018 +0200
----------------------------------------------------------------------
docs/compute/drivers/openstack.rst | 10 +-
libcloud/common/openstack.py | 1 +
libcloud/compute/drivers/openstack.py | 110 ++++++++++++++++++-
.../fixtures/openstack/_v2_0__networks.json | 33 ++++++
.../fixtures/openstack/_v2_0__subnets.json | 62 +++++++++++
libcloud/test/compute/test_openstack.py | 26 ++++-
6 files changed, 239 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c7464b57/docs/compute/drivers/openstack.rst
----------------------------------------------------------------------
diff --git a/docs/compute/drivers/openstack.rst b/docs/compute/drivers/openstack.rst
index 199fa38..887057a 100644
--- a/docs/compute/drivers/openstack.rst
+++ b/docs/compute/drivers/openstack.rst
@@ -88,9 +88,17 @@ Available arguments:
* ``ex_force_service_type``
* ``ex_force_service_name``
* ``ex_force_service_region``
-* ``ex_force_base_url`` - Base URL to the OpenStack API endpoint. By default,
+* ``ex_force_base_url`` - Base URL to the OpenStack nova API endpoint. By default,
driver obtains API endpoint URL from the server catalog, but if this argument
is provided, this step is skipped and the provided value is used directly.
+* ``ex_force_network_url`` - Base URL to the OpenStack neutron API endpoint. By default,
+ driver obtains API endpoint URL from the server catalog, but if this argument
+ is provided, this step is skipped and the provided value is used directly. Only valid
+ in case of api_version >= 2.0.
+* ``ex_force_image_url`` - Base URL to the OpenStack glance API endpoint. By default,
+ driver obtains API endpoint URL from the server catalog, but if this argument
+ is provided, this step is skipped and the provided value is used directly. Only valid
+ in case of api_version >= 2.0.
Some examples which show how to use this arguments can be found in the section
below.
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c7464b57/libcloud/common/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/common/openstack.py b/libcloud/common/openstack.py
index 954a15d..6b7327a 100644
--- a/libcloud/common/openstack.py
+++ b/libcloud/common/openstack.py
@@ -156,6 +156,7 @@ class OpenStackBaseConnection(ConnectionUserAndKey):
if ex_force_auth_version:
self._auth_version = ex_force_auth_version
+ self.base_url = ex_force_base_url
self._ex_force_base_url = ex_force_base_url
self._ex_force_auth_url = ex_force_auth_url
self._ex_force_auth_token = ex_force_auth_token
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c7464b57/libcloud/compute/drivers/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py
index 9bacad2..dc164fb 100644
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@ -2479,6 +2479,13 @@ class OpenStack_2_Connection(OpenStackComputeConnection):
accept_format = 'application/json'
default_content_type = 'application/json; charset=UTF-8'
+ def __init__(self, *args, **kwargs):
+ if 'ex_force_image_url' in kwargs:
+ del kwargs['ex_force_image_url']
+ if 'ex_force_network_url' in kwargs:
+ del kwargs['ex_force_network_url']
+ super(OpenStack_2_Connection, self).__init__(*args, **kwargs)
+
def encode_data(self, data):
return json.dumps(data)
@@ -2492,6 +2499,18 @@ class OpenStack_2_ImageConnection(OpenStackImageConnection):
return json.dumps(data)
+class OpenStack_2_NetworkConnection(OpenStackBaseConnection):
+ service_type = 'network'
+ service_name = 'neutron'
+ service_region = 'RegionOne'
+ responseCls = OpenStack_1_1_Response
+ accept_format = 'application/json'
+ default_content_type = 'application/json; charset=UTF-8'
+
+ def encode_data(self, data):
+ return json.dumps(data)
+
+
class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
"""
OpenStack node driver.
@@ -2514,11 +2533,14 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
# See https://developer.openstack.org/api-ref/
# image/v2/index.html#list-image-members
image_connectionCls = OpenStack_2_ImageConnection
+ network_connectionCls = OpenStack_2_NetworkConnection
image_connection = None
+ network_connection = None
type = Provider.OPENSTACK
features = {"create_node": ["generates_password"]}
- _networks_url_prefix = '/os-networks'
+ _networks_url_prefix = '/v2.0/networks'
+ _subnets_url_prefix = '/v2.0/subnets'
def __init__(self, *args, **kwargs):
original_connectionCls = self.connectionCls
@@ -2527,14 +2549,31 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
if 'ex_force_auth_version' not in kwargs:
kwargs['ex_force_auth_version'] = '3.x_password'
+ original_ex_force_base_url = kwargs.get('ex_force_base_url', None)
+
# We run the init once to get the Glance V2 API connection
# and put that on the object under self.image_connection.
+ self._ex_force_base_url = str(kwargs.pop('ex_force_image_url',
+ None))
+ kwargs['ex_force_base_url'] = self._ex_force_base_url
self.connectionCls = self.image_connectionCls
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
self.image_connection = self.connection
+ # We run the init once to get the Neutron V2 API connection
+ # and put that on the object under self.image_connection.
+ self._ex_force_base_url = str(kwargs.pop('ex_force_network_url',
+ None))
+ kwargs['ex_force_base_url'] = self._ex_force_base_url
+ self.connectionCls = self.network_connectionCls
+ super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
+ self.network_connection = self.connection
+
# We run the init again to get the compute API connection
# and that's put under self.connection as normal.
+ self._ex_force_base_url = original_ex_force_base_url
+ if original_ex_force_base_url:
+ kwargs['ex_force_base_url'] = self._ex_force_base_url
self.connectionCls = original_connectionCls
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
@@ -2698,6 +2737,57 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
return self._to_image_member(response.object)
+ def _to_networks(self, obj):
+ networks = obj['networks']
+ return [self._to_network(network) for network in networks]
+
+ def _to_network(self, obj):
+ extra = {}
+ if obj.get('router:external', None):
+ extra['router:external'] = obj.get('router:external')
+ if obj.get('subnets', None):
+ extra['subnets'] = obj.get('subnets')
+ return OpenStackNetwork(id=obj['id'],
+ name=obj['name'],
+ cidr=None,
+ driver=self,
+ extra=extra)
+
+ def ex_list_networks(self):
+ """
+ Get a list of Networks that are available.
+
+ :rtype: ``list`` of :class:`OpenStackNetwork`
+ """
+ response = self.network_connection.request(self._networks_url_prefix).object
+ return self._to_networks(response)
+
+ def _to_subnets(self, obj):
+ subnets = obj['subnets']
+ return [self._to_subnet(subnet) for subnet in subnets]
+
+ def _to_subnet(self, obj):
+ extra = {}
+ if obj.get('router:external', None):
+ extra['router:external'] = obj.get('router:external')
+ if obj.get('subnets', None):
+ extra['subnets'] = obj.get('subnets')
+ return OpenStack_2_SubNet(id=obj['id'],
+ name=obj['name'],
+ cidr=None,
+ driver=self,
+ extra=extra)
+
+ def ex_list_subnets(self):
+ """
+ Get a list of Subnet that are available.
+
+ :rtype: ``list`` of :class:`OpenStack_2_SubNet`
+ """
+ response = self.network_connection.request(self._subnets_url_prefix).object
+ return self._to_subnets(response)
+
+
class OpenStack_1_1_FloatingIpPool(object):
"""
Floating IP Pool info.
@@ -2801,3 +2891,21 @@ class OpenStack_1_1_FloatingIpAddress(object):
return ('<OpenStack_1_1_FloatingIpAddress: id=%s, ip_addr=%s,'
' pool=%s, driver=%s>'
% (self.id, self.ip_address, self.pool, self.driver))
+
+
+class OpenStack_2_SubNet(object):
+ """
+ A Virtual SubNet.
+ """
+
+ 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 '<OpenStack_2_SubNet id="%s" name="%s" cidr="%s">' % (self.id,
+ self.name,
+ self.cidr)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c7464b57/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json b/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json
new file mode 100644
index 0000000..7c54850
--- /dev/null
+++ b/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json
@@ -0,0 +1,33 @@
+{
+ "network": {
+ "admin_state_up": true,
+ "availability_zone_hints": [],
+ "availability_zones": [
+ "nova"
+ ],
+ "created_at": "2016-03-08T20:19:41",
+ "dns_domain": "my-domain.org.",
+ "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+ "ipv4_address_scope": null,
+ "ipv6_address_scope": null,
+ "l2_adjacency": false,
+ "mtu": 1500,
+ "name": "private-network",
+ "port_security_enabled": true,
+ "project_id": "4fd44f30292945e481c7b8a0c8908869",
+ "qos_policy_id": "6a8454ade84346f59e8d40665f878b2e",
+ "revision_number": 1,
+ "router:external": false,
+ "shared": true,
+ "status": "ACTIVE",
+ "subnets": [
+ "54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
+ ],
+ "tags": ["tag1,tag2"],
+ "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+ "updated_at": "2016-03-08T20:19:41",
+ "vlan_transparent": false,
+ "description": "",
+ "is_default": true
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c7464b57/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json b/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json
new file mode 100644
index 0000000..d3f2763
--- /dev/null
+++ b/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json
@@ -0,0 +1,62 @@
+{
+ "subnets": [
+ {
+ "name": "private-subnet",
+ "enable_dhcp": true,
+ "network_id": "db193ab3-96e3-4cb3-8fc5-05f4296d0324",
+ "segment_id": null,
+ "project_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+ "tenant_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+ "dns_nameservers": [],
+ "allocation_pools": [
+ {
+ "start": "10.0.0.2",
+ "end": "10.0.0.254"
+ }
+ ],
+ "host_routes": [],
+ "ip_version": 4,
+ "gateway_ip": "10.0.0.1",
+ "cidr": "10.0.0.0/24",
+ "id": "08eae331-0402-425a-923c-34f7cfe39c1b",
+ "created_at": "2016-10-10T14:35:34Z",
+ "description": "",
+ "ipv6_address_mode": null,
+ "ipv6_ra_mode": null,
+ "revision_number": 2,
+ "service_types": [],
+ "subnetpool_id": null,
+ "tags": ["tag1,tag2"],
+ "updated_at": "2016-10-10T14:35:34Z"
+ },
+ {
+ "name": "my_subnet",
+ "enable_dhcp": true,
+ "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+ "segment_id": null,
+ "project_id": "4fd44f30292945e481c7b8a0c8908869",
+ "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+ "dns_nameservers": [],
+ "allocation_pools": [
+ {
+ "start": "192.0.0.2",
+ "end": "192.255.255.254"
+ }
+ ],
+ "host_routes": [],
+ "ip_version": 4,
+ "gateway_ip": "192.0.0.1",
+ "cidr": "192.0.0.0/8",
+ "id": "54d6f61d-db07-451c-9ab3-b9609b6b6f0b",
+ "created_at": "2016-10-10T14:35:47Z",
+ "description": "",
+ "ipv6_address_mode": null,
+ "ipv6_ra_mode": null,
+ "revision_number": 2,
+ "service_types": [],
+ "subnetpool_id": null,
+ "tags": ["tag1,tag2"],
+ "updated_at": "2016-10-10T14:35:47Z"
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c7464b57/libcloud/test/compute/test_openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py
index 54606ef..e1dd271 100644
--- a/libcloud/test/compute/test_openstack.py
+++ b/libcloud/test/compute/test_openstack.py
@@ -1568,7 +1568,9 @@ class OpenStack_2_Tests(OpenStack_1_1_Tests):
driver_type = OpenStack_2_NodeDriver
driver_kwargs = {
'ex_force_auth_version': '2.0',
- 'ex_force_auth_url': 'https://auth.api.example.com'
+ 'ex_force_auth_url': 'https://auth.api.example.com:8774',
+ 'ex_force_image_url': 'https://auth.api.example.com:9292',
+ 'ex_force_network_url': 'https://auth.api.example.com:9696'
}
def setUp(self):
@@ -1692,6 +1694,21 @@ class OpenStack_2_Tests(OpenStack_1_1_Tests):
self.assertEqual(image_member.extra['updated'], '2018-03-02T14:20:37Z')
self.assertEqual(image_member.extra['schema'], '/v2/schemas/member')
+ def test_ex_list_networks(self):
+ networks = self.driver.ex_list_networks()
+ network = networks[0]
+
+ self.assertEqual(len(networks), 1)
+ self.assertEqual(network.name, 'private-network')
+ self.assertEqual(network.extra['subnets'], ['54d6f61d-db07-451c-9ab3-b9609b6b6f0b'])
+
+ def test_ex_list_subnets(self):
+ subnets = self.driver.ex_list_subnets()
+ subnet = subnets[0]
+
+ self.assertEqual(len(subnets), 2)
+ self.assertEqual(subnet.name, 'private-subnet')
+ self.assertEqual(subnet.cidr, '10.0.0.0/24')
class OpenStack_1_1_FactoryMethodTests(OpenStack_1_1_Tests):
should_list_locations = False
@@ -2144,6 +2161,13 @@ class OpenStack_2_0_MockHttp(OpenStack_1_1_MockHttp):
setattr(self, new_name, method_type(method, self,
OpenStack_2_0_MockHttp))
+ def _v2_0_networks(self, method, url, body, headers):
+ body = self.auth_fixtures.load('_v2_0__networks.json')
+ return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
+
+ def _v2_0_subnets(self, method, url, body, headers):
+ body = self.auth_fixtures.load('_v2_0__subnets.json')
+ return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
class OpenStack_1_1_Auth_2_0_Tests(OpenStack_1_1_Tests):
driver_args = OPENSTACK_PARAMS + ('1.1',)
[08/18] libcloud git commit: Merge pull request #1 from apache/trunk
Posted by vd...@apache.org.
Merge pull request #1 from apache/trunk
Merge upstream
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/5deb1595
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/5deb1595
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/5deb1595
Branch: refs/heads/trunk
Commit: 5deb1595eb110e1ae92db01f2579f6c68e062fd0
Parents: ca38440 c58e892
Author: Miguel Caballer <mi...@upv.es>
Authored: Fri May 11 13:42:22 2018 +0200
Committer: GitHub <no...@github.com>
Committed: Fri May 11 13:42:22 2018 +0200
----------------------------------------------------------------------
.gitignore | 1 +
.travis.yml | 4 +-
CHANGES.rst | 245 ++++++--
README.rst | 12 +-
.../images/misc/gce/create_service_account.png | Bin 0 -> 46211 bytes
docs/_static/images/misc/gce/iam_and_roles.png | Bin 0 -> 170197 bytes
docs/_static/images/misc/gce/new_project.png | Bin 0 -> 17727 bytes
.../images/misc/gce/project_dashboard.png | Bin 0 -> 117485 bytes
.../images/misc/gce/view_service_accounts.png | Bin 0 -> 82062 bytes
docs/compute/drivers/gce.rst | 49 +-
docs/compute/drivers/openstack.rst | 13 +-
docs/dns/drivers/google.rst | 47 ++
docs/examples/dns/godaddy/listing_records.py | 6 +-
docs/examples/dns/godaddy/listing_zones.py | 4 +-
docs/examples/dns/godaddy/pricing_domain.py | 2 +-
.../dns/google/dns_installed_application.py | 6 +
docs/examples/dns/google/dns_internal_auth.py | 6 +
docs/examples/dns/google/dns_service_account.py | 6 +
.../loadbalancer/softlayer/list_balancers.py | 2 +-
docs/third_party_drivers.rst | 32 +-
libcloud/__init__.py | 2 +-
libcloud/common/aliyun.py | 2 +-
libcloud/common/base.py | 8 +-
libcloud/common/brightbox.py | 7 +-
libcloud/common/cloudstack.py | 5 +-
libcloud/common/openstack.py | 2 +-
libcloud/common/ovh.py | 5 +-
libcloud/compute/base.py | 59 +-
libcloud/compute/drivers/azure_arm.py | 9 +
libcloud/compute/drivers/cloudscale.py | 32 +-
libcloud/compute/drivers/cloudsigma.py | 2 +-
libcloud/compute/drivers/cloudstack.py | 53 ++
libcloud/compute/drivers/digitalocean.py | 182 +++++-
libcloud/compute/drivers/dimensiondata.py | 15 +-
libcloud/compute/drivers/ec2.py | 123 ++++
libcloud/compute/drivers/ecs.py | 29 +
libcloud/compute/drivers/elasticstack.py | 2 +-
libcloud/compute/drivers/gce.py | 435 ++++++++++++--
libcloud/compute/drivers/hostvirtual.py | 2 +-
libcloud/compute/drivers/ktucloud.py | 2 +-
libcloud/compute/drivers/opennebula.py | 2 +-
libcloud/compute/drivers/openstack.py | 249 +++++++-
libcloud/compute/drivers/profitbricks.py | 11 +-
libcloud/compute/drivers/vcloud.py | 4 +-
libcloud/compute/types.py | 10 +-
libcloud/dns/drivers/powerdns.py | 2 +-
libcloud/http.py | 6 +
libcloud/loadbalancer/drivers/ninefold.py | 2 +-
libcloud/storage/base.py | 13 +-
libcloud/storage/drivers/azure_blobs.py | 21 +-
libcloud/storage/drivers/cloudfiles.py | 2 +-
libcloud/storage/drivers/digitalocean_spaces.py | 3 +-
libcloud/storage/drivers/oss.py | 2 +-
libcloud/storage/drivers/s3.py | 6 +-
libcloud/storage/types.py | 20 +-
libcloud/test/common/test_openstack_identity.py | 5 +-
libcloud/test/common/test_upcloud.py | 4 +-
.../cloudstack/queryAsyncJobResult_88776.json | 1 +
.../cloudstack/queryAsyncJobResult_88777.json | 1 +
.../restoreVirtualMachine_default.json | 1 +
.../cloudstack/scaleVirtualMachine_default.json | 1 +
.../digitalocean_v2/attach_floating_ip.json | 1 +
.../digitalocean_v2/create_floating_ip.json | 1 +
.../digitalocean_v2/detach_floating_ip.json | 1 +
.../digitalocean_v2/ex_rebuild_node.json | 12 +
.../digitalocean_v2/ex_resize_node.json | 12 +
.../digitalocean_v2/list_floating_ips.json | 2 +
.../fixtures/digitalocean_v2/list_nodes.json | 6 +-
.../digitalocean_v2/list_nodes_page_1.json | 6 +-
.../fixtures/ecs/create_security_group.xml | 1 +
.../ecs/delete_security_group_by_id.xml | 2 +-
.../ecs/describe_security_group_attributes.xml | 54 +-
.../ecs/modify_security_group_by_id.xml | 4 +
.../compute/fixtures/gce/aggregated_disks.json | 11 +-
.../gce/global_firewalls_lcfirewall-deny.json | 25 +
.../gce/global_firewalls_lcfirewall-egress.json | 25 +
.../gce/global_firewalls_lcfirewall.json | 8 +-
.../gce/global_images_family_notfound.json | 4 +-
...tes_my_instance_template_shared_network.json | 61 ++
.../fixtures/gce/global_networks_lcnetwork.json | 3 +
...oreos-cloud_global_images_family_coreos.json | 17 -
...-cloud_global_images_family_coreos_beta.json | 17 +
...loud_global_images_family_coreos_stable.json | 26 +
.../gce/projects_cos-cloud_global_images.json | 90 +++
.../gce/projects_gce-nvme_global_images.json | 55 --
...rojects_google-containers_global_images.json | 179 ------
.../projects_other_name_global_networks_cf.json | 11 +
...ts_other_name_global_networks_lcnetwork.json | 10 +
..._global_networks_shared_network_for_mig.json | 11 +
...projects_other_name_regions_us-central1.json | 65 ++
...entral1_subnetworks_cf_972cf02e6ad49114.json | 12 +
...1_subnetworks_shared_subnetwork_for_mig.json | 12 +
.../projects_suse-byos-cloud_global_images.json | 150 +++++
.../projects_suse-sap-cloud_global_images.json | 48 ++
...rojects_windows-sql-cloud_global_images.json | 600 +++++++++++++++++++
...us-central1_addresses_lcaddressinternal.json | 12 +
...entral1_subnetworks_cf_972cf02e6ad49112.json | 28 +-
...egions_us-central1_subnetworks_subnet_1.json | 11 +
.../fixtures/gce/zones_us-central1-a_disks.json | 1 -
...Managers_myinstancegroup_shared_network.json | 24 +
...nceGroup_myinstancegroup_shared_network.json | 14 +
...al1_a_acceleratorTypes_nvidia_tesla_k80.json | 10 +
.../compute/fixtures/openstack/_v2_0__auth.json | 22 +
.../v1_slug_servers_detail_deployment_ipv6.xml | 14 +
.../v1_slug_servers_detail_deployment_no_ip.xml | 14 +
...54e_a1b2_4df8_b747_4bec97abc799_members.json | 2 +
...54e_a1b2_4df8_b747_4bec97abc799_members.json | 2 +
...d9a_278a_444c_90a6_d24b8c688a63_members.json | 1 +
...embers_016926dff12345e8b10329f24c99745b.json | 2 +
...es_f24a3c1b-d52a-4116-91da-25b3eee8f55d.json | 1 +
...es_f24a3c1b-d52a-4116-91da-25b3eee8f55e.json | 1 +
.../fixtures/openstack_v1.1/_images_v2.json | 1 +
.../delete_floating_ip_167_138_123_111.json | 0
.../fixtures/profitbricks/ex_update_node.json | 1 -
libcloud/test/compute/test_azure_arm.py | 51 +-
libcloud/test/compute/test_cloudstack.py | 18 +-
libcloud/test/compute/test_deployment.py | 44 ++
libcloud/test/compute/test_digitalocean_v2.py | 122 ++++
libcloud/test/compute/test_ec2.py | 6 +-
libcloud/test/compute/test_ecs.py | 74 ++-
libcloud/test/compute/test_gce.py | 297 +++++++--
libcloud/test/compute/test_openstack.py | 195 +++++-
libcloud/test/compute/test_profitbricks.py | 12 +-
libcloud/test/loadbalancer/test_gogrid.py | 3 +-
libcloud/test/loadbalancer/test_rackspace.py | 2 +-
libcloud/test/storage/test_aurora.py | 7 +
libcloud/test/storage/test_azure_blobs.py | 22 +
libcloud/test/storage/test_base.py | 85 +++
libcloud/test/storage/test_google_storage.py | 37 ++
libcloud/test/storage/test_s3.py | 76 ++-
libcloud/test/test_init.py | 10 +-
libcloud/utils/files.py | 2 +-
libcloud/utils/py3.py | 4 +-
requirements-tests.txt | 2 +-
setup.py | 10 +-
tox.ini | 19 +-
136 files changed, 3947 insertions(+), 631 deletions(-)
----------------------------------------------------------------------
[18/18] libcloud git commit: Add changes for #1215
Posted by vd...@apache.org.
Add changes for #1215
Closes #1215
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/bad71c41
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/bad71c41
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/bad71c41
Branch: refs/heads/trunk
Commit: bad71c41ece620a1d7d957eb0fee66f2787e66fa
Parents: cdff950
Author: Rick van de Loo <ri...@gmail.com>
Authored: Wed Sep 19 10:07:11 2018 +0200
Committer: Rick van de Loo <ri...@gmail.com>
Committed: Wed Sep 19 10:07:11 2018 +0200
----------------------------------------------------------------------
CHANGES.rst | 9 +++++++++
1 file changed, 9 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/bad71c41/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index 09921e1..a311c2e 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -105,6 +105,15 @@ Compute
- [OpenStack] Add get_user method (GITHUB-1216)
[Ken Dreyer]
+- [OpenStack] Add ex_list_subnets to OpenStack_2_NodeDriver (GITHUB-1215, LIBCLOUD-604)
+ [Miguel Caballer]
+
+- [OpenStack] The OpenStack_2_NodeDriver uses two connections (GITHUB-1215, LIBCLOUD-997)
+ [Miguel Caballer]
+
+- [OpenStack] The OpenStack_2_NodeDriver /v2.0/networks instead of /os-networks (GITHUB-1215, LIBCLOUD-998)
+ [Miguel Caballer]
+
- [Scaleway] New Scaleway driver (GITHUB-1121, GITHUB-1220)
[Daniel Hunsaker, Nándor István Krácser, Rémy Léone]
[06/18] libcloud git commit: Merge remote-tracking branch
'upstream/trunk' into trunk
Posted by vd...@apache.org.
Merge remote-tracking branch 'upstream/trunk' into trunk
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/15ae4580
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/15ae4580
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/15ae4580
Branch: refs/heads/trunk
Commit: 15ae45805dcef1d91498af33598ee5c2059c411a
Parents: 3dd6f4d 2f7637e
Author: micafer <mi...@upv.es>
Authored: Mon Dec 18 10:21:24 2017 +0100
Committer: micafer <mi...@upv.es>
Committed: Mon Dec 18 10:21:24 2017 +0100
----------------------------------------------------------------------
.travis.yml | 10 -
CHANGES.rst | 13 +-
contrib/Dockerfile | 20 +-
contrib/run_tests.sh | 2 +-
docs/other/using-http-proxy.rst | 4 -
docs/testing.rst | 7 +-
libcloud/__init__.py | 4 +-
libcloud/common/base.py | 11 +-
libcloud/common/upcloud.py | 36 +
libcloud/compute/drivers/ec2.py | 78 +++
libcloud/compute/drivers/upcloud.py | 24 +-
libcloud/test/__init__.py | 7 +-
libcloud/test/common/test_openstack.py | 11 +-
libcloud/test/common/test_upcloud.py | 20 +
.../compute/fixtures/upcloud/api_1_2_price.json | 683 +++++++++++++++++++
libcloud/test/compute/test_ec2.py | 6 +-
libcloud/test/compute/test_upcloud.py | 25 +-
libcloud/test/test_init.py | 2 +-
libcloud/utils/py3.py | 55 +-
setup.py | 16 +-
tox.ini | 7 +-
21 files changed, 897 insertions(+), 144 deletions(-)
----------------------------------------------------------------------
[10/18] libcloud git commit: return extra_specs in OpenStackNodeSize
Posted by vd...@apache.org.
return extra_specs in OpenStackNodeSize
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/271813f5
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/271813f5
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/271813f5
Branch: refs/heads/trunk
Commit: 271813f59cd9f0b5b67f829b4d5427fe62a352b7
Parents: a6c19b6
Author: micafer <mi...@upv.es>
Authored: Fri May 11 13:49:49 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Fri May 11 13:49:49 2018 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/openstack.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/271813f5/libcloud/compute/drivers/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py
index ea061a0..9bacad2 100644
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@ -892,7 +892,7 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
# XXX: needs hardcode
vcpus=vcpus,
bandwidth=None,
- extra=el.get('extra_specs')
+ extra=el.get('extra_specs'),
# Hardcoded
price=self._get_size_price(el.get('id')),
driver=self.connection.driver)
[15/18] libcloud git commit: merge upstream
Posted by vd...@apache.org.
merge upstream
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/5728c2be
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/5728c2be
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/5728c2be
Branch: refs/heads/trunk
Commit: 5728c2be2916c5c1d2bd6ccc1495e7fb26318cef
Parents: a5b8b97 7d5eb6f
Author: micafer <mi...@upv.es>
Authored: Wed Sep 5 15:47:57 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Wed Sep 5 15:47:57 2018 +0200
----------------------------------------------------------------------
.pylintrc | 1 +
.travis.yml | 21 +-
CHANGES.rst | 60 +-
README.rst | 13 +-
contrib/scrap-ec2-sizes.py | 281 ++
.../images/misc/azure_blobs_account_kind.png | Bin 0 -> 292732 bytes
.../misc/azure_blobs_manage_access_keys_1.png | Bin 64259 -> 223140 bytes
.../misc/azure_blobs_manage_access_keys_2.png | Bin 26247 -> 388303 bytes
docs/_static/images/provider_logos/scaleway.png | Bin 0 -> 11527 bytes
docs/committer_guide.rst | 10 +-
docs/compute/drivers/scaleway.rst | 30 +
docs/conf.py | 4 +-
docs/examples/compute/scaleway/create_node.py | 16 +
docs/examples/compute/scaleway/list_nodes.py | 9 +
docs/examples/compute/scaleway/list_volumes.py | 12 +
docs/other/changes_in_2_0.rst | 2 +-
docs/storage/drivers/azure_blobs.rst | 12 +-
libcloud/common/dimensiondata.py | 2 +-
libcloud/common/openstack.py | 1 +
libcloud/common/openstack_identity.py | 14 +
libcloud/compute/constants.py | 4429 ++++++++++++++++++
libcloud/compute/drivers/azure.py | 9 +-
libcloud/compute/drivers/digitalocean.py | 16 +
libcloud/compute/drivers/ec2.py | 2124 +--------
libcloud/compute/drivers/gce.py | 15 +-
libcloud/compute/drivers/openstack.py | 239 +-
libcloud/compute/drivers/scaleway.py | 663 +++
libcloud/compute/providers.py | 2 +
libcloud/compute/types.py | 1 +
libcloud/storage/drivers/azure_blobs.py | 29 +-
libcloud/storage/drivers/dummy.py | 2 -
libcloud/test/__init__.py | 7 +-
libcloud/test/common/test_openstack_identity.py | 11 +
.../fixtures/digitalocean_v2/list_node.json | 112 +
.../fixtures/openstack_v1.1/_port_v2.json | 32 +
.../fixtures/openstack_v1.1/_ports_v2.json | 185 +
.../compute/fixtures/scaleway/create_image.json | 21 +
.../compute/fixtures/scaleway/create_node.json | 40 +
.../fixtures/scaleway/create_volume.json | 13 +
.../scaleway/create_volume_snapshot.json | 15 +
.../test/compute/fixtures/scaleway/error.json | 1 +
.../fixtures/scaleway/error_invalid_image.json | 1 +
.../compute/fixtures/scaleway/get_image.json | 21 +
.../fixtures/scaleway/list_availability.json | 13 +
.../compute/fixtures/scaleway/list_images.json | 42 +
.../compute/fixtures/scaleway/list_nodes.json | 74 +
.../fixtures/scaleway/list_nodes_empty.json | 3 +
.../compute/fixtures/scaleway/list_sizes.json | 76 +
.../scaleway/list_volume_snapshots.json | 30 +
.../compute/fixtures/scaleway/list_volumes.json | 26 +
.../fixtures/scaleway/list_volumes_empty.json | 3 +
.../compute/fixtures/scaleway/reboot_node.json | 9 +
.../compute/fixtures/scaleway/token_info.json | 14 +
.../compute/fixtures/scaleway/user_info.json | 15 +
libcloud/test/compute/test_digitalocean_v2.py | 12 +
libcloud/test/compute/test_ec2.py | 40 +-
libcloud/test/compute/test_openstack.py | 129 +-
libcloud/test/compute/test_scaleway.py | 334 ++
libcloud/test/secrets.py-dist | 5 +-
libcloud/test/storage/test_azure_blobs.py | 4 +-
libcloud/test/test_connection.py | 16 +
libcloud/test/test_utils.py | 8 +-
libcloud/utils/files.py | 4 +-
setup.cfg | 4 +
setup.py | 8 +-
tox.ini | 11 +-
66 files changed, 7151 insertions(+), 2205 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/5728c2be/libcloud/common/openstack.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/5728c2be/libcloud/compute/drivers/openstack.py
----------------------------------------------------------------------
diff --cc libcloud/compute/drivers/openstack.py
index 44342d5,2ce9f55..024961d
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@@ -2535,9 -2560,15 +2561,16 @@@ class OpenStack_2_NodeDriver(OpenStack_
type = Provider.OPENSTACK
features = {"create_node": ["generates_password"]}
- _networks_url_prefix = '/os-networks'
+ _networks_url_prefix = '/v2.0/networks'
+ _subnets_url_prefix = '/v2.0/subnets'
+ PORT_INTERFACE_MAP = {
+ 'BUILD': OpenStack_2_PortInterfaceState.BUILD,
+ 'ACTIVE': OpenStack_2_PortInterfaceState.ACTIVE,
+ 'DOWN': OpenStack_2_PortInterfaceState.DOWN,
+ 'UNKNOWN': OpenStack_2_PortInterfaceState.UNKNOWN
+ }
+
def __init__(self, *args, **kwargs):
original_connectionCls = self.connectionCls
self._ex_force_api_version = str(kwargs.pop('ex_force_api_version',
@@@ -2567,11 -2588,8 +2600,11 @@@
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
self.network_connection = self.connection
- # We run the init again to get the compute API connection
+ # We run the init once again to get the compute API connection
# and that's put under self.connection as normal.
+ self._ex_force_base_url = original_ex_force_base_url
+ if original_ex_force_base_url:
+ kwargs['ex_force_base_url'] = self._ex_force_base_url
self.connectionCls = original_connectionCls
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
@@@ -2734,57 -2783,121 +2798,172 @@@
)
return self._to_image_member(response.object)
+ def _to_networks(self, obj):
+ networks = obj['networks']
+ return [self._to_network(network) for network in networks]
+
+ def _to_network(self, obj):
+ extra = {}
+ if obj.get('router:external', None):
+ extra['router:external'] = obj.get('router:external')
+ if obj.get('subnets', None):
+ extra['subnets'] = obj.get('subnets')
+ return OpenStackNetwork(id=obj['id'],
+ name=obj['name'],
+ cidr=None,
+ driver=self,
+ extra=extra)
+
+ def ex_list_networks(self):
+ """
+ Get a list of Networks that are available.
+
+ :rtype: ``list`` of :class:`OpenStackNetwork`
+ """
+ response = self.network_connection.request(
+ self._networks_url_prefix).object
+ return self._to_networks(response)
+
+ def _to_subnets(self, obj):
+ subnets = obj['subnets']
+ return [self._to_subnet(subnet) for subnet in subnets]
+
+ def _to_subnet(self, obj):
+ extra = {}
+ if obj.get('router:external', None):
+ extra['router:external'] = obj.get('router:external')
+ if obj.get('subnets', None):
+ extra['subnets'] = obj.get('subnets')
+ return OpenStack_2_SubNet(id=obj['id'],
+ name=obj['name'],
+ cidr=obj['cidr'],
+ driver=self,
+ extra=extra)
+
+ def ex_list_subnets(self):
+ """
+ Get a list of Subnet that are available.
+
+ :rtype: ``list`` of :class:`OpenStack_2_SubNet`
+ """
+ response = self.network_connection.request(
+ self._subnets_url_prefix).object
+ return self._to_subnets(response)
+ def ex_list_ports(self):
+ """
+ List all OpenStack_2_PortInterfaces
+
+ https://developer.openstack.org/api-ref/network/v2/#list-ports
+
+ :rtype: ``list`` of :class:`OpenStack_2_PortInterface`
+ """
+ response = self.network_connection.request(
+ '/v2.0/ports'
+ )
+ return [self._to_port(port) for port in response.object['ports']]
+
+ def ex_delete_port(self, port):
+ """
+ Delete an OpenStack_2_PortInterface
+
+ https://developer.openstack.org/api-ref/network/v2/#delete-port
+
+ :param port: port interface to remove
+ :type port: :class:`OpenStack_2_PortInterface`
+
+ :rtype: ``bool``
+ """
+ response = self.network_connection.request(
+ '/v2.0/ports/%s' % port.id, method='DELETE'
+ )
+ return response.success()
+
+ def ex_detach_port_interface(self, node, port):
+ """
+ Detaches an OpenStack_2_PortInterface interface from a Node.
+ :param node: node
+ :type node: :class:`Node`
+
+ :param port: port interface to remove
+ :type port: :class:`OpenStack_2_PortInterface`
+
+ :rtype: ``bool``
+ """
+ return self.connection.request(
+ '/servers/%s/os-interface/%s' % (node.id, port.id),
+ method='DELETE'
+ ).success()
+
+ def ex_attach_port_interface(self, node, port):
+ """
+ Attaches an OpenStack_2_PortInterface to a Node.
+
+ :param node: node
+ :type node: :class:`Node`
+
+ :param port: port interface to remove
+ :type port: :class:`OpenStack_2_PortInterface`
+
+ :rtype: ``bool``
+ """
+ data = {
+ 'interfaceAttachment': {
+ 'port_id': port.id
+ }
+ }
+ return self.connection.request(
+ '/servers/{}/os-interface'.format(node.id),
+ method='POST', data=data
+ ).success()
+
+ def ex_create_port(self, network, description=None,
+ admin_state_up=True, name=None):
+ """
+ Creates a new OpenStack_2_PortInterface
+
+ :param network: ID of the network where the newly created
+ port should be attached to
+ :type network: :class:`OpenStackNetwork`
+
+ :param description: Description of the port
+ :type description: str
+
+ :param admin_state_up: The administrative state of the
+ resource, which is up or down
+ :type admin_state_up: bool
+
+ :param name: Human-readable name of the resource
+ :type name: str
+
+ :rtype: :class:`OpenStack_2_PortInterface`
+ """
+ data = {
+ 'port':
+ {
+ 'description': description or '',
+ 'admin_state_up': admin_state_up,
+ 'name': name or '',
+ 'network_id': network.id,
+ }
+ }
+ response = self.network_connection.request(
+ '/v2.0/ports', method='POST', data=data
+ )
+ return self._to_port(response.object['port'])
+
+ def ex_get_port(self, port_interface_id):
+ """
+ Retrieve the OpenStack_2_PortInterface with the given ID
+
+ :param port_interface_id: ID of the requested port
+ :type port_interface_id: str
+
+ :return: :class:`OpenStack_2_PortInterface`
+ """
+ response = self.network_connection.request(
+ '/v2.0/ports/{}'.format(port_interface_id), method='GET'
+ )
+ return self._to_port(response.object['port'])
class OpenStack_1_1_FloatingIpPool(object):
@@@ -2892,19 -3005,51 +3071,69 @@@ class OpenStack_1_1_FloatingIpAddress(o
% (self.id, self.ip_address, self.pool, self.driver))
+class OpenStack_2_SubNet(object):
+ """
+ A Virtual SubNet.
+ """
+
+ 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 '<OpenStack_2_SubNet id="%s" name="%s" cidr="%s">' % (self.id,
+ self.name,
+ self.cidr)
++
++
+ class OpenStack_2_PortInterface(UuidMixin):
+ """
+ Port Interface info. Similar in functionality to a floating IP (can be
+ attached / detached from a compute instance) but implementation-wise a
+ bit different.
+
+ > A port is a connection point for attaching a single device, such as the
+ > NIC of a server, to a network. The port also describes the associated
+ > network configuration, such as the MAC and IP addresses to be used on
+ > that port.
+ https://docs.openstack.org/python-openstackclient/pike/cli/command-objects/port.html
+
+ Also see:
+ https://developer.openstack.org/api-ref/compute/#port-interfaces-servers-os-interface
+ """
+
+ def __init__(self, id, state, driver, created=None, extra=None):
+ """
+ :param id: Port Interface ID.
+ :type id: ``str``
+ :param state: State of the OpenStack_2_PortInterface.
+ :type state: :class:`.OpenStack_2_PortInterfaceState`
+ :param created: A datetime object that represents when the
+ port interface was created
+ :type created: ``datetime.datetime``
+ :param extra: Optional provided specific attributes associated with
+ this image.
+ :type extra: ``dict``
+ """
+ self.id = str(id)
+ self.state = state
+ self.driver = driver
+ self.created = created
+ self.extra = extra or {}
+ UuidMixin.__init__(self)
+
+ def delete(self):
+ """
+ Delete this Port Interface
+
+ :rtype: ``bool``
+ """
+ return self.driver.ex_delete_port(self)
+
+ def __repr__(self):
+ return (('<OpenStack_2_PortInterface: id=%s, state=%s, '
+ 'driver=%s ...>')
+ % (self.id, self.state, self.driver.name))
http://git-wip-us.apache.org/repos/asf/libcloud/blob/5728c2be/libcloud/test/compute/test_openstack.py
----------------------------------------------------------------------
diff --cc libcloud/test/compute/test_openstack.py
index d8ac0b0,4462b34..c9be795
--- a/libcloud/test/compute/test_openstack.py
+++ b/libcloud/test/compute/test_openstack.py
@@@ -1679,38 -1697,102 +1679,134 @@@ class OpenStack_2_Tests(OpenStack_1_1_T
self.assertEqual(image_member.extra['updated'], '2018-03-02T14:20:37Z')
self.assertEqual(image_member.extra['schema'], '/v2/schemas/member')
+ def test_ex_list_networks(self):
+ networks = self.driver.ex_list_networks()
+ network = networks[0]
+
+ self.assertEqual(len(networks), 2)
+ self.assertEqual(network.name, 'net1')
+ self.assertEqual(network.extra['subnets'], ['54d6f61d-db07-451c-9ab3-b9609b6b6f0b'])
+
+ def test_ex_list_subnets(self):
+ subnets = self.driver.ex_list_subnets()
+ subnet = subnets[0]
+
+ self.assertEqual(len(subnets), 2)
+ self.assertEqual(subnet.name, 'private-subnet')
+ self.assertEqual(subnet.cidr, '10.0.0.0/24')
+
+ def test_ex_list_network(self):
+ networks = self.driver.ex_list_networks()
+ network = networks[0]
+
+ self.assertEqual(len(networks), 2)
+ self.assertEqual(network.name, 'net1')
+
+ def test_ex_create_network(self):
+ network = self.driver.ex_create_network(name='net1',
+ cidr='127.0.0.0/24')
+ self.assertEqual(network.name, 'net1')
+
+ def test_ex_delete_network(self):
+ network = self.driver.ex_list_networks()[0]
+ self.assertTrue(self.driver.ex_delete_network(network=network))
+
+ def test_ex_list_ports(self):
+ ports = self.driver.ex_list_ports()
+
+ port = ports[0]
+ self.assertEqual(port.id, '126da55e-cfcb-41c8-ae39-a26cb8a7e723')
+ self.assertEqual(port.state, OpenStack_2_PortInterfaceState.BUILD)
+ self.assertEqual(port.created, '2018-07-04T14:38:18Z')
+ self.assertEqual(
+ port.extra['network_id'],
+ '123c8a8c-6427-4e8f-a805-2035365f4d43'
+ )
+ self.assertEqual(
+ port.extra['project_id'],
+ 'abcdec85bee34bb0a44ab8255eb36abc'
+ )
+ self.assertEqual(
+ port.extra['tenant_id'],
+ 'abcdec85bee34bb0a44ab8255eb36abc'
+ )
+ self.assertEqual(port.extra['name'], '')
+
+ def test_ex_create_port(self):
+ network = OpenStackNetwork(id='123c8a8c-6427-4e8f-a805-2035365f4d43', name='test-network',
+ cidr='1.2.3.4', driver=self.driver)
+ port = self.driver.ex_create_port(network=network, description='Some port description', name='Some port name',
+ admin_state_up=True)
+
+ self.assertEqual(port.id, '126da55e-cfcb-41c8-ae39-a26cb8a7e723')
+ self.assertEqual(port.state, OpenStack_2_PortInterfaceState.BUILD)
+ self.assertEqual(port.created, '2018-07-04T14:38:18Z')
+ self.assertEqual(
+ port.extra['network_id'],
+ '123c8a8c-6427-4e8f-a805-2035365f4d43'
+ )
+ self.assertEqual(
+ port.extra['project_id'],
+ 'abcdec85bee34bb0a44ab8255eb36abc'
+ )
+ self.assertEqual(
+ port.extra['tenant_id'],
+ 'abcdec85bee34bb0a44ab8255eb36abc'
+ )
+ self.assertEqual(port.extra['admin_state_up'], True)
+ self.assertEqual(port.extra['name'], 'Some port name')
+ self.assertEqual(port.extra['description'], 'Some port description')
+
+ def test_ex_get_port(self):
+ port = self.driver.ex_get_port('126da55e-cfcb-41c8-ae39-a26cb8a7e723')
+
+ self.assertEqual(port.id, '126da55e-cfcb-41c8-ae39-a26cb8a7e723')
+ self.assertEqual(port.state, OpenStack_2_PortInterfaceState.BUILD)
+ self.assertEqual(port.created, '2018-07-04T14:38:18Z')
+ self.assertEqual(
+ port.extra['network_id'],
+ '123c8a8c-6427-4e8f-a805-2035365f4d43'
+ )
+ self.assertEqual(
+ port.extra['project_id'],
+ 'abcdec85bee34bb0a44ab8255eb36abc'
+ )
+ self.assertEqual(
+ port.extra['tenant_id'],
+ 'abcdec85bee34bb0a44ab8255eb36abc'
+ )
+ self.assertEqual(port.extra['name'], 'Some port name')
+
+ def test_ex_delete_port(self):
+ ports = self.driver.ex_list_ports()
+ port = ports[0]
+
+ ret = self.driver.ex_delete_port(port)
+
+ self.assertTrue(ret)
+
+ def test_detach_port_interface(self):
+ node = Node(id='1c01300f-ef97-4937-8f03-ac676d6234be', name=None,
+ state=None, public_ips=None, private_ips=None,
+ driver=self.driver)
+ ports = self.driver.ex_list_ports()
+ port = ports[0]
+
+ ret = self.driver.ex_detach_port_interface(node, port)
+
+ self.assertTrue(ret)
+
+ def test_attach_port_interface(self):
+ node = Node(id='1c01300f-ef97-4937-8f03-ac676d6234be', name=None,
+ state=None, public_ips=None, private_ips=None,
+ driver=self.driver)
+ ports = self.driver.ex_list_ports()
+ port = ports[0]
+
+ ret = self.driver.ex_attach_port_interface(node, port)
+
+ self.assertTrue(ret)
+
class OpenStack_1_1_FactoryMethodTests(OpenStack_1_1_Tests):
should_list_locations = False
[13/18] libcloud git commit: Fix tests
Posted by vd...@apache.org.
Fix tests
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/b4e957f4
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/b4e957f4
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/b4e957f4
Branch: refs/heads/trunk
Commit: b4e957f43ab01c2d85571d8d91badf622a91bdea
Parents: 9980d03
Author: micafer <mi...@upv.es>
Authored: Fri May 25 12:30:09 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Fri May 25 12:30:09 2018 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/openstack.py | 36 +++++-----
libcloud/test/common/test_openstack_identity.py | 7 +-
.../compute/fixtures/openstack/_v2_0__auth.json | 22 ++++++
.../fixtures/openstack/_v2_0__networks.json | 33 ---------
.../fixtures/openstack/_v2_0__subnets.json | 62 ----------------
.../openstack_v1.1/_v2_0__networks.json | 64 +++++++++++++++++
.../openstack_v1.1/_v2_0__networks_POST.json | 33 +++++++++
.../fixtures/openstack_v1.1/_v2_0__subnets.json | 62 ++++++++++++++++
libcloud/test/compute/test_openstack.py | 75 ++++++++++++--------
9 files changed, 246 insertions(+), 148 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/compute/drivers/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py
index a4300ae..44342d5 100644
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@ -80,6 +80,12 @@ class OpenStackImageConnection(OpenStackBaseConnection):
service_region = 'RegionOne'
+class OpenStackNetworkConnection(OpenStackBaseConnection):
+ service_type = 'network'
+ service_name = 'neutron'
+ service_region = 'RegionOne'
+
+
class OpenStackNodeDriver(NodeDriver, OpenStackDriverMixin):
"""
Base OpenStack node driver. Should not be used directly.
@@ -2479,13 +2485,6 @@ class OpenStack_2_Connection(OpenStackComputeConnection):
accept_format = 'application/json'
default_content_type = 'application/json; charset=UTF-8'
- def __init__(self, *args, **kwargs):
- if 'ex_force_image_url' in kwargs:
- del kwargs['ex_force_image_url']
- if 'ex_force_network_url' in kwargs:
- del kwargs['ex_force_network_url']
- super(OpenStack_2_Connection, self).__init__(*args, **kwargs)
-
def encode_data(self, data):
return json.dumps(data)
@@ -2499,10 +2498,7 @@ class OpenStack_2_ImageConnection(OpenStackImageConnection):
return json.dumps(data)
-class OpenStack_2_NetworkConnection(OpenStackBaseConnection):
- service_type = 'network'
- service_name = 'neutron'
- service_region = 'RegionOne'
+class OpenStack_2_NetworkConnection(OpenStackNetworkConnection):
responseCls = OpenStack_1_1_Response
accept_format = 'application/json'
default_content_type = 'application/json; charset=UTF-8'
@@ -2549,22 +2545,24 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
if 'ex_force_auth_version' not in kwargs:
kwargs['ex_force_auth_version'] = '3.x_password'
- original_ex_force_base_url = kwargs.get('ex_force_base_url', None)
+ original_ex_force_base_url = kwargs.get('ex_force_base_url')
# We run the init once to get the Glance V2 API connection
# and put that on the object under self.image_connection.
- self._ex_force_base_url = str(kwargs.pop('ex_force_image_url',
- None))
- kwargs['ex_force_base_url'] = self._ex_force_base_url
+ if original_ex_force_base_url or kwargs.get('ex_force_image_url'):
+ kwargs['ex_force_base_url'] = \
+ str(kwargs.pop('ex_force_image_url',
+ original_ex_force_base_url))
self.connectionCls = self.image_connectionCls
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
self.image_connection = self.connection
# We run the init once to get the Neutron V2 API connection
# and put that on the object under self.image_connection.
- self._ex_force_base_url = str(kwargs.pop('ex_force_network_url',
- None))
- kwargs['ex_force_base_url'] = self._ex_force_base_url
+ if original_ex_force_base_url or kwargs.get('ex_force_network_url'):
+ kwargs['ex_force_base_url'] = \
+ str(kwargs.pop('ex_force_network_url',
+ original_ex_force_base_url))
self.connectionCls = self.network_connectionCls
super(OpenStack_2_NodeDriver, self).__init__(*args, **kwargs)
self.network_connection = self.connection
@@ -2774,7 +2772,7 @@ class OpenStack_2_NodeDriver(OpenStack_1_1_NodeDriver):
extra['subnets'] = obj.get('subnets')
return OpenStack_2_SubNet(id=obj['id'],
name=obj['name'],
- cidr=None,
+ cidr=obj['cidr'],
driver=self,
extra=extra)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/common/test_openstack_identity.py
----------------------------------------------------------------------
diff --git a/libcloud/test/common/test_openstack_identity.py b/libcloud/test/common/test_openstack_identity.py
index 9ac042c..1b6e144 100644
--- a/libcloud/test/common/test_openstack_identity.py
+++ b/libcloud/test/common/test_openstack_identity.py
@@ -525,7 +525,7 @@ class OpenStackServiceCatalogTestCase(unittest.TestCase):
catalog = OpenStackServiceCatalog(service_catalog=service_catalog,
auth_version='2.0')
entries = catalog.get_entries()
- self.assertEqual(len(entries), 7)
+ self.assertEqual(len(entries), 8)
entry = [e for e in entries if e.service_name == 'cloudServers'][0]
self.assertEqual(entry.service_type, 'compute')
@@ -591,8 +591,8 @@ class OpenStackServiceCatalogTestCase(unittest.TestCase):
catalog = OpenStackServiceCatalog(service_catalog=service_catalog,
auth_version='2.0')
service_types = catalog.get_service_types()
- self.assertEqual(service_types, ['compute', 'image', 'object-store',
- 'rax:object-cdn'])
+ self.assertEqual(service_types, ['compute', 'image', 'network',
+ 'object-store', 'rax:object-cdn'])
service_types = catalog.get_service_types(region='ORD')
self.assertEqual(service_types, ['rax:object-cdn'])
@@ -611,6 +611,7 @@ class OpenStackServiceCatalogTestCase(unittest.TestCase):
'cloudServersOpenStack',
'cloudServersPreprod',
'glance',
+ 'neutron',
'nova'])
service_names = catalog.get_service_names(service_type='compute')
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json b/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json
index 91fe35b..79c6776 100644
--- a/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json
+++ b/libcloud/test/compute/fixtures/openstack/_v2_0__auth.json
@@ -101,6 +101,28 @@
{
"endpoints": [
{
+ "region": "RegionOne",
+ "tenantId": "1337",
+ "publicURL": "https://test_endpoint.com/v2/1337",
+ "versionInfo": "https://test_endpoint.com/v2/",
+ "versionList": "https://test_endpoint.com/",
+ "versionId": "2"
+ },
+ {
+ "region": "fr1",
+ "tenantId": "1337",
+ "publicURL": "https://test_endpoint.com/v2/1337",
+ "versionInfo": "https://test_endpoint.com/v2/",
+ "versionList": "https://test_endpoint.com/",
+ "versionId": "2"
+ }
+ ],
+ "name": "neutron",
+ "type": "network"
+ },
+ {
+ "endpoints": [
+ {
"region": "DFW",
"tenantId": "613469",
"publicURL": "https://dfw.servers.api.rackspacecloud.com/v2/1337",
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json b/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json
deleted file mode 100644
index 7c54850..0000000
--- a/libcloud/test/compute/fixtures/openstack/_v2_0__networks.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "network": {
- "admin_state_up": true,
- "availability_zone_hints": [],
- "availability_zones": [
- "nova"
- ],
- "created_at": "2016-03-08T20:19:41",
- "dns_domain": "my-domain.org.",
- "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
- "ipv4_address_scope": null,
- "ipv6_address_scope": null,
- "l2_adjacency": false,
- "mtu": 1500,
- "name": "private-network",
- "port_security_enabled": true,
- "project_id": "4fd44f30292945e481c7b8a0c8908869",
- "qos_policy_id": "6a8454ade84346f59e8d40665f878b2e",
- "revision_number": 1,
- "router:external": false,
- "shared": true,
- "status": "ACTIVE",
- "subnets": [
- "54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
- ],
- "tags": ["tag1,tag2"],
- "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
- "updated_at": "2016-03-08T20:19:41",
- "vlan_transparent": false,
- "description": "",
- "is_default": true
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json b/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json
deleted file mode 100644
index d3f2763..0000000
--- a/libcloud/test/compute/fixtures/openstack/_v2_0__subnets.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "subnets": [
- {
- "name": "private-subnet",
- "enable_dhcp": true,
- "network_id": "db193ab3-96e3-4cb3-8fc5-05f4296d0324",
- "segment_id": null,
- "project_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
- "tenant_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
- "dns_nameservers": [],
- "allocation_pools": [
- {
- "start": "10.0.0.2",
- "end": "10.0.0.254"
- }
- ],
- "host_routes": [],
- "ip_version": 4,
- "gateway_ip": "10.0.0.1",
- "cidr": "10.0.0.0/24",
- "id": "08eae331-0402-425a-923c-34f7cfe39c1b",
- "created_at": "2016-10-10T14:35:34Z",
- "description": "",
- "ipv6_address_mode": null,
- "ipv6_ra_mode": null,
- "revision_number": 2,
- "service_types": [],
- "subnetpool_id": null,
- "tags": ["tag1,tag2"],
- "updated_at": "2016-10-10T14:35:34Z"
- },
- {
- "name": "my_subnet",
- "enable_dhcp": true,
- "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
- "segment_id": null,
- "project_id": "4fd44f30292945e481c7b8a0c8908869",
- "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
- "dns_nameservers": [],
- "allocation_pools": [
- {
- "start": "192.0.0.2",
- "end": "192.255.255.254"
- }
- ],
- "host_routes": [],
- "ip_version": 4,
- "gateway_ip": "192.0.0.1",
- "cidr": "192.0.0.0/8",
- "id": "54d6f61d-db07-451c-9ab3-b9609b6b6f0b",
- "created_at": "2016-10-10T14:35:47Z",
- "description": "",
- "ipv6_address_mode": null,
- "ipv6_ra_mode": null,
- "revision_number": 2,
- "service_types": [],
- "subnetpool_id": null,
- "tags": ["tag1,tag2"],
- "updated_at": "2016-10-10T14:35:47Z"
- }
- ]
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks.json b/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks.json
new file mode 100644
index 0000000..fac0dcf
--- /dev/null
+++ b/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks.json
@@ -0,0 +1,64 @@
+{
+ "networks": [
+ {
+ "admin_state_up": true,
+ "availability_zone_hints": [],
+ "availability_zones": [
+ "nova"
+ ],
+ "created_at": "2016-03-08T20:19:41",
+ "dns_domain": "my-domain.org.",
+ "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+ "ipv4_address_scope": null,
+ "ipv6_address_scope": null,
+ "l2_adjacency": false,
+ "mtu": 1500,
+ "name": "net1",
+ "port_security_enabled": true,
+ "project_id": "4fd44f30292945e481c7b8a0c8908869",
+ "qos_policy_id": "6a8454ade84346f59e8d40665f878b2e",
+ "revision_number": 1,
+ "router:external": false,
+ "shared": false,
+ "status": "ACTIVE",
+ "subnets": [
+ "54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
+ ],
+ "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+ "updated_at": "2016-03-08T20:19:41",
+ "vlan_transparent": true,
+ "description": "",
+ "is_default": false
+ },
+ {
+ "admin_state_up": true,
+ "availability_zone_hints": [],
+ "availability_zones": [
+ "nova"
+ ],
+ "created_at": "2016-03-08T20:19:41",
+ "dns_domain": "my-domain.org.",
+ "id": "db193ab3-96e3-4cb3-8fc5-05f4296d0324",
+ "ipv4_address_scope": null,
+ "ipv6_address_scope": null,
+ "l2_adjacency": false,
+ "mtu": 1500,
+ "name": "net2",
+ "port_security_enabled": true,
+ "project_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+ "qos_policy_id": "bfdb6c39f71e4d44b1dfbda245c50819",
+ "revision_number": 3,
+ "router:external": false,
+ "shared": false,
+ "status": "ACTIVE",
+ "subnets": [
+ "08eae331-0402-425a-923c-34f7cfe39c1b"
+ ],
+ "tenant_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+ "updated_at": "2016-03-08T20:19:41",
+ "vlan_transparent": false,
+ "description": "",
+ "is_default": false
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks_POST.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks_POST.json b/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks_POST.json
new file mode 100644
index 0000000..bf5b748
--- /dev/null
+++ b/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__networks_POST.json
@@ -0,0 +1,33 @@
+{
+ "network":
+ {
+ "admin_state_up": true,
+ "availability_zone_hints": [],
+ "availability_zones": [
+ "nova"
+ ],
+ "created_at": "2016-03-08T20:19:41",
+ "dns_domain": "my-domain.org.",
+ "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+ "ipv4_address_scope": null,
+ "ipv6_address_scope": null,
+ "l2_adjacency": false,
+ "mtu": 1500,
+ "name": "net1",
+ "port_security_enabled": true,
+ "project_id": "4fd44f30292945e481c7b8a0c8908869",
+ "qos_policy_id": "6a8454ade84346f59e8d40665f878b2e",
+ "revision_number": 1,
+ "router:external": false,
+ "shared": false,
+ "status": "ACTIVE",
+ "subnets": [
+ "54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
+ ],
+ "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+ "updated_at": "2016-03-08T20:19:41",
+ "vlan_transparent": true,
+ "description": "",
+ "is_default": false
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__subnets.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__subnets.json b/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__subnets.json
new file mode 100644
index 0000000..d3f2763
--- /dev/null
+++ b/libcloud/test/compute/fixtures/openstack_v1.1/_v2_0__subnets.json
@@ -0,0 +1,62 @@
+{
+ "subnets": [
+ {
+ "name": "private-subnet",
+ "enable_dhcp": true,
+ "network_id": "db193ab3-96e3-4cb3-8fc5-05f4296d0324",
+ "segment_id": null,
+ "project_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+ "tenant_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+ "dns_nameservers": [],
+ "allocation_pools": [
+ {
+ "start": "10.0.0.2",
+ "end": "10.0.0.254"
+ }
+ ],
+ "host_routes": [],
+ "ip_version": 4,
+ "gateway_ip": "10.0.0.1",
+ "cidr": "10.0.0.0/24",
+ "id": "08eae331-0402-425a-923c-34f7cfe39c1b",
+ "created_at": "2016-10-10T14:35:34Z",
+ "description": "",
+ "ipv6_address_mode": null,
+ "ipv6_ra_mode": null,
+ "revision_number": 2,
+ "service_types": [],
+ "subnetpool_id": null,
+ "tags": ["tag1,tag2"],
+ "updated_at": "2016-10-10T14:35:34Z"
+ },
+ {
+ "name": "my_subnet",
+ "enable_dhcp": true,
+ "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+ "segment_id": null,
+ "project_id": "4fd44f30292945e481c7b8a0c8908869",
+ "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+ "dns_nameservers": [],
+ "allocation_pools": [
+ {
+ "start": "192.0.0.2",
+ "end": "192.255.255.254"
+ }
+ ],
+ "host_routes": [],
+ "ip_version": 4,
+ "gateway_ip": "192.0.0.1",
+ "cidr": "192.0.0.0/8",
+ "id": "54d6f61d-db07-451c-9ab3-b9609b6b6f0b",
+ "created_at": "2016-10-10T14:35:47Z",
+ "description": "",
+ "ipv6_address_mode": null,
+ "ipv6_ra_mode": null,
+ "revision_number": 2,
+ "service_types": [],
+ "subnetpool_id": null,
+ "tags": ["tag1,tag2"],
+ "updated_at": "2016-10-10T14:35:47Z"
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/b4e957f4/libcloud/test/compute/test_openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py
index e1dd271..0a44460 100644
--- a/libcloud/test/compute/test_openstack.py
+++ b/libcloud/test/compute/test_openstack.py
@@ -1399,24 +1399,6 @@ class OpenStack_1_1_Tests(unittest.TestCase, TestCaseMixin):
self.assertEqual(pool.delete_floating_ip.call_count, 1)
- def test_ex_list_network(self):
- networks = self.driver.ex_list_networks()
- network = networks[0]
-
- self.assertEqual(len(networks), 3)
- self.assertEqual(network.name, 'test1')
- self.assertEqual(network.cidr, '127.0.0.0/24')
-
- def test_ex_create_network(self):
- network = self.driver.ex_create_network(name='test1',
- cidr='127.0.0.0/24')
- self.assertEqual(network.name, 'test1')
- self.assertEqual(network.cidr, '127.0.0.0/24')
-
- def test_ex_delete_network(self):
- network = self.driver.ex_list_networks()[0]
- self.assertTrue(self.driver.ex_delete_network(network=network))
-
def test_ex_get_metadata_for_node(self):
image = NodeImage(id=11, name='Ubuntu 8.10 (intrepid)', driver=self.driver)
size = NodeSize(1, '256 slice', None, None, None, None, driver=self.driver)
@@ -1568,9 +1550,7 @@ class OpenStack_2_Tests(OpenStack_1_1_Tests):
driver_type = OpenStack_2_NodeDriver
driver_kwargs = {
'ex_force_auth_version': '2.0',
- 'ex_force_auth_url': 'https://auth.api.example.com:8774',
- 'ex_force_image_url': 'https://auth.api.example.com:9292',
- 'ex_force_network_url': 'https://auth.api.example.com:9696'
+ 'ex_force_auth_url': 'https://auth.api.example.com'
}
def setUp(self):
@@ -1580,6 +1560,11 @@ class OpenStack_2_Tests(OpenStack_1_1_Tests):
# normally authentication happens lazily, but we force it here
self.driver.image_connection._populate_hosts_and_request_paths()
+ self.driver_klass.network_connectionCls.conn_class = OpenStack_2_0_MockHttp
+ self.driver_klass.network_connectionCls.auth_url = "https://auth.api.example.com"
+ # normally authentication happens lazily, but we force it here
+ self.driver.network_connection._populate_hosts_and_request_paths()
+
def test_ex_force_auth_token_passed_to_connection(self):
base_url = 'https://servers.api.rackspacecloud.com/v1.1/slug'
kwargs = {
@@ -1698,8 +1683,8 @@ class OpenStack_2_Tests(OpenStack_1_1_Tests):
networks = self.driver.ex_list_networks()
network = networks[0]
- self.assertEqual(len(networks), 1)
- self.assertEqual(network.name, 'private-network')
+ self.assertEqual(len(networks), 2)
+ self.assertEqual(network.name, 'net1')
self.assertEqual(network.extra['subnets'], ['54d6f61d-db07-451c-9ab3-b9609b6b6f0b'])
def test_ex_list_subnets(self):
@@ -1710,6 +1695,22 @@ class OpenStack_2_Tests(OpenStack_1_1_Tests):
self.assertEqual(subnet.name, 'private-subnet')
self.assertEqual(subnet.cidr, '10.0.0.0/24')
+ def test_ex_list_network(self):
+ networks = self.driver.ex_list_networks()
+ network = networks[0]
+
+ self.assertEqual(len(networks), 2)
+ self.assertEqual(network.name, 'net1')
+
+ def test_ex_create_network(self):
+ network = self.driver.ex_create_network(name='net1',
+ cidr='127.0.0.0/24')
+ self.assertEqual(network.name, 'net1')
+
+ def test_ex_delete_network(self):
+ network = self.driver.ex_list_networks()[0]
+ self.assertTrue(self.driver.ex_delete_network(network=network))
+
class OpenStack_1_1_FactoryMethodTests(OpenStack_1_1_Tests):
should_list_locations = False
should_list_volumes = True
@@ -2141,6 +2142,26 @@ class OpenStack_1_1_MockHttp(MockHttp, unittest.TestCase):
return (status_code, body, self.json_content_headers, httplib.responses[httplib.OK])
+ def _v2_1337_v2_0_networks(self, method, url, body, headers):
+ if method == 'GET':
+ body = self.fixtures.load('_v2_0__networks.json')
+ return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
+ elif method == 'POST':
+ body = self.fixtures.load('_v2_0__networks_POST.json')
+ return (httplib.ACCEPTED, body, self.json_content_headers, httplib.responses[httplib.OK])
+ raise NotImplementedError()
+
+ def _v2_1337_v2_0_networks_d32019d3_bc6e_4319_9c1d_6722fc136a22(self, method, url, body, headers):
+ if method == 'GET':
+ body = self.fixtures.load('_v2_0__networks_POST.json')
+ return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
+ if method == 'DELETE':
+ body = ''
+ return (httplib.ACCEPTED, body, self.json_content_headers, httplib.responses[httplib.OK])
+
+ def _v2_1337_v2_0_subnets(self, method, url, body, headers):
+ body = self.fixtures.load('_v2_0__subnets.json')
+ return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
# This exists because the nova compute url in devstack has v2 in there but the v1.1 fixtures
# work fine.
@@ -2161,14 +2182,6 @@ class OpenStack_2_0_MockHttp(OpenStack_1_1_MockHttp):
setattr(self, new_name, method_type(method, self,
OpenStack_2_0_MockHttp))
- def _v2_0_networks(self, method, url, body, headers):
- body = self.auth_fixtures.load('_v2_0__networks.json')
- return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
-
- def _v2_0_subnets(self, method, url, body, headers):
- body = self.auth_fixtures.load('_v2_0__subnets.json')
- return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
-
class OpenStack_1_1_Auth_2_0_Tests(OpenStack_1_1_Tests):
driver_args = OPENSTACK_PARAMS + ('1.1',)
driver_kwargs = {'ex_force_auth_version': '2.0'}
[02/18] libcloud git commit: Merge remote-tracking branch
'upstream/trunk' into trunk
Posted by vd...@apache.org.
Merge remote-tracking branch 'upstream/trunk' into trunk
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/7deee735
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/7deee735
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/7deee735
Branch: refs/heads/trunk
Commit: 7deee735c43b38e021153579d41193b49cbba1dd
Parents: 814bc3e dcb0cef
Author: micafer <mi...@upv.es>
Authored: Wed Nov 29 13:37:11 2017 +0100
Committer: micafer <mi...@upv.es>
Committed: Wed Nov 29 13:37:11 2017 +0100
----------------------------------------------------------------------
.codecov.yml | 23 +
.coveralls.yml | 2 -
.gitignore | 7 +
.travis.yml | 13 +-
CHANGES.rst | 254 +-
MANIFEST.in | 1 +
README.rst | 4 +-
.../generate_provider_feature_matrix_table.py | 25 +-
contrib/scrape-ec2-prices.py | 4 +-
contrib/update_google_prices.py | 4 +-
demos/example_openstack.py | 17 +
doap_libcloud.rdf | 23 +-
.../images/provider_logos/profitbricks.png | Bin 0 -> 3866 bytes
docs/_static/images/provider_logos/upcloud.png | Bin 0 -> 20107 bytes
docs/committer_guide.rst | 26 +-
.../_supported_methods_block_storage.rst | 4 +-
.../_supported_methods_image_management.rst | 4 +-
.../_supported_methods_key_pair_management.rst | 2 -
docs/compute/_supported_methods_main.rst | 2 -
docs/compute/_supported_providers.rst | 122 +-
docs/compute/drivers/ec2.rst | 13 +-
docs/compute/drivers/openstack.rst | 30 +
docs/compute/drivers/profitbricks.rst | 83 +
docs/compute/drivers/upcloud.rst | 45 +
docs/compute/pricing.rst | 2 +-
docs/conf.py | 20 +-
docs/container/_supported_methods.rst | 2 +
docs/container/_supported_providers.rst | 2 +
docs/container/drivers/gke.rst | 28 +
docs/copyright.rst | 10 +
docs/dns/_supported_providers.rst | 2 +-
docs/dns/drivers/powerdns.rst | 6 +-
docs/examples/__init__.py | 0
docs/examples/backup/__init__.py | 0
docs/examples/compute/__init__.py | 0
docs/examples/compute/auroracompute/__init__.py | 0
.../auroracompute/instantiate_driver_region.py | 4 +-
docs/examples/compute/azure/__init__.py | 0
docs/examples/compute/azure_arm/__init__.py | 0
docs/examples/compute/bsnl/__init__.py | 0
docs/examples/compute/cloudframes/__init__.py | 0
docs/examples/compute/cloudscale/__init__.py | 0
docs/examples/compute/cloudsigma/__init__.py | 0
docs/examples/compute/cloudstack/__init__.py | 0
.../start_interactive_shell_exoscale.py | 1 +
.../start_interactive_shell_ikoula.py | 1 +
docs/examples/compute/cloudwatt/__init__.py | 0
docs/examples/compute/digitalocean/__init__.py | 0
docs/examples/compute/dimensiondata/__init__.py | 0
docs/examples/compute/ec2/__init__.py | 0
.../ec2/create_general_purpose_ssd_volume.py | 4 +-
.../ec2/create_provisioned_iops_volume.py | 4 +-
docs/examples/compute/ecs/__init__.py | 0
docs/examples/compute/gandi/__init__.py | 0
docs/examples/compute/gce/__init__.py | 0
docs/examples/compute/indosat/__init__.py | 0
.../compute/internetsolutions/__init__.py | 0
docs/examples/compute/libvirt/__init__.py | 0
docs/examples/compute/medone/__init__.py | 0
docs/examples/compute/ntta/__init__.py | 0
docs/examples/compute/onapp/__init__.py | 0
docs/examples/compute/oneandone/__init__.py | 0
docs/examples/compute/openstack/__init__.py | 0
docs/examples/compute/ovh/__init__.py | 0
docs/examples/compute/packet/__init__.py | 0
docs/examples/compute/profitbricks/__init__.py | 0
.../compute/profitbricks/create_datacenter.py | 26 +
.../examples/compute/profitbricks/create_lan.py | 20 +
.../compute/profitbricks/create_node.py | 51 +
.../compute/profitbricks/create_volume.py | 29 +
.../compute/profitbricks/instantiate_driver.py | 5 +
docs/examples/compute/rackspace/__init__.py | 0
docs/examples/compute/vsphere/__init__.py | 0
docs/examples/compute/vultr/__init__.py | 0
docs/examples/container/__init__.py | 0
docs/examples/container/docker/__init__.py | 0
docs/examples/container/ecs/__init__.py | 0
docs/examples/container/gke/__init__.py | 0
.../container/gke/instantiate_driver.py | 9 +
docs/examples/container/joyent/__init__.py | 0
docs/examples/container/kubernetes/__init__.py | 0
docs/examples/container/rancher/__init__.py | 0
docs/examples/dns/__init__.py | 0
docs/examples/dns/auroradns/__init__.py | 0
docs/examples/dns/buddyns/__init__.py | 0
docs/examples/dns/cloudflare/__init__.py | 0
docs/examples/dns/digitalocean/__init__.py | 0
docs/examples/dns/dnsimple/__init__.py | 0
docs/examples/dns/durabledns/__init__.py | 0
docs/examples/dns/godaddy/__init__.py | 0
docs/examples/dns/hostvirtual/__init__.py | 0
docs/examples/dns/liquidweb/__init__.py | 0
docs/examples/dns/luadns/__init__.py | 0
docs/examples/dns/nfsn/__init__.py | 0
docs/examples/dns/onapp/__init__.py | 0
docs/examples/dns/pointdns/__init__.py | 0
docs/examples/dns/powerdns/__init__.py | 0
docs/examples/dns/vultr/__init__.py | 0
docs/examples/dns/worldwidedns/__init__.py | 0
docs/examples/dns/zonomi/__init__.py | 0
docs/examples/http_proxy/__init__.py | 0
docs/examples/loadbalancer/__init__.py | 0
docs/examples/loadbalancer/elb/__init__.py | 0
.../elb/create_lb_connection_for_aws.py | 4 +-
.../loadbalancer/elb/create_lb_policy.py | 4 +-
.../loadbalancer/elb/create_load_balancer.py | 4 +-
.../elb/ex_create_balancer_listeners.py | 4 +-
.../elb/ex_delete_balancer_policy.py | 4 +-
.../elb/ex_list_balancer_policies.py | 4 +-
.../elb/ex_list_balancer_policy_types.py | 4 +-
.../ex_set_balancer_policies_backend_server.py | 4 +-
.../elb/ex_set_balancer_policies_listener.py | 4 +-
.../loadbalancer/elb/list_load_balancer.py | 4 +-
docs/examples/loadbalancer/gce/__init__.py | 0
.../examples/loadbalancer/softlayer/__init__.py | 0
docs/examples/misc/__init__.py | 0
docs/examples/misc/twisted_create_node.py | 5 +-
docs/examples/storage/__init__.py | 0
docs/examples/storage/auroraobjects/__init__.py | 0
docs/examples/storage/azure/__init__.py | 0
docs/examples/storage/backblaze_b2/__init__.py | 0
.../concurrent_file_download_using_gevent.py | 4 +-
.../storage/digitalocean_spaces/__init__.py | 0
.../storage/digitalocean_spaces/instantiate.py | 6 +
.../digitalocean_spaces/upload_object_acls.py | 19 +
.../storage/digitalocean_spaces/v4sig.py | 8 +
docs/examples/storage/s3/__init__.py | 0
docs/examples/storage/swift/__init__.py | 0
docs/loadbalancer/_supported_providers.rst | 2 +-
docs/storage/_supported_methods_cdn.rst | 2 +
docs/storage/_supported_methods_main.rst | 4 +
docs/storage/_supported_providers.rst | 70 +-
docs/storage/drivers/digitalocean_spaces.rst | 56 +
libcloud/__init__.py | 3 +-
libcloud/common/aws.py | 1 +
libcloud/common/azure.py | 6 +-
libcloud/common/azure_arm.py | 2 +-
libcloud/common/base.py | 30 +-
libcloud/common/exceptions.py | 36 +-
libcloud/common/openstack.py | 33 +-
libcloud/common/openstack_identity.py | 6 +
libcloud/common/ovh.py | 3 +-
libcloud/common/upcloud.py | 261 +
libcloud/compute/drivers/azure_arm.py | 940 +-
libcloud/compute/drivers/cloudstack.py | 2 +
libcloud/compute/drivers/digitalocean.py | 6 +
libcloud/compute/drivers/ec2.py | 296 +-
libcloud/compute/drivers/gandi.py | 1 -
libcloud/compute/drivers/gce.py | 192 +-
libcloud/compute/drivers/libvirt_driver.py | 2 +-
libcloud/compute/drivers/oneandone.py | 400 +-
libcloud/compute/drivers/openstack.py | 29 +
libcloud/compute/drivers/profitbricks.py | 190 +-
libcloud/compute/drivers/softlayer.py | 19 +
libcloud/compute/drivers/upcloud.py | 293 +
libcloud/compute/drivers/vultr.py | 1 -
libcloud/compute/providers.py | 2 +
libcloud/compute/ssh.py | 5 +-
libcloud/compute/types.py | 5 +
libcloud/container/drivers/docker.py | 78 +-
libcloud/container/drivers/gke.py | 179 +
libcloud/container/drivers/kubernetes.py | 22 +-
libcloud/container/providers.py | 2 +
libcloud/container/types.py | 1 +
libcloud/data/pricing.json | 304 +-
libcloud/dns/drivers/linode.py | 3 +-
libcloud/dns/drivers/route53.py | 7 +
libcloud/http.py | 42 +-
libcloud/loadbalancer/drivers/alb.py | 7 +-
libcloud/loadbalancer/drivers/dimensiondata.py | 2 +-
libcloud/loadbalancer/drivers/elb.py | 5 +-
libcloud/security.py | 4 +-
libcloud/storage/drivers/azure_blobs.py | 6 +-
libcloud/storage/drivers/cloudfiles.py | 13 +-
libcloud/storage/drivers/digitalocean_spaces.py | 102 +
libcloud/storage/providers.py | 3 +
libcloud/storage/types.py | 1 +
libcloud/test/__init__.py | 2 +
libcloud/test/common/test_base.py | 53 +-
libcloud/test/common/test_upcloud.py | 266 +
...9_providers_Microsoft_Commerce_RateCard.json | 84270 -----------------
...99999999999_providers_Microsoft_Compute.json | 200 -
...rosoft_Compute_locations_eastus_vmSizes.json | 28 -
...9_providers_Microsoft_Commerce_RateCard.json | 84270 +++++++++++++++++
...ns_99999999_providers_Microsoft_Compute.json | 200 +
...99999_providers_Microsoft_Compute_disks.json | 65 +
...rosoft_Compute_locations_eastus_vmSizes.json | 28 +
...9_providers_Microsoft_Compute_snapshots.json | 75 +
...iders_Microsoft_Compute_virtualMachines.json | 52 +
...ers_Microsoft_Compute_disks_test_disk_1.json | 22 +
...Microsoft_Compute_snapshots_test_snap_1.json | 20 +
...oft_Compute_virtualMachines_test_node_1.json | 48 +
...irtualMachines_test_node_1_InstanceView.json | 27 +
...twork_networkInterfaces_test_node_1_nic.json | 38 +
...11111_providers_Microsoft_Compute_disks.json | 22 +
...1_providers_Microsoft_Compute_snapshots.json | 38 +
.../listVirtualMachines_noipaddress.json | 98 +
.../fixtures/digitalocean/ex_change_kernel.json | 12 -
.../fixtures/digitalocean/ex_hard_reboot.json | 12 -
.../digitalocean_v2/ex_enable_ipv6.json | 13 +
.../fixtures/ec2/create_encrypted_volume.xml | 11 +
.../test/compute/fixtures/ec2/create_volume.xml | 2 +
.../ec2/describe_reserved_instances.xml | 1 +
.../gce/global_custom_image_setLabels_post.json | 15 +
.../compute/fixtures/gce/global_images.json | 30 +-
...perations_operation_setImageLabels_post.json | 15 +
..._us_central1_a_node_name_setLabels_post.json | 15 +
.../projects_coreos-cloud_global_images.json | 1878 +-
...eos-cloud_global_licenses_coreos_stable.json | 6 +
...gions_us-central1_addresses_testaddress.json | 11 +
...l1_a_instances_node_name_setLabels_post.json | 15 +
.../fixtures/profitbricks/attach_volume.json | 10 +-
.../fixtures/profitbricks/create_node.json | 10 +-
.../fixtures/profitbricks/create_volume.json | 8 +-
.../profitbricks/create_volume_snapshot.json | 6 +-
.../profitbricks/error_resource_not_found.json | 8 +
.../profitbricks/ex_create_datacenter.json | 6 +-
.../profitbricks/ex_create_firewall_rule.json | 10 +-
.../profitbricks/ex_create_ip_block.json | 6 +-
.../fixtures/profitbricks/ex_create_lan.json | 4 +-
.../profitbricks/ex_create_load_balancer.json | 25 +-
.../ex_create_network_interface.json | 6 +-
.../profitbricks/ex_describe_datacenter.json | 60 +-
.../profitbricks/ex_describe_firewall_rule.json | 10 +-
.../profitbricks/ex_describe_image.json | 5 +-
.../profitbricks/ex_describe_ip_block.json | 11 +-
.../fixtures/profitbricks/ex_describe_lan.json | 6 +-
.../profitbricks/ex_describe_load_balancer.json | 6 +-
.../profitbricks/ex_describe_location.json | 6 +-
.../ex_describe_network_interface.json | 8 +-
.../fixtures/profitbricks/ex_describe_node.json | 28 +-
.../profitbricks/ex_describe_snapshot.json | 6 +-
.../profitbricks/ex_describe_volume.json | 10 +-
.../profitbricks/ex_list_attached_volumes.json | 49 +-
.../profitbricks/ex_list_datacenters.json | 18 +-
.../profitbricks/ex_list_firewall_rules.json | 8 +-
.../profitbricks/ex_list_ip_blocks.json | 10 +-
.../fixtures/profitbricks/ex_list_lans.json | 24 +-
.../ex_list_load_balanced_nics.json | 12 +-
.../profitbricks/ex_list_load_balancers.json | 30 +-
.../ex_list_network_interfaces.json | 14 +-
.../profitbricks/ex_rename_datacenter.json | 16 +-
.../profitbricks/ex_set_inet_access.json | 31 -
.../profitbricks/ex_update_firewall_rule.json | 10 +-
.../fixtures/profitbricks/ex_update_image.json | 5 +-
.../fixtures/profitbricks/ex_update_lan.json | 8 +-
.../profitbricks/ex_update_load_balancer.json | 6 +-
.../ex_update_network_interface.json | 22 +-
.../fixtures/profitbricks/ex_update_node.json | 16 +-
.../profitbricks/ex_update_snapshot.json | 6 +-
.../fixtures/profitbricks/ex_update_volume.json | 10 +-
.../fixtures/profitbricks/list_images.json | 26 +-
.../fixtures/profitbricks/list_locations.json | 83 +-
.../fixtures/profitbricks/list_nodes.json | 46 +-
.../fixtures/profitbricks/list_snapshots.json | 4 +-
.../fixtures/profitbricks/list_volumes.json | 10 +-
.../compute/fixtures/upcloud/api_1_2_plan.json | 38 +
.../fixtures/upcloud/api_1_2_server.json | 22 +
...er_00893c98-5d5a-4363-b177-88df518a2b60.json | 58 +
...er_00f8c525-7e62-4108-8115-3958df5b43dc.json | 57 +
...525-7e62-4108-8115-3958df5b43dc_restart.json | 57 +
.../upcloud/api_1_2_server_from_cdrom.json | 65 +
.../upcloud/api_1_2_server_from_template.json | 59 +
.../fixtures/upcloud/api_1_2_storage_cdrom.json | 411 +
.../upcloud/api_1_2_storage_template.json | 114 +
.../compute/fixtures/upcloud/api_1_2_zone.json | 30 +
.../upcloud/api_1_2_zone_failed_auth.json | 6 +
libcloud/test/compute/test_azure_arm.py | 535 +-
libcloud/test/compute/test_cloudstack.py | 11 +
libcloud/test/compute/test_digitalocean_v2.py | 11 +
libcloud/test/compute/test_ec2.py | 67 +-
libcloud/test/compute/test_gce.py | 115 +-
libcloud/test/compute/test_openstack.py | 18 +-
libcloud/test/compute/test_profitbricks.py | 1484 +-
libcloud/test/compute/test_softlayer.py | 10 +
libcloud/test/compute/test_upcloud.py | 248 +
libcloud/test/conftest.py | 25 +
...nes_us-central1-a_instance_serverconfig.json | 1 +
.../fixtures/gke/zones_us-central1-a_list.json | 29 +
libcloud/test/container/test_gke.py | 93 +
libcloud/test/dns/test_linode.py | 8 +
libcloud/test/dns/test_route53.py | 75 +
libcloud/test/secrets.py-dist | 6 +
libcloud/test/storage/test_azure_blobs.py | 25 +-
.../test/storage/test_digitalocean_spaces.py | 138 +
libcloud/test/test_http.py | 22 +-
requirements-tests.txt | 4 +-
scripts/check_file_names.sh | 34 +
setup.py | 1 +
tox.ini | 39 +-
290 files changed, 93821 insertions(+), 87367 deletions(-)
----------------------------------------------------------------------
[09/18] libcloud git commit: return extra_specs in OpenStackNodeSize
Posted by vd...@apache.org.
return extra_specs in OpenStackNodeSize
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/a6c19b6c
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/a6c19b6c
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/a6c19b6c
Branch: refs/heads/trunk
Commit: a6c19b6ce97a6c7d151ede99627bcdc8f6590f12
Parents: 5deb159
Author: micafer <mi...@upv.es>
Authored: Fri May 11 13:47:20 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Fri May 11 13:47:20 2018 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/openstack.py | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/a6c19b6c/libcloud/compute/drivers/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py
index 7d824a4..ea061a0 100644
--- a/libcloud/compute/drivers/openstack.py
+++ b/libcloud/compute/drivers/openstack.py
@@ -892,6 +892,7 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
# XXX: needs hardcode
vcpus=vcpus,
bandwidth=None,
+ extra=el.get('extra_specs')
# Hardcoded
price=self._get_size_price(el.get('id')),
driver=self.connection.driver)
[17/18] libcloud git commit: Merge remote-tracking branch
'micafer/trunk' into trunk
Posted by vd...@apache.org.
Merge remote-tracking branch 'micafer/trunk' into trunk
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/cdff9500
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/cdff9500
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/cdff9500
Branch: refs/heads/trunk
Commit: cdff9500b9217c1df896f2cfb99b43e2eb9b868f
Parents: 20186b9 45d33fd
Author: Rick van de Loo <ri...@gmail.com>
Authored: Wed Sep 19 10:01:11 2018 +0200
Committer: Rick van de Loo <ri...@gmail.com>
Committed: Wed Sep 19 10:01:11 2018 +0200
----------------------------------------------------------------------
docs/compute/drivers/openstack.rst | 10 ++-
libcloud/common/openstack.py | 1 +
libcloud/compute/drivers/openstack.py | 91 +++++++++++++++++++-
.../openstack_v1.1/_v2_0__networks.json | 64 ++++++++++++++
.../openstack_v1.1/_v2_0__networks_POST.json | 33 +++++++
.../fixtures/openstack_v1.1/_v2_0__subnets.json | 62 +++++++++++++
libcloud/test/compute/test_openstack.py | 70 +++++++++++----
7 files changed, 309 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
[04/18] libcloud git commit: Fix LIBCLOUD-965
Posted by vd...@apache.org.
Fix LIBCLOUD-965
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/e23be018
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/e23be018
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/e23be018
Branch: refs/heads/trunk
Commit: e23be01804d4d435382fb2dc2b1bf68ad0f5e401
Parents: 00efcf2
Author: micafer <mi...@upv.es>
Authored: Thu Nov 30 09:56:02 2017 +0100
Committer: micafer <mi...@upv.es>
Committed: Thu Nov 30 09:56:02 2017 +0100
----------------------------------------------------------------------
libcloud/common/openstack_identity.py | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/e23be018/libcloud/common/openstack_identity.py
----------------------------------------------------------------------
diff --git a/libcloud/common/openstack_identity.py b/libcloud/common/openstack_identity.py
index 966c12b..4285933 100644
--- a/libcloud/common/openstack_identity.py
+++ b/libcloud/common/openstack_identity.py
@@ -1525,12 +1525,23 @@ class OpenStackIdentity_3_0_Connection_OIDC_access_token(
"""
Get the first project ID accessible with the specified access token
"""
- path = '/v3/OS-FEDERATION/projects'
+ # Try new path first (from ver 1.1)
+ path = '/v3/auth/projects'
response = self.request(path,
headers={'Content-Type': 'application/json',
'X-Auth-Token': token},
method='GET')
+ if response.status not in [httplib.UNAUTHORIZED, httplib.OK,
+ httplib.CREATED]:
+ # In case of error try old one
+ path = '/v3/OS-FEDERATION/projects'
+ response = self.request(path,
+ headers={'Content-Type':
+ 'application/json',
+ 'X-Auth-Token': token},
+ method='GET')
+
if response.status == httplib.UNAUTHORIZED:
# Invalid credentials
raise InvalidCredsError()
[05/18] libcloud git commit: Fix test
Posted by vd...@apache.org.
Fix test
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/3dd6f4d5
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/3dd6f4d5
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/3dd6f4d5
Branch: refs/heads/trunk
Commit: 3dd6f4d5aec21f8d11e415fe4d95d2e316bb3dac
Parents: e23be01
Author: micafer <mi...@upv.es>
Authored: Thu Nov 30 10:59:31 2017 +0100
Committer: micafer <mi...@upv.es>
Committed: Thu Nov 30 10:59:31 2017 +0100
----------------------------------------------------------------------
libcloud/test/common/test_openstack_identity.py | 7 +++++++
1 file changed, 7 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/3dd6f4d5/libcloud/test/common/test_openstack_identity.py
----------------------------------------------------------------------
diff --git a/libcloud/test/common/test_openstack_identity.py b/libcloud/test/common/test_openstack_identity.py
index 3812f12..bf0eb2b 100644
--- a/libcloud/test/common/test_openstack_identity.py
+++ b/libcloud/test/common/test_openstack_identity.py
@@ -729,6 +729,13 @@ class OpenStackIdentity_3_0_MockHttp(MockHttp):
return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
raise NotImplementedError()
+ def _v3_auth_projects(self, method, url, body, headers):
+ if method == 'GET':
+ # get user projects
+ body = json.dumps({"projects": [{"id": "project_id"}]})
+ return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
+ raise NotImplementedError()
+
class OpenStackIdentity_2_0_Connection_VOMSMockHttp(MockHttp):
fixtures = ComputeFileFixtures('openstack_identity/v2')
[14/18] libcloud git commit: Fix lint
Posted by vd...@apache.org.
Fix lint
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/a5b8b975
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/a5b8b975
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/a5b8b975
Branch: refs/heads/trunk
Commit: a5b8b9753b86caf0d0e105a2da203a09ba53f177
Parents: b4e957f
Author: micafer <mi...@upv.es>
Authored: Fri May 25 12:34:05 2018 +0200
Committer: micafer <mi...@upv.es>
Committed: Fri May 25 12:34:05 2018 +0200
----------------------------------------------------------------------
libcloud/test/common/test_openstack_identity.py | 2 +-
libcloud/test/compute/test_openstack.py | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/a5b8b975/libcloud/test/common/test_openstack_identity.py
----------------------------------------------------------------------
diff --git a/libcloud/test/common/test_openstack_identity.py b/libcloud/test/common/test_openstack_identity.py
index 1b6e144..c36f13a 100644
--- a/libcloud/test/common/test_openstack_identity.py
+++ b/libcloud/test/common/test_openstack_identity.py
@@ -591,7 +591,7 @@ class OpenStackServiceCatalogTestCase(unittest.TestCase):
catalog = OpenStackServiceCatalog(service_catalog=service_catalog,
auth_version='2.0')
service_types = catalog.get_service_types()
- self.assertEqual(service_types, ['compute', 'image', 'network',
+ self.assertEqual(service_types, ['compute', 'image', 'network',
'object-store', 'rax:object-cdn'])
service_types = catalog.get_service_types(region='ORD')
http://git-wip-us.apache.org/repos/asf/libcloud/blob/a5b8b975/libcloud/test/compute/test_openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py
index 0a44460..d8ac0b0 100644
--- a/libcloud/test/compute/test_openstack.py
+++ b/libcloud/test/compute/test_openstack.py
@@ -1711,6 +1711,7 @@ class OpenStack_2_Tests(OpenStack_1_1_Tests):
network = self.driver.ex_list_networks()[0]
self.assertTrue(self.driver.ex_delete_network(network=network))
+
class OpenStack_1_1_FactoryMethodTests(OpenStack_1_1_Tests):
should_list_locations = False
should_list_volumes = True
@@ -2182,6 +2183,7 @@ class OpenStack_2_0_MockHttp(OpenStack_1_1_MockHttp):
setattr(self, new_name, method_type(method, self,
OpenStack_2_0_MockHttp))
+
class OpenStack_1_1_Auth_2_0_Tests(OpenStack_1_1_Tests):
driver_args = OPENSTACK_PARAMS + ('1.1',)
driver_kwargs = {'ex_force_auth_version': '2.0'}
[07/18] libcloud git commit: Imrpove test
Posted by vd...@apache.org.
Imrpove test
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/ca38440a
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/ca38440a
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/ca38440a
Branch: refs/heads/trunk
Commit: ca38440afb003c30b884cd6e1afb15cfb163d0d6
Parents: 15ae458
Author: micafer <mi...@upv.es>
Authored: Tue Jan 30 12:46:23 2018 +0100
Committer: micafer <mi...@upv.es>
Committed: Tue Jan 30 12:46:23 2018 +0100
----------------------------------------------------------------------
libcloud/test/common/test_openstack_identity.py | 40 ++++++++++++++++++++
1 file changed, 40 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ca38440a/libcloud/test/common/test_openstack_identity.py
----------------------------------------------------------------------
diff --git a/libcloud/test/common/test_openstack_identity.py b/libcloud/test/common/test_openstack_identity.py
index bf0eb2b..79a129e 100644
--- a/libcloud/test/common/test_openstack_identity.py
+++ b/libcloud/test/common/test_openstack_identity.py
@@ -424,6 +424,30 @@ class OpenStackIdentity_3_0_ConnectionTests(unittest.TestCase):
self.assertTrue(result)
+class OpenStackIdentity_3_0_Connection_OIDC_access_token_federation_projectsTests(
+ unittest.TestCase):
+ def setUp(self):
+ mock_cls = OpenStackIdentity_3_0_federation_projects_MockHttp
+ mock_cls.type = None
+ OpenStackIdentity_3_0_Connection_OIDC_access_token.conn_class = mock_cls
+
+ self.auth_instance = OpenStackIdentity_3_0_Connection_OIDC_access_token(auth_url='http://none',
+ user_id='idp',
+ key='token',
+ tenant_name='oidc',
+ domain_name='test_domain')
+ self.auth_instance.auth_token = 'mock'
+
+ def test_authenticate(self):
+ auth = OpenStackIdentity_3_0_Connection_OIDC_access_token(auth_url='http://none',
+ user_id='idp',
+ key='token',
+ token_scope='project',
+ tenant_name="oidc",
+ domain_name='test_domain')
+ auth.authenticate()
+
+
class OpenStackIdentity_3_0_Connection_OIDC_access_tokenTests(
unittest.TestCase):
def setUp(self):
@@ -737,6 +761,22 @@ class OpenStackIdentity_3_0_MockHttp(MockHttp):
raise NotImplementedError()
+class OpenStackIdentity_3_0_federation_projects_MockHttp(OpenStackIdentity_3_0_MockHttp):
+ fixtures = ComputeFileFixtures('openstack_identity/v3')
+ json_content_headers = {'content-type': 'application/json; charset=UTF-8'}
+
+ def _v3_OS_FEDERATION_projects(self, method, url, body, headers):
+ if method == 'GET':
+ # get user projects
+ body = json.dumps({"projects": [{"id": "project_id"}]})
+ return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK])
+ raise NotImplementedError()
+
+ def _v3_auth_projects(self, method, url, body, headers):
+ return (httplib.INTERNAL_SERVER_ERROR, body, self.json_content_headers,
+ httplib.responses[httplib.INTERNAL_SERVER_ERROR])
+
+
class OpenStackIdentity_2_0_Connection_VOMSMockHttp(MockHttp):
fixtures = ComputeFileFixtures('openstack_identity/v2')
json_content_headers = {'content-type': 'application/json; charset=UTF-8'}