Global IP Pool Guide
Introduction
As part of the Site Design, the Global IP Pool endpoints support for the developer to manage IP Address pools in Cisco DNA Center in places like virtual networks for Software Defined Access.
Goal
The goals of this guide are:
- Get the site topology
- Get the physical topology
- Get the logical topology
Endpoints and methods used
- POST
/dna/system/api/v1/auth/token
- POST
/dna/intent/api/v1/global-pool
- GET
/dna/intent/api/v1/global-pool
Prerequisites
For this module, it is recommended that the user already has experience authenticating with Cisco DNA Center:
Environment
This guide was developed using:
Authentication
First, we need to authenticate and retrieve a token from the API.
Do not use
verify=False
orurllib3.disable_warnings()
if you are not sure of its purpose. Read Authentication and Authorization.
import requests
from requests.auth import HTTPBasicAuth
import urllib3
urllib3.disable_warnings()
BASE_URL = 'https://<IP Address>'
AUTH_URL = '/dna/system/api/v1/auth/token'
USERNAME = '<USERNAME>'
PASSWORD = '<PASSWORD>'
response = requests.post(BASE_URL + AUTH_URL, auth=HTTPBasicAuth(USERNAME, PASSWORD), verify=False)
token = response.json()['Token']
Global IP Pool API
It allows for the user to create an IP Pool to be used as part of the configuration for virtual networks.
Create Global IP Pool
Site Topology returns information about the sites in Cisco DNA Center and their hierarchy related to the Global site.
GLOBAL_IP_POOLS_URL='/dna/intent/api/v1/global-pool'
pool_information = {
"settings": {
"ippool": [
{
"ipPoolName": "DNAC-Guide_Pool",
"type": "Generic",
"ipPoolCidr": "172.30.200.0/24",
"gateway": "172.30.200.1",
"dhcpServerIps": ["10.255.3.50"],
"dnsServerIps": ["10.255.3.50"],
"IpAddressSpace":"IPv4"
}
]
}
}
response = requests.post(BASE_URL + GLOBAL_IP_POOLS_URL,
json=pool_information,
headers=headers, verify=False)
print(response)
List IP Pools
Using the APIs it is possible to list the available IP Pools:
GLOBAL_IP_POOLS_URL='/dna/intent/api/v1/global-pool'
query_params = {
"limit": 10
}
response = requests.get(BASE_URL + GLOBAL_IP_POOLS_URL,
params=query_params,
headers=headers, verify=False)
for pool in response:
print(pool['id'], pool['ipPoolName'], pool['ipPoolCidr'])
Code
The repository for this guide is here. The final code with functions is shown below.
# Modules import
import requests
from requests.auth import HTTPBasicAuth
# Disable SSL warnings. Not needed in production environments with valid certificates
import urllib3
urllib3.disable_warnings()
# Authentication
BASE_URL = 'https://<IP Address>'
AUTH_URL = '/dna/system/api/v1/auth/token'
USERNAME = '<USERNAME>'
PASSWORD = '<PASSWORD>'
# URLs
# URLs
GLOBAL_IP_POOLS_URL='/dna/intent/api/v1/global-pool'
# Get Authentication token
def get_dnac_jwt_token():
response = requests.post(BASE_URL + AUTH_URL,
auth=HTTPBasicAuth(USERNAME, PASSWORD),
verify=False)
token = response.json()['Token']
return token
# Get Global pools
def get_global_ip_pools(headers, query_params):
response = requests.get(BASE_URL + GLOBAL_IP_POOLS_URL,
params=query_params,
headers=headers, verify=False)
return response.json()['response']
# Create Global pools
def create_global_ip_pools(headers, pool_information):
response = requests.post(BASE_URL + GLOBAL_IP_POOLS_URL,
json=pool_information,
headers=headers, verify=False)
return response.json()
def main():
# obtain the Cisco DNA Center Auth Token
token = get_dnac_jwt_token()
headers = {'X-Auth-Token': token, 'Content-Type': 'application/json'}
pool_information = {
"settings": {
"ippool": [
{
"ipPoolName": "DNAC-Guide_Pool",
"type": "Generic",
"ipPoolCidr": "172.30.200.0/24",
"gateway": "172.30.200.1",
"dhcpServerIps": ["10.255.3.50"],
"dnsServerIps": ["10.255.3.50"],
"IpAddressSpace":"IPv4"
}
]
}
}
response = create_global_ip_pools(headers, pool_information)
time.sleep(5)
response = get_global_ip_pools(headers, {})
for pool in response:
print(pool['id'], pool['ipPoolName'], pool['ipPoolCidr'])
if __name__ == "__main__":
main()