def test_error_instantition():
    """
    Validate exception are raised when params are missing
    :return:
    """
    with pytest.raises(Exception):
        sw = cisco_switch()

    with pytest.raises(Exception):
        sw = cisco_switch(hostname="test")
예제 #2
0
def del_vlan(vlan_id: int):
    logger.info(f"Received del vlan {vlan_id} in api")

    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())
    del_result = vservice.del_vlan(vlan_id=vlan_id, device_obj=sw)
    return del_result
def test_switch_instantition():
    sw = cisco_switch(hostname="test",
                      user="******",
                      psswd="foo",
                      device_type="cisco_nexus")
    assert sw is not None
    assert sw.hostname == "test"
def main():
    this_parser = argparse.ArgumentParser()
    populate_parser(this_parser)
    args = this_parser.parse_args()

    vservice = VlanService(db_name=DB_NAME)

    device_params = get_params_from_env()
    sw = cisco_switch(**device_params)

    if args.cmd is not None:
        cmd = args.cmd

        if cmd == "add":
            #add_vlan(args)
            tvlan = vlan(id=args.vlanid,
                         name=args.name,
                         description=args.description)
            vservice.add_vlan(vlan_obj=tvlan, device_obj=sw)

        elif cmd == "del":
            #del_vlan(args)
            vservice.del_vlan(vlan_id=args.vlanid, device_obj=sw)

        elif cmd == "dumpdb":
            vservice.dump_db(device_obj=sw)

        elif cmd == "checksync":
            sync = vservice.check_sync(device_obj=sw)

            print(f"In Sync = {sync.data}")
        elif cmd == "syncfrom":

            vservice.sync_from(device_obj=sw, )
        elif cmd == "syncto":
            vservice.sync_to(device_obj=sw)
        elif cmd == "dumprouter":
            vlan_result = vservice.get_vlans_from_device(device_obj=sw)
            if vlan_result.success:
                for id, vlanobj in vlan_result.data.items():
                    print(vlanobj.id, vlanobj.name)
            else:
                print(f"Error getting vlans from device: {vlan_result.errmsg}")

        elif cmd == "canmerge":

            mergeable_result = vservice.can_merge(device_obj=sw)
            print(f"Can merge == {mergeable_result.data}")

        elif cmd == "update":
            tvlan = vlan(id=args.vlanid,
                         name=args.name,
                         description=args.description)
            vservice.update_vlan(vlan_obj=tvlan, device_obj=sw)
        elif cmd == "merge":
            mresult = vservice.merge(device_obj=sw)
            print(
                f"Successful merge = {mresult.success}, {mresult.error}, {mresult.errmsg}"
            )
예제 #5
0
def add_vlan(v: Vlan, vlanid):
    logger.info(f"adding vlan {vlanid} through api")
    this_vlan = vlan(id=v.id, name=v.name, description=v.description)

    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())
    add_result = vservice.add_vlan(vlan_obj=this_vlan, device_obj=sw)
    return add_result
예제 #6
0
def update_vlan(v: Vlan, vlanid):
    logger.info(f"Updating vlan {vlanid} in api")
    this_vlan = vlan(id=v.id, name=v.name, description=v.description)

    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())
    update_result = vservice.update_vlan(vlan_obj=this_vlan, device_obj=sw)
    return update_result
예제 #7
0
def check_sync():

    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())

    sync = vservice.check_sync(device_obj=sw)

    return sync
예제 #8
0
def db_vlans():

    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())

    db_vlan_result = vservice.get_vlans_from_db(device_obj=sw)
    vlans = []

    db_vlans = db_vlan_result.data

    # jsonify the data

    for vlanid, vlan_obj in db_vlans.items():
        logger.info(vlanid)
        vlans.append(vlan_obj.toJSON())

    logger.info(json.dumps(vlans))
    return db_vlan_result
예제 #9
0
def device_vlans():
    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())

    device_vlans_result = vservice.get_vlans_from_device(device_obj=sw)
    if device_vlans_result.success == 0:
        return device_vlans_result

    vlans = []

    device_vlans = device_vlans_result.data

    for vlanid, vlan_obj in device_vlans.items():
        logger.info(vlanid)
        vlans.append(vlan_obj.toJSON())

    logger.info(json.dumps(vlans))
    device_vlans_result.data = vlans

    return device_vlans_result
예제 #10
0
def trigger_device_vlan_add_update(vobj: Vlan):
    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())
    return vservice.merge_from_device(device_obj=sw, vlans=[vobj.id])
예제 #11
0
def can_merge():
    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())
    can_merge_result = vservice.can_merge(device_obj=sw)
    return can_merge_result
예제 #12
0
def merge_from(vlans: VlanList):

    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())
    merge_reult = vservice.merge_from_device(device_obj=sw, vlans=vlans.vlans)
    return merge_reult
예제 #13
0
def sync_from_device():

    vservice = VlanService(db_name=DB_URI)
    sw = cisco_switch(**get_params_from_env())
    sync_result = vservice.sync_to(device_obj=sw)
    return sync_result