Nice idea Alex.
I use import_file and include_file and fill this with my settings from Puppet.
Many ways to get your config strings.
There is also some ENV stuff for Kamailio to feature config strings into startup for container environments AFAIK.
Cheers
Karsten
I prefer more flexibility, and so use a slightly more ornate approach
involving the Jinja2 template engine (inspired by Jango)[1] and Python
3. I'll spread it in the network in the hope that it helps someone.
--- kamailio-settings.yaml ---
listeners:
- proto: udp
addr: 127.0.0.1
port: 5060
- proto: tcp
addr: 172.30.105.10
port: 5060
db_conn:
driver: mysql
user: kamailio_ro
password: abc123
host: 172.30.106.11
name: kamailio
------------------------------
And the Kamailio config:
--- kamailio.cfg.tpl ----
#!define DB_URL "{{ db_conn['driver'] }}://{{ db_conn['user'] }}:{{ db_conn['password'] }}@{{ db_c
onn['host'] }}/{{ db_conn['name'] }}"
...
{% for l in listeners -%}
listen={{ l['proto'] }}:{{ l['addr'] }}:{{ l['port'] }}
{% endfor %}
-------------------------
And:
--- apply.py ---
#!/usr/bin/python3
import sys, os, re, yaml
from jinja2 import Template, Environment
env = Environment()
cfg_buf = None
settings = None
with open('/usr/local/etc/kamailio/kamailio.cfg.tpl', 'r') as f:
cfg_buf = f.read()
tpl_instance = env.from_string(cfg_buf)
with open('kamailio-settings.yaml', 'r') as f:
settings = yaml.load(f.read(), Loader=yaml.FullLoader)
finished = tpl_instance.render(settings)
with open('/usr/local/etc/kamailio/kamailio.cfg', 'w') as f:
f.write(finished)
----------------
Then, this goes in the systemd unit:
ExecStartPre=/usr/bin/python3 /opt/evariste/scripts/apply.py
Result:
---
#!define DB_URL "mysql://kamailio_ro:abc123@172.30.106.11/kamailio"
...
listen=udp:127.0.0.1:5060
listen=tcp:172.30.105.10:5060
---
-- Alex
[1] https://jinja.palletsprojects.com/en/2.10.x/
On Mon, Nov 11, 2019 at 08:00:46AM +0300, Sergey Safarov wrote:
> You can also update kamailio.cfg to include listeners.cfg
> Example. Need add to kamailio.cfg
>
> ####### Listeners ##########
> include_file "/var/run/kamailio/listeners-eth0.cfg"
>
> Before kamailio started you will generate listeners.cfg file.
> This may by done by drop-in file.
> Need create "/etc/systemd/system/kamailio.service.d/10-listners-eth0.conf"
> with content
> [Service]
> ExecStartPre=/bin/curl -s -S --output /var/run/kamailio/listeners-eth0.cfg
> http://169.254.169.254/latest/meta-data/public-ipv4
> ExecStartPre=/bin/sed --in-place --regexp-extended -e
> 's/(.*)/listen=udp:\1:5060\nlisten=tcp:\1:5060\n/'
> /var/run/kamailio/listeners-eth0.cfg
>
>
>
> On Mon, Nov 11, 2019 at 2:50 AM David Villasmil <
> david.villasmil.work@gmail.com> wrote:
>
> > That's the one, thanks @Karsten!
> >
> >
> > More info, i changed my systemd unit to execute a script when starting up,
> > like so:
> >
> > # cat /etc/systemd/system/multi-user.target.wants/kamailio.service
> > [Unit]
> > Description=Kamailio (OpenSER) - the Open Source SIP Server
> > After=network.target
> >
> > [Service]
> > Type=forking
> > Environment='CFGFILE=/etc/kamailio/kamailio.cfg'
> > Environment='SHM_MEMORY=64'
> > Environment='PKG_MEMORY=8'
> > Environment='USER=kamailio'
> > Environment='GROUP=kamailio'
> > EnvironmentFile=-/etc/default/kamailio
> > EnvironmentFile=-/etc/default/kamailio.d/*
> > # PIDFile requires a full absolute path
> > PIDFile=/var/run/kamailio/kamailio.pid
> > ExecStart=/etc/kamailio/startkam.sh
> > Restart=on-abort
> >
> > [Install]
> > WantedBy=multi-user.target
> >
> > And /etc/kamailio/startkam.sh is like:
> >
> > #!/bin/bash
> >
> > MYSQL=$(/etc/kamailio/aws-getpass.sh dev us-east-1 dburl)
> > SHM_MEMORY=64
> > PKG_MEMORY=8
> > USER=kamailio
> > GROUP=kamailio
> > CFGFILE=/etc/kamailio/kamailio.cfg
> > /usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f $CFGFILE -m
> > $SHM_MEMORY -M $PKG_MEMORY -u $USER -g $GROUP -A "DBURL=\"$MYSQL\"" -A
> > "CBDBURL=\"cb=>$MYSQL\"" -A "ASGDBURL=\"asg=>$MYSQL\""
> >
> > which in turn calls /etc/kamailio/aws-getpass.sh, which is the actual
> > script talking to AWS via BOTO3 to get the data i need.
> >
> > You can just change the params and use them in your kam script normally
> > like:
> >
> > modparam("acc", "db_url", DBURL )
> >
> > Hope that helps.
> >
> > Regards,
> >
> > David Villasmil
> > email: david.villasmil.work@gmail.com
> > phone: +34669448337
> >
> >
> > On Sun, Nov 10, 2019 at 9:22 PM Alex Balashov <abalashov@evaristesys.com>
> > wrote:
> >
> >> -A ... oh wow. That's savvy! Cheers.
> >>
> >> On Sun, Nov 10, 2019 at 08:51:59PM +0100, Karsten Horsmann wrote:
> >>
> >> > Hi David,
> >> >
> >> > You mean this thread from may 2019.
> >> > https://lists.kamailio.org/pipermail/sr-users/2019-May/105599.html
> >> >
> >> > Pro Tipp, search on lists.kamailio.org/pipermail/ to get your link.
> >> Great
> >> > help the mailing list archive btw.
> >> >
> >> > Cheers
> >> > Karsten
> >> >
> >> > David Villasmil <david.villasmil.work@gmail.com> schrieb am So., 10.
> >> Nov.
> >> > 2019, 19:03:
> >> >
> >> > > I needed to discover the user/pass for the dB when kamailio starts so
> >> as
> >> > > not to store it locally. I get the data via an AWS script, then start
> >> > > kamailio passing the parameters, then use of those in the script. You
> >> can
> >> > > do exactly this to get and set the current ip address.
> >> > >
> >> > > I don’t know how to share a thread from this mailing list, but search
> >> for
> >> > > the subject “ define a DBURL with SLQOPS fails” and you will find all
> >> info
> >> > > there.
> >> > >
> >> > > On Sun, 10 Nov 2019 at 17:48, Alex Balashov <
> >> abalashov@evaristesys.com>
> >> > > wrote:
> >> > >
> >> > >> On Sun, Nov 10, 2019 at 06:16:44PM +0100, Alejandro Recarey wrote:
> >> > >>
> >> > >> > Hi, I am trying to get kamailio working cloud provider, autoscaling
> >> > >> > them behind a TCP load balancer.
> >> > >> >
> >> > >> > Is there a way for kamailio to discover its Public IP at startup?
> >> Or
> >> > >> > do people generally program their own startup scripts that modify
> >> the
> >> > >> > kamailio config file before starting it?
> >> > >>
> >> > >> They generally do the latter, especially since public IP discovery
> >> > >> mechanisms tend to be specific to the cloud provider.
> >> > >>
> >> > >> But various templating mechanisms make this quite easy to do.
> >> > >>
> >> > >> --
> >> > >> Alex Balashov | Principal | Evariste Systems LLC
> >> > >>
> >> > >> Tel: +1-706-510-6800 / +1-800-250-5920 (toll-free)
> >> > >> Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
> >> > >>
> >> > >> _______________________________________________
> >> > >> Kamailio (SER) - Users Mailing List
> >> > >> sr-users@lists.kamailio.org
> >> > >> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
> >> > >>
> >> > > --
> >> > > Regards,
> >> > >
> >> > > David Villasmil
> >> > > email: david.villasmil.work@gmail.com
> >> > > phone: +34669448337
> >> > > _______________________________________________
> >> > > Kamailio (SER) - Users Mailing List
> >> > > sr-users@lists.kamailio.org
> >> > > https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
> >> > >
> >>
> >> > _______________________________________________
> >> > Kamailio (SER) - Users Mailing List
> >> > sr-users@lists.kamailio.org
> >> > https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
> >>
> >>
> >> --
> >> Alex Balashov | Principal | Evariste Systems LLC
> >>
> >> Tel: +1-706-510-6800 / +1-800-250-5920 (toll-free)
> >> Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
> >>
> >> _______________________________________________
> >> Kamailio (SER) - Users Mailing List
> >> sr-users@lists.kamailio.org
> >> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
> >>
> > _______________________________________________
> > Kamailio (SER) - Users Mailing List
> > sr-users@lists.kamailio.org
> > https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
> >
> _______________________________________________
> Kamailio (SER) - Users Mailing List
> sr-users@lists.kamailio.org
> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
--
Alex Balashov | Principal | Evariste Systems LLC
Tel: +1-706-510-6800 / +1-800-250-5920 (toll-free)
Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users@lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users