Repository: libcloud
Updated Branches:
  refs/heads/trunk 3d2a38db9 -> 784e7beb0


LIBCLOUD-593: CloudStack driver's create_node fails to join network_id when 
network_id is int

Closes #336

Signed-off-by: Sebastien Goasguen <run...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/784e7beb
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/784e7beb
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/784e7beb

Branch: refs/heads/trunk
Commit: 784e7beb05df95fe6d85c9a0720c8234670229d4
Parents: 3d2a38d
Author: Atsushi Sasaki <atsak...@gmail.com>
Authored: Sat Jul 5 19:55:22 2014 +0900
Committer: Sebastien Goasguen <run...@gmail.com>
Committed: Sun Jul 13 11:05:30 2014 -0400

----------------------------------------------------------------------
 libcloud/compute/drivers/cloudstack.py          |  2 +-
 .../deployVirtualMachine_deploynetworks.json    |  1 +
 .../cloudstack/listNetworks_deploynetworks.json |  1 +
 .../listServiceOfferings_deploynetworks.json    |  1 +
 .../listTemplates_deploynetworks.json           |  1 +
 .../cloudstack/listZones_deploynetworks.json    |  1 +
 .../cloudstack/queryAsyncJobResult_1149366.json |  1 +
 libcloud/test/compute/test_cloudstack.py        | 20 ++++++++++++++++++++
 8 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/compute/drivers/cloudstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/cloudstack.py 
b/libcloud/compute/drivers/cloudstack.py
index 089e3f0..6f60afe 100644
--- a/libcloud/compute/drivers/cloudstack.py
+++ b/libcloud/compute/drivers/cloudstack.py
@@ -801,7 +801,7 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, 
NodeDriver):
             server_params['zoneid'] = self.list_locations()[0].id
 
         if networks:
-            networks = ','.join([network.id for network in networks])
+            networks = ','.join([str(network.id) for network in networks])
             server_params['networkids'] = networks
 
         if project:

http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/test/compute/fixtures/cloudstack/deployVirtualMachine_deploynetworks.json
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/cloudstack/deployVirtualMachine_deploynetworks.json
 
b/libcloud/test/compute/fixtures/cloudstack/deployVirtualMachine_deploynetworks.json
new file mode 100644
index 0000000..166e89b
--- /dev/null
+++ 
b/libcloud/test/compute/fixtures/cloudstack/deployVirtualMachine_deploynetworks.json
@@ -0,0 +1 @@
+{ "deployvirtualmachineresponse" : {"jobid":1149366,"id":65385} }

http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/test/compute/fixtures/cloudstack/listNetworks_deploynetworks.json
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/cloudstack/listNetworks_deploynetworks.json 
b/libcloud/test/compute/fixtures/cloudstack/listNetworks_deploynetworks.json
new file mode 100644
index 0000000..ad0bb80
--- /dev/null
+++ b/libcloud/test/compute/fixtures/cloudstack/listNetworks_deploynetworks.json
@@ -0,0 +1 @@
+{"listnetworksresponse": { "count": 3, "network": [ { "broadcastdomaintype": 
"Vlan", "broadcasturi": "vlan://1002", "displaytext": "network:192.168.2.0/24", 
"dns1": "8.8.8.8", "dns2": "8.8.8.8", "domain": "ROOT", "domainid": 1623, 
"endip": "192.168.2.233", "gateway": "192.168.2.254", "id": 1823, "isdefault": 
false, "isshared": true, "issystem": false, "name": "ROOT", "netmask": 
"255.255.255.0", "networkdomain": "cs1cloud.internal", 
"networkofferingavailability": "Optional", "networkofferingdisplaytext": 
"Direct", "networkofferingid": 7, "networkofferingname": 
"DefaultDirectNetworkOffering", "related": 1823, "securitygroupenabled": false, 
"service": [ { "name": "UserData" }, { "capability": [ { "name": 
"AllowDnsSuffixModification", "value": "true" } ], "name": "Dns" }, { 
"capability": [ { "name": "SupportedProtocols", "value": "tcp, udp" }, { 
"name": "SupportedLbAlgorithms", "value": "roundrobin,leastconn,source" } ], 
"name": "Lb" }, { "name": "Dhcp" } ], "startip": "192.168.2.1", "s
 tate": "Setup", "traffictype": "Guest", "type": "Direct", "vlan": "1002", 
"zoneid": 1 }, { "account": "testuser", "broadcastdomaintype": "Vlan", 
"broadcasturi": "vlan://2909", "displaytext": "testuser-network", "dns1": 
"8.8.8.8", "dns2": "8.8.8.8", "domain": "ROOT", "domainid": 1623, "id": 1547, 
"isdefault": true, "isshared": false, "issystem": false, "name": 
"testuser-network", "networkdomain": "cs586cloud.internal", 
"networkofferingavailability": "Optional", "networkofferingdisplaytext": 
"Virtual Vlan", "networkofferingid": 6, "networkofferingname": 
"DefaultVirtualizedNetworkOffering", "related": 1547, "securitygroupenabled": 
false, "service": [ { "name": "UserData" }, { "capability": [ { "name": 
"AllowDnsSuffixModification", "value": "true" } ], "name": "Dns" }, { 
"capability": [ { "name": "SupportedProtocols", "value": "tcp, udp" }, { 
"name": "SupportedLbAlgorithms", "value": "roundrobin,leastconn,source" } ], 
"name": "Lb" }, { "name": "Gateway" }, { "name": "Dhcp" }, { "capabil
 ity": [ { "name": "SupportedVpnTypes", "value": "pptp,l2tp,ipsec" } ], "name": 
"Vpn" }, { "capability": [ { "name": "MultipleIps", "value": "true" }, { 
"name": "SupportedSourceNatTypes", "value": "per account" }, { "name": 
"SupportedProtocols", "value": "tcp,udp,icmp" }, { "name": "TrafficStatistics", 
"value": "per public ip" }, { "name": "PortForwarding", "value": "true" }, { 
"name": "StaticNat", "value": "true" } ], "name": "Firewall" } ], "state": 
"Implemented", "traffictype": "Guest", "type": "Virtual", "zoneid": 2 }, { 
"account": "testuser", "broadcastdomaintype": "Vlan", "broadcasturi": 
"vlan://3564", "displaytext": "testuser-network", "dns1": "8.8.8.8", "dns2": 
"8.8.8.8", "domain": "ROOT", "domainid": 1623, "id": 1374, "isdefault": true, 
"isshared": false, "issystem": false, "name": "testuser-network", 
"networkdomain": "cs586cloud.internal", "networkofferingavailability": 
"Optional", "networkofferingdisplaytext": "Virtual Vlan", "networkofferingid": 
6, "networkofferingname": 
 "DefaultVirtualizedNetworkOffering", "related": 1374, "securitygroupenabled": 
false, "service": [ { "name": "UserData" }, { "capability": [ { "name": 
"AllowDnsSuffixModification", "value": "true" } ], "name": "Dns" }, { 
"capability": [ { "name": "SupportedProtocols", "value": "tcp, udp" }, { 
"name": "SupportedLbAlgorithms", "value": "roundrobin,leastconn,source" } ], 
"name": "Lb" }, { "name": "Gateway" }, { "name": "Dhcp" }, { "capability": [ { 
"name": "SupportedVpnTypes", "value": "pptp,l2tp,ipsec" } ], "name": "Vpn" }, { 
"capability": [ { "name": "MultipleIps", "value": "true" }, { "name": 
"SupportedSourceNatTypes", "value": "per account" }, { "name": 
"SupportedProtocols", "value": "tcp,udp,icmp" }, { "name": "TrafficStatistics", 
"value": "per public ip" }, { "name": "PortForwarding", "value": "true" }, { 
"name": "StaticNat", "value": "true" } ], "name": "Firewall" } ], "state": 
"Implemented", "traffictype": "Guest", "type": "Virtual", "zoneid": 1 } ] } }

http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/test/compute/fixtures/cloudstack/listServiceOfferings_deploynetworks.json
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/cloudstack/listServiceOfferings_deploynetworks.json
 
b/libcloud/test/compute/fixtures/cloudstack/listServiceOfferings_deploynetworks.json
new file mode 100644
index 0000000..944a6f2
--- /dev/null
+++ 
b/libcloud/test/compute/fixtures/cloudstack/listServiceOfferings_deploynetworks.json
@@ -0,0 +1 @@
+{ "listserviceofferingsresponse" : {"count": 3, "serviceoffering": [ 
{"cpunumber": 2, "cpuspeed": 1600, "created": "2011-09-09T13:14:19+0900", 
"defaultuse": false, "displaytext": "M4", "id": 21, "issystem": false, 
"limitcpuuse": true, "memory": 4096, "name": "M4", "networkrate": 500, 
"offerha": false, "storagetype": "shared", "tags": "Shared.auto"}, 
{"cpunumber": 1, "cpuspeed": 800, "created": "2011-09-09T13:17:52+0900", 
"defaultuse": false, "displaytext": "XS", "id": 24, "issystem": false, 
"limitcpuuse": true, "memory": 512, "name": "XS", "networkrate": 100, 
"offerha": false, "storagetype": "shared", "tags": "Shared.auto"}, 
{"cpunumber": 1, "cpuspeed": 1600, "created": "2011-09-14T22:51:23+0900", 
"defaultuse": false, "displaytext": "S2", "id": 30, "issystem": false, 
"limitcpuuse": true, "memory": 2048, "name": "S2", "networkrate": 500, 
"offerha": false, "storagetype": "shared", "tags": "Shared.auto"}]}}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/test/compute/fixtures/cloudstack/listTemplates_deploynetworks.json
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/cloudstack/listTemplates_deploynetworks.json 
b/libcloud/test/compute/fixtures/cloudstack/listTemplates_deploynetworks.json
new file mode 100644
index 0000000..a9c778c
--- /dev/null
+++ 
b/libcloud/test/compute/fixtures/cloudstack/listTemplates_deploynetworks.json
@@ -0,0 +1 @@
+{ "listtemplatesresponse" : {"count": 2, "template": [ {"account": "admin", 
"created": "2014-06-06T20:08:49+0900", "crossZones": false, "displaytext": 
"CentOS 6.5", "domain": "ROOT", "domainid": 1, "format": "OVA", "hypervisor": 
"VMware", "id": 8028, "isextractable": true, "isfeatured": true, "ispublic": 
true, "isready": true, "name": "CentOS 6.5 64-bit", "ostypeid": 112, 
"ostypename": "CentOS 5.5 (64-bit)", "passwordenabled": true, "size": 
16106127360, "status": "Download Complete", "templatetype": "USER", "zoneid": 
2, "zonename": "zone2"}, {"account": "admin", "created": 
"2014-06-06T20:08:48+0900", "crossZones": false, "displaytext": "CentOS 6.5", 
"domain": "ROOT", "domainid": 1, "format": "OVA", "hypervisor": "VMware", "id": 
8028, "isextractable": true, "isfeatured": true, "ispublic": true, "isready": 
true, "name": "CentOS 6.5 64-bit", "ostypeid": 112, "ostypename": "CentOS 5.5 
(64-bit)", "passwordenabled": true, "size": 16106127360, "status": "Download 
Complete", "templatetype":
  "USER", "zoneid": 1, "zonename": "zone1"} ]} }

http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/test/compute/fixtures/cloudstack/listZones_deploynetworks.json
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/cloudstack/listZones_deploynetworks.json 
b/libcloud/test/compute/fixtures/cloudstack/listZones_deploynetworks.json
new file mode 100644
index 0000000..b072749
--- /dev/null
+++ b/libcloud/test/compute/fixtures/cloudstack/listZones_deploynetworks.json
@@ -0,0 +1 @@
+{ "listzonesresponse" : { "count":2 ,"zone" : [  
{"id":1,"name":"zone1","networktype":"Advanced","securitygroupsenabled":false,"allocationstate":"Enabled","zonetoken":"6a3bfa26-67cd-3ff2-867e-20e86b211bb1","dhcpprovider":"VirtualRouter"},
 
{"id":2,"name":"zone2","networktype":"Advanced","securitygroupsenabled":false,"allocationstate":"Enabled","zonetoken":"8366e550-542d-373d-88e3-ca7c90bc8e6c","dhcpprovider":"VirtualRouter"}
 ] } }

http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_1149366.json
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_1149366.json 
b/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_1149366.json
new file mode 100644
index 0000000..f3854d3
--- /dev/null
+++ b/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_1149366.json
@@ -0,0 +1 @@
+{ "queryasyncjobresultresponse" : {"jobid": 1149366, "jobprocstatus": 0, 
"jobresult": {"virtualmachine": {"account": "testuser", "cpunumber": 2, 
"cpuspeed": 1600, "created": "2014-07-06T16:40:39+0900", "displayname": 
"deploynetworks", "domain": "ROOT", "domainid": 1623, "guestosid": 112, 
"haenable": false, "hypervisor": "VMware", "id": 65385, "memory": 4096, "name": 
"deploynetworks", "nic": [{"gateway": "10.1.0.1", "id": 87320, "ipaddress": 
"10.1.0.29", "isdefault": true, "macaddress": "02:00:78:4a:01:9e", "netmask": 
"255.255.252.0", "networkid": 1374, "traffictype": "Guest", "type": "Virtual"}, 
{"gateway": "192.168.2.254", "id": 87319, "ipaddress": "192.168.2.55", 
"isdefault": false, "macaddress": "06:e6:50:00:70:0e", "netmask": 
"255.255.255.0", "networkid": 1823, "traffictype": "Guest", "type": "Direct"}], 
"password": "password", "passwordenabled": true, "rootdeviceid": 0, 
"rootdevicetype": "VMFS", "securitygroup": [], "serviceofferingid": 21, 
"serviceofferingname": "M4", "state":
  "Running" , "templatedisplaytext": "CentOS 6.5", "templateid": 8028, 
"templatename": "CentOS 6.5 64-bit", "zoneid": 1, "zonename": "zone1"}}, 
"jobresultcode": 0, "jobresulttype": "object", "jobstatus": 1} }

http://git-wip-us.apache.org/repos/asf/libcloud/blob/784e7beb/libcloud/test/compute/test_cloudstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_cloudstack.py 
b/libcloud/test/compute/test_cloudstack.py
index 091d98b..b8bb279 100644
--- a/libcloud/test/compute/test_cloudstack.py
+++ b/libcloud/test/compute/test_cloudstack.py
@@ -107,6 +107,26 @@ class CloudStackCommonTestCase(TestCaseMixin):
         self.assertEqual(node.private_ips, ['192.168.1.2'])
         self.assertEqual(node.extra['zone_id'], default_location.id)
 
+    def test_create_node_ex_networks(self):
+        CloudStackMockHttp.fixture_tag = 'deploynetworks'
+        size = self.driver.list_sizes()[0]
+        image = self.driver.list_images()[0]
+        location = self.driver.list_locations()[0]
+
+        networks = [nw for nw in self.driver.ex_list_networks()
+                    if str(nw.zoneid) == str(location.id)]
+
+        node = self.driver.create_node(name='deploynetworks',
+                                       location=location,
+                                       image=image,
+                                       size=size,
+                                       networks=networks)
+        self.assertEqual(node.name, 'deploynetworks')
+        self.assertEqual(node.extra['size_id'], size.id)
+        self.assertEqual(node.extra['zone_id'], location.id)
+        self.assertEqual(node.extra['image_id'], image.id)
+        self.assertEqual(len(node.private_ips), 2)
+
     def test_create_node_ex_security_groups(self):
         size = self.driver.list_sizes()[0]
         image = self.driver.list_images()[0]

Reply via email to