#!/usr/bin/python

import argparse
import os
import os.path
import shutil
import sys
import uuid

CONTAINER = "xenserver/xenserver-build-env"
DOCKER_PATH = "/usr/bin/docker"
SRPMS_MOUNT_ROOT = "/tmp/docker-SRPMS"

def make_mount_dir():
    srpm_mount_dir = os.path.join(SRPMS_MOUNT_ROOT, str(uuid.uuid4()))
    try:
        os.makedirs(srpm_mount_dir)
    except OSError:
        pass
    return srpm_mount_dir

def copy_srpms(srpm_mount_dir, srpms):
    for srpm in srpms:
        srpm_name = os.path.basename(srpm)
        shutil.copyfile(srpm, os.path.join(srpm_mount_dir, srpm_name))

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-b', '--branch', help='XenServer branch name (default trunk)',
                        default='trunk')
    parser.add_argument('-s', '--srpm', action='append',
                        help='SRPMs for which dependencies will be installed')
    parser.add_argument('-d', '--dir', action='append', help='Local dir to mount in the '
                        'image. Will be mounted at /external/<dirname>')
    parser.add_argument('--rm', action='store_true', help='Destroy the container on exit')

    args = parser.parse_args(sys.argv[1:])
    docker_args = [
        "docker", "run", "-e", "XS_BRANCH=%s" % args.branch,
        "-i", "-t", "-u", "builder"
        ]
    if args.rm:
        docker_args += ["--rm=true"]
    # Copy all the RPMs to the mount directory
    if args.srpm:
        srpm_mount_dir = make_mount_dir()
        copy_srpms(srpm_mount_dir, args.srpm)
        docker_args += ["-v", "%s:/mnt/docker-SRPMS" % srpm_mount_dir]
    for localdir in args.dir:
        dirname = os.path.basename(localdir)
        if not os.path.isdir(localdir):
            print "Local directory argument is not a directory!"
            sys.exit(1)
        docker_args += ["-v", "%s:/external/%s" % (localdir, dirname)]

    # exec "docker run"
    docker_args += [CONTAINER, "/usr/local/bin/init-container.sh"]
    print "Launching docker with args %s" % docker_args
    os.execv(DOCKER_PATH, docker_args)

if __name__ == "__main__":
    main()

@@ -1600,16 +1600,37 @@
 nt_dir%5D%0A
+    if args.dir:%0A    
     for 
@@ -1659,16 +1659,20 @@
         
+    
 dirname 
@@ -1708,16 +1708,20 @@
         
+    
 if not o
@@ -1752,24 +1752,28 @@
             
+  
+  
 print %22Local
@@ -1825,16 +1825,20 @@
         
+    
 sys.exit
@@ -1841,16 +1841,20 @@
 exit(1)%0A
+    
         

Handle no mount dirs properly