summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-02-03 16:36:12 +0000
committerGerrit Code Review <review@openstack.org>2016-02-03 16:36:12 +0000
commitdd271d8924cfafdbbffca0a0c4d5551cc5dc7d06 (patch)
tree76c65bdfe4627df47742417b55843cf74258aeaa
parent47bb63fc7f98a8955307f02936e88979c163cbfb (diff)
parentc5841cb6242502af94964a1189fe8fb2060327a5 (diff)
downloadpython-heatclient-dd271d8924cfafdbbffca0a0c4d5551cc5dc7d06.tar.gz
Merge "Add OpenstackClient plugin for software deployment list"
-rw-r--r--heatclient/osc/v1/software_deployment.py43
-rw-r--r--heatclient/tests/unit/osc/v1/test_software_deployment.py64
-rw-r--r--setup.cfg1
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)
diff --git a/setup.cfg b/setup.cfg
index c18d13b..5359ad4 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -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