compute: Fix weird option definition for 'server ssh'
argparse allows you to specify multiple options for a given argument when declaring the argument. For some reason, we weren't doing this for the 'server ssh' command. There's no apparent reason for doing things this way and it's been that way since the beginning (2013) so let's not do that. We also add unit tests since they were missing and should exist. Change-Id: I67a9e6516d7057266210cd4083e9ddeb1cfaa5de Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
This commit is contained in:
parent
c10a4cd966
commit
ba69870d86
@ -4462,51 +4462,26 @@ class SshServer(command.Command):
|
|||||||
help=_('Server (name or ID)'),
|
help=_('Server (name or ID)'),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--login',
|
'--login', '-l',
|
||||||
metavar='<login-name>',
|
metavar='<login-name>',
|
||||||
help=_('Login name (ssh -l option)'),
|
help=_('Login name (ssh -l option)'),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-l',
|
'--port', '-p',
|
||||||
dest='login',
|
|
||||||
metavar='<login-name>',
|
|
||||||
help=argparse.SUPPRESS,
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
'--port',
|
|
||||||
metavar='<port>',
|
metavar='<port>',
|
||||||
type=int,
|
type=int,
|
||||||
help=_('Destination port (ssh -p option)'),
|
help=_('Destination port (ssh -p option)'),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-p',
|
'--identity', '-i',
|
||||||
metavar='<port>',
|
|
||||||
dest='port',
|
|
||||||
type=int,
|
|
||||||
help=argparse.SUPPRESS,
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
'--identity',
|
|
||||||
metavar='<keyfile>',
|
metavar='<keyfile>',
|
||||||
help=_('Private key file (ssh -i option)'),
|
help=_('Private key file (ssh -i option)'),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-i',
|
'--option', '-o',
|
||||||
metavar='<filename>',
|
|
||||||
dest='identity',
|
|
||||||
help=argparse.SUPPRESS,
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
'--option',
|
|
||||||
metavar='<config-options>',
|
metavar='<config-options>',
|
||||||
help=_('Options in ssh_config(5) format (ssh -o option)'),
|
help=_('Options in ssh_config(5) format (ssh -o option)'),
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
|
||||||
'-o',
|
|
||||||
metavar='<option>',
|
|
||||||
dest='option',
|
|
||||||
help=argparse.SUPPRESS,
|
|
||||||
)
|
|
||||||
ip_group = parser.add_mutually_exclusive_group()
|
ip_group = parser.add_mutually_exclusive_group()
|
||||||
ip_group.add_argument(
|
ip_group.add_argument(
|
||||||
'-4',
|
'-4',
|
||||||
|
@ -8265,6 +8265,83 @@ class TestServerShow(TestServer):
|
|||||||
exceptions.CommandError, self.cmd.take_action, parsed_args)
|
exceptions.CommandError, self.cmd.take_action, parsed_args)
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('openstackclient.compute.v2.server.os.system')
|
||||||
|
class TestServerSsh(TestServer):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.cmd = server.SshServer(self.app, None)
|
||||||
|
|
||||||
|
self.app.client_manager.auth_ref = mock.Mock()
|
||||||
|
self.app.client_manager.auth_ref.username = 'cloud'
|
||||||
|
|
||||||
|
self.attrs = {
|
||||||
|
'addresses': {
|
||||||
|
'public': [
|
||||||
|
{
|
||||||
|
'addr': '192.168.1.30',
|
||||||
|
'OS-EXT-IPS-MAC:mac_addr': '00:0c:29:0d:11:74',
|
||||||
|
'OS-EXT-IPS:type': 'fixed',
|
||||||
|
'version': 4,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
self.server = compute_fakes.FakeServer.create_one_server(
|
||||||
|
attrs=self.attrs, methods=self.methods,
|
||||||
|
)
|
||||||
|
self.servers_mock.get.return_value = self.server
|
||||||
|
|
||||||
|
def test_server_ssh_no_opts(self, mock_exec):
|
||||||
|
arglist = [
|
||||||
|
self.server.name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('server', self.server.name),
|
||||||
|
('login', None),
|
||||||
|
('port', None),
|
||||||
|
('identity', None),
|
||||||
|
('option', None),
|
||||||
|
('ipv4', False),
|
||||||
|
('ipv6', False),
|
||||||
|
('address_type', 'public'),
|
||||||
|
('verbose', False),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.assertIsNone(result)
|
||||||
|
mock_exec.assert_called_once_with('ssh cloud@192.168.1.30')
|
||||||
|
|
||||||
|
def test_server_ssh_opts(self, mock_exec):
|
||||||
|
arglist = [
|
||||||
|
self.server.name,
|
||||||
|
'-l', 'username',
|
||||||
|
'-p', '2222',
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('server', self.server.name),
|
||||||
|
('login', 'username'),
|
||||||
|
('port', 2222),
|
||||||
|
('identity', None),
|
||||||
|
('option', None),
|
||||||
|
('ipv4', False),
|
||||||
|
('ipv6', False),
|
||||||
|
('address_type', 'public'),
|
||||||
|
('verbose', False),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.assertIsNone(result)
|
||||||
|
mock_exec.assert_called_once_with(
|
||||||
|
'ssh -p 2222 username@192.168.1.30'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestServerStart(TestServer):
|
class TestServerStart(TestServer):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user