You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by qu...@apache.org on 2017/10/31 04:29:42 UTC
[1/3] libcloud git commit: Add private IP functionality to GCE
Repository: libcloud
Updated Branches:
refs/heads/trunk 5e1972e48 -> a94f92826
Add private IP functionality to GCE
Signed-off-by: Quentin Pradet <qu...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/718fd951
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/718fd951
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/718fd951
Branch: refs/heads/trunk
Commit: 718fd951c31f4c29e0f1e356a6cbbf06cdc6a4b6
Parents: 5e1972e
Author: Gareth Mcfarlane <gm...@google.com>
Authored: Thu Sep 7 20:53:08 2017 +1000
Committer: Quentin Pradet <qu...@apache.org>
Committed: Tue Oct 31 08:25:13 2017 +0400
----------------------------------------------------------------------
libcloud/compute/drivers/gce.py | 64 ++++++++++++++++++++++++++----------
1 file changed, 47 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/718fd951/libcloud/compute/drivers/gce.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/gce.py b/libcloud/compute/drivers/gce.py
index f49aaf0..21183a0 100644
--- a/libcloud/compute/drivers/gce.py
+++ b/libcloud/compute/drivers/gce.py
@@ -3727,8 +3727,9 @@ class GCENodeDriver(NodeDriver):
self, name, size, image, location=None, ex_network='default',
ex_subnetwork=None, ex_tags=None, ex_metadata=None,
ex_boot_disk=None, use_existing_disk=True, external_ip='ephemeral',
- ex_disk_type='pd-standard', ex_disk_auto_delete=True,
- ex_service_accounts=None, description=None, ex_can_ip_forward=None,
+ internal_ip=None, ex_disk_type='pd-standard',
+ ex_disk_auto_delete=True, ex_service_accounts=None,
+ description=None, ex_can_ip_forward=None,
ex_disks_gce_struct=None, ex_nic_gce_struct=None,
ex_on_host_maintenance=None, ex_automatic_restart=None,
ex_preemptible=None, ex_image_family=None, ex_labels=None):
@@ -3776,6 +3777,9 @@ class GCENodeDriver(NodeDriver):
a GCEAddress object should be passed in.
:type external_ip: :class:`GCEAddress` or ``str`` or ``None``
+ :keyword internal_ip: The private IP address to use.
+ :type internal_ip: :class:`GCEAddress` or ``str`` or ``None``
+
:keyword ex_disk_type: Specify a pd-standard (default) disk or pd-ssd
for an SSD disk.
:type ex_disk_type: ``str`` or :class:`GCEDiskType`
@@ -3911,17 +3915,18 @@ class GCENodeDriver(NodeDriver):
request, node_data = self._create_node_req(
name, size, image, location, ex_network, ex_tags, ex_metadata,
- ex_boot_disk, external_ip, ex_disk_type, ex_disk_auto_delete,
- ex_service_accounts, description, ex_can_ip_forward,
- ex_disks_gce_struct, ex_nic_gce_struct, ex_on_host_maintenance,
- ex_automatic_restart, ex_preemptible, ex_subnetwork, ex_labels)
+ ex_boot_disk, external_ip, internal_ip, ex_disk_type,
+ ex_disk_auto_delete, ex_service_accounts, description,
+ ex_can_ip_forward, ex_disks_gce_struct, ex_nic_gce_struct,
+ ex_on_host_maintenance, ex_automatic_restart, ex_preemptible,
+ ex_subnetwork, ex_labels)
self.connection.async_request(request, method='POST', data=node_data)
return self.ex_get_node(name, location.name)
def ex_create_instancetemplate(
self, name, size, source=None, image=None, disk_type='pd-standard',
disk_auto_delete=True, network='default', subnetwork=None,
- can_ip_forward=None, external_ip='ephemeral',
+ can_ip_forward=None, external_ip='ephemeral', internal_ip=None,
service_accounts=None, on_host_maintenance=None,
automatic_restart=None, preemptible=None, tags=None, metadata=None,
description=None, disks_gce_struct=None, nic_gce_struct=None):
@@ -3965,6 +3970,9 @@ class GCENodeDriver(NodeDriver):
a GCEAddress object should be passed in.
:type external_ip: :class:`GCEAddress` or ``str`` or ``None``
+ :keyword internal_ip: The private IP address to use.
+ :type internal_ip: :class:`GCEAddress` or ``str`` or ``None``
+
:keyword disk_type: Specify a pd-standard (default) disk or pd-ssd
for an SSD disk.
:type disk_type: ``str`` or :class:`GCEDiskType`
@@ -4046,7 +4054,7 @@ class GCENodeDriver(NodeDriver):
disk_type=disk_type, disk_auto_delete=True,
external_ip=external_ip, network=network, subnetwork=subnetwork,
can_ip_forward=can_ip_forward, service_accounts=service_accounts,
- on_host_maintenance=on_host_maintenance,
+ on_host_maintenance=on_host_maintenance, internal_ip=internal_ip,
automatic_restart=automatic_restart, preemptible=preemptible,
tags=tags, metadata=metadata, description=description,
disks_gce_struct=disks_gce_struct, nic_gce_struct=nic_gce_struct,
@@ -4064,9 +4072,10 @@ class GCENodeDriver(NodeDriver):
def _create_instance_properties(
self, name, node_size, source=None, image=None,
disk_type='pd-standard', disk_auto_delete=True, network='default',
- subnetwork=None, external_ip='ephemeral', can_ip_forward=None,
- service_accounts=None, on_host_maintenance=None,
- automatic_restart=None, preemptible=None, tags=None, metadata=None,
+ subnetwork=None, external_ip='ephemeral', internal_ip=None,
+ can_ip_forward=None, service_accounts=None,
+ on_host_maintenance=None, automatic_restart=None,
+ preemptible=None, tags=None, metadata=None,
description=None, disks_gce_struct=None, nic_gce_struct=None,
use_selflinks=True, labels=None):
"""
@@ -4110,6 +4119,9 @@ class GCENodeDriver(NodeDriver):
a GCEAddress object should be passed in.
:type external_ip: :class:`GCEAddress` or ``str`` or ``None``
+ :keyword internal_ip: The private IP address to use.
+ :type internal_ip: :class:`GCEAddress` or ``str`` or ``None``
+
:keyword can_ip_forward: Set to ``True`` to allow this node to
send/receive non-matching src/dst packets.
:type can_ip_forward: ``bool`` or ``None``
@@ -4234,7 +4246,8 @@ class GCENodeDriver(NodeDriver):
instance_properties['networkInterfaces'] = [
self._build_network_gce_struct(
network=network, subnetwork=subnetwork,
- external_ip=external_ip, use_selflinks=True)
+ external_ip=external_ip, use_selflinks=True,
+ internal_ip=internal_ip)
]
# build scheduling
@@ -4408,7 +4421,8 @@ class GCENodeDriver(NodeDriver):
return obj.name
def _build_network_gce_struct(self, network, subnetwork=None,
- external_ip=None, use_selflinks=True):
+ external_ip=None, use_selflinks=True,
+ internal_ip=None):
"""
Build network interface dict for use in the GCE API.
@@ -4427,6 +4441,9 @@ class GCENodeDriver(NodeDriver):
a GCEAddress object should be passed in.
:type external_ip: :class:`GCEAddress`
+ :keyword internal_ip: The private IP address to use.
+ :type internal_ip: :class:`GCEAddress` or ``str``
+
:return: network interface dict
:rtype: ``dict``
"""
@@ -4450,6 +4467,9 @@ class GCENodeDriver(NodeDriver):
access_configs[0]['natIP'] = external_ip.address
ni['accessConfigs'] = access_configs
+ if internal_ip:
+ ni['networkIP'] = internal_ip
+
return ni
def _build_service_account_gce_struct(
@@ -4602,7 +4622,7 @@ class GCENodeDriver(NodeDriver):
self, base_name, size, image, number, location=None,
ex_network='default', ex_subnetwork=None, ex_tags=None,
ex_metadata=None, ignore_errors=True, use_existing_disk=True,
- poll_interval=2, external_ip='ephemeral',
+ poll_interval=2, external_ip='ephemeral', internal_ip=None,
ex_disk_type='pd-standard', ex_disk_auto_delete=True,
ex_service_accounts=None, timeout=DEFAULT_TASK_COMPLETION_TIMEOUT,
description=None, ex_can_ip_forward=None, ex_disks_gce_struct=None,
@@ -4664,6 +4684,10 @@ class GCENodeDriver(NodeDriver):
multiple node creation.)
:type external_ip: ``str`` or None
+
+ :keyword internal_ip: The private IP address to use.
+ :type internal_ip: :class:`GCEAddress` or ``str`` or ``None``
+
:keyword ex_disk_type: Specify a pd-standard (default) disk or pd-ssd
for an SSD disk.
:type ex_disk_type: ``str`` or :class:`GCEDiskType`
@@ -4788,6 +4812,7 @@ class GCENodeDriver(NodeDriver):
'ignore_errors': ignore_errors,
'use_existing_disk': use_existing_disk,
'external_ip': external_ip,
+ 'internal_ip': internal_ip,
'ex_disk_type': ex_disk_type,
'ex_disk_auto_delete': ex_disk_auto_delete,
'ex_service_accounts': ex_service_accounts,
@@ -7686,8 +7711,9 @@ class GCENodeDriver(NodeDriver):
def _create_node_req(
self, name, size, image, location, network=None, tags=None,
metadata=None, boot_disk=None, external_ip='ephemeral',
- ex_disk_type='pd-standard', ex_disk_auto_delete=True,
- ex_service_accounts=None, description=None, ex_can_ip_forward=None,
+ internal_ip=None, ex_disk_type='pd-standard',
+ ex_disk_auto_delete=True, ex_service_accounts=None,
+ description=None, ex_can_ip_forward=None,
ex_disks_gce_struct=None, ex_nic_gce_struct=None,
ex_on_host_maintenance=None, ex_automatic_restart=None,
ex_preemptible=None, ex_subnetwork=None, ex_labels=None):
@@ -7731,6 +7757,9 @@ class GCENodeDriver(NodeDriver):
ex_nic_gce_struct param.
:type external_ip: :class:`GCEAddress` or ``str`` or None
+ :keyword internal_ip: The private IP address to use.
+ :type internal_ip: :class:`GCEAddress` or ``str`` or ``None``
+
:keyword ex_disk_type: Specify a pd-standard (default) disk or pd-ssd
for an SSD disk.
:type ex_disk_type: ``str`` or :class:`GCEDiskType` or ``None``
@@ -7831,7 +7860,7 @@ class GCENodeDriver(NodeDriver):
name, node_size=size, image=image, source=source,
disk_type=ex_disk_type, disk_auto_delete=ex_disk_auto_delete,
external_ip=external_ip, network=network, subnetwork=ex_subnetwork,
- can_ip_forward=ex_can_ip_forward,
+ can_ip_forward=ex_can_ip_forward, internal_ip=internal_ip,
service_accounts=ex_service_accounts,
on_host_maintenance=ex_on_host_maintenance,
automatic_restart=ex_automatic_restart, preemptible=ex_preemptible,
@@ -7931,6 +7960,7 @@ class GCENodeDriver(NodeDriver):
status['name'], node_attrs['size'], node_attrs['image'],
node_attrs['location'], node_attrs['network'], node_attrs['tags'],
node_attrs['metadata'], external_ip=node_attrs['external_ip'],
+ internal_ip=node_attrs['internal_ip'],
ex_service_accounts=node_attrs['ex_service_accounts'],
description=node_attrs['description'],
ex_can_ip_forward=node_attrs['ex_can_ip_forward'],
[3/3] libcloud git commit: Add changes for #1107
Posted by qu...@apache.org.
Add changes for #1107
Closes #1107
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/a94f9282
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/a94f9282
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/a94f9282
Branch: refs/heads/trunk
Commit: a94f92826cdf21b29fb242a731c7cb568b8d7ea2
Parents: ad392c0
Author: Quentin Pradet <qu...@apache.org>
Authored: Tue Oct 31 08:25:45 2017 +0400
Committer: Quentin Pradet <qu...@apache.org>
Committed: Tue Oct 31 08:25:45 2017 +0400
----------------------------------------------------------------------
CHANGES.rst | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/a94f9282/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index 0e56950..a325741 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -76,6 +76,10 @@ Compute
- [EC2] Fix EBS volume encryption (GITHUB-1008)
[Sergey Babak]
+- [GCE] Add support for private IP addresses in GCE instance creation
+ (LIBCLOUD-944, GITHUB-1107)
+ [Gareth Mcfarlane]
+
Storage
~~~~~~~
[2/3] libcloud git commit: Added internal IP tests and updated
fixtures
Posted by qu...@apache.org.
Added internal IP tests and updated fixtures
Signed-off-by: Quentin Pradet <qu...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/ad392c08
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/ad392c08
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/ad392c08
Branch: refs/heads/trunk
Commit: ad392c08855c284eaf2643ab60436e914f356c8a
Parents: 718fd95
Author: Gareth Mcfarlane <gm...@google.com>
Authored: Fri Oct 27 15:42:16 2017 +1100
Committer: Quentin Pradet <qu...@apache.org>
Committed: Tue Oct 31 08:25:19 2017 +0400
----------------------------------------------------------------------
...regions_us-central1_addresses_testaddress.json | 11 +++++++++++
libcloud/test/compute/test_gce.py | 18 +++++++++++++++++-
2 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ad392c08/libcloud/test/compute/fixtures/gce/regions_us-central1_addresses_testaddress.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_addresses_testaddress.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_addresses_testaddress.json
new file mode 100644
index 0000000..d52a59d
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_addresses_testaddress.json
@@ -0,0 +1,11 @@
+{
+ "address": "173.255.114.104",
+ "creationTimestamp": "2013-06-04T16:28:43.764-07:00",
+ "description": "",
+ "id": "11879548153827627972",
+ "kind": "compute#address",
+ "name": "testaddress",
+ "region": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/addresses/testaddress",
+ "status": "RESERVED"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ad392c08/libcloud/test/compute/test_gce.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_gce.py b/libcloud/test/compute/test_gce.py
index 5d1613c..0e54a76 100644
--- a/libcloud/test/compute/test_gce.py
+++ b/libcloud/test/compute/test_gce.py
@@ -15,6 +15,7 @@
"""
Tests for Google Compute Engine Driver
"""
+
import datetime
import mock
import sys
@@ -166,6 +167,7 @@ class GCENodeDriverTest(GoogleTestCase, TestCaseMixin):
def test_build_network_gce_struct(self):
network = self.driver.ex_get_network('lcnetwork')
address = self.driver.ex_get_address('lcaddress')
+ internalip = self.driver.ex_get_address('testaddress')
subnetwork_name = 'cf-972cf02e6ad49112'
subnetwork = self.driver.ex_get_subnetwork(subnetwork_name)
d = self.driver._build_network_gce_struct(network, subnetwork, address)
@@ -173,7 +175,16 @@ class GCENodeDriverTest(GoogleTestCase, TestCaseMixin):
self.assertTrue('subnetwork' in d)
self.assertTrue('kind' in d and
d['kind'] == 'compute#instanceNetworkInterface')
-
+ self.assertEqual(d['accessConfigs'][0]['natIP'], address.address)
+ # test with internal IP
+ d = self.driver._build_network_gce_struct(network, subnetwork, address,
+ internal_ip=internalip)
+ self.assertTrue('network' in d)
+ self.assertTrue('subnetwork' in d)
+ self.assertTrue('kind' in d and
+ d['kind'] == 'compute#instanceNetworkInterface')
+ self.assertEqual(d['accessConfigs'][0]['natIP'], address.address)
+ self.assertEqual(d['networkIP'], internalip)
network = self.driver.ex_get_network('default')
d = self.driver._build_network_gce_struct(network)
self.assertTrue('network' in d)
@@ -2900,6 +2911,11 @@ class GCEMockHttp(MockHttp):
'regions_us-central1_addresses_lcaddress.json')
return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
+ def _regions_us_central1_addresses_testaddress(self, method, url, body,
+ headers):
+ body = self.fixtures.load('regions_us-central1_addresses_testaddress.json')
+ return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
+
def _regions_us_central1_forwardingRules(self, method, url, body, headers):
if method == 'POST':
body = self.fixtures.load(