Add server ssh command
Change-Id: I9317ad6a47818d5479a046b4be8c5adbbce613ef
This commit is contained in:
parent
65d2a14e3e
commit
978c2e7dec
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
"""Compute v2 Server action implementations"""
|
"""Compute v2 Server action implementations"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
import getpass
|
import getpass
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@ -977,6 +978,164 @@ class ShowServer(show.ShowOne):
|
|||||||
return zip(*sorted(data.iteritems()))
|
return zip(*sorted(data.iteritems()))
|
||||||
|
|
||||||
|
|
||||||
|
class SshServer(command.Command):
|
||||||
|
"""Ssh to server"""
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__ + '.SshServer')
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(SshServer, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'server',
|
||||||
|
metavar='<server>',
|
||||||
|
help='Server (name or ID)',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--login',
|
||||||
|
metavar='<login-name>',
|
||||||
|
help='Login name (ssh -l option)',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-l',
|
||||||
|
metavar='<login-name>',
|
||||||
|
help=argparse.SUPPRESS,
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--port',
|
||||||
|
metavar='<port>',
|
||||||
|
type=int,
|
||||||
|
help='Destination port (ssh -p option)',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-p',
|
||||||
|
metavar='<port>',
|
||||||
|
dest='port',
|
||||||
|
type=int,
|
||||||
|
help=argparse.SUPPRESS,
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--identity',
|
||||||
|
metavar='<keyfile>',
|
||||||
|
help='Private key file (ssh -i option)',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-i',
|
||||||
|
metavar='<filename>',
|
||||||
|
dest='identity',
|
||||||
|
help=argparse.SUPPRESS,
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--option',
|
||||||
|
metavar='<config-options>',
|
||||||
|
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.add_argument(
|
||||||
|
'-4',
|
||||||
|
dest='ipv4',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Use only IPv4 addresses only',
|
||||||
|
)
|
||||||
|
ip_group.add_argument(
|
||||||
|
'-6',
|
||||||
|
dest='ipv6',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help='Use only IPv6 addresses only',
|
||||||
|
)
|
||||||
|
type_group = parser.add_mutually_exclusive_group()
|
||||||
|
type_group.add_argument(
|
||||||
|
'--public',
|
||||||
|
dest='address_type',
|
||||||
|
action='store_const',
|
||||||
|
const='public',
|
||||||
|
default='public',
|
||||||
|
help='Use public IP address',
|
||||||
|
)
|
||||||
|
type_group.add_argument(
|
||||||
|
'--private',
|
||||||
|
dest='address_type',
|
||||||
|
action='store_const',
|
||||||
|
const='private',
|
||||||
|
default='public',
|
||||||
|
help='Use private IP address',
|
||||||
|
)
|
||||||
|
type_group.add_argument(
|
||||||
|
'--address-type',
|
||||||
|
metavar='<address-type>',
|
||||||
|
dest='address_type',
|
||||||
|
default='public',
|
||||||
|
help='Use other IP address (public, private, etc)',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-v',
|
||||||
|
dest='verbose',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=argparse.SUPPRESS,
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
self.log.debug('take_action(%s)' % parsed_args)
|
||||||
|
|
||||||
|
compute_client = self.app.client_manager.compute
|
||||||
|
server = utils.find_resource(
|
||||||
|
compute_client.servers,
|
||||||
|
parsed_args.server,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Build the command
|
||||||
|
cmd = "ssh"
|
||||||
|
|
||||||
|
# Look for address type
|
||||||
|
if parsed_args.address_type:
|
||||||
|
address_type = parsed_args.address_type
|
||||||
|
if address_type not in server.addresses:
|
||||||
|
raise SystemExit("ERROR: No %s IP address found" % address_type)
|
||||||
|
|
||||||
|
# Set up desired address family
|
||||||
|
ip_address_family = [4, 6]
|
||||||
|
if parsed_args.ipv4:
|
||||||
|
ip_address_family = [4]
|
||||||
|
cmd += " -4"
|
||||||
|
if parsed_args.ipv6:
|
||||||
|
ip_address_family = [6]
|
||||||
|
cmd += " -6"
|
||||||
|
|
||||||
|
# Grab the first matching IP address
|
||||||
|
ip_address = None
|
||||||
|
for addr in server.addresses[address_type]:
|
||||||
|
if int(addr['version']) in ip_address_family:
|
||||||
|
ip_address = addr['addr']
|
||||||
|
if not ip_address:
|
||||||
|
raise SystemExit("ERROR: No IP address found")
|
||||||
|
|
||||||
|
if parsed_args.port:
|
||||||
|
cmd += " -p %d" % parsed_args.port
|
||||||
|
if parsed_args.identity:
|
||||||
|
cmd += " -i %s" % parsed_args.identity
|
||||||
|
if parsed_args.option:
|
||||||
|
cmd += " -o %s" % parsed_args.option
|
||||||
|
if parsed_args.login:
|
||||||
|
login = parsed_args.login
|
||||||
|
else:
|
||||||
|
login = self.app.client_manager._username
|
||||||
|
if parsed_args.verbose:
|
||||||
|
cmd += " -v"
|
||||||
|
|
||||||
|
cmd += " %s@%s"
|
||||||
|
self.log.debug("ssh command: %s" % (cmd % (login, ip_address)))
|
||||||
|
os.system(cmd % (login, ip_address))
|
||||||
|
|
||||||
|
|
||||||
class SuspendServer(command.Command):
|
class SuspendServer(command.Command):
|
||||||
"""Suspend server"""
|
"""Suspend server"""
|
||||||
|
|
||||||
|
@ -225,6 +225,7 @@ openstack.compute.v2 =
|
|||||||
server_resume = openstackclient.compute.v2.server:ResumeServer
|
server_resume = openstackclient.compute.v2.server:ResumeServer
|
||||||
server_set = openstackclient.compute.v2.server:SetServer
|
server_set = openstackclient.compute.v2.server:SetServer
|
||||||
server_show = openstackclient.compute.v2.server:ShowServer
|
server_show = openstackclient.compute.v2.server:ShowServer
|
||||||
|
server_ssh = openstackclient.compute.v2.server:SshServer
|
||||||
server_suspend = openstackclient.compute.v2.server:SuspendServer
|
server_suspend = openstackclient.compute.v2.server:SuspendServer
|
||||||
server_unlock = openstackclient.compute.v2.server:UnlockServer
|
server_unlock = openstackclient.compute.v2.server:UnlockServer
|
||||||
server_unpause = openstackclient.compute.v2.server:UnpauseServer
|
server_unpause = openstackclient.compute.v2.server:UnpauseServer
|
||||||
|
Loading…
x
Reference in New Issue
Block a user