From 9ff782937385c9959b4854633268e7271e378706 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 16 Aug 2017 15:06:48 -0400 Subject: [PATCH 1/4] Fix typo in confetty Strings do not have a startswitch method... --- confluent_client/bin/confetty | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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('/') From 54f25cfa9e288056cb816cc5621d03b3bfaadeda Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 16 Aug 2017 17:30:18 -0400 Subject: [PATCH 2/4] Implement access to other banks Provide backend support for other banks than primary. --- confluent_server/confluent/firmwaremanager.py | 7 +++++-- confluent_server/confluent/messages.py | 1 + .../confluent/plugins/hardwaremanagement/ipmi.py | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) 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( From b35463e594cfa8dfcc069963adda8af4f3b2fd97 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 16 Aug 2017 17:33:23 -0400 Subject: [PATCH 3/4] Implement argument to nodefirmware to backup --- confluent_client/bin/nodefirmware | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 From e478f8aef3197611b1a49edc500dedecde1496cd Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 16 Aug 2017 17:38:52 -0400 Subject: [PATCH 4/4] Add --backup to nodefirmware man page --- confluent_client/doc/man/nodefirmware.ronn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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