Asterisk 1.8 on Ubuntu We store the configuration files in CVS. We have a development, QA and production environments. 90% of the config files are the same across all 3 environments, but there are some differences in sip.conf and extensions.conf (environment specific voip providers and/or analog/digital lines). 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. Any ideas how to do this? I looked at STS, but it appears to be Mac only. One idea would be to use something like #include sip-$$$hostname$$$.conf and then use sed or similar in the startup script to replace $$$hostname$$$ with the actual host name. Then each host/environment would have it's own include file as needed. 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. ; onlyif host=abc ; /onlyif The pre-processor would delete lines between the tags that didn't match the currently running host. -- Mitch
On 12-10-02 06:39 PM, Mitch Claborn wrote:> Asterisk 1.8 on Ubuntu > > We store the configuration files in CVS. We have a development, QA and > production environments. 90% of the config files are the same across all > 3 environments, but there are some differences in sip.conf and > extensions.conf (environment specific voip providers and/or > analog/digital lines). 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. > > Any ideas how to do this? > > I looked at STS, but it appears to be Mac only. > > One idea would be to use something like > > #include sip-$$$hostname$$$.conf > > and then use sed or similar in the startup script to replace > $$$hostname$$$ with the actual host name. Then each host/environment > would have it's own include file as needed. > > 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. > ; onlyif host=abc > ; /onlyif > The pre-processor would delete lines between the tags that didn't match > the currently running host. >If you are going to astricon you'll want to show up for my talk. This is basically what Leif and I will be talking about. I use puppet to help manage our 3 environments (test, stage and production). Along side it I use a the following configuration setup[1] plus some Debian packaging scripts[2]. With this, I can quickly spin up instances which are provisioned to a base. Then, depending on puppet manifests[3] for each node, it defines how the system is then provisioned. If more per-site settings are required, I'll roll them into Debian packages (we use Ubuntu 12.04) and have each site subscribe to a customer repo. [1] https://github.com/kickstandproject/asterisk/tree/master/debian/ast_config [2] https://github.com/kickstandproject/astricon-2012-presentation/tree/master/debian [3] https://github.com/kickstandproject/puppet-modules/tree/master/modules/asterisk/manifests -- Paul Belanger | PolyBeacon, Inc. Jabber: paul.belanger at polybeacon.com | IRC: pabelanger (Freenode) Github: https://github.com/pabelanger | Twitter: https://twitter.com/pabelanger
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