intracom-telecom-sdn/multinet

View on GitHub
bin/cleanup

Summary

Maintainability
Test Coverage
#!/usr/bin/env python

"""Cleanup script:
This is responisble for cleansing the VMs of all things Multinet"""

import util.netutil
import util.multinet_requests as m_util
import time
import logging

def kill_remote_server(session, server_port):
    """Kills a process that is using a specific network port

    Args:
      session (paramiko session): The session that handles commands
      server_port (int): The port that the process listens in order to die

    Returns:
      None
    """

    get_pid = 'sudo netstat -antup --numeric-ports | grep "%s" | awk \'{print $NF}\' | awk -F \'/\' \'{print $1}\'' % str(server_port)
    _, cmd_out, _ = util.netutil.ssh_run_command(session, get_pid)
    pid = str(cmd_out.read().decode()).strip().strip('-')
    util.netutil.ssh_run_command(session, 'sudo kill -9 {0}'.format(pid))
    util.netutil.ssh_run_command(session, 'sudo mn -c')


if __name__ == '__main__':
    """
    The entry point for the cleanup script.
    Usage:
        bin/cleanup --json-config <path-to-json-conf>

    Example:
        bin/cleanup --json-config config/config.json

    Command Line Arguments:
        json-config (str): Path to the JSON configuration file to be used
    """

    args = m_util.parse_arguments()
    conf = m_util.parse_json_conf(args.json_config)

    master_ip = conf['master_ip']
    master_port = conf['master_port']
    ssh_port = conf['deploy']['ssh_port']
    worker_port_list = conf['worker_port_list']
    username = conf['deploy']['username']
    password = conf['deploy']['password']
    worker_ips = conf['worker_ip_list']
    multinet_base_dir = conf['deploy']['multinet_base_dir']

    total_worker_machines = len(worker_ips)

    copy_dest_ips = worker_ips + [master_ip] if master_ip not in worker_ips else worker_ips
    copy_dest_ports = worker_port_list + [master_port] if master_port not in worker_port_list else worker_port_list
    for curr_ip, worker_port in zip(copy_dest_ips, copy_dest_ports):
        print('Initiating session with Multinet VM.')
        session = util.netutil.ssh_connect_or_return(curr_ip, username,
                                                     password, 10, ssh_port)

        kill_remote_server(session, worker_port)
        kill_remote_server(session, master_port)

        util.netutil.ssh_run_command(session, 'sudo mn -c')

        print('Delete remote Multinet directory.')
        util.netutil.ssh_run_command(session, 'rm -rf /tmp/multinet')
        session.close()