compute: Migrate 'server set', 'server unset' commands
Change-Id: I2c249e9ca3952100dcf7f97fcafa879b733d34c6 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
parent
c8621e5b8b
commit
bcaf2ab559
@ -4415,14 +4415,13 @@ class SetServer(command.Command):
|
|||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
compute_client = self.app.client_manager.compute
|
compute_client = self.app.client_manager.sdk_connection.compute
|
||||||
server = utils.find_resource(
|
server = compute_client.find_server(
|
||||||
compute_client.servers,
|
parsed_args.server, ignore_missing=False
|
||||||
parsed_args.server,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if parsed_args.description:
|
if parsed_args.description:
|
||||||
if compute_client.api_version < api_versions.APIVersion("2.19"):
|
if not sdk_utils.supports_microversion(compute_client, '2.19'):
|
||||||
msg = _(
|
msg = _(
|
||||||
'--os-compute-api-version 2.19 or greater is required to '
|
'--os-compute-api-version 2.19 or greater is required to '
|
||||||
'support the --description option'
|
'support the --description option'
|
||||||
@ -4430,7 +4429,7 @@ class SetServer(command.Command):
|
|||||||
raise exceptions.CommandError(msg)
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
if parsed_args.tags:
|
if parsed_args.tags:
|
||||||
if compute_client.api_version < api_versions.APIVersion('2.26'):
|
if not sdk_utils.supports_microversion(compute_client, '2.26'):
|
||||||
msg = _(
|
msg = _(
|
||||||
'--os-compute-api-version 2.26 or greater is required to '
|
'--os-compute-api-version 2.26 or greater is required to '
|
||||||
'support the --tag option'
|
'support the --tag option'
|
||||||
@ -4438,7 +4437,7 @@ class SetServer(command.Command):
|
|||||||
raise exceptions.CommandError(msg)
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
if parsed_args.hostname:
|
if parsed_args.hostname:
|
||||||
if compute_client.api_version < api_versions.APIVersion('2.90'):
|
if not sdk_utils.supports_microversion(compute_client, '2.90'):
|
||||||
msg = _(
|
msg = _(
|
||||||
'--os-compute-api-version 2.90 or greater is required to '
|
'--os-compute-api-version 2.90 or greater is required to '
|
||||||
'support the --hostname option'
|
'support the --hostname option'
|
||||||
@ -4457,30 +4456,32 @@ class SetServer(command.Command):
|
|||||||
update_kwargs['hostname'] = parsed_args.hostname
|
update_kwargs['hostname'] = parsed_args.hostname
|
||||||
|
|
||||||
if update_kwargs:
|
if update_kwargs:
|
||||||
server.update(**update_kwargs)
|
compute_client.update_server(server, **update_kwargs)
|
||||||
|
|
||||||
if parsed_args.properties:
|
if parsed_args.properties:
|
||||||
compute_client.servers.set_meta(server, parsed_args.properties)
|
compute_client.set_server_metadata(
|
||||||
|
server, **parsed_args.properties
|
||||||
|
)
|
||||||
|
|
||||||
if parsed_args.state:
|
if parsed_args.state:
|
||||||
server.reset_state(state=parsed_args.state)
|
compute_client.reset_server_state(server, state=parsed_args.state)
|
||||||
|
|
||||||
if parsed_args.root_password:
|
if parsed_args.root_password:
|
||||||
p1 = getpass.getpass(_('New password: '))
|
p1 = getpass.getpass(_('New password: '))
|
||||||
p2 = getpass.getpass(_('Retype new password: '))
|
p2 = getpass.getpass(_('Retype new password: '))
|
||||||
if p1 == p2:
|
if p1 == p2:
|
||||||
server.change_password(p1)
|
compute_client.change_server_password(server, p1)
|
||||||
else:
|
else:
|
||||||
msg = _("Passwords do not match, password unchanged")
|
msg = _("Passwords do not match, password unchanged")
|
||||||
raise exceptions.CommandError(msg)
|
raise exceptions.CommandError(msg)
|
||||||
elif parsed_args.password:
|
elif parsed_args.password:
|
||||||
server.change_password(parsed_args.password)
|
compute_client.change_server_password(server, parsed_args.password)
|
||||||
elif parsed_args.no_password:
|
elif parsed_args.no_password:
|
||||||
server.clear_password()
|
compute_client.clear_server_password(server)
|
||||||
|
|
||||||
if parsed_args.tags:
|
if parsed_args.tags:
|
||||||
for tag in parsed_args.tags:
|
for tag in parsed_args.tags:
|
||||||
server.add_tag(tag=tag)
|
compute_client.add_tag_to_server(server, tag=tag)
|
||||||
|
|
||||||
|
|
||||||
class ShelveServer(command.Command):
|
class ShelveServer(command.Command):
|
||||||
@ -4995,7 +4996,8 @@ class UnsetServer(command.Command):
|
|||||||
metavar='<server>',
|
metavar='<server>',
|
||||||
help=_('Server (name or ID)'),
|
help=_('Server (name or ID)'),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
property_group = parser.add_mutually_exclusive_group()
|
||||||
|
property_group.add_argument(
|
||||||
'--property',
|
'--property',
|
||||||
metavar='<key>',
|
metavar='<key>',
|
||||||
action='append',
|
action='append',
|
||||||
@ -5006,16 +5008,22 @@ class UnsetServer(command.Command):
|
|||||||
'(repeat option to remove multiple values)'
|
'(repeat option to remove multiple values)'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
property_group.add_argument(
|
||||||
|
'--all-properties',
|
||||||
|
action='store_true',
|
||||||
|
help=_('Remove all properties'),
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--description',
|
'--description',
|
||||||
dest='description',
|
dest='description',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help=_(
|
help=_(
|
||||||
'Unset server description (supported by '
|
'Unset server description '
|
||||||
'--os-compute-api-version 2.19 or above)'
|
'(supported by --os-compute-api-version 2.19 or above)'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
tag_group = parser.add_mutually_exclusive_group()
|
||||||
|
tag_group.add_argument(
|
||||||
'--tag',
|
'--tag',
|
||||||
metavar='<tag>',
|
metavar='<tag>',
|
||||||
action='append',
|
action='append',
|
||||||
@ -5027,32 +5035,40 @@ class UnsetServer(command.Command):
|
|||||||
'(supported by --os-compute-api-version 2.26 or above)'
|
'(supported by --os-compute-api-version 2.26 or above)'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
tag_group.add_argument(
|
||||||
|
'--all-tags',
|
||||||
|
action='store_true',
|
||||||
|
help=_(
|
||||||
|
'Remove all tags '
|
||||||
|
'(supported by --os-compute-api-version 2.26 or above)'
|
||||||
|
),
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
compute_client = self.app.client_manager.compute
|
compute_client = self.app.client_manager.sdk_connection.compute
|
||||||
server = utils.find_resource(
|
|
||||||
compute_client.servers,
|
server = compute_client.find_server(
|
||||||
parsed_args.server,
|
parsed_args.server, ignore_missing=False
|
||||||
)
|
)
|
||||||
|
|
||||||
if parsed_args.properties:
|
if parsed_args.properties or parsed_args.all_properties:
|
||||||
compute_client.servers.delete_meta(server, parsed_args.properties)
|
compute_client.delete_server_metadata(
|
||||||
|
server, parsed_args.properties or None
|
||||||
if parsed_args.description:
|
|
||||||
if compute_client.api_version < api_versions.APIVersion("2.19"):
|
|
||||||
msg = _(
|
|
||||||
'--os-compute-api-version 2.19 or greater is '
|
|
||||||
'required to support the --description option'
|
|
||||||
)
|
|
||||||
raise exceptions.CommandError(msg)
|
|
||||||
compute_client.servers.update(
|
|
||||||
server,
|
|
||||||
description="",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if parsed_args.tags:
|
if parsed_args.description:
|
||||||
if compute_client.api_version < api_versions.APIVersion('2.26'):
|
if not sdk_utils.supports_microversion(compute_client, '2.19'):
|
||||||
|
msg = _(
|
||||||
|
'--os-compute-api-version 2.19 or greater is required to '
|
||||||
|
'support the --description option'
|
||||||
|
)
|
||||||
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
|
compute_client.update_server(server, description="")
|
||||||
|
|
||||||
|
if parsed_args.tags or parsed_args.all_tags:
|
||||||
|
if not sdk_utils.supports_microversion(compute_client, '2.26'):
|
||||||
msg = _(
|
msg = _(
|
||||||
'--os-compute-api-version 2.26 or greater is required to '
|
'--os-compute-api-version 2.26 or greater is required to '
|
||||||
'support the --tag option'
|
'support the --tag option'
|
||||||
@ -5060,7 +5076,10 @@ class UnsetServer(command.Command):
|
|||||||
raise exceptions.CommandError(msg)
|
raise exceptions.CommandError(msg)
|
||||||
|
|
||||||
for tag in parsed_args.tags:
|
for tag in parsed_args.tags:
|
||||||
compute_client.servers.delete_tag(server, tag=tag)
|
compute_client.remove_tag_from_server(server, tag)
|
||||||
|
|
||||||
|
if parsed_args.all_tags:
|
||||||
|
compute_client.remove_tags_from_server(server)
|
||||||
|
|
||||||
|
|
||||||
class UnshelveServer(command.Command):
|
class UnshelveServer(command.Command):
|
||||||
|
@ -7843,62 +7843,60 @@ class TestServerSet(TestServer):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
self.attrs = {
|
self.server = compute_fakes.create_one_sdk_server()
|
||||||
'api_version': None,
|
self.compute_sdk_client.find_server.return_value = self.server
|
||||||
}
|
|
||||||
|
|
||||||
self.methods = {
|
|
||||||
'update': None,
|
|
||||||
'reset_state': None,
|
|
||||||
'change_password': None,
|
|
||||||
'clear_password': None,
|
|
||||||
'add_tag': None,
|
|
||||||
'set_tags': None,
|
|
||||||
}
|
|
||||||
|
|
||||||
self.fake_servers = self.setup_servers_mock(2)
|
|
||||||
|
|
||||||
# Get the command object to test
|
# Get the command object to test
|
||||||
self.cmd = server.SetServer(self.app, None)
|
self.cmd = server.SetServer(self.app, None)
|
||||||
|
|
||||||
def test_server_set_no_option(self):
|
def test_server_set_no_option(self):
|
||||||
arglist = ['foo_vm']
|
arglist = [self.server.id]
|
||||||
verifylist = [('server', 'foo_vm')]
|
verifylist = [('server', self.server.id)]
|
||||||
|
|
||||||
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.assertNotCalled(self.fake_servers[0].update)
|
|
||||||
self.assertNotCalled(self.fake_servers[0].reset_state)
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
self.assertNotCalled(self.fake_servers[0].change_password)
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
self.assertNotCalled(self.servers_mock.set_meta)
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_state(self):
|
def test_server_set_with_state(self):
|
||||||
for index, state in enumerate(['active', 'error']):
|
arglist = [
|
||||||
arglist = [
|
'--state',
|
||||||
'--state',
|
'active',
|
||||||
state,
|
self.server.id,
|
||||||
'foo_vm',
|
]
|
||||||
]
|
verifylist = [
|
||||||
verifylist = [
|
('state', 'active'),
|
||||||
('state', state),
|
('server', self.server.id),
|
||||||
('server', 'foo_vm'),
|
]
|
||||||
]
|
|
||||||
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.fake_servers[index].reset_state.assert_called_once_with(
|
|
||||||
state=state
|
self.compute_sdk_client.reset_server_state.assert_called_once_with(
|
||||||
)
|
self.server, state='active'
|
||||||
self.assertIsNone(result)
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_invalid_state(self):
|
def test_server_set_with_invalid_state(self):
|
||||||
arglist = [
|
arglist = [
|
||||||
'--state',
|
'--state',
|
||||||
'foo_state',
|
'foo_state',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('state', 'foo_state'),
|
('state', 'foo_state'),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
test_utils.ParserException,
|
test_utils.ParserException,
|
||||||
@ -7912,15 +7910,24 @@ class TestServerSet(TestServer):
|
|||||||
arglist = [
|
arglist = [
|
||||||
'--name',
|
'--name',
|
||||||
'foo_name',
|
'foo_name',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('name', 'foo_name'),
|
('name', 'foo_name'),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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.fake_servers[0].update.assert_called_once_with(name='foo_name')
|
|
||||||
|
self.compute_sdk_client.update_server.assert_called_once_with(
|
||||||
|
self.server, name='foo_name'
|
||||||
|
)
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_property(self):
|
def test_server_set_with_property(self):
|
||||||
@ -7929,49 +7936,72 @@ class TestServerSet(TestServer):
|
|||||||
'key1=value1',
|
'key1=value1',
|
||||||
'--property',
|
'--property',
|
||||||
'key2=value2',
|
'key2=value2',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('properties', {'key1': 'value1', 'key2': 'value2'}),
|
('properties', {'key1': 'value1', 'key2': 'value2'}),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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.servers_mock.set_meta.assert_called_once_with(
|
|
||||||
self.fake_servers[0], parsed_args.properties
|
self.compute_sdk_client.set_server_metadata.assert_called_once_with(
|
||||||
|
self.server, key1='value1', key2='value2'
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_password(self):
|
def test_server_set_with_password(self):
|
||||||
arglist = [
|
arglist = [
|
||||||
'--password',
|
'--password',
|
||||||
'foo',
|
'foo',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('password', 'foo'),
|
('password', 'foo'),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
self.cmd.take_action(parsed_args)
|
self.compute_sdk_client.change_server_password.assert_called_once_with(
|
||||||
|
self.server, 'foo'
|
||||||
self.fake_servers[0].change_password.assert_called_once_with('foo')
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_no_password(self):
|
def test_server_set_with_no_password(self):
|
||||||
arglist = [
|
arglist = [
|
||||||
'--no-password',
|
'--no-password',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('no_password', True),
|
('no_password', True),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
self.cmd.take_action(parsed_args)
|
self.compute_sdk_client.clear_server_password.assert_called_once_with(
|
||||||
|
self.server
|
||||||
self.fake_servers[0].clear_password.assert_called_once_with()
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
# TODO(stephenfin): Remove this in a future major version
|
# TODO(stephenfin): Remove this in a future major version
|
||||||
@mock.patch.object(
|
@mock.patch.object(
|
||||||
@ -7980,17 +8010,24 @@ class TestServerSet(TestServer):
|
|||||||
def test_server_set_with_root_password(self, mock_getpass):
|
def test_server_set_with_root_password(self, mock_getpass):
|
||||||
arglist = [
|
arglist = [
|
||||||
'--root-password',
|
'--root-password',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('root_password', True),
|
('root_password', True),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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.fake_servers[0].change_password.assert_called_once_with(
|
|
||||||
mock.sentinel.fake_pass
|
self.compute_sdk_client.change_server_password.assert_called_once_with(
|
||||||
|
self.server, mock.sentinel.fake_pass
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_description(self):
|
def test_server_set_with_description(self):
|
||||||
@ -7999,17 +8036,24 @@ class TestServerSet(TestServer):
|
|||||||
arglist = [
|
arglist = [
|
||||||
'--description',
|
'--description',
|
||||||
'foo_description',
|
'foo_description',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('description', 'foo_description'),
|
('description', 'foo_description'),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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.fake_servers[0].update.assert_called_once_with(
|
|
||||||
description='foo_description'
|
self.compute_sdk_client.update_server.assert_called_once_with(
|
||||||
|
self.server, description='foo_description'
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_description_pre_v219(self):
|
def test_server_set_with_description_pre_v219(self):
|
||||||
@ -8018,12 +8062,13 @@ class TestServerSet(TestServer):
|
|||||||
arglist = [
|
arglist = [
|
||||||
'--description',
|
'--description',
|
||||||
'foo_description',
|
'foo_description',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('description', 'foo_description'),
|
('description', 'foo_description'),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exceptions.CommandError, self.cmd.take_action, parsed_args
|
exceptions.CommandError, self.cmd.take_action, parsed_args
|
||||||
@ -8037,22 +8082,27 @@ class TestServerSet(TestServer):
|
|||||||
'tag1',
|
'tag1',
|
||||||
'--tag',
|
'--tag',
|
||||||
'tag2',
|
'tag2',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('tags', ['tag1', 'tag2']),
|
('tags', ['tag1', 'tag2']),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
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.fake_servers[0].add_tag.assert_has_calls(
|
self.compute_sdk_client.add_tag_to_server.assert_has_calls(
|
||||||
[
|
[
|
||||||
mock.call(tag='tag1'),
|
mock.call(self.server, tag='tag1'),
|
||||||
mock.call(tag='tag2'),
|
mock.call(self.server, tag='tag2'),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_tag_pre_v226(self):
|
def test_server_set_with_tag_pre_v226(self):
|
||||||
@ -8063,14 +8113,14 @@ class TestServerSet(TestServer):
|
|||||||
'tag1',
|
'tag1',
|
||||||
'--tag',
|
'--tag',
|
||||||
'tag2',
|
'tag2',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('tags', ['tag1', 'tag2']),
|
('tags', ['tag1', 'tag2']),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
ex = self.assertRaises(
|
ex = self.assertRaises(
|
||||||
exceptions.CommandError, self.cmd.take_action, parsed_args
|
exceptions.CommandError, self.cmd.take_action, parsed_args
|
||||||
)
|
)
|
||||||
@ -8084,17 +8134,24 @@ class TestServerSet(TestServer):
|
|||||||
arglist = [
|
arglist = [
|
||||||
'--hostname',
|
'--hostname',
|
||||||
'foo-hostname',
|
'foo-hostname',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('hostname', 'foo-hostname'),
|
('hostname', 'foo-hostname'),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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.fake_servers[0].update.assert_called_once_with(
|
|
||||||
hostname='foo-hostname'
|
self.compute_sdk_client.update_server.assert_called_once_with(
|
||||||
|
self.server, hostname='foo-hostname'
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.set_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.reset_server_state.assert_not_called()
|
||||||
|
self.compute_sdk_client.change_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.clear_server_password.assert_not_called()
|
||||||
|
self.compute_sdk_client.add_tag_to_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_set_with_hostname_pre_v290(self):
|
def test_server_set_with_hostname_pre_v290(self):
|
||||||
@ -8103,11 +8160,11 @@ class TestServerSet(TestServer):
|
|||||||
arglist = [
|
arglist = [
|
||||||
'--hostname',
|
'--hostname',
|
||||||
'foo-hostname',
|
'foo-hostname',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('hostname', 'foo-hostname'),
|
('hostname', 'foo-hostname'),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
@ -8718,21 +8775,29 @@ class TestServerUnset(TestServer):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
self.fake_server = self.setup_servers_mock(1)[0]
|
self.server = compute_fakes.create_one_sdk_server()
|
||||||
|
self.compute_sdk_client.find_server.return_value = self.server
|
||||||
|
|
||||||
# Get the command object to test
|
# Get the command object to test
|
||||||
self.cmd = server.UnsetServer(self.app, None)
|
self.cmd = server.UnsetServer(self.app, None)
|
||||||
|
|
||||||
def test_server_unset_no_option(self):
|
def test_server_unset_no_option(self):
|
||||||
arglist = [
|
arglist = [
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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.assertNotCalled(self.servers_mock.delete_meta)
|
|
||||||
|
self.compute_sdk_client.find_server(
|
||||||
|
self.server.id, ignore_missing=False
|
||||||
|
)
|
||||||
|
self.compute_sdk_client.delete_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.remove_tag_from_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_unset_with_property(self):
|
def test_server_unset_with_property(self):
|
||||||
@ -8741,17 +8806,25 @@ class TestServerUnset(TestServer):
|
|||||||
'key1',
|
'key1',
|
||||||
'--property',
|
'--property',
|
||||||
'key2',
|
'key2',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('properties', ['key1', 'key2']),
|
('properties', ['key1', 'key2']),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
|
|
||||||
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.servers_mock.delete_meta.assert_called_once_with(
|
|
||||||
self.fake_server, ['key1', 'key2']
|
self.compute_sdk_client.find_server(
|
||||||
|
self.server.id, ignore_missing=False
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.delete_server_metadata.assert_called_once_with(
|
||||||
|
self.server,
|
||||||
|
['key1', 'key2'],
|
||||||
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
self.compute_sdk_client.remove_tag_from_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_unset_with_description(self):
|
def test_server_unset_with_description(self):
|
||||||
@ -8760,19 +8833,24 @@ class TestServerUnset(TestServer):
|
|||||||
|
|
||||||
arglist = [
|
arglist = [
|
||||||
'--description',
|
'--description',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('description', True),
|
('description', True),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
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.servers_mock.update.assert_called_once_with(
|
self.compute_sdk_client.find_server(
|
||||||
self.fake_server, description=""
|
self.server.id, ignore_missing=False
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.update_server.assert_called_once_with(
|
||||||
|
self.server, description=''
|
||||||
|
)
|
||||||
|
self.compute_sdk_client.delete_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.remove_tag_from_server.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_server_unset_with_description_pre_v219(self):
|
def test_server_unset_with_description_pre_v219(self):
|
||||||
@ -8781,11 +8859,11 @@ class TestServerUnset(TestServer):
|
|||||||
|
|
||||||
arglist = [
|
arglist = [
|
||||||
'--description',
|
'--description',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('description', True),
|
('description', True),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
@ -8804,23 +8882,28 @@ class TestServerUnset(TestServer):
|
|||||||
'tag1',
|
'tag1',
|
||||||
'--tag',
|
'--tag',
|
||||||
'tag2',
|
'tag2',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('tags', ['tag1', 'tag2']),
|
('tags', ['tag1', 'tag2']),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
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.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
self.servers_mock.delete_tag.assert_has_calls(
|
self.compute_sdk_client.find_server(
|
||||||
|
self.server.id, ignore_missing=False
|
||||||
|
)
|
||||||
|
self.compute_sdk_client.remove_tag_from_server.assert_has_calls(
|
||||||
[
|
[
|
||||||
mock.call(self.fake_server, tag='tag1'),
|
mock.call(self.server, 'tag1'),
|
||||||
mock.call(self.fake_server, tag='tag2'),
|
mock.call(self.server, 'tag2'),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
self.compute_sdk_client.delete_server_metadata.assert_not_called()
|
||||||
|
self.compute_sdk_client.update_server.assert_not_called()
|
||||||
|
|
||||||
def test_server_unset_with_tag_pre_v226(self):
|
def test_server_unset_with_tag_pre_v226(self):
|
||||||
self.set_compute_api_version('2.25')
|
self.set_compute_api_version('2.25')
|
||||||
@ -8830,11 +8913,11 @@ class TestServerUnset(TestServer):
|
|||||||
'tag1',
|
'tag1',
|
||||||
'--tag',
|
'--tag',
|
||||||
'tag2',
|
'tag2',
|
||||||
'foo_vm',
|
self.server.id,
|
||||||
]
|
]
|
||||||
verifylist = [
|
verifylist = [
|
||||||
('tags', ['tag1', 'tag2']),
|
('tags', ['tag1', 'tag2']),
|
||||||
('server', 'foo_vm'),
|
('server', self.server.id),
|
||||||
]
|
]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
The ``server set`` and ``server unset`` commands have been migrated to SDK.
|
@ -7,7 +7,7 @@ pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
|||||||
cryptography>=2.7 # BSD/Apache-2.0
|
cryptography>=2.7 # BSD/Apache-2.0
|
||||||
cliff>=3.5.0 # Apache-2.0
|
cliff>=3.5.0 # Apache-2.0
|
||||||
iso8601>=0.1.11 # MIT
|
iso8601>=0.1.11 # MIT
|
||||||
openstacksdk>=2.0.0 # Apache-2.0
|
openstacksdk>=3.2.0 # Apache-2.0
|
||||||
osc-lib>=2.3.0 # Apache-2.0
|
osc-lib>=2.3.0 # Apache-2.0
|
||||||
oslo.i18n>=3.15.3 # Apache-2.0
|
oslo.i18n>=3.15.3 # Apache-2.0
|
||||||
python-keystoneclient>=3.22.0 # Apache-2.0
|
python-keystoneclient>=3.22.0 # Apache-2.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user