[SR-Users] Kamailio in cloud environments

Alejandro Recarey alex at recarey.org
Mon Nov 11 11:08:48 CET 2019


Guys, blown away by the support what an awesome community! Thanks for
all the replies, they are all great!

On Mon, Nov 11, 2019 at 8:34 AM Karsten Horsmann <khorsmann at gmail.com> wrote:
>
> 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 at 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 at 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 at gmail.com
>> > > phone: +34669448337
>> > >
>> > >
>> > > On Sun, Nov 10, 2019 at 9:22 PM Alex Balashov <abalashov at 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 at 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 at 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 at lists.kamailio.org
>> > >> > >> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>> > >> > >>
>> > >> > > --
>> > >> > > Regards,
>> > >> > >
>> > >> > > David Villasmil
>> > >> > > email: david.villasmil.work at gmail.com
>> > >> > > phone: +34669448337
>> > >> > > _______________________________________________
>> > >> > > Kamailio (SER) - Users Mailing List
>> > >> > > sr-users at lists.kamailio.org
>> > >> > > https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>> > >> > >
>> > >>
>> > >> > _______________________________________________
>> > >> > Kamailio (SER) - Users Mailing List
>> > >> > sr-users at 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 at lists.kamailio.org
>> > >> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>> > >>
>> > > _______________________________________________
>> > > Kamailio (SER) - Users Mailing List
>> > > sr-users at lists.kamailio.org
>> > > https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>> > >
>>
>> > _______________________________________________
>> > Kamailio (SER) - Users Mailing List
>> > sr-users at 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 at lists.kamailio.org
>> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>
> _______________________________________________
> Kamailio (SER) - Users Mailing List
> sr-users at lists.kamailio.org
> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users



More information about the sr-users mailing list