Package: textfsm-aos
TEXTFSM-AOSAlcatel-Lucent Enterprise AOS CLI parsingPython package for Alcatel-Lucent Enterprise aos6 and aos8 parsing based on TextFSM templates.Why TextFSM-AOS?Parse semi-structured cli data to structured data ready to be ingested by your network automation pipeline. Automatically transform gathered output from screen-scraping tools like Netmiko, Scrapli and Paramiko. Receive uniform data across Alcatel-Lucent Enterprise devices running aos6 or aos8.InstallationTextfsm-aos can be installed using Git + Poetry or PyPI.
sGitgitclonehttps://github.com/jefvantongerloo/textfsm-aos
poetryinstallPyPIpipinstalltextfsm-aosGetting startedProvide screen-scraped data to parserfromtextfsm_aos.parserimportparsesample_data="""Package           Release       Size     Description-----------------+---------------+--------+-----------------------------------KFbase.img        6.7.2.89.R06    18059551 Alcatel-Lucent Enterprise Base SoftwKFos.img          6.7.2.89.R06     3566798 Alcatel-Lucent Enterprise OSKFeni.img         6.7.2.89.R06     6123991 Alcatel-Lucent Enterprise NI softwarKFsecu.img        6.7.2.89.R06      649383 Alcatel-Lucent Enterprise Security M"""parse("ale_aos6","show microcode",sample_data)parsed result[{"package":"KFbase.img","release":"6.7.2.89.R06","size":"18059551","description":"Alcatel-Lucent Enterprise Base Softw"},{"package":"KFos.img","release":"6.7.2.89.R06","size":"3566798","description":"Alcatel-Lucent Enterprise OS"},{"package":"KFeni.img","release":"6.7.2.89.R06","size":"6123991","description":"Alcatel-Lucent Enterprise NI softwar"},{"package":"KFsecu.img","release":"6.7.2.89.R06","size":"649383","description":"Alcatel-Lucent Enterprise Security M"}]Integration testsDue to sensitive information the gathered live data for integration testing is stored in a private repository. Releases are tested against following aos versions:aos versiontests6.7.2.122.R08:heavy_check_mark:8.9.73.R01:heavy_check_mark:8.8.56.R02:heavy_check_mark:8.8.152.R01:heavy_check_mark:8.9.73.R01:heavy_check_mark:8.9.107.R02:heavy_check_mark:Supported commandscommandaos6aos8historyalias: show history:heavy_check_mark:show 802.1x users:heavy_check_mark:alias: show unp usershow 802.1x users unp:heavy_check_mark::x:show 802.1x non-supplicant:heavy_check_mark::x:show 802.1x non-supplicant unp:heavy_check_mark::x:show arp:x::heavy_check_mark:show chassis:heavy_check_mark::heavy_check_mark:show cmm:x::heavy_check_mark:show command-log:heavy_check_mark::heavy_check_mark:show hardware-info:x::heavy_check_mark:show health:heavy_check_mark::heavy_check_mark:show history:heavy_check_mark:alias: historyshow interface status:heavy_check_mark::heavy_check_mark:show interfaces:x::heavy_check_mark:show ip interface:heavy_check_mark::heavy_check_mark:show ip route:heavy_check_mark:alias: show ip routesshow ip router database:x::heavy_check_mark:show ip routesalias: show ip route:heavy_check_mark:show linkagg:x::heavy_check_mark:show linkagg port:x::heavy_check_mark:show lld remote system:heavy_check_mark::x:show log events:x::heavy_check_mark:show mac-address-table:heavy_check_mark:alias: show mac-learningshow mac-learningalias: show mac-address-table:heavy_check_mark:show microcode:heavy_check_mark::heavy_check_mark:show ntp server status:heavy_check_mark::heavy_check_mark:show port-security brief:x::heavy_check_mark:show qos port:x::heavy_check_mark:show unp useralias: show 802.1x users:heavy_check_mark:show unp user details:x::heavy_check_mark:show user:heavy_check_mark::heavy_check_mark:show running-directory:x::heavy_check_mark:show qos log:x::heavy_check_mark:show snmp station:heavy_check_mark::heavy_check_mark:show snmp community map:heavy_check_mark:alias: show snmp community-mapshow snmp community-mapalias: show snmp community map:heavy_check_mark:show spantree ports:x::heavy_check_mark:show system:heavy_check_mark::heavy_check_mark:show transceivers:x::heavy_check_mark:show vlan:heavy_check_mark::heavy_check_mark:show vlan members:x::heavy_check_mark:show vlan port mobile:heavy_check_mark::x:Direct TextFSM example usageBypass the build-in parser functionality and use the TextFSM templates directly in network cli scraping and orchestration tools like Netmiko, Scrapli and Ansible.ScrapliPython script:fromscrapliimportScraplifromscrapli.helperimporttextfsm_parsedevice={"host":"<host ip>","auth_username":"<username>","auth_password":"<password>","auth_strict_key":False,"transport":"ssh2","platform":"alcatel_aos",}withScrapli(**device)asconn:response=conn.send_command("show health").resultstructured_response=textfsm_parse("templates/ale_aos6_show_health.textfsm",response)Example output:[{"resource":"Receive","limit":"80","current":"01","min_avg":"01","hr_avg":"01","hr_max":"01"},{"resource":"Transmit/Receive","limit":"80","current":"01","min_avg":"01","hr_avg":"01","hr_max":"01"},{"resource":"Memory","limit":"80","current":"76","min_avg":"76","hr_avg":"76","hr_max":"76"},{"resource":"Cpu","limit":"80","current":"32","min_avg":"33","hr_avg":"29","hr_max":"97"}]NetmikoPython script:fromnetmikoimportConnectHandlerdevice={'device_type':'alcatel_aos','host':'<host ip>','username':'<username>','password':'<password>'}withConnectHandler(**device)asconn:output=conn.send_command("show health",use_textfsm=True,textfsm_template="textfsm-aos/templates/ale_aos6_show_health.textfsm")Example Output:[{"resource":"Receive","limit":"80","current":"01","min_avg":"01","hr_avg":"01","hr_max":"01"},{"resource":"Transmit/Receive","limit":"80","current":"01","min_avg":"01","hr_avg":"01","hr_max":"01"},{"resource":"Memory","limit":"80","current":"76","min_avg":"76","hr_avg":"76","hr_max":"76"},{"resource":"Cpu","limit":"80","current":"32","min_avg":"33","hr_avg":"29","hr_max":"97"}]AnsibleAnsible task:-name:AOS6 >> parsed with textfsmset_fact:health:"{{health-aos6|ansible.netcommon.parse_cli_textfsm('textfsm/templates/ale_aos6_show_health.textfsm')}}"Example Output:health:-healthModuleCpu1HrAvg:'29'healthModuleCpu1HrMax:'98'healthModuleCpu1MinAvg:'26'healthModuleCpuLatest:'31'healthModuleCpuLimit:'80'healthModuleMemory1HrAvg:'76'healthModuleMemory1HrMax:'76'healthModuleMemory1MinAvg:'76'healthModuleMemoryLatest:'76'healthModuleMemoryLimit:'80'healthModuleRx1HrAvg:'01'healthModuleRx1HrMax:'01'healthModuleRx1MinAvg:'01'healthModuleRxLatest:'01'healthModuleRxLimit:'80'healthModuleRxTxRx1HrAvg:'01'healthModuleRxTxRx1HrMax:'01'healthModuleRxTxRx1MinAvg:'01'healthModuleRxTxRxLatest:'01'healthModuleRxTxRxLimit:'80'healthModuleSlot:'1'How to contributeFork and create a branch with naming<platform>_<command>(for example: ale_aos8_show_system).Add TextFSM template file in templates folder with naming<platform>_<command>.textfsm.Add entry in templates_index with attribute command and platform.Add test folder in 'templates' with naming<platform>_<command>.Add sample cli output file in newly created folder<platform>_<command>.txt.Add expected parsed data from sample cli output in<platform>_<command>.yml.Run lintingtoxand testspytest.How to setup development environmentInstallPoetrypackage manager viapip install poetryInstall dev dependencies and textfsm-aos package in development mode withpoetry installOpen virtual environmentpoetry shellRelated projectsGoogle TextFSM:https://github.com/google/textfsmScrapli:https://github.com/carlmontanari/scrapliNetmiko:https://github.com/ktbyers/netmikoGetting started with TextFSM:https://pyneng.readthedocs.io