diff --git a/confluent_client/bin/confetty b/confluent_client/bin/confetty index 90b3db4b..56fd039c 100755 --- a/confluent_client/bin/confetty +++ b/confluent_client/bin/confetty @@ -460,7 +460,7 @@ def createresource(args): if keydata is None: return targpath = fullpath_target(resname) - if targpath.startswitch('/noderange//'): + if targpath.startswith('/noderange//'): collection = targpath else: collection, _, resname = targpath.rpartition('/') diff --git a/confluent_client/bin/nodefirmware b/confluent_client/bin/nodefirmware index 243f3271..8cee84f4 100755 --- a/confluent_client/bin/nodefirmware +++ b/confluent_client/bin/nodefirmware @@ -66,7 +66,9 @@ def printfirm(node, prefix, data): argparser = optparse.OptionParser( - usage="Usage: %prog [update ]") + usage="Usage: %prog [update [--backup ]") +argparser.add_option('-b', '--backup', action='store_true', + help='Target a backup bank rather than primary') (options, args) = argparser.parse_args() upfile = None try: @@ -98,7 +100,10 @@ def update_firmware(session, filename): filename = os.path.abspath(filename) resource = '/noderange/{0}/inventory/firmware/updates/active'.format( noderange) - for res in session.create(resource, {'filename': filename}): + upargs = {'filename': filename} + if options.backup: + upargs['bank'] = 'bank' + for res in session.create(resource, upargs): watchurl = res['created'] currnode = watchurl.split('/')[1] nodeurls[currnode] = '/' + watchurl diff --git a/confluent_client/doc/man/nodefirmware.ronn b/confluent_client/doc/man/nodefirmware.ronn index 7f3df2c2..7f24ecfe 100644 --- a/confluent_client/doc/man/nodefirmware.ronn +++ b/confluent_client/doc/man/nodefirmware.ronn @@ -4,7 +4,7 @@ nodefirmware(8) -- Report firmware information on confluent nodes ## SYNOPSIS `nodefirmware ` -`nodefirmware update ` +`nodefirmware update [--backup] ` ## DESCRIPTION diff --git a/confluent_server/confluent/firmwaremanager.py b/confluent_server/confluent/firmwaremanager.py index 6fc5c91a..f98ae7b3 100644 --- a/confluent_server/confluent/firmwaremanager.py +++ b/confluent_server/confluent/firmwaremanager.py @@ -26,7 +26,8 @@ updatesbytarget = {} def execupdate(handler, filename, updateobj): try: - completion = handler(filename, progress=updateobj.handle_progress) + completion = handler(filename, progress=updateobj.handle_progress, + bank=updateobj.bank) if completion is None: completion = 'complete' updateobj.handle_progress({'phase': completion, 'progress': 100.0}) @@ -35,7 +36,9 @@ def execupdate(handler, filename, updateobj): 'detail': str(e)}) class Updater(object): - def __init__(self, node, handler, filename, tenant=None, name=None): + def __init__(self, node, handler, filename, tenant=None, name=None, + bank=None): + self.bank = bank self.node = node self.phase = 'initializing' self.detail = '' diff --git a/confluent_server/confluent/messages.py b/confluent_server/confluent/messages.py index a4c14144..7d5795bd 100644 --- a/confluent_server/confluent/messages.py +++ b/confluent_server/confluent/messages.py @@ -399,6 +399,7 @@ class InputFirmwareUpdate(ConfluentMessage): def __init__(self, path, nodes, inputdata): self.filename = inputdata['filename'] + self.bank = inputdata.get('bank', None) self.nodes = nodes diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index 7674f6d4..0e4fbd11 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -455,7 +455,8 @@ class IpmiHandler(object): def handle_update(self): u = firmwaremanager.Updater(self.node, self.ipmicmd.update_firmware, - self.inputdata.filename, self.tenant) + self.inputdata.filename, self.tenant, + bank=self.inputdata.bank) self.output.put( msg.CreatedResource( 'nodes/{0}/inventory/firmware/updates/active/{1}'.format(