def test_get_enviroment_after_import_2(monkeypatch, reset_env_vars,
                                       import_fixture):
    """Tests if the package gets the values of the env variables after import."""
    from dnacentersdk import DNACenterAPI
    monkeypatch.setenv("DNA_CENTER_ENCODED_AUTH", import_fixture.encoded_auth)
    monkeypatch.setenv("DNA_CENTER_BASE_URL", import_fixture.base_url)
    DNACenterAPI(verify=import_fixture.verify, debug=import_fixture.debug)
    return True
def test_get_enviroment_exception_3(monkeypatch, reset_env_vars,
                                    import_fixture):
    """Remove the SECRET env vars and assert AccessTokenError is raised."""
    # missing encoded_auth or (username and password)
    monkeypatch.setenv("DNA_CENTER_BASE_URL", import_fixture.base_url)
    from dnacentersdk import DNACenterAPI, AccessTokenError
    with pytest.raises(AccessTokenError):
        DNACenterAPI(verify=import_fixture.verify, debug=import_fixture.debug)
def test_get_enviroment_after_import_1(monkeypatch, reset_env_vars,
                                       import_fixture):
    """Tests if the package gets the values of the env variables after import."""
    from dnacentersdk import DNACenterAPI
    monkeypatch.setenv("DNA_CENTER_USERNAME", import_fixture.username)
    monkeypatch.setenv("DNA_CENTER_PASSWORD", import_fixture.password)
    monkeypatch.setenv("DNA_CENTER_BASE_URL", import_fixture.base_url)
    DNACenterAPI(verify=import_fixture.verify, debug=import_fixture.debug)
    return True
Exemplo n.º 4
0
def api(mock_dnac_server, base_url):
    return DNACenterAPI(username=DNA_CENTER_USERNAME,
                        password=DNA_CENTER_PASSWORD,
                        encoded_auth=DNA_CENTER_ENCODED_AUTH,
                        base_url=base_url,
                        single_request_timeout=DEFAULT_SINGLE_REQUEST_TIMEOUT,
                        wait_on_rate_limit=DEFAULT_WAIT_ON_RATE_LIMIT,
                        verify=DEFAULT_VERIFY,
                        version=DNA_CENTER_VERSION)
Exemplo n.º 5
0
def get_dnac_token(env_creds):
    """
    This function will Authenticate against Cisco DNA Center server and print out a list of all managed devices
    """
    dnac = DNACenterAPI(username=env_creds['data']['username'],
                        password=env_creds['data']['password'],
                        base_url=env_creds['data']['url'])
    print("DNAC API Authenticated ...")
    print("Gathering Device Info ... \n")
    devices = dnac.devices.get_device_list()
    for device in devices.response:
        print("Device Management IP {} for {} ".format(
            device.managementIpAddress, device.hostname))
Exemplo n.º 6
0
def sdk_setup_dnacentersdk(api_creds):
    try:
        username = api_creds['dnacentersdk']['username']
        password = api_creds['dnacentersdk']['password']
        base_url = api_creds['dnacentersdk']['base_url']
        version = api_creds['dnacentersdk']['api_version']
        verify = str(api_creds['dnacentersdk']['verify']).lower() in ['true']
        api = DNACenterAPI(base_url=base_url, version=version, username=username, password=password, verify=verify)
        logger.info('API connectivity established with dnacentersdk')
        return api
    except Exception as e:
        logger.error('error connecting to dnacentersdk.  Please verify connectivity, username and password')
        logger.error(e)
        exit()
Exemplo n.º 7
0
def main():
    print('**DNA Center client to be monitored: **', CLIENT_MAC)

    # alerts will be send until the alert counter reaches the max alert count
    alert_count = 0

    while alert_count < MAX_ALERT:

        alert = False

        dna_center = DNACenterAPI(username=DNAC_USER,
                                  password=DNAC_PASS,
                                  base_url=DNAC_URL,
                                  verify=False)
        client_info = dna_center.clients.get_client_detail(
            mac_address=CLIENT_MAC)

        # parse the client health score, ap name, snr, location
        try:
            health_score = client_info['detail']['healthScore']
            for score in health_score:
                if score['healthType'] == 'OVERALL':
                    client_health = score['score']
            ap_name = client_info['detail']['clientConnection']
            snr = float(client_info['detail']['snr'])
            location = client_info['detail']['location']
        except:
            print('**client not in DNA Center**')

        alert = client_health_check(alert, client_health)

        if alert:
            print("**sending bot message**")

            message = f"DNA Center VIP Client Alert:\n" \
                      f" Please review the information for the VIP Client-{CLIENT_MAC}:\n" \
                      f"Location: {location}\n" \
                      f"AP: {ap_name}\n" \
                      f"Health: {client_health}\n" \
                      f"SNR: {snr}"

            # send message from slack bot to the specified space: #bot-project
            send_slack_message('#bot-project', message)

            alert_count += 1
            time.sleep(5)
Exemplo n.º 8
0
def main(ctx, username, password, encoded_auth, base_url, version,
         single_request_timeout, wait_on_rate_limit, verify, debug, prompt):
    """DNA Center API wrapper.

    DNACenterAPI wraps all of the individual DNA Center APIs and represents
    them in a simple hierarchical structure.

    """

    if prompt:
        username = click.prompt('Username',
                                default=username,
                                show_default=True)
        password_prompt = 'Password [****]' if password else 'Password'
        password = click.prompt(password_prompt,
                                default=password,
                                show_default=False,
                                hide_input=True,
                                confirmation_prompt='Repeat for confirmation')

    urllib3.disable_warnings()
    spinner = init_spinner(beep=False)
    start_spinner(spinner)
    try:
        ctx.obj = DNACenterAPI(username,
                               password,
                               encoded_auth,
                               base_url=base_url,
                               single_request_timeout=single_request_timeout,
                               wait_on_rate_limit=wait_on_rate_limit,
                               verify=verify,
                               version=version,
                               debug=debug)
        stop_spinner(spinner)
    except Exception as e:
        stop_spinner(spinner)
        tbprint()
        eprint('''Try "dnacentercli --help" for help.''')
        eprint('Error:', e)
        ctx.exit(-1)
Exemplo n.º 9
0
def main():
    try:
        api = DNACenterAPI(username=username,
                           password=password,
                           base_url=base_url,
                           verify=False)  # This handles gather the token

        get_discovery = api.clients.get_overall_client_health(
        )  # Getting overall client health
        client_count = get_discovery['response'][0]['scoreDetail'][0][
            'clientUniqueCount']  # parsing down to get global client count

        print(f"\nthe global client count is: {client_count}"
              )  # printing client count

        get_site = api.sites.get_site_count(
        )  # getting number of sites created
        print(f"The number of sites are: {get_site['response']}"
              )  # printing number of sites.

    except ApiError as e:
        print(e)
Exemplo n.º 10
0
            name = param.parameterName
            params.append({"key": name, "value": self.__dict__[name]})
        return params

if __name__ == '__main__':

    with open('pnp_params.csv', newline='') as csvfile:
        reader = csv.DictReader(csvfile)

        devices = []
        for device in reader:
            devices.append(Device(device))

    api = DNACenterAPI(username=dnac_credentials.username,
                       password=dnac_credentials.password,
                       base_url=dnac_credentials.url,
                       version='2.1.2',
                       verify=False)

    for device in devices:

        device.get_site_id(api)
        device.get_stack()
        device.get_template_id(api)
        device.get_image_id(api)
        variables = device.get_params(api)

        # Add Device
        device_add_payload = [{
            "deviceInfo": {
                "hostname": device.name,
Exemplo n.º 11
0
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# 'application' code
logger.debug('debug message')


api = DNACenterAPI(verify=False, debug=True)

logging.getLogger('dnacentersdk').addHandler(logging.StreamHandler())
# logging.getLogger('dnacentersdk').addHandler(ch)

api.devices.get_device_list()

# CONFIGURE logger correctly following
# https://docs.python.org/3.7/howto/logging.html#configuring-logging
# We were using basic logging
# if we remove the line debug does not log
Exemplo n.º 12
0
#! /usr/bin/env python3
from dnacentersdk import DNACenterAPI

# Create a DNACenterAPI connection object
# Pass arguments of username and password
myapi = DNACenterAPI(username="******", password="******", \
    base_url="https://sandboxdnac2.cisco.com")

# Get list of all devices
devices = myapi.devices.get_device_list()

# Print table 1 headers
print("="*96)
print("{0:25s}{1:1s}{2:46s}{3:1s}{4:23s}".\
    format("Device Name", "|", "Device Type", "|","Up Time"))
print("-"*96)

# Print table 1 content
for device in devices.response:
    print("{0:25s}{1:1s}{2:46s}{3:1s}{4:23s}".\
        format(device.hostname, "|", device.type, "|", device.upTime))
print("="*96)

# Get health of all clients on Thursday 21st January 2021, 2:27:00 PM ACT Adelaide
# Pass args of timestamp in UNIX epoch milliseconds
clients = myapi.clients.get_overall_client_health(timestamp="1611201420000")

# Print table 2 headers
print("{0:25s}{1:1s}{2:46s}{3:1s}{4:23s}".\
    format("Client Category", "|", "Number of Clients", "|","Clients Score"))
print("-"*96)
Exemplo n.º 13
0
    workflow_db = tables.load_xl_db('dna_workflow_db.xlsx')

# Setup logging
if args.debug:
    level = logging.getLevelName('DEBUG')
else:
    level = logging.getLevelName('INFO')

logger = logging.getLogger('main')
logger.setLevel(level)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch = logging.StreamHandler()
ch.setFormatter(formatter)
logger.addHandler(ch)
logger.propagate = False

username = workflow_db['workflows']['api_creds'][0]['username']
password = workflow_db['workflows']['api_creds'][0]['password']
base_url = workflow_db['workflows']['api_creds'][0]['base_url']
version = workflow_db['workflows']['api_creds'][0]['api_version']
verify = workflow_db['workflows']['api_creds'][0]['verify']

if args.offline:
    api = None
else:
    api = DNACenterAPI(base_url=base_url, version=version, username=username, password=password, verify=verify)


if __name__ == "__main__":
    main()
Exemplo n.º 14
0
import urllib3


class Device:
    def __init__(self, hostname, ipAddress, dictionary):
        self.hostname = hostname
        self.ipAddress = ipAddress
        self.add_device_status = None
        self.site_id = None
        for k, v in dictionary.items():
            setattr(self, k, v)


urllib3.disable_warnings()

api = DNACenterAPI()

app = Flask(__name__)


@app.route("/", methods=["POST", "GET"])
def home():
    if request.method == "POST":

        parameters = {
            'userName': request.form["userName"],
            'password': request.form["password"],
            'enablePassword': request.form["enablePassword"],
            'cliTransport': request.form["cliTransport"],
            'type': 'NETWORK_DEVICE',
            'snmpVersion': 'v2',
Exemplo n.º 15
0
from env import config
from dnacentersdk import DNACenterAPI
import json

dnac = DNACenterAPI(username=config['DNAC_USER'],
                    password=config['DNAC_PASSWORD'],
                    base_url=config['DNAC_BASE_URL'],
                    version='2.1.2',
                    verify=True)

if __name__ == "__main__":
    inventory = dnac.devices.get_device_list().response
    relevant_inventory = []

    for device in inventory:
        relevant_device = {}

        relevant_device['mac'] = device['macAddress']
        relevant_device['serial'] = device['serialNumber']
        relevant_device['name'] = device['hostname']
        relevant_device['model'] = device['platformId']
        relevant_device['category'] = 'dnac'

        relevant_inventory.append(relevant_device)

    # Appends the existing Meraki inventory with DNAC inventory in inventory.json
    with open('inventory.json', 'r+') as output_file:
        # Ensures the json dump further on is appended at the end of the file
        existing_inventory = json.load(output_file)

        json.dump(relevant_inventory, output_file)
Exemplo n.º 16
0
def main():
    """
    This application will monitor a wireless user client device.
    It will identify when the client experiences poor performance:
     - decreased total transmit and receive data
     - lower client health score
     - low SNR value
    If any of the above conditions are true, exceeding a predefined number of consecutive polling intervals,
    it will create a notification to Webex Teams
    """

    # logging, debug level, to file {application_run.log}
    logging.basicConfig(
        filename='application_run.log',
        level=logging.DEBUG,
        format=
        '%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S')

    current_time = str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    print('\nWireless Client Monitoring App Start, ', current_time)

    print('\nWireless client user to be monitored: ', CLIENT_USERNAME)

    # Create a DNACenterAPI "Connection Object"
    dnac_api = DNACenterAPI(username=DNAC_USER,
                            password=DNAC_PASS,
                            base_url=DNAC_URL,
                            version='2.1.2',
                            verify=False)

    # If client MAC Address not found, continue with pre-configured MAC Address

    all_client_info = dnac_api.clients.get_client_enrichment_details(
        headers={
            'entity_type': 'network_user_id',
            'entity_value': CLIENT_USERNAME
        })
    client_mac = ''
    if all_client_info != []:
        for client in all_client_info:
            if client['userDetails']['hostType'] == 'WIRELESS':
                client_mac = client['userDetails']['id']
    else:
        print(
            '\nUnknown wireless client MAC Address for the client with the username: '******'':
        print(
            'Wireless client MAC address not found, use the pre-configured MAC Address: ',
            CLIENT_MAC)
        client_mac = CLIENT_MAC
    else:
        print('\nWireless Client MAC Address found: ', client_mac, '\n')

    # start to collect data about the monitored client
    # poll the client until notification will be sent ot Webex

    alert_count = 0  # used to count when minimum performance params are not met

    while alert_count < COUNTER_MAX:

        # initialize the alert flag, used to identify if any conditions of client poor performance are met
        alert = False

        # create a DNACenterAPI "Connection Object", to avoid token expiration after 60 minutes
        dnac_api = DNACenterAPI(username=DNAC_USER,
                                password=DNAC_PASS,
                                base_url=DNAC_URL,
                                version='2.1.2',
                                verify=False)

        # find out the epoch time msec
        timestamp = get_epoch_time()

        # receive the client detail info for the client with the MAC address at a specific timestamp
        client_info = dnac_api.clients.get_client_detail(
            mac_address=client_mac, timestamp=timestamp)

        # parse the total data transfer, ap name, snr, data rate, location, ssid
        try:
            health_score = client_info['detail']['healthScore']
            for score in health_score:
                if score['healthType'] == 'OVERALL':
                    client_health = score['score']
            total_data_transfer = float(
                client_info['detail']['txBytes']) + float(
                    client_info['detail']['rxBytes'])
            ap_name = client_info['detail']['clientConnection']
            snr = float(client_info['detail']['snr'])
            data_rate = float(client_info['detail']['dataRate'])
            location = client_info['detail']['location']
            ssid = client_info['detail']['ssid']
            print(client_health, total_data_transfer, data_rate, snr, ssid,
                  ap_name, location)
        except:
            print(
                '\nUnable to collect the client info, client not in the Cisco DNA Center inventory'
            )

        # verify client connectivity performance
        if client_health <= HEALTH_LOW:
            alert = True
        if snr <= SNR:
            alert = True
        if total_data_transfer <= BW_LOW:
            alert = True

        # if any of the above conditions are true, increase the alert_count
        # if performance improved during this poll interval, reset the alert_count
        if alert:
            alert_count += 1
        else:
            alert_count = 0
        print('Alert: ', alert, alert_count)

        # send the client data to the webhook receiver, to enable the bot functionality
        # prepare the payload
        current_time = str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
        client_report = {
            'username': CLIENT_USERNAME,
            'details': {
                'mac_address': client_mac,
                'location': location,
                'access_point': ap_name,
                'ssid': ssid,
                'health_score': health_score,
                'total_data': total_data_transfer,
                'snr': snr,
                'timestamp': current_time
            }
        }
        response = send_client_details(client_report, WEBHOOK_RECEIVER_URL,
                                       WEBHOOK_HEADER)
        print('\nWireless Client POST API status: ', response[1])

        time.sleep(TIME_INTERVAL * 60)

    # send notifications to Webex Teams

    # find the Webex Teams space id
    space_id = get_room_id(WHATSOP_ROOM)

    card_message = {
        "roomId":
        space_id,
        "markdown":
        "Wireless Client Notification",
        "attachments": [{
            "contentType": "application/vnd.microsoft.card.adaptive",
            "content": {
                "$schema":
                "http://adaptivecards.io/schemas/adaptive-card.json",
                "type":
                "AdaptiveCard",
                "version":
                "1.0",
                "body": [{
                    "type": "TextBlock",
                    "text": "Wireless Client Notification",
                    "weight": "bolder",
                    "size": "large"
                }, {
                    "type": "TextBlock",
                    "text":
                    "Cisco DNA Center identified low wireless performance for this client:",
                    "wrap": True
                }, {
                    "type":
                    "FactSet",
                    "facts": [{
                        "title": "Username: "******"value": CLIENT_USERNAME
                    }, {
                        "title": "MAC Address:",
                        "value": client_mac
                    }, {
                        "title": "Location:",
                        "value": location
                    }, {
                        "title": "Access Point:",
                        "value": ap_name
                    }, {
                        "title": "SSID:",
                        "value": ssid
                    }, {
                        "title": "Health Score:",
                        "value": str(client_health)
                    }, {
                        "title": "Total data:",
                        "value": str(total_data_transfer)
                    }, {
                        "title": "SNR:",
                        "value": str(snr)
                    }]
                }],
                "actions": [
                    {
                        "type":
                        "Action.openURL",
                        "title":
                        "Cisco DNA Center Client 360",
                        "url":
                        DNAC_URL +
                        '/dna/assurance/client/details?macAddress=' +
                        client_mac
                    }
                    # {
                    #    "type": "Action.openURL",
                    #    "title": "ServiceNow incident " + issue_number,
                    #    "url": jira_issue_url
                    # }
                ]
            }
        }]
    }

    post_room_card_message(card_message)

    print('Webex Teams notification message posted')

    current_time = str(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    print('\nWireless Client Monitoring App Run End, ', current_time)
Exemplo n.º 17
0
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

which_dnac = "devnet"
devnet = {
    "debug": False,
    "username": "******",
    "password": "******",
    "base_url": "https://sandboxdnac2.cisco.com:443",
    "public_cert": False,
    "version": "1.3.0",
}
if which_dnac == "devnet":
    api = DNACenterAPI(
        username=devnet["username"],
        password=devnet["password"],
        base_url=devnet["base_url"],
        verify=devnet["public_cert"],
        debug=devnet["debug"],
        version=devnet["version"],
    )
else:
    print("No DNA Center connection information provided.  Exiting.")
    exit(0)

results = {}

print(api.devices.get_device_list())  # Permissions issue

results["workflows"] = api.pnp.get_workflows()
results["client_health"] = api.clients.get_overall_client_health()
results["all_device_configs"] = api.devices.get_device_config_for_all_devices()
def main():
    """
    This application will identify all Cisco DNA Center devices that are in one of these 'un-x' states:
    - un-claimed in the PnP inventory
    - un-assigned to a site
    - un-reachable by Cisco DNA Center
    It will create a report with the hostname and platform Id for these devices
    """

    # logging, debug level, to file {application_run.log}
    logging.basicConfig(
        filename='application_run.log',
        level=logging.DEBUG,
        format=
        '%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S')

    current_time = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    print('\n"un-x_devices_report.py" App Run Start, ', current_time)

    # Create a DNACenterAPI "Connection Object"
    dnac_api = DNACenterAPI(username=DNAC_USER,
                            password=DNAC_PASS,
                            base_url=DNAC_URL,
                            version='2.1.2',
                            verify=False)

    # find all devices that are unclaimed in the PnP inventory
    devices_unclaimed = []
    devices_unclaimed_info = dnac_api.device_onboarding_pnp.get_device_list(
        state='Unclaimed')

    if devices_unclaimed_info == []:
        print('\nNo unclaimed devices found')
    else:
        for device in devices_unclaimed_info:
            devices_unclaimed.append({
                'hostname':
                device['deviceInfo']['hostname'],
                'pid':
                device['deviceInfo']['pid']
            })
        print('\n\nUnclaimed devices found:')
        print('{0:30} {1:30}'.format('Device Hostname', 'Device PID'))
        for device in devices_unclaimed:
            print('{0:30} {1:30}'.format(device['hostname'], device['pid']))

    # find all devices that are unreachable
    devices_unreachable = []
    devices_unreachable_info = dnac_api.devices.get_device_list(
        reachability_status='Unreachable')
    devices_unreachable_json = devices_unreachable_info['response']

    if devices_unreachable_json == []:
        print('\nNo unreachable devices found')
    else:
        for device in devices_unreachable_json:
            devices_unreachable.append({
                'hostname': device['hostname'],
                'pid': device['platformId']
            })
        print('\n\nUnreachable devices found:')
        print('{0:30} {1:30}'.format('Device Hostname', 'Device PID'))
        for device in devices_unreachable:
            print('{0:30} {1:30}'.format(device['hostname'], device['pid']))

    # find all devices that are unassigned to a site
    # we will find this information from the site membership API using the {Global} site id
    global_site_info = dnac_api.sites.get_site(name='Global')
    global_site_id = global_site_info['response'][0]['id']

    site_membership_info = dnac_api.sites.get_membership(
        site_id=global_site_id)

    devices_unassigned = []
    devices_unassigned_info = site_membership_info['device'][0]['response']

    if devices_unassigned_info == []:
        print('\nNo unassigned devices found')
    else:
        for device in devices_unassigned_info:
            devices_unassigned.append({
                'hostname': device['hostname'],
                'pid': device['platformId']
            })
        print('\n\nUnassigned devices found:')
        print('{0:30} {1:30}'.format('Device Hostname', 'Device PID'))
        for device in devices_unassigned:
            print('{0:30} {1:30}'.format(device['hostname'], device['pid']))

    current_time = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    print('\n"un-x_devices_report.py" App Run End, ', current_time)
Exemplo n.º 19
0
from dnacentersdk import DNACenterAPI  # import DNACenterAPI class

# Instantiate DNACenterAPI class passing in URL and credentials
# Does token handling for us
dna = DNACenterAPI(base_url='https://sandboxdnac2.cisco.com',
                   username='******',
                   password='******')
############### DEVICES #############
# Invoke method from devices class to get the list of devices
devices = dna.devices.get_device_list()
# Loop through the list of devices and print their details
for device in devices.response:
    print(device.type)
    print(device.hostname)
    print(device.managementIpAddress)
    print(device.id)
    print(" ")

# Get a specific device referencing it's unique ID
device = dna.devices.get_device_by_id('75d57d36-dade-40cb-aac3-b2267e7e0180')
print(device.response)
#!/usr/bin/env python

import requests
from dnacentersdk import DNACenterAPI
from pprint import pprint

dnac_url = "https://sandboxdnac2.cisco.com"
dnac_username = "******"
dnac_password = "******"

if (__name__ == "__main__"):
    dnac = DNACenterAPI(username=dnac_username, password=dnac_password, base_url=dnac_url)

    dnac_devices = dnac.devices.get_device_list()
    headers = ["Hostname","IP","Family"]
    header_format = "{:<25}{:<15}{:<15}"
    print(header_format.format(*headers))

    for dnac_device in dnac_devices['response']:
        dnac_device_details = [
            dnac_device['hostname'] or "N/A",
            dnac_device['managementIpAddress'] or "N/A",
            dnac_device['family'] or "N/A"
        ]

        print(header_format.format(*dnac_device_details))
Exemplo n.º 21
0
from pprint import pprint

from dnacentersdk import DNACenterAPI

api = DNACenterAPI(
    username='******',
    password='******',
    base_url='https://sandboxdnac2.cisco.com',
    version='1.2.10'
)

client_health = api.clients.get_overall_client_health()
pprint(client_health)


for site in client_health['response']:
    print('*' * 30)
    print("Site ID: {}".format(site['siteId']))
    print('*' * 30)

    for scoreType in site['scoreDetail']:
        client_category = scoreType['scoreCategory']['value']
        client_count = scoreType['clientCount']

        print("{} Clients: {}".format(client_category, client_count))

        if 'scoreList' in scoreType:
            for score_state in scoreType['scoreList']:
                score_state_category = score_state['scoreCategory']['value']
                score_state_client_count = score_state['clientCount']
                print("{:>10} Clients: {}".format(score_state_category, score_state_client_count))
Exemplo n.º 22
0
def main(argv):
    try:
        # set default values for command line arguments
        initlogging(argv)
        global username
        global password
        global HOST
        myAction = CheckUsage(argv)
        while not myAction:
            newAction = input('Please choose option: ')
            myArgv = [argv, newAction]
            myAction = CheckUsage(myArgv)

        csv_file1 = None
        myTokenSuccess = False
        while not myTokenSuccess:
            try:
                import login
                if hasattr(login, 'username'):
                    username = login.username
                if hasattr(login, 'password'):
                    password = login.password
                if hasattr(login, 'HOST'):
                    HOST = login.HOST
                if username == '':
                    username = input('Enter your DNAC username: '******'':
                    password = getpass('Enter your DNAC password: '******'':
                    HOST = input("Please enter the DNAC's IP address: ")
            except ImportError:
                username = input('Enter your DNAC username: '******'Enter your DNAC password: '******'s IP address: ")
            #using DNAC API to retrieve token
            #TOKEN = getAuthToken(username, password)
            i = 0
            try:
                dnac_api = DNACenterAPI(username=username,
                                        password=password,
                                        base_url=f'https://{HOST}',
                                        verify=False)
                myTokenSuccess = True
            except ApiError as myErr:
                print(myErr)
            TOKEN = dnac_api.access_token
        if myArgv[1].lower() == 'importpoolsfromcsv':
            IpPoolsList = []
            with open(argv[2], 'r') as mycsv_file:
                myfieldnames = [
                    'Pool Name', 'Subnet', 'Site Name', 'Global Pool Name',
                    'DHCP Server IPs', 'DNS Server IPs', 'Default Gateway'
                ]
                myreader = csv.DictReader(mycsv_file, myfieldnames)
                for row in myreader:
                    if i == 0:
                        mylogger('Skipping row 1')
                        i = i + 1
                    else:
                        IpPoolsList.append(row)
                        #mylogger(row)

            SiteName = ''
            GlobalPoolName = ''
            SiteId = ''
            GlobalPoolId = ''
            for pool in IpPoolsList:
                mylogger(f'Begin processing site: {pool["Site Name"]}')
                if not SiteName == pool['Site Name'] or SiteId == '':
                    SiteName = pool['Site Name']
                    SiteId = getSiteId(pool['Site Name'], TOKEN)
                if not GlobalPoolName == pool[
                        'Global Pool Name'] or GlobalPoolId == '':
                    GlobalPoolName = pool['Global Pool Name']
                    GlobalPoolId = getGlobalPoolId(pool['Global Pool Name'],
                                                   TOKEN)
                PAYLOAD = {
                    "groupName":
                    pool["Pool Name"],
                    "groupOwner":
                    "DNAC",
                    "type":
                    "generic",
                    "siteId":
                    SiteId,
                    "ipPools": [{
                        "parentUuid": GlobalPoolId,
                        "dhcpServerIps": [pool["DHCP Server IPs"]],
                        "dnsServerIps": [pool["DNS Server IPs"]],
                        "ipPoolOwner": "DNAC",
                        "shared": True,
                        "gateways": [pool["Default Gateway"]],
                        "ipPoolCidr": pool["Subnet"]
                    }]
                }
                ReserveLocalPool(PAYLOAD, TOKEN)
        elif myArgv[1].lower() == 'createglobalpool':
            createglobalpool(dnac_api)

        elif myArgv[1].lower() == 'createdevicecredentials':
            createdevicecredentials(dnac_api)

        elif myArgv[1].lower() == 'createnetworksettings':
            pass

        elif myArgv[1].lower() == 'importfromexcel':
            filename = input('Excel file name (xlsx): ')
            import openpyxl as xl
            mywb = xl.load_workbook(filename)

            for sheet in mywb.sheetnames:
                if sheet == 'Sites':
                    ImportSites(mywb[sheet], dnac_api)
                #elif sheet == 'Pools':
                #    ImportPools(mywb[sheet], dnac_api)
                #elif sheet == 'Credentials':
                #    ImportCredentials(mywb[sheet], dnac_api)

        elif myArgv[1].lower() == 'deletefromexcel':
            filename = input('Excel file name (xlsx): ')
            import openpyxl as xl
            mywb = xl.load_workbook(filename)

            for sheet in mywb.sheetnames:
                if sheet == 'Sites':
                    DeleteSitesFromSheet(mywb[sheet], dnac_api)

        print(f'Base file name of logger is: {logfile}')
    except KeyboardInterrupt:
        print(f'Exception: base file name of logger is: {logfile}')
Exemplo n.º 23
0
"""
Copyright (c) 2020 Cisco and/or its affiliates.
This software is licensed to you under the terms of the Cisco Sample
Code License, Version 1.1 (the "License"). You may obtain a copy of the
License at
               https://developer.cisco.com/docs/licenses
All use of the material herein must be in accordance with the terms of
the License. All rights not expressly granted by the License are
reserved. Unless required by applicable law or agreed to separately in
writing, software distributed under the License is distributed on an "AS
IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied.
"""

__author__ = "Kareem Iskander, DevNet Developer Advocate"
__version__ = "0.1.0"
__copyright__ = "Copyright (c) 2020 Cisco and/or its affiliates."
__license__ = "Cisco Sample Code License, Version 1.1"

from dnacentersdk import DNACenterAPI

dnac_creds = {}
dnac_creds['url'] = 'https://sandboxdnac2.cisco.com'
dnac_creds['username'] = '******'
dnac_creds['password'] = '******'

if __name__ == '__main__':
    dnac = DNACenterAPI(username=dnac_creds['username'],
                        password=dnac_creds['password'],
                        base_url=dnac_creds['url'])
    print("Auth Token: ", dnac.access_token)
Exemplo n.º 24
0
from dnacentersdk import DNACenterAPI
from dotenv import load_dotenv
from tabulate import tabulate
from pprint import pprint
from operator import itemgetter

dnac = DNACenterAPI(
    base_url="https://sandboxdnac2.cisco.com:443",
    version="1.3.0",
    username="******",
    password="******",
    verify=False
)

# Retrieve all Sites
# sites = dnac.sites.get_site()

# site_header = ["Name","Site Hierarchy"]

# site_data =[[site['name'],site['siteNameHierarchy']] for site in sites.response]

# for site in sites.response:
#     site_data.append([site['name'],site['siteNameHierarchy']])

# print(
#     tabulate(
#         sorted(
#             site_data, key=itemgetter(0)
#             ),
#         headers=site_header, tablefmt="fancy_grid"))