diff --git a/confluent_client/bin/nodefirmware b/confluent_client/bin/nodefirmware index 98ddc50a..9ac6acdf 100755 --- a/confluent_client/bin/nodefirmware +++ b/confluent_client/bin/nodefirmware @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2016-2017 Lenovo @@ -114,11 +114,24 @@ def update_firmware(session, filename): upargs['bank'] = 'backup' noderrs = {} if session.unixdomain: - of = open(filename, 'rb') - try: - session.add_file(filename, of.fileno(), 'rb') - except Exception: - pass + filesbynode = {} + for exp in session.create('/noderange/{0}/attributes/expression'.format(noderange), + {'expression': filename}): + if 'error' in exp: + sys.stderr.write(exp['error'] + '\n') + exitcode |= exp.get('errorcode', 1) + ex = exp.get('databynode', ()) + for node in ex: + filesbynode[node] = ex[node]['value'] + if not isinstance(filesbynode[node], bytes) and not isinstance(filesbynode[node], str): + filesbynode[node] = filesbynode[node].encode('utf-8') + for node in filesbynode: + endfilename = filesbynode[node] + of = open(endfilename, 'rb') + try: + session.add_file(endfilename, of.fileno(), 'rb') + except Exception: + pass for res in session.create(resource, upargs): if 'created' not in res: for nodename in res.get('databynode', ()): diff --git a/confluent_client/bin/nodelicense b/confluent_client/bin/nodelicense index 6478d011..b13140da 100755 --- a/confluent_client/bin/nodelicense +++ b/confluent_client/bin/nodelicense @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2019 Lenovo @@ -65,16 +65,30 @@ client.check_globbing(noderange) def install_license(session, filename): global exitcode + resource = '/noderange/{0}/configuration/' \ 'management_controller/licenses/'.format(noderange) filename = os.path.abspath(filename) instargs = {'filename': filename} if session.unixdomain: - of = open(filename, 'rb') - try: - session.add_file(filename, of.fileno(), 'rb') - except Exception: - pass + filesbynode = {} + for exp in session.create('/noderange/{0}/attributes/expression'.format(noderange), + {'expression': filename}): + if 'error' in exp: + sys.stderr.write(exp['error'] + '\n') + exitcode |= exp.get('errorcode', 1) + ex = exp.get('databynode', ()) + for node in ex: + filesbynode[node] = ex[node]['value'] + if not isinstance(filesbynode[node], bytes) and not isinstance(filesbynode[node], str): + filesbynode[node] = filesbynode[node].encode('utf-8') + for node in filesbynode: + endfilename = filesbynode[node] + of = open(endfilename, 'rb') + try: + session.add_file(endfilename, of.fileno(), 'rb') + except Exception: + pass for res in session.create(resource, instargs): for node in res.get('databynode', []): if 'error' in res['databynode'][node]: diff --git a/confluent_client/bin/nodemedia b/confluent_client/bin/nodemedia index 74be65e5..b2130e46 100644 --- a/confluent_client/bin/nodemedia +++ b/confluent_client/bin/nodemedia @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright 2018 Lenovo @@ -101,22 +101,37 @@ def detach_media(noderange, media): def upload_media(noderange, media): global exitcode - if not os.path.exists(media): - sys.stderr.write('Unable to locate requested file {0}\n'.format( - media)) - sys.exit(404) + session = client.Command() output = sq.ScreenPrinter(noderange, session) filename = os.path.abspath(media) resource = '/noderange/{0}/media/uploads/'.format(noderange) + filename = os.path.abspath(filename) upargs = {'filename': filename} noderrs = {} if session.unixdomain: - of = open(filename, 'rb') - try: - session.add_file(filename, of.fileno(), 'rb') - except Exception: - pass + filesbynode = {} + for exp in session.create('/noderange/{0}/attributes/expression'.format(noderange), + {'expression': filename}): + if 'error' in exp: + sys.stderr.write(exp['error'] + '\n') + exitcode |= exp.get('errorcode', 1) + ex = exp.get('databynode', ()) + for node in ex: + filesbynode[node] = ex[node]['value'] + if not isinstance(filesbynode[node], bytes) and not isinstance(filesbynode[node], str): + filesbynode[node] = filesbynode[node].encode('utf-8') + for node in filesbynode: + endfilename = filesbynode[node] + if not os.path.exists(endfilename): + sys.stderr.write('Unable to locate requested file {0}\n'.format( + endfilename)) + sys.exit(404) + of = open(endfilename, 'rb') + try: + session.add_file(endfilename, of.fileno(), 'rb') + except Exception: + pass nodeurls = {} for res in session.create(resource, upargs): if 'created' not in res: