def scan_address(ip_address, **kwargs): if kwargs.get('http_family') not in ('sscccc', ): raise NoMatchError("It's not an ONStor.") if 'nx-os' in kwargs.get('snmp_name', '').lower(): raise NoMatchError("Incompatible Nexus found.") user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_onstor', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_ONSTOR_USER and SSH_ONSTOR_PASSWORD in ' 'your configuration file.', ) else: try: device_info = _ssh_onstor(ip_address, user, password) except ConnectionError as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): http_family = kwargs.get('http_family', '') if http_family not in ( 'Sun', 'Thomas-Krenn', 'Oracle-ILOM-Web-Server', 'IBM System X', ): raise NoMatchError('It is not compatible device for this plugin.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ipmi', messages) if not user or not password: result['status'] = 'error' messages.append('Not configured.') else: ipmitool = IPMITool(ip_address, user, password) try: device_info = _ipmi(ipmitool) except (AuthError, Error) as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): if kwargs.get('http_family') not in ('sscccc',): raise NoMatchError("It's not an ONStor.") if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower(): raise NoMatchError("Incompatible Nexus found.") user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_onstor', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_ONSTOR_USER and SSH_ONSTOR_PASSWORD in ' 'your configuration file.', ) else: try: device_info = _ssh_onstor(ip_address, user, password) except ConnectionError as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): snmp_name = kwargs.get("snmp_name", "") or "" http_family = kwargs.get("http_family", "") or "" if (snmp_name and "juniper" not in snmp_name.lower()) and ( http_family and http_family.strip().lower() not in ("juniper",) ): raise NoMatchError("It is not Juniper.") user = SETTINGS.get("user") password = SETTINGS.get("password") messages = [] result = get_base_result_template("ssh_juniper", messages) if not user or not password: result["status"] = "error" messages.append("Not configured. Set SSH_SSG_USER and SSH_SSG_PASSWORD in your " "configuration file.") else: try: ssh = _connect_ssh(ip_address, user, password) except ConnectionError as e: result["status"] = "error" messages.append(unicode(e)) else: try: device_info = _ssh_juniper(ssh, ip_address) finally: ssh.close() result.update({"status": "success", "device": device_info}) return result
def scan_address(ip_address, **kwargs): if 'nx-os' in (kwargs.get('snmp_name') or '').lower(): raise NoMatchError('Incompatible Nexus found.') if kwargs.get('http_family') not in ('Proxmox', ): raise NoMatchError('It is not Proxmox.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_proxmox', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_USER and SSH_PASSWORD in your ' 'configuration file.', ) else: try: device_info = _ssh_proxmox(ip_address, user, password) except (ConnectionError, NoMatchError) as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): snmp_name = (kwargs.get('snmp_name', '') or '') http_family = (kwargs.get('http_family', '') or '') if ((snmp_name and 'juniper' not in snmp_name.lower()) and (http_family and http_family.strip().lower() not in ('juniper', ))): raise NoMatchError('It is not Juniper.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_juniper', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_SSG_USER and SSH_SSG_PASSWORD in your ' 'configuration file.', ) else: try: ssh = _connect_ssh(ip_address, user, password) except ConnectionError as e: result['status'] = 'error' messages.append(unicode(e)) else: try: device_info = _ssh_juniper(ssh, ip_address) finally: ssh.close() result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): snmp_name = kwargs.get('snmp_name', '') snmp_version = kwargs.get('snmp_version', '2c') or '2c' if snmp_version == '3': snmp_community = SETTINGS['snmp_v3_auth'] else: snmp_community = str(kwargs['snmp_community']) messages = [] result = get_base_result_template('snmp_macs', messages) try: device_info = _snmp_mac( ip_address, snmp_name, snmp_community, snmp_version, messages, ) except Error as e: messages.append(unicode(e)) result.update(status="error") else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): http_family = (kwargs.get('http_family', '') or '') if http_family and http_family.strip().lower() not in ('juniper',): raise NoMatchError('It is not Juniper.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_juniper', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_SSG_USER and SSH_SSG_PASSWORD in your ' 'configuration file.', ) else: try: ssh = _connect_ssh(ip_address, user, password) except ConnectionError as e: result['status'] = 'error' messages.append(unicode(e)) else: try: device_info = _ssh_juniper(ssh, ip_address) finally: ssh.close() result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): http_family = (kwargs.get("http_family", "") or "").strip().lower() snmp_name = (kwargs.get("snmp_name", "") or "").strip().lower() if all(("esx" not in http_family, "esx" not in snmp_name, "vmware" not in snmp_name)): raise NoMatchError("It is not VMWare.") user = SETTINGS.get("user") password = SETTINGS.get("password") messages = [] result = get_base_result_template("vmware", messages) if not user or not password: result["status"] = "error" messages.append("Not configured. Set VMWARE_USER and VMWARE_PASSWORD in your " "configuration file.") else: try: server_conn = _connect(ip_address, user, password) except VIApiException as e: result["status"] = "error" messages.append(unicode(e)) else: try: if "vcenter" in server_conn.get_server_type().lower(): raise NoMatchError( "It is `VMware vCenter Server`. To save real " "hypervisor - VM connecion you should scan only " "VMware ESXi servers." ) device_info = _vmware(server_conn, ip_address, messages) finally: server_conn.disconnect() result.update({"status": "success", "device": device_info}) return result
def scan_address(ip_address, **kwargs): http_family = (kwargs.get('http_family', '') or '').strip() if http_family and http_family.lower() not in ('dell', 'embedthis-http'): raise NoMatchError('It is not Dell.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('idrac', messages) if not user or not password: result.update(status='error') messages.append('Not configured.') else: idrac_manager = IDRAC(ip_address, user, password) try: device_info = idrac_device_info(idrac_manager) except Error as e: result.update(status='error') messages.append(unicode(e)) else: device_info['management_ip_addresses'] = [ip_address] result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): if 'nx-os' in (kwargs.get('snmp_name') or '').lower(): raise NoMatchError('Incompatible Nexus found.') if kwargs.get('http_family') not in ('Proxmox', 'Proxmox1'): raise NoMatchError('It is not Proxmox 1.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_proxmox', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_USER and SSH_PASSWORD in your ' 'configuration file.', ) else: try: device_info = _ssh_proxmox(ip_address, user, password) except (ConnectionError, NoMatchError) as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower(): raise NoMatchError('Incompatible Nexus found.') kwargs['guessmodel'] = gvendor, gmodel = guessmodel.guessmodel(**kwargs) if gvendor != 'Cisco' or gmodel not in ('', ): raise NoMatchError('It is not Cisco.') ssh = _connect_ssh(ip_address) try: lines = ssh.asa_command( "show version | grep (^Hardware|Boot microcode|^Serial|address is)" ) finally: ssh.close() pairs = parse.pairs(lines=[line.strip() for line in lines]) sn = pairs.get('Serial Number', None) model, ram, cpu = pairs['Hardware'].split(',') boot_firmware = pairs['Boot microcode'] macs = [] for i in xrange(99): try: junk, label, mac = pairs['%d' % i].split(':') except KeyError: break mac = mac.split(',', 1)[0] mac = mac.replace('address is', '') mac = mac.replace('.', '').upper().strip() label = label.strip() if mac.replace(':', '').upper()[:6] not in MAC_PREFIX_BLACKLIST: macs.append(mac) ram_size = re.search('[0-9]+', ram).group() cpu_match = re.search('[0-9]+ MHz', cpu) cpu_speed = cpu_match.group()[:-4] cpu_model = cpu[:cpu_match.start()][4:].strip() result = get_base_result_template('ssh_cisco_asa') result.update({ 'status': 'success', 'device': { 'model_name': 'Cisco ' + model, 'type': str(DeviceType.firewall), 'mac_adresses': macs, 'boot_firmware': boot_firmware, 'management_ip_addresses': [ip_address], 'memory': [{ 'size': int(ram_size), }], 'processors': [{ 'model_name': cpu_model, 'speed': int(cpu_speed), 'family': cpu_model, }], }, }) if sn not in SERIAL_BLACKLIST: result['device']['serial_number'] = sn return result
def scan_address(ip_address, **kwargs): if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower(): raise NoMatchError('Incompatible Nexus found.') kwargs['guessmodel'] = gvendor, gmodel = guessmodel.guessmodel(**kwargs) if gvendor != 'Cisco' or gmodel not in ('',): raise NoMatchError('It is not Cisco.') if not SSH_USER or not SSH_PASS: raise NotConfiguredError( "SSH not configured in plugin {}.".format(__name__), ) ssh = _connect_ssh(ip_address, SSH_USER, SSH_PASS) try: lines = ssh.asa_command( "show version | grep (^Hardware|Boot microcode|^Serial|address is)" ) finally: ssh.close() pairs = parse.pairs(lines=[line.strip() for line in lines]) sn = pairs.get('Serial Number', None) model, ram, cpu = pairs['Hardware'].split(',') boot_firmware = pairs['Boot microcode'] macs = [] for i in xrange(99): try: junk, label, mac = pairs['%d' % i].split(':') except KeyError: break mac = mac.split(',', 1)[0] mac = mac.replace('address is', '') mac = mac.replace('.', '').upper().strip() label = label.strip() if mac.replace(':', '').upper()[:6] not in MAC_PREFIX_BLACKLIST: macs.append(mac) ram_size = re.search('[0-9]+', ram).group() cpu_match = re.search('[0-9]+ MHz', cpu) cpu_speed = cpu_match.group()[:-4] cpu_model = cpu[:cpu_match.start()][4:].strip() result = get_base_result_template('ssh_cisco_asa') result.update({ 'status': 'success', 'device': { 'model_name': 'Cisco ' + model, 'type': str(DeviceType.firewall), 'mac_addresses': macs, 'boot_firmware': boot_firmware, 'management_ip_addresses': [ip_address], 'memory': [{ 'size': int(ram_size), }], 'processors': [{ 'model_name': cpu_model, 'speed': int(cpu_speed), 'family': cpu_model, }], }, }) if sn not in SERIAL_BLACKLIST: result['device']['serial_number'] = sn return result
def scan_address(ip_address, **kwargs): if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower(): raise NoMatchError('Incompatible Nexus found.') if kwargs.get('http_family') not in ('Unspecified', 'Cisco'): raise NoMatchError('It is not Cisco.') ssh = _connect_ssh(ip_address) hostname = network.hostname(ip_address) try: ssh.cisco_command('terminal length 500') mac = '\n'.join( ssh.cisco_command( "show version | include Base ethernet MAC Address", )) raw = '\n'.join(ssh.cisco_command("show inventory")) subswitches = get_subswitches(ssh.cisco_command("show version"), hostname, ip_address) finally: ssh.close() matches = re.match('Base ethernet MAC Address\s+:\s*([0-9aA-Z:]+)', mac) if matches.groups(): mac = matches.groups()[0] inventory = list(cisco_inventory(raw)) dev_inv, parts = inventory[0], inventory[1:] sn = dev_inv['sn'] result = get_base_result_template('ssh_cisco_catalyst') if subswitches: # virtual switch doesn't have own unique id, reuse first from stack sn += '-virtual' model_name = 'Virtual Cisco Catalyst %s' % dev_inv['pid'] model_type = DeviceType.switch_stack else: model_name = 'Cisco Catalyst %s' % dev_inv['pid'] model_type = DeviceType.switch result.update({ 'status': 'success', 'device': { 'hostname': hostname if hostname else ip_address, 'model_name': model_name, 'type': model_type.raw, 'management_ip_addresses': [ip_address], 'parts': [{ 'serial_number': part['sn'], 'name': part['name'], 'label': part['descr'], } for part in parts], }, }) if sn not in SERIAL_BLACKLIST: result['device']['serial_number'] = sn if subswitches: result['device']['subdevices'] = subswitches else: result['device']['mac_addresses'] = [mac] return result
def scan_address(ip_address, **kwargs): messages = [] result = get_base_result_template('ssh_ibm_bladecenter', messages) device = _blade_scan(ip_address) if not device: raise DeviceError("Malformed bladecenter device: %s" % ip_address) result['device'] = device result['status'] = 'success' return result
def scan_address(ip_address, **kwargs): http_family = kwargs.get('http_family', '') or '' messages = [] result = get_base_result_template('software', messages) result['status'] = 'success' software = _detect_software(ip_address, http_family) if software: result['installed_software'] = software return result
def scan_address(ip_address, **kwargs): snmp_name = kwargs.get("snmp_name", "") or "" if "nx-os" in snmp_name.lower(): raise NoMatchError("Incompatible nexus found") device = run_ssh_ganeti(ip_address) ret = {"status": "success", "device": device} tpl = get_base_result_template("ssh_ganeti") tpl.update(ret) return tpl
def scan_address(ip_address, **kwargs): if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower(): raise NoMatchError('Incompatible Nexus found.') if kwargs.get('http_family') not in ('Unspecified', 'Cisco'): raise NoMatchError('It is not Cisco.') ssh = _connect_ssh(ip_address) hostname = network.hostname(ip_address) try: ssh.cisco_command('terminal length 500') mac = '\n'.join(ssh.cisco_command( "show version | include Base ethernet MAC Address", )) raw = '\n'.join(ssh.cisco_command("show inventory")) subswitches = get_subswitches( ssh.cisco_command("show version"), hostname, ip_address ) finally: ssh.close() matches = re.match( 'Base ethernet MAC Address\s+:\s*([0-9aA-Z:]+)', mac) if matches.groups(): mac = matches.groups()[0] inventory = list(cisco_inventory(raw)) dev_inv, parts = inventory[0], inventory[1:] sn = dev_inv['sn'] result = get_base_result_template('ssh_cisco_catalyst') if subswitches: # virtual switch doesn't have own unique id, reuse first from stack sn += '-virtual' model_name = 'Virtual Cisco Catalyst %s' % dev_inv['pid'] model_type = DeviceType.switch_stack else: model_name = 'Cisco Catalyst %s' % dev_inv['pid'] model_type = DeviceType.switch result.update({ 'status': 'success', 'device': { 'hostname': hostname if hostname else ip_address, 'model_name': model_name, 'type': model_type.raw, 'management_ip_addresses': [ip_address], 'parts': [{ 'serial_number': part['sn'], 'name': part['name'], 'label': part['descr'], } for part in parts], }, }) if sn not in SERIAL_BLACKLIST: result['device']['serial_number'] = sn if subswitches: result['device']['subdevices'] = subswitches else: result['device']['mac_addresses'] = [MACAddressField.normalize(mac)] return result
def scan_address(ip_address, **kwargs): if 'nx-os' in kwargs.get('snmp_name', '').lower(): raise NoMatchError("Incompatible nexus found") device = run_ssh_ganeti(ip_address) ret = { 'status': 'success', 'device': device, } tpl = get_base_result_template('ssh_ganeti') tpl.update(ret) return tpl
def scan_address(ip_address, **kwargs): messages = [] result = get_base_result_template('hp_oa', messages) try: device_info = _hp_oa(ip_address) except (IncompatibleAnswerError, UncompleteAnswerError) as e: messages.append(unicode(e)) result['status'] = 'error' else: result['status'] = 'success' result['device'] = device_info return result
def scan_address(address, **kwargs): messages = [] data = get_base_result_template('dns_hostname', messages) hostname = network.hostname(address) if hostname: data['device'] = { 'hostname': hostname, } data['status'] = 'success' else: data['status'] = 'error' return data
def scan_address(ip_address, **kwargs): ssh = _connect_ssh(ip_address) try: lines = ssh.asa_command( "show version | grep (^Hardware|Boot microcode|^Serial|address is)" ) raw_inventory = '\n'.join(ssh.asa_command("show inventory")) finally: ssh.close() pairs = parse.pairs(lines=[line.strip() for line in lines]) sn = pairs.get('Serial Number', None) model, ram, cpu = pairs['Hardware'].split(',') boot_firmware = pairs['Boot microcode'] ethernets = [] macs = [] for i in xrange(99): try: junk, label, mac = pairs['%d' % i].split(':') except KeyError: break mac = mac.split(',', 1)[0] mac = mac.replace('address is', '') mac = mac.replace('.', '').upper().strip() label = label.strip() macs.append(mac) ram_size = re.search('[0-9]+', ram).group() cpu_match = re.search('[0-9]+ MHz', cpu) cpu_speed = cpu_match.group()[:-4] cpu_model = cpu[:cpu_match.start()][4:].strip() ret = { 'status': 'success', 'device': { 'model_name': 'Cisco ' + model, 'type': str(DeviceType.firewall), 'serial_number': sn, 'mac_adresses': macs, 'boot_firmware': boot_firmware, 'management_ip_addresses': [ip_address], 'memory': [{ 'size': int(ram_size), }], 'processors': [{ 'model_name': cpu_model, 'speed': int(cpu_speed), }], }, } tpl = get_base_result_template('ssh_cisco_asa') tpl.update(ret) return tpl
def scan_address(ip_address, **kwargs): if kwargs.get("http_family") not in ("WindRiver-WebServer",): raise NoMatchError("It's not a HP MSA Storage.") if "nx-os" in (kwargs.get("snmp_name", "") or "").lower(): raise NoMatchError("Incompatible Nexus found.") user = SETTINGS.get("user") password = SETTINGS.get("password") messages = [] result = get_base_result_template("ssh_hp_msa", messages) if not user or not password: raise NotConfiguredError("Not configured. Set SSH_MSA_USER and SSH_MSA_PASSWORD in " "your configuration file.") result.update({"status": "success", "device": _ssh_hp_msa(ip_address, user, password)}) return result
def scan_address(ip_address, **kwargs): status = 'success' ssh = _connect_ssh(ip_address) try: mac = '\n'.join( ssh.cisco_command( "show version | include Base ethernet MAC Address", )) raw = '\n'.join(ssh.cisco_command("show inventory")) finally: ssh.close() mac = mac.strip() if mac.startswith("Base ethernet MAC Address") and ':' in mac: mac = mac.split(':', 1)[1].strip().replace(":", "") else: ethernets = None inventory = list(cisco_inventory(raw)) serials = [inv['sn'] for inv in inventory] dev_inv = inventory[0] model_name = 'Cisco Catalyst %s' % dev_inv['pid'] sn = dev_inv['sn'] model_type = DeviceType.switch device = { 'hostname': network.hostname(ip_address), 'model_name': model_name, 'type': str(model_type), 'serial_number': sn, 'mac_adresses': [ mac, ], 'management_ip_addresses': [ ip_address, ], } parts = inventory[1:] device['parts'] = [] for p in parts: part = { 'serial_number': p['sn'], 'name': p['name'], 'label': p['descr'], } device['parts'].append(part) ret = { 'status': status, 'device': device, } tpl = get_base_result_template('ssh_cisco_catalyst') tpl.update(ret) return tpl
def scan_address(ip_address, **kwargs): if 'nx-os' in kwargs.get('snmp_name', '').lower(): raise NoMatchError("Incompatible Nexus found.") if 'StorageWorks' not in kwargs.get('snmp_name'): raise NoMatchError("No match") if not network.check_tcp_port(ip_address, 22): raise ConnectionError("Port 22 closed.") device = _run_ssh_p2000(ip_address) ret = { 'status': 'success', 'device': device, } tpl = get_base_result_template('ssh_hp_p2000') tpl.update(ret) return json.loads(json.dumps(tpl)) # to ensure its picklable
def scan_address(ip, **kwargs): if XEN_USER is None: raise NotConfiguredError("Xen credentials not set.") if 'nx-os' in kwargs.get('snmp_name', '').lower(): raise NoMatchError("Incompatible Nexus found.") if 'xen' not in kwargs.get('snmp_name', ''): raise NoMatchError("XEN not found.") device = run_ssh_xen(ip) ret = { 'status': 'success', 'device': device, } tpl = get_base_result_template('ssh_xen') tpl.update(ret) return tpl
def scan_address(ip_address, **kwargs): messages = [] result = get_base_result_template("puppet", messages) try: device_info = _puppet(ip_address, messages) except NotConfiguredError as e: messages.append("Not configured.") result["status"] = "error" return result except (LshwError, Error) as e: messages.append(unicode(e)) result["status"] = "error" else: result.update({"status": "success", "device": device_info}) return result
def scan_address(ip_address, **kwargs): user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ilo_hp', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set ILO_USER and ILO_PASSWORD in your ' 'configuration file.', ) else: device_info = _ilo_hp(ip_address, user, password) result['status'] = 'success' result['device'] = device_info return result
def scan_address(ip_address, **kwargs): if kwargs.get("http_family", "") not in ("Unspecified",): raise NoMatchError("It is not 3PAR.") if not (kwargs.get("snmp_name", "") or "").startswith("3PAR"): raise NoMatchError("It is not 3PAR.") user = SETTINGS.get("user") password = SETTINGS.get("password") messages = [] result = get_base_result_template("ssh_3par", messages) if not user or not password: result["status"] = "error" messages.append("Not configured. Set SSH_3PAR_USER and SSH_3PAR_PASSWORD in your " "configuration file.") else: device_info = _ssh_3par(ip_address, user, password) result.update({"status": "success", "device": device_info}) return result
def scan_address(ip_address, **kwargs): status = 'success' ssh = _connect_ssh(ip_address) try: mac = '\n'.join(ssh.cisco_command( "show version | include Base ethernet MAC Address", )) raw = '\n'.join(ssh.cisco_command("show inventory")) finally: ssh.close() mac = mac.strip() if mac.startswith("Base ethernet MAC Address") and ':' in mac: mac = mac.split(':', 1)[1].strip().replace(":", "") else: ethernets = None inventory = list(cisco_inventory(raw)) serials = [inv['sn'] for inv in inventory] dev_inv = inventory[0] model_name='Cisco Catalyst %s' % dev_inv['pid'] sn = dev_inv['sn'] model_type=DeviceType.switch device = { 'hostname': network.hostname(ip_address), 'model_name': model_name, 'type': str(model_type), 'serial_number': sn, 'mac_adresses': [mac, ], 'management_ip_addresses': [ip_address, ], } parts = inventory[1:] device['parts'] = [] for p in parts: part = { 'serial_number': p['sn'], 'name': p['name'], 'label': p['descr'], } device['parts'].append(part) ret = { 'status': status, 'device': device, } tpl = get_base_result_template('ssh_cisco_catalyst') tpl.update(ret) return tpl
def scan_address(ip_address, **kwargs): snmp_name = (kwargs.get('snmp_name', '') or '').lower() if snmp_name and "onboard administrator" not in snmp_name: raise NoMatchError('It is not HP OA.') if kwargs.get('http_family', '') not in ('Unspecified', 'RomPager', 'HP'): raise NoMatchError('It is not HP OA.') messages = [] result = get_base_result_template('hp_oa', messages) try: device_info = _hp_oa(ip_address) except (IncompatibleAnswerError, IncompleteAnswerError) as e: messages.append(unicode(e)) result['status'] = 'error' else: result['status'] = 'success' result['device'] = device_info return result
def scan_address(ip_address, **kwargs): if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower(): raise NoMatchError('Incompatible Nexus found.') if kwargs.get('http_family', '') not in ('IBM', 'Unspecified'): raise NoMatchError('It is not IBM.') if not (kwargs.get('snmp_name', 'IBM') or 'IBM').startswith('IBM'): raise NoMatchError('It is not IBM.') if not network.check_tcp_port(ip_address, 22): raise ConnectionError('Port 22 closed on an IBM BladeServer.') messages = [] result = get_base_result_template('ssh_ibm_bladecenter', messages) device = _blade_scan(ip_address) if not device: raise DeviceError("Malformed bladecenter device: %s" % ip_address) result['device'] = device result['status'] = 'success' return result
def scan_address(ip_address, **kwargs): if kwargs.get('http_family', '') not in ('Unspecified', 'RomPager', 'HP'): raise NoMatchError('It is not HP.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ilo_hp', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set ILO_USER and ILO_PASSWORD in your ' 'configuration file.', ) else: device_info = _ilo_hp(ip_address, user, password) result['status'] = 'success' result['device'] = device_info return result
def scan_address(ip_address, **kwargs): messages = [] result = get_base_result_template('ssh_linux', messages) snmp_name = kwargs.get('snmp_name', '') or '' if not snmp_name: raise NoMatchError("No snmp found") snmp_name = snmp_name.lower() if 'nx-os' in snmp_name: messages.append('Incompatible Nexus found.') result['status'] = 'error' return result if all(( 'linux' not in snmp_name, 'xen' not in snmp_name, not snmp_name.startswith('vmware esx'), )): messages.append('No match.') result['status'] = 'error' return result ssh = None auths = SETTINGS.get('auths', []) for user, password in auths: if user is None or password is None: continue try: ssh = network.connect_ssh(ip_address, user, password) except network.AuthError: continue else: break if not ssh: messages.append('Authorization failed') result['status'] = 'error' return result try: device_info = _ssh_linux(ssh, ip_address) except (network.Error, paramiko.SSHException) as e: messages.append(unicode(e)) result['status'] = 'error' else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_3par', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_3PAR_USER and SSH_3PAR_PASSWORD in your ' 'configuration file.', ) else: device_info = _ssh_3par(ip_address, user, password) result.update({ 'status': 'success', 'device': device_info, }) return device_info
def scan_address(ip_address, **kwargs): messages = [] result = get_base_result_template('puppet', messages) try: device_info = _puppet(ip_address, messages) except NotConfiguredError as e: messages.append('Not configured.') result['status'] = 'error' return result except (LshwError, Error) as e: messages.append(unicode(e)) result['status'] = 'error' else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): if kwargs.get('http_family') not in ('WindRiver-WebServer', ): raise NoMatchError("It's not a HP MSA Storage.") if 'nx-os' in (kwargs.get('snmp_name', '') or '').lower(): raise NoMatchError("Incompatible Nexus found.") user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_hp_msa', messages) if not user or not password: raise NotConfiguredError( 'Not configured. Set SSH_MSA_USER and SSH_MSA_PASSWORD in ' 'your configuration file.', ) result.update({ 'status': 'success', 'device': _ssh_hp_msa(ip_address, user, password), }) return result
def scan_address(ip_address, **kwargs): user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('http_ibm_system_x', messages) if not user or not password: raise NotConfiguredError( 'Not configured. Set IBM_SYSTEM_X_USER and IBM_SYSTEM_X_PASSWORD ' 'in your configuration file.', ) headers, document = get_http_info(ip_address) family = guess_family(headers, document) if family != 'IBM System X': raise NoMatchError('It is not IBM System X device.') result.update({ 'status': 'success', 'device': _http_ibm_system_x(ip_address, user, password), }) return result
def scan_address(ip, **kwargs): if 'nx-os' in kwargs.get('snmp_name', '').lower(): raise NoMatchError("Incompatible Nexus found.") if AIX_USER is None: raise NotConfiguredError("No credentials set up") kwargs['guessmodel'] = gvendor, gmodel = guessmodel.guessmodel(**kwargs) if gvendor != 'IBM': raise NoMatchError("No match") snmp_name = kwargs.get('snmp_name', '') if snmp_name and not snmp_name.startswith('IBM PowerPC'): raise NoMatchError("No match") device = run_ssh_aix(ip) ret = { 'status': 'success', 'device': device, } tpl = get_base_result_template('ssh_cisco_catalyst') tpl.update(ret) return tpl
def scan_address(ip_address, **kwargs): snmp_name = kwargs.get('snmp_name', '') or '' http_family = kwargs.get('http_family', '') or '' if 'nx-os' in snmp_name.lower(): raise NoMatchError("Incompatible Nexus found.") if 'xen' not in snmp_name and 'xen' not in http_family.lower(): raise NoMatchError("XEN not found.") auths = SETTINGS.get('xen_auths') messages = [] result = get_base_result_template('ssh_xen', messages) if not auths: result['status'] = 'error' messages.append( 'Not configured. Set XEN_AUTHS in your configuration file.', ) else: for user, password in auths: if user is None or password is None: continue try: ssh = _connect_ssh(ip_address, user, password) except AuthError: ssh = None continue else: break if not ssh: result['status'] = 'error' messages.append('Authorization failed.') else: try: device_info = _ssh_xen(ssh, ip_address) except (Error, ConnectionError) as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) finally: ssh.close() return result
def scan_address(ip_address, **kwargs): user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('http_supermicro', messages) if not user or not password: result['status'] = 'error' messages.append('Not configured.') else: try: device_info = _http_supermicro(ip_address, user, password) except Error as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): http_family = (kwargs.get('http_family', '') or '').strip().lower() snmp_name = (kwargs.get('snmp_name', '') or '').strip().lower() if all(( 'esx' not in http_family, 'esx' not in snmp_name, 'vmware' not in snmp_name, )): raise NoMatchError('It is not VMWare.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('vmware', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set VMWARE_USER and VMWARE_PASSWORD in your ' 'configuration file.', ) else: try: server_conn = _connect(ip_address, user, password) except VIApiException as e: result['status'] = 'error' messages.append(unicode(e)) else: try: if 'vcenter' in server_conn.get_server_type().lower(): raise NoMatchError( "It is `VMware vCenter Server`. To save real " "hypervisor - VM connecion you should scan only " "VMware ESXi servers.", ) device_info = _vmware(server_conn, ip_address) finally: server_conn.disconnect() result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ipmi', messages) if not user or not password: result['status'] = 'error' messages.append('Not configured.') else: ipmitool = IPMITool(ip_address, user, password) try: device_info = _ipmi(ipmitool) except (AuthError, Error) as e: result['status'] = 'error' messages.append(unicode(e)) else: result.update({ 'status': 'success', 'device': device_info, }) return result
def scan_address(ip_address, **kwargs): if kwargs.get('http_family', '') not in ('Unspecified', ): raise NoMatchError('It is not 3PAR.') if not (kwargs.get('snmp_name', '') or '').startswith('3PAR'): raise NoMatchError('It is not 3PAR.') user = SETTINGS.get('user') password = SETTINGS.get('password') messages = [] result = get_base_result_template('ssh_3par', messages) if not user or not password: result['status'] = 'error' messages.append( 'Not configured. Set SSH_3PAR_USER and SSH_3PAR_PASSWORD in your ' 'configuration file.', ) else: device_info = _ssh_3par(ip_address, user, password) result.update({ 'status': 'success', 'device': device_info, }) return result