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 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 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 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 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 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, 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 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 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 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 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 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 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 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 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, 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 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 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 getNetworkListByType(self, type_): """ Return list of networks of the given type. Returns: [networks] Throws: DbError """ session = DbManager().openSession() try: dbNetworks = self._networksDbHandler.\ getNetworkListByType(session, type_) return self.getTortugaObjectList(Network, dbNetworks) 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 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 addSoftwareProfile(self, softwareProfile, session=None): """ Insert software profile into the db. Raises: SoftwareProfileAlreadyExists DbError """ # Keep local 'session' instance. If 'session' is None, # ensure transaction is committed before returning to the # caller, otherwise the caller is responsible. On exceptions, # the rollback is performed regardless. _session = session if _session is None: _session = DbManager().openSession() try: try: dbSoftwareProfile = self._softwareProfilesDbHandler.\ getSoftwareProfile( _session, softwareProfile.getName()) raise SoftwareProfileAlreadyExists( 'Software profile [%s] already exists' % (softwareProfile)) except SoftwareProfileNotFound as ex: pass dbSoftwareProfile = self.__populateSoftwareProfile( _session, softwareProfile) _session.query(func.max(SoftwareProfiles.id)).one() softwareProfile.setId(dbSoftwareProfile.id) if session is None: _session.commit() self.getLogger().info('Added software profile [%s]' % (dbSoftwareProfile.name)) return dbSoftwareProfile except TortugaException as ex: _session.rollback() raise except Exception as ex: _session.rollback() self.getLogger().exception('%s' % ex) raise finally: if session is None: DbManager().closeSession()
def updateAdmin(self, admin): """ Update existing admin. Returns: None Throws: AdminNotFound DbError """ session = DbManager().openSession() try: if admin.getId() is not None: # User specified the admin id, use it to positively # identify the admin user. dbAdmin = self._adminsDbHandler.getAdminById( session, admin.getId()) elif admin.getUsername() is not None: dbAdmin = self._adminsDbHandler.getAdmin( session, admin.getUsername()) else: raise AdminNotFound( 'Ambiguous admin request (neither id nor username' ' specified)') if admin.getUsername() is not None: dbAdmin.username = admin.getUsername() if admin.getPassword() is not None: dbAdmin.password = admin.getPassword() if admin.getRealname() is not None: dbAdmin.realname = admin.getRealname() if admin.getDescription() is not None: dbAdmin.description = admin.getDescription() self._adminsDbHandler.updateAdmin(session, dbAdmin) session.commit() except TortugaException: session.rollback() raise except Exception: session.rollback() raise finally: DbManager().closeSession()
def addHardwareProfile(self, hardwareProfile, session=None): """ Insert hardwareProfile into the db. Returns: (none) Throws: HardwareProfileAlreadyExists DbError """ # Keep local 'session' instance. If 'session' is None, # ensure transaction is committed before returning to the # caller, otherwise the caller is responsible. On exceptions, # the rollback is performed regardless. _session = session if _session is None: _session = DbManager().openSession() try: try: self._hardwareProfilesDbHandler.getHardwareProfile( _session, hardwareProfile.getName()) raise HardwareProfileAlreadyExists( 'Hardware profile [%s] already exists' % (hardwareProfile)) except HardwareProfileNotFound as ex: pass dbHardwareProfile = self.__populateHardwareProfile( _session, hardwareProfile) _session.add(dbHardwareProfile) if session is None: _session.commit() self.getLogger().info('Added hardware profile [%s]' % (dbHardwareProfile.name)) except TortugaException as ex: _session.rollback() raise except Exception as ex: _session.rollback() self.getLogger().exception('%s' % ex) raise finally: if session is None: DbManager().closeSession()
def idleNode(self, nodespec): """ Raises: NodeNotFound """ session = DbManager().openSession() try: nodes = self.__expand_nodespec(session, nodespec) if not nodes: raise NodeNotFound('No nodes matching nodespec [%s]' % (nodespec)) result = NodesDbHandler().idleNode(session, nodes) # Convert list of Nodes to list of node names for providing # user feedback. result_dict = {} for key, dbNodes in result.items(): result_dict[key] = [dbNode.name for dbNode in dbNodes] session.commit() # Remove Puppet certificate(s) for idled node(s) for node_name in result_dict['success']: # Remove Puppet certificate for idled node bhm = osUtility.getOsObjectFactory().getOsBootHostManager() bhm.deletePuppetNodeCert(node_name) # Schedule a cluster update self.__scheduleUpdate() return result_dict except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('[%s] %s' % (self.__class__.__name__, ex)) raise finally: DbManager().closeSession()
def upsertParameter(self, parameter): session = DbManager().openSession() try: self._globalParametersDbHandler.upsertParameter( session, parameter.getName(), parameter.getValue(), description=parameter.getDescription()) session.commit() except TortugaException: session.rollback() raise except Exception: session.rollback() self.getLogger().exception('upsertParameter failed') raise finally: DbManager().closeSession()
def checkpointNode(self, nodeName): """ Checkpoint Node """ session = DbManager().openSession() try: self._nodesDbHandler.checkpointNode(session, nodeName) session.commit() except TortugaException as ex: session.rollback() raise except Exception as ex: session.rollback() self.getLogger().exception('%s' % ex) raise finally: DbManager().closeSession()