Merge "Add OpenstackClient plugin for software deployment show"

This commit is contained in:
Jenkins 2016-02-16 04:37:02 +00:00 committed by Gerrit Code Review
commit 7ee16eed9f
3 changed files with 107 additions and 0 deletions

View File

@ -17,6 +17,7 @@ import logging
from cliff import command from cliff import command
from cliff import lister from cliff import lister
from cliff import show
from openstackclient.common import exceptions as exc from openstackclient.common import exceptions as exc
from openstackclient.common import utils from openstackclient.common import utils
@ -112,3 +113,48 @@ def _list_deployment(heat_client, args=None):
columns, columns,
(utils.get_item_properties(s, columns) for s in deployments) (utils.get_item_properties(s, columns) for s in deployments)
) )
class ShowDeployment(show.ShowOne):
"""Show SoftwareDeployment Details."""
log = logging.getLogger(__name__ + ".ShowSoftwareDeployment")
def get_parser(self, prog_name):
parser = super(ShowDeployment, self).get_parser(prog_name)
parser.add_argument(
'id',
metavar='<id>',
help=_('ID of the deployment')
)
parser.add_argument(
'--long',
action='store_true',
help=_('Show 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
try:
data = heat_client.software_deployments.get(
deployment_id=parsed_args.id)
except heat_exc.HTTPNotFound:
raise exc.CommandError(_('Software Deployment not found: %s') % id)
else:
columns = [
'id',
'server_id',
'config_id',
'creation_time',
'updated_time',
'status',
'status_reason',
'input_values',
'action',
]
if parsed_args.long:
columns.append('output_values')
return columns, utils.get_item_properties(data, columns)

View File

@ -18,6 +18,7 @@ from openstackclient.common import exceptions as exc
from heatclient import exc as heat_exc from heatclient import exc as heat_exc
from heatclient.osc.v1 import software_deployment from heatclient.osc.v1 import software_deployment
from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes
from heatclient.v1 import software_deployments
class TestDeployment(orchestration_fakes.TestOrchestrationv1): class TestDeployment(orchestration_fakes.TestOrchestrationv1):
@ -136,3 +137,62 @@ class TestDeploymentList(TestDeployment):
self.mock_client.list.assert_called_with(**kwargs) self.mock_client.list.assert_called_with(**kwargs)
self.assertEqual(cols, columns) self.assertEqual(cols, columns)
class TestDeploymentShow(TestDeployment):
get_response = {"software_deployment": {
"status": "IN_PROGRESS",
"server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5",
"config_id": "3d5ec2a8-7004-43b6-a7f6-542bdbe9d434",
"output_values": 'null',
"input_values": 'null',
"action": "CREATE",
"status_reason": "Deploy data available",
"id": "06e87bcc-33a2-4bce-aebd-533e698282d3",
"creation_time": "2015-01-31T15:12:36Z",
"updated_time": "2015-01-31T15:18:21Z"
}}
def setUp(self):
super(TestDeploymentShow, self).setUp()
self.cmd = software_deployment.ShowDeployment(self.app, None)
def test_deployment_show(self):
arglist = ['my_deployment']
cols = ['id', 'server_id', 'config_id', 'creation_time',
'updated_time', 'status', 'status_reason',
'input_values', 'action']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.mock_client.get = mock.Mock(
return_value=software_deployments.SoftwareDeployment(
None, self.get_response))
columns, data = self.cmd.take_action(parsed_args)
self.mock_client.get.assert_called_with(**{
'deployment_id': 'my_deployment',
})
self.assertEqual(cols, columns)
def test_deployment_show_long(self):
arglist = ['my_deployment', '--long']
cols = ['id', 'server_id', 'config_id', 'creation_time',
'updated_time', 'status', 'status_reason',
'input_values', 'action', 'output_values']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.mock_client.get = mock.Mock(
return_value=software_deployments.SoftwareDeployment(
None, self.get_response))
columns, data = self.cmd.take_action(parsed_args)
self.mock_client.get.assert_called_once_with(**{
'deployment_id': 'my_deployment',
})
self.assertEqual(cols, columns)
def test_deployment_not_found(self):
arglist = ['my_deployment']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.mock_client.get = mock.Mock()
self.mock_client.get.side_effect = heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,
self.cmd.take_action,
parsed_args)

View File

@ -40,6 +40,7 @@ openstack.orchestration.v1 =
software_config_show = heatclient.osc.v1.software_config:ShowConfig software_config_show = heatclient.osc.v1.software_config:ShowConfig
software_deployment_delete = heatclient.osc.v1.software_deployment:DeleteDeployment software_deployment_delete = heatclient.osc.v1.software_deployment:DeleteDeployment
software_deployment_list = heatclient.osc.v1.software_deployment:ListDeployment software_deployment_list = heatclient.osc.v1.software_deployment:ListDeployment
software_deployment_show = heatclient.osc.v1.software_deployment:ShowDeployment
stack_abandon = heatclient.osc.v1.stack:AbandonStack stack_abandon = heatclient.osc.v1.stack:AbandonStack
stack_adopt = heatclient.osc.v1.stack:AdoptStack stack_adopt = heatclient.osc.v1.stack:AdoptStack
stack_check = heatclient.osc.v1.stack:CheckStack stack_check = heatclient.osc.v1.stack:CheckStack