def generate_run_routine(config, with_config=None, src_dirs=None, return_config=False): try: config, d_info = __parse_ports(config) if d_info is None: print "No docker info to inspect" return False r = "%(DOCKER_EXE)s run --name %(IMAGE_NAME)s -dPt %(IMAGE_NAME)s:latest" routine = [ "DIR=$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )", "%(DOCKER_EXE)s ps -a | grep %(IMAGE_NAME)s", "if ([ $? -eq 0 ]); then", "\techo \"Stopping current instance first.\"", "\t$DIR/stop.sh", "fi", "if ([ $# -eq 0 ]); then", "\t%s ./run.sh" % r, "\techo \"%(IMAGE_NAME)s has started.\"", "\techo \"ip address: %(DOCKER_IP)s\"", "\techo \"port mappings: %(PORT_BINDINGS_STR)s\"", "else", "\tif [[ $1 == \"shell\" ]]; then" ] if 'SSH_PRIV_KEY' not in config.keys() or 'SSH_PORT_MAPPED' not in config.keys(): routine.append(("\t\t%s /bin/bash" % r).replace("-dPt", "-iPt")) else: ssh_routine = [ "\t\t%s ./run.sh" % r, "\t\tsleep 5", "\t\tssh -o IdentitiesOnly=yes -i %(SSH_PRIV_KEY)s -p %(SSH_PORT_MAPPED)d %(USER)s@%(DOCKER_IP)s" ] routine += ssh_routine routine += [ "\telif [[ $1 == \"update\" ]]; then", "\t\t$DIR/update.sh", "\t\texit", "\tfi", "fi" ] save_config(config, with_config=with_config) if generate_update_routine(config, src_dirs=src_dirs, with_config=with_config): res = build_routine([r % config for r in routine], to_file=os.path.join(BASE_DIR if with_config is None else os.path.dirname(with_config), "run.sh")) if return_config: return res, config return res except Exception as e: print e, type(e) return False
def generate_init_routine(config, with_config=None): if 'DOCKER_EXE' not in config.keys(): config['DOCKER_EXE'] = get_docker_exe() if config['DOCKER_EXE'] is None: print "no docker exe." return False try: routine = [ "%(DOCKER_EXE)s build -t %(IMAGE_NAME)s:init .", "%(DOCKER_EXE)s run --name %(IMAGE_NAME)s -iPt %(IMAGE_NAME)s:init", "echo \"Commiting image. This might take awhile...\"", "%(DOCKER_EXE)s commit %(IMAGE_NAME)s %(IMAGE_NAME)s:init", "%(DOCKER_EXE)s stop %(IMAGE_NAME)s", "%(DOCKER_EXE)s rm %(IMAGE_NAME)s", "%(DOCKER_EXE)s rmi $(%(DOCKER_EXE)s images -q -f dangling=true)" ] if 'SSH_PUB_KEY' in config.keys(): ssh_routine = [ "mkdir src/.ssh", "cp %(SSH_PUB_KEY)s src/.ssh/authorized_keys" ] routine = ssh_routine + routine if 'USER_PWD' in config.keys(): del config['USER_PWD'] else: print "NO USER PWD" save_config(config, with_config=with_config) return build_routine([r % config for r in routine]) except Exception as e: print e, type(e) return False