def labView(): labs = [] labs.append(Lab('rmre', '文本去重复工具')) labs.append(Lab('xsspayload', 'xss常用payload')) labs.append(Lab('xsshex', 'xss编码工具')) labs.append(Lab('base64', 'base64编解码工具')) labs.append(Lab('ujscanner', '扫描器web UI')) return render_template("lab.html", labs=labs)
async def get(self, request, id): with db_session: if id == 'all': return self.response_status(200, Lab.select(lambda x: x.active)) if not Lab.exists(id=id): return self.response_status(404) return self.response_status(200, Lab.select(x.id == id and x.active))
async def delete(self, request, id): with db_session: if not Lab.exists(id=id): return self.response_status(404) try: Lab.get_for_update(id=id) Lab[id].set(modified=datetime.now(), active=False) except Exception as e: return self.response_status(500) else: return self.response_status(200, Lab[id])
async def list_containers(name): # hosts = Host.select() if not os.path.exists(lab_path(name)): abort(404) containers = [] show_containers = 'show_containers' in request.args and request.args[ 'show_containers'] == 'True' if show_containers: try: lab = Lab.get(Lab.name == name) containers = lab.list_containers() except peewee.DoesNotExist: pass stats = Messenger.get_stats(name) if stats and 'start_time' in stats: stats['uptime'] = int(time.time() - stats['start_time']) return await render_template('containers_list.html', containers=containers, lab=name, stats=stats, show_containers=show_containers)
async def stop_lab_api(): data = await request.json if data is None or 'name' not in data: return abort(400) name = data.get('name') try: lab = Lab.get(Lab.name == name) except peewee.DoesNotExist: abort(404) try: args = [] if lab.runtime == 'cluster': args.extend((lab.get_host_map(), Host.get_all_configs())) stop_lab(lab_path(name), prefix(name), *args, runtime=lab.runtime, remove=True) lab.delete_instance() msg_cache.delete(name) return 'OK', 200 except FileNotFoundError: return abort(404)
def run(self): try: ips = [] nets = [] for l in self.instance.links: ips.append(l['ip']) net = NetworkNode.fetchone(gid=l['network']['gid'], slice_id=self.lab_slice.id) nets.append(net) instance = self.instance public_ip, attrs = self.openstack.create_instance( instance.name, nets, ips, instance.configurations, self.sec_group_id, instance.image, instance.flavor) instance.update(status='active', public_ip=public_ip, cloud_attrs=attrs) except Exception as ex: error_type = 'Create instances error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=self.lab_id) lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception(error_type + str(error_msgs))
def create_networks(cloudconfig, lab_id, lab_slice, topo): try: openstack = Openstack(cloudconfig.detail['openstackAuthURL'], cloudconfig.detail['openstackProject'], cloudconfig.detail['openstackUser'], cloudconfig.detail['openstackPassword']) threads = [] for n in topo['networks']: new_net = NetworkNode.insert(name=n['name'], cidr=n['cidr'], status='deploying', x=n['x'], y=n['y'], slice_id=lab_slice.id, gid=n['gid']) t = CreateNetThread(openstack, new_net) t.start() threads.append(t) for t in threads: t.join() except Exception as ex: error_type = 'Create networks error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
def set_lab_active(lab_id, last_jobs_ids): if len(last_jobs_ids) > 0: timeout = 20 while True: all_completed = True for id in last_jobs_ids: job = queue.fetch_job(id) if job.get_status() != JobStatus.FINISHED: all_completed = False if all_completed: break time.sleep(5) timeout = timeout - 5 if timeout == 0: break lab = Lab.fetchone(id=lab_id) if timeout == 0: error_type = 'Time out error when trying to set lab active' error_msgs = [error_type] lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) else: lab.update(status='active', error_msgs=[])
def list_assignments(self): course = Course(self.api_client.client, self.args.course) labs = [hw["name"] for hw in Lab.list(course)] if len(labs) == 0: print("Course has no labs.") else: print_list(labs)
def get(self, id): lab = Lab.fetchone(id=id) if lab is None: return jsonify(message="Lab doesn't existed"), 410 if lab.status == 'inactive': return jsonify({ 'id': lab.id, 'name': lab.name, 'status': lab.status }) else: slices = [] for sl in Slice.fetchall(lab_id=lab.id): user = User.fetchone(id=sl.user_id) slices.append({ 'id': sl.id, 'name': sl.name, 'status': sl.status, 'username': user.fullname }) return jsonify({ 'id': lab.id, 'name': lab.name, 'status': lab.status, 'slices': slices, 'errors': lab.error_msgs })
def get(self, *args, **kwargs): user_id = int(kwargs['user_id']) name = kwargs['name'].lower() request_type = kwargs['type'].lower() last_name = kwargs['last_name'].lower() local_user = User.get_by_id(user_id) user = self.user if request_type == 'u': if local_user and local_user.name.lower( ) == name and local_user.key.id() == user_id: query = Lab.query() if local_user.key.id() == user.key.id(): labs = query.filter( Lab.collaborators.IN([local_user.email_address ])).fetch() else: labs = query.filter( Lab.collaborators.IN( [local_user.email_address, user.email_address]) and Lab.private == False).fetch() params = {'labs': labs, 'local_user': local_user} self.render_template('profile', params) else: self.display_message( 'The user who\'s profile you attempted to view does not exist. <a href="/u/{0}.{1}/{2}">Go your profile.</a>' .format(user.name, user.last_name, user.key.id())) else: self.redirect(self.uri_for('home'))
def delete_lab(lab_id, last_jobs_ids): if len(last_jobs_ids) > 0: timeout = 30 while True: all_completed = True for id in last_jobs_ids: job = queue.fetch_job(id) print(job.get_status()) if job.get_status() != JobStatus.FINISHED: all_completed = False if all_completed: break time.sleep(5) timeout = timeout - 5 if timeout == 0: break lab = Lab.fetchone(id=lab_id) if timeout == 0: error_type = 'Time out error when trying to delete lab' error_msgs = [error_type] lab.update(status='destroyfailed', error_msgs=lab.error_msgs + error_msgs) else: lab.delete()
def update_allowed_address_pairs(cloudconfig, lab_id, lab_slice, topo): try: openstack = Openstack(cloudconfig.detail['openstackAuthURL'], cloudconfig.detail['openstackProject'], cloudconfig.detail['openstackUser'], cloudconfig.detail['openstackPassword']) mac_regex = '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' ip_cidr_regex = '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4]' \ '[0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-' \ 'f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-' \ '5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5' \ ']|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}((' \ '(:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0' \ '-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]' \ '{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0' \ '-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d' \ '|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1' \ ',4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d' \ '|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1' \ '\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(\/[0-9]{1,2})*$' for link in topo['links']: address_pairs = [] network = NetworkNode.fetchone(gid=link['network']['gid'], slice_id=lab_slice.id) if link['target']['type'].lower() == 'instance': device = Instance.fetchone(gid=link['target']['gid'], slice_id=lab_slice.id) elif link['target']['type'].lower() == 'router': device = Router.fetchone(gid=link['target']['gid'], slice_id=lab_slice.id) else: continue for raw_address_pair in link.get('allowedAddressPairs', []): mac_address, ip_address, _ = (raw_address_pair + ',,').split( ',', 2) if ip_address.strip() == '': ip_address = mac_address mac_address = '' if (mac_address == '' or re.match( mac_regex, mac_address.strip())) and re.match( ip_cidr_regex, ip_address.strip()): address_pair = {'ip_address': ip_address} if mac_address != '': address_pair['mac_address'] = mac_address address_pairs.append(address_pair) if address_pairs: openstack.update_allowed_address_pairs( network, device.cloud_attrs['id'], address_pairs) except Exception as ex: error_type = 'Update allowed address pairs error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
def post(self): name = self.request.get('name') owner = self.request.get('owner') collaborators = self.request.get('emails') + ',' + owner private = self.request.get('private') if private.lower() == 'true': private = True else: private = False lab = Lab(name = name, owner = owner, private = private, collaborators = collaborators.split(",")) lab.put() time.sleep(0.1) self.redirect(self.uri_for('home'))
def post(self): lab_id = int(self.request.get('id')) lab = Lab.get_by_id(lab_id) if lab: lab.key.delete() time.sleep(0.1) self.redirect(self.uri_for('home')) else: self.display_message('There is no lab by this id.')
def post(self): name = request.get_json()['name'] description = request.get_json()['description'] scenario_id = request.get_json()['scenarioId'] new_lab = Lab.insert(name=name, description=description, scenario_id=scenario_id, owner_id=g.user['id'], status='inactive') return jsonify(id=new_lab.id)
async def post(self, request): req = request.form try: with db_session: if Lab.exists(email=req.get('email')): return self.response_status(409) Lab(**self.not_null_data( id=uuid4().hex, name=req.get('name'), email=req.get('email'), web=req.get('web'), phone=req.get('phone'), department=req.get('department'), city=req.get('city'), address=req.get('address'), fertilizers=[], )) except Exception as e: raise e return self.response_status(201)
def post(self): name = request.get_json()['name'] description = request.get_json()['description'] scenario_id = request.get_json()['scenarioId'] preassessment_id = request.get_json()['preassessmentId'] postassessment_id = request.get_json()['postassessmentId'] allowed_attempts = request.get_json()['allowedAttempts'] new_lab = Lab.insert(name=name, description=description, scenario_id=scenario_id, preassessment_id=preassessment_id, postassessment_id=postassessment_id, allowed_attempts=allowed_attempts, owner_id=g.user['id'], status='inactive') return jsonify(id=new_lab.id)
def destroy(self, id): lab = Lab.fetchone(id=id) lab.update(status='destroying') cloudconfig = CloudConfig.fetchone(lab_id=id) if cloudconfig is None: """No cloud config has been set. Just delete the lab instance""" lab.delete() return jsonify(message='ok') if cloudconfig.provider == 'Openstack': return _destroy_openstack(id, cloudconfig)
def index(self): """Get labs as a owner""" labs = Lab.fetchall(owner_id=g.user['id']) ret = [] for l in labs: ret.append({ 'id': l.id, 'name': l.name, 'description': l.description, 'status': l.status, 'slices': len(Slice.fetchall(lab_id=l.id)) }) return jsonify(sorted(ret, key=lambda i: i['id'], reverse=True))
def run(self): try: if self.router.status == 'active': self.router.update(status='destroying') self.openstack.delete_instance(self.router.cloud_attrs['id']) self.router.delete() except Exception as ex: error_type = 'Delete routers error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=self.lab_id) lab.update(status='destroyfailed', error_msgs=lab.error_msgs + error_msgs)
def set_slice_active(lab_id, lab_slice): try: lab_slice.update(status='active') except Exception as ex: error_type = 'Set slice active error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
async def patch(self, request, id): req = request.form with db_session: if not Lab.exists(id=id): return self.response_status(404) if req.get('email') and Lab.exists(email=req.get('email')): return self.response_status(409) try: Lab.get_for_update(id=id) changes = self.not_null_data( name=req.get('name'), email=req.get('email'), web=req.get('web'), phone=req.get('phone'), department=req.get('department'), city=req.get('city'), address=req.get('address'), active=req.get('active'), ) Lab[id].set(**changes) return self.response_status(200, changes) except Exception as e: return self.response_status(202)
def create_routers(cloudconfig, lab_id, lab_slice, topo, create_sec_group_job_id): try: openstack = Openstack(cloudconfig.detail['openstackAuthURL'], cloudconfig.detail['openstackProject'], cloudconfig.detail['openstackUser'], cloudconfig.detail['openstackPassword']) sec_group_id = queue.fetch_job(create_sec_group_job_id).result routers = topo['routers'] for s in routers: links = _extract_links(s, topo) configurations, password = _extract_configurations( lab_id, lab_slice, s, topo) Router.insert(name=s['name'], status='deploying', x=s['x'], y=s['y'], gid=s['gid'], slice_id=lab_slice.id, image=s['image'], flavor=s['flavor'], links=links, configurations=configurations, password=password) # Actually deployment threads = [] for router in Router.fetchall(slice_id=lab_slice.id): t = CreateRouterThread(openstack, lab_id, router, lab_slice, sec_group_id) t.start() threads.append(t) for t in threads: t.join() except Exception as ex: error_type = 'Create routers error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='deployfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
def get(self, *args, **kwargs): lab_id = kwargs['lab_id'] lab = Lab.get_by_id(int(lab_id)) if self.user.email_address in lab.collaborators: if lab: params = {'lab': lab} lab.put() self.render_template('lab', params) else: params = {'lab_id': lab_id} self.display_message( 'There is no such lab registered under your name. <a href="/new_lab">Create A New Lab</a>' ) else: self.redirect(self.uri_for('home'))
async def get_lab_containers(): name = request.args.get('name') if name is None: return abort(400) if not os.path.exists(lab_path(name)): abort(404) try: lab = Lab.get(Lab.name == name) containers = lab.list_containers() except peewee.DoesNotExist: containers = [] prefix_len = len(prefix(name)) return jsonify({c.name[prefix_len:]: c.short_id for c in containers})
def get(self, *args, **kwargs): lab_id = kwargs['lab_id'] lab = Lab.get_by_id(int(lab_id)) if self.user.email_address in lab.collaborators: if lab: params = { 'lab': lab } lab.put() self.render_template('lab', params) else: params = { 'lab_id': lab_id } self.display_message('There is no such lab registered under your name. <a href="/new_lab">Create A New Lab</a>') else: self.redirect(self.uri_for('home'))
def delete_sec_group(cloudconfig: CloudConfig, lab_id, lab_slice: Slice): try: openstack = Openstack(cloudconfig.detail['openstackAuthURL'], cloudconfig.detail['openstackProject'], cloudconfig.detail['openstackUser'], cloudconfig.detail['openstackPassword']) if lab_slice.cloud_attrs.get('sec_group_id') is not None: openstack.delete_security_group(lab_slice.name) except Exception as ex: error_type = 'Delete security group error' error_msgs = [error_type + ': ' + str(ex)] lab = Lab.fetchone(id=lab_id) lab.update(status='destroyfailed', error_msgs=lab.error_msgs + error_msgs) raise Exception( error_type ) # Raise exception to not execute the next job in the dependency link
def index(self): """ List ONLY slices that a user has been added to""" with Select(Slice, 'user_id = %s') as select: select.execute((g.user['id'], )) slices = select.fetchall() ret = [] for sl in slices: lab = Lab.fetchone(id=sl.lab_id) ret.append({ 'id': sl.id, 'status': sl.status, 'lab': { 'name': lab.name, 'description': lab.description, } }) return jsonify(sorted(ret, key=lambda i: i['id'], reverse=True))
def load_order(): tests = ['ldl'] for t in tests: for f in glob.glob(os.path.join(data_dir, '{}*.csv'.format(t))): df = pd.read_csv(f) for ix, row in df.iterrows(): order = session.query(Order).filter( Order.order_id == row['orderid']).first() if order: print(order.order_id) test = session.query(Test).filter( Test.test_code == row['testid']).first() orderDateTime = datetime.strptime( '{} {}'.format(row['orderdate'], row['ordertime']), '%m/%d/%Y %I:%M %p') recvDateTime = orderDateTime + timedelta( minutes=randint(10, 50)) reportDateTime = recvDateTime + timedelta( minutes=randint(10, 50)) lab = Lab( lab_id=row['labid'], test_id=test.test_code, recv_date=recvDateTime.date(), recv_time=recvDateTime.time(), report_date=reportDateTime.date(), report_time=reportDateTime.time(), results=str(row['results']), ) if not order: order = Order( order_id=row['orderid'], orderdate=parse_date(row['orderdate']), ordertime=parse_time(row['ordertime']), doctor=row['doctor'], ) order.labs.append(lab) session.add(lab) session.add(order) session.commit()
def deploy(self, id): cloudconfig_id = request.get_json()['cloudConfigId'] cloudconfig = CloudConfig.fetchone(id=cloudconfig_id) users = request.get_json()['users'] lab = Lab.fetchone(id=id) lab.update(status='deploying') """Chances are you are redeploying a lab, whose slices are already created""" slices = Slice.fetchall(lab_id=lab.id) """Otherwise, create slices for the lab""" if len(slices) == 0: for index, user in enumerate(users): new_slice = Slice.insert(lab_id=lab.id, status='deploying', user_id=user['id'], name=lab.name + ' / slice_' + str(index), cloud_attrs={}) slices.append(new_slice) scenario = Scenario.fetchone(id=lab.scenario_id) if cloudconfig.provider == 'Openstack': return _deploy_openstack(id, cloudconfig, slices, scenario)
def get(self, *args, **kwargs): user_id = int(kwargs['user_id']) name = kwargs['name'].lower() request_type = kwargs['type'].lower() last_name = kwargs['last_name'].lower() local_user = User.get_by_id(user_id) user = self.user if request_type == 'u': if local_user and local_user.name.lower() == name and local_user.key.id() == user_id: query = Lab.query() if local_user.key.id() == user.key.id(): labs = query.filter(Lab.collaborators.IN([local_user.email_address])).fetch() else: labs = query.filter(Lab.collaborators.IN([local_user.email_address, user.email_address]) and Lab.private == False).fetch() params = { 'labs': labs, 'local_user': local_user } self.render_template('profile', params) else: self.display_message('The user who\'s profile you attempted to view does not exist. <a href="/u/{0}.{1}/{2}">Go your profile.</a>'.format(user.name, user.last_name, user.key.id())) else: self.redirect(self.uri_for('home'))
def labadmin(request): try: if request.user.get_profile().utype < 2: return HttpResponseForbidden() except: return HttpResponseForbidden() pinameAdmin = request.user.username form = UeditorModelForm(request.POST) coverselect = Cover.objects.filter(username=pinameAdmin) articleselect = Article.objects.filter(username=pinameAdmin) try: labobj = Lab.objects.get(pi=pinameAdmin) except: labobj = Lab(pi=pinameAdmin) labobj.save() if 'cover' in request.FILES: img = request.FILES['cover'] #newimg = Image.open(img) #cover = newimg.thumbnail((128,128),Image.ANTIALIAS) if coverselect: coverobj = Cover.objects.get(username=pinameAdmin) coverobj.coverimg = img coverobj.save() else: coverobj = Cover(username=pinameAdmin,coverimg=img) coverobj.save() labobj.cover_set.add(coverobj) labobj.save() if 'content' in request.POST: text = request.POST['content'] #form = UeditorModelForm(request.POST) #text = form.cd['content'] if articleselect: articleobj = Article.objects.get(username=pinameAdmin) #form = UeditorModelForm(instance=articleobj) articleobj.content = text articleobj.save() return render_to_response("lab/labadmin.html", locals(), context_instance=RequestContext(request)) else: articleobj = Article(username=pinameAdmin,content=text) articleobj.save() labobj.article_set.add(articleobj) labobj.save() return render_to_response("lab/labadmin.html", locals(), context_instance=RequestContext(request)) if 'author' in request.POST: authorraw = request.POST['author'] paperraw = request.POST['paper'] urlraw = request.POST['url'] cellraw = request.POST['cell'] pmidraw = request.POST['pmid'] if 'id' in request.POST: idraw = request.POST['id'] pubobj = Publication.objects.get(id=idraw) pubobj.author = authorraw pubobj.paper = paperraw pubobj.url = urlraw pubobj.cell = cellraw pubobj.pmid = pmidraw pubobj.save() else: pubobj = Publication(username=pinameAdmin,author=authorraw,paper=paperraw,url=urlraw,cell=cellraw,pmid=pmidraw) pubobj.save() labobj.publication_set.add(pubobj) labobj.save() if 'album' in request.FILES: photoraw = request.FILES['album'] albumobj = Album(username=pinameAdmin,photo=photoraw) albumobj.save() labobj.album_set.add(albumobj) labobj.save() if coverselect: covertarget = Cover.objects.get(username=pinameAdmin) else: covertarget = 0 if articleselect: articletarget = Article.objects.get(username=pinameAdmin) else: articletarget = 0 pubtarget = Publication.objects.filter(username__contains=pinameAdmin) labobj = Lab.objects.get(pi=pinameAdmin) membertarget = labobj.labrelated.all() albumtarget = Album.objects.filter(username__contains=pinameAdmin) return render_to_response("lab/labadmin.html", locals(), context_instance=RequestContext(request))
def post(self): #get data from form. lab_name = self.request.get('lab-name') project_id = self.request.get('project-id') lab_zone = self.request.get('lab-zone') instance_image = self.request.get('instance-image') machine_type = self.request.get('machine-type') number_students = int(self.request.get('total-students')) #get credentials stored in datastore user_id = users.get_current_user().user_id() credentials = oauth2client.StorageByKeyName( oauth2client.CredentialsModel, user_id, 'credentials').get() #configure project object gce_project = gce.GceProject(credentials, project_id=project_id, zone_name=lab_zone) #create lab entity in datastore lab = Lab(name=lab_name, project_id=project_id, lab_zone=lab_zone, machine_type=machine_type, instance_image=instance_image) lab.put() #create instance objects instances = [] for n in range(number_students): # set the username to the name of the instance username = '******' % (lab_name, n) pass_phrase = security.generate_random_string(length=8) if not memcache.add(username, pass_phrase): logging.error('Failed to set memcache') metadata_items = [ { 'key': 'user', 'value': username }, { 'key': 'pass', 'value': pass_phrase }, { 'key': 'startup-script-url', 'value': 'gs://startup-scripts-compute/startup.sh' } ] instance = Instance(name="%s-%s" % (lab_name, n), lab=lab.key, metadata=metadata_items, desired_state="RUNNING", request_timestamp=datetime.now()) instance.put() instances.append(instance) start_instances(gce_project, lab, instances) self.redirect('/lab/%s' % lab.key.id())
def InitialData(request): model = Lab(name = "Test Name", description = "Test Description", address = "Test Address") model.save() lab_id = model.id model = Experimenter(labkey = Lab.objects.get(pk = lab_id), name = "Test Name", description = "Test Description") model.save() experimenter_id = model.id model = Strain(name = "Test Name", gene = "Test Gene", genotype = "Test Genotype", allele = "Test Allele", chromosome = "Test Chomosome", simulated = "Y") model.save() strain_id = model.id model = Worm(strainkey = Strain.objects.get(pk = strain_id), name = "Test Name", sex = "Test Sex", generationssincethawing = 3, habituation = "Test Habituation") model.save() worm_id = model.id model = Wormlist(wormkey = Worm.objects.get(pk = worm_id), name = "Test Name") model.save() wormlist_id = model.id model = Plate(wormlistkey = Wormlist.objects.get(pk = wormlist_id), experimenterkey = Experimenter.objects.get(pk = experimenter_id), name = "Test Name", sampletype = "Test Type", copyright = "Test Copyright", vulvaorientation = "Test", annotation = "Test Annotation", chemicals = "Test Chemicals", food = "Test Food", illumination = "Test Illumination", temperature = 10, tracker = "Test Tracker", agarside = "Test Agar Side", gasconcentration = "Test Gas Concentration") model.save() plate_id = model.id return HttpResponse(plate_id)