Ansible is a configuration management tool, one of the best available. This tool doesn’t need any clients installed on remote machines and uses ssh to execute remote commands on the servers that form the sipxcom cluster.

Normally, to upgrade a sipXcom cluster you need to download the latest sipxcom.repo on each of the servers. Then starting with secondaries you needed to update the system and then reload it.

With Ansible we can execute all of these steps from the management machine which is running Ansible. In this Proof of Concept (PoC) we are using a cluster created previously with vagrant/VirtualBox on a local machine.

Let’s get hands-on:

Step 1. Copy ssh keys from your remote servers with ssh-copy-id command. Replace the bellow IP’s with yours:

[mihai@localhost SIPXCOM_Cluster]$ ssh-copy-id root@10.0.0.201

[mihai@localhost SIPXCOM_Cluster]$ ssh-copy-id root@10.0.0.202

[mihai@localhost SIPXCOM_Cluster]$ ssh-copy-id root@10.0.0.203

Step 2. Create an inventory.ini file used by ansible to identify the managed hosts and an ansible.cfg file that will instruct ansible to read the inventory file created in local path

[mihai@localhost SIPXCOM_upgrade]$ cat ansible.cfg

[defaults]

hostfile = inventory.ini

remote_user = root

[mihai@localhost SIPXCOM_upgrade]$ cat inventory.ini

[uc1]

10.0.0.201

[secondaries]

10.0.0.202

10.0.0.203

 

Step 3. Download the latest repo. When this blog article was written latest version was 16.04

[mihai@localhostSIPXCOM_upgrade]$wget http://download.sipxcom.org/pub/sipXecs/16.04/sipxecs-16.04.0-centos.repo

Step 4. Write a shell script that will perform yum update

#! /bin/bash
yum clean all ; yum update -y ; reboot

Step 5. Create ansible playbook that will upgrade sipxcom cluster

---

- hosts: all

  tasks:

    - name: Copy sipxcom.repo in /etc/yum.repos.d. Overwrite with latest repo file

      copy: src=sipxcom.repo dest=/etc/yum.repos.d/sipxcom.repo

- hosts: secondaries

  tasks:

    - name: Upgrading secondaries first

      shell: upgrade.sh    


- hosts: uc1

  tasks:

    - name: Upgrade primary now

      shell: upgrade.sh       

Step 6. Let’s add all these steps under a single setup.sh shell script. That will be executed when you want to upgrade to the latest sipXcom version

#! /bin/bash

echo "To which version you want to upgrade?? ex:add just  16.04  "

read VERSION

echo "You will need wget to download locally latest repo. If you don't have it installed on your management machine please install it.."

wget http://download.sipxcom.org/pub/sipXecs/$VERSION/sipxecs-$VERSION.0-centos.repo


#renaming to sipxcom.repo. This is the repo used by me on the VBox machines. You should replace the one that you have under /etc/yum.repos.d

mv sipxecs-$VERSION.0-centos.repo sipxcom.repo


#running ansible-playbook that will upgrade your cluster


ansible-playbook upgrade_sipxcom.yml

Step 7: Compare the current version of sipxcom with the old one:

rpm -qa | grep sipxconfig

Before upgrade:

-bash-4.1# rpm -qa | grep sipxconfig
 Sipxconfig-16.02-8284.b5a40.x86_64

After running setup.sh

 -bash-4.1# rpm -qa | grep sipxconfig
 sipxconfig-tftp-16.04-8602.ec5f8.x86_64
 sipxconfig-ftp-16.04-8602.ec5f8.x86_64
 sipxconfig-16.04-8602.ec5f8.x86_64

You can download the PoC files with: git clone https://github.com/Mihai-CMM/Upgrade_Sipxcom_DevOps_Style.git