def _run_ssh_catalyst(ip): ssh = _connect_ssh(ip) try: raw = '\n'.join(ssh.cisco_command("show inventory")) finally: ssh.close() inventory = list(cisco_inventory(raw)) serials = [inv['sn'] for inv in inventory] try: dev = Device.objects.get(sn__in=serials) except Device.DoesNotExist: dev_inv = inventory[0] dev = Device.create(sn=dev_inv['sn'], model_name='Cisco %s' % dev_inv['pid'], model_type=DeviceType.switch, name=dev_inv['descr'][:255]) dev.raw = raw dev.save(update_last_seen=True) for inv in inventory: cisco_component(dev, inv) ip_address, created = IPAddress.concurrent_get_or_create(address=str(ip)) if created: ip_address.hostname = network.hostname(ip_address.address) ip_address.device = dev ip_address.is_management = True ip_address.save(update_last_seen=True) return dev.name
def run_ssh_asa(ip): ssh = _connect_ssh(ip) 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 = [] 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() ethernets.append(Eth(label, mac, speed=None)) dev = Device.create( ethernets=ethernets, sn=sn, model_name=model, model_type=DeviceType.firewall, boot_firmware=boot_firmware ) dev.save(update_last_seen=True) inventory = list(cisco_inventory(raw_inventory)) for inv in inventory: cisco_component(dev, inv) ipaddr, created = IPAddress.concurrent_get_or_create(address=ip) ipaddr.device = dev ipaddr.is_management = True ipaddr.save() for label, mac, speed in ethernets: eth, created = Ethernet.concurrent_get_or_create(mac=mac, device=dev) eth.label = label eth.device = dev eth.save() return model