Exemplo n.º 1
0
def ssidupdate():
    form = SSIDForm()
    if form.validate_on_submit():
        message = []
        
        ssidnum = '0'
        name = form.ssidname.data
        if form.ssidenabled.data == 'enabled':
            enabled = 'true'
        else:
            enabled = 'false'
        authmode = 'psk'
        encryptionmode = 'wpa'
        if len(form.ssidpsk.data) == 0:
            psk = None
        else:
            psk = form.ssidpsk.data
        ipassignmentmode = form.ssidipassignment.data
        vlan = form.ssidvlanid.data
        
        postNetwork = form.networkField.data
        print(postNetwork)
        
        result = merakiapi.updatessid(apikey, postNetwork, ssidnum, name, enabled, authmode, encryptionmode, ipassignmentmode, psk, vlan, suppressprint=False)
        
        if result == None:
            netname = merakiapi.getnetworkdetail(apikey, postNetwork)
            message = Markup('SSID Successfully updated for Network: <strong>{}</strong>'.format(netname['name']))
        else:
            message = result             

        #SEND MESSAGE TO SUBMIT PAGE
        flash(message)
        return redirect('/submit')
    return render_template('ssid.html', title='Meraki SSID Provisioning', form=form)
Exemplo n.º 2
0
def get_network_info():
    print('Getting Network Information')
    for row in filterresults:
        fac_number = m.getnetworkdetail(apikey,
                                        row['networkId'],
                                        suppressprint=True)
        networkinfo.append({
            'name': fac_number['name'],
            'serial': row['serial']
        })
        print(fac_number['name'] + " - " + row['serial'])
Exemplo n.º 3
0
def provision():
    form = AddProvisionForm()
    if form.validate_on_submit():
        message = []
        postSerials = []
        postNames = []
        
        postNetwork = form.networkField.data
        
        #BUILD ARRAY OF SERIAL NUMBERS FROM FORM
        postSerials.append(form.serialField1.data)
        postSerials.append(form.serialField2.data)
        postSerials.append(form.serialField3.data)
        postSerials.append(form.serialField4.data)
        postSerials.append(form.serialField5.data)
        postSerials.append(form.serialField6.data)
        postSerials.append(form.serialField7.data)
        postSerials.append(form.serialField8.data)
        postSerials = [element.upper() for element in postSerials]; postSerials
        
        postNames.append(form.nameField1.data)
        postNames.append(form.nameField2.data)
        postNames.append(form.nameField3.data)
        postNames.append(form.nameField4.data)
        postNames.append(form.nameField5.data)
        postNames.append(form.nameField6.data)
        postNames.append(form.nameField7.data)
        postNames.append(form.nameField8.data)
        #print(postSerials)
        
        for i,serial in enumerate(postSerials):
            #SKIP EMPTY SERIAL NUMBER TEXT BOXES
            if serial is '':
                continue
            #EASTER EGG
            elif "ILOVEMERAKI" in serial:
                message = Markup("<img src='/static/meraki.png' />")
            else:
                result = merakiapi.adddevtonet(apikey, postNetwork, serial)
                if result == None:
                    #SET ADDRESS AND NAME
                    merakiapi.updatedevice(apikey, postNetwork, serial, name=postNames[i], address=form.addressField.data, move='true')
                    #API RETURNS EMPTY ON SUCCESS, POPULATE SUCCESS MESSAGE MANUALLY
                    netname = merakiapi.getnetworkdetail(apikey, postNetwork)
                    message = Markup('Device with serial <strong>{}</strong> successfully added to Network: <strong>{}</strong>'.format(serial, netname['name']))
                #404 MESSAGE FOR INVALID SERIAL IS BLANK, POPULATE ERROR MESSAGE MANUALLY
                elif result == 'noserial':
                    message = 'Invalid serial {}'.format(serial)
                else:
                    message = result
            #SEND MESSAGE TO SUBMIT PAGE
            flash(message)
        return redirect('/submit')
    return render_template('index.html', title='Meraki Device Provisioning', form=form)
Exemplo n.º 4
0
def pskgroups():
    form = PSKForm()
    if form.validate_on_submit():

        message = []

        ssidnum = '5'

        postNetwork = form.networkField.data
        print(postNetwork)

        pskname = form.pskname.data
        pskkey = form.pskkey.data
        pskvlanid = form.pskvlanid.data

        result = merakiapi.createipskgrouppolicy(apikey, postNetwork,
                                                 pskvlanid)
        groupPolicyId = result['groupPolicyId']

        result = merakiapi.createipsk(apikey,
                                      postNetwork,
                                      ssidnum,
                                      pskname,
                                      pskkey,
                                      groupPolicyId,
                                      suppressprint=False)

        netname = merakiapi.getnetworkdetail(apikey, postNetwork)
        message = Markup(
            'PSK successfully created for Network: <strong>{}</strong>. PSK: <strong>{}</strong>, Key: <strong>{}</strong>, VLAN: <strong>{}</strong>'
            .format(netname['name'], pskname, pskkey, pskvlanid))

        #SEND MESSAGE TO SUBMIT PAGE
        flash(message)
        return redirect('/submit')
    return render_template('psk.html', title='Meraki PSK Groups', form=form)
Exemplo n.º 5
0
def replaceForm():
    form = ReplaceDevice()
    if form.validate_on_submit():
        message = []

        postNetwork = form.networkField.data
        netname = merakiapi.getnetworkdetail(apikey, postNetwork)
        oldMX = form.oldMX.data
        newMX = form.newMX.data
        oldSwitch = form.oldSwitch.data
        newSwitch = form.newSwitch.data
        oldAP = form.oldAP.data
        newAP = form.newAP.data

        if oldMX is not '':
            oldconfig = merakiapi.getdevicedetail(apikey, postNetwork, oldMX)
            merakiapi.updatedevice(apikey,
                                   postNetwork,
                                   newMX,
                                   name=oldconfig['name'],
                                   tags=oldconfig['tags'],
                                   lat=oldconfig['lat'],
                                   lng=oldconfig['lng'],
                                   address=oldconfig['address'],
                                   move='true')
            result = merakiapi.removedevfromnet(apikey, postNetwork, oldMX)
            if result == None:
                message = Markup(
                    'MX with serial <strong>{}</strong> successfully deleted from Network: <strong>{}</strong>'
                    .format(oldMX, netname['name']))
            merakiapi.claim(apikey, organizationid, serial=newMX)
            result = merakiapi.adddevtonet(apikey, postNetwork, newMX)
            if result == None:
                message = Markup(
                    'MX with serial <strong>{}</strong> successfully added to Network: <strong>{}</strong>'
                    .format(newMX, netname['name']))

        if oldSwitch is not '':
            #ADD NEW SWITCH TO NETWORK
            merakiapi.claim(apikey, organizationid, serial=newSwitch)
            result = merakiapi.adddevtonet(apikey, postNetwork, newSwitch)
            oldconfig = merakiapi.getdevicedetail(apikey, postNetwork,
                                                  oldSwitch)
            merakiapi.updatedevice(apikey,
                                   postNetwork,
                                   newSwitch,
                                   name=oldconfig['name'],
                                   tags=oldconfig['tags'],
                                   lat=oldconfig['lat'],
                                   lng=oldconfig['lng'],
                                   address=oldconfig['address'],
                                   move='true')
            if result == None:
                message = Markup(
                    'Switch with serial <strong>{}</strong> successfully added to Network: <strong>{}</strong>'
                    .format(newSwitch, netname['name']))
                #CLONE L2 PORT CONFIGS
                if '24' in oldconfig['model']:
                    numports = 30
                elif '48' in oldconfig['model']:
                    numports = 54
                elif '16' in oldconfig['model']:
                    numports = 22
                elif '32' in oldconfig['model']:
                    numports = 38
                for port in range(1, numports):
                    config = merakiapi.getswitchportdetail(
                        apikey, oldSwitch, port)
                    print(config)
                    # Clone corresponding new switch
                    # Tags needed to be input as a list
                    #if config['tags'] is not '':
                    #    tags = config['tags'].split()
                    #else:
                    tags = []

                    # Access type port
                    if config['type'] == 'access':
                        merakiapi.updateswitchport(
                            apikey,
                            newSwitch,
                            port,
                            name=config['name'],
                            tags=tags,
                            enabled=config['enabled'],
                            porttype=config['type'],
                            vlan=config['vlan'],
                            voicevlan=config['voiceVlan'],
                            poe='true',
                            isolation=config['isolationEnabled'],
                            rstp=config['rstpEnabled'],
                            stpguard=config['stpGuard'],
                            accesspolicynum=config['accessPolicyNumber'])

# Trunk type port
                    elif config['type'] == 'trunk':
                        merakiapi.updateswitchport(
                            apikey,
                            newSwitch,
                            port,
                            name=config['name'],
                            tags=tags,
                            enabled=config['enabled'],
                            porttype=config['type'],
                            vlan=config['vlan'],
                            allowedvlans=config['allowedVlans'],
                            poe='true',
                            isolation=config['isolationEnabled'],
                            rstp=config['rstpEnabled'],
                            stpguard=config['stpGuard'])
            #404 MESSAGE FOR INVALID SERIAL IS BLANK, POPULATE ERROR MESSAGE MANUALLY
            elif result == 'noserial':
                message = Markup(
                    'Invalid serial <strong>{}</strong>'.format(serial))
            else:
                message = result
            #REMOVE OLD SWITCH FROM NETWORK
            merakiapi.removedevfromnet(apikey, postNetwork, oldSwitch)

        if oldAP is not '':
            oldconfig = merakiapi.getdevicedetail(apikey, postNetwork, oldAP)
            merakiapi.updatedevice(apikey,
                                   postNetwork,
                                   newAP,
                                   name=oldconfig['name'],
                                   tags=oldconfig['tags'],
                                   lat=oldconfig['lat'],
                                   lng=oldconfig['lng'],
                                   address=oldconfig['address'],
                                   move='true')
            result = merakiapi.removedevfromnet(apikey, postNetwork, oldAP)
            if result == None:
                message = Markup(
                    'AP with serial <strong>{}</strong> successfully deleted from Network: <strong>{}</strong>'
                    .format(oldMX, netname['name']))
            merakiapi.claim(apikey, organizationid, serial=newAP)
            result = merakiapi.adddevtonet(apikey, postNetwork, newAP)
            if result == None:
                message = Markup(
                    'AP with serial <strong>{}</strong> successfully added to Network: <strong>{}</strong>'
                    .format(newMX, netname['name']))

        #SEND MESSAGE TO SUBMIT PAGE
        flash(message)
        return redirect('/submit')
    return render_template('replace.html',
                           title='Meraki Device Provisioning',
                           form=form)
Exemplo n.º 6
0
def provisionNetwork():
    form = CreateProvisionForm()
    if form.validate_on_submit():
        message = []
        postSerials = []
        postNames = []

        postNetwork = form.networkTextField.data
        #print(postNetwork)

        postTemplate = form.templateField.data

        #BUILD ARRAY OF SERIAL NUMBERS FROM FORM
        postSerials.append(form.serialField1.data)
        postSerials.append(form.serialField2.data)
        postSerials.append(form.serialField3.data)
        postSerials.append(form.serialField4.data)
        postSerials.append(form.serialField5.data)
        postSerials.append(form.serialField6.data)
        postSerials.append(form.serialField7.data)
        postSerials.append(form.serialField8.data)
        postSerials = [element.upper() for element in postSerials]
        postSerials

        postNames.append(form.nameField1.data)
        postNames.append(form.nameField2.data)
        postNames.append(form.nameField3.data)
        postNames.append(form.nameField4.data)
        postNames.append(form.nameField5.data)
        postNames.append(form.nameField6.data)
        postNames.append(form.nameField7.data)
        postNames.append(form.nameField8.data)

        #CREATE NETWORK AND BIND TO TEMPLATE
        result = merakiapi.addnetwork(apikey, organizationid, postNetwork,
                                      "appliance switch wireless", "",
                                      "America/Los_Angeles")

        #GET NEW NETWORK ID
        networks = merakiapi.getnetworklist(apikey, organizationid)
        for network in networks:
            if network['name'] == postNetwork:
                newnetwork = network['id']
                break
        message = Markup(
            "New Network created: <strong>{}</strong> with ID: <strong>{}</strong>"
            .format(postNetwork, newnetwork))
        flash(message)

        #BIND TO TEMPLATE
        if form.templateField.data is not "":
            bindresult = merakiapi.bindtotemplate(apikey, newnetwork,
                                                  postTemplate)
            message = Markup(
                "Network: <strong>{}</strong> bound to Template: <strong>{}</strong>"
                .format(postNetwork, postTemplate))
            flash(message)

        #ADD SERIALS TO NETWORK
        for i, serial in enumerate(postSerials):
            #SKIP EMPTY SERIAL NUMBER TEXT BOXES
            if serial is '':
                continue
            #EASTER EGG
            elif "ILOVEMERAKI" in serial:
                message = Markup("<img src='/static/meraki.png' />")
            else:
                result = merakiapi.adddevtonet(apikey, newnetwork, serial)
                if result == None:
                    #SET ADDRESS AND NAME
                    merakiapi.updatedevice(apikey,
                                           newnetwork,
                                           serial,
                                           name=postNames[i],
                                           address=form.addressField.data,
                                           move='true')
                    #API RETURNS EMPTY ON SUCCESS, POPULATE SUCCESS MESSAGE MANUALLY
                    netname = merakiapi.getnetworkdetail(apikey, newnetwork)
                    message = Markup(
                        'Device with serial <strong>{}</strong> successfully added to Network: <strong>{}</strong>'
                        .format(serial, netname['name']))
                #404 MESSAGE FOR INVALID SERIAL IS BLANK, POPULATE ERROR MESSAGE MANUALLY
                elif result == 'noserial':
                    message = Markup(
                        'Invalid serial <strong>{}</strong>'.format(serial))
                else:
                    message = result
            #SEND MESSAGE TO SUBMIT PAGE
            flash(message)
        return redirect('/submit')
    return render_template('indextemplate.html',
                           title='Meraki Device Provisioning',
                           form=form)
Exemplo n.º 7
0
def bulkupdate():
    form = BulkForm()
    if form.validate_on_submit():
        message = []

        allnetworkstochange = []
        mxnetworkstochange = []
        mrnetworkstochange = []
        networks = merakiapi.getnetworklist(apikey, organizationid)

        for network in networks:
            mxnetworktypes = ['combined', 'appliance']
            mrnetworktypes = ['combined', 'wireless']
            if (network['tags'] == ''):
                continue
            else:
                temptags = str(network['tags']).split(' ')
                for tag in temptags:
                    if tag.strip() == form.tagField.data:
                        allnetworkstochange.append(network['id'])
                        if any(x in network['type'] for x in mxnetworktypes):
                            mxnetworkstochange.append(network['id'])
                        if any(x in network['type'] for x in mrnetworktypes):
                            mrnetworkstochange.append(network['id'])
                        continue

        #SET IPS
        if form.setips.data == True:
            for network in mxnetworkstochange:
                netname = merakiapi.getnetworkdetail(apikey, network)
                print("CHANGING IPS SETTINGS FOR NETWORK: {}".format(
                    netname['name']))
                if form.ipsmode.data == 'disabled':
                    result = merakiapi.updateintrusion(apikey,
                                                       network,
                                                       mode=form.ipsmode.data)
                else:
                    result = merakiapi.updateintrusion(
                        apikey,
                        network,
                        mode=form.ipsmode.data,
                        idsRulesets=form.ipsrules.data)
                if result == None:
                    message.append(
                        'IPS settings successfully updated for Network: <strong>{}</strong>'
                        .format(netname['name']))
                else:
                    message.append(result)

        ###FINISH VPN
        if form.setvpn.data == True:
            hubnets = []
            defaults = []
            if 'none' not in form.hub1.data:
                hubnets.append(form.hub1.data)
                defaults.insert(0, form.default1.data)
                if 'none' not in form.hub2.data:
                    hubnets.append(form.hub2.data)
                    defaults.insert(1, form.default2.data)
                    if 'none' not in form.hub3.data:
                        hubnets.append(form.hub3.data)
                        defaultsinsert(2, form.default3.data)
            for network in mxnetworkstochange:
                vpnsettings = merakiapi.getvpnsettings(apikey, network)
                print(vpnsettings)
                if 'subnets' in vpnsettings:
                    merakiapi.updatevpnsettings(apikey,
                                                network,
                                                mode='spoke',
                                                subnets=vpnsettings['subnets'],
                                                hubnetworks=hubnets,
                                                defaultroute=defaults)
                else:
                    merakiapi.updatevpnsettings(apikey,
                                                network,
                                                mode='spoke',
                                                hubnetworks=hubnets,
                                                defaultroute=defaults)

        #SET SSID PSK
        if form.setpsk.data == True:
            for network in mrnetworkstochange:
                ssid = merakiapi.getssiddetail(apikey, network,
                                               form.ssidnum.data)
                result = merakiapi.updatessid(
                    apikey, network, form.ssidnum.data, ssid['name'],
                    ssid['enabled'], ssid['authMode'], ssid['encryptionMode'],
                    ssid['ipAssignmentMode'], form.ssidpsk.data)

                if result == None:
                    message = Markup(
                        'SSID Successfully updated for Network: <strong>{}</strong>'
                        .format(network))
                else:
                    message = result

        #SEND MESSAGE TO SUBMIT PAGE
        flash(message)
        return redirect('/submit')
    return render_template('bulk.html', title='Meraki Bulk Changes', form=form)