diff options
Diffstat (limited to 'scripts/cxmanage')
-rwxr-xr-x | scripts/cxmanage | 111 |
1 files changed, 66 insertions, 45 deletions
diff --git a/scripts/cxmanage b/scripts/cxmanage index 101b30b..66c6269 100755 --- a/scripts/cxmanage +++ b/scripts/cxmanage @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright (c) 2012, Calxeda Inc. +# Copyright (c) 2012-2013, Calxeda Inc. # # All rights reserved. # @@ -36,20 +36,25 @@ import pkg_resources import subprocess import sys -from cxmanage.commands.power import power_command, power_status_command, \ - power_policy_command, power_policy_status_command -from cxmanage.commands.mc import mcreset_command -from cxmanage.commands.fw import fwupdate_command, fwinfo_command -from cxmanage.commands.sensor import sensor_command -from cxmanage.commands.fabric import ipinfo_command, macaddrs_command -from cxmanage.commands.config import config_reset_command, config_boot_command -from cxmanage.commands.info import info_command -from cxmanage.commands.ipmitool import ipmitool_command -from cxmanage.commands.ipdiscover import ipdiscover_command +import pyipmi +import cxmanage_api +from cxmanage_api.cli.commands.power import power_command, \ + power_status_command, power_policy_command, power_policy_status_command +from cxmanage_api.cli.commands.mc import mcreset_command +from cxmanage_api.cli.commands.fw import fwupdate_command, fwinfo_command +from cxmanage_api.cli.commands.sensor import sensor_command +from cxmanage_api.cli.commands.fabric import ipinfo_command, macaddrs_command +from cxmanage_api.cli.commands.config import config_reset_command, \ + config_boot_command, config_pxe_command +from cxmanage_api.cli.commands.info import info_command +from cxmanage_api.cli.commands.ipmitool import ipmitool_command +from cxmanage_api.cli.commands.ipdiscover import ipdiscover_command +from cxmanage_api.cli.commands.tspackage import tspackage_command +from cxmanage_api.cli.commands.eeprom import eepromupdate_command -PYIPMI_VERSION = '0.7.1' -IPMITOOL_VERSION = '1.8.11.0-cx5' +PYIPMI_VERSION = '0.9.1' +IPMITOOL_VERSION = '1.8.11.0-cx8' PARSER_EPILOG = """examples: @@ -82,6 +87,10 @@ FWUPDATE_IMAGE_TYPES = ['PACKAGE'] + sorted([ 'DIAG_ELF', ]) +EEPROMUPDATE_EPILOG = """examples: + cxmanage -a eepromupdate slot tn_storage.single_slot_v3.0.0.img 192.168.1.1 + cxmanage -a eepromupdate node dual_uplink_node_0.img \ +dual_uplink_node_1.img dual_node_0.img dual_node_0.img 192.168.1.1""" def build_parser(): @@ -91,7 +100,7 @@ def build_parser(): formatter_class=argparse.RawDescriptionHelpFormatter, epilog=PARSER_EPILOG) - #global arguments + # global arguments parser.add_argument('-V', '--version', action='store_true', help='Show version information') parser.add_argument('-u', '--user', default='admin', @@ -130,7 +139,7 @@ def build_parser(): subparsers = parser.add_subparsers() - #power command + # power command power = subparsers.add_parser('power', help='control server power') power_subs = power.add_subparsers() @@ -168,26 +177,26 @@ def build_parser(): 'status', help='get the current power policy') power_policy_status.set_defaults(func=power_policy_status_command) - #mcreset command + # mcreset command mcreset = subparsers.add_parser('mcreset', help='reset the management controller') mcreset.set_defaults(func=mcreset_command) - #fwupdate command + # fwupdate command fwupdate = subparsers.add_parser('fwupdate', help='update firmware', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=FWUPDATE_EPILOG) fwupdate.add_argument('image_type', metavar='IMAGE_TYPE', help='image type to use (%s)' % ", ".join(FWUPDATE_IMAGE_TYPES), type=lambda string: string.upper(), - choices = FWUPDATE_IMAGE_TYPES) + choices=FWUPDATE_IMAGE_TYPES) fwupdate.add_argument('filename', help='path to file to upload') fwupdate.add_argument('--full', action='store_true', default=False, help='Update primary AND backup partitions (will reset MC)') fwupdate.add_argument('--partition', help='Specify partition to update', default='INACTIVE', type=lambda string: string.upper(), - choices = list([ + choices=list([ 'FIRST', 'SECOND', 'BOTH', @@ -195,6 +204,7 @@ def build_parser(): 'NEWEST', 'INACTIVE' ])) + simg_args = fwupdate.add_mutually_exclusive_group() simg_args.add_argument('--force-simg', help='Force addition of SIMG header', @@ -214,27 +224,42 @@ def build_parser(): help='Version for SIMG header', default=None) fwupdate.set_defaults(func=fwupdate_command) - #fwinfo command + # eepromupdate command + eepromupdate = subparsers.add_parser('eepromupdate', help='update EEPROM', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=EEPROMUPDATE_EPILOG + ) + eepromupdate.add_argument('eeprom_location', + choices=['slot', 'node'], + help='EEPROM location' + ) + eepromupdate.add_argument('images', + nargs='+', + help='path to file(s) to upload' + ) + eepromupdate.set_defaults(func=eepromupdate_command) + + # fwinfo command fwinfo = subparsers.add_parser('fwinfo', help='get FW info') fwinfo.set_defaults(func=fwinfo_command) - #sensor command + # sensor command sensor = subparsers.add_parser('sensor', help='read sensor value') sensor.add_argument('sensor_name', help='Sensor name to read', nargs='?', default='') sensor.set_defaults(func=sensor_command) - #ipinfo command + # ipinfo command ipinfo = subparsers.add_parser('ipinfo', help='get IP info') ipinfo.set_defaults(func=ipinfo_command) - #macaddrs command + # macaddrs command macaddrs = subparsers.add_parser('macaddrs', help='get mac addresses') macaddrs.set_defaults(func=macaddrs_command) - #config command + # config command config = subparsers.add_parser('config', help='configure hosts') config_subs = config.add_subparsers() @@ -248,14 +273,19 @@ def build_parser(): type=lambda x: [] if x == 'none' else x.split(',')) boot.set_defaults(func=config_boot_command) - #info command + pxe = config_subs.add_parser('pxe', + help='set pxe interface') + pxe.add_argument('interface', help='pxe interface to use') + pxe.set_defaults(func=config_pxe_command) + + # info command info = subparsers.add_parser('info', help='get host info') info.add_argument('info_type', nargs='?', type=lambda string: string.lower(), choices=['basic', 'ubootenv']) info.set_defaults(func=info_command) - #ipmitool command + # ipmitool command ipmitool = subparsers.add_parser('ipmitool', help='run an arbitrary ipmitool command') ipmitool.add_argument('-l', '--lanplus', @@ -265,7 +295,7 @@ def build_parser(): help='ipmitool arguments') ipmitool.set_defaults(func=ipmitool_command) - #ipdiscover command + # ipdiscover command ipdiscover = subparsers.add_parser('ipdiscover', help='discover server-side IP addresses') ipdiscover.add_argument('-A', '--aggressive', action='store_true', @@ -284,6 +314,11 @@ def build_parser(): parser.add_argument('hostname', help='nodes to operate on (see examples below)') + # tspackage command ("troubleshoot package") + tspackage = subparsers.add_parser('tspackage', + help='Save information about this node/fabric to a .tar') + tspackage.set_defaults(func=tspackage_command) + return parser @@ -302,29 +337,15 @@ def validate_args(args): sys.exit('Invalid argument --version when supplied with --skip-simg') -def print_version(): - """ Print the current version of cxmanage """ - version = pkg_resources.require('cxmanage')[0].version - print "cxmanage version %s" % version - - def check_versions(): """Check versions of dependencies""" # Check pyipmi version - try: - pkg_resources.require('pyipmi>=%s' % PYIPMI_VERSION) - except pkg_resources.DistributionNotFound: - print 'ERROR: cxmanage requires pyipmi version %s'\ - % PYIPMI_VERSION - print 'No existing version was found.' - sys.exit(1) - except pkg_resources.VersionConflict: - version = pkg_resources.require('pyipmi')[0].version + if (pkg_resources.parse_version(pyipmi.__version__) < + pkg_resources.parse_version(PYIPMI_VERSION)): print 'ERROR: cxmanage requires pyipmi version %s' % PYIPMI_VERSION - print 'Current pyipmi version is %s' % version + print 'Current pyipmi version is %s' % pyipmi.__version__ sys.exit(1) - # Check ipmitool version if 'IPMITOOL_PATH' in os.environ: args = [os.environ['IPMITOOL_PATH'], '-V'] @@ -351,7 +372,7 @@ def main(): """Get args and go""" for arg in sys.argv[1:]: if arg in ['-V', '--version']: - print_version() + print "cxmanage version %s" % cxmanage_api.__version__ sys.exit(0) elif arg[0] != '-': break |