[asterisk-users] Parameterize asterisk config files
Steve Edwards
asterisk.org at sedwards.com
Tue Oct 2 19:04:19 CDT 2012
On Tue, 2 Oct 2012, Mitch Claborn wrote:
> I'd like to be able to use the same config files in CVS and have the
> differences resolved at run time, based on host name of the asterisk
> server.
>
> Another idea would be to write a simple perl or other program to
> pre-process the files and put some markers in the files themselves.
I don't use CVS, old bad habits die hard :)
I use a preprocessor. Specifically:
http://git.dyne.org/freej/plain/lib/javascript/config/preprocessor.pl
(Not where I got it from, but it's the same file.)
because it had enough features and because my production hosts already
have Perl so I didn't have to add yet another scripting language.
This preprocessor allows you to do '#if HOSTNAME==v0' where HOSTNAME is a
shell environment variable or it can be defined on the command line.
You can also define variables in an 'include' file
It will do a whole lot more, but 'if' and substitution were the only
features I needed at the time. If I could have deciphered 'm4' I might
have used that, but the sendmail.mc files look too damn ugly to maintain.
I hacked in CURDATE and CURTIME as 'pre-defined variables'.
Here's a sample of one of my files:
#
# Filename: /source/src/${PROJECT}/manager.conf.pre
#
# Version: 001
#
# Edit date: 2008-12-02
#
# Facility: Asterisk
#
# Abstract: Define connections to the manager interface.
#
# Environment: Asterisk
#
# Author: Steven L. Edwards
#
# Modified by
#
# 000 2008-10-17 SLE Started documenting.
# 001 2008-12-02 SLE Preprocessorize.
#expand ; Created by makefile on __CURDATE__ at __CURTIME__
#expand ; from __FILE__
[general]
enabled = yes
port = 5038
#if HOSTNAME==v0
bindaddr = 127.0.0.1
#else
bindaddr = 0.0.0.0
#endif
[@AMI_USERNAME@]
deny = 0.0.0.0/0.0.0.0
#if HOSTNAME==v0
permit = 127.0.0.1/255.255.255.255
#else
permit = 192.168.0.0/255.255.255.0
#endif
read = all
secret = @AMI_SECRET@
write = all
; (end of /etc/asterisk/manager.conf)
# (end of /source/src/${PROJECT}/manager.conf.pre)
This gets munged by my makefile so deployment consists of 'make rsync;
make config'
--
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards sedwards at sedwards.com Voice: +1-760-468-3867 PST
Newline Fax: +1-760-731-3000
More information about the asterisk-users
mailing list