Merge "volume: Migrate 'service *' to SDK"

This commit is contained in:
Zuul
2025-05-19 15:15:32 +00:00
committed by Gerrit Code Review
4 changed files with 231 additions and 318 deletions
openstackclient

@ -12,108 +12,83 @@
# under the License. # under the License.
# #
from unittest import mock
from openstack.block_storage.v2 import service as _service
from openstack.test import fakes as sdk_fakes
from osc_lib import exceptions from osc_lib import exceptions
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
from openstackclient.volume.v2 import service from openstackclient.volume.v2 import service
class TestService(volume_fakes.TestVolume): class TestServiceList(volume_fakes.TestVolume):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
# Get a shortcut to the ServiceManager Mock self.service = sdk_fakes.generate_fake_resource(_service.Service)
self.service_mock = self.volume_client.services self.volume_sdk_client.services.return_value = [self.service]
self.service_mock.reset_mock()
class TestServiceList(TestService):
# The service to be listed
services = volume_fakes.create_one_service()
def setUp(self):
super().setUp()
self.service_mock.list.return_value = [self.services]
# Get the command object to test
self.cmd = service.ListService(self.app, None) self.cmd = service.ListService(self.app, None)
def test_service_list(self): def test_service_list(self):
arglist = [ arglist = [
'--host', '--host',
self.services.host, self.service.host,
'--service', '--service',
self.services.binary, self.service.binary,
] ]
verifylist = [ verifylist = [
('host', self.services.host), ('host', self.service.host),
('service', self.services.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
expected_columns = [ expected_columns = (
'Binary', 'Binary',
'Host', 'Host',
'Zone', 'Zone',
'Status', 'Status',
'State', 'State',
'Updated At', 'Updated At',
] )
# confirming if all expected columns are present in the result.
self.assertEqual(expected_columns, columns)
datalist = ( datalist = (
( (
self.services.binary, self.service.binary,
self.services.host, self.service.host,
self.services.zone, self.service.availability_zone,
self.services.status, self.service.status,
self.services.state, self.service.state,
self.services.updated_at, self.service.updated_at,
), ),
) )
self.assertEqual(expected_columns, columns)
# confirming if all expected values are present in the result.
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
self.volume_sdk_client.services.assert_called_with(
# checking if proper call was made to list services host=self.service.host,
self.service_mock.list.assert_called_with( binary=self.service.binary,
self.services.host,
self.services.binary,
) )
# checking if prohibited columns are present in output
self.assertNotIn("Disabled Reason", columns)
self.assertNotIn(self.services.disabled_reason, tuple(data))
def test_service_list_with_long_option(self): def test_service_list_with_long_option(self):
arglist = [ arglist = [
'--host', '--host',
self.services.host, self.service.host,
'--service', '--service',
self.services.binary, self.service.binary,
'--long', '--long',
] ]
verifylist = [ verifylist = [
('host', self.services.host), ('host', self.service.host),
('service', self.services.binary), ('service', self.service.binary),
('long', True), ('long', True),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
expected_columns = [ expected_columns = (
'Binary', 'Binary',
'Host', 'Host',
'Zone', 'Zone',
@ -121,41 +96,34 @@ class TestServiceList(TestService):
'State', 'State',
'Updated At', 'Updated At',
'Disabled Reason', 'Disabled Reason',
] )
# confirming if all expected columns are present in the result.
self.assertEqual(expected_columns, columns)
datalist = ( datalist = (
( (
self.services.binary, self.service.binary,
self.services.host, self.service.host,
self.services.zone, self.service.availability_zone,
self.services.status, self.service.status,
self.services.state, self.service.state,
self.services.updated_at, self.service.updated_at,
self.services.disabled_reason, self.service.disabled_reason,
), ),
) )
self.assertEqual(expected_columns, columns)
# confirming if all expected values are present in the result.
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
self.volume_sdk_client.services.assert_called_with(
self.service_mock.list.assert_called_with( host=self.service.host,
self.services.host, binary=self.service.binary,
self.services.binary,
) )
class TestServiceSet(TestService): class TestServiceSet(volume_fakes.TestVolume):
service = volume_fakes.create_one_service()
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.service_mock.enable.return_value = self.service self.service = sdk_fakes.generate_fake_resource(_service.Service)
self.service_mock.disable.return_value = self.service self.service.enable = mock.Mock(autospec=True)
self.service_mock.disable_log_reason.return_value = self.service self.service.disable = mock.Mock(autospec=True)
self.volume_sdk_client.find_service.return_value = self.service
self.cmd = service.SetService(self.app, None) self.cmd = service.SetService(self.app, None)
@ -171,9 +139,8 @@ class TestServiceSet(TestService):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.enable.assert_not_called() self.service.enable.assert_not_called()
self.service_mock.disable.assert_not_called() self.service.disable.assert_not_called()
self.service_mock.disable_log_reason.assert_not_called()
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_enable(self): def test_service_set_enable(self):
@ -191,11 +158,8 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.enable.assert_called_with( self.service.enable.assert_called_with(self.volume_sdk_client)
self.service.host, self.service.binary self.service.disable.assert_not_called()
)
self.service_mock.disable.assert_not_called()
self.service_mock.disable_log_reason.assert_not_called()
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_disable(self): def test_service_set_disable(self):
@ -213,11 +177,10 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.disable.assert_called_with( self.service.enable.assert_not_called()
self.service.host, self.service.binary self.service.disable.assert_called_with(
self.volume_sdk_client, reason=None
) )
self.service_mock.enable.assert_not_called()
self.service_mock.disable_log_reason.assert_not_called()
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_disable_with_reason(self): def test_service_set_disable_with_reason(self):
@ -239,8 +202,9 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.disable_log_reason.assert_called_with( self.service.enable.assert_not_called()
self.service.host, self.service.binary, reason self.service.disable.assert_called_with(
self.volume_sdk_client, reason=reason
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -258,6 +222,7 @@ class TestServiceSet(TestService):
('service', self.service.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
try: try:
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail("CommandError should be raised.") self.fail("CommandError should be raised.")
@ -284,6 +249,7 @@ class TestServiceSet(TestService):
('service', self.service.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
try: try:
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail("CommandError should be raised.") self.fail("CommandError should be raised.")

@ -12,109 +12,83 @@
# under the License. # under the License.
# #
from cinderclient import api_versions from unittest import mock
from openstack.block_storage.v3 import service as _service
from openstack.test import fakes as sdk_fakes
from osc_lib import exceptions from osc_lib import exceptions
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
from openstackclient.volume.v3 import service from openstackclient.volume.v3 import service
class TestService(volume_fakes.TestVolume): class TestServiceList(volume_fakes.TestVolume):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
# Get a shortcut to the ServiceManager Mock self.service = sdk_fakes.generate_fake_resource(_service.Service)
self.service_mock = self.volume_client.services self.volume_sdk_client.services.return_value = [self.service]
self.service_mock.reset_mock()
class TestServiceList(TestService):
# The service to be listed
services = volume_fakes.create_one_service()
def setUp(self):
super().setUp()
self.service_mock.list.return_value = [self.services]
# Get the command object to test
self.cmd = service.ListService(self.app, None) self.cmd = service.ListService(self.app, None)
def test_service_list(self): def test_service_list(self):
arglist = [ arglist = [
'--host', '--host',
self.services.host, self.service.host,
'--service', '--service',
self.services.binary, self.service.binary,
] ]
verifylist = [ verifylist = [
('host', self.services.host), ('host', self.service.host),
('service', self.services.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
expected_columns = [ expected_columns = (
'Binary', 'Binary',
'Host', 'Host',
'Zone', 'Zone',
'Status', 'Status',
'State', 'State',
'Updated At', 'Updated At',
] )
# confirming if all expected columns are present in the result.
self.assertEqual(expected_columns, columns)
datalist = ( datalist = (
( (
self.services.binary, self.service.binary,
self.services.host, self.service.host,
self.services.zone, self.service.availability_zone,
self.services.status, self.service.status,
self.services.state, self.service.state,
self.services.updated_at, self.service.updated_at,
), ),
) )
self.assertEqual(expected_columns, columns)
# confirming if all expected values are present in the result.
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
self.volume_sdk_client.services.assert_called_with(
# checking if proper call was made to list services host=self.service.host,
self.service_mock.list.assert_called_with( binary=self.service.binary,
self.services.host,
self.services.binary,
) )
# checking if prohibited columns are present in output
self.assertNotIn("Disabled Reason", columns)
self.assertNotIn(self.services.disabled_reason, tuple(data))
def test_service_list_with_long_option(self): def test_service_list_with_long_option(self):
arglist = [ arglist = [
'--host', '--host',
self.services.host, self.service.host,
'--service', '--service',
self.services.binary, self.service.binary,
'--long', '--long',
] ]
verifylist = [ verifylist = [
('host', self.services.host), ('host', self.service.host),
('service', self.services.binary), ('service', self.service.binary),
('long', True), ('long', True),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
expected_columns = [ expected_columns = (
'Binary', 'Binary',
'Host', 'Host',
'Zone', 'Zone',
@ -122,55 +96,43 @@ class TestServiceList(TestService):
'State', 'State',
'Updated At', 'Updated At',
'Disabled Reason', 'Disabled Reason',
] )
# confirming if all expected columns are present in the result.
self.assertEqual(expected_columns, columns)
datalist = ( datalist = (
( (
self.services.binary, self.service.binary,
self.services.host, self.service.host,
self.services.zone, self.service.availability_zone,
self.services.status, self.service.status,
self.services.state, self.service.state,
self.services.updated_at, self.service.updated_at,
self.services.disabled_reason, self.service.disabled_reason,
), ),
) )
self.assertEqual(expected_columns, columns)
# confirming if all expected values are present in the result.
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
self.volume_sdk_client.services.assert_called_with(
self.service_mock.list.assert_called_with( host=self.service.host,
self.services.host, binary=self.service.binary,
self.services.binary,
) )
def test_service_list_with_cluster(self): def test_service_list_with_cluster(self):
self.volume_client.api_version = api_versions.APIVersion('3.7') self.set_volume_api_version('3.7')
cluster = {'cluster': 'fake-cluster'}
cluster_service = volume_fakes.create_one_service(attrs=cluster)
self.service_mock.list.return_value = [cluster_service]
arglist = [ arglist = [
'--host', '--host',
cluster_service.host, self.service.host,
'--service', '--service',
cluster_service.binary, self.service.binary,
] ]
verifylist = [ verifylist = [
('host', cluster_service.host), ('host', self.service.host),
('service', cluster_service.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
expected_columns = [ expected_columns = (
'Binary', 'Binary',
'Host', 'Host',
'Zone', 'Zone',
@ -178,60 +140,43 @@ class TestServiceList(TestService):
'State', 'State',
'Updated At', 'Updated At',
'Cluster', 'Cluster',
] )
# confirming if all expected columns are present in the result.
self.assertEqual(expected_columns, columns)
datalist = ( datalist = (
( (
cluster_service.binary, self.service.binary,
cluster_service.host, self.service.host,
cluster_service.zone, self.service.availability_zone,
cluster_service.status, self.service.status,
cluster_service.state, self.service.state,
cluster_service.updated_at, self.service.updated_at,
cluster_service.cluster, self.service.cluster,
), ),
) )
self.assertEqual(expected_columns, columns)
# confirming if all expected values are present in the result.
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
self.volume_sdk_client.services.assert_called_with(
# checking if proper call was made to list services host=self.service.host,
self.service_mock.list.assert_called_with( binary=self.service.binary,
cluster_service.host,
cluster_service.binary,
) )
# checking if prohibited columns are present in output
self.assertNotIn("Disabled Reason", columns)
self.assertNotIn(cluster_service.disabled_reason, tuple(data))
def test_service_list_with_backend_state(self): def test_service_list_with_backend_state(self):
self.volume_client.api_version = api_versions.APIVersion('3.49') self.set_volume_api_version('3.49')
backend_state = {'cluster': 'fake-cluster', 'backend_state': 'up'}
backend_service = volume_fakes.create_one_service(attrs=backend_state)
self.service_mock.list.return_value = [backend_service]
arglist = [ arglist = [
'--host', '--host',
backend_service.host, self.service.host,
'--service', '--service',
backend_service.binary, self.service.binary,
] ]
verifylist = [ verifylist = [
('host', backend_service.host), ('host', self.service.host),
('service', backend_service.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action()
# returns a tuple containing the column names and an iterable
# containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
expected_columns = [ expected_columns = (
'Binary', 'Binary',
'Host', 'Host',
'Zone', 'Zone',
@ -240,47 +185,35 @@ class TestServiceList(TestService):
'Updated At', 'Updated At',
'Cluster', 'Cluster',
'Backend State', 'Backend State',
] )
# confirming if all expected columns are present in the result.
self.assertEqual(expected_columns, columns)
datalist = ( datalist = (
( (
backend_service.binary, self.service.binary,
backend_service.host, self.service.host,
backend_service.zone, self.service.availability_zone,
backend_service.status, self.service.status,
backend_service.state, self.service.state,
backend_service.updated_at, self.service.updated_at,
backend_service.cluster, self.service.cluster,
backend_service.backend_state, self.service.backend_state,
), ),
) )
self.assertEqual(expected_columns, columns)
# confirming if all expected values are present in the result.
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
self.volume_sdk_client.services.assert_called_with(
# checking if proper call was made to list services host=self.service.host,
self.service_mock.list.assert_called_with( binary=self.service.binary,
backend_service.host,
backend_service.binary,
) )
# checking if prohibited columns are present in output
self.assertNotIn("Disabled Reason", columns)
self.assertNotIn(backend_service.disabled_reason, tuple(data))
class TestServiceSet(TestService):
service = volume_fakes.create_one_service()
class TestServiceSet(volume_fakes.TestVolume):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.service_mock.enable.return_value = self.service self.service = sdk_fakes.generate_fake_resource(_service.Service)
self.service_mock.disable.return_value = self.service self.service.enable = mock.Mock(autospec=True)
self.service_mock.disable_log_reason.return_value = self.service self.service.disable = mock.Mock(autospec=True)
self.volume_sdk_client.find_service.return_value = self.service
self.cmd = service.SetService(self.app, None) self.cmd = service.SetService(self.app, None)
@ -296,9 +229,8 @@ class TestServiceSet(TestService):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.enable.assert_not_called() self.service.enable.assert_not_called()
self.service_mock.disable.assert_not_called() self.service.disable.assert_not_called()
self.service_mock.disable_log_reason.assert_not_called()
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_enable(self): def test_service_set_enable(self):
@ -316,11 +248,8 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.enable.assert_called_with( self.service.enable.assert_called_with(self.volume_sdk_client)
self.service.host, self.service.binary self.service.disable.assert_not_called()
)
self.service_mock.disable.assert_not_called()
self.service_mock.disable_log_reason.assert_not_called()
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_disable(self): def test_service_set_disable(self):
@ -338,11 +267,10 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.disable.assert_called_with( self.service.enable.assert_not_called()
self.service.host, self.service.binary self.service.disable.assert_called_with(
self.volume_sdk_client, reason=None
) )
self.service_mock.enable.assert_not_called()
self.service_mock.disable_log_reason.assert_not_called()
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_disable_with_reason(self): def test_service_set_disable_with_reason(self):
@ -364,8 +292,9 @@ class TestServiceSet(TestService):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.service_mock.disable_log_reason.assert_called_with( self.service.enable.assert_not_called()
self.service.host, self.service.binary, reason self.service.disable.assert_called_with(
self.volume_sdk_client, reason=reason
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -383,6 +312,7 @@ class TestServiceSet(TestService):
('service', self.service.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
try: try:
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail("CommandError should be raised.") self.fail("CommandError should be raised.")
@ -409,6 +339,7 @@ class TestServiceSet(TestService):
('service', self.service.binary), ('service', self.service.binary),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
try: try:
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail("CommandError should be raised.") self.fail("CommandError should be raised.")

@ -45,33 +45,34 @@ class ListService(command.Lister):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
service_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
columns: tuple[str, ...] = (
"binary",
"host",
"availability_zone",
"status",
"state",
"updated_at",
)
column_names: tuple[str, ...] = (
"Binary",
"Host",
"Zone",
"Status",
"State",
"Updated At",
)
if parsed_args.long: if parsed_args.long:
columns = [ columns += ("disabled_reason",)
"Binary", column_names += ("Disabled Reason",)
"Host",
"Zone",
"Status",
"State",
"Updated At",
"Disabled Reason",
]
else:
columns = [
"Binary",
"Host",
"Zone",
"Status",
"State",
"Updated At",
]
data = service_client.services.list( data = volume_client.services(
parsed_args.host, parsed_args.service host=parsed_args.host, binary=parsed_args.service
) )
return ( return (
columns, column_names,
( (
utils.get_item_properties( utils.get_item_properties(
s, s,
@ -87,7 +88,11 @@ class SetService(command.Command):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super().get_parser(prog_name) parser = super().get_parser(prog_name)
parser.add_argument("host", metavar="<host>", help=_("Name of host")) parser.add_argument(
"host",
metavar="<host>",
help=_("Name of host"),
)
parser.add_argument( parser.add_argument(
"service", "service",
metavar="<service>", metavar="<service>",
@ -118,19 +123,17 @@ class SetService(command.Command):
) )
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
service_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
service = volume_client.find_service(
host=parsed_args.host, service=parsed_args.service
)
if parsed_args.enable: if parsed_args.enable:
service_client.services.enable( service.enable(volume_client)
parsed_args.host, parsed_args.service
)
if parsed_args.disable: if parsed_args.disable:
if parsed_args.disable_reason: service.disable(
service_client.services.disable_log_reason( volume_client,
parsed_args.host, reason=parsed_args.disable_reason,
parsed_args.service, )
parsed_args.disable_reason,
)
else:
service_client.services.disable(
parsed_args.host, parsed_args.service
)

@ -14,7 +14,7 @@
"""Service action implementations""" """Service action implementations"""
from cinderclient import api_versions from openstack import utils as sdk_utils
from osc_lib.command import command from osc_lib.command import command
from osc_lib import exceptions from osc_lib import exceptions
from osc_lib import utils from osc_lib import utils
@ -46,29 +46,40 @@ class ListService(command.Lister):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
service_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
columns = [ columns: tuple[str, ...] = (
"binary",
"host",
"availability_zone",
"status",
"state",
"updated_at",
)
column_names: tuple[str, ...] = (
"Binary", "Binary",
"Host", "Host",
"Zone", "Zone",
"Status", "Status",
"State", "State",
"Updated At", "Updated At",
] )
if service_client.api_version >= api_versions.APIVersion('3.7'): if sdk_utils.supports_microversion(volume_client, '3.7'):
columns.append("Cluster") columns += ("cluster",)
if service_client.api_version >= api_versions.APIVersion('3.49'): column_names += ("Cluster",)
columns.append("Backend State") if sdk_utils.supports_microversion(volume_client, '3.49'):
columns += ("backend_state",)
column_names += ("Backend State",)
if parsed_args.long: if parsed_args.long:
columns.append("Disabled Reason") columns += ("disabled_reason",)
column_names += ("Disabled Reason",)
data = service_client.services.list( data = volume_client.services(
parsed_args.host, parsed_args.service host=parsed_args.host, binary=parsed_args.service
) )
return ( return (
columns, column_names,
( (
utils.get_item_properties( utils.get_item_properties(
s, s,
@ -84,7 +95,11 @@ class SetService(command.Command):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super().get_parser(prog_name) parser = super().get_parser(prog_name)
parser.add_argument("host", metavar="<host>", help=_("Name of host")) parser.add_argument(
"host",
metavar="<host>",
help=_("Name of host"),
)
parser.add_argument( parser.add_argument(
"service", "service",
metavar="<service>", metavar="<service>",
@ -115,19 +130,17 @@ class SetService(command.Command):
) )
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
service_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
service = volume_client.find_service(
host=parsed_args.host, service=parsed_args.service
)
if parsed_args.enable: if parsed_args.enable:
service_client.services.enable( service.enable(volume_client)
parsed_args.host, parsed_args.service
)
if parsed_args.disable: if parsed_args.disable:
if parsed_args.disable_reason: service.disable(
service_client.services.disable_log_reason( volume_client,
parsed_args.host, reason=parsed_args.disable_reason,
parsed_args.service, )
parsed_args.disable_reason,
)
else:
service_client.services.disable(
parsed_args.host, parsed_args.service
)