Adds --filter to search for resources

openstack resource list --filter

implements blueprint heat-support-python-openstackclient
implements blueprint heat-stack-resource-search

Change-Id: I9ca33a0743bfad88190509351e8aca08ce7d2c0f
This commit is contained in:
Kanagaraj Manickam 2016-02-19 11:04:04 +05:30
parent 413b5f2dbd
commit 79742a3d67
3 changed files with 50 additions and 15 deletions

View File

@ -97,8 +97,16 @@ class ResourceList(lister.Lister):
type=int,
help=_('Depth of nested stacks from which to display resources')
)
# TODO(jonesbr):
# Add --filter once https://review.openstack.org/#/c/257864/ is merged
parser.add_argument(
'--filter',
metavar='<key=value>',
action='append',
help=_('Filter parameters to apply on returned resources based on '
'their name, status, type, action, id and '
'physcial_resource_id')
)
return parser
def take_action(self, parsed_args):
@ -109,6 +117,7 @@ class ResourceList(lister.Lister):
fields = {
'nested_depth': parsed_args.nested_depth,
'with_detail': parsed_args.long,
'filters': heat_utils.format_parameters(parsed_args.filter),
}
try:

View File

@ -17,7 +17,7 @@ import mock
from openstackclient.common import exceptions as exc
from heatclient import exc as heat_exc
from heatclient.osc.v1 import resources
from heatclient.osc.v1 import resource
from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes
from heatclient.v1 import resources as v1_resources
@ -50,7 +50,7 @@ class TestStackResourceShow(TestResource):
def setUp(self):
super(TestStackResourceShow, self).setUp()
self.cmd = resources.ResourceShow(self.app, None)
self.cmd = resource.ResourceShow(self.app, None)
self.resource_client.get = mock.MagicMock(
return_value=v1_resources.Resource(None, self.response))
@ -118,7 +118,7 @@ class TestStackResourceList(TestResource):
def setUp(self):
super(TestStackResourceList, self).setUp()
self.cmd = resources.ResourceList(self.app, None)
self.cmd = resource.ResourceList(self.app, None)
self.resource_client.list = mock.MagicMock(
return_value=[v1_resources.Resource(None, self.response)])
@ -129,7 +129,10 @@ class TestStackResourceList(TestResource):
columns, data = self.cmd.take_action(parsed_args)
self.resource_client.list.assert_called_with(
'my_stack', with_detail=False, nested_depth=None)
'my_stack',
filters={},
with_detail=False,
nested_depth=None)
self.assertEqual(self.columns, columns)
self.assertEqual(tuple(self.data), list(data)[0])
@ -151,7 +154,10 @@ class TestStackResourceList(TestResource):
columns, data = self.cmd.take_action(parsed_args)
self.resource_client.list.assert_called_with(
'my_stack', with_detail=True, nested_depth=None)
'my_stack',
filters={},
with_detail=True,
nested_depth=None)
self.assertEqual(cols, columns)
self.assertEqual(tuple(out), list(data)[0])
@ -166,7 +172,10 @@ class TestStackResourceList(TestResource):
columns, data = self.cmd.take_action(parsed_args)
self.resource_client.list.assert_called_with(
'my_stack', with_detail=False, nested_depth=3)
'my_stack',
filters={},
with_detail=False,
nested_depth=3)
self.assertEqual(cols, columns)
self.assertEqual(tuple(out), list(data)[0])
@ -185,15 +194,32 @@ class TestStackResourceList(TestResource):
columns, data = self.cmd.take_action(parsed_args)
self.resource_client.list.assert_called_with(
'my_stack', with_detail=False, nested_depth=None)
'my_stack',
filters={},
with_detail=False,
nested_depth=None)
self.assertEqual(cols, columns)
def test_resource_list_filter(self):
arglist = ['my_stack', '--filter', 'name=my_resource']
out = copy.deepcopy(self.data)
parsed_args = self.check_parser(self.cmd, arglist, [])
columns, data = self.cmd.take_action(parsed_args)
self.resource_client.list.assert_called_with(
'my_stack',
filters=dict(name='my_resource'),
with_detail=False,
nested_depth=None)
self.assertEqual(tuple(out), list(data)[0])
class TestResourceMetadata(TestResource):
def setUp(self):
super(TestResourceMetadata, self).setUp()
self.cmd = resources.ResourceMetadata(self.app, None)
self.cmd = resource.ResourceMetadata(self.app, None)
self.resource_client.metadata = mock.Mock(return_value={})
def test_resource_metadata(self):
@ -230,7 +256,7 @@ class TestResourceSignal(TestResource):
def setUp(self):
super(TestResourceSignal, self).setUp()
self.cmd = resources.ResourceSignal(self.app, None)
self.cmd = resource.ResourceSignal(self.app, None)
self.resource_client.signal = mock.Mock()
def test_resource_signal(self):

View File

@ -53,10 +53,10 @@ openstack.orchestration.v1 =
stack_list = heatclient.osc.v1.stack:ListStack
stack_output_list = heatclient.osc.v1.stack:OutputListStack
stack_output_show = heatclient.osc.v1.stack:OutputShowStack
stack_resource_list = heatclient.osc.v1.resources:ResourceList
stack_resource_metadata = heatclient.osc.v1.resources:ResourceMetadata
stack_resource_show = heatclient.osc.v1.resources:ResourceShow
stack_resource_signal = heatclient.osc.v1.resources:ResourceSignal
stack_resource_list = heatclient.osc.v1.resource:ResourceList
stack_resource_metadata = heatclient.osc.v1.resource:ResourceMetadata
stack_resource_show = heatclient.osc.v1.resource:ResourceShow
stack_resource_signal = heatclient.osc.v1.resource:ResourceSignal
stack_resume = heatclient.osc.v1.stack:ResumeStack
stack_show = heatclient.osc.v1.stack:ShowStack
stack_snapshot_create = heatclient.osc.v1.snapshot:CreateSnapshot