Source code for subuserlib.docker

# -*- coding: utf-8 -*-

"""
This module helps us interact with the Docker executable directly.
"""

#external imports
import sys
import os
import getpass
import grp
#internal imports
import subuserlib.subprocessExtras as subprocessExtras
import subuserlib.executablePath

executable = None
verified = False

[docs]def getExecutable(): """ Return the name of the docker executable or None if docker is not installed. """ global executable if executable is not None: return executable if subuserlib.executablePath.which("docker.io"): # Docker is called docker.io on debian. return "docker.io" if subuserlib.executablePath.which("docker"): return "docker" return None
[docs]def getAndVerifyExecutable(): """ Return the name of the docker executable. Exits and displays a user friendly error message if docker is not setup correctly. """ global executable global verified if executable is not None and verified: return executable executable = getExecutable() if not executable: sys.exit("""Error: Docker is not installed. For installation instructions see <https://www.docker.io/gettingstarted/#h_installation>""") if not os.path.exists("/var/run/docker.pid"): sys.exit("""Error: Docker is not running. You can launch it as root with: # docker -d """) verified = True return executable
[docs]def run(args,cwd=None): """ Run docker with the given command line arguments. Return Docker's exit code. """ return subprocessExtras.call([getAndVerifyExecutable()]+args,cwd)
[docs]def runBackground(args,cwd=None,suppressOutput=True,collectStdout=False,collectStderr=False): """ Run docker with the given command line arguments. Return Docker's pid. """ return subprocessExtras.callBackground([getAndVerifyExecutable()]+args,cwd,suppressOutput=suppressOutput,collectStdout=collectStdout,collectStderr=collectStderr)
[docs]def buildImageTag(tag,hash): tag ='{:-<95.95}{:-<32.32}'.format(tag,hash) def isvalid(c): if c in "-_.": return True return c.isalpha() or c.isdigit() return ''.join([c if isvalid(c) else "-" for c in tag])