def change(self, system, state): """Change Power Status""" session = self.__db.get_session() try: board = session.query(Board).filter_by(name=system).one() if board.slot: pos = board.slot.position if not board.slot or not board.slot.rack or not board.slot.rack.powercontrol: return {'state': False} pc_id = board.slot.rack.powercontrol.id powerport = session.query(PowerPort).filter_by( port=pos, powercontrol_id=pc_id).one() if powerport: if (int(state)): powerport.poweron() else: powerport.poweroff() else: return {'state': False} except Exception as e: log.error("power: change status of {} failed: {}".format( system, e)) raise SoapFault( faultcode="PowerChangeFailed", faultstring="change status of {} failed".format(system), detail=e) finally: session.close() return {'state': True}
def soap_list_boards(self, name): if name: l = self.list_boards(name=name) else: l = self.list_boards() if l['result'] == -1: raise SoapFault(faultcode="ListSystemsFailed", faultstring="could not list boards") return {'list': l['list']}
def add_rack(self, name, location, desc="", num_slots=8): session = self.__db.get_session() try: rack = Rack(name=name, location=location, description=desc) for i in range(num_slots): slot = Slot(position=i + 1) rack.slots.append(slot) session.add(rack) session.commit() except Exception as e: log.error("add new rack failed: {}".format(e)) raise SoapFault(faultcode="AddRackFailed", faultstring="could not add a new rack", detail=e) finally: session.close()
def get_serial (self, system): """Get Serialcontrol""" serport = {'host': 'none', 'port': -1} session = self.__db.get_session () try: board = session.query (Board).filter_by (name = system).one () serial = session.query (SerialControl).filter_by (rack_id = board.slot.rack_id).one () port = session.query (SerialPort).filter_by (serialcontrol_id = serial.id, port = board.slot.position).one () serport = {'host': serial.URI, 'port': port.udpport} except Exception as e: raise SoapFault (faultcode = "SerialGetSerialFailed", faultstring = "get serial of {} failed".format (system), detail = e) finally: session.close () return serport
def status(self, system): """Get Testsystem Power Status""" session = self.__db.get_session() try: board = session.query(Board).filter_by(name=system).one() if board.slot: pos = board.slot.position pc_id = board.slot.rack.powercontrol.id powerport = session.query(PowerPort).filter_by( port=pos, powercontrol_id=pc_id).one() state = powerport.powerstatus() except Exception as e: log.error("power: get status of {} failed: {}".format(system, e)) raise SoapFault( faultcode="PowerStatusFailed", faultstring="get status of {} failed".format(system), detail=e) finally: session.close() return bool(state)
def list_racks(self): """list Testracks""" l = [] session = self.__db.get_session() try: for rack in session.query(Rack): l.append({ 'id': rack.id, 'name': rack.name, 'location': rack.location }) except Exception as e: log.error("testrack query failed: {}".format(e)) raise SoapFault(faultcode="ListSystemsFailed", faultstring="could not list testracks", detail=e) finally: session.close() log.info(l) return l
def divider(a, b): if b == 0: raise SoapFault(faultcode='DivisionByZero', faultstring='Division by zero not allowed', detail='test') return float(a) / b