def pre_save_experiments(sender, instance, using, **kwargs): print('creating cronjob chart') job_id = uuid.uuid1().hex[0:5] release_name = '{}-{}-{}'.format(instance.project.slug, 'cronjob', job_id) is_cron = 1 if instance.schedule == "None" or instance.schedule == "": is_cron = 0 from api.serializers import ProjectSerializer settings_file = ProjectSerializer(instance.project) settings_file = JSONRenderer().render(settings_file.data) settings_file = settings_file.decode('utf-8') settings_file = json.loads(settings_file) settings_file = yaml.dump(settings_file) user_config_file = create_user_settings(instance.username) user_config_file = yaml.dump(json.loads(user_config_file)) parameters = { "release": release_name, "chart": "cronjob", "namespace": settings.NAMESPACE, "project.slug": instance.project.slug, "image": instance.environment.image, "command": '["/bin/bash", "-c", "'+instance.command+'"]', "iscron": str(is_cron), "cronjob.schedule": instance.schedule, "cronjob.port": "8786", "resources.limits.cpu": "500m", "resources.limits.memory": "1Gi", "resources.requests.cpu": "100m", "resources.requests.memory": "256Mi", "resources.gpu.enabled": "false", "settings_file": settings_file, "user_settings_file": user_config_file, } if hasattr(instance, 'options'): del instance.options['command'] del instance.options['environment'] del instance.options['schedule'] parameters.update(instance.options) helmchart = HelmResource(name=release_name, namespace='Default', chart='cronjob', params=parameters, username=instance.username) helmchart.save() instance.helmchart = helmchart
def run(request, user, project): project = Project.objects.filter(Q(slug=project), Q(owner=request.user) | Q(authorized=request.user)).first() if request.method == "POST": uid = uuid.uuid4() name = str(project.slug) + str(uid)[0:7] flavor_slug = request.POST.get('flavor', None) environment_slug = request.POST.get('environment', None) if flavor_slug: flavor = Flavor.objects.filter(slug=flavor_slug).first() else: flavor = Flavor.objects.all().first() if environment_slug: environment = Environment.objects.filter(slug=environment_slug).first() else: environment = Environment.objects.filter.all().first() print("dispatching with {} {}".format(flavor, name)) import base64 if name != '' and flavor is not None: # Default values here, because otherwise an old deployment can stop working # if the deployment configuration files are not compatible with the latest # studio image. ingress_secret_name = 'prod-ingress' try: ingress_secret_name = settings.LABS['ingress']['secretName'] except: pass minio_keys = get_minio_keys(project) decrypted_key = minio_keys['project_key'] decrypted_secret = minio_keys['project_secret'] settings_file = ProjectSerializer(project) settings_file = JSONRenderer().render(settings_file.data) settings_file = settings_file.decode('utf-8') print(settings_file) # settings_file = yaml.load(settings_file, Loader=yaml.FullLoader) settings_file = json.loads(settings_file) settings_file = yaml.dump(settings_file) print(settings_file) # settings_file = json.dumps(json.loads(settings_file)) # settings_file = yaml.dump(settings_file) user_config_file = create_user_settings(user) user_config_file = yaml.dump(json.loads(user_config_file)) prefs = {'labs.resources.requests.cpu': str(flavor.cpu), 'labs.resources.limits.cpu': str(flavor.cpu), 'labs.resources.requests.memory': str(flavor.mem), 'labs.resources.limits.memory': str(flavor.mem), 'labs.resources.requests.gpu': str(flavor.gpu), 'labs.resources.limits.gpu': str(flavor.gpu), 'labs.gpu.enabled': str("true" if flavor.gpu else "false"), 'labs.image': environment.image, 'ingress.secretName': ingress_secret_name, # 'labs.setup': environment.setup, 'minio.access_key': decrypted_key, 'minio.secret_key': decrypted_secret, 'settings_file': settings_file, 'user_settings_file': user_config_file, 'project.slug': project.slug } session = Session.objects.create_session(name=name, project=project, chart='lab', settings=prefs) from .helpers import create_session_resources print("trying to create resources") retval = create_session_resources(request, user, session, prefs, project) if retval: print("saving session!") project.save() session.save() return HttpResponseRedirect( reverse('labs:index', kwargs={'user': request.user, 'project': str(project.slug)})) return HttpResponseRedirect( reverse('labs:index', kwargs={'user': request.user, 'project': str(project.slug)}))