API and heat-cli rework to align with AWS CloudFormation API
Ref #115, rework API mapper to route by Action= query parameter, not by path, and align heat CLI tool with revised API. Signed-off-by: Steven Hardy <shardy@redhat.com>
This commit is contained in:
parent
0f1bd5d291
commit
26cc7efb4d
@ -19,8 +19,9 @@ import routes
|
||||
from heat.api.v1 import stacks
|
||||
from heat.common import wsgi
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
from webob import Request
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class API(wsgi.Router):
|
||||
|
||||
@ -28,6 +29,38 @@ class API(wsgi.Router):
|
||||
WSGI router for Heat v1 API requests.
|
||||
"""
|
||||
|
||||
def action_match(self, action, environ):
|
||||
|
||||
req = Request(environ)
|
||||
|
||||
env_action = req.GET.get("Action")
|
||||
|
||||
if action == env_action:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def action_ListStacks(self, environ, result):
|
||||
return self.action_match('ListStacks', environ)
|
||||
|
||||
def action_CreateStack(self, environ, result):
|
||||
return self.action_match('CreateStack', environ)
|
||||
|
||||
def action_DescribeStacks(self, environ, result):
|
||||
return self.action_match('DescribeStacks', environ)
|
||||
|
||||
def action_DeleteStack(self, environ, result):
|
||||
return self.action_match('DeleteStack', environ)
|
||||
|
||||
def action_UpdateStack(self, environ, result):
|
||||
return self.action_match('UpdateStack', environ)
|
||||
|
||||
def action_DescribeStackEvents(self, environ, result):
|
||||
return self.action_match('DescribeStackEvents', environ)
|
||||
|
||||
def action_ValidateTemplate(self, environ, result):
|
||||
return self.action_match('ValidateTemplate', environ)
|
||||
|
||||
def __init__(self, conf, **local_conf):
|
||||
self.conf = conf
|
||||
mapper = routes.Mapper()
|
||||
@ -35,24 +68,32 @@ class API(wsgi.Router):
|
||||
stacks_resource = stacks.create_resource(conf)
|
||||
|
||||
mapper.resource("stack", "stacks", controller=stacks_resource,
|
||||
collection={'detail': 'GET'})
|
||||
collection={'detail': 'GET'})
|
||||
|
||||
mapper.connect("/", controller=stacks_resource,
|
||||
action="list", conditions=dict(function=self.action_ListStacks))
|
||||
|
||||
mapper.connect("/", controller=stacks_resource,
|
||||
action="create", conditions=dict(function=self.action_CreateStack))
|
||||
|
||||
mapper.connect("/", controller=stacks_resource,
|
||||
action="describe",
|
||||
conditions=dict(function=self.action_DescribeStacks))
|
||||
|
||||
mapper.connect("/", controller=stacks_resource,
|
||||
action="delete", conditions=dict(function=self.action_DeleteStack))
|
||||
|
||||
mapper.connect("/", controller=stacks_resource,
|
||||
action="update", conditions=dict(function=self.action_UpdateStack))
|
||||
|
||||
mapper.connect("/", controller=stacks_resource,
|
||||
action="events_list",
|
||||
conditions=dict(function=self.action_DescribeStackEvents))
|
||||
|
||||
mapper.connect("/CreateStack", controller=stacks_resource,
|
||||
action="create", conditions=dict(method=["POST"]))
|
||||
mapper.connect("/", controller=stacks_resource,
|
||||
action="list", conditions=dict(method=["GET"]))
|
||||
mapper.connect("/ListStacks", controller=stacks_resource,
|
||||
action="list", conditions=dict(method=["GET"]))
|
||||
mapper.connect("/DescribeStacks", controller=stacks_resource,
|
||||
action="describe", conditions=dict(method=["GET"]))
|
||||
mapper.connect("/DeleteStack", controller=stacks_resource,
|
||||
action="delete", conditions=dict(method=["DELETE"]))
|
||||
mapper.connect("/UpdateStack", controller=stacks_resource,
|
||||
action="update", conditions=dict(method=["PUT"]))
|
||||
mapper.connect("/DescribeStackEvents", controller=stacks_resource,
|
||||
action="events_list", conditions=dict(method=["GET"]))
|
||||
mapper.connect("/ValidateTemplate", controller=stacks_resource,
|
||||
action="validate_template",
|
||||
conditions=dict(method=["GET"]))
|
||||
conditions=dict(function=self.action_ValidateTemplate))
|
||||
|
||||
mapper.connect("/", controller=stacks_resource, action="index")
|
||||
|
||||
super(API, self).__init__(mapper)
|
||||
|
@ -41,16 +41,18 @@ class V1Client(base_client.BaseClient):
|
||||
def list_stacks(self, **kwargs):
|
||||
params = self._extract_params(kwargs, SUPPORTED_PARAMS)
|
||||
self._insert_common_parameters(params)
|
||||
params['Action'] = "ListStacks"
|
||||
|
||||
res = self.do_request("GET", "/ListStacks", params=params)
|
||||
res = self.do_request("GET", "/", params=params)
|
||||
data = json.loads(res.read())
|
||||
return data
|
||||
|
||||
def describe_stacks(self, **kwargs):
|
||||
params = self._extract_params(kwargs, SUPPORTED_PARAMS)
|
||||
self._insert_common_parameters(params)
|
||||
params['Action'] = "DescribeStacks"
|
||||
|
||||
res = self.do_request("GET", "/DescribeStacks", params=params)
|
||||
res = self.do_request("GET", "/", params=params)
|
||||
data = json.loads(res.read())
|
||||
return data
|
||||
|
||||
@ -58,38 +60,45 @@ class V1Client(base_client.BaseClient):
|
||||
|
||||
params = self._extract_params(kwargs, SUPPORTED_PARAMS)
|
||||
self._insert_common_parameters(params)
|
||||
res = self.do_request("POST", "/CreateStack", params=params)
|
||||
params['Action'] = "CreateStack"
|
||||
|
||||
res = self.do_request("POST", "/", params=params)
|
||||
data = json.loads(res.read())
|
||||
return data
|
||||
|
||||
def update_stack(self, **kwargs):
|
||||
params = self._extract_params(kwargs, SUPPORTED_PARAMS)
|
||||
self._insert_common_parameters(params)
|
||||
res = self.do_request("PUT", "/UpdateStack", params=params)
|
||||
params['Action'] = "UpdateStack"
|
||||
|
||||
res = self.do_request("POST", "/", params=params)
|
||||
data = json.loads(res.read())
|
||||
return data
|
||||
|
||||
def delete_stack(self, **kwargs):
|
||||
params = self._extract_params(kwargs, SUPPORTED_PARAMS)
|
||||
self._insert_common_parameters(params)
|
||||
res = self.do_request("DELETE", "/DeleteStack", params=params)
|
||||
params['Action'] = "DeleteStack"
|
||||
|
||||
res = self.do_request("GET", "/", params=params)
|
||||
data = json.loads(res.read())
|
||||
return data
|
||||
|
||||
def list_stack_events(self, **kwargs):
|
||||
params = self._extract_params(kwargs, SUPPORTED_PARAMS)
|
||||
self._insert_common_parameters(params)
|
||||
params['Action'] = "DescribeStackEvents"
|
||||
|
||||
res = self.do_request("GET", "/DescribeStackEvents", params=params)
|
||||
res = self.do_request("GET", "/", params=params)
|
||||
data = json.loads(res.read())
|
||||
return data
|
||||
|
||||
def validate_template(self, **kwargs):
|
||||
params = self._extract_params(kwargs, SUPPORTED_PARAMS)
|
||||
self._insert_common_parameters(params)
|
||||
params['Action'] = "ValidateTemplate"
|
||||
|
||||
res = self.do_request("GET", "/ValidateTemplate", params=params)
|
||||
res = self.do_request("GET", "/", params=params)
|
||||
data = json.loads(res.read())
|
||||
return data
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user