def addComponentToSoftwareProfile(self, componentId, softwareProfileId): """ Add component to softwareProfile. Returns: None Throws: SoftwareProfileNotFound ComponentNotFound SoftwareProfileComponentAlreadyExists DbError """ session = DbManager().openSession() try: self._softwareProfilesDbHandler.addComponentToSoftwareProfile( session, componentId, softwareProfileId) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def setIdleState(self, softwareProfileName, state): """ Set idle state of a software profile Returns: -none- Throws: DbError """ session = DbManager().openSession() try: dbSoftwareProfile = self._softwareProfilesDbHandler.\ getSoftwareProfile(session, softwareProfileName) self.getLogger().debug( 'Setting idle state [%s] on software profile [%s]' % (state, dbSoftwareProfile.name)) dbSoftwareProfile.isIdle = state session.commit() except TortugaException as ex: raise except Exception as ex: self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def addParameter(self, parameter): """ Insert parameter into the db. Returns: parameterId Throws: ParameterAlreadyExists DbError """ session = DbManager().openSession() try: self._globalParametersDbHandler.addParameter( session, parameter) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteAdmin(self, name): """ Delete admin from the db. Returns: None Throws: AdminNotFound DbError """ session = DbManager().openSession() try: self._adminsDbHandler.deleteAdmin(session, name) session.commit() except TortugaException: session.rollback() raise except Exception: session.rollback() raise finally: DbManager().closeSession()
def setParentNode(self, nodeName, parentNodeName): ''' Raises: NodeNotFound ''' session = DbManager().openSession() try: dbNode = self._nodesDbHandler.getNode(session, nodeName) # Setting the parent to 'None' is equivalent to unsetting it dbNode.parentnode = self._nodesDbHandler.getNode( session, parentNodeName) if parentNodeName else None session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def copySoftwareProfile(self, srcSoftwareProfileName, dstSoftwareProfileName): session = DbManager().openSession() srcSoftwareProfile = self.getSoftwareProfile(srcSoftwareProfileName, { 'partitions': True, 'packages': True, 'components': True, }) dstSoftwareProfile = self.getSoftwareProfile(srcSoftwareProfileName) dstSoftwareProfile.setName(dstSoftwareProfileName) newDescription = 'Copy of %s' % (dstSoftwareProfile.getDescription()) dstSoftwareProfile.setDescription(newDescription) # partitions dstSoftwareProfile.setPartitions(srcSoftwareProfile.getPartitions()) # packages dstSoftwareProfile.setPackages(srcSoftwareProfile.getPackages()) # Finally add the software profile dstSoftwareProfile = self.addSoftwareProfile(dstSoftwareProfile, session) # Enable components separately srcCompList = self.getEnabledComponentList(srcSoftwareProfileName) for srcComp in srcCompList: if srcComp.getKit().getIsOs() or srcComp.getName() == 'core': self._softwareProfilesDbHandler.\ addComponentToSoftwareProfileEx( session, srcComp.getId(), dstSoftwareProfile) session.commit()
def addAdmin(self, softwareProfileName, adminUsername): """ Add an admin to this software profile """ session = DbManager().openSession() try: dbAdmin = self._adminsDbHandler.getAdmin(session, adminUsername) dbSoftwareProfile = self._softwareProfilesDbHandler.\ getSoftwareProfile(session, softwareProfileName) if dbAdmin not in dbSoftwareProfile.admins: dbSoftwareProfile.admins.append(dbAdmin) else: raise AdminAlreadyExists( 'Admin [%s] already associated with %s' % (adminUsername, softwareProfileName)) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteAdmin(self, softwareProfileName, adminUsername): """ Delete an admin from a software profile """ session = DbManager().openSession() try: dbAdmin = self._adminsDbHandler.getAdmin(session, adminUsername) dbSoftwareProfile = self._softwareProfilesDbHandler.\ getSoftwareProfile(session, softwareProfileName) if dbAdmin in dbSoftwareProfile.admins: dbSoftwareProfile.admins.remove(dbAdmin) else: raise AdminNotFound( 'Admin [%s] not associated with software profile' ' [%s]' % (adminUsername, softwareProfileName)) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteUsableHardwareProfileFromSoftwareProfile(self, hardwareProfileName, softwareProfileName): """ Delete hardwareProfile from softwareProfile Returns: None Throws: HardwareProfileNotFound SoftwareProfileNotFound SoftwareUsesHardwareNotFound DbError """ session = DbManager().openSession() try: self._softwareProfilesDbHandler.\ deleteUsableHardwareProfileFromSoftwareProfile( session, hardwareProfileName, softwareProfileName) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def addUsableHardwareProfileToSoftwareProfile(self, hardwareProfileName, softwareProfileName): """ Add hardwareProfile to softwareProfile Returns: SoftwareUsesHardwareId Throws: HardwareProfileNotFound SoftwareProfileNotFound SoftwareUsesHardwareAlreadyExists DbError """ session = DbManager().openSession() try: swUsesHwId = self._softwareProfilesDbHandler.\ addUsableHardwareProfileToSoftwareProfile( session, hardwareProfileName, softwareProfileName) session.commit() return swUsesHwId except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deletePartition(self, partitionName, softwareProfileName): """ Delete node from the db. Returns: None Throws: PartitionNotFound SoftwareProfileNotFound DbError """ session = DbManager().openSession() try: self._softwareProfilesDbHandler.\ deletePartitionFromSoftwareProfile( session, partitionName, softwareProfileName) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteResourceAdapter(self, name): """ Remove resource adapter Raises: """ self.getLogger().debug('deleteResourceAdapter(name=[%s])' % (name)) try: session = DbManager().openSession() self._resourceAdaptersDbHandler.deleteResourceAdapter( session, name) session.commit() except ResourceAdapterNotFound: self.getLogger().info('Resource adapter [%s] not found' % (name)) return except TortugaException: raise except Exception as ex: self.getLogger().exception(str(ex)) # Success! self.getLogger().info('Deleted resource adapter [%s]' % (name))
def updateNodeStatus(self, nodeName, state=None, bootFrom=None): """Update node status If neither 'state' nor 'bootFrom' are not None, this operation will update only the 'lastUpdated' timestamp. Returns: bool indicating whether state and/or bootFrom differed from current value """ value = 'None' if bootFrom is None else \ '1 (disk)' if int(bootFrom) == 1 else '0 (network)' self.getLogger().debug( 'updateNodeStatus(): node=[%s], state=[%s], bootFrom=[%s]' % (nodeName, state, value)) session = DbManager().openSession() try: node = NodesDbHandler().getNode(session, nodeName) result = self._updateNodeStatus(node, state=state, bootFrom=bootFrom) session.commit() return result finally: DbManager().closeSession()
def deleteKit(self, name, version, iteration, force=False): """ Delete kit from the db. Raises: KitNotFound KitInUse DbError """ session = DbManager().openSession() try: self._kitsDbHandler.deleteKit( session, name, version, iteration, force=force) session.commit() except TortugaException: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def startupNode(self, nodespec, remainingNodeList=None, bootMethod='n'): """ Start Node """ session = DbManager().openSession() try: dbNodes = self.__expand_nodespec(session, nodespec) if not dbNodes: raise NodeNotFound('No matching nodes for nodespec [%s]' % (nodespec)) self._nodesDbHandler.startupNode( session, dbNodes, remainingNodeList=remainingNodeList or [], bootMethod=bootMethod) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def shutdownNode(self, nodespec, bSoftShutdown=False): """ Shutdown Node Raises: NodeNotFound """ session = DbManager().openSession() try: dbNodes = self.__expand_nodespec(session, nodespec) if not dbNodes: raise NodeNotFound('No matching nodes for nodespec [%s]' % (nodespec)) self._nodesDbHandler.shutdownNode(session, dbNodes, bSoftShutdown) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def updateNetwork(self, network): """ Updates network in DB.. Returns: network Throws: NetworkNotFound DbError """ session = DbManager().openSession() try: dbNetwork = self._networksDbHandler.updateNetwork(session, network) newNetwork = Network.getFromDbDict(dbNetwork.__dict__) session.commit() return newNetwork except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteNetwork(self, id_): """ Delete network from the db. Returns: None Throws: NetworkInUse NetworkNotFound DbError """ session = DbManager().openSession() try: self._networksDbHandler.deleteNetwork(session, id_) session.commit() except TortugaException as ex: session.rollback() raise except IntegrityError as ex: raise NetworkInUse('Network is in use') except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteAdmin(self, hardwareProfileName, adminUsername): """ Delete an admin from a hardware profile Raises: AdminNotFound """ session = DbManager().openSession() try: dbAdmin = self._adminsDbHandler.getAdmin(session, adminUsername) dbHardwareProfile = self._hardwareProfilesDbHandler.\ getHardwareProfile(session, hardwareProfileName) if dbAdmin not in dbHardwareProfile.admins: raise AdminNotFound('Admin user [%s] not associated with %s.' % (adminUsername, hardwareProfileName)) dbHardwareProfile.admins.remove(dbAdmin) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def addNetwork(self, network): """ Insert network into the db. Returns: networkId Throws: NetworkAlreadyExists DbError """ session = DbManager().openSession() try: dbNetwork = self._networksDbHandler.addNetwork(session, network) session.commit() return dbNetwork.id except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteNode(self, name): """ Delete node from the db. Returns: None Throws: NodeNotFound DbError """ session = DbManager().openSession() try: self._nodesDbHandler.deleteNode(session, name) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def addAdmin(self, hardwareProfileName, adminUsername): """ Add an admin to this hardware profile Raises: AdminAlreadyExists """ session = DbManager().openSession() try: dbAdmin = self._adminsDbHandler.getAdmin(session, adminUsername) dbHardwareProfile = self._hardwareProfilesDbHandler.\ getHardwareProfile(session, hardwareProfileName) if dbAdmin in dbHardwareProfile.admins: raise AdminAlreadyExists( 'The admin %s is already associated with %s.' % (adminUsername, hardwareProfileName)) dbHardwareProfile.admins.append(dbAdmin) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def setNicIp(self, mac, ip): """ Set NIC IP in database. """ try: session = DbManager().openSession() try: dbNics = self._nicsDbHandler.getNic(session, mac) self.getLogger().debug('setNicIp: mac [%s] ip [%s]' % (mac, ip)) dbNics.ip = ip session.commit() return except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def setIdleSoftwareProfile(self, hardwareProfileName, softwareProfileName=None): """ Sets the idle software profile Returns: -none- Raises: SoftwareProfileNotFound SoftwareProfileNotIdle """ session = DbManager().openSession() try: dbSoftwareProfile = SoftwareProfilesDbHandler().\ getSoftwareProfile(session, softwareProfileName) \ if softwareProfileName else None dbHardwareProfile = self._hardwareProfilesDbHandler.\ getHardwareProfile(session, hardwareProfileName) self._hardwareProfilesDbHandler.setIdleSoftwareProfile( dbHardwareProfile, dbSoftwareProfile) session.commit() except TortugaException as ex: raise except Exception as ex: self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def rebootNode(self, nodespec, bSoftReset=False, bReinstall=False): """ Raises: NodeNotFound """ session = DbManager().openSession() try: nodes = self.__expand_nodespec(session, nodespec) if not nodes: raise NodeNotFound('No nodes matching nodespec [%s]' % (nodespec)) bhm = osUtility.getOsObjectFactory().getOsBootHostManager() if bReinstall: for dbNode in nodes: bhm.setNodeForNetworkBoot(dbNode) results = NodesDbHandler().rebootNode(session, nodes, bSoftReset) session.commit() return results finally: DbManager().closeSession()
def addPartition(self, partitionName, softwareProfileName): """ Add software profile partition. Returns: partitionId Throws: PartitionAlreadyExists SoftwareProfileNotFound DbError """ session = DbManager().openSession() try: self._softwareProfilesDbHandler.\ addPartitionToSoftwareProfile( session, partitionName, softwareProfileName) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def addAdmin(self, name, password, realname=None, description=None): """ Insert an admin into the db. Returns: admin tortuga object Throws: AdminAlreadyExists DbError """ session = DbManager().openSession() try: self._adminsDbHandler.addAdmin(session, name, password, realname, description) session.commit() except TortugaException: session.rollback() raise except Exception: session.rollback() raise finally: DbManager().closeSession()
def addComponentsToKit(self, kit, compList): """ Add components found in compList to existing kit Returns: None Throws: KitNotFound KitInUse DbError """ session = DbManager().openSession() try: self._kitsDbHandler.addComponentsToKit(session, kit, compList) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def deleteSoftwareProfile(self, name): """ Delete softwareProfile from the db. Returns: None Throws: SoftwareProfileNotFound DbError """ session = DbManager().openSession() try: # This role of this lookup is twofold. One, it validates # the existence of the software profile to be deleted and # second, gets the id for looking up any associated nodes dbSwProfile = self._softwareProfilesDbHandler.\ getSoftwareProfile(session, name) if dbSwProfile.nodes: # The software profile cannot be removed while # associated # nodes exist raise TortugaException('Unable to delete software profile with' ' associated nodes') if dbSwProfile.isIdle: # Ensure this software profile is not associated with # a hardware profile if dbSwProfile.hwprofileswithidle: # This software profile is associated with one # or more hardware profiles raise TortugaException( 'Unable to delete software profile.' ' This software profile is associated' ' with one or more hardware profiles: [%s]' % (' '.join([ hwprofile.name for hwprofile in dbSwProfile.hwprofileswithidle ]))) # Proceed with software profile deletion self.getLogger().debug( 'Marking software profile [%s] for deletion' % (name)) session.delete(dbSwProfile) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()
def delete(self, resadapter_name, name): \ # pylint: disable=no-self-use session = DbManager().openSession() try: ResourceAdapterCredentialsDbHandler().delete( session, resadapter_name, name) session.commit() finally: DbManager().closeSession()