"""
This module is to manage Docker container in Minisat
"""
import os
import time
[docs]def make_connection(ip_address, name):
"""Make Docker connection using docker-machine
:param ip_address: IP address of remote machine
:param name: Name of docker-machine connection
:returns: True if success or False
"""
add_docker_machine = "docker-machine create --driver generic --generic-ip-address " + ip_address + \
" --generic-ssh-user root --generic-ssh-key ~/.ssh/id_rsa " + name + " > /dev/null 2>&1 &"
result = os.system(add_docker_machine)
if result == 0:
return "True"
else:
return "False"
[docs]def get_docker_images(compute=[]):
"""Get Docker images available in all the compute resources
:param compute: Name of compute resources
:returns docker_dict: Dictionary of docker images available
"""
name = compute[0][1]
images_list = []
get_images = os.popen("docker-machine ssh " + name + " docker images").readlines()
count = 0
docker_dict = {}
for i in range(1, len(get_images)):
images = get_images[i].split()
images_list.extend([images[2], images[0], images[1], images[3] + " " + images[4] + " " + images[5], images[6]])
docker_dict[count] = images_list
images_list = []
count = count + 1
return docker_dict
[docs]def run_cont(new_cont, stat):
"""Run the container
:param new_cont: Class of container details
:param stat: Running status
"""
if stat == "on":
stat_cmd = " -t "
else:
stat_cmd = ""
if new_cont.host_port != "" or new_cont.cont_port != "":
port_cmd = "-p " + new_cont.host_port + ":" + new_cont.cont_port + " "
else:
port_cmd = ""
if new_cont.tag_name != "":
tag_cmd = new_cont.image_name + ":" + new_cont.tag_name + " "
else:
tag_cmd = " " + new_cont.image_name + ":latest "
if new_cont.container_name != "":
cont_cmd = " --name " + new_cont.container_name + " "
else:
cont_cmd = ""
create_cont = "docker-machine ssh " + new_cont.select_compute + " docker container run -d " + stat_cmd + port_cmd + cont_cmd + tag_cmd + " > /dev/null 2>&1 &"
os.system(create_cont)
[docs]def start_cont(cont_name, compute_name):
"""Start a container
:param cont_name: Name of container
:param compute_name: Name of compute
:returns: Paused if success else 0
"""
start_cmd = "docker-machine ssh " + compute_name + " docker unpause " + cont_name
cont_response = os.system(start_cmd)
time.sleep(4)
if cont_response == 0:
return "Paused"
elif cont_response == 256:
return 0
[docs]def stop_cont(cont_name, compute_name):
"""Stop a container
:param cont_name: Name of container
:param compute_name: Name of compute
:returns: Running if success else 0
"""
start_cmd = "docker-machine ssh " + compute_name + " docker pause " + cont_name
cont_response = os.popen(start_cmd)
time.sleep(4)
if cont_response == 0:
return "Running"
elif cont_response == 256:
return 0
[docs]def destroy_cont(cont_name, compute_name):
"""Destroy a container
:param cont_name: Name of container
:param compute_name: Name of compute
:returns: Destroyed if success else 0
"""
stop_cmd = "docker-machine ssh " + compute_name + " docker container rm -f " + cont_name
cont_response = os.popen(stop_cmd)
time.sleep(4)
if cont_response == 0:
return "Destroyed"
else:
return 0