HomeGuidesAPI Reference
GuidesAPI ReferenceGitHubAirheads Developer CommunityLog In

Using pyclearpass

Initial Usage Instructions

Within your favourite Python IDE environment, create an import reference

from pyclearpass import *

Create a object to login into ClearPass. The login object needs to be passed to use any function within the ClearPass API.
Two examples below shows how to create the login object (either one can be used, but not both).

  1. Using client credentials
login = ClearPassAPILogin(server="https://yourserver.network.local:443/api",granttype="client_credentials",
clientsecret="myclientsecretexample", clientid="myclientidexample", verify_ssl=False)

πŸ“˜

The login object will contain the APIToken once any function has been used. It obtains it once for the session and uses the same token through the execution of the rest of the script. You can extract this token and reuse it for other sessions if required (login.api_token). The token will only be available for reuse until the lifetime expires which was configured when specifying a new API Client within the ClearPass Guest Module.

  1. Using an explicitly defined api_token
login = ClearPassAPILogin(server="https://yourserver.network.local:443/api",api_token="yoursecretapitoken", verify_ssl=False)

Find an API you want to use, by prefixing Api in your IDE and Intellisense will show the available APIs available. Each of the top level API category names are available as a module. Once you have chosen a specific API to use, for example ApiPolicyElements, it will show you the available methods if you suffix a . to the command - ApiPolicyElements.

The example below prints the roles available within the ClearPass server.

print(ApiPolicyElements.get_role(login)) 

By default, the example above to return the roles available within the ClearPass server will only show the first 25 roles. If you want to view more, you have to adjust the limit. Placing your cursor over the .getRole will usually show you help about the method.

print(ApiPolicyElements.get_role(login, limit=100))

Help

Once you have written a specific API ApiName.FunctionName(, placing your cursor over the command will show you help for the function and what the required parameters are (example is Visual Studio Code). The first parameter is always login.
You may also read the help for the function by calling help(ApiName.function_name). Each function contains a help section on how to use it.

Python Package Upgrade Instructions

Once an update is available on the Python PyPi repository, you may upgrade your release by completing the following in a command line terminal -

pip3 install pyclearpass --upgrade

Uninstall Package Package

To remove the Python pyclearpass package, type the following command into a command line terminal -
pip3 uninstall pyclearpass
or
pip uninstall pyclearpass

Further Usage Examples

The examples below all exclude importing the module and creating the login variable. This is described directly below. Note, these are just a full examples, there are hundreds of API commands available within the SDK.

New Login Session

The login variable only needs to be defined once in the script. Two examples are shown below to achieve this;

  1. Using client_credentials
from pyclearpass import *
login = ClearPassAPILogin(server="https://yourserver.network.local:443/api",granttype="client_credentials",
clientsecret="myclientsecretexample", clientid="myclientidexample", verify_ssl=False)

πŸ“˜

As mentioned earlier, the login object will contain the API Token once any function has been used. It obtains it once for the session and uses the same token through the execution of the rest of the script. You can extract this token and reuse it for other sessions if required (login.api_token). The token will only be available for reuse until the lifetime expires which was configured when specifying a new API Client within the ClearPass Guest Module.

  1. Using an explicitly defined api_token
from pyclearpass import *
login = ClearPassAPILogin(server="https://yourserver.network.local:443/api",api_token="yoursecretapitoken", verify_ssl=False)

Get Local Server Configuration

import json
LSCGCS = ApiLocalServerConfiguration.get_cluster_server(login)
print(json.dumps(LSCGCS['_embedded']['items'],indent=1))

Get Total End Point Count

IGEP = ApiIdentities.get_endpoint(login, calculate_count='true')
print("Total MACs in Table: "+str(IGEP['count']))

Get Insight Device Details

print(ApiLogs.get_insight_endpoint_ip_by_ip(login,ip="192.168.0.99"))

Get list of Admin Users

AU = ApiGlobalServerConfiguration.get_admin_user(login)
for users in AU['_embedded']['items']:
  print(users)

Add New Endpoint

newEndPoint = {
  "mac_address": "11:22:33:44:55:66",
  "description": "Demo EndPoint 1",
  "status": "Known"
}
print(ApiIdentities.new_endpoint(login,body=newEndPoint))

Add New Role

role={"name": "Test1","description": "Test role made using the API Package in Python"}
print(ApiPolicyElements.new_role(login,body=role))

Delete Role

print(ApiPolicyElements.delete_role_name_by_name(login,name='Demo'))

Get Network Access Device

devices = ApiPolicyElements.get_network_device(login)
for device in devices["_embedded"]["items"]:
    print(device)

Get Network Access Device by Name

print(ApiPolicyElements.get_network_device_name_by_name(login, "Lab-AP-IAP-VC"))

Add New Network Access Device

newNAD = {
    "description": "LAB AP IAP VC",
    "name": "Lab-AP-IAP-VC",
    "ip_address": "192.168.0.100",
    "radius_secret": "example_radius_secret",
    "tacacs_secret": "example_tacacs_secret",
    "vendor_name": "Aruba",
    "coa_capable": True,
    "coa_port": 3799,
    "attributes": {"Device Type": "IAP"},
}
ApiPolicyElements.new_network_device(login, body=newNAD)

Add New Guest Device

This example adds a Guest Device including

  1. An expiry date within 24 hours in seconds
  2. Associated to the role ID of 3 (Guest in test environment)
  3. Statically assigned MPSK password
import time
new_guest_device = {
  "enabled": True,
  "expire_time": int(time.time()) + 86400,
  "mac": "11:22:22:33:33:11",
  "notes": "Created by API Test Script",
  "role_id": 3,
  "sponsor_profile_name": "Super Administrator",
  "visitor_name": "API Test Device",
  "mpsk":"SecretPassword",
  "mpsk_enable":"1"
}
new_device= ApiIdentities.new_device(login,body=new_guest_device)
print(new_device)

Get Guest Device by MAC

import json
get_mac_address = "11-22-33-33-22-11"
view_guest_device = ApiIdentities.get_device_mac_by_macaddr(login,get_mac_address)
print(json.dumps(view_guest_device,indent=2))

Delete an Enforcement Policy

print(ApiPolicyElements.delete_enforcement_policy_by_enforcement_policy_id(login,enforcement_policy_id='3058'))

Create a new Enforcement Policy with staged initial rules and then a loop to create additional rules.

newEnforcementPolicy= {
  "name": "MPSK Demo",
  "description": "MPSK Enforcement",
  "enforcement_type": "RADIUS",
  "default_enforcement_profile": "Deny Device",
  "rule_eval_algo": "first-applicable",
  "rules": ''}

newEnforcementPolicyRules =({"rules":[]})

initialrule = {
            "enforcement_profile_names": [
                "Sample Enforcement Policy"
            ],
            "condition": [
                {
                    "type": "Connection",
                    "name": "AP-Name",
                    "oper": "BEGINS_WITH",
                    "value": "APDemo"
                }
            ]
        }
newEnforcementPolicyRules["rules"].append(initialrule)

for id in range(9,11):
    randompsk = random.randint(8000000,9000000)
    epf ={
            "enforcement_profile_names": [
                "Sample Enforcement Policy"

            ],
            "condition": [
                {
                    "type": "Connection",
                    "name": "AP-Name",
                    "oper": "BEGINS_WITH",
                    "value": "APNo"+str(id)
                }
            ]
        }
    
    newEnforcementPolicyRules["rules"].append(epf) 
 
newEnforcementPolicy["rules"] = newEnforcementPolicyRules["rules"]
print(ApiPolicyElements.new_enforcement_policy(login,body=newEnforcementPolicy))

πŸ“˜

You may find it easier to initially pull a working Enforcement Policy with minimal rules before trying to create a new one from scratch.

For example, the rule evaluation in the GUI shows as 'First applicable', however in the back-end it is shown as 'first-applicable'. This example is a working policy. It is demonstrated with a loop which could read an entry in a CSV file if adapted.

Update an existing Enforcement Policy, retaining the original items and using a loop to add additional items

epol = ApiPolicyElements.get_enforcement_policy_name_by_name(login, name="MPSK Enforcement")
OriginalRules = epol["rules"]
CombinedRules =({"rules":[]})
for item in range(len(OriginalRules)):
    CombinedRules["rules"].append(OriginalRules[item])

for no in range(9,11):
    rule ={
            "enforcement_profile_names": [
                "Sample Enforcement Policy"

            ],
            "condition": [
                {
                    "type": "Connection",
                    "name": "AP-Name",
                    "oper": "BEGINS_WITH",
                    "value": "APNo"+str(no)
                }
            ]
        }
    
    CombinedRules["rules"].append(rule)  

ApiPolicyElements.update_enforcement_policy_name_by_name(login,name="MPSK Enforcement",body=CombinedRules)