Enable filters for heat resource-type-list
Adds filtering support for resource-type-list based on resource type's name, version and support_status Depends-On: I7500d5c56ce252bf8c0a9ae7a188a8cb25e643ce implements blueprint heat-resource-type-search DocImpact Change-Id: I0029b90dcdce69fc27a6f511db795faad237dc94
This commit is contained in:

committed by
Kanagaraj Manickam

parent
4804dce0b4
commit
5447278fc6
@@ -70,6 +70,28 @@ class ResourceTypeManagerTest(testtools.TestCase):
|
||||
manager = resource_types.ResourceTypeManager(FakeClient())
|
||||
manager.list()
|
||||
|
||||
def test_list_types_with_filters(self):
|
||||
filters = {'name': 'OS::Keystone::*',
|
||||
'version': '5.0.0',
|
||||
'support_status': 'SUPPORTED'}
|
||||
|
||||
manager = resource_types.ResourceTypeManager(None)
|
||||
with mock.patch.object(manager, '_list') as mock_list:
|
||||
mock_list.return_value = None
|
||||
manager.list(filters=filters)
|
||||
self.assertEqual(1, mock_list.call_count)
|
||||
url, param = mock_list.call_args[0]
|
||||
self.assertEqual("resource_types", param)
|
||||
base_url, query_params = utils.parse_query_url(url)
|
||||
self.assertEqual('/%s' % manager.KEY, base_url)
|
||||
# parameters in query_params is in list format, so filter params
|
||||
# are made to be inline with it
|
||||
filters_params = {}
|
||||
for item in filters:
|
||||
filters_params[item] = [filters[item]]
|
||||
|
||||
self.assertEqual(filters_params, query_params)
|
||||
|
||||
@mock.patch.object(utils, 'get_response_body')
|
||||
def test_get(self, mock_utils):
|
||||
key = 'resource_types'
|
||||
|
@@ -31,26 +31,37 @@ class ResourceType(base.Resource):
|
||||
|
||||
class ResourceTypeManager(base.BaseManager):
|
||||
resource_class = ResourceType
|
||||
KEY = 'resource_types'
|
||||
|
||||
def list(self):
|
||||
def list(self, **kwargs):
|
||||
"""Get a list of resource types.
|
||||
:rtype: list of :class:`ResourceType`
|
||||
"""
|
||||
return self._list('/resource_types', 'resource_types')
|
||||
|
||||
url = '/%s' % self.KEY
|
||||
params = {}
|
||||
if 'filters' in kwargs:
|
||||
filters = kwargs.pop('filters')
|
||||
params.update(filters)
|
||||
url += '?%s' % parse.urlencode(params, True)
|
||||
|
||||
return self._list(url, self.KEY)
|
||||
|
||||
def get(self, resource_type):
|
||||
"""Get the details for a specific resource_type.
|
||||
|
||||
:param resource_type: name of the resource type to get the details for
|
||||
"""
|
||||
url_str = '/resource_types/%s' % (
|
||||
url_str = '/%s/%s' % (
|
||||
self.KEY,
|
||||
parse.quote(encodeutils.safe_encode(resource_type), ''))
|
||||
resp = self.client.get(url_str)
|
||||
body = utils.get_response_body(resp)
|
||||
return body
|
||||
|
||||
def generate_template(self, resource_type, template_type='cfn'):
|
||||
url_str = '/resource_types/%s/template' % (
|
||||
url_str = '/%s/%s/template' % (
|
||||
self.KEY,
|
||||
parse.quote(encodeutils.safe_encode(resource_type), ''))
|
||||
if template_type:
|
||||
url_str += '?%s' % parse.urlencode(
|
||||
|
@@ -641,9 +641,16 @@ def do_output_show(hc, args):
|
||||
print(value)
|
||||
|
||||
|
||||
@utils.arg('-f', '--filters', metavar='<KEY1=VALUE1;KEY2=VALUE2...>',
|
||||
help=_('Filter parameters to apply on returned resource types. '
|
||||
'This can be specified multiple times, or once with parameters '
|
||||
'separated by a semicolon. It can be any of name, version and '
|
||||
'support_status'),
|
||||
action='append')
|
||||
def do_resource_type_list(hc, args):
|
||||
'''List the available resource types.'''
|
||||
types = hc.resource_types.list()
|
||||
types = hc.resource_types.list(
|
||||
filters=utils.format_parameters(args.filters))
|
||||
utils.print_list(types, ['resource_type'], sortby_index=0)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user