示例#1
0
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
示例#2
0
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