Back to Articles

A command line utility, pollreg-utility, is used to configure CMTS registrations in deployments of ServAssure Collection Platform. The utility can be used for listing existing registrations, importing new/updated registrations, or deleting registrations. The utility uses the ServAssure Collection Platform registration API for managing registrations.

The pollreg-utility can be found in the ServAssure Collection Platform installation package in the /roles/docsis-manager/files directory. The utility can either be used on the host that runs Ansible installation and configuration playbooks or can be copied to another location.

Using pollreg-utility

Determine the version of python your system is running with the following command:
python --version

If running python2, use the file pollreg-utility.py.

If running python3, use the file pollreg-utility3.py.

pollreg-utility syntax:

pollreg-utility[3].py [-h] [--url URL] [--user USER] [--password PASSWORD]
   [--cmts CMTS] [--registration REGISTRATION]
   [{list,update,refresh,deleteAll,cmtsconfigs,fingerprints,discovery,delete}]
   [file]

Parameter descriptions:

--h, --help
Show the help message and exit
--url URL
Collection Manager URL
--user USER
User to access Collection Manager
--password PASSWORD
Password to access Collection Manager
--cmts CMTS
CMTS ID for discovery and delete commands
--registration REGISTRATION
Registration ID for the delete command
{list,update,refresh,deleteAll,cmtsconfigs,fingerprints,discovery,delete}
Command to execute in addition to arguments that define the action for the utility to take. See the example below for uses of each argument.
The update command includes the following optional backup parameters, which must precede the update command:
--backupdir PATH_TO_BACKUP_DIR
Directory where current registrations are backed up during an update operation.
--backupname BACKUP_FILE_NAME
Name of the backup file created during an update operation.
Refer to Registration back up for additional information about automatic registration backups during an update operation.
file
File path for update command inputs.
Example 1:

The following example illustrates how to construct pollreg-utility commands to modify the ServAssure Collection Manager registration database.

# Command format – referred to as $COMMAND_PREFIX in examples below
python pollreg-utility.py --url http://<docsis-manager-host>:8085/ --user <docsis-manager-api-username> --password <docsis-manager-api-password> 

# For a system with python 3, use "pollreg-utility3.py" 
# Follow the above command with the below examples to alter the DOCSIS Manager registration database

# List/export current registrations
$COMMAND_PREFIX list

# Import exported or backup registrations
$COMMAND_PREFIX --backupdir /opt/arris/regBackups --backupname backupFileName update pollRegistrations.lst

# List CMTS Configs
$COMMAND_PREFIX cmtsconfigs

# List fingerprint information - saves file to fingerprints.json
$COMMAND_PREFIX fingerprints

# List discovery information for specific CMTS ID – saves file to discovery.json
$COMMAND_PREFIX discovery --cmts <CMTS_ID e.g-EASTUSCMTS01>

# Delete all registrations
$COMMAND_PREFIX deleteAll

# Delete registrations for specific CMTS ID
$COMMAND_PREFIX delete --cmts <CMTS_ID e.g-EASTUSCMTS01>

# Delete single registration by registration ID
$COMMAND_PREFIX delete --registration <REG_ID e.g-EASTUSCMTS01.docsis_mta.saa_starnode01>

Registration back up

Each time an update operation is run, the CMTS registration is retrieved and optionally backed up for storage and reference. ServAssure Collection Platform stores a maximum of 10 backup files; when another file is backed up after the maximum is reached, the oldest previously stored file is deleted. Backup files do not have a maximum age. There is no unique command to perform a restore operation. You can run the update command with the filename of a specific backup file to import a previous CMTS registration.

To backup an existing registration prior to an update, the update operation must include, and be preceded by, the path and filename information for the registration backup. For example:
python pollreg-utility.py --url http://192.0.2.0:8085/ --user admin --password password --backupdir /opt/arris/regBackups --backupname backupForV3 update newReg.lst
The result is creation of a backup file at the designated path, with a filename that includes the designated name appended by IP and date information. The example operation above creates the following backup file:
/opt/arris/regBackups/backupForV3.192.0.2.0.2023-02-27.1677510941
If you do not provide the backup parameters, the update proceeds without backing up the current CMTS registration.

Poll registration

When adding or updating registrations, the utility takes a text file as input where each line of text file is a well-formed JSON object containing poll registration information. Each registration JSON object contains polling information for a particular CMTS or its CMs. This includes:
Profile name
SNMP collection parameter set
Poll schedule
Quartz schedule expression
Requester IP
Required for legacy but not used. Set to static string such as python_utility. Will be removed in a future version.
Registration ID
Registration identifier in the format <cmtsId>.<profileName>.<requesterIp>
CMTS/CM/MTA config
Read/write community strings, CLI authentication, network partitions, and other information.

Base profiles

The following table highlights a base set of profiles, schedules1, and timeouts to enable for enrichment data along with some supplemental profiles for other features.

Table 1. Base profiles, schedules, and timeout
Profile nameRecommended profile scheduleProfile collection timeout (ms)
docsis_cm_preeq0 5 * * * ?1490000
docsis_cm_attributes0 35 3,9,15,21 * * ?1490000
docsis_mta0 30 * * * ?1490000
docsis_cmts_cm_topology0 5,20,35,50 * * * ?890000
docsis_cmts_cpu0 5,20,35,50 * * * ?890000
docsis_cmts_11_qos0 18 * * * ?1800000
docsis_cmts_slow_ipv4v60 2 * * * ?2400000
docsis_cmts_interface0 5,20,35,50 * * * ?890000

When adding or updating registrations, the utility takes a text file as input where each line of text file is a well formed JSON object containing poll registration information. The example below shows a set of registrations for a particular CMTS with the above base profile and network region “us-east” (default region would be “default”). For each CMTS to be registered for polling, the example below can be used, but the fields in each registration for CMTS ID, CMTS IP, CMTS CLI details, CMTS/CM/MTA read/write community strings must be changed for the actual CMTS to be registered.

NOTE: Additional information about JSON configuration:
  • Lines in the registration file starting with # are treated as comments and are ignored.
  • The value in the poll schedule column uses Quartz expressions that are slightly different than standard CRON expressions.
  • Timeout values must be set such that the polls will time out before the next poll starts. For example, if a poll is running, an hourly timeout should be set to less than an hour.
Example 2:
{{"profile": "docsis_mta", "pollSchedule": {"priority": 1, "type": "cron", "schedule": "0 30 * * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_mta.python_utility", "responseUrl": "urn:null", "args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c", "collectionTimeout": 1490000, "communityString": ["public"]}, "list": [{"ip": "10.184.63.2", "id": "Mimic_E6K_v8_Jun2021"}], "groupId": "Mimic_E6K_v8_Jun2021"}, "handBack": {}, "writeCommunityStrings": [{"mtaWriteCommunityStr": ["private"], "cmReadCommunityStr": ["public", "private"], "readCommunityStr": ["public"], "ip": "10.184.1.1", "writeCommunityStr": ["private"], "ipv6Preference": false, "ipdrInfo": [], "cliUser": "e6k", "cliType": null, "cliPassword": "secret", "cliPrompt": null, "networkPartition": "default", "cmWriteCommunityStr": ["private"], "id": "Mimic_E6K_v8_Jun2021", "mtaReadCommunityStr": ["public"]}]}

{"profile": "docsis_cmts_cpu", "pollSchedule": {"priority": 1, "type": "cron", "schedule": “0 5,20,35,50 * * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_cmts_cpu.python_utility", "responseUrl": "urn:null", "args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c", "collectionTimeout": 890000, "communityString": ["public"]}, "list": [{"ip": "10.184.63.2", "id": "Mimic_E6K_v8_Jun2021"}], "groupId": "Mimic_E6K_v8_Jun2021"}, "handBack": {}, "writeCommunityStrings": [{"mtaWriteCommunityStr": ["private"], "cmReadCommunityStr": ["public", "private"], "readCommunityStr": ["public"], "ip": "10.184.63.2", "writeCommunityStr": ["private"], "ipv6Preference": true, "ipdrInfo": [], "cliUser": "e6", "cliType": null, "cliPassword": "99", "cliPrompt": null, "networkPartition": "us-east", "cmWriteCommunityStr": ["private"], "id": "Mimic_E6K_v8_Jun2021", "mtaReadCommunityStr": ["public"]}]}

{"profile": "docsis_cm_preeq", "pollSchedule": {"priority": 1, "type": "cron", "schedule": "0 5 * * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_cm_preeq.python_utility", "responseUrl": "urn:null", "args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c", "collectionTimeout": 1490000, "communityString": ["public", "private"]}, "list": [], "groupId": "Mimic_E6K_v8_Jun2021", "discovery": {"profile": "docsis_cmts_slow_ipv4v6", "ipv6Preference": true}}, "handBack": {}}

{"profile": "docsis_cmts_11_qos", "pollSchedule": {"priority": 1, "type": "cron", "schedule": "0 18 * * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_cmts_11_qos.python_utility", "responseUrl": "urn:null", "args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c", "collectionTimeout": 1800000, "communityString": ["public"]}, "list": [{"ip": "10.184.63.2", "id": "Mimic_E6K_v8_Jun2021"}], "groupId": "Mimic_E6K_v8_Jun2021"}, "handBack": {}, "writeCommunityStrings": [{"mtaWriteCommunityStr": ["private"], "cmReadCommunityStr": ["public", "private"], "readCommunityStr": ["public"], "ip": "10.184.63.2", "writeCommunityStr": ["private"], "ipv6Preference": true, "ipdrInfo": [], "cliUser": "e6", "cliType": null, "cliPassword": "99", "cliPrompt": null, "networkPartition": "us-east", "cmWriteCommunityStr": ["private"], "id": "Mimic_E6K_v8_Jun2021", "mtaReadCommunityStr": ["public"]}]}

{"profile": "docsis_cm_attributes", "pollSchedule": {"priority": 1, "type": "cron", "schedule": "0 35 3,9,15,21 * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_cm_attributes.python_utility", "responseUrl": "urn:null", "args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c", "collectionTimeout": 1490000, "communityString": ["public", "private"]}, "list": [], "groupId": "Mimic_E6K_v8_Jun2021", "discovery": {"profile": "docsis_cmts_slow_ipv4v6", "ipv6Preference": true}}, "handBack": {}}

{"profile": "docsis_cmts_slow_ipv4v6", "pollSchedule": {"priority": 1, "type": "cron", "schedule": "0 2 * * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_cmts_slow_ipv4v6.python_utility", "responseUrl": "urn:null", "args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c", "collectionTimeout": 2400000, "communityString": ["public"]}, "list": [{"ip": "10.184.63.2", "id": "Mimic_E6K_v8_Jun2021"}], "groupId": "Mimic_E6K_v8_Jun2021"}, "handBack": {}, "writeCommunityStrings": [{"mtaWriteCommunityStr": ["private"], "cmReadCommunityStr": ["public", "private"], "readCommunityStr": ["public"], "ip": "10.184.63.2", "writeCommunityStr": ["private"], "ipv6Preference": true, "ipdrInfo": [], "cliUser": "e6", "cliType": null, "cliPassword": "99", "cliPrompt": null, "networkPartition": "us-east", "cmWriteCommunityStr": ["private"], "id": "Mimic_E6K_v8_Jun2021", "mtaReadCommunityStr": ["public"]}]}

{"profile": "docsis_cmts_cm_topology", "pollSchedule": {"priority": 1, "type": "cron", "schedule": "0 5,20,35,50 * * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_cmts_cm_topology.python_utility", "responseUrl": "urn:null", "args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c", "collectionTimeout": 890000, "communityString": ["public"]}, "list": [{"ip": "10.184.63.2", "id": "Mimic_E6K_v8_Jun2021"}], "groupId": "Mimic_E6K_v8_Jun2021"}, "handBack": {}, "writeCommunityStrings": [{"mtaWriteCommunityStr": ["private"], "cmReadCommunityStr": ["public", "private"], "readCommunityStr": ["public"], "ip": "10.184.63.2", "writeCommunityStr": ["private"], "ipv6Preference": true, "ipdrInfo": [], "cliUser": "e6", "cliType": null, "cliPassword": "99", "cliPrompt": null, "networkPartition": "us-east", "cmWriteCommunityStr": ["private"], "id": "Mimic_E6K_v8_Jun2021", "mtaReadCommunityStr": ["public"]}]}

{"profile": "docsis_cmts_interface", "pollSchedule": {"priority": 1, "type": "cron","schedule": "0 5,20,35,50 * * * ?"}, "registrationId": "Mimic_E6K_v8_Jun2021.docsis_cmts_interface.python_utility", "responseUrl": "urn:null","args": {}, "requesterIp": "python_utility", "devices": {"snmpConfig": {"version": "v2c","collectionTimeout": 890000, "communityString": ["public"]}, "list": [{"ip": "10.184.63.2", "id":"Mimic_E6K_v8_Jun2021"}], "groupId": "Mimic_E6K_v8_Jun2021"}, "handBack": {},"writeCommunityStrings": [{"mtaWriteCommunityStr": ["private"], "cmReadCommunityStr": ["public","private"], "readCommunityStr": ["public"], "ip": "10.184.63.2", "writeCommunityStr": ["private"],"ipv6Preference": true, "ipdrInfo": [], "cliUser": "e6", "cliType": null, "cliPassword": "99","cliPrompt": null, "networkPartition": "us-east", "cmWriteCommunityStr": ["private"], "id":"Mimic_E6K_v8_Jun2021", "mtaReadCommunityStr": ["public"]}]}

Write community strings

Write community strings for CM and CMTS devices are required to support some features in ServAssure NXT.
Table 2. Write community strings required by feature
ServAssure NXT FeatureCM write community stringCMTS write community string
Public API(s) On-Demand ActionsModem ResetModem from CMTS Reset
AnalyzeModem ResetModem from CMTS Reset
Analyze sub-carrierDownstream rxMERUpstream rxMER
Upstream Spectrum AnalyzerN/ACMTS Upstream Spectrum

CMTS Upstream Spectrum Session

Impulse Noise

Alarm CentralCM SpectrumN/A