bin/cleanup
#!/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()