Ejemplo n.º 1
0
def execute(command, code=True, combine=False, check=True, text=True, shell=True, onlycode=False, onlyerror=False):

    logger.info('Command %s gets executed.' % (command,))

    if combine:
        process = run(command, stdout=PIPE, stderr=STDOUT, text=text, shell=shell, executable='/bin/bash')
        logger.debug('Exit code: %s \nStdout: %s \nStderr: %s' % (process.returncode, process.stdout, process.stderr))
    else:
        process = run(command, capture_output=True, text=text, shell=shell, executable='/bin/bash')
        logger.debug('Exit code: %s \nStdout: %s' % (process.returncode, process.stdout))

    if check and process.returncode != 0:
        raise FailedToExecute(command, process.returncode, process.stderr)

    if onlycode:
        return process.returncode
    elif onlyerror:
        return process.stderr, process.returncode
    elif code and combine:
        return process.stdout, process.returncode
    elif code:
        return process.stdout, process.stderr, process.returncode
    elif combine:
        return process.stdout
    else:
        return process.stdout, process.stderr
Ejemplo n.º 2
0
 def upgrade() -> None:
     logger.info('Upgrading snap packages')
     err, code = execute('snap refresh', onlyerror=True)
     if code != 0:
         logger.error(
             'Cannot upgrade snap packages (exited with %s). Stderr:\n%s' %
             (code, err))
Ejemplo n.º 3
0
 def pull(name, tag='latest', **kwargs) -> Image:
     logger.info('Pulling image %s' %
                 (name, ) if not tag else 'Pulling image %s:%s' %
                 (name, tag))
     image = get_client().images.pull(name, tag=tag, **kwargs)
     if type(image) == list():
         return image[0]
     return image
Ejemplo n.º 4
0
def install(*package_names) -> None:
    for name in package_names:
        logger.info('Installing pip package %s' % (name, ))
        err, code = execute('python3 -m pip install --upgrade %s' % (name, ),
                            check=False,
                            onlyerror=True)
        if code != 0:
            logger.error('Pip package %s cannot be installed. Stderr:\n%s' %
                         (name, err))
Ejemplo n.º 5
0
def remove(*package_names) -> None:
    for name in package_names:
        logger.info('Removing pip package %s' % (name, ))
        err, code = execute('python3 -m pip uninstall %s' % (name, ),
                            check=False,
                            onlyerror=True)
        if code != 0:
            logger.error('Pip package %s cannot be removed. Stderr:\n%s' %
                         (name, err))
Ejemplo n.º 6
0
    def install(*package_names) -> None:

        for name in package_names:

            logger.info('Installing snap package %s' % (name, ))
            if execute('snap info %s' % (name, ), onlycode=True) != 0:
                logger.error('Snap package %s not found!' % (name, ))
                continue

            if name in list_all():
                logger.warning('Snap package %s already installed!' % (name, ))
                continue

            err, code = execute('snap install %s' % (name, ),
                                check=False,
                                onlyerror=True)
            if code != 0:
                logger.error(
                    'Snap package %s cannot be installed (exited with %s). Stderr:\n%s'
                    % (name, code, err))
Ejemplo n.º 7
0
 def build(fp,
           tag,
           logs=False,
           remove=True,
           timeout=300,
           pull_image=True,
           **kwargs):
     logger.info('Building image %s from %s' % (tag, fp))
     try:
         image, log = get_client().images.build(path=fp,
                                                tag=tag,
                                                rm=remove,
                                                timeout=timeout,
                                                pull=pull_image,
                                                **kwargs)
         if logs:
             return (image, log)
         else:
             return image
     except BuildError:
         logger.error('Build for image from %s failed' % (fp, ))
Ejemplo n.º 8
0
def start(*container_names) -> None:
    logger.info('Starting containers: ' % (name, image_name))
    [get_client().containers.get(name).start() for name in container_names]
Ejemplo n.º 9
0
def create(image_name, name, detach=True, **kwargs):
    logger.info('Create a container with name %s from image %s' % (name, image_name))
    container =  get_client().containers.create(image_name, name=name, detach=detach, **kwargs)
Ejemplo n.º 10
0
def run(image_name, name, detach=True, **kwargs) -> Container:
    logger.info('Run a container with name %s from image %s' % (name, image_name))
    try:
        container = get_client().containers.run(image_name, name=name, detach=detach, **kwargs)
        if container.status !=
Ejemplo n.º 11
0
 def save(name, fp, chunk_size=2097152, named=True) -> None:
     logger.info('Saving image %s to file %s' % (name, fp))
     with open(fp, 'wb') as f:
         for e in get_client().images.get(name).save(chunk_size=chunk_size,
                                                     named=named):
             f.write(e)
Ejemplo n.º 12
0
def change_mod_conjugated(fp, subfp, mode):
    _chmod(_join(fp, subfp), mode)
    logger.info('Changed mod for %s to %s' % (_join(fp, subfp), mode))
Ejemplo n.º 13
0
def change_mod(fp, mode):
    _chmod(fp, mode)
    logger.info('Changed mod for %s to %s' % (fp, mode))
Ejemplo n.º 14
0
def move(source, destination):
    _move(source, destination)
    logger.info('Move %s to %s' % (source, destination))
Ejemplo n.º 15
0
def copy(source, destination):
    _copy(source, destination)
    logger.info('Copied %s to %s' % (source, destination))
Ejemplo n.º 16
0
def upgrade() -> None:
    logger.info('Upgrading pip packages')
    install(*list_all())