2
0
mirror of https://github.com/xcat2/confluent.git synced 2024-11-25 11:01:09 +00:00

FD passing for firmware and media upload

Extend use of client side file descriptors to
media and firmmware upload.
This commit is contained in:
Jarrod Johnson 2021-02-25 12:55:38 -05:00
parent facd501100
commit 16096ad745
6 changed files with 38 additions and 10 deletions

View File

@ -109,6 +109,12 @@ def update_firmware(session, filename):
if options.backup:
upargs['bank'] = 'backup'
noderrs = {}
if session.unixdomain:
of = open(filename, 'rb')
try:
session.add_file(filename, of.fileno(), 'rb')
except Exception:
pass
for res in session.create(resource, upargs):
if 'created' not in res:
for nodename in res.get('databynode', ()):

View File

@ -69,6 +69,12 @@ def install_license(session, filename):
'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
for res in session.create(resource, instargs):
for node in res.get('databynode', []):
if 'error' in res['databynode'][node]:

View File

@ -111,6 +111,12 @@ def upload_media(noderange, media):
resource = '/noderange/{0}/media/uploads/'.format(noderange)
upargs = {'filename': filename}
noderrs = {}
if session.unixdomain:
of = open(filename, 'rb')
try:
session.add_file(filename, of.fileno(), 'rb')
except Exception:
pass
nodeurls = {}
for res in session.create(resource, upargs):
if 'created' not in res:

View File

@ -32,11 +32,12 @@ uploadsbytarget = {}
downloadsbytarget = {}
updatepool = eventlet.greenpool.GreenPool(256)
_tracelog = None
filecontentbyname = {}
def execupdate(handler, filename, updateobj, type, owner, node):
def execupdate(handler, filename, updateobj, type, owner, node, datfile):
global _tracelog
if type != 'ffdc':
if type != 'ffdc' and not datfile:
errstr = False
if not os.path.exists(filename):
errstr = '{0} does not appear to exist on {1}, or is in a directory with permissions forbidding confluent user/group access'.format(
@ -64,9 +65,10 @@ def execupdate(handler, filename, updateobj, type, owner, node):
try:
if type == 'firmware':
completion = handler(filename, progress=updateobj.handle_progress,
bank=updateobj.bank)
data=datfile, bank=updateobj.bank)
else:
completion = handler(filename, progress=updateobj.handle_progress)
completion = handler(filename, progress=updateobj.handle_progress,
data=datfile)
if type == 'ffdc' and completion:
filename = completion
completion = None
@ -90,14 +92,19 @@ def execupdate(handler, filename, updateobj, type, owner, node):
class Updater(object):
def __init__(self, node, handler, filename, tenant=None, name=None,
bank=None, type='firmware', owner=None):
bank=None, type='firmware', owner=None, configmanager=None):
self.bank = bank
self.node = node
self.phase = 'initializing'
self.detail = ''
self.percent = 0.0
if configmanager and filename in configmanager.clientfiles:
cf = configmanager.clientfiles[filename]
datfile = os.fdopen(os.dup(cf.fileno()), cf.mode)
else:
datfile = None
self.updateproc = updatepool.spawn(execupdate, handler, filename,
self, type, owner, node)
self, type, owner, node, datfile)
if type == 'firmware':
myparty = updatesbytarget
elif type == 'mediaupload':

View File

@ -462,6 +462,7 @@ persistent_ipmicmds = {}
class IpmiHandler(object):
def __init__(self, operation, node, element, cfd, inputdata, cfg, output,
realop):
self.cfm = cfg
self.invmap = {}
self.output = output
self.sensorcategory = None
@ -589,7 +590,7 @@ class IpmiHandler(object):
def handle_update(self):
u = firmwaremanager.Updater(self.node, self.ipmicmd.update_firmware,
self.inputdata.nodefile(self.node), self.tenant,
bank=self.inputdata.bank)
bank=self.inputdata.bank, configmanager=self.cfm)
self.output.put(
msg.CreatedResource(
'nodes/{0}/inventory/firmware/updates/active/{1}'.format(
@ -598,7 +599,7 @@ class IpmiHandler(object):
def handle_media_upload(self):
u = firmwaremanager.Updater(self.node, self.ipmicmd.upload_media,
self.inputdata.nodefile(self.node), self.tenant,
type='mediaupload')
type='mediaupload', configmanager=self.cfm)
self.output.put(msg.CreatedResource(
'nodes/{0}/media/uploads/{1}'.format(self.node, u.name)))

View File

@ -348,6 +348,7 @@ persistent_ipmicmds = {}
class IpmiHandler(object):
def __init__(self, operation, node, element, cfd, inputdata, cfg, output,
realop):
self.cfm = cfg
self.sensormap = {}
self.invmap = {}
self.output = output
@ -453,7 +454,8 @@ class IpmiHandler(object):
def handle_update(self):
u = firmwaremanager.Updater(self.node, self.ipmicmd.update_firmware,
self.inputdata.nodefile(self.node), self.tenant,
bank=self.inputdata.bank)
bank=self.inputdata.bank,
configmanager=self.cfm)
self.output.put(
msg.CreatedResource(
'nodes/{0}/inventory/firmware/updates/active/{1}'.format(
@ -462,7 +464,7 @@ class IpmiHandler(object):
def handle_media_upload(self):
u = firmwaremanager.Updater(self.node, self.ipmicmd.upload_media,
self.inputdata.nodefile(self.node), self.tenant,
type='mediaupload')
type='mediaupload', configmanager=self.cfm)
self.output.put(msg.CreatedResource(
'nodes/{0}/media/uploads/{1}'.format(self.node, u.name)))