Add --project param to stack list in OSC plugin
This adds the --project parameter for the `stack list` command in the OSC plugin so that we can retrieve the stacks for a single project. Change-Id: Ia1a198526292f4f8a6bccaa6235755525230e73e
This commit is contained in:
@@ -2,3 +2,4 @@ openstackdocstheme>=2.2.1 # Apache-2.0
|
|||||||
reno>=3.1.0 # Apache-2.0
|
reno>=3.1.0 # Apache-2.0
|
||||||
sphinx>=2.0.0 # BSD
|
sphinx>=2.0.0 # BSD
|
||||||
sphinxcontrib-httpdomain>=1.3.0 # BSD
|
sphinxcontrib-httpdomain>=1.3.0 # BSD
|
||||||
|
python-openstackclient>=3.12.0 # Apache-2.0
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from openstackclient.identity import common as identity_common
|
||||||
from osc_lib.command import command
|
from osc_lib.command import command
|
||||||
from osc_lib import exceptions as exc
|
from osc_lib import exceptions as exc
|
||||||
from osc_lib import utils
|
from osc_lib import utils
|
||||||
@@ -521,6 +522,13 @@ class ListStack(command.Lister):
|
|||||||
'filter on multiple properties)'),
|
'filter on multiple properties)'),
|
||||||
action='append'
|
action='append'
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--project',
|
||||||
|
dest='project',
|
||||||
|
metavar='<project>',
|
||||||
|
help=_('Filter stacks by project (name or ID) (admin only)'),
|
||||||
|
)
|
||||||
|
identity_common.add_project_domain_option_to_parser(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--tags',
|
'--tags',
|
||||||
metavar='<tag1,tag2...>',
|
metavar='<tag1,tag2...>',
|
||||||
@@ -574,7 +582,16 @@ class ListStack(command.Lister):
|
|||||||
self.log.debug("take_action(%s)", parsed_args)
|
self.log.debug("take_action(%s)", parsed_args)
|
||||||
|
|
||||||
client = self.app.client_manager.orchestration
|
client = self.app.client_manager.orchestration
|
||||||
return _list(client, args=parsed_args)
|
identity_client = self.app.client_manager.identity
|
||||||
|
|
||||||
|
project_id = None
|
||||||
|
if parsed_args.project:
|
||||||
|
project_id = identity_common.find_project(
|
||||||
|
identity_client,
|
||||||
|
parsed_args.project,
|
||||||
|
parsed_args.project_domain).id
|
||||||
|
|
||||||
|
return _list(client, args=parsed_args, project_id=project_id)
|
||||||
|
|
||||||
|
|
||||||
class EnvironmentShowStack(format_utils.YamlFormat):
|
class EnvironmentShowStack(format_utils.YamlFormat):
|
||||||
@@ -638,7 +655,7 @@ class ListFileStack(format_utils.YamlFormat):
|
|||||||
return ['files'], [files]
|
return ['files'], [files]
|
||||||
|
|
||||||
|
|
||||||
def _list(client, args=None):
|
def _list(client, args=None, project_id=None):
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
columns = [
|
columns = [
|
||||||
'ID',
|
'ID',
|
||||||
@@ -687,6 +704,9 @@ def _list(client, args=None):
|
|||||||
if args.deleted:
|
if args.deleted:
|
||||||
columns.append('Deletion Time')
|
columns.append('Deletion Time')
|
||||||
|
|
||||||
|
if project_id:
|
||||||
|
kwargs['tenant'] = project_id
|
||||||
|
|
||||||
data = client.stacks.list(**kwargs)
|
data = client.stacks.list(**kwargs)
|
||||||
data = list(data)
|
data = list(data)
|
||||||
for stk in data:
|
for stk in data:
|
||||||
|
@@ -37,6 +37,8 @@ class TestStack(orchestration_fakes.TestOrchestrationv1):
|
|||||||
super(TestStack, self).setUp()
|
super(TestStack, self).setUp()
|
||||||
self.mock_client = self.app.client_manager.orchestration
|
self.mock_client = self.app.client_manager.orchestration
|
||||||
self.stack_client = self.app.client_manager.orchestration.stacks
|
self.stack_client = self.app.client_manager.orchestration.stacks
|
||||||
|
self.projects_mock = self.app.client_manager.identity.projects
|
||||||
|
self.projects_mock.reset_mock()
|
||||||
|
|
||||||
|
|
||||||
class TestStackCreate(TestStack):
|
class TestStackCreate(TestStack):
|
||||||
@@ -576,6 +578,19 @@ class TestStackList(TestStack):
|
|||||||
self.stack_client.list.assert_called_with(**kwargs)
|
self.stack_client.list.assert_called_with(**kwargs)
|
||||||
self.assertEqual(cols, columns)
|
self.assertEqual(cols, columns)
|
||||||
|
|
||||||
|
def test_stack_list_filter_project(self):
|
||||||
|
kwargs = copy.deepcopy(self.defaults)
|
||||||
|
project_id = '123456'
|
||||||
|
self.projects_mock.get.return_value = (
|
||||||
|
mock.MagicMock(id=project_id))
|
||||||
|
kwargs['tenant'] = project_id
|
||||||
|
arglist = ['--project', project_id]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, [])
|
||||||
|
|
||||||
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.stack_client.list.assert_called_with(**kwargs)
|
||||||
|
|
||||||
def test_stack_list_long(self):
|
def test_stack_list_long(self):
|
||||||
self.stack_client.list.return_value = [
|
self.stack_client.list.return_value = [
|
||||||
stacks.Stack(None, self.data_with_project)]
|
stacks.Stack(None, self.data_with_project)]
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Added ``--project`` filter to ``stack list`` command in the OSC plugin.
|
Reference in New Issue
Block a user