pyise-ers

Python module to manage Cisco ISE via the ERS API

https://github.com/falkowich/pyise-ers

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (8.4%) to scientific vocabulary

Keywords

api cisco-ise ers python3

Keywords from Contributors

genomics sequences interactive yolov5s medical-imaging embedded distributed ranking annotation serialize
Last synced: 6 months ago · JSON representation

Repository

Python module to manage Cisco ISE via the ERS API

Basic Info
  • Host: GitHub
  • Owner: falkowich
  • License: gpl-2.0
  • Language: Python
  • Default Branch: master
  • Homepage:
  • Size: 809 KB
Statistics
  • Stars: 27
  • Watchers: 8
  • Forks: 28
  • Open Issues: 9
  • Releases: 8
Archived
Topics
api cisco-ise ers python3
Created over 8 years ago · Last pushed over 1 year ago
Metadata Files
Readme License

README.md

September 2024 - Repository goes into Archive mode

As of 2024-09-24 this library goes in to Archive.
ISE 2.7 are marked as EoL, see » End of Life Announcement for the Cisco Identity Services Engine Software Version 2.7

If anyone want to continue, just send me a note or fork the repository.

-- Kind Regards Falk

ISE-ERS API Wrapper

In September 2024 this repo will be set to archived,
See discussion here »

Python module to manage Cisco ISE via the REST API.

Repography logo / Recent activity Time period

Timeline graph Issue status graph Pull request status graph Trending topics Top contributors Activity map

Information about the master branch

As of May 6, 2023

The master branch is currently being in development.
Please keep this in mind when using the code from this branch.

History

All initial work is done by https://github.com/bobthebutcher and https://github.com/mpenning.
I forked from them and updated so it worked with ISE 2.2.x and changed all functions to json calls.

  • 2021-10-01 » All history before 0.2 and the namechange to pyiseers is located here
  • 2021-10-01 » Deforked from upstream for simpler handling of PR's as of this discussion
  • 2021-10-02 » Started work with namechange as of this issue to pyise-ers
  • 2021-10-03 » Pushed pyise-ers 0.2.0-rc to test.pypi.com
  • 2021-10-05 » Pushed pyise-ers 0.2.0.1 to pypi.com
  • 2023-10-27 » Pushed pyise-ers 0.3.0.1 - 0.3.0.3 to pypi-test
  • 2023-10-28 » Pushed pyise-ers 0.3.0.3 to pypi

Namechange information

After 0.2.0.1 information

In 2021 I tried to publish the library to DevNet and beq modulname was just "ise" I had to do a rename on the package, module and repository.

  • Repository is named pyise-ers,
  • The PyPI package is named pyise-ers.
  • The module is named pyiseers (for convenience of imports without dashes in them)

If you use the "old 0.1.2.x" ise packages in PyPi, please update your requirements to pyise-ers to get continued updates. (after testing everything in your environment offcourse)

Status

I am keeping this active until ISE 2.7 is out of support. And for you who have ISE 3.1 and above, I would recommend https://github.com/CiscoISE/ciscoisesdk project.
See this discussion

Everything should work on 3.0.x train too, beq a few members uses that version. But in my test I only have access to 2.7.

Tested and used in our environment at work. But as usual it's up to you to test this out in a test environment so everything works as intended. If you have any suggestions or find a bug, create a issue and we will try to fix it :)

Feel free to Join Discord Server and contact me there too. I moved away from slack to Discord to try it out when 0.2.0.1 will be released.

Testing

These versions has been tested with pytest.

|pyise-ers|ise|ise patch|python|date|status| |---|---|---|---|---|---| |0.1.1|2.4.0.357|none|3.7.3|2019|deprecated| |0.1.2|2.7.0.356|11|3.7.7|2020|deprecated| |0.1.2|2.7.0.356|1|3.7.7|2020|deprecated| |0.2.0.1|2.7.0.356|none|3.7.12|2021-10-05|deprecated| |0.2.0.1|3.0.0.458|none|3.7.12|2021-10-05|deprecated| |0.3.0.3|2.7.0.356|none|3.10.2|2023-10-28|active|

There are two tests available in tests/ directory.

Manual test

To run the "manual" tests:

  • make a copy of config-DEFAULT.py to config.py
  • edit uri27, uri30 and/or uri_31 with settings to your test ise server
  • run python manualtesters.py

Pytest

To run the testfiles with pytest-recording.
The first time this is runned the directory cassettes/ are created with saved .yaml files from the test. That is so that the tests can be repeated without contacting ISE everytime.

  • make a copy of config-DEFAULT.py to config.py
    • edit uri with settings to your test ise instance.
    • in the config.py there are a list where you can set multiple versions if ise instances.
  • to run the tests
    • pytest --record-mode=rewrite (To rewrite cassettes with live data)
    • pytest (to reuse the recorded cassetes)

The plan is to extend the testing with testcoverage on this library.

Enable REST API

http://www.cisco.com/c/en/us/td/docs/security/ise/2-0/apirefguide/apirefbook/iseapiref_ers1.html#pgfId-1079790 Need to add an ISE Administrator with the "ERS-Admin" or "ERS-Operator" group assignment is required to use the API.

Installation

From PyPi

bash pip install pyise-ers

From Repository

bash mkdir path/to/parent cd path/to/parent git clone https://github.com/falkowich/pyise-ers.git

Add to path

python import sys sys.path.append('/path/to/parent/pyise-ers/')

Usage

python from pyiseers import ERS ise = ERS(ise_node='8.8.8.8', ers_user='ers', ers_pass='supersecret', ers_port=9060, verify=False, disable_warnings=True)

If ISE is configured to require CSRF for ERS requests for Enhanced Security, you can add the "use_csrf" tag:

python from pyiseers import ERS ise = ERS(ise_node='8.8.8.8', ers_user='ers', ers_pass='supersecret', ers_port=9060, verify=False, disable_warnings=True, use_csrf=True)

Methods return a result dictionary

python { 'success': True/False, 'response': 'Response from request', 'error': 'Error if any', }

Get a list of identity groups

```python ise.getidentitygroups()['response']

[('NetworkAdmin', '5f0b74f0-14e9-11e5-a7a6-00505683258b', 'Group for Network Admins with CLI access to network equipment'), ('OWNACCOUNTS (default)', 'cecdab40-8d30-11e5-82ce-005056834dc2', 'Default OWNACCOUNTS (default) User Group'), ('GuestType_Contractor (default)', 'c9b6b890-8d30-11e5-82ce-005056834dc2', 'Identity group mirroring the guest type '), ...] ```

Get details about an identity group

```python ise.getidentitygroup(group='Employee')['response']

{'description': 'Default Employee User Group', 'id': 'f80e5ce0-f42e-11e2-bd54-005056bf2f0a', 'link': {'href': 'https://8.8.8.8:9060/ers/config/identitygroup/f80e5ce0-f42e-11e2-bd54-005056bf2f0a', 'rel': 'self', 'type': 'application/xml'}, 'name': 'Employee', 'parent': 'NAC Group:NAC:IdentityGroups:User Identity Groups'}

```

Get details about an endpoint

```python ise.getendpointgroup(group='Resurs')['response']

{'description': '', 'id': 'bf6bdcf0-14ed-11e5-a7a6-00505683258b', 'link': {'href': 'https://8.8.8.8:9060/ers/config/endpointgroup/bf6bdcf0-14ed-11e5-a7a6-00505683258b', 'rel': 'self', 'type': 'application/xml'}, 'name': 'Resurs', 'systemDefined': False}

```

Get endpoint identity groups

```python ise.getendpointgroups()['response']

[('Cisco-IP-Phone', '265079a0-6d8e-11e5-978e-005056bf2f0a', 'Identity Group for Profile: Cisco-IP-Phone'), ('Resurs', '32c8eb40-6d8e-11e5-978e-005056bf2f0a', ''), ...]

```

Add endpoint

python ise.add_endpoint(name='test02', mac='AA:BB:CC:00:11:24', group_id='bf6bdcf0-14ed-11e5-a7a6-00505683258b', description='test02') {'response': 'test02 Added Successfully', 'success': True, 'error': ''}

Delete endpoint

```python ise.delete_endpoint(mac='AA:BB:CC:00:11:27') {'error': '', 'response': 'AA:BB:CC:00:11:27 Deleted Successfully', 'success': True}

```

Get a list of internal users

```python ise.get_users()['response']

[('test01', '85fd1eb0-c6fa-11e5-b6b6-000c297b78b4'), ('test02', '54fd1eb0-c5fb-54e5-b6b6-00204597b28b1'), ...]

```

Get details about an internal user

By name

```python ise.getuser(userid='test02')['response']

{'changePassword': False, 'customAttributes': {}, 'enablePassword': '****', 'enabled': True, 'expiryDateEnabled': False, 'id': '54fd1eb0-c5fb-54e5-b6b6-00204597b28b1', 'identityGroups': '5f0b74f0-14e9-11e5-a7a6-00505683258b', 'link': {'href': 'https://8.8.8.8:9060/ers/config/internaluser/a837bd55-f2b7-41e3-b0ff-c5ddf9af398c', 'rel': 'self', 'type': 'application/xml'}, 'name': 'test02', 'password': '****', 'passwordIDStore': 'Internal Users'}

```

By email

```python ise.getuser(useremail='test02@example.com')['response']

{'changePassword': False, 'customAttributes': {}, 'enablePassword': '****', 'enabled': True, 'expiryDateEnabled': False, 'id': '54fd1eb0-c5fb-54e5-b6b6-00204597b28b1', 'identityGroups': '5f0b74f0-14e9-11e5-a7a6-00505683258b', 'link': {'href': 'https://8.8.8.8:9060/ers/config/internaluser/a837bd55-f2b7-41e3-b0ff-c5ddf9af398c', 'rel': 'self', 'type': 'application/xml'}, 'name': 'test02', 'password': '****', 'passwordIDStore': 'Internal Users'}

```

Add an internal user

```python ise.adduser(userid='test11', password='TeStInG11', usergroupoid='5f0b74f0-14e9-11e5-a7a6-00505683258b')

{'error': '', 'response': 'test11 Added Successfully', 'success': True}

```

Delete an internal user

```python ise.deleteuser(userid='test11')

{'error': '', 'response': 'test11 Deleted Successfully', 'success': True}

```

Get details about an admin user

```python ise.getadminuser(user_id='admin')

{ "SearchResult": { "total": 2, "resources": [ { "id": "c2428e12-105f-4d5f-88ae-5885516d7ac5", "name": "admin", "description": "Default Admin User", "link": { "rel": "self", "href": "https://8.8.8.8:9060/ers/config/adminuser/c2428e12-105f-4d5f-88ae-5885516d7ac5", "type": "application/json" } }, { "id": "e0884628-8d13-451c-b3f7-117f9d0336ad", "name": "ers-operator", "description": "", "link": { "rel": "self", "href": "https://8.8.8.8:9060/ers/config/adminuser/e0884628-8d13-451c-b3f7-117f9d0336ad", "type": "application/json" } } ] } }

```

Get a list of devices

```python ise.get_devices()['response']

[('TestDevice01', '6680f410-5277-11e5-9a52-05505683258b'), ('TestDevice02', '64d9b32-5c56-11e5-9a52-00502683258b'), ...]

```

Get details about a device

```python ise.get_device(device='TestDevice02')['response']

{'NetworkDeviceGroupList': ['Stage#Stage', 'Device Type#All Device Types#Linux', 'Location#All Locations'], 'NetworkDeviceIPList': [{'ipaddress': '10.8.1.55', 'mask': 32}], 'authenticationSettings': {'enableKeyWrap': False, 'keyInputFormat': 'ASCII', 'networkProtocol': 'RADIUS', 'radiusSharedSecret': '******'}, 'coaPort': 0, 'id': '74d9b830-5c76-11e5-9a52-00505683258b', 'link': {'href': 'https://8.8.8.8:9060/ers/config/networkdevice/74d9b830-5c76-11e5-9a52-00505683258b', 'rel': 'self', 'type': 'application/xml'}, 'modelName': 'Linux', 'name': 'TestDevice02', 'profileName': 'Cisco'}

```

Get a list of device groups

```python ise.getdevicegroups()['response']

[('Device Type#All Device Types', '526240e0-f42e-11e2-bd54-005056bf2f0a'), ('Device Type#All Device Types#Switch', 'e25bd190-14e6-11e5-a7a6-00505683258b'), ('Device Type#All Device Types#Wism', 'e6b085b0-14e6-11e5-a7a6-00505683258b'), ('IPSEC#Is IPSEC Device', '0d3f19b0-30c1-11e7-88b5-005056834dc2'), ('IPSEC#Is IPSEC Device#No', '0dac0c50-30c1-11e7-88b5-005056834dc2'), ('IPSEC#Is IPSEC Device#Yes', '0d74f6c0-30c1-11e7-88b5-005056834dc2'), ('Location#All Locations', '522b7970-f42e-11e2-bd54-005056bf2f0a'), ...]

```

Get device group(s) details

```python

Provide a devicegroupid

ise.getdevicegroup(devicegroupid="4b26b5b0-71a6-11eb-b5e0-52cf9299494c")

{'success': True, 'response': {'id': '4b26b5b0-71a6-11eb-b5e0-52cf9299494c', 'name': 'Device Type#All Device Types#NXOS', 'description': '', 'link': {'rel': 'self', 'href': 'https://8.8.8.8:9060/ers/config/networkdevicegroup/4b26b5b0-71a6-11eb-b5e0-52cf9299494c', 'type': 'application/json'}, 'othername': 'Device Type'}, 'error': ''}

Provide a partial group name to look for

ise.getdevicegroup(name="NXOS")

{'success': True, 'response': {'id': '4b26b5b0-71a6-11eb-b5e0-52cf9299494c', 'name': 'Device Type#All Device Types#NXOS', 'description': '', 'link': {'rel': 'self', 'href': 'https://8.8.8.8:9060/ers/config/networkdevicegroup/4b26b5b0-71a6-11eb-b5e0-52cf9299494c', 'type': 'application/json'}, 'othername': 'Device Type'}, 'error': ''}

If more than one group found with for a name a list is returned

ise.getdevicegroup(name="Device Types")

[ {'success': True, 'response': {'id': '70c79c30-8bff-11e6-996c-525400b48521', 'name': 'Device Type#All Device Types', 'description': 'All Device Types', 'link': {'rel': 'self', 'href': 'https://8.8.8.8:9060/ers/config/networkdevicegroup/70c79c30-8bff-11e6-996c-525400b48521', 'type': 'application/json'}, 'othername': 'Device Type'}, 'error': ''}, {'success': True, 'response': {'id': 'ee45c0a0-7fbc-11eb-ac01-36750594a888', 'name': 'Device Type#All Device Types#IOS-XE', 'description': '', 'link': {'rel': 'self', 'href': 'https://8.8.8.8:9060/ers/config/networkdevicegroup/ee45c0a0-7fbc-11eb-ac01-36750594a888', 'type': 'application/json'}, 'othername': 'Device Type'}, 'error': ''}, {'success': True, 'response': {'id': '4b26b5b0-71a6-11eb-b5e0-52cf9299494c', 'name': 'Device Type#All Device Types#NXOS', 'description': '', 'link': {'rel': 'self', 'href': 'https://8.8.8.8:9060/ers/config/networkdevicegroup/4b26b5b0-71a6-11eb-b5e0-52cf9299494c', 'type': 'application/json'}, 'othername': 'Device Type'}, 'error': ''}, ] ```

Add a new device group

```python ise.adddevicegroup(name="Device Type#All Device Types#Python Device Type", description="From Python")

{'success': True, 'response': 'Device Type#All Device Types#Python Device Type Added Successfully', 'error': ''} ```

Update a device group

```python ise.updatedevicegroup(devicegroupoid=group_id, name="Device Type#All Device Types#Updated Device Type", description="Update Description")

{'success': True, 'response': 'e7db3e00-a36d-11eb-ac01-36750594a888 Updated Successfully', 'error': ''} ```

Remove a device group

```python ise.deletedevicegroup(name="Device Type#All Device Types#Python Device Type")

{'success': True, 'response': 'Device Type#All Device Types#Python Device Type Deleted Successfully', 'error': ''} ```

Add a device

```python ise.adddevice(name='testdevice03', ipaddress='8.8.8.8', radiuskey='foo', snmpro='bar', devgroup='Stage#Stage#Closed', devlocation='Location#All Locations#Site21', dev_type='Device Type#All Device Types#Switch')

{'error': '', 'response': 'testdevice03 Added Successfully', 'success': True} ```

Update a device

```python ise.updatedevice("PYTHON-DEVICE", tacacsshared_secret="NEWTACACS")

{'success': True, 'response': {'updatedField': [{'field': 'TacacsSettings.ConnectModeOptions', 'oldValue': '', 'newValue': 'ON_LEGACY'}, {'field': 'TacacsSettings.SharedSecret', 'newValue': 'NEWTACACS'}]}, 'error': ''} ```

Delete a device

```python ise.delete_device(device='testdevice03')

{'error': '', 'response': 'testdevice03 Deleted Successfully', 'success': True} ```

Get all Security Groups (SGTs)

```python ise.get_sgts()

{'success': True, 'response': [('Contractors', '4f9c8050-8f9f-11ea-b8e4-ca18718347e2'), ('Employees', 'a34ae530-59a2-11ea-a6b9-26b516ce162b'), ('Guest', '440dd8b0-7da7-11ea-bb75-261e6ff61f42'), ('IoTDevices', '55bd68f0-8f9f-11ea-b8e4-ca18718347e2'), ('IoTServers', '36369eb0-8fa0-11ea-b8e4-ca18718347e2'), ('Servers', '385cbd90-8fa1-11ea-b8e4-ca18718347e2'), ('TrustSec_Devices', '947832a0-8c01-11e6-996c-525400b48521'), ('Unknown', '92adf9f0-8c01-11e6-996c-525400b48521')], 'error': '', 'total': 8} ```

Get Specific SGT

```python ise.getsgt("Unknown") ise.getsgt(0) ise.get_sgt("92adf9f0-8c01-11e6-996c-525400b48521")

{'success': True, 'response': {'id': '92adf9f0-8c01-11e6-996c-525400b48521', 'name': 'Unknown', 'description': 'Unknown Security Group', 'value': 0, 'generationId': '1', 'propogateToApic': False, 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/sgt/92adf9f0-8c01-11e6-996c-525400b48521', 'type': 'application/json'}}, 'error': ''} ```

Add a SGT

```python ise.addsgt("PythonUsers", "Group used for all Python Users", 56789, return_object=True)

{'success': True, 'response': {'id': 'd4696690-97ba-11ea-9614-caf56bcd6712', 'name': 'Python_Users', 'description': 'Group used for all Python Users', 'value': 56789, 'generationId': '0', 'propogateToApic': False, 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/sgt/d4696690-97ba-11ea-9614-caf56bcd6712', 'type': 'application/json'}}, 'error': ''} ```

Update a SGT

```python ise.updatesgt("d4696690-97ba-11ea-9614-caf56bcd6712", "PythonTests", "Testing for Python Users", 45678, return_object=True)

{'success': True, 'response': {'id': 'd4696690-97ba-11ea-9614-caf56bcd6712', 'name': 'Python_Tests', 'description': 'Testing for Python Users', 'value': 45678, 'generationId': '0', 'propogateToApic': False, 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/sgt/d4696690-97ba-11ea-9614-caf56bcd6712', 'type': 'application/json'}}, 'error': ''} ```

Delete a SGT

```python ise.delete_sgt("d4696690-97ba-11ea-9614-caf56bcd6712")

{'success': True, 'response': 'd4696690-97ba-11ea-9614-caf56bcd6712 Deleted Successfully', 'error': ''} ```

Get all Security Groups ACLs (SGACLs)

```python ise.get_sgacls()

{'success': True, 'response': [('BlockAll', '7c9b4a80-8fa1-11ea-b8e4-ca18718347e2'), ('Deny IP', '92919850-8c01-11e6-996c-525400b48521'), ('DenyICMP', 'c21dfa60-59a2-11ea-a6b9-26b516ce162b'), ('DenyIPLog', '0e6d3830-0684-11ea-ace5-42a6b55c5ca6'), ('Permit IP', '92951ac0-8c01-11e6-996c-525400b48521'), ('PermitFTP', '761b9e50-7e01-11ea-bb75-261e6ff61f42'), ('PermitIPLog', '0e6aee40-0684-11ea-ace5-42a6b55c5ca6'), ('PermitMQTT', '1470fa00-5a85-11ea-a6b9-26b516ce162b')], 'error': '', 'total': 8} ```

Get Specific SGACL

```python ise.getsgacl("Permit IP") ise.getsgacl("92951ac0-8c01-11e6-996c-525400b48521")

{'success': True, 'response': {'id': '92951ac0-8c01-11e6-996c-525400b48521', 'name': 'Permit IP', 'description': 'Permit IP SGACL', 'generationId': '0', 'aclcontent': 'permit ip', 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/sgacl/92951ac0-8c01-11e6-996c-525400b48521', 'type': 'application/json'}}, 'error': ''} ```

Add a SGACL

```python ise.addsgacl("PythonACL", "Access List for Python Access", "IPAGNOSTIC", ["permit tcp dst eq 80"], returnobject=True)

{'success': True, 'response': {'id': '7a820000-97bb-11ea-9614-caf56bcd6712', 'name': 'Python_ACL', 'description': 'Access List for Python Access', 'generationId': '0', 'aclcontent': 'permit tcp dst eq 80', 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/sgacl/7a820000-97bb-11ea-9614-caf56bcd6712', 'type': 'application/json'}}, 'error': ''} ```

Update a SGACL

```python ise.updatesgacl("7a820000-97bb-11ea-9614-caf56bcd6712", "PythonAccessList", "Python Access List", "IPV4", ["permit tcp src eq 80"], returnobject=True)

{'success': True, 'response': {'id': '7a820000-97bb-11ea-9614-caf56bcd6712', 'name': 'PythonAccessList', 'description': 'Python Access List', 'generationId': '1', 'ipVersion': 'IPV4', 'aclcontent': 'permit tcp src eq 80', 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/sgacl/7a820000-97bb-11ea-9614-caf56bcd6712', 'type': 'application/json'}}, 'error': ''} ```

Get all TrustSec Egress Matrix Cells (Policies)

```python ise.get_egressmatrixcells()

{'success': True, 'response': [('ANY-ANY', '92c1a900-8c01-11e6-996c-525400b48521'), ('Contractors-Servers', '5251ca60-8fa1-11ea-b8e4-ca18718347e2'), ('Contractors-IoTDevices', 'de7859b0-8fa0-11ea-b8e4-ca18718347e2'), ('Employees-Servers', '5fb81e71-8fa1-11ea-b8e4-ca18718347e2'), ('Employees-Employees', 'd2d88280-59a2-11ea-a6b9-26b516ce162b'), ('Employees-IoTDevices', 'e18ac9d1-8fa0-11ea-b8e4-ca18718347e2'), ('Employees-TrustSecDevices', 'ee035030-59a2-11ea-a6b9-26b516ce162b'), ('Guest-IoTDevices', 'e4d49da1-8fa0-11ea-b8e4-ca18718347e2'), ('IoTDevices-IoTDevices', 'b0eccdf0-8fa0-11ea-b8e4-ca18718347e2'), ('IoTDevices-IoTServers', 'b7e6d880-8fa0-11ea-b8e4-ca18718347e2'), ('IoTDevices-Contractors', 'c82308e0-8fa0-11ea-b8e4-ca18718347e2'), ('IoTDevices-Employees', 'cb276f40-8fa0-11ea-b8e4-ca18718347e2'), ('IoTDevices-Guest', 'ce1e4110-8fa0-11ea-b8e4-ca18718347e2'), ('IoTDevices-TrustSecDevices', 'd1e33851-8fa0-11ea-b8e4-ca18718347e2'), ('IoTDevices-Unknown', 'd68d3860-8fa0-11ea-b8e4-ca18718347e2'), ('IoTServers-IoTDevices', 'bc784780-8fa0-11ea-b8e4-ca18718347e2'), ('IoTServers-IoTServers', 'c069f410-8fa0-11ea-b8e4-ca18718347e2'), ('TrustSecDevices-IoTDevices', 'e94bcde1-8fa0-11ea-b8e4-ca18718347e2'), ('Unknown-IoT_Devices', 'f3e9da31-8fa0-11ea-b8e4-ca18718347e2')], 'error': '', 'total': 19} ```

Get Specific Egress Matrix Cell

```python ise.getegressmatrixcell("Default egress rule") ise.getegressmatrixcell(None, srcsgt="92bb1950-8c01-11e6-996c-525400b48521", dstsgt="92bb1950-8c01-11e6-996c-525400b48521")

{'success': True, 'response': {'id': '92c1a900-8c01-11e6-996c-525400b48521', 'name': 'ANY-ANY', 'description': 'Default egress rule', 'sourceSgtId': '92bb1950-8c01-11e6-996c-525400b48521', 'destinationSgtId': '92bb1950-8c01-11e6-996c-525400b48521', 'matrixCellStatus': 'ENABLED', 'defaultRule': 'PERMIT_IP', 'sgacls': ['92951ac0-8c01-11e6-996c-525400b48521'], 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/egressmatrixcell/92c1a900-8c01-11e6-996c-525400b48521', 'type': 'application/json'}}, 'error': ''} ```

Add a Egress Matrix Cell

```python ise.addegressmatrixcell(sourcesgt="Unknown", destinationsgt="TrustSecDevices", defaultrule="PERMITIP", return_object=True)

{'success': True, 'response': {'id': '6f76b621-97bf-11ea-9614-caf56bcd6712', 'name': 'Unknown-TrustSecDevices', 'sourceSgtId': '92adf9f0-8c01-11e6-996c-525400b48521', 'destinationSgtId': '947832a0-8c01-11e6-996c-525400b48521', 'matrixCellStatus': 'ENABLED', 'defaultRule': 'PERMITIP', 'sgacls': ['92951ac0-8c01-11e6-996c-525400b48521'], 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/egressmatrixcell/6f76b621-97bf-11ea-9614-caf56bcd6712', 'type': 'application/json'}}, 'error': ''} ```

Update a Egress Matrix Cell

```python ise.updateegressmatrixcell("6f76b621-97bf-11ea-9614-caf56bcd6712", sourcesgt="Unknown", destinationsgt="TrustSecDevices", defaultrule="NONE", acls=["Deny IP"], description="Description", returnobject=True)

{'success': True, 'response': {'id': '6f76b621-97bf-11ea-9614-caf56bcd6712', 'name': 'Unknown-TrustSecDevices', 'description': 'Description', 'sourceSgtId': '92adf9f0-8c01-11e6-996c-525400b48521', 'destinationSgtId': '947832a0-8c01-11e6-996c-525400b48521', 'matrixCellStatus': 'ENABLED', 'defaultRule': 'DENYIP', 'sgacls': ['92919850-8c01-11e6-996c-525400b48521'], 'link': {'rel': 'self', 'href': 'https://10.102.172.125:9060/ers/config/egressmatrixcell/6f76b621-97bf-11ea-9614-caf56bcd6712', 'type': 'application/json'}}, 'error': ''} ```

Delete a Egress Matrix Cell

```python ise.delete_egressmatrixcell("6f76b621-97bf-11ea-9614-caf56bcd6712")

{'success': True, 'response': '6f76b621-97bf-11ea-9614-caf56bcd6712 Deleted Successfully', 'error': ''} ```

History before namechange » 0.2.0

  • Merged back from the work that https://github.com/karrots has done efter I paused the updates.
  • Converted to pipenv packages instead of requirements.txt
  • Updated to ISE 2.4.x
  • Merged back from the work that https://github.com/msom has done with some good device fixes.
    • One big thing is that module is now renamed from ise.cream to just ise.
  • First publish to PyPi with the help of https://github.com/JonasKs.
  • Add support for ISE CSRF and some TrustSec objects (SGT, SGACL, Egress Policy Matrix) https://github.com/joshand.
  • Merged Enhancement to Device Group and Device Functions with a big thanks to https://github.com/hpreston
    • New functions for devicegroups where added » adddevicegroup, updatedevicegroup, deletedevicegroup.
    • New function to update devices where added » update_device
    • Updated getdevicegroup for looking up names
    • Updated adddevice with new parameters and devicepayload
  • Updated dependensies for dev and prod, created new manual testcases, cleaned up the code with black.

Owner

  • Name: Falk
  • Login: falkowich
  • Kind: user
  • Location: Sweden

GitHub Events

Total
  • Pull request event: 1
Last Year
  • Pull request event: 1

Committers

Last synced: over 2 years ago

All Time
  • Total Commits: 330
  • Total Committers: 22
  • Avg Commits per committer: 15.0
  • Development Distribution Score (DDS): 0.627
Past Year
  • Commits: 61
  • Committers: 9
  • Avg Commits per committer: 6.778
  • Development Distribution Score (DDS): 0.311
Top Committers
Name Email Commits
Falk g****t@g****m 123
Brad Searle b****r 90
Jonathan Karras k****s 17
Andreas Falk a****k@n****e 17
Hank Preston h****o@c****m 16
Falk f****k@s****t 9
joshand@cisco.com j****d@c****m 9
Marc Sommerhalder m****r@i****h 6
Falk a****k@n****e 6
Kosire r****g@b****m 4
Stuart Weickgenant s****e@c****m 4
snyk-bot s****t@s****o 4
Jonas Krüger Svensson j****s@h****m 3
Vetle Moen v****n@i****o 3
Nathan McGugan n****n@g****m 3
nebriv c****t@n****m 3
dependabot[bot] 4****] 3
pyup-bot g****t@p****o 3
Jason Barbee j****e@g****m 2
brad s****e@c****m 2
Christopher Thornton c****n 2
Ben Virgilio n****v@g****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 28
  • Total pull requests: 97
  • Average time to close issues: 4 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 11
  • Total pull request authors: 18
  • Average comments per issue: 2.18
  • Average comments per pull request: 1.16
  • Merged pull requests: 28
  • Bot issues: 0
  • Bot pull requests: 26
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • falkowich (17)
  • Kosire (1)
  • axlev (1)
  • Aditya23456 (1)
  • ethangrinnell78 (1)
  • mortiz-code (1)
  • RasmusThing (1)
  • cunningr (1)
  • ahusking (1)
  • anousonevongsouvanTR (1)
  • steffenschumacher (1)
Pull Request Authors
  • dependabot[bot] (31)
  • pyup-bot (30)
  • falkowich (14)
  • snyk-bot (8)
  • jasonbarbee (2)
  • JonasKs (2)
  • vetletm (2)
  • c-thornton (2)
  • Kosire (2)
  • hpreston (1)
  • The-Captain8 (1)
  • joshand (1)
  • nebriv (1)
  • RasmusThing (1)
  • ethangrinnell78 (1)
Top Labels
Issue Labels
enhancement (17) help wanted (11) bug (6) question (3) documentation (2) needs testing (1)
Pull Request Labels
dependencies (31) enhancement (4) question (3) help wanted (2) needs testing (1)

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 55 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 1
  • Total versions: 3
  • Total maintainers: 1
pypi.org: pyise-ers

Python wrapper for Cisco ISE ERS API

  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 55 Last month
Rankings
Downloads: 9.9%
Dependent packages count: 10.1%
Average: 13.9%
Dependent repos count: 21.6%
Maintainers (1)
Last synced: 6 months ago

Dependencies

.github/workflows/codeql-analysis.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
  • github/codeql-action/analyze v1 composite
  • github/codeql-action/init v1 composite
poetry.lock pypi
  • appdirs 1.4.4 develop
  • bandit 1.7.5 develop
  • black 23.3.0 develop
  • bleach 6.0.0 develop
  • cffi 1.15.1 develop
  • click 8.1.3 develop
  • codecov 2.1.13 develop
  • colorama 0.4.6 develop
  • coverage 7.2.7 develop
  • cryptography 41.0.1 develop
  • docutils 0.20.1 develop
  • dparse 0.6.2 develop
  • exceptiongroup 1.1.1 develop
  • gitdb 4.0.10 develop
  • gitpython 3.1.31 develop
  • importlib-metadata 6.6.0 develop
  • iniconfig 2.0.0 develop
  • isort 5.12.0 develop
  • jaraco-classes 3.2.3 develop
  • jedi 0.18.2 develop
  • jeepney 0.8.0 develop
  • jinja2 3.1.2 develop
  • keyring 23.13.1 develop
  • markdown-it-py 2.2.0 develop
  • markupsafe 2.1.3 develop
  • marshmallow 3.19.0 develop
  • mdurl 0.1.2 develop
  • more-itertools 9.1.0 develop
  • mypy-extensions 1.0.0 develop
  • packaging 23.0 develop
  • parso 0.8.3 develop
  • pathspec 0.11.1 develop
  • pbr 5.11.1 develop
  • pkginfo 1.9.6 develop
  • platformdirs 3.5.3 develop
  • pluggy 1.0.0 develop
  • prompt-toolkit 3.0.38 develop
  • ptpython 3.0.23 develop
  • pycparser 2.21 develop
  • pygments 2.15.1 develop
  • pytest 7.3.1 develop
  • pytest-cov 4.1.0 develop
  • pywin32-ctypes 0.2.0 develop
  • pyyaml 6.0 develop
  • readme-renderer 37.3 develop
  • requests-toolbelt 1.0.0 develop
  • rfc3986 2.0.0 develop
  • rich 13.4.1 develop
  • ruamel-yaml 0.17.31 develop
  • ruamel-yaml-clib 0.2.7 develop
  • safety 2.4.0b1 develop
  • secretstorage 3.3.3 develop
  • setuptools 67.8.0 develop
  • smmap 5.0.0 develop
  • stevedore 5.1.0 develop
  • toml 0.10.2 develop
  • tomli 2.0.1 develop
  • twine 4.0.2 develop
  • wcwidth 0.2.6 develop
  • webencodings 0.5.1 develop
  • wheel 0.40.0 develop
  • zipp 3.15.0 develop
  • certifi 2023.5.7
  • charset-normalizer 3.1.0
  • furl 2.1.3
  • idna 3.4
  • orderedmultidict 1.0.1
  • requests 2.31.0
  • six 1.16.0
  • urllib3 2.0.3
pyproject.toml pypi
  • furl ^2.1.3
  • python ^3.10
  • requests ^2.31.0