Merge "Enable to specify name and ID when operating segments and hosts"

This commit is contained in:
Jenkins 2017-03-28 01:47:07 +00:00 committed by Gerrit Code Review
commit bd4c9251f7
4 changed files with 240 additions and 31 deletions

View File

@ -34,7 +34,7 @@ class ListHost(command.Lister):
parser.add_argument(
'segment_id',
metavar='<segment_id>',
help=_('UUID of segment.')
help=_('Name or ID of segment.')
)
parser.add_argument(
'--limit',
@ -69,11 +69,14 @@ class ListHost(command.Lister):
def take_action(self, parsed_args):
masakari_client = self.app.client_manager.ha
segment_id = masakariclient_utils.get_uuid_by_name(
masakari_client, parsed_args.segment_id)
columns = ['uuid', 'name', 'type', 'control_attributes', 'reserved',
'on_maintenance', 'failover_segment_id']
queries = masakariclient_utils.format_sort_filter_params(parsed_args)
hosts = masakari_client.hosts(parsed_args.segment_id, **queries)
hosts = masakari_client.hosts(segment_id, **queries)
formatters = {}
return (
columns,
@ -90,7 +93,7 @@ class ShowHost(command.ShowOne):
parser.add_argument(
'segment_id',
metavar='<segment_id>',
help=_('UUID of segment.')
help=_('Name or ID of segment.')
)
parser.add_argument(
'host',
@ -101,11 +104,13 @@ class ShowHost(command.ShowOne):
def take_action(self, parsed_args):
masakari_client = self.app.client_manager.ha
segment_id = masakariclient_utils.get_uuid_by_name(
masakari_client, parsed_args.segment_id)
uuid = masakariclient_utils.get_uuid_by_name(
masakari_client,
parsed_args.host,
segment=parsed_args.segment_id)
return _show_host(masakari_client, parsed_args.segment_id, uuid)
segment=segment_id)
return _show_host(masakari_client, segment_id, uuid)
class CreateHost(command.ShowOne):
@ -131,7 +136,7 @@ class CreateHost(command.ShowOne):
parser.add_argument(
'segment_id',
metavar='<segment_id>',
help=_('UUID of segment.')
help=_('Name or ID of segment.')
)
parser.add_argument(
'--reserved',
@ -151,6 +156,8 @@ class CreateHost(command.ShowOne):
def take_action(self, parsed_args):
masakari_client = self.app.client_manager.ha
segment_id = masakariclient_utils.get_uuid_by_name(
masakari_client, parsed_args.segment_id)
attrs = {
'name': parsed_args.name,
'type': parsed_args.type,
@ -163,13 +170,13 @@ class CreateHost(command.ShowOne):
try:
host = masakari_client.create_host(
segment_id=parsed_args.segment_id,
segment_id=segment_id,
**attrs)
except Exception as ex:
LOG.debug(_("Failed to create segment host: %s"), parsed_args)
raise ex
return _show_host(masakari_client,
parsed_args.segment_id,
segment_id,
host.uuid)
@ -181,7 +188,7 @@ class UpdateHost(command.ShowOne):
parser.add_argument(
'segment_id',
metavar='<segment_id>',
help=_('UUID of segment.')
help=_('Name or ID of segment.')
)
parser.add_argument(
'host',
@ -221,10 +228,12 @@ class UpdateHost(command.ShowOne):
def take_action(self, parsed_args):
masakari_client = self.app.client_manager.ha
segment_id = masakariclient_utils.get_uuid_by_name(
masakari_client, parsed_args.segment_id)
uuid = masakariclient_utils.get_uuid_by_name(
masakari_client,
parsed_args.host,
segment=parsed_args.segment_id)
segment=segment_id)
attrs = {
'name': parsed_args.name,
'type': parsed_args.type,
@ -237,7 +246,7 @@ class UpdateHost(command.ShowOne):
try:
masakari_client.update_host(
segment_id=parsed_args.segment_id, host=uuid, **attrs)
segment_id=segment_id, host=uuid, **attrs)
except sdk_exc.NotFoundException:
# Reraise. To unify exceptions with other functions.
LOG.debug(_("Segment host is not found: %s"), parsed_args)
@ -247,7 +256,7 @@ class UpdateHost(command.ShowOne):
LOG.debug(_("Failed to update segment host: %s"), parsed_args)
raise ex
return _show_host(masakari_client, parsed_args.segment_id, uuid)
return _show_host(masakari_client, segment_id, uuid)
class DeleteHost(command.Command):
@ -258,7 +267,7 @@ class DeleteHost(command.Command):
parser.add_argument(
'segment_id',
metavar='<segment_id>',
help=_('UUID of segment.')
help=_('Name or ID of segment.')
)
parser.add_argument(
'host',
@ -269,11 +278,13 @@ class DeleteHost(command.Command):
def take_action(self, parsed_args):
masakari_client = self.app.client_manager.ha
segment_id = masakariclient_utils.get_uuid_by_name(
masakari_client, parsed_args.segment_id)
uuid = masakariclient_utils.get_uuid_by_name(
masakari_client,
parsed_args.host,
segment=parsed_args.segment_id)
masakari_client.delete_host(parsed_args.segment_id, uuid, False)
segment=segment_id)
masakari_client.delete_host(segment_id, uuid, False)
print('Host deleted: %s' % parsed_args.host)

View File

@ -0,0 +1,29 @@
# Copyright(c) 2017 Nippon Telegraph and Telephone Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class FakeSegment(object):
def __init__(self, segment_values):
self.segment_values = segment_values
def to_dict(self):
return self.segment_values
class FakeHost(object):
def __init__(self, host_values):
self.host_values = host_values
def to_dict(self):
return self.host_values

View File

@ -21,6 +21,7 @@ import mock
from masakariclient.common import utils
from masakariclient.tests import base
from masakariclient.tests.unit.v1 import fakes
import masakariclient.v1.shell as ms
@ -47,6 +48,7 @@ class TestV1Shell(base.TestCase):
'service_type': 'testsegment01_auto',
'id': '14',
'description': 'UPDATE Discription'}
self.segment_object = fakes.FakeSegment(self.segment_vals)
self.hosts_vals = {
'reserved': False,
@ -72,6 +74,7 @@ class TestV1Shell(base.TestCase):
'type': 'typeX',
'id': 10,
'failover_segment_id': '6b985a8a-f8c0-42e4-beaa-d2fcd8dabbb6'}
self.hosts_object = fakes.FakeHost(self.hosts_vals)
@mock.patch.object(utils, 'print_list')
def test_do_notification_list(self, mock_print_list):
@ -109,21 +112,165 @@ class TestV1Shell(base.TestCase):
self.segment_vals,
columns)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_segment_show(self, mock_get_uuid_by_name, mock_print_dict):
mock_get_uuid_by_name.return_value = self.segment_vals.get('uuid')
service = mock.Mock()
service.get_segment.return_value = self.segment_object
args = mock.Mock()
ms.do_segment_show(service, args)
mock_get_uuid_by_name.assert_called_once_with(service, args.id)
mock_print_dict.assert_called_once_with(self.segment_vals)
@mock.patch.object(utils, 'print_dict')
def test_do_segment_create(self, mock_print_dict):
service = mock.Mock()
service.create_segment.return_value = self.segment_object
args = mock.Mock()
ms.do_segment_create(service, args)
mock_print_dict.assert_called_once_with(self.segment_vals)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'remove_unspecified_items')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_segment_update(self,
mock_get_uuid_by_name,
mock_remove_unspecified_items,
mock_print_dict):
mock_get_uuid_by_name.return_value = self.segment_vals.get('uuid')
mock_remove_unspecified_items.return_value = self.segment_vals
service = mock.Mock()
service.update_segment.return_value = self.segment_object
args = mock.Mock()
ms.do_segment_update(service, args)
mock_get_uuid_by_name.assert_called_once_with(service, args.id)
attrs = {
'name': args.name,
'description': args.description,
'recovery_method': args.recovery_method,
'service_type': args.service_type,
}
mock_remove_unspecified_items.assert_called_once_with(attrs)
mock_print_dict.assert_called_once_with(self.segment_vals)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_segment_delete(self, mock_get_uuid_by_name, mock_print_dict):
mock_get_uuid_by_name.return_value = self.segment_vals.get('uuid')
service = mock.Mock()
service.delete_segment.return_value = self.segment_object
args = mock.Mock()
ms.do_segment_delete(service, args)
mock_get_uuid_by_name.assert_called_once_with(service, args.id)
mock_print_dict.assert_called_once_with(self.segment_vals)
@mock.patch.object(utils, 'print_list')
def test_do_host_list(self, mock_print_list):
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_host_list(self, mock_get_uuid_by_name, mock_print_list):
mock_get_uuid_by_name.return_value = self.segment_vals.get('uuid')
service = mock.Mock()
service.hosts.return_value = self.hosts_vals
args = mock.Mock()
columns = [
'control_attributes',
'failover_segment_id',
'uuid',
'name',
'on_maintenance',
'type',
'uuid']
'control_attributes',
'reserved',
'on_maintenance',
'failover_segment_id']
ms.do_host_list(service, args)
mock_get_uuid_by_name.assert_called_once_with(service, args.segment_id)
mock_print_list.assert_called_once_with(
self.hosts_vals,
columns)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_host_show(self, mock_get_uuid_by_name, mock_print_dict):
mock_get_uuid_by_name.side_effect = [self.segment_vals.get('uuid'),
self.hosts_vals.get('uuid')]
service = mock.Mock()
service.get_host.return_value = self.hosts_object
args = mock.Mock()
ms.do_host_show(service, args)
mock_get_uuid_by_name.assert_any_call(service, args.segment_id)
mock_get_uuid_by_name.assert_any_call(
service, args.id, segment=self.segment_vals.get('uuid'))
mock_print_dict.assert_called_once_with(self.hosts_vals)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'remove_unspecified_items')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_host_create(self,
mock_get_uuid_by_name,
mock_remove_unspecified_items,
mock_print_dict):
mock_get_uuid_by_name.return_value = self.hosts_vals.get('uuid')
mock_remove_unspecified_items.return_value = self.hosts_vals
service = mock.Mock()
service.create_host.return_value = self.hosts_object
args = mock.Mock()
ms.do_host_create(service, args)
mock_get_uuid_by_name.assert_called_once_with(service, args.segment_id)
attrs = {
'name': args.name,
'type': args.type,
'control_attributes': args.control_attributes,
'reserved': args.reserved,
'on_maintenance': args.on_maintenance,
}
mock_remove_unspecified_items.assert_called_once_with(attrs)
mock_print_dict.assert_called_once_with(self.hosts_vals)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'remove_unspecified_items')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_host_update(self,
mock_get_uuid_by_name,
mock_remove_unspecified_items,
mock_print_dict):
mock_get_uuid_by_name.side_effect = [self.segment_vals.get('uuid'),
self.hosts_vals.get('uuid')]
mock_remove_unspecified_items.return_value = self.hosts_vals
service = mock.Mock()
service.update_host.return_value = self.hosts_object
args = mock.Mock()
ms.do_host_update(service, args)
mock_get_uuid_by_name.assert_any_call(service, args.segment_id)
mock_get_uuid_by_name.assert_any_call(
service, args.id, segment=self.segment_vals.get('uuid'))
attrs = {
'name': args.name,
'type': args.type,
'control_attributes': args.control_attributes,
'reserved': args.reserved,
'on_maintenance': args.on_maintenance,
}
mock_remove_unspecified_items.assert_called_once_with(attrs)
mock_print_dict.assert_called_once_with(self.hosts_vals)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_host_delete(self, mock_get_uuid_by_name, mock_print_dict):
mock_get_uuid_by_name.side_effect = [self.segment_vals.get('uuid'),
self.hosts_vals.get('uuid')]
service = mock.Mock()
service.delete_host.return_value = self.hosts_object
args = mock.Mock()
ms.do_host_delete(service, args)
mock_get_uuid_by_name.assert_any_call(service, args.segment_id)
mock_get_uuid_by_name.assert_any_call(
service, args.id, segment=self.segment_vals.get('uuid'))
mock_print_dict.assert_called_once_with(self.hosts_vals)

View File

@ -91,7 +91,8 @@ def do_segment_list(service, args):
def do_segment_show(service, args):
"""Show a segment details."""
try:
segment = service.get_segment(args.id)
segment_id = utils.get_uuid_by_name(service, args.id)
segment = service.get_segment(segment_id)
utils.print_dict(segment.to_dict())
except Exception as e:
print(e)
@ -138,6 +139,8 @@ def do_segment_create(service, args):
def do_segment_update(service, args):
"""Update a segment."""
try:
segment_id = utils.get_uuid_by_name(
service, args.id)
attrs = {
'name': args.name,
'description': args.description,
@ -145,7 +148,7 @@ def do_segment_update(service, args):
'service_type': args.service_type,
}
attrs = utils.remove_unspecified_items(attrs)
segment = service.update_segment(args.id, **attrs)
segment = service.update_segment(segment_id, **attrs)
utils.print_dict(segment.to_dict())
except Exception as e:
print(e)
@ -156,7 +159,9 @@ def do_segment_update(service, args):
def do_segment_delete(service, args):
"""Delete a segment."""
try:
segment = service.delete_segment(args.id, ignore_missing=True)
segment_id = utils.get_uuid_by_name(
service, args.id)
segment = service.delete_segment(segment_id, ignore_missing=True)
utils.print_dict(segment.to_dict())
except Exception as e:
print(e)
@ -167,10 +172,12 @@ def do_segment_delete(service, args):
def do_host_list(service, args):
"""List hosts."""
try:
hosts = service.hosts(args.segment_id)
segment_id = utils.get_uuid_by_name(
service, args.segment_id)
hosts = service.hosts(segment_id)
fields = [
'control_attributes', 'failover_segment_id', 'name',
'on_maintenance', 'type', 'uuid']
'uuid', 'name', 'type', 'control_attributes', 'reserved',
'on_maintenance', 'failover_segment_id']
utils.print_list(hosts, fields)
except Exception as e:
print(e)
@ -183,7 +190,11 @@ def do_host_list(service, args):
def do_host_show(service, args):
"""Show a host details."""
try:
host = service.get_host(args.segment_id, args.id)
segment_id = utils.get_uuid_by_name(
service, args.segment_id)
host_id = utils.get_uuid_by_name(
service, args.id, segment=segment_id)
host = service.get_host(segment_id, host_id)
utils.print_dict(host.to_dict())
except Exception as e:
print(e)
@ -207,6 +218,8 @@ def do_host_show(service, args):
def do_host_create(service, args):
"""Create a host."""
try:
segment_id = utils.get_uuid_by_name(
service, args.segment_id)
attrs = {
'name': args.name,
'type': args.type,
@ -214,7 +227,8 @@ def do_host_create(service, args):
'reserved': args.reserved,
'on_maintenance': args.on_maintenance,
}
host = service.create_host(args.segment_id, **attrs)
utils.remove_unspecified_items(attrs)
host = service.create_host(segment_id, **attrs)
utils.print_dict(host.to_dict())
except Exception as e:
print(e)
@ -240,6 +254,10 @@ def do_host_create(service, args):
def do_host_update(service, args):
"""Update a host."""
try:
segment_id = utils.get_uuid_by_name(
service, args.segment_id)
host_id = utils.get_uuid_by_name(
service, args.id, segment=segment_id)
attrs = {
'name': args.name,
'type': args.type,
@ -248,20 +266,24 @@ def do_host_update(service, args):
'on_maintenance': args.on_maintenance,
}
attrs = utils.remove_unspecified_items(attrs)
host = service.update_host(args.segment_id, args.id, **attrs)
host = service.update_host(segment_id, host_id, **attrs)
utils.print_dict(host.to_dict())
except Exception as e:
print(e)
@utils.arg('--segment-id', metavar='<SEGMENT_ID>', required=True,
help='Segment ID of the host to delete.')
help='Name or ID of segment.')
@utils.arg('--id', metavar='<HOST_ID>', required=True,
help='Name or ID of the host to delete.')
def do_host_delete(service, args):
"""Delete a host."""
try:
host = service.delete_host(args.segment_id, args.id)
segment_id = utils.get_uuid_by_name(
service, args.segment_id)
host_id = utils.get_uuid_by_name(
service, args.id, segment=segment_id)
host = service.delete_host(segment_id, host_id)
if host:
utils.print_dict(host.to_dict())
except Exception as e: