summaryrefslogtreecommitdiff
path: root/tasks.py
diff options
context:
space:
mode:
authorPrabhu Ramachandran2017-11-09 17:26:46 +0530
committerGitHub2017-11-09 17:26:46 +0530
commitcfcb2ed39c724639fe17338e29e327d08ae641b2 (patch)
tree17bca625745b11d6152d9db1e9ebb49646d27d04 /tasks.py
parente65b605e59c1384ad9607c99484107929248f220 (diff)
parent91de91014b24412f9ec5fe246235c38a00a778ec (diff)
downloadonline_test-cfcb2ed39c724639fe17338e29e327d08ae641b2.tar.gz
online_test-cfcb2ed39c724639fe17338e29e327d08ae641b2.tar.bz2
online_test-cfcb2ed39c724639fe17338e29e327d08ae641b2.zip
Merge pull request #379 from ankitjavalkar/better-installer-single-mount
Installation and Quickstart script using PyInvoke
Diffstat (limited to 'tasks.py')
-rw-r--r--tasks.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/tasks.py b/tasks.py
new file mode 100644
index 0000000..eabf8fb
--- /dev/null
+++ b/tasks.py
@@ -0,0 +1,95 @@
+import invoke
+from invoke import task
+import os
+from yaksh.settings import SERVER_POOL_PORT
+
+SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
+TARGET_CONTAINER_NAME = 'yaksh_code_server'
+SRC_IMAGE_NAME = 'fossee/yaksh_codeserver'
+
+def create_dir(path):
+ if not os.path.exists(path):
+ os.makedirs(path)
+
+@task
+def setupdb(ctx):
+ print("** Setting up & migrating database **")
+ ctx.run("python manage.py makemigrations")
+ ctx.run("python manage.py migrate")
+ ctx.run("python manage.py loaddata demo_fixtures.json")
+
+@task(setupdb)
+def serve(ctx):
+ print("** Running the Django web server. Press Ctrl-C to Exit **")
+ ctx.run("python manage.py runserver")
+
+@task
+def clean(ctx):
+ print("** Discarding database **")
+ ctx.run("rm -rf {0}".format(os.path.join(SCRIPT_DIR, 'db.sqlite3')))
+
+@task
+def getimage(ctx, image=SRC_IMAGE_NAME):
+ try:
+ result = ctx.run("sudo docker inspect {0}".format(image), hide=True)
+ except invoke.exceptions.Failure:
+ print("The docker image {0} does not exist locally".format(image))
+ print("\n** Pulling latest image <{0}> from docker hub **".format(image))
+ ctx.run("sudo docker pull {0}".format(image))
+
+@task
+def start(ctx, ports=SERVER_POOL_PORT, image=SRC_IMAGE_NAME, unsafe=False,
+ version=3):
+ if unsafe:
+ with ctx.cd(SCRIPT_DIR):
+ print("** Initializing local code server **")
+ ctx.run("sudo python{0} -m yaksh.code_server".format(
+ version
+ )
+ )
+ else:
+ cmd_params = {'ports': ports,
+ 'image': SRC_IMAGE_NAME,
+ 'name': TARGET_CONTAINER_NAME,
+ 'vol_mount': os.path.join(SCRIPT_DIR, 'yaksh_data'),
+ 'command': 'sh {0}'.format(
+ os.path.join(SCRIPT_DIR,
+ 'yaksh_data', 'yaksh', 'scripts', 'yaksh_script.sh')
+ )
+ }
+
+ getimage(ctx, image=SRC_IMAGE_NAME)
+
+ print("** Preparing code server **")
+ create_dir(os.path.join(SCRIPT_DIR, 'yaksh_data', 'data'))
+ create_dir(os.path.join(SCRIPT_DIR, 'yaksh_data', 'output'))
+
+ ctx.run('cp -r {0} {1}'.format(
+ os.path.join(SCRIPT_DIR, 'yaksh'),
+ os.path.join(SCRIPT_DIR, 'yaksh_data')
+ )
+ )
+ ctx.run('cp {0} {1}'.format(
+ os.path.join(SCRIPT_DIR, 'requirements', 'requirements-codeserver.txt'),
+ os.path.join(SCRIPT_DIR, 'yaksh_data')
+ )
+ )
+
+ print("** Initializing code server within docker container **")
+ ctx.run(
+ "sudo docker run \
+ -dp {ports}:{ports} --name={name} \
+ -v {vol_mount}:{vol_mount} \
+ -w {vol_mount} \
+ {image} {command}".format(**cmd_params)
+ )
+
+@task
+def stop(ctx, container=TARGET_CONTAINER_NAME, hide=True):
+ result = ctx.run("sudo docker ps -q --filter='name={0}'".format(container))
+ if result.stdout:
+ print ("** Discarding the docker container <{0}>".format(container))
+ ctx.run("sudo docker stop {0}".format(container))
+ ctx.run("sudo docker rm {0}".format(container))
+ else:
+ print("** Docker container <{0}> not found **".format(container))