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
Alex Balashov <abalashov(a)evaristesys.com> schrieb am Mo., 11. Nov. 2019,
06:45:
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(a)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(a)gmail.com
> phone: +34669448337
>
>
> On Sun, Nov 10, 2019 at 9:22 PM Alex Balashov <
abalashov(a)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(a)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(a)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(a)lists.kamailio.org
>> > >>
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>> > >>
>> > > --
>> > > Regards,
>> > >
>> > > David Villasmil
>> > > email: david.villasmil.work(a)gmail.com
>> > > phone: +34669448337
>> > > _______________________________________________
>> > > Kamailio (SER) - Users Mailing List
>> > > sr-users(a)lists.kamailio.org
>> > >
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>> > >
>>
>> > _______________________________________________
>> > Kamailio (SER) - Users Mailing List
>> > sr-users(a)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(a)lists.kamailio.org
>>
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>>
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users(a)lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users >
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users(a)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(a)lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users