You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2012/08/10 19:20:05 UTC

git commit: Fix the path for the API server endpoint. RB: https://reviews.apache.org/r/6513/

Updated Branches:
  refs/heads/master b9e1cb640 -> 81727ad18


Fix the path for the API server endpoint.
RB: https://reviews.apache.org/r/6513/

Signed-off-by: Tomoe Sugihara <to...@midokura.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/81727ad1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/81727ad1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/81727ad1

Branch: refs/heads/master
Commit: 81727ad18dd24d768cb6359c3d38e33e583391f1
Parents: b9e1cb6
Author: Edison Su <di...@gmail.com>
Authored: Fri Aug 10 10:17:54 2012 -0700
Committer: Edison Su <di...@gmail.com>
Committed: Fri Aug 10 10:17:54 2012 -0700

----------------------------------------------------------------------
 cloud-cli/cloudapis/cloud.py |   56 ++++++++++++++++++------------------
 1 files changed, 28 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/81727ad1/cloud-cli/cloudapis/cloud.py
----------------------------------------------------------------------
diff --git a/cloud-cli/cloudapis/cloud.py b/cloud-cli/cloudapis/cloud.py
index 34b3413..1ee9806 100644
--- a/cloud-cli/cloudapis/cloud.py
+++ b/cloud-cli/cloudapis/cloud.py
@@ -5,9 +5,9 @@
 # to you under the Apache License, Version 2.0 (the
 # "License"); you may not use this file except in compliance
 # with the License.  You may obtain a copy of the License at
-# 
+#
 #   http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing,
 # software distributed under the License is distributed on an
 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
- 
+
 
 '''Implements the CloudStack API'''
 
@@ -32,7 +32,7 @@ import hashlib
 import httplib
 
 class CloudAPI:
-    
+
     @describe("server", "Management Server host name or address")
     @describe("apikey", "Management Server apiKey")
     @describe("securitykey", "Management Server securityKey")
@@ -46,14 +46,14 @@ class CloudAPI:
             securityKey=None
             ):
         self.__dict__.update(locals())
-        
+
     def _make_request_with_keys(self,command,requests={}):
         requests["command"] = command
         requests["apiKey"] = self.apiKey
         requests["response"] = "xml"
         requests = zip(requests.keys(), requests.values())
         requests.sort(key=lambda x: str.lower(x[0]))
-        
+
         requestUrl = "&".join(["=".join([request[0], urllib.quote_plus(str(request[1]))]) for request in requests])
         hashStr = "&".join(["=".join([str.lower(request[0]), urllib.quote_plus(str.lower(str(request[1])))]) for request in requests])
 
@@ -70,7 +70,7 @@ class CloudAPI:
         requests["response"] = self.responseformat
         requests = zip(requests.keys(), requests.values())
         requests.sort(key=lambda x: str.lower(x[0]))
-        
+
         requestUrl = "&".join(["=".join([request[0], urllib.quote_plus(str(request[1]))]) for request in requests])
         hashStr = "&".join(["=".join([str.lower(request[0]), urllib.quote_plus(str.lower(str(request[1])))]) for request in requests])
 
@@ -80,7 +80,7 @@ class CloudAPI:
 
         self.connection.request("GET", "/client/api?%s"%requestUrl)
         return self.connection.getresponse().read()
- 
+
     def _make_request(self,command,parameters=None):
 
         '''Command is a string, parameters is a dictionary'''
@@ -90,9 +90,9 @@ class CloudAPI:
         else:
             host = self.server
             port = 8096
-        
-        url = "http://" + self.server + "/?"
-        
+
+        url = "http://" + self.server + "/client/api?"
+
         if not parameters: parameters = {}
         if self.apiKey is not None and self.securityKey is not None:
             return self._make_request_with_auth(command, parameters)
@@ -102,7 +102,7 @@ class CloudAPI:
             querystring = urllib.urlencode(parameters)
 
         url += querystring
-        
+
         f = urllib2.urlopen(url)
         data = f.read()
         if self.stripxml == "true":
@@ -119,51 +119,51 @@ class CloudAPI:
 
 def load_dynamic_methods():
     '''creates smart function objects for every method in the commands.xml file'''
-    
+
     def getText(nodelist):
         rc = []
         for node in nodelist:
             if node.nodeType == node.TEXT_NODE: rc.append(node.data)
         return ''.join(rc)
-    
+
     # FIXME figure out installation and packaging
     xmlfile = os.path.join("/etc/cloud/cli/","commands.xml")
     dom = xml.dom.minidom.parse(xmlfile)
-    
+
     for cmd in dom.getElementsByTagName("command"):
         name = getText(cmd.getElementsByTagName('name')[0].childNodes).strip()
         assert name
-        
+
         description = getText(cmd.getElementsByTagName('description')[0].childNodes).strip()
-        if description: 
+        if description:
                     description = '"""%s"""' % description
         else: description = ''
         arguments = []
         options = []
         descriptions = []
-    
+
         for param in cmd.getElementsByTagName("request")[0].getElementsByTagName("arg"):
             argname = getText(param.getElementsByTagName('name')[0].childNodes).strip()
             assert argname
-            
+
             required = getText(param.getElementsByTagName('required')[0].childNodes).strip()
             if required == 'true': required = True
             elif required == 'false': required = False
             else: raise AssertionError, "Not reached"
             if required: arguments.append(argname)
             options.append(argname)
-            
+
                         #import ipdb; ipdb.set_trace()
             requestDescription = param.getElementsByTagName('description')
-            if requestDescription:          
+            if requestDescription:
                 descriptionParam = getText(requestDescription[0].childNodes)
-            else: 
+            else:
                 descriptionParam = ''
             if descriptionParam: descriptions.append( (argname,descriptionParam) )
-        
+
         funcparams = ["self"] + [ "%s=None"%o for o in options ]
         funcparams = ", ".join(funcparams)
-        
+
         code = """
         def %s(%s):
             %s
@@ -171,7 +171,7 @@ def load_dynamic_methods():
             del parms["self"]
             for arg in %r:
                 if locals()[arg] is None:
-                    raise TypeError, "%%s is a required option"%%arg 
+                    raise TypeError, "%%s is a required option"%%arg
             for k,v in parms.items():
                 if v is None: del parms[k]
             output = self._make_request("%s",parms)
@@ -180,15 +180,15 @@ def load_dynamic_methods():
 
         namespace = {}
         exec code.strip() in namespace
-        
+
         func = namespace[name]
         for argname,description in descriptions:
             func = describe(argname,description)(func)
-        
+
         yield (name,func)
 
 
-for name,meth in load_dynamic_methods(): 
+for name,meth in load_dynamic_methods():
     setattr(CloudAPI, name, meth)
 
 implementor = CloudAPI