Implemented the segment subcommands masakari CLI

This patch adds sub commands of segments.

Change-Id: I7b168cf62b2a98f8539d37a3818d4ef6057f0fe9
Implements: bp implement-masakari-cli
This commit is contained in:
Takahiro Izumi 2017-01-25 16:57:19 +09:00
parent 1257f0985c
commit 0bf1059912
4 changed files with 120 additions and 9 deletions

View File

@ -61,12 +61,12 @@ class Segment(resource2.Resource):
"sort_key", "sort_dir", recovery_method="recovery_method",
service_type="service_type")
def update(self, session, prepend_key=False, has_body=False):
def update(self, session, prepend_key=False, has_body=True):
"""Update a segment."""
request = self._prepare_request(prepend_key=prepend_key)
del request.body['id']
request_body = {"segment": request.body}
session.put(request.uri, endpoint_filter=self.service,
json=request_body, headers=request.headers)
ret = session.put(request.uri, endpoint_filter=self.service,
json=request_body, headers=request.headers)
self._translate_response(ret, has_body=has_body)
return self

View File

@ -28,7 +28,7 @@ class FakeConnection(object):
def __init__(self, prof=None, user_agent=None, **kwargs):
super(FakeConnection, self).__init__()
self.vmha = None
self.ha = None
class TestV1Client(base.TestCase):
@ -37,7 +37,7 @@ class TestV1Client(base.TestCase):
super(TestV1Client, self).setUp()
self.conn = mock.Mock()
self.service = mock.Mock()
self.conn.vmha = self.service
self.conn.ha = self.service
def test_client_init(self):
with mock.patch.object(connection,

View File

@ -28,7 +28,7 @@ class TestV1Shell(base.TestCase):
def setUp(self):
super(TestV1Shell, self).setUp()
self.vals = {
self.notification_vals = {
'notification_uuid': 'b3bf75d7-c2e9-4023-a10b-e5b464b9b539',
'source_host_uuid': '68fa7386-983e-4497-b5c4-3780f774d302',
'created_at': '2016-11-15T12:24:39.000000',
@ -38,10 +38,20 @@ class TestV1Shell(base.TestCase):
'type': 'VM',
'id': '27'}
self.segment_vals = {
'uuid': '870da19d-37ec-41d2-a4b2-7be54b0d6ec9',
'created_at': '2016-11-17T10:08:32.000000',
'recovery_method': 'auto',
'updated_at': '2016-11-17T10:09:56.000000',
'name': 'testsegment05',
'service_type': 'testsegment01_auto',
'id': '14',
'description': 'UPDATE Discription'}
@mock.patch.object(utils, 'print_list')
def test_do_notification_list(self, mock_print_list):
service = mock.Mock()
service.notifications.return_value = self.vals
service.notifications.return_value = self.notification_vals
args = mock.Mock()
columns = [
'notification_uuid',
@ -53,5 +63,23 @@ class TestV1Shell(base.TestCase):
ms.do_notification_list(service, args)
mock_print_list.assert_called_once_with(
self.vals,
self.notification_vals,
columns)
@mock.patch.object(utils, 'print_list')
def test_do_segment_list(self, mock_print_list):
service = mock.Mock()
service.segments.return_value = self.segment_vals
args = mock.Mock()
columns = [
'uuid',
'name',
'description',
'service_type',
'recovery_method']
ms.do_segment_list(service, args)
mock_print_list.assert_called_once_with(
self.segment_vals,
columns)

View File

@ -70,3 +70,86 @@ def do_notification_create(service, args):
except Exception as e:
print(e)
def do_segment_list(service, args):
"""List segments."""
try:
segments = service.segments()
fields = [
'uuid', 'name', 'description',
'service_type', 'recovery_method']
utils.print_list(segments, fields)
except Exception as e:
print(e)
@utils.arg('--id', metavar='<SEGMENT_ID>', required=True,
help='Segment to display (name or ID)')
def do_segment_show(service, args):
"""Show a segment details."""
try:
segment = service.get_segment(args.id)
utils.print_dict(segment.to_dict())
except Exception as e:
print(e)
@utils.arg('--name', metavar='<SEGMENT_NAME>', required=True,
help='Name of segment.')
@utils.arg('--description', metavar='<DESCRIPTION>', required=True,
help='Description of segment.')
@utils.arg('--recovery-method', metavar='<RECOVERY_METHOD>', required=True,
help='JSON string about recovery method.')
@utils.arg('--service-type', metavar='<SERVICE_TYPE>', required=True,
help='Service type of segment.')
def do_segment_create(service, args):
"""Create segment."""
try:
attrs = {
'name': args.name,
'description': args.description,
'recovery_method': args.recovery_method,
'service_type': args.service_type,
}
segment = service.create_segment(**attrs)
utils.print_dict(segment.to_dict())
except Exception as e:
print(e)
@utils.arg('--id', metavar='<SEGMENT_ID>',
required=True, help='Name or ID of segment.')
@utils.arg('--name', metavar='<SEGMENT_NAME>',
required=False, help='Name of segment.')
@utils.arg('--description', metavar='<DESCRIPTION>',
required=False, help='Description of segment.')
@utils.arg('--recovery-method', metavar='<RECOVERY_METHOD>',
required=False, help='JSON string about recovery method.')
@utils.arg('--service-type', metavar='<SERVICE_TYPE>',
required=False, help='Service type of segment.')
def do_segment_update(service, args):
"""Update a segment."""
try:
attrs = {
'name': args.name,
'description': args.description,
'recovery_method': args.recovery_method,
'service_type': args.service_type,
}
attrs = utils.remove_unspecified_items(attrs)
segment = service.update_segment(args.id, **attrs)
utils.print_dict(segment.to_dict())
except Exception as e:
print(e)
@utils.arg('--id', metavar='<SEGMENT_ID>', required=True,
help='Name or ID of the segment to delete.')
def do_segment_delete(service, args):
"""Delete a segment."""
try:
segment = service.delete_segment(args.id, ignore_missing=True)
utils.print_dict(segment.to_dict())
except Exception as e:
print(e)