Exemple #1
0
def recreate_cont(parameters):
    try:
        cont_id = parameters['cont_id']
        logger.debug("In recreate_container() function...")
        cont_details = current.db.container_data[cont_id]
        container = Container(cont_details.UUID,setProp=False)
        container.remove()

#         mount_hostvolumes = '/root/user/'+ cont_details.owner_id.username +'/'+cont_details.name
        memory = str(cont_details.RAM)+'M'
        
        ret = install_container(
                                cont_details.name,
                                cont_details.image_id,
                                
                                cont_details.env_vars,
                                cont_details.vCPU,
                                memory,
                                True)
        logger.debug(ret)
        message = ("Container %s re-created successfully." % cont_details.name)
        cont_details.update_record(UUID=ret['Id'], status=current.VM_STATUS_RUNNING)
        return (current.TASK_QUEUE_STATUS_SUCCESS, message)                    
    except:
        logger.debug("Task Status: FAILED Error: %s " % log_exception())
        return (current.TASK_QUEUE_STATUS_FAILED, log_exception())
Exemple #2
0
def get_container_logs(cont_id):

    cont_info = db.container_data[cont_id]
    if not cont_info: return

    container = Container(cont_info.UUID)
    return container.logs()
def get_container_archive_wd(cont_id):
    cont_info = db.container_data[cont_id]
    if not cont_info : 
        return None
    
    container = Container(cont_info.UUID);
    return container.get_archive(container.properties['WorkingDir'])
def get_container_logs(cont_id):
    
    cont_info = db.container_data[cont_id]
    if not cont_info : return
    
    container = Container(cont_info.UUID,setProp=False);
    return container.logs()
def get_container_archive(cont_id,file_path):
    cont_info = db.container_data[cont_id]
    if not cont_info : 
        return None
    
    container = Container(cont_info.UUID,setProp=False);
    return container.get_archive(file_path)
def install_container(name,
                      templateid,
                      env,
                      cpushare,
                      memory,
                      portmap=False,
                      setnginx=True):
    imageprofile = getImageProfile(templateid)
    nodes = get_node_to_deploy()
    nodeindex = get_node_pack(nodes, memory, 1)
    port = imageprofile['port']
    if (port):
        portmap = True
    if (not env):
        env = {
            'constraint:node=': nodes[nodeindex]['Name']
        }
    else:
        env['constraint:node='] = nodes[nodeindex]['Name']
    env['TERM'] = 'xterm'
    if (imageprofile['updatemysql']):
        extrahosts = {'mysql': config.get("DOCKER_CONF", "mysql_machine")}
    else:
        extrahosts = None
    hostconfig = client.create_host_config(
        publish_all_ports=portmap,
        mem_limit=memory,
        cap_drop=imageprofile['permissiondrop'],
        cap_add=imageprofile['permissionadd'],
        links=imageprofile['links'],
        extra_hosts=extrahosts)
    try:
        containerid = client.create_container(name=name,
                                              image=imageprofile['Id'],
                                              command=imageprofile['cmd'],
                                              environment=env,
                                              detach=True,
                                              cpu_shares=cpushare,
                                              host_config=hostconfig)
    except docker.errors as e:
        print(e)
        return
    # Update the db -- container in created state.....
    try:
        response = client.start(container=containerid['Id'])
        # @UnusedVariable
        # Update the db -- container in running state
    except docker.errors as e:
        print(e)
    if (port and setnginx):
        container = Container(containerid)
        container.addipbyconf()
    return containerid
Exemple #7
0
def backup_cont(parameters):
    try:
        cont_id = parameters['cont_id']
        logger.debug("In backup_container() function...")
        cont_details = current.db.container_data[cont_id]
        container = Container(cont_details.UUID)
        container.backup(cont_details.owner_id.username)
        message = "Container commited successfully."
        return (current.TASK_QUEUE_STATUS_SUCCESS, message)                    
    except:
        logger.debug("Task Status: FAILED Error: %s " % log_exception())
        return (current.TASK_QUEUE_STATUS_FAILED, log_exception())
def get_cont_config(cont_id):
    """
    Fetches VM information for the given ID.
    Creates a map of parameters and corresponding display strings 
    
    @param vm_id: VM ID 
    @type vm_id: C{int} 
    @return: Map of vm parameters an its display values. 
    @rtype: C{map} 
    """

    cont_info = db.container_data[cont_id]
    if not cont_info : return
    
    container = Container(cont_info.UUID);
    container.updatedetails()
    logger.debug("IN get_cont_config")
    
    if container:
        cont_details = container.properties
        logger.debug(cont_details)
        cont_created = cont_details['Created'] #(datetime.datetime.fromtimestamp(cont_details1['Created'])).strftime('%A %d, %b %Y %H:%M')
        cont_command = cont_details['Cmd']
        cont_ports = cont_details['Ports'] if cont_details['Ports'] else {}
        cont_status = cont_details['State']
        cont_env = cont_details['Environment']
        exec_ids = cont_details['ExecIDs']
    else:
        cont_created = "-"
        cont_command = "-"
        cont_ports = [{u'IP': u'0.0.0.0', u'Type': u'', u'PublicPort': 0, u'PrivatePort': 0}]
        cont_status = "Invalid"
        cont_env = cont_info.env_vars
    
    cont_info_map = {'id'           : cont_info.id,
                   'name'           : cont_info.name,
                   'RAM'            : str(round((cont_info.RAM/1024.0),2)) + ' GB',
                   'vcpus'          : str(cont_info.vCPU) + ' CPU',
                   'env_vars'       : cont_env ,
                   'template'       : str(cont_info.image_profile) ,
                   'restart_policy' : str(cont_info.restart_policy) ,
                   'owner'          : cont_info.owner_id.first_name + ' ' + cont_info.owner_id.last_name if cont_info.owner_id > 0 else 'System User',
                   'purpose'        : '-' if cont_info.purpose == '' else cont_info.purpose,
                   'uuid'           : cont_info.UUID,
                   'created'        : cont_created,
                   'command'        : cont_command,
                   'ports'          : cont_ports,
                   'status'         : cont_status,
                   'ExecIds' 		: exec_ids}


    return cont_info_map  
def suspend_cont(parameters):
    try:
        cont_id = parameters['cont_id']
        logger.debug("In suspend_container() function...")
        cont_details = current.db.container_data[cont_id]
        container = Container(cont_details.UUID)
        container.pause()
        cont_details.update_record(status=current.VM_STATUS_SUSPENDED)
        message = "Container suspended successfully."
        return (current.TASK_QUEUE_STATUS_SUCCESS, message)
    except:
        logger.debug("Task Status: FAILED Error: %s " % log_exception())
        return (current.TASK_QUEUE_STATUS_FAILED, log_exception())
Exemple #10
0
def resume_cont(parameters):
    try:
        cont_id = parameters['cont_id']
        logger.debug("In resume_container() function...")
        cont_details = current.db.container_data[cont_id]
        container = Container(cont_details.UUID,setProp=False)
        container.resume()
        cont_details.update_record(status=current.VM_STATUS_RUNNING)
        message = "Container resumed successfully."
        return (current.TASK_QUEUE_STATUS_SUCCESS, message)                    
    except:
        logger.debug("Task Status: FAILED Error: %s " % log_exception())
        return (current.TASK_QUEUE_STATUS_FAILED, log_exception())
Exemple #11
0
def delete_cont(parameters):
    try:
        cont_id = parameters['cont_id']
        logger.debug("In delete_container() function...")
        cont_details = current.db.container_data[cont_id]
        container = Container(cont_details.UUID)
        container.remove()
        del current.db.container_data[cont_id]
        message = "Container deleted successfully."
        return (current.TASK_QUEUE_STATUS_SUCCESS, message)
    except:
        logger.debug("Task Status: FAILED Error: %s " % log_exception())
        return (current.TASK_QUEUE_STATUS_FAILED, log_exception())
Exemple #12
0
def install_container(name,templateid,env,cpushare,memory,portmap=False,setnginx=True,restart_policy='no'):
    imageprofile = getImageProfile(templateid)
    nodes = get_node_to_deploy()
    nodeindex = get_node_pack(nodes,memory,1)
    port = imageprofile['port']
    if (port):
        portmap = True 
    if(not env):
        env = {'constraint:node=':nodes[nodeindex]['Name']}
    else:
        env['constraint:node='] =nodes[nodeindex]['Name']
    env['TERM'] = 'xterm'
    if(imageprofile['updatemysql'] ):
        extrahosts = {'mysql':config.get("DOCKER_CONF","mysql_machine_ip")}
    else :
        extrahosts = None
    ulimits=[]
    import docker.utils
    ulimits.append(docker.utils.Ulimit(Name='NPROC',Soft=500,Hard=1000))
    ulimits.append(docker.utils.Ulimit(Name='NOFILE',Soft=4000,Hard=8000))
    hostconfig = client.create_host_config(publish_all_ports = portmap,mem_limit = memory,cap_drop=imageprofile['permissiondrop'],cap_add=imageprofile['permissionadd'],links  = imageprofile['links'],extra_hosts=extrahosts,restart_policy={'Name':restart_policy,'MaximumRetryCount':5},ulimits=ulimits)
    try: 
        containerid = client.create_container(name=name,image = imageprofile['Id'] , command = imageprofile['cmd'],
                              environment = env , detach = True ,cpu_shares=cpushare,
                             host_config = hostconfig )
    except docker.errors as e:
        print (e) 
        return       
    # Update the db -- container in created state.....
    try:                     
        response = client.start(container = containerid['Id'])  # @UnusedVariable
        # Update the db -- container in running state
    except Exception as e:
        logger.debug(e)
    if( port and setnginx) :
        container = Container(containerid)    
        container.addipbyconf()    
    return containerid
Exemple #13
0
def add_orphan_cont(cont_uuid):
    container = Container(cont_uuid)
    print("In add_orphan_cont")
    if container:
        container.updatedetails()

        cont_details = container.properties
        logger.debug(cont_details)
        image_details = getImage(cont_details['ImageName'])

        db.container_data.insert(
            name=cont_details['Name'][1:],
            RAM=int(int(cont_details['Memory']) / 1024 / 1024),
            vCPU=1,
            UUID=cont_uuid,
            image_id=image_details['templateid'],
            image_profile=image_details['type'],
            restart_policy=None,
            requester_id=SYSTEM_USER,
            owner_id=SYSTEM_USER,
            purpose='Added by System',
            status=cont_state_to_status(cont_details['State']))
    return
Exemple #14
0
def delete_orphan_cont(cont_uuid):
    container = Container(cont_uuid)
    container.remove()
    return
Exemple #15
0
from gluon import current
from helper import get_context_path, get_docker_daemon_address, \
    get_nginx_server_address, log_exception , config
from images import getImageProfile
from log_handler import logger
import docker
import os
import random
import remote_vm_task as remote_machine

cert_path = os.path.join(get_context_path(), 'modules/certs/')
tls_config = docker.tls.TLSConfig(client_cert=(cert_path+'cert.pem', cert_path+'key.pem'),verify=cert_path+'ca.pem')

docker_machine = get_docker_daemon_address();
client = docker.Client(base_url='https://'+docker_machine[0]+':'+docker_machine[1],version='auto', tls=tls_config)
Container.setclient(client);


def proxieddomain (name) :
    alias = '.baadalgateway.cse.iitd.ac.in'
    address = name +alias;
    return address[1:];         # required name contains '/' at start


def install_cont(parameters):
    try:
        cont_id = parameters['cont_id']
        logger.debug("In install_container() function...")
        cont_details = current.db.container_data[cont_id]
        logger.debug(cont_details)
    #     user_name = current.auth.user.username
Exemple #16
0
def garbage_collector():

    #Delete volumes no longer necessary
    nginx_server = get_nginx_server_address()
    vollist = client.volumes(filters={'dangling': True})
    volarray = vollist.get('Volumes')
    print(vollist['Volumes'])
    if volarray:
        for volume in vollist['Volumes']:
            try:
                client.remove_volume(name=volume['Name'])
            except Exception as e:
                print(e)

    #Delete remaining nginx conf

    conlist = client.containers(all=True)
    namelist = ['default']
    for container in conlist:
        namelist.append(container['Names'][0].split("/")[2])
        #~ namelist.append(container['Names'][0].split("/")[1]);
    print(namelist)
    cmd = "ls /etc/nginx/conf.d/"
    output = remote_machine.execute_remote_cmd(nginx_server[0],
                                               nginx_server[1], cmd,
                                               nginx_server[2])
    strlist = output.split("\n")
    print(strlist)

    todellist = []
    for i in range(0, len(strlist) - 1):
        name = strlist[i].split(".")[0]
        if not name in namelist:
            todellist.append(name)
    print(todellist)
    for name in todellist:
        cmd = "rm -f /etc/nginx/conf.d/" + name + ".conf"
        output = remote_machine.execute_remote_cmd(nginx_server[0],
                                                   nginx_server[1], cmd,
                                                   nginx_server[2])

    #Delete any mysql database whose app is missing
    datalist = ['information_schema', 'sys', 'mysql', 'performance_schema']
    datalist.append(namelist)
    cmd = """bash -c "mypassword='******' /var/lib/mysql/mysql.sh -l" """
    container = Container('f966820cf4a0')
    output = container.execcmd(cmd)
    strlist = output.split("\n")
    print(strlist)
    for i in range(3, len(strlist) - 1):
        name = strlist[i].split(".")[0]
        if not name in datalist:
            todellist.append(name)
    print(todellist)

    for name in todellist:
        cmd = """bash -c "mypassword='******' /var/lib/mysql/mysql.sh -r """ + name + ' "  '
        print(cmd)
        container.execcmd(cmd)
    container = 'None'

    #Delete any containers not in database
    print('not implemented')
def get_container_stats(cont_uuid):
    
    container = Container(cont_uuid,setProp=False);
    return container.stats()
Exemple #18
0
import random
import remote_vm_task as remote_machine

if config.getboolean("GENERAL_CONF", "docker_enabled"):
    cert_path = os.path.join(get_context_path(), 'modules/certs/')
    tls_config = docker.tls.TLSConfig(client_cert=(cert_path + 'cert.pem',
                                                   cert_path + 'key.pem'),
                                      verify=cert_path + 'ca.pem')

    docker_machine = get_docker_daemon_address()
    #client = docker.Client(base_url='https://:10.237.20.236:3376',version='auto', tls=tls_config)
    client = docker.Client(base_url='https://' + docker_machine[0] + ':' +
                           docker_machine[1],
                           version='auto',
                           tls=tls_config)
    Container.setclient(client)


def proxieddomain(name):
    #alias = '.baadalgateway.cse.iitd.ac.in'
    alias = '.docker.iitd.ac.in'
    address = name + alias
    return address[1:]
    # required name contains '/' at start


def install_cont(parameters):
    try:
        cont_id = parameters['cont_id']
        logger.debug("In install_container() function...")
        cont_details = current.db.container_data[cont_id]
def get_container_execsession(cont_uuid):
    container = Container(cont_uuid,setProp=False);
    return container.execidgenerator()
Exemple #20
0
def get_container_stats(cont_uuid):

    container = Container(cont_uuid)
    return container.stats()
def get_container_upload_data(cont_uuid,file_path,file_data):
    container = Container(cont_uuid,setProp=False);
    return container.upload(file_path,file_data);
def get_container_top(cont_id,pid_args='aux'):
    cont_info = db.container_data[cont_id]
    if not cont_info : return
    
    container = Container(cont_info.UUID,setProp=False);
    return container.top(pid_args)
def get_container_execresize(cont_uuid,cont_session,height,width):
    container = Container(cont_uuid,setProp=False);
    container.execresize(cont_session,height,width);