summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Lutostanski <greg.lutostanski@calxeda.com>2013-12-09 17:07:40 -0600
committerGreg Lutostanski <greg.lutostanski@calxeda.com>2013-12-09 17:07:40 -0600
commit4a1acab2378ee19cdf33d6e1f6ff69c4227273c6 (patch)
tree2004ff84029c631aa64fb99aac5af14da1c494df
parent368d1138812a5a05dedfb44872ac80040fc1590b (diff)
downloadcxmanage-4a1acab2378ee19cdf33d6e1f6ff69c4227273c6.tar.gz
CXMAN-230: make sol easier with cxmux -r and move to argparse
-rwxr-xr-xscripts/cxmux85
1 files changed, 49 insertions, 36 deletions
diff --git a/scripts/cxmux b/scripts/cxmux
index 0630efd..2b595eb 100755
--- a/scripts/cxmux
+++ b/scripts/cxmux
@@ -33,50 +33,63 @@
import os
import sys
-
-from optparse import OptionParser
-
+import argparse
+import subprocess
import cxmanage_api.fabric
def main():
- parser = OptionParser(
- "usage: %prog [options] COMMAND ecmeIP", conflict_handler="resolve"
- )
- parser.add_option(
- "-s", "--ssh",
- action="store_const", const=True, dest="ssh", default=False,
- help="Use the SPU IPs rather than ECME IPs"
- )
- parser.add_option(
- "-n", "--nosync",
- action="store_const", const=False, dest="sync", default=True,
- help="Do not syncronize input across terminals"
+ parser = argparse.ArgumentParser(
+ usage='CXMUX [options] <command> <ecmeip>', conflict_handler='resolve'
)
- parser.add_option(
- "--virt-env",
- action="store", type="string", dest="virt_env",
- help="Calls workon <virtual_environment> before spawning a window"
+ parser.add_argument('-n', '--nosync', action='store_true',
+ help='Do not synchronize input across terminals')
+ parser.add_argument('--virt-env', action='store', type=str,
+ help='Calls workon <virtual_environment> before spawning a window')
+ parser.add_argument('-u', '--user', default='admin',
+ help='Username for login')
+ parser.add_argument('-p', '--password', default='admin',
+ help='Password for login')
+ action = parser.add_mutually_exclusive_group()
+ action.add_argument('-s', '--ssh', action='store_true',
+ help='USE the SPU IPs rather than ECME IPs')
+ action.add_argument('-r', '--serial', action='store_true',
+ help='Run a SOL session to the nodes rather than a command')
+ parser.add_argument('command', nargs=argparse.REMAINDER,
+ help='Command to run')
+ parser.add_argument('ecmeip', nargs=1,
+ help='IP to run the commands against')
+
+ args = parser.parse_args()
+ if args.serial and args.command:
+ parser.error('Do not specify a command when running with --serial')
+
+ args.ecmeip = args.ecmeip[0]
+
+ command = ' '.join(args.command)
+ if args.serial:
+ command = 'ipmitool -U %s -P %s -I lanplus sol activate -H' % \
+ (args.user, args.password)
+
+ name = '%s@%s' % (command.split()[0], args.ecmeip)
+ tmux_windows = subprocess.check_output(
+ 'tmux list-windows -F "#{window_name}"',
+ shell=True
)
- parser.disable_interspersed_args()
+ if name in tmux_windows.splitlines():
+ print 'There is already another tmux window with name: %s' % name
+ return 4
- (options, args) = parser.parse_args()
- if len(args) == 0:
- parser.print_help()
- return -1
- elif len(args) < 2:
- parser.error("Need to specify COMMAND and ecmeIP")
+ if args.virt_env:
+ command = 'workon %s; ' % args.virt_env + command
- command = " ".join(args[:-1])
-
- if options.virt_env:
- command = 'workon %s; ' % options.virt_env + command
-
- ecmeip = args[-1]
- name = '%s@%s' % (args[0], ecmeip)
- fabric = cxmanage_api.fabric.Fabric(ecmeip)
+ fabric = cxmanage_api.fabric.Fabric(
+ ip_address=args.ecmeip,
+ username=args.user,
+ password=args.password
+ )
ips = [node.ip_address for node in fabric.nodes.values()]
- if options.ssh:
+ if args.ssh:
ips = fabric.get_server_ip().values()
for i, ip in enumerate(ips):
@@ -91,7 +104,7 @@ def main():
os.system('tmux send-keys Enter')
os.system('tmux select-layout -t "%s" tiled >/dev/null' % name)
- if options.sync:
+ if not args.nosync:
os.system(
'tmux set-window-option -t "%s" synchronize-panes on >/dev/null' %
name