def startItUp(): conn = meConnector.createEC2connection() try: strayInstances = False meReservations = conn.get_all_instances() for reservation in meReservations: for instance in reservation.instances: if (instance.state != 'terminated'): strayInstances = True badInstance = instance except Exception, e: meTools.mailIt(email,'Error with get_all_instances()!', 'Exception:\n\n%s' % e)
def createEC2connection(): try: keyQuery = db.GqlQuery("Select * From EC2Credentials") result = keyQuery.fetch(1) meConn = EC2Connection(aws_access_key_id = result[0].public, aws_secret_access_key = result[0].private, is_secure = result[0].is_secure) meConn.SignatureVersion = result[0].SignatureVersion return meConn except Exception, e: meTools.mailIt(email,'Error Connecting to EC2!', 'Exception:\n\n%s' % e) raise
def post(self): instanceID = str(self.request.get('instanceID')) conn = meConnector.createEC2connection() try: meInstances = conn.get_all_instances(instanceID) for reservation in meInstances: for instance in reservation.instances: if instance.state == 'running': meTools.mailIt(email,'Instance Running!','InstanceID: %s is %s' % (instance.id,instance.state)) elif instance.state == 'terminated': meTools.mailIt(email,'Instance Terminated?!','InstanceID: %s is %s' % (instance.id,instance.state)) else: addChkInstanceTask(instanceID) meTools.mailIt(email,'Instance NOT Running!','Trying again in 50 seconds.\nInstanceID: %s is %s' % (instance.id,instance.state)) except Exception, e: meTools.mailIt(email,'Error with get_all_instances()!', 'Exception:\n\n%s' % e)
for reservation in meReservations: for instance in reservation.instances: if (instance.state != 'terminated'): strayInstances = True badInstance = instance except Exception, e: meTools.mailIt(email,'Error with get_all_instances()!', 'Exception:\n\n%s' % e) #raise #Raising exception may cause Cron to retry indefinitely. if not strayInstances: try: config = meSchema.getConfig() meImage = conn.get_image(config[0].AMI_id) # Also add wakeup-time? result = meImage.run( key_name = config[0].keypair_name, placement = config[0].placement, security_groups = config[0].security_groups ) meTools.mailIt(email,'Started new instance up!!!', '%s\n%s' % (result, result.instances[0].id)) except Exception, e: meTools.mailIt(email,'Could Not Start AMI!','Error:\n%s' % e) #raise #Raising exception may cause Cron to retry indefinitely. meTasks.addChkInstanceTask(str(result.instances[0].id)) else: meTools.mailIt(email,'Instances Already Running!','InstanceID: %s is %s' % (badInstance.id,badInstance.state)) email = '*****@*****.**' application = webapp.WSGIApplication([('/starter/startAMI', StartAMI)], debug=True) def main(): run_wsgi_app(application)
def addChkInstanceTask(instanceStr): try: taskqueue.add(url = '/tasks/checkIt', countdown = 50, params = {'instanceID': instanceStr} ) except Exception, e: meTools.mailIt(email,'Problem Adding Task!','Error: %s' % e)