示例#1
0
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
示例#2
0
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