def rebootNode(self, nodespec: str, bSoftReset: Optional[bool] = True, bReinstall: Optional[bool] = False) -> NoReturn: try: self._nodeManager.rebootNode( nodespec, bSoftReset=bSoftReset, bReinstall=bReinstall) except TortugaException: raise except Exception as ex: self.getLogger().exception( 'Fatal error rebooting node(s) matching' ' nodespec [{0}]'.format(nodespec)) raise TortugaException(exception=ex)
def updateNodeStatus(self, session: Session, name: str, state: Optional[str] = None, bootFrom: Optional[int] = None): try: return self._nodeManager.updateNodeStatus( session, name, state, bootFrom) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error updating status for node [{}]'.format(name)) raise TortugaException(exception=ex)
def createSoftwareProfile(self, session: Session, swProfileSpec: SoftwareProfile, settingsDict=None): try: self._softwareProfileManager.createSoftwareProfile( session, swProfileSpec, settingsDict) except TortugaException: raise except Exception as ex: self._logger.exception(str(ex)) raise TortugaException(exception=ex)
def get_profile_names(self, resadapter_name): url = 'resourceadapters/{0}/profile/'.format(resadapter_name) try: responseDict = self._client.get(url) return responseDict except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def delete(self, resadapter_name, name): url = 'resourceadapters/{0}/profile/{1}'.format(resadapter_name, name) try: responseDict = self._client.delete(url) return responseDict except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def update(self, resadapter_name, name, configuration): url = 'resourceadapters/{0}/profile/{1}'.format(resadapter_name, name) try: responseDict = self._client.put(url, configuration) return responseDict except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def updateSoftwareProfile(self, softwareProfileObject): """ Update the given Software Profile by calling WS API """ url = 'v1/softwareProfiles/%s' % (softwareProfileObject.getId()) postdata = json.dumps(softwareProfileObject.getCleanDict()) try: self.sendSessionRequest(url, method='PUT', data=postdata) except Exception as ex: raise TortugaException(exception=ex)
def getResourceAdapterList(self): url = 'resourceadapters/' try: responseDict = self.get(url) return responseDict except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def shutdownNode(self, session: Session, nodespec: str, bSoftShutdown: Optional[bool] = False) -> None: try: self._nodeManager.shutdownNode( session, nodespec, bSoftShutdown) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error shutting down node(s) matching' ' nodespec [{0}]'.format(nodespec)) raise TortugaException(exception=ex)
def updateVolume(self, volume, shared): """Add a volume to the system""" url = 'san/volumes/%s/%s' % (volume, shared) try: self.put(url) except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def getNode(self, session: Session, name: str, optionDict: Optional[OptionDict] = None): """Get node id by name""" try: return self._nodeManager.getNode( session, name, optionDict=optionDict) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error retrieving node [{}]'.format(name)) raise TortugaException(exception=ex)
def addStorageVolume(self, nodeName: str, volume: str, isDirect: Optional[str] = 'DEFAULT'): try: return self._nodeManager.addStorageVolume( nodeName, volume, isDirect) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error adding storage volume to node [{}]'.format( nodeName)) raise TortugaException(exception=ex)
def transferNode(self, nodespec: str, softwareProfileName: str, bForce: Optional[bool] = False): try: return self._nodeManager.transferNode( nodespec, softwareProfileName, bForce=bForce) except TortugaException: raise except Exception as ex: self.getLogger().exception( 'Fatal error transferring nodes matching nodespec' ' [{}]'.format(nodespec)) raise TortugaException(exception=ex)
def getProvisioningInfo(self, session: Session, nodeName: str): """ Get provisioning information for a node """ try: return self._nodeManager.getProvisioningInfo(session, nodeName) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error retrieving provisioning info for' ' node [{}]'.format(nodeName)) raise TortugaException(exception=ex)
def idleNode(self, nodespec): """idle node""" url = 'v1/nodes/%s/idle' % (nodespec) try: _, responseDict = self.sendSessionRequest(url) return responseDict except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def deleteParameter(self, session: Session, name: str) -> None: """ Delete parameter by name """ try: ParameterManager().deleteParameter(session, name) except TortugaException: raise except Exception as ex: self._logger.exception('Error deleting parameter [%s]' % (name)) raise TortugaException(exception=ex)
def addVolume(self, storageAdapter, size, nameFormat='*', shared=False): """Add a volume to the system""" try: # The api only allows for the addition of persistent volumes return self._san.addVolume( storageAdapter, size, nameFormat, persistent=True, shared=shared) except TortugaException as ex: raise except Exception as ex: self.getLogger().exception('%s' % (ex)) raise TortugaException(exception=ex)
def download(urlList, dest): """ TODO: this should use a curl/wget download module """ for url in urlList: i = url.rfind('/') destFile = dest + '/' + url[i + 1:] logger.debug(url + '->' + destFile) try: filein = urllib.request.urlopen(url) except urllib.error.URLError as ex: if ex.code == 404: raise FileNotFound('File not found at URL [%s]' % (url)) raise TortugaException(exception=ex) except Exception as ex: raise TortugaException(exception=ex) fileout = open(destFile, "wb") while True: try: buf = filein.read(1024000) fileout.write(buf) except IOError as ex: raise TortugaException(exception=ex) if not bytes: break filein.close() fileout.close() logger.debug('Successfully dowloaded file [%s]' % (destFile))
def deleteParameter(self, name): """ Delete parameter by name """ try: return ParameterManager().deleteParameter(name) except TortugaException: raise except Exception as ex: self.getLogger().exception('Error deleting parameter [%s]' % (name)) raise TortugaException(exception=ex)
def get(self, resadapter_name, name): """Get resource adapter configuration""" url = 'v1/resourceadapter/{0}/profile/{1}'.format( resadapter_name, name) try: _, responseDict = self.sendSessionRequest(url) return responseDict except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def getNodesByNameFilter(self, session: Session, nodespec: str, optionDict: Optional[OptionDict] = None) \ -> TortugaObjectList: try: return self._nodeManager.getNodesByNameFilter( session, nodespec, optionDict=optionDict) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error retrieving nodes by nodespec [{}]'.format( nodespec)) raise TortugaException(exception=ex)
def getNodeByIp(self, session: Session, ip: str) -> Node: """ Get a node by ip """ try: return self._nodeManager.getNodeByIp(session, ip) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error retrieving node by ip [{}]'.format(ip)) raise TortugaException(exception=ex)
def updateHardwareProfile(self, hardwareProfileObject): """ Update the given Hardware Profile by calling WS API """ url = 'v1/hardwareProfiles/%s' % (hardwareProfileObject.getId()) try: (response, responseDict) = self.sendSessionRequest( url, method='PUT', data=json.dumps(hardwareProfileObject.getCleanDict())) except Exception as ex: raise TortugaException(exception=ex)
def _updateNodeStatus(self, name: str, state: Optional[str] = None, bootFrom: Optional[int] = None) -> NoReturn: try: # pylint: disable=protected-access self._nodeManager._updateNodeStatus(name, state, bootFrom) except TortugaException: raise except Exception as ex: self.getLogger().exception( 'Fatal error updating status for node [{}]'.format(name)) raise TortugaException(exception=ex)
def deleteVolume(self, volume, force=False): \ # pylint: disable=unused-argument """Delete a volume from the system""" url = 'san/volumes/%s' % (volume) try: self.delete(url) except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def getUsableNodes(self, softwareProfileName): url = 'softwareprofiles/%s/usable' % ( urllib.parse.quote_plus(softwareProfileName)) try: responseDict = self.get(url) return Node.getListFromDict(responseDict) except TortugaException as ex: raise except Exception as ex: raise TortugaException(exception=ex)
def getNodesByAddHostSession(self, session: Session, addHostSession: str, optionDict: Optional[OptionDict] = None) \ -> TortugaObjectList: try: return self._nodeManager.getNodesByAddHostSession( session, addHostSession, optionDict=optionDict) except TortugaException: raise except Exception as ex: self._logger.exception( 'Fatal error retrieving nodes by add host session [{}]'.format( addHostSession)) raise TortugaException(exception=ex)
def startupNode(self, nodespec, remainingNodeList=None, bootMethod='n'): """startup node""" # Turn 'nodeList' into something that can be passed in nodeString = '+'.join(remainingNodeList) if remainingNodeList else '+' url = 'v1/nodes/%s/startup/%s/boot/%s' % (nodespec, nodeString, bootMethod) try: self.sendSessionRequest(url, method='PUT') except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def migrateNode(self, nodeName, remainingNodeList, liveMigrate): """migrate node""" # Turn remainingNodeList into something that can be passed in remainingNodeString = str.join('+', remainingNodeList) url = 'v1/nodes/%s/migrate/%s/type/%s' % ( nodeName, remainingNodeString, liveMigrate) try: self.sendSessionRequest(url) except TortugaException: raise except Exception as ex: raise TortugaException(exception=ex)
def disableComponent(self, softwareProfileName, kitName, kitVersion, kitIteration, compName, compVersion=None): try: return self._softwareProfileManager.disableComponent( softwareProfileName, kitName, kitVersion, kitIteration, compName, compVersion) except TortugaException as ex: raise except Exception as ex: self.getLogger().exception('%s' % ex) raise TortugaException(exception=ex)