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())