diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-02-03 16:36:12 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-02-03 16:36:12 +0000 |
commit | dd271d8924cfafdbbffca0a0c4d5551cc5dc7d06 (patch) | |
tree | 76c65bdfe4627df47742417b55843cf74258aeaa | |
parent | 47bb63fc7f98a8955307f02936e88979c163cbfb (diff) | |
parent | c5841cb6242502af94964a1189fe8fb2060327a5 (diff) | |
download | python-heatclient-dd271d8924cfafdbbffca0a0c4d5551cc5dc7d06.tar.gz |
Merge "Add OpenstackClient plugin for software deployment list"
-rw-r--r-- | heatclient/osc/v1/software_deployment.py | 43 | ||||
-rw-r--r-- | heatclient/tests/unit/osc/v1/test_software_deployment.py | 64 | ||||
-rw-r--r-- | setup.cfg | 1 |
3 files changed, 108 insertions, 0 deletions
diff --git a/heatclient/osc/v1/software_deployment.py b/heatclient/osc/v1/software_deployment.py index c8183cc..a0259ba 100644 --- a/heatclient/osc/v1/software_deployment.py +++ b/heatclient/osc/v1/software_deployment.py @@ -16,7 +16,10 @@ import logging from cliff import command +from cliff import lister + from openstackclient.common import exceptions as exc +from openstackclient.common import utils from heatclient import exc as heat_exc from heatclient.openstack.common._i18n import _ @@ -69,3 +72,43 @@ class DeleteDeployment(command.Command): '%(total)s deployments.') % {'count': failure_count, 'total': len(parsed_args.id)}) + + +class ListDeployment(lister.Lister): + """List software deployments.""" + + log = logging.getLogger(__name__ + '.ListDeployment') + + def get_parser(self, prog_name): + parser = super(ListDeployment, self).get_parser(prog_name) + parser.add_argument( + '--server', + metavar='<SERVER>', + help=_('ID of the server to fetch deployments for') + ) + parser.add_argument( + '--long', + action='store_true', + help=_('List more fields in output') + ) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + + heat_client = self.app.client_manager.orchestration + return _list_deployment(heat_client, args=parsed_args) + + +def _list_deployment(heat_client, args=None): + kwargs = {'server_id': args.server} if args.server else {} + columns = ['id', 'config_id', 'server_id', 'action', 'status'] + if args.long: + columns.append('creation_time') + columns.append('status_reason') + + deployments = heat_client.software_deployments.list(**kwargs) + return ( + columns, + (utils.get_item_properties(s, columns) for s in deployments) + ) diff --git a/heatclient/tests/unit/osc/v1/test_software_deployment.py b/heatclient/tests/unit/osc/v1/test_software_deployment.py index c4e9d31..36408b4 100644 --- a/heatclient/tests/unit/osc/v1/test_software_deployment.py +++ b/heatclient/tests/unit/osc/v1/test_software_deployment.py @@ -72,3 +72,67 @@ class TestDeploymentDelete(TestDeployment): exc.CommandError, self.cmd.take_action, parsed_args) self.assertEqual("Unable to delete 1 of the 1 deployments.", str(error)) + + +class TestDeploymentList(TestDeployment): + + columns = ['id', 'config_id', 'server_id', 'action', 'status'] + + data = {"software_deployments": [ + { + "status": "COMPLETE", + "server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", + "config_id": "8da95794-2ad9-4979-8ae5-739ce314c5cd", + "output_values": { + "deploy_stdout": "Writing to /tmp/barmy Written to /tmp/barmy", + "deploy_stderr": "+ echo Writing to /tmp/barmy\n+ echo fu\n+ c" + "at /tmp/barmy\n+ echo -n The file /tmp/barmy" + "contains for server ec14c864-096e-4e27-bb8a-" + "2c2b4dc6f3f5 during CREATE\n+" + "echo Output to stderr\nOutput to stderr\n", + "deploy_status_code": 0, + "result": "The file /tmp/barmy contains fu for server " + "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE" + }, + "input_values": None, + "action": "CREATE", + "status_reason": "Outputs received", + "id": "ef422fa5-719a-419e-a10c-72e3a367b0b8", + "creation_time": "2015-01-31T15:12:36Z", + "updated_time": "2015-01-31T15:18:21Z" + } + ] + } + + def setUp(self): + super(TestDeploymentList, self).setUp() + self.cmd = software_deployment.ListDeployment(self.app, None) + self.mock_client.list = mock.MagicMock(return_value=[self.data]) + + def test_deployment_list(self): + arglist = [] + parsed_args = self.check_parser(self.cmd, arglist, []) + columns, data = self.cmd.take_action(parsed_args) + self.mock_client.list.assert_called_with() + self.assertEqual(self.columns, columns) + + def test_deployment_list_server(self): + kwargs = {} + kwargs['server_id'] = 'ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5' + arglist = ['--server', 'ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5'] + parsed_args = self.check_parser(self.cmd, arglist, []) + columns, data = self.cmd.take_action(parsed_args) + self.mock_client.list.assert_called_with(**kwargs) + self.assertEqual(self.columns, columns) + + def test_deployment_list_long(self): + kwargs = {} + cols = ['id', 'config_id', 'server_id', 'action', 'status', + 'creation_time', 'status_reason'] + arglist = ['--long'] + parsed_args = self.check_parser(self.cmd, arglist, []) + + columns, data = self.cmd.take_action(parsed_args) + + self.mock_client.list.assert_called_with(**kwargs) + self.assertEqual(cols, columns) @@ -32,6 +32,7 @@ openstack.cli.extension = openstack.orchestration.v1 = software_config_delete = heatclient.osc.v1.software_config:DeleteConfig software_deployment_delete = heatclient.osc.v1.software_deployment:DeleteDeployment + software_deployment_list = heatclient.osc.v1.software_deployment:ListDeployment stack_show = heatclient.osc.v1.stack:ShowStack stack_list = heatclient.osc.v1.stack:ListStack stack_create = heatclient.osc.v1.stack:CreateStack |