Get device profile by name in cyborgclient
This patch adds the support that getting the device profile by its name. Implements: blueprint show-device-profile-with-name Change-Id: I3587dce1555bf7a337661e2662165c171ddea57a
This commit is contained in:
parent
0874496cdd
commit
e1cf238c5d
|
@ -224,7 +224,7 @@ class NotAcceptable(HTTPClientError):
|
|||
acceptable according to the Accept headers sent in the request.
|
||||
"""
|
||||
status_code = 406
|
||||
message = _("Not Acceptable")
|
||||
message = _("Not Acceptable %(message)s")
|
||||
|
||||
|
||||
class ProxyAuthenticationRequired(HTTPClientError):
|
||||
|
|
|
@ -75,7 +75,8 @@ def create_connection(prof=None, cloud_region=None, **kwargs):
|
|||
# If we got the CloudRegion from python-openstackclient and it doesn't
|
||||
# already have a default microversion set, set it here.
|
||||
microversion_key = _make_key(API_NAME, 'default_microversion')
|
||||
cloud_region.config.setdefault(microversion_key, CURRENT_API_VERSION)
|
||||
api_version = kwargs.get('api_version', CURRENT_API_VERSION)
|
||||
cloud_region.config.setdefault(microversion_key, api_version)
|
||||
|
||||
user_agent = kwargs.pop('user_agent', None)
|
||||
app_name = kwargs.pop('app_name', None)
|
||||
|
@ -93,6 +94,7 @@ def make_client(instance):
|
|||
"""Returns a accelerator proxy"""
|
||||
conn = create_connection(
|
||||
cloud_region=instance._cli_options,
|
||||
api_version=instance._api_version[API_NAME]
|
||||
)
|
||||
|
||||
LOG.debug('Connection: %s', conn)
|
||||
|
|
|
@ -20,7 +20,6 @@ from openstack import exceptions as sdk_exc
|
|||
from osc_lib.command import command
|
||||
from osc_lib import utils as oscutils
|
||||
from oslo_serialization import jsonutils
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
from cyborgclient.common import utils
|
||||
from cyborgclient import exceptions as exc
|
||||
|
@ -162,8 +161,10 @@ class ShowDeviceProfile(command.ShowOne):
|
|||
parser = super(ShowDeviceProfile, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
"device_profile",
|
||||
metavar="<uuid>",
|
||||
help=_("UUID of the device_profile.")
|
||||
metavar="<device_profile>",
|
||||
help=_("Name or UUID of the device_profile."
|
||||
" The name field requires at least"
|
||||
" ``--os-accelerator-api-version 2.2``.")
|
||||
)
|
||||
return parser
|
||||
|
||||
|
@ -174,11 +175,8 @@ class ShowDeviceProfile(command.ShowOne):
|
|||
parsed_args.device_profile)
|
||||
|
||||
|
||||
def _show_device_profile(acc_client, uuid):
|
||||
def _show_device_profile(acc_client, name_or_uuid):
|
||||
"""Show detailed info about device_profile."""
|
||||
if not uuidutils.is_uuid_like(uuid):
|
||||
raise exc.CommandError(_('Only UUID of device_profile allowed. '
|
||||
'Invalid input: %s') % uuid)
|
||||
|
||||
columns = (
|
||||
"created_at",
|
||||
|
@ -189,12 +187,13 @@ def _show_device_profile(acc_client, uuid):
|
|||
"description",
|
||||
)
|
||||
try:
|
||||
device_profile = acc_client.get_device_profile(uuid)
|
||||
device_profile = acc_client.get_device_profile(name_or_uuid)
|
||||
except sdk_exc.ResourceNotFound:
|
||||
raise exc.CommandError(_('device_profile not found: %s') % uuid)
|
||||
formatters = {
|
||||
'data': utils.json_formatter,
|
||||
}
|
||||
raise exc.CommandError(_('device_profile %s not found') % name_or_uuid)
|
||||
except sdk_exc.HttpException as e:
|
||||
raise exc.NotAcceptable(message=e.details)
|
||||
|
||||
formatters = {'data': utils.json_formatter}
|
||||
data = device_profile.to_dict()
|
||||
return columns, oscutils.get_dict_properties(data, columns,
|
||||
formatters=formatters)
|
||||
|
|
|
@ -12,6 +12,10 @@
|
|||
#
|
||||
import copy
|
||||
|
||||
from openstack import exceptions as sdk_exc
|
||||
from osc_lib import utils as oscutils
|
||||
|
||||
from cyborgclient.common import utils
|
||||
from cyborgclient import exceptions as exc
|
||||
from cyborgclient.osc.v2 import device_profile as osc_device_profile
|
||||
from cyborgclient.tests.unit.osc.v2 import fakes as acc_fakes
|
||||
|
@ -101,15 +105,43 @@ class TestDeviceProfileShow(TestDeviceProfile):
|
|||
super(TestDeviceProfileShow, self).setUp()
|
||||
self.cmd = osc_device_profile.ShowDeviceProfile(self.app, None)
|
||||
|
||||
def test_device_profile_show_with_name(self):
|
||||
def test_device_profile_show_with_name_before_v22(self):
|
||||
exc_msg = 'The minimal required API version should be 2.2'
|
||||
self.mock_acc_client.get_device_profile.side_effect = \
|
||||
sdk_exc.HttpException(details=exc_msg)
|
||||
|
||||
arg_list = [acc_fakes.device_profile_name]
|
||||
verify_list = []
|
||||
parsed_args = self.check_parser(self.cmd, arg_list, verify_list)
|
||||
result = self.assertRaises(exc.CommandError,
|
||||
result = self.assertRaises(exc.NotAcceptable,
|
||||
self.cmd.take_action,
|
||||
parsed_args)
|
||||
self.assertIn("Only UUID of device_profile allowed. "
|
||||
"Invalid input: fake_devprof_name", str(result))
|
||||
self.assertIn(exc_msg, str(result))
|
||||
|
||||
def test_device_profile_show_with_name(self):
|
||||
fake_dp = acc_fakes.FakeAcceleratorResource(
|
||||
None,
|
||||
copy.deepcopy(acc_fakes.DEVICE_PROFILE),
|
||||
loaded=True)
|
||||
self.mock_acc_client.get_device_profile.return_value = fake_dp
|
||||
|
||||
arg_list = [acc_fakes.device_profile_name]
|
||||
verify_list = []
|
||||
parsed_args = self.check_parser(self.cmd, arg_list, verify_list)
|
||||
result = self.cmd.take_action(parsed_args)
|
||||
columns = (
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"uuid",
|
||||
"name",
|
||||
"groups",
|
||||
"description",
|
||||
)
|
||||
formatters = {'data': utils.json_formatter}
|
||||
expected = oscutils.get_dict_properties(acc_fakes.DEVICE_PROFILE,
|
||||
columns,
|
||||
formatters=formatters)
|
||||
self.assertEqual(result, (columns, expected))
|
||||
|
||||
|
||||
class TestDeviceProfileCreate(TestDeviceProfile):
|
||||
|
|
Loading…
Reference in New Issue