You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by se...@apache.org on 2015/11/25 11:45:46 UTC
libcloud git commit: LIBCLOUD-590 - Reduce redundant API calls of
CloudStack compute driver's list_nodes method
Repository: libcloud
Updated Branches:
refs/heads/trunk 0e7454d2f -> 330c2563e
LIBCLOUD-590 - Reduce redundant API calls of CloudStack compute driver's list_nodes method
Signed-off-by: Sebastien Goasguen <ru...@gmail.com>
This closes #641
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/330c2563
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/330c2563
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/330c2563
Branch: refs/heads/trunk
Commit: 330c2563e306b501f0fc039d06ccfc7baf198ff5
Parents: 0e7454d
Author: Atsushi Sasaki <at...@gmail.com>
Authored: Mon Jun 30 23:26:48 2014 +0900
Committer: Sebastien Goasguen <ru...@gmail.com>
Committed: Wed Nov 25 11:45:10 2015 +0100
----------------------------------------------------------------------
CHANGES.rst | 4 ++++
libcloud/compute/drivers/cloudstack.py | 22 ++++++++++++--------
.../ktucloud/listIpForwardingRules_default.json | 1 +
libcloud/test/compute/test_cloudstack.py | 9 ++++++++
4 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/330c2563/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index 7d10c12..ac7e14d 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -70,6 +70,10 @@ Compute
[LIBCLOUD-771, GITHUB-635]
[Joel Reymont]
+- Reduce redundant API calls in CloudStack driver
+ [LIBCLOUD-590, GITHUB-641]
+ [Atsushi Sasaki]
+
Storage
~~~~~~~
http://git-wip-us.apache.org/repos/asf/libcloud/blob/330c2563/libcloud/compute/drivers/cloudstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/cloudstack.py b/libcloud/compute/drivers/cloudstack.py
index 73c316f..572c21d 100644
--- a/libcloud/compute/drivers/cloudstack.py
+++ b/libcloud/compute/drivers/cloudstack.py
@@ -1363,6 +1363,8 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
args['projectid'] = project.id
vms = self._sync_request('listVirtualMachines', params=args)
addrs = self._sync_request('listPublicIpAddresses', params=args)
+ port_forwarding_rules = self._sync_request('listPortForwardingRules')
+ ip_forwarding_rules = self._sync_request('listIpForwardingRules')
public_ips_map = {}
for addr in addrs.get('publicipaddress', []):
@@ -1380,14 +1382,15 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
public_ips = list(public_ips)
node = self._to_node(data=vm, public_ips=public_ips)
- addresses = public_ips_map.get(vm['id'], {}).items()
- addresses = [CloudStackAddress(node, v, k) for k, v in addresses]
+ addresses = public_ips_map.get(str(vm['id']), {}).items()
+ addresses = [CloudStackAddress(id=address_id, address=address,
+ driver=node.driver) for
+ address, address_id in addresses]
node.extra['ip_addresses'] = addresses
rules = []
for addr in addresses:
- result = self._sync_request('listIpForwardingRules')
- for r in result.get('ipforwardingrule', []):
+ for r in ip_forwarding_rules.get('ipforwardingrule', []):
if str(r['virtualmachineid']) == node.id:
rule = CloudStackIPForwardingRule(node, r['id'],
addr,
@@ -1399,12 +1402,13 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
node.extra['ip_forwarding_rules'] = rules
rules = []
- public_ips = self.ex_list_public_ips()
- result = self._sync_request('listPortForwardingRules')
- for r in result.get('portforwardingrule', []):
+ for r in port_forwarding_rules.get('portforwardingrule', []):
if str(r['virtualmachineid']) == node.id:
- addr = [a for a in public_ips if
- a.address == r['ipaddress']]
+ addr = [CloudStackAddress(id=a['id'],
+ address=a['ipaddress'],
+ driver=node.driver)
+ for a in addrs.get('publicipaddress', [])
+ if a['ipaddress'] == r['ipaddress']]
rule = CloudStackPortForwardingRule(node, r['id'],
addr[0],
r['protocol'].upper(),
http://git-wip-us.apache.org/repos/asf/libcloud/blob/330c2563/libcloud/test/compute/fixtures/ktucloud/listIpForwardingRules_default.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ktucloud/listIpForwardingRules_default.json b/libcloud/test/compute/fixtures/ktucloud/listIpForwardingRules_default.json
new file mode 100644
index 0000000..20fbc42
--- /dev/null
+++ b/libcloud/test/compute/fixtures/ktucloud/listIpForwardingRules_default.json
@@ -0,0 +1 @@
+{ "listipforwardingrulesresponse" : { "count":1 ,"ipforwardingrule" : [ {"id":"772fd410-6649-43ed-befa-77be986b8906","protocol":"tcp","virtualmachineid":"2600","virtualmachinename":"test","virtualmachinedisplayname":"test","ipaddressid":34000,"ipaddress":"1.1.1.116","startport":33,"endport":34,"state":"Active"} ] } }
http://git-wip-us.apache.org/repos/asf/libcloud/blob/330c2563/libcloud/test/compute/test_cloudstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_cloudstack.py b/libcloud/test/compute/test_cloudstack.py
index a0cb898..9f6b939 100644
--- a/libcloud/test/compute/test_cloudstack.py
+++ b/libcloud/test/compute/test_cloudstack.py
@@ -581,10 +581,19 @@ class CloudStackCommonTestCase(TestCaseMixin):
self.assertEqual(2, len(nodes))
self.assertEqual('test', nodes[0].name)
self.assertEqual('2600', nodes[0].id)
+ self.assertEqual(0, len(nodes[0].private_ips))
self.assertEqual([], nodes[0].extra['security_group'])
self.assertEqual(None, nodes[0].extra['key_name'])
self.assertEqual(1, len(nodes[0].public_ips))
self.assertEqual('1.1.1.116', nodes[0].public_ips[0])
+ self.assertEqual(1, len(nodes[0].extra['ip_addresses']))
+ self.assertEqual(34000, nodes[0].extra['ip_addresses'][0].id)
+ self.assertEqual(1, len(nodes[0].extra['ip_forwarding_rules']))
+ self.assertEqual('772fd410-6649-43ed-befa-77be986b8906',
+ nodes[0].extra['ip_forwarding_rules'][0].id)
+ self.assertEqual(1, len(nodes[0].extra['port_forwarding_rules']))
+ self.assertEqual('bc7ea3ee-a2c3-4b86-a53f-01bdaa1b2e32',
+ nodes[0].extra['port_forwarding_rules'][0].id)
def test_ex_get_node(self):
node = self.driver.ex_get_node(2600)