def read_inventory(self, component): invitems = [] if component == 'all': for invdata in self.ipmicmd.get_inventory(): if invdata[1] is None: newinf = {'present': False, 'information': None} else: sanitize_invdata(invdata[1]) newinf = {'present': True, 'information': invdata[1]} newinf['name'] = invdata[0] invitems.append(newinf) else: self.make_inventory_map() compname = self.invmap.get(component, None) if compname is None: self.output.put(msg.ConfluentTargetNotFound()) return invdata = self.ipmicmd.get_inventory_of_component(compname) if invdata is None: newinf = {'present': False, 'information': None} else: sanitize_invdata(invdata) newinf = {'present': True, 'information': invdata} newinf['name'] = compname invitems.append(newinf) newinvdata = {'inventory': invitems} self.output.put(msg.KeyValueData(newinvdata, self.node))
def read_sensors(self, sensorname): try: if sensorname == 'all': sensors = self.ipmicmd.get_sensor_descriptions() readings = [] for sensor in filter(self.match_sensor, sensors): try: reading = self.ipmicmd.get_sensor_reading( sensor['name']) except pygexc.IpmiException as ie: if ie.ipmicode == 203: continue raise if hasattr(reading, 'health'): reading.health = _str_health(reading.health) readings.append(reading) self.output.put(msg.SensorReadings(readings, name=self.node)) else: self.make_sensor_map() if sensorname not in self.sensormap: self.output.put( msg.ConfluentTargetNotFound(self.node, 'Sensor not found')) return reading = self.ipmicmd.get_sensor_reading( self.sensormap[sensorname]) if hasattr(reading, 'health'): reading.health = _str_health(reading.health) self.output.put( msg.SensorReadings([reading], name=self.node)) except pygexc.IpmiException: self.output.put(msg.ConfluentTargetTimeout(self.node))
def handle_ntp(self): if self.element[3] == 'enabled': if 'read' == self.op: enabled = self.ipmicmd.get_ntp_enabled() self.output.put(msg.NTPEnabled(self.node, enabled)) return elif 'update' == self.op: enabled = self.inputdata.ntp_enabled(self.node) self.ipmicmd.set_ntp_enabled(enabled == 'True') return elif self.element[3] == 'servers': if len(self.element) == 4: self.output.put(msg.ChildCollection('all')) size = len(self.ipmicmd.get_ntp_servers()) for idx in range(1, size + 1): self.output.put(msg.ChildCollection(idx)) else: if 'read' == self.op: if self.element[-1] == 'all': servers = self.ipmicmd.get_ntp_servers() self.output.put(msg.NTPServers(self.node, servers)) return else: idx = int(self.element[-1]) - 1 servers = self.ipmicmd.get_ntp_servers() if len(servers) > idx: self.output.put( msg.NTPServer(self.node, servers[idx])) else: self.output.put( msg.ConfluentTargetNotFound( self.node, 'Requested NTP configuration not found')) return elif self.op in ('update', 'create'): if self.element[-1] == 'all': servers = self.inputdata.ntp_servers(self.node) for idx in servers: self.ipmicmd.set_ntp_server( servers[idx], int(idx[-1]) - 1) return else: idx = int(self.element[-1]) - 1 server = self.inputdata.ntp_server(self.node) self.ipmicmd.set_ntp_server(server, idx) return
def read_inventory(self, component): errorneeded = False try: invitems = [] if component == 'all': for invdata in self.ipmicmd.get_inventory(): if invdata[1] is None: newinf = {'present': False, 'information': None} else: sanitize_invdata(invdata[1]) newinf = {'present': True, 'information': invdata[1]} newinf['name'] = invdata[0] invitems.append(newinf) else: self.make_inventory_map() compname = self.invmap.get(component, None) if compname is None: self.output.put(msg.ConfluentTargetNotFound()) return invdata = self.ipmicmd.get_inventory_of_component(compname) if invdata is None: newinf = {'present': False, 'information': None} else: sanitize_invdata(invdata) newinf = {'present': True, 'information': invdata} newinf['name'] = compname invitems.append(newinf) except ssl.SSLEOFError: errorneeded = msg.ConfluentNodeError( self.node, 'Unable to communicate with the https server on ' 'the target BMC while trying to read extended ' 'information') except exc.PubkeyInvalid: errorneeded = msg.ConfluentNodeError( self.node, 'Extended information unavailable, mismatch detected between ' 'target certificate fingerprint and ' 'pubkeys.tls_hardwaremanager attribute') newinvdata = {'inventory': invitems} self.output.put(msg.KeyValueData(newinvdata, self.node)) if errorneeded: self.output.put(errorneeded)