--- /dev/null
+# -*- coding:utf-8 -*-
+from django.core.files import File
+from celery import task, current_task
+from djcelery.models import TaskState
+from xmlrpclib import Fault
+
+from forge.models import *
+
+import forge.script.Auth as Auth
+import time
+
+# Import class used to create the environment
+from forge.script.request import TransformRawXml
+from forge.script.openvswitch import TransformXml
+
+# Import the settings
+from django.conf import settings
+
+@task()
+def taskInstallEnvironment(env):
+ env.ready = False
+ env.save()
+ #TODO Change directory location
+ curDir = os.getcwd()
+ os.chdir('./ict_education/script/')
+ try:
+ xml = TransformXml(confFile = curDir+env.confFile.url, linkFile = curDir+env.linkFile.url, keyFile = curDir+env.course.mainKey.url)
+ xml.clearConf()
+ xml.setSliceConf()
+ xml.setLinks()
+ xml.setRoutes()
+ xml.setServices()
+ except Exception, why:
+ print why
+ os.chdir(curDir)
+ env.ready = True
+ env.save()
+
+@task()
+def taskDeleteCourse(course):
+ environments = course.environment_set.all()
+ #TODO Change directory location
+ curDir = os.getcwd()
+ os.chdir('./ict_education/script/')
+ for env in environments:
+ try:
+ xml = TransformXml(confFile = curDir+env.confFile.url, linkFile = curDir+env.linkFile.url, keyFile = curDir+env.course.mainKey.url)
+ xml.clearConf()
+ except Exception, why:
+ print why
+ try:
+ rawXml = TransformRawXml(sliceName=course.sliceName)
+ rawXml.deleteSlice()
+ except Fault, why:
+ print "I got an xmlrpc Fault"
+ print why
+ os.chdir(curDir)
+ course.delete()
+
+@task()
+def taskRenewSlice(course):
+ rawXml = TransformRawXml(sliceName=course.sliceName)
+ rawXml.renewSlice()
+
+@task()
+def taskCreateCourse(form):
+ newCourse = Course()
+ newCourse.lab = Lab.objects.get(id=form.cleaned_data['lab'].id)
+ newCourse.ready = False
+ newCourse.sliceName = form.cleaned_data['sliceName']
+ newCourse.save()
+ #TODO Change directory location
+ curDir = os.getcwd()
+ os.chdir('./ict_education/script/')
+ if form.cleaned_data['keyLocation'] == '':
+ keyLocation = None
+ else:
+ keyLocation = form.cleaned_data['keyLocation']
+ if form.cleaned_data['url'] == '':
+ sliceUrl = 'http://onelab.eu'
+ else:
+ sliceUrl = form.cleaned_data['url']
+ if form.cleaned_data['description'] == '':
+ sliceDescription = 'Slice used for educational purpose'
+ else:
+ sliceDescription = form.cleaned_data['url']
+ try:
+ rawXml = TransformRawXml(confFile = settings.MEDIA_ROOT+newCourse.lab.configurationFile.name, linkFile = settings.MEDIA_ROOT+newCourse.lab.linkFile.name, subnet = form.cleaned_data['subnet'], sliceName = form.cleaned_data['sliceName'], nbEnv = form.cleaned_data['nbEnv'], sliceUrl = sliceUrl, sliceDescription = sliceDescription, mainKeyPriv = keyLocation)
+ rawXml.setSlice()
+ newCourse.mainKey.save(rawXml.mainKeyPriv.split('/')[-1], File(open(rawXml.mainKeyPriv)))
+ newCourse.save()
+ i = 0
+ for environment in rawXml.envList:
+ newEnv = Environment()
+ newEnv.ready = False
+ newEnv.course = newCourse
+ newEnv.sshKey.save(rawXml.envKeyPriv[i].split('/')[-1], File(open(rawXml.envKeyPriv[i])))
+ newEnv.confFile.save(rawXml.envConfFile[i].split('/')[-1], File(open(rawXml.envConfFile[i])))
+ newEnv.linkFile.save(rawXml.envLinkFile[i].split('/')[-1], File(open(rawXml.envLinkFile[i])))
+ newEnv.save()
+ i += 1
+ for plSlice in environment:
+ newSlice = Slice()
+ newSlice.sliceName = plSlice.slice_name
+ newSlice.environment = newEnv
+ newSlice.save()
+ for host in plSlice.hosts:
+ newHost = Host()
+ nodeSelected = ''
+ for env in rawXml.nodeList:
+ for node in env:
+ if node['hostname'] == host.url:
+ nodeselected = node
+ break
+ if nodeSelected != '':
+ break
+ newHost.hostname = host.url
+ newHost.pleSlice = newSlice
+ newHost.latitude = nodeSelected['latitude']
+ newHost.longitude = nodeSelected['longitude']
+ newHost.save()
+ for serviceName, port in host.services.services:
+ newService = Service()
+ newService.serviceName = serviceName
+ newService.servicePort = str(port)
+ newService.host = newHost
+ newService.save()
+ for device in host.devices:
+ newInterface = Interface()
+ newInterface.ip = device.ip
+ newInterface.name = device.id_dev
+ newInterface.host = newHost
+ newInterface.save()
+ newEnv.ready = True
+ newEnv.save()
+ os.chdir(curDir)
+ newCourse.ready = True
+ newCourse.save()
+ except Exception, why:
+ print "An error occured deleting the environment"
+ print why
+ rawXml = TransformRawXml(sliceName=newCourse.sliceName)
+ rawXml.deleteSlice()
+ raise Exception('Global Fault')
+ return 0