2
0
mirror of https://opendev.org/x/pyghmi synced 2025-02-20 12:30:48 +00:00

Offer save_licenses to backup license

Lenovo XCC offers ability to save off license keys.  Expose API for it.

Change-Id: If6c1311f4801c9dde4aebb0d9480eb3eaa4b04fe
This commit is contained in:
Jarrod Johnson 2019-06-19 14:25:00 -04:00
parent 131030a823
commit 575663e638
7 changed files with 52 additions and 0 deletions

View File

@ -1999,6 +1999,10 @@ class Command(object):
self.oem_init()
return self._oem.get_licenses()
def save_licenses(self, directory):
self.oem_init()
return self._oem.save_licenses(directory)
def apply_license(self, filename, progress=None):
self.oem_init()
return self._oem.apply_license(filename, progress)

View File

@ -356,5 +356,8 @@ class OEMHandler(object):
def get_licenses(self):
raise exc.UnsupportedFunctionality()
def save_licenses(self, directory):
raise exc.UnsupportedFunctionality()
def apply_license(self, filename, progress=None):
raise exc.UnsupportedFunctionality()

View File

@ -981,6 +981,11 @@ class OEMHandler(generic.OEMHandler):
return self.immhandler.get_licenses()
return super(OEMHandler, self).get_licenses()
def save_licenses(self, directory):
if self.has_xcc:
return self.immhandler.save_licenses(directory)
return super(OEMHandler, self).save_licenses(directory)
def apply_license(self, filename, progress=None):
if self.has_xcc:
return self.immhandler.apply_license(filename, progress)

View File

@ -1798,6 +1798,23 @@ class XCCClient(IMMClient):
if lic['status'] == 0:
yield {'name': lic['feature']}
def save_licenses(self, directory):
licdata = self.wc.grab_json_response('/api/providers/imm_fod')
for lic in licdata.get('items', [{}])[0].get('keys', []):
licid = ','.join((str(lic['type']), str(lic['id'])))
rsp = self.wc.grab_json_response(
'/api/providers/imm_fod', {'FOD_LicenseKeyExport': licid})
filename = rsp.get('FileName', None)
if filename:
url = '/download/' + filename
savefile = os.path.join(directory, filename)
fd = webclient.FileDownloader(self.wc, url, savefile)
fd.start()
while fd.isAlive():
fd.join(1)
self._refresh_token()
yield savefile
def apply_license(self, filename, progress=None):
uploadthread = webclient.FileUploader(self.wc, '/upload', filename)
uploadthread.start()

View File

@ -1426,6 +1426,9 @@ class Command(object):
def get_licenses(self):
return self.oem.get_licenses()
def save_licenses(self, directory):
return self.oem.save_licenses(directory)
def apply_license(self, filename, progress=None):
return self.oem.apply_license(filename, progress)

View File

@ -92,5 +92,8 @@ class OEMHandler(object):
def get_licenses(self):
raise exc.UnsupportedFunctionality()
def save_licenses(self, directory):
raise exc.UnsupportedFunctionality()
def apply_license(self, filename, progress=None):
raise exc.UnsupportedFunctionality()

View File

@ -710,6 +710,23 @@ class OEMHandler(generic.OEMHandler):
if lic['status'] == 0:
yield {'name': lic['feature']}
def save_licenses(self, directory):
licdata = self.wc.grab_json_response('/api/providers/imm_fod')
for lic in licdata.get('items', [{}])[0].get('keys', []):
licid = ','.join((str(lic['type']), str(lic['id'])))
rsp = self.wc.grab_json_response(
'/api/providers/imm_fod', {'FOD_LicenseKeyExport': licid})
filename = rsp.get('FileName', None)
if filename:
url = '/download/' + filename
savefile = os.path.join(directory, filename)
fd = webclient.FileDownloader(self.wc, url, savefile)
fd.start()
while fd.isAlive():
fd.join(1)
self._refresh_token()
yield savefile
def apply_license(self, filename, progress=None):
uploadthread = webclient.FileUploader(self.wc, '/upload', filename)
uploadthread.start()