Asterisk PBX configuration syntax checker
Project description
Asterisklint is a suite of tools to check syntax of your Asterisk PBX configuration files.
Alright, enough talking. Some examples please.
Invocation
$ asterisklint
usage: asterisklint [-h] COMMAND
asterisklint: error: the following arguments are required: COMMAND
$ asterisklint ls
builtin:
ls List available commands.
/usr/lib/python/dist-packages:
dialplan-check Do sanity checks on dialplan. Takes 'extensions.conf'
as argument. Suppress error classes using ALINT_IGNORE.
dialplan-show Show dialplan like Asterisk does with CLI command
"dialplan show". Takes 'extensions.conf' as argument.
modules-show Show which modules, apps and functions are used by the
dialplan. Takes 'extensions.conf' as argument.
Place custom commands in ~/.asterisklint/asterisklint/commands.
Take this little dialplan snippet, that we’ll call extensions.conf:
[default] exten => _8[2-9]x,1,NoOp same => n,GoSub(somewhere,s,1(argument1,argument2) same => n,Payback(audiofile)
Now run the dialplan-check command on it:
$ ALINT_IGNORE=H_DP_ \
asterisklint dialplan-check extensions.conf
extensions.conf:2 H_PAT_NON_CANONICAL: pattern '_8[2-9]x' is not in the canonical form '_8NX'
extensions.conf:3 W_APP_BAD_CASE: app 'GoSub' does not have the proper Case 'Gosub'
extensions.conf:3 W_APP_BALANCE: app data 'somewhere,1,s(argument1,argument2' looks like unbalanced parentheses/quotes/curlies
extensions.conf:4 E_APP_MISSING: app 'Payback' does not exist, dialplan will halt here!
It had a lot to complain about that little snippet. But it was right. We even suppressed two hints about a missing [general] and [global] context using ALINT_IGNORE.
Not everything it checks is documented, and it does not check everything that we like yet. But it’s a start. Bug reports are welcome. Feature requests prefer to be accompanied by a patch :-)
Try out modules-show if you use autoload=no in your modules.conf.
All commands show help if asked:
$ asterisklint modules-show --help
usage: asterisklint modules-show [-h] EXTENSIONS_CONF
Show which modules, apps and functions are used by the dialplan. Useful when
you use autoload=no in your modules.conf. Beware that you do need more modules
than just these listed.
positional arguments:
EXTENSIONS_CONF path to extensions.conf
optional arguments:
-h, --help show this help message and exit
Installation
Installation is a matter of python3 setup.py install. Or, for more convenience, install a PyPI uploaded version through pip3(1):
The dialplan-check comes in handy as a git commit hook, for example .git/hooks/pre-commit:
TODO
Improve documentation as needed.
Expression parsing.
Function argument parsing.
Recursive includes probably make asterisklint run out of stack.
Goto/Gosub-visiting to check for missing contexts/destinations/prios/labels.
Add app-check command to do dialplan checks of individual lines.
Add expr-check command to do expression ($[…]) checks.
Before 1.0, start adding versioning – including semver – so users can depend on a stable API from their custom scripts. Also version the scripts (commands) so they won’t talk to older/newer libs if that poses a problem.
BUGS
The library is very much in flux. Don’t expect it to stabilize any time soon. Pay attention to versions!
Multiline comments (;– … –;) are unsupported. Does anyone use those?
Limits aren’t checked (dialplan lines are limited at 255 or 8191 bytes for LOW_MEMORY and normal mode respectively).
The function loader doesn’t read func_odbc. So you may get lots of E_FUNC_MISSING for your custom functions. Suppress those with ALINT_IGNORE=E_FUNC_MISSING for now.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file asterisklint-0.1.0rc6.tar.gz.
File metadata
- Download URL: asterisklint-0.1.0rc6.tar.gz
- Upload date:
- Size: 51.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0268df15ecd1c63f494f22f2f58be41cb5788cdee81c2f373121b84f764eaeb
|
|
| MD5 |
73e90a67745a59db7a6649e79b5ec161
|
|
| BLAKE2b-256 |
76a1a75e71aba15163e81dec405d7cf7b74b0d835f99b6bd7ae086fd02925288
|