volume: Migrate 'block storage log level *' to SDK
Change-Id: Ic03f65fee197a85518df448c18a0fd2c11d51993 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
@@ -10,9 +10,10 @@
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import ddt
|
||||
from openstack.block_storage.v3 import service as _service
|
||||
from openstack.test import fakes as sdk_fakes
|
||||
from osc_lib import exceptions
|
||||
|
||||
from openstackclient.tests.unit import utils as tests_utils
|
||||
@@ -20,24 +21,17 @@ from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
||||
from openstackclient.volume.v3 import block_storage_log_level as service
|
||||
|
||||
|
||||
class TestService(volume_fakes.TestVolume):
|
||||
class TestBlockStorageLogLevelList(volume_fakes.TestVolume):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
# Get a shortcut to the ServiceManager Mock
|
||||
self.service_mock = self.volume_client.services
|
||||
self.service_mock.reset_mock()
|
||||
self.log_level = sdk_fakes.generate_fake_resource(
|
||||
_service.LogLevel, binary='cinder-scheduler'
|
||||
)
|
||||
self.volume_sdk_client.get_service_log_levels.return_value = [
|
||||
self.log_level
|
||||
]
|
||||
|
||||
|
||||
class TestBlockStorageLogLevelList(TestService):
|
||||
service_log = volume_fakes.create_service_log_level_entry()
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
self.service_mock.get_log_levels.return_value = [self.service_log]
|
||||
|
||||
# Get the command object to test
|
||||
self.cmd = service.BlockStorageLogLevelList(self.app, None)
|
||||
|
||||
def test_block_storage_log_level_list(self):
|
||||
@@ -45,16 +39,16 @@ class TestBlockStorageLogLevelList(TestService):
|
||||
|
||||
arglist = [
|
||||
'--host',
|
||||
self.service_log.host,
|
||||
self.log_level.host,
|
||||
'--service',
|
||||
self.service_log.binary,
|
||||
self.log_level.binary,
|
||||
'--log-prefix',
|
||||
self.service_log.prefix,
|
||||
'cinder.',
|
||||
]
|
||||
verifylist = [
|
||||
('host', self.service_log.host),
|
||||
('service', self.service_log.binary),
|
||||
('log_prefix', self.service_log.prefix),
|
||||
('host', self.log_level.host),
|
||||
('service', self.log_level.binary),
|
||||
('log_prefix', 'cinder.'),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
@@ -66,40 +60,35 @@ class TestBlockStorageLogLevelList(TestService):
|
||||
'Prefix',
|
||||
'Level',
|
||||
]
|
||||
|
||||
# confirming if all expected columns are present in the result.
|
||||
self.assertEqual(expected_columns, columns)
|
||||
|
||||
datalist = (
|
||||
datalist = tuple(
|
||||
(
|
||||
self.service_log.binary,
|
||||
self.service_log.host,
|
||||
self.service_log.prefix,
|
||||
self.service_log.level,
|
||||
),
|
||||
self.log_level.binary,
|
||||
self.log_level.host,
|
||||
prefix,
|
||||
level,
|
||||
)
|
||||
|
||||
# confirming if all expected values are present in the result.
|
||||
for prefix, level in self.log_level.levels.values()
|
||||
)
|
||||
self.assertEqual(expected_columns, columns)
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
# checking if proper call was made to get log level of services
|
||||
self.service_mock.get_log_levels.assert_called_with(
|
||||
server=self.service_log.host,
|
||||
binary=self.service_log.binary,
|
||||
prefix=self.service_log.prefix,
|
||||
self.volume_sdk_client.get_service_log_levels.assert_called_with(
|
||||
server=self.log_level.host,
|
||||
binary=self.log_level.binary,
|
||||
prefix='cinder.',
|
||||
)
|
||||
|
||||
def test_block_storage_log_level_list_pre_332(self):
|
||||
arglist = [
|
||||
'--host',
|
||||
self.service_log.host,
|
||||
self.log_level.host,
|
||||
'--service',
|
||||
'cinder-api',
|
||||
'--log-prefix',
|
||||
'cinder_test.api.common',
|
||||
]
|
||||
verifylist = [
|
||||
('host', self.service_log.host),
|
||||
('host', self.log_level.host),
|
||||
('service', 'cinder-api'),
|
||||
('log_prefix', 'cinder_test.api.common'),
|
||||
]
|
||||
@@ -117,14 +106,14 @@ class TestBlockStorageLogLevelList(TestService):
|
||||
|
||||
arglist = [
|
||||
'--host',
|
||||
self.service_log.host,
|
||||
self.log_level.host,
|
||||
'--service',
|
||||
'nova-api',
|
||||
'--log-prefix',
|
||||
'cinder_test.api.common',
|
||||
]
|
||||
verifylist = [
|
||||
('host', self.service_log.host),
|
||||
('host', self.log_level.host),
|
||||
('service', 'nova-api'),
|
||||
('log_prefix', 'cinder_test.api.common'),
|
||||
]
|
||||
@@ -139,13 +128,15 @@ class TestBlockStorageLogLevelList(TestService):
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class TestBlockStorageLogLevelSet(TestService):
|
||||
service_log = volume_fakes.create_service_log_level_entry()
|
||||
|
||||
class TestBlockStorageLogLevelSet(volume_fakes.TestVolume):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
# Get the command object to test
|
||||
self.log_level = sdk_fakes.generate_fake_resource(
|
||||
_service.LogLevel, binary='cinder-api'
|
||||
)
|
||||
self.volume_sdk_client.set_service_log_levels.return_value = None
|
||||
|
||||
self.cmd = service.BlockStorageLogLevelSet(self.app, None)
|
||||
|
||||
def test_block_storage_log_level_set(self):
|
||||
@@ -154,45 +145,45 @@ class TestBlockStorageLogLevelSet(TestService):
|
||||
arglist = [
|
||||
'ERROR',
|
||||
'--host',
|
||||
self.service_log.host,
|
||||
self.log_level.host,
|
||||
'--service',
|
||||
self.service_log.binary,
|
||||
self.log_level.binary,
|
||||
'--log-prefix',
|
||||
self.service_log.prefix,
|
||||
'cinder.api.common',
|
||||
]
|
||||
verifylist = [
|
||||
('level', 'ERROR'),
|
||||
('host', self.service_log.host),
|
||||
('service', self.service_log.binary),
|
||||
('log_prefix', self.service_log.prefix),
|
||||
('host', self.log_level.host),
|
||||
('service', self.log_level.binary),
|
||||
('log_prefix', 'cinder.api.common'),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
self.cmd.take_action(parsed_args)
|
||||
ret = self.cmd.take_action(parsed_args)
|
||||
|
||||
# checking if proper call was made to set log level of services
|
||||
self.service_mock.set_log_levels.assert_called_with(
|
||||
self.assertIsNone(ret)
|
||||
self.volume_sdk_client.set_service_log_levels.assert_called_with(
|
||||
level='ERROR',
|
||||
server=self.service_log.host,
|
||||
binary=self.service_log.binary,
|
||||
prefix=self.service_log.prefix,
|
||||
server=self.log_level.host,
|
||||
binary=self.log_level.binary,
|
||||
prefix='cinder.api.common',
|
||||
)
|
||||
|
||||
def test_block_storage_log_level_set_pre_332(self):
|
||||
arglist = [
|
||||
'ERROR',
|
||||
'--host',
|
||||
self.service_log.host,
|
||||
self.log_level.host,
|
||||
'--service',
|
||||
'cinder-api',
|
||||
'--log-prefix',
|
||||
'cinder_test.api.common',
|
||||
'cinder.api.common',
|
||||
]
|
||||
verifylist = [
|
||||
('level', 'ERROR'),
|
||||
('host', self.service_log.host),
|
||||
('host', self.log_level.host),
|
||||
('service', 'cinder-api'),
|
||||
('log_prefix', 'cinder_test.api.common'),
|
||||
('log_prefix', 'cinder.api.common'),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
@@ -209,7 +200,7 @@ class TestBlockStorageLogLevelSet(TestService):
|
||||
arglist = [
|
||||
'ERROR',
|
||||
'--host',
|
||||
self.service_log.host,
|
||||
self.log_level.host,
|
||||
'--service',
|
||||
'nova-api',
|
||||
'--log-prefix',
|
||||
@@ -217,7 +208,7 @@ class TestBlockStorageLogLevelSet(TestService):
|
||||
]
|
||||
verifylist = [
|
||||
('level', 'ERROR'),
|
||||
('host', self.service_log.host),
|
||||
('host', self.log_level.host),
|
||||
('service', 'nova-api'),
|
||||
('log_prefix', 'cinder.api.common'),
|
||||
]
|
||||
@@ -237,7 +228,7 @@ class TestBlockStorageLogLevelSet(TestService):
|
||||
arglist = [
|
||||
log_level,
|
||||
'--host',
|
||||
self.service_log.host,
|
||||
self.log_level.host,
|
||||
'--service',
|
||||
'cinder-api',
|
||||
'--log-prefix',
|
||||
@@ -245,7 +236,7 @@ class TestBlockStorageLogLevelSet(TestService):
|
||||
]
|
||||
verifylist = [
|
||||
('level', log_level.upper()),
|
||||
('host', self.service_log.host),
|
||||
('host', self.log_level.host),
|
||||
('service', 'cinder-api'),
|
||||
('log_prefix', 'cinder.api.common'),
|
||||
]
|
||||
@@ -263,10 +254,9 @@ class TestBlockStorageLogLevelSet(TestService):
|
||||
|
||||
self.cmd.take_action(parsed_args)
|
||||
|
||||
# checking if proper call was made to set log level of services
|
||||
self.service_mock.set_log_levels.assert_called_with(
|
||||
self.volume_sdk_client.set_service_log_levels.assert_called_with(
|
||||
level=log_level.upper(),
|
||||
server=self.service_log.host,
|
||||
binary=self.service_log.binary,
|
||||
prefix=self.service_log.prefix,
|
||||
server=self.log_level.host,
|
||||
binary=self.log_level.binary,
|
||||
prefix='cinder.api.common',
|
||||
)
|
||||
|
@@ -14,10 +14,9 @@
|
||||
|
||||
"""Block Storage Service action implementations"""
|
||||
|
||||
from cinderclient import api_versions
|
||||
from openstack import utils as sdk_utils
|
||||
from osc_lib.command import command
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
|
||||
from openstackclient.i18n import _
|
||||
|
||||
@@ -33,7 +32,7 @@ class BlockStorageLogLevelList(command.Lister):
|
||||
parser.add_argument(
|
||||
"--host",
|
||||
metavar="<host>",
|
||||
default="",
|
||||
default=None,
|
||||
help=_(
|
||||
"List block storage service log level of specified host "
|
||||
"(name only)"
|
||||
@@ -42,9 +41,9 @@ class BlockStorageLogLevelList(command.Lister):
|
||||
parser.add_argument(
|
||||
"--service",
|
||||
metavar="<service>",
|
||||
default="",
|
||||
default=None,
|
||||
choices=(
|
||||
'',
|
||||
None,
|
||||
'*',
|
||||
'cinder-api',
|
||||
'cinder-volume',
|
||||
@@ -59,13 +58,13 @@ class BlockStorageLogLevelList(command.Lister):
|
||||
parser.add_argument(
|
||||
"--log-prefix",
|
||||
metavar="<log-prefix>",
|
||||
default="",
|
||||
default=None,
|
||||
help="Prefix for the log, e.g. 'sqlalchemy'",
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
service_client = self.app.client_manager.volume
|
||||
volume_client = self.app.client_manager.sdk_connection.volume
|
||||
columns = [
|
||||
"Binary",
|
||||
"Host",
|
||||
@@ -73,29 +72,24 @@ class BlockStorageLogLevelList(command.Lister):
|
||||
"Level",
|
||||
]
|
||||
|
||||
if service_client.api_version < api_versions.APIVersion('3.32'):
|
||||
if not sdk_utils.supports_microversion(volume_client, '3.32'):
|
||||
msg = _(
|
||||
"--os-volume-api-version 3.32 or greater is required to "
|
||||
"support the 'block storage log level list' command"
|
||||
)
|
||||
raise exceptions.CommandError(msg)
|
||||
|
||||
data = service_client.services.get_log_levels(
|
||||
data = []
|
||||
for entry in volume_client.get_service_log_levels(
|
||||
binary=parsed_args.service,
|
||||
server=parsed_args.host,
|
||||
prefix=parsed_args.log_prefix,
|
||||
)
|
||||
):
|
||||
entry_levels = sorted(entry.levels.items(), key=lambda x: x[0])
|
||||
for prefix, level in entry_levels:
|
||||
data.append((entry.binary, entry.host, prefix, level))
|
||||
|
||||
return (
|
||||
columns,
|
||||
(
|
||||
utils.get_item_properties(
|
||||
s,
|
||||
columns,
|
||||
)
|
||||
for s in data
|
||||
),
|
||||
)
|
||||
return (columns, data)
|
||||
|
||||
|
||||
class BlockStorageLogLevelSet(command.Command):
|
||||
@@ -111,12 +105,12 @@ class BlockStorageLogLevelSet(command.Command):
|
||||
metavar="<log-level>",
|
||||
choices=('INFO', 'WARNING', 'ERROR', 'DEBUG'),
|
||||
type=str.upper,
|
||||
help=_("Desired log level."),
|
||||
help=_("Desired log level"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--host",
|
||||
metavar="<host>",
|
||||
default="",
|
||||
default=None,
|
||||
help=_(
|
||||
"Set block storage service log level of specified host "
|
||||
"(name only)"
|
||||
@@ -125,9 +119,9 @@ class BlockStorageLogLevelSet(command.Command):
|
||||
parser.add_argument(
|
||||
"--service",
|
||||
metavar="<service>",
|
||||
default="",
|
||||
default=None,
|
||||
choices=(
|
||||
'',
|
||||
None,
|
||||
'*',
|
||||
'cinder-api',
|
||||
'cinder-volume',
|
||||
@@ -142,22 +136,22 @@ class BlockStorageLogLevelSet(command.Command):
|
||||
parser.add_argument(
|
||||
"--log-prefix",
|
||||
metavar="<log-prefix>",
|
||||
default="",
|
||||
default=None,
|
||||
help="Prefix for the log, e.g. 'sqlalchemy'",
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
service_client = self.app.client_manager.volume
|
||||
volume_client = self.app.client_manager.sdk_connection.volume
|
||||
|
||||
if service_client.api_version < api_versions.APIVersion('3.32'):
|
||||
if not sdk_utils.supports_microversion(volume_client, '3.32'):
|
||||
msg = _(
|
||||
"--os-volume-api-version 3.32 or greater is required to "
|
||||
"support the 'block storage log level set' command"
|
||||
)
|
||||
raise exceptions.CommandError(msg)
|
||||
|
||||
service_client.services.set_log_levels(
|
||||
volume_client.set_service_log_levels(
|
||||
level=parsed_args.level,
|
||||
binary=parsed_args.service,
|
||||
server=parsed_args.host,
|
||||
|
Reference in New Issue
Block a user