def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') image_manifest = self.request.get('image_manifest') image_id = self.request.get('image_id') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') conn_region, regionname = login(username) try: # Instanz(en) anlegen reservation = conn_region.run_instances(image_id) except EC2ResponseError: # Wenn es nicht geklappt hat fehlermeldung = "78" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat fehlermeldung = "77" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu löschenden Volumes holen volume = self.request.get('volume') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Volume löschen conn_region.delete_volume(volume) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "19" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Wenn es nicht klappt... # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "22" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Die ID der zu löschenden Instanz holen key = self.request.get('key') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Schlüsselpaar löschen conn_region.delete_key_pair(key) except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "104" self.redirect('/schluessel?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/schluessel?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "103" self.redirect('/schluessel?mobile='+str(mobile)+'&message='+fehlermeldung)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') image_manifest = self.request.get('image_manifest') image_id = self.request.get('image_id') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') conn_region, regionname = login(username) try: # Instanz(en) anlegen reservation = conn_region.run_instances(image_id) except EC2ResponseError: # Wenn es nicht geklappt hat fehlermeldung = "78" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat fehlermeldung = "77" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Die ID der neuzustartenden Instanz holen id = self.request.get('id') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) # Es muss eine Liste mit den IDs übergeben werden instance_ids = [id] try: # Instanz beenden conn_region.reboot_instances(instance_ids) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "80" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "79" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Eine Elastic IP-Adresse bekommen conn_region.allocate_address() except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "6" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "7" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung)
def post(self): #self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" instance_type = self.request.get('instance_type') number_instances = self.request.get('number_instances') keys_liste = self.request.get('keys_liste') image_manifest = self.request.get('image_manifest') image_id = self.request.get('image_id') number_instances_max = self.request.get('number_instances_max') number_instances_min = self.request.get('number_instances_min') gruppen_liste = self.request.get('gruppen_liste') aki_id = self.request.get('aki_id') ari_id = self.request.get('ari_id') zonen_auswahl = self.request.get('zonen_auswahl') gruppen_liste_liste = [] gruppen_liste_liste.append(gruppen_liste) if not aki_id: aki_id = None if not ari_id: ari_id = None if not zonen_auswahl: zonen_auswahl = None # Wenn im Feld Instanzen (max) ein kleinerer Wert eingegebenen wurde als im Feld # Instanzen (min), dann macht das keinen Sinn. # In diesem Fall ist dann Instanzen (max) = Instanzen (min) if number_instances_max < number_instances_min: number_instances_max = number_instances_min # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') conn_region, regionname = login(username) try: # Instanz(en) anlegen reservation = conn_region.run_instances(image_id, min_count=number_instances_min, max_count=number_instances_max, key_name=keys_liste, security_groups=gruppen_liste_liste, instance_type=instance_type, placement=zonen_auswahl, kernel_id=aki_id, ramdisk_id=ari_id) except EC2ResponseError, fehlernachricht: # Zum Testen: self.response.out.write(fehlernachricht) # Wenn es nicht geklappt hat fehlermeldung = "78" #So geht es auch und dann wird nur der hintere Teil der Fehlermeldung ausgegeben. #self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung+'&fehlernachricht='+str(fehlernachricht.endElement)) self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung+'&fehlernachricht='+str(fehlernachricht))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu löschenden Volumes holen volume = self.request.get('volume') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Volume löschen conn_region.delete_volume(volume) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "19" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Wenn es nicht klappt... # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "22" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Zu löschende (release) Elastic IP-Adresse holen address = self.request.get('address') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Die Elastic IP-Adresse freigeben (löschen) conn_region.release_address(address) except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "4" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "5" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu lösenden Volumes holen # Name of the volume that has to be detached volume = self.request.get('volume') # Den Usernamen erfahren # Get the username username = users.get_current_user() conn_region, regionname = login(username) try: # Volume entkoppeln conn_region.detach_volume(volume) except EC2ResponseError: # Wenn es nicht klappt... # If it didn't work to detach the volume... fehlermeldung = "20" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Wenn es nicht klappt... # If it didn't work to detach the volume... # Diese Exception hilft gegen diese beiden Fehler: # This exception helps against this two errors: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... # If it worked... fehlermeldung = "24" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name Volume holen, von dem ein Snapshot erzeugt werden soll volume = self.request.get('volume') # Die Beschreibung des Snapshots holen beschreibung = self.request.get('beschreibung') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) # Wenn die Variable "beschreibung" nicht gesetzt wurde, # dann wird sie als leere Variable erzeugt if not beschreibung: beschreibung = '' try: # Snapshot erzeugen conn_region.create_snapshot(volume, description=beschreibung) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "14" self.redirect('/snapshots?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/snapshots?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "13" self.redirect('/snapshots?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Namen der zu löschenden Gruppe holen gruppe = self.request.get('gruppe') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Security Gruppe löschen conn_region.delete_security_group(gruppe) except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "49" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "48" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Namen der zu löschenden Gruppe holen gruppe = self.request.get('gruppe') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Security Gruppe löschen conn_region.delete_security_group(gruppe) except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "49" self.redirect('/securitygroups?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/securitygroups?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "48" self.redirect('/securitygroups?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def post(self): #self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" groesse = self.request.get('groesse') GB_oder_TB = self.request.get('GB_oder_TB') zone = self.request.get('zone') snapshot = self.request.get('snapshot') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) if groesse == "": # Testen ob die Größe des neuen Volumes angegeben wurde # Wenn keine Größe angegeben wurde, kann kein Volume angelegt werden #fehlermeldung = "Sie haben keine Größe angegeben" fehlermeldung = "16" self.redirect('/volumeaussnapshoterzeugen?mobile='+str(mobile)+'&message='+fehlermeldung+'&snapshot='+snapshot) elif groesse.isdigit() == False: # Testen ob die Größe eine Zahl ist # Wenn nicht ausschließlich eine Zahl eingegeben wurde sondern evtl. Buchstaben oder Sonderzeichen #fehlermeldung = "Sie haben keine Zahl angegeben" fehlermeldung = "17" self.redirect('/volumeaussnapshoterzeugen?mobile='+str(mobile)+'&message='+fehlermeldung+'&snapshot='+snapshot) elif GB_oder_TB == "TB" and int(groesse) > 1: # Testen ob TB als Maßeinheit angegeben wurde und die Größe > 1 TB ist # fehlermeldung = "Amazon EBS ermöglicht die Erstellung von Datenträgern # mit einer Speicherkapazität von 1 GB bis 1 TB" fehlermeldung = "25" self.redirect('/volumeaussnapshoterzeugen?mobile='+str(mobile)+'&message='+fehlermeldung+'&snapshot='+snapshot) else: # Die Eingabe in Integer umwandeln groesse = int(groesse) if GB_oder_TB == "TB": # Testen ob GB oder TB als Maßeinheit angegeben wurde # Bei TB wird die Zahl mit 1000 multipliziert groesse *= 1000 # Volume erzeugen try: # Volume erzeugen neues_volume = conn_region.create_volume(groesse, zone, snapshot) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "18" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung+'&snapshot='+snapshot) except DownloadError: # Wenn es nicht klappt... # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung+'&snapshot='+snapshot) else: # Wenn es geklappt hat... fehlermeldung = "15" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung+'&snapshot='+snapshot)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # self.response.out.write('posted!') # Zu verknüpfende Elastic IP-Adresse holen address = self.request.get('address') # Zu verknüpfende Instanz holen instanzen = self.request.get('instanzen') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Die Elastic IP-Adresse verknüpfen conn_region.associate_address(instanzen, address) except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "1" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "0" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Die ID der neuzustartenden Instanz holen id = self.request.get('id') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) # Es muss eine Liste mit den IDs übergeben werden instance_ids = [id] try: # Instanz beenden conn_region.reboot_instances(instance_ids) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "80" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "79" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu löschenden Load Balancers holen name = self.request.get('name') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) # Mit ELB verbinden conn_elb = loginelb(username) try: # Volume löschen conn_elb.delete_load_balancer(name) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "71" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "70" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des anzuhängenden Volumes holen volume = self.request.get('volume') # Instanz-ID holen instance_id = self.request.get('instanzen') # Device holen device = self.request.get('device') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Volume anhaengen neues_volume = conn_region.attach_volume(volume, instance_id, device) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "21" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "23" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # self.response.out.write('posted!') # Zu verknüpfende Elastic IP-Adresse holen address = self.request.get('address') # Zu verknüpfende Instanz holen instanzen = self.request.get('instanzen') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Die Elastic IP-Adresse verknüpfen conn_region.associate_address(instanzen, address) except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "1" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "0" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Zu löschende (release) Elastic IP-Adresse holen address = self.request.get('address') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Die Elastic IP-Adresse freigeben (löschen) conn_region.release_address(address) except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "4" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "5" self.redirect('/elastic_ips?mobile='+str(mobile)+'&message='+fehlermeldung)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Eine Elastic IP-Adresse bekommen conn_region.allocate_address() except EC2ResponseError: # Wenn es nicht geklappt hat... fehlermeldung = "6" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "7" self.redirect('/elastic_ips?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') # Den Usernamen erfahren username = users.get_current_user() if users.get_current_user(): # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' # Get the pull-down menu with the users regions he has already configured zonen_liste = zonen_liste_funktion(username,sprache,mobile) # If the user has still no credentials for cloud services if zonen_liste == '': if sprache == "de": zonen_liste = '<p><font color="red"><b>Sie müssen nun ihre Zugangsdaten (Regionen) einrichten</b></font></p>' else: zonen_liste = '<p><font color="red"><b>Now, you need to configure your Region data</b></font></p>' else: sprache = "en" navigations_bar = navigations_bar_funktion(sprache) url = users.create_login_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Login' regionname = '---' zone_amazon = "" zonen_liste = '<p><font color="red"><b><=== You need to login first with your Google account!</b></font></p>' template_values = { 'navigations_bar': navigations_bar, 'zone': regionname, 'zone_amazon': zone_amazon, 'url': url, 'url_linktext': url_linktext, 'zonen_liste': zonen_liste, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "info.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "info.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Den Namen des Buckets erfahren bucketname = self.request.get('bucket_name') # Die S3-Ansicht (pur oder Komfort) erfahren s3_ansicht = self.request.get('s3_ansicht') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) path = '&path=alle_keys_loeschen&mobile=' + mobile + '&s3_ansicht=' + s3_ansicht + '&bucket_name=' + bucketname template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'bucketname': bucketname, 's3_ansicht': s3_ansicht, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "alle_keys_loeschen_frage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "alle_keys_loeschen_frage.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu löschenden Snapshots holen snapshot = self.request.get('snapshot') # War es die Liste aller AMIs oder nur der eigenen AMIs ami = self.request.get('ami') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) if ami == "own": try: # Snapshot löschen conn_region.delete_snapshot(snapshot) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "12" self.redirect('/snapshots?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/snapshots?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "11" self.redirect('/snapshots?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # ami == "all" try: # Snapshot löschen conn_region.delete_snapshot(snapshot) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "12" self.redirect('/snapshots_amazon_all?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/snapshots_amazon_all?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "11" self.redirect('/snapshots_amazon_all?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu löschenden Snapshots holen snapshot = self.request.get('snapshot') # War es die Liste aller AMIs oder nur der eigenen AMIs ami = self.request.get('ami') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) if ami == "own": try: # Snapshot löschen conn_region.delete_snapshot(snapshot) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "12" self.redirect('/snapshots?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/snapshots?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "11" self.redirect('/snapshots?mobile='+str(mobile)+'&message='+fehlermeldung) else: # ami == "all" try: # Snapshot löschen conn_region.delete_snapshot(snapshot) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "12" self.redirect('/snapshots_amazon_all?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/snapshots_amazon_all?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "11" self.redirect('/snapshots_amazon_all?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" instance_type = self.request.get('type') keys_liste = self.request.get('key') image_id = self.request.get('image') gruppen_liste = self.request.get('gruppe') aki_id = self.request.get('aki') ari_id = self.request.get('ari') zonen_auswahl = self.request.get('zone') gruppen_liste_liste = [] gruppen_liste_liste.append(gruppen_liste) # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') conn_region, regionname = login(username) try: # Instanz(en) anlegen reservation = conn_region.run_instances( image_id, key_name=keys_liste, security_groups=gruppen_liste_liste, instance_type=instance_type, placement=zonen_auswahl, kernel_id=aki_id, ramdisk_id=ari_id) except EC2ResponseError: # Wenn es nicht geklappt hat fehlermeldung = "78" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat fehlermeldung = "77" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Liste mit den Volumes liste_volumes = conn_region.get_all_volumes() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... # Anzahl der Volumes in der Liste laenge_liste_volumes = len(liste_volumes) for i in range(laenge_liste_volumes): try: # Volume entfernen conn_region.delete_volume(liste_volumes[i].id) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "26" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) fehlermeldung = "27" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() # Den Namen des Buckets erfahren bucketname = self.request.get('bucket') # Die S3-Ansicht (pur oder Komfort) erfahren s3_ansicht = self.request.get('s3_ansicht') conn_region, regionname = login(username) # Mit S3 verbinden conn_s3 = logins3(username) bucket_instance = conn_s3.get_bucket(bucketname) liste_keys = bucket_instance.get_all_keys() # Anzahl der Keys in der Liste laenge_liste_keys = len(liste_keys) # Wenn wir in einer Eucalyputs-Infrastruktur sind, dann muss dieser # dämliche None-Eintrag weg if regionname != "Amazon": liste_keys2 = [] for i in range(laenge_liste_keys): if str(liste_keys[i].name) != 'None': liste_keys2.append(liste_keys[i]) laenge_liste_keys2 = len(liste_keys2) laenge_liste_keys = laenge_liste_keys2 liste_keys = liste_keys2 try: for i in range(laenge_liste_keys): # Versuch den Key zu löschen liste_keys[i].delete() except: # Wenn es nicht klappt... fehlermeldung = "121" self.redirect('/bucket_inhalt_pure?mobile=' + str(mobile) + '&bucket=' + bucketname + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "120" self.redirect('/bucket_inhalt_pure?mobile=' + str(mobile) + '&bucket=' + bucketname + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Liste der Instanzen holen instances = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... for reserv in instances: for inst in reserv.instances: # Wenn die Instanz schon im Zustand "terminated" ist, dann kann man sie nicht mehr beenden if inst.state != u'terminated': try: # Instanz beenden #inst.stop() inst.terminate() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "82" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) fehlermeldung = "81" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" instance_type = self.request.get('type') keys_liste = self.request.get('key') image_id = self.request.get('image') gruppen_liste = self.request.get('gruppe') aki_id = self.request.get('aki') ari_id = self.request.get('ari') zonen_auswahl = self.request.get('zone') gruppen_liste_liste = [] gruppen_liste_liste.append(gruppen_liste) # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') conn_region, regionname = login(username) try: # Instanz(en) anlegen reservation = conn_region.run_instances(image_id, key_name=keys_liste, security_groups=gruppen_liste_liste, instance_type=instance_type, placement=zonen_auswahl, kernel_id=aki_id, ramdisk_id=ari_id) except EC2ResponseError: # Wenn es nicht geklappt hat fehlermeldung = "78" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat fehlermeldung = "77" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() # Den Namen des Buckets erfahren bucketname = self.request.get('bucket') # Die S3-Ansicht (pur oder Komfort) erfahren s3_ansicht = self.request.get('s3_ansicht') conn_region, regionname = login(username) # Mit S3 verbinden conn_s3 = logins3(username) bucket_instance = conn_s3.get_bucket(bucketname) liste_keys = bucket_instance.get_all_keys() # Anzahl der Keys in der Liste laenge_liste_keys = len(liste_keys) # Wenn wir in einer Eucalyputs-Infrastruktur sind, dann muss dieser # dämliche None-Eintrag weg if regionname != "Amazon": liste_keys2 = [] for i in range(laenge_liste_keys): if str(liste_keys[i].name) != 'None': liste_keys2.append(liste_keys[i]) laenge_liste_keys2 = len(liste_keys2) laenge_liste_keys = laenge_liste_keys2 liste_keys = liste_keys2 try: for i in range(laenge_liste_keys): # Versuch den Key zu löschen liste_keys[i].delete() except: # Wenn es nicht klappt... fehlermeldung = "121" self.redirect('/bucket_inhalt_pure?mobile='+str(mobile)+'&bucket='+bucketname+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "120" self.redirect('/bucket_inhalt_pure?mobile='+str(mobile)+'&bucket='+bucketname+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) path = '&path=alle_volumes_loeschen&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "alle_volumes_loeschen_frage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "alle_volumes_loeschen_frage.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Liste mit den Volumes liste_volumes = conn_region.get_all_volumes() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... # Anzahl der Volumes in der Liste laenge_liste_volumes = len(liste_volumes) for i in range(laenge_liste_volumes): try: # Volume entfernen conn_region.delete_volume(liste_volumes[i].id) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "26" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung) fehlermeldung = "27" self.redirect('/volumes?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu lösenden Volumes holen # Name of the volume that has to be detached volume = self.request.get('volume') # Den Usernamen erfahren # Get the username username = users.get_current_user() conn_region, regionname = login(username) try: # Volume entkoppeln conn_region.detach_volume(volume) except EC2ResponseError: # Wenn es nicht klappt... # If it didn't work to detach the volume... fehlermeldung = "20" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Wenn es nicht klappt... # If it didn't work to detach the volume... # Diese Exception hilft gegen diese beiden Fehler: # This exception helps against this two errors: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... # If it worked... fehlermeldung = "24" self.redirect('/volumes?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') ami = self.request.get('ami') zone = self.request.get('zone') # Den Usernamen erfahren username = users.get_current_user() if ami == "": # Testen ob die AMI-Bezeichnung angegeben wurde # Wenn keine AMI-Bezeichnung angegeben wurde, kann kein Favorit angelegt werden #fehlermeldung = "Sie haben keine AMI-Bezeichnung angegeben" fehlermeldung = "84" self.redirect('/images?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: if re.match('ami-*', ami) == None: # Erst überprüfen, ob die Eingabe mit "ami-" angängt fehlermeldung = "85" self.redirect('/images?mobile=' + str(mobile) + '&message=' + fehlermeldung) elif len(ami) != 12: # Überprüfen, ob die Eingabe 12 Zeichen lang ist fehlermeldung = "86" self.redirect('/images?mobile=' + str(mobile) + '&message=' + fehlermeldung) elif re.search(r'[^\-a-zA-Z0-9]', ami) != None: # Überprüfen, ob die Eingabe nur erlaubte Zeichen enthält # Die Zeichen - und a-zA-Z0-9 sind erlaubt. Alle anderen nicht. Darum das ^ fehlermeldung = "87" self.redirect('/images?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Erst überprüfen, ob schon ein AMI-Eintrag dieses Benutzers in der Zone vorhanden ist. testen = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankFavouritenAMIs WHERE user = :username_db AND ami = :ami_db AND zone = :zone_db", username_db=username, ami_db=ami, zone_db=zone) # Wenn Einträge vorhanden sind, werden sie aus der DB geholt und gelöscht results = testen.fetch(100) for result in results: result.delete() # Erst testen, ob es dieses AMI überhaupt gibt. # Eine leere Liste für das AMI erzeugen ami_liste = [] # Das AMIs in die Liste einfügen ami_liste.append(ami) conn_region, regionname = login(username) try: liste_favoriten_ami_images = conn_region.get_all_images( image_ids=ami_liste) except EC2ResponseError: fehlermeldung = "88" self.redirect('/images?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/images?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Favorit erzeugen # Festlegen, was in den Datastore geschrieben werden soll favorit = KoalaCloudDatenbankFavouritenAMIs(ami=ami, zone=zone, user=username) # In den Datastore schreiben favorit.put() fehlermeldung = "83" self.redirect('/images?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Die ID der zu stoppenden Instanz holen id = self.request.get('id') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Liste der Instanzen holen instances = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... # Mit dieser Variable wird überprüft, ob die Instanz gleich gefunden wird # Wenn die Instanz nicht gefunden wird, braucht auch nichts gestoppt zu werden gefunden = 0 for reserv in instances: for inst in reserv.instances: # Vergleichen if str(inst.id) == id: # Die Instanz wurde gefunden! gefunden = 1 # Wenn die Instanz schon im Zustand "terminated" ist, # kann man sie nicht mehr stoppen if inst.state == u'terminated': fehlermeldung = "76" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) else: try: # Instanz stoppen inst.stop() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "124" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "123" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung) # Wenn die Instanz nicht gefunden werden konnte if gefunden == 0: fehlermeldung = "75" self.redirect('/instanzen?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Wurde ein neuer Schlüssel angelegt? neu = self.request.get('neu') # Name des neuen Schlüssels neuerkeyname = self.request.get('neuerkeyname') # Name des Datastore-Schlüssels, unter dem der Secret-Key angehegt ist secretkey = self.request.get('secretkey') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') #So könnte man vielleicht den File-Download-Dialog bekommen #Content-disposition: attachment; filename="fname.ext" # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=schluessel&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path,template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path,template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("99", "103"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "92", "100", "101", "102", "104"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Keys liste_key_pairs = conn_region.get_all_key_pairs() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": keytabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: keytabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": keytabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: keytabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_keys = len(liste_key_pairs) if laenge_liste_keys == 0: if sprache == "de": keytabelle = 'Sie haben keine Schlüsselpaare in dieser Region.' else: keytabelle = 'You have no keypairs inside this region.' else: if mobile == "true": keytabelle = '' keytabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: keytabelle += '<tr><td colspan="2"> </td></tr>' counter += 1 keytabelle += '<tr>' keytabelle += '<td>' keytabelle += '<a href="/schluesselentfernen?key=' keytabelle += liste_key_pairs[i].name keytabelle += "&mobile=" keytabelle += str(mobile) keytabelle += '"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Schlüsselpaar löschen"></a>' keytabelle += '</td>' keytabelle += '<td>'+liste_key_pairs[i].name+'</td>' keytabelle += '</tr>' # keytabelle += '<tr>' # keytabelle += '<td> </td>' # keytabelle += '<td><tt>'+liste_key_pairs[i].fingerprint+'</tt></td>' # keytabelle += '</tr>' keytabelle = keytabelle + '</table>' else: keytabelle = '' keytabelle += '<table border="0" cellspacing="0" cellpadding="5">' keytabelle += '<tr>' keytabelle += '<th> </th>' keytabelle += '<th align="center">Name</th>' if sprache == "de": keytabelle += '<th align="center">Prüfsumme</th>' else: keytabelle += '<th align="center">Fingerprint</th>' keytabelle = keytabelle + '</tr>' for i in range(laenge_liste_keys): keytabelle += '<tr>' keytabelle += '<td>' keytabelle += '<a href="/schluesselentfernen?key=' keytabelle += liste_key_pairs[i].name keytabelle += "&mobile=" keytabelle += str(mobile) keytabelle += '"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Schlüsselpaar löschen"></a>' keytabelle += '</td>' keytabelle += '<td>'+liste_key_pairs[i].name+'</td>' keytabelle += '<td><tt>'+liste_key_pairs[i].fingerprint+'</tt></td>' keytabelle += '</tr>' keytabelle = keytabelle + '</table>' if neu == "ja": secretkey_memcache_mit_zeilenumbruch = memcache.get(secretkey) secretkey_memcache = secretkey_memcache_mit_zeilenumbruch.replace("\n","<BR>") # Das wird in den Body-Tag der Datei base.html eingefügt. # bodycommand = ' onLoad="newkey()" ' # javascript_funktion = ''' #<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript"> # <!-- to hide script contents from old browsers # function newkey() # { # OpenWindow=window.open("", "newwin", "height=450, width=500,toolbar=no,scrollbars="+scroll+",menubar=no") # OpenWindow.document.write("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'") # OpenWindow.document.write(" 'http://www.w3.org/TR/html4/loose.dtd'>") # # OpenWindow.document.write("<HTML>") # OpenWindow.document.write("<HEAD>") # OpenWindow.document.write("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>") # OpenWindow.document.write("<TITLE>Secret Key<\/TITLE>") # OpenWindow.document.write("<link type='text/css' rel='stylesheet' href='/stylesheets/style.css'>") # OpenWindow.document.write("<link rel='SHORTCUT ICON' href='/favicon.ico'>") # OpenWindow.document.write("<\/HEAD>") # OpenWindow.document.write("<BODY BGCOLOR='white'>") # OpenWindow.document.write("<h1>Secret Key<\/h1>") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<tt>''' # javascript_funktion = javascript_funktion + secretkey_memcache # if sprache == "de": # javascript_funktion = javascript_funktion + '''<\/tt>") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<B>Achtung!<\/B> Den Secret Key müssen Sie speichern.<BR>") # OpenWindow.document.write("Am besten in einer Datei <tt>''' # else: # javascript_funktion = javascript_funktion + '''<\/tt>") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<B>Attention!<\/B> The secret key need to be saved.<BR>") # OpenWindow.document.write("As an advise use the filename <tt>''' # javascript_funktion = javascript_funktion + neuerkeyname # javascript_funktion = javascript_funktion + '''.secret<\/tt>.") # OpenWindow.document.write("<P> <\/P>") # OpenWindow.document.write("<tt>chmod 600 ''' # javascript_funktion = javascript_funktion + neuerkeyname # javascript_funktion = javascript_funktion + '''.secret<\/tt>") # OpenWindow.document.write("<\/BODY>") # OpenWindow.document.write("<\/HTML>") # OpenWindow.document.close() # self.name="main" # } # // end hiding contents from old browsers --> #</SCRIPT>''' new_keypair_secretkey = '' if sprache == "de": new_keypair_secretkey += '<b>Ihr neuer geheimer Schlüssel</b>' else: new_keypair_secretkey += '<b>Your new secret key</b>' new_keypair_secretkey += '<p> </p>' new_keypair_secretkey += '<tt>'+secretkey_memcache+'</tt>' new_keypair_secretkey += '<p> </p>' if sprache == "de": new_keypair_secretkey += '<b>Achtung!</b> Ihren geheimen Schlüssel müssen Sie speichern. Am besten in einer lokalen Datei mit den korrekten Benutzerrechten.<BR>' new_keypair_secretkey += '<tt>chmod 600 '+neuerkeyname+'.secret</tt>' else: new_keypair_secretkey += '<b>Attention!</b> You need to save your new secret key. As an advise use a local file with the correct user access rights.BR>' new_keypair_secretkey += '<tt>chmod 600 '+neuerkeyname+'.secret</tt>' new_keypair_secretkey += '<p> </p>' new_keypair_secretkey_download_link = '' new_keypair_secretkey_download_link += '<a href="'+secretkey_memcache+'">'+neuerkeyname+'.secret</a>' new_keypair_secretkey_download_link += '<p> </p>' else: # neu ist nicht "ja" # bodycommand = " " # javascript_funktion = " " new_keypair_secretkey = "" new_keypair_secretkey_download_link = "" path = '&path=schluessel&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'keytabelle': keytabelle, # 'bodycommand': bodycommand, # 'javascript_funktion': javascript_funktion, 'zonen_liste': zonen_liste, 'input_error_message': input_error_message, 'mobile': mobile, 'new_keypair_secretkey': new_keypair_secretkey, 'new_keypair_secretkey_download_link': new_keypair_secretkey_download_link, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "keys.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "keys.html") self.response.out.write(template.render(path,template_values))
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=securitygroups&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path,template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path,template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("40", "48"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "41", "42", "43", "44", "45", "46", "47", "49"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Security Groups liste_security_groups = conn_region.get_all_security_groups() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": gruppentabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: gruppentabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": gruppentabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: gruppentabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) if laenge_liste_security_groups == 0: gruppentabelle = 'Es sind keine Sicherheitsgruppen in der Zone vorhanden.' else: if mobile == "true": gruppentabelle = '' gruppentabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_security_groups): if counter > 0: gruppentabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 gruppentabelle += '<tr>' gruppentabelle += '<td width="75">' gruppentabelle += '<a href="/gruppenentfernen?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title=" Sicherheitsgruppe löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe löschen"></a>' else: gruppentabelle += '" title="erase security group"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase security group"></a>' gruppentabelle += '</td>' gruppentabelle += '<td align="left">' gruppentabelle += '<a href="/gruppenaendern?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title="Regeln einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/ändern"></a>' else: gruppentabelle += '" title="check/alter rules"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter rules"></a>' gruppentabelle += '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' gruppentabelle += '<td align="right"><b>ID:</b></td>' gruppentabelle += '<td>'+liste_security_groups[i].name+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right"><b>Beschreibung:</b></td>' else: gruppentabelle += '<td align="right"><b>Description:</b></td>' gruppentabelle += '<td>'+liste_security_groups[i].description+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right"><b>Besitzer:</b></td>' else: gruppentabelle += '<td align="right"><b>Owner:</b></td>' gruppentabelle += '<td>'+liste_security_groups[i].owner_id+'</td>' gruppentabelle += '</tr>' gruppentabelle += '</table>' else: gruppentabelle = '' gruppentabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_security_groups): if counter > 0: gruppentabelle += '<tr><td colspan="2"> </td></tr>' counter += 1 gruppentabelle += '<tr>' gruppentabelle += '<td align="left" bgcolor="#D4D4D4">' gruppentabelle += '<a href="/gruppenentfernen?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title=" Sicherheitsgruppe löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe löschen"></a>' else: gruppentabelle += '" title="erase security group"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase security group"></a>' gruppentabelle += '</td>' gruppentabelle += '<td align="left">' gruppentabelle += '<a href="/gruppenaendern?gruppe=' gruppentabelle += liste_security_groups[i].name gruppentabelle += "&mobile=" gruppentabelle += str(mobile) if sprache == "de": gruppentabelle += '" title="Regeln einsehen/ändern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/ändern"></a>' else: gruppentabelle += '" title="check/alter rules"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter rules"></a>' gruppentabelle += '</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' gruppentabelle += '<td align="left">'+liste_security_groups[i].name+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Beschreibung:</b></td>' else: gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Description:</b></td>' gruppentabelle += '<td align="left">'+liste_security_groups[i].description+'</td>' gruppentabelle += '</tr>' gruppentabelle += '<tr>' if sprache == "de": gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Besitzer:</b></td>' else: gruppentabelle += '<td align="right" bgcolor="#D4D4D4"><b>Owner:</b></td>' gruppentabelle += '<td align="left">'+liste_security_groups[i].owner_id+'</td>' gruppentabelle += '</tr>' gruppentabelle += '</table>' path = '&path=securitygroups&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'securitygroupsliste': gruppentabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "securitygroups.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "securitygroups.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Namen des Buckets holen, in dem der Key ist bucketname = self.request.get('bucket') # Namen des Keys holen, dessen ACL angezeigt wird keyname = self.request.get('key') # War es die reine S3-Darstellung oder die Komfort-Darstellung, aus der die # Anfrage zu Löschen des Keys kam? typ = self.request.get('typ') # Verzeichnis holen, wenn es die Komfort-Ansicht war directory = self.request.get('dir') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) results = aktivezone.fetch(100) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) # Mit S3 verbinden conn_s3 = logins3(username) bucket_instance = conn_s3.get_bucket(bucketname) key_instance = bucket_instance.get_acl(keyname) acl = bucket_instance.get_acl(key_name=keyname) AllUsersREAD = '' AllUsersWRITE = '' AllUsersFULL = '' AuthentUsersREAD = '' AuthentUsersWRITE = '' AuthentUsersFULL = '' OwnerName = '' OwnerREAD = '' OwnerWRITE = '' OwnerFULL = '' for grant in acl.acl.grants: if str(grant.uri).find('AllUsers') != -1 and grant.permission == 'READ': AllUsersREAD = 'tick.png' if str(grant.uri).find('AllUsers') != -1 and grant.permission == 'WRITE': AllUsersWRITE = 'tick.png' if str(grant.uri).find('AllUsers') != -1 and grant.permission == 'FULL_CONTROL': AllUsersREAD = 'tick.png' AllUsersWRITE = 'tick.png' AllUsersFULL = 'tick.png' if str(grant.uri).find('AuthenticatedUsers') != -1 and grant.permission == 'READ': AuthentUsersREAD = 'tick.png' elif str(grant.uri).find('AuthenticatedUsers') != -1 and grant.permission == 'WRITE': AuthentUsersWRITE = 'tick.png' elif str(grant.uri).find('AuthenticatedUsers') != -1 and grant.permission == 'FULL_CONTROL': AuthentUsersFULL = 'tick.png' # Wenn der Besitzer des Keys dieser Eintrag hier ist... if str(key_instance.owner.id) == str(grant.id): OwnerName = str(grant.display_name) if grant.permission == 'READ': OwnerREAD = 'tick.png' if grant.permission == 'WRITE': OwnerWRITE = 'tick.png' if grant.permission == 'FULL_CONTROL': OwnerREAD = 'tick.png' OwnerWRITE = 'tick.png' OwnerFull = 'tick.png' if AllUsersREAD == '': AllUsersREAD = 'delete.png' if AllUsersWRITE == '': AllUsersWRITE = 'delete.png' if AllUsersFULL == '': AllUsersFULL = 'delete.png' if AuthentUsersREAD == '': AuthentUsersREAD = 'delete.png' if AuthentUsersWRITE == '': AuthentUsersWRITE = 'delete.png' if AuthentUsersFULL == '': AuthentUsersFULL = 'delete.png' if OwnerREAD == '': OwnerREAD = 'delete.png' if OwnerWRITE == '': OwnerWRITE = 'delete.png' if OwnerFull == '': OwnerFull = 'delete.png' acl_tabelle = '\n' acl_tabelle = acl_tabelle + '<table border="0" cellspacing="0" cellpadding="5"> \n' acl_tabelle = acl_tabelle + '<tr> \n' if sprache == "de": acl_tabelle = acl_tabelle + '<th align="left">Benutzer</th> \n' acl_tabelle = acl_tabelle + '<th align="center">Lesen</th> \n' acl_tabelle = acl_tabelle + '<th align="center">Schreiben</th> \n' acl_tabelle = acl_tabelle + '<th align="center">Voller Zugriff</th> \n' else: acl_tabelle = acl_tabelle + '<th align="left">User</th> \n' acl_tabelle = acl_tabelle + '<th align="center">Read</th> \n' acl_tabelle = acl_tabelle + '<th align="center">Write</th> \n' acl_tabelle = acl_tabelle + '<th align="center">Full Control</th> \n' acl_tabelle = acl_tabelle + '</tr> \n' acl_tabelle = acl_tabelle + '<tr> \n' if sprache == "de": acl_tabelle = acl_tabelle + '<td>Alle</td> \n' else: acl_tabelle = acl_tabelle + '<td>Everyone</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+AllUsersREAD+'" width="24" height="24" border="0" alt="'+AllUsersREAD+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+AllUsersWRITE+'" width="24" height="24" border="0" alt="'+AllUsersWRITE+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+AllUsersFULL+'" width="24" height="24" border="0" alt="'+AllUsersFULL+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '</tr> \n' acl_tabelle = acl_tabelle + '<tr> \n' if sprache == "de": acl_tabelle = acl_tabelle + '<td>Authentifizierte Benutzer</td> \n' else: acl_tabelle = acl_tabelle + '<td>Authenticated Users</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+AuthentUsersREAD+'" width="24" height="24" border="0" alt="'+AuthentUsersREAD+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+AuthentUsersWRITE+'" width="24" height="24" border="0" alt="'+AuthentUsersWRITE+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+AuthentUsersFULL+'" width="24" height="24" border="0" alt="'+AuthentUsersFULL+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '</tr> \n' acl_tabelle = acl_tabelle + '<tr> \n' if sprache == "de": acl_tabelle = acl_tabelle + '<td>'+OwnerName+' (Besitzer)</td> \n' else: acl_tabelle = acl_tabelle + '<td>'+OwnerName+' Owner</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+OwnerREAD+'" width="24" height="24" border="0" alt="'+OwnerREAD+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+OwnerWRITE+'" width="24" height="24" border="0" alt="'+OwnerWRITE+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '<td align="center"> \n' acl_tabelle = acl_tabelle + '<img src="bilder/'+OwnerFull+'" width="24" height="24" border="0" alt="'+OwnerFull+'"> \n' acl_tabelle = acl_tabelle + '</td> \n' acl_tabelle = acl_tabelle + '</tr> \n' acl_tabelle = acl_tabelle + '</table> \n' # Wenn man sich NICHT unter Amazon befindet, funktioniert das Ändern der ACL nicht. if regionname == "Amazon": eucalyptus_warnung = '' elif regionname == "GoogleStorage": eucalyptus_warnung = '' else: if sprache == "de": eucalyptus_warnung = '<B>Achtung!</B> Unter Eucalyptus 1.6 und 1.6.1 funktioniert das Ändern der Zugriffsberechtigung (Access Control List) nicht.</B>' else: eucalyptus_warnung = '<B>Attention!</B> With Eucalyptus 1.6 and 1.6.1 changing the ACL is broken.</B>' path = '&path=s3&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'bucketname': bucketname, 'keyname': keyname, 'acl_tabelle': acl_tabelle, 'typ': typ, 'directory': directory, 'eucalyptus_warnung': eucalyptus_warnung, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "acl.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "acl.html") self.response.out.write(template.render(path,template_values))
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') gruppe = self.request.get('gruppe') protokoll_input = self.request.get('protokoll') # Die Methode authorize will den Protokoll-Namen in Kleinbuchstaben if protokoll_input == 'TCP': protokoll = 'tcp' if protokoll_input == 'UDP': protokoll = 'udp' if protokoll_input == 'ICMP': protokoll = 'icmp' port_from = self.request.get('port_from') port_to = self.request.get('port_to') cidr_ip = '0.0.0.0/0' username = users.get_current_user() # Den Usernamen erfahren conn_region, regionname = login(username) # Schauen, ob die Regel folgende ist: From -1 To -1 (ICMP) für Ping if port_from == '-1' and port_to == '-1': ausnahme = 1 else: ausnahme = 0 # Testen ob der Port FROM und der Port TO angegeben wurde if port_from == "" and port_to == "" and ausnahme == 0: # Wenn die Ports nicht angegeben wurden, kann keine Regel angelegt werden fehlermeldung = "29" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) # Testen ob der Port FROM angegeben wurde elif port_from == "" and ausnahme == 0: # Wenn der Port nicht angegeben wurde, kann keine Regel angelegt werden fehlermeldung = "30" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) elif port_to == "" and ausnahme == 0: # Testen ob der Port TO angegeben wurde # Wenn der Port nicht angegeben wurde, kann keine Regel angelegt werden fehlermeldung = "31" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) elif port_from.isdigit() == False and port_to.isdigit() == False and ausnahme == 0: # Testen ob der Port FROM und Port TO eine Zahl ist # Wenn nicht ausschließlich eine Zahl eingegeben wurde sondern evtl. Buchstaben oder Sonderzeichen fehlermeldung = "32" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) elif port_from.isdigit() == False and ausnahme == 0: # Testen ob der Port FROM eine Zahl ist # Wenn nicht ausschließlich eine Zahl eingegeben wurde sondern evtl. Buchstaben oder Sonderzeichen fehlermeldung = "33" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) elif port_to.isdigit() == False and ausnahme == 0: # Testen ob der Port TO eine Zahl ist # Wenn nicht ausschließlich eine Zahl eingegeben wurde sondern evtl. Buchstaben oder Sonderzeichen fehlermeldung = "34" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) else: try: # Liste mit den Security Groups # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_security_groups = conn_region.get_all_security_groups() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "35" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "35" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) for i in range(laenge_liste_security_groups): # Vergleichen if liste_security_groups[i].name == gruppe: # Jetzt ist die Richtige Security Group gefunden. # Liste mit den Regeln der Security Group liste_regeln = liste_security_groups[i].rules # Anzahl der Elemente in der Liste mit den Regeln laenge_liste_regeln = len(liste_regeln) # Es sind noch keine Regeln in der Security Group vorhanden if laenge_liste_regeln == 0: #self.response.out.write('leer') try: #Jetzt anlegen liste_security_groups[i].authorize(ip_protocol=protokoll, from_port=port_from, to_port=port_to, cidr_ip=cidr_ip, src_group=None) except EC2ResponseError: fehlermeldung = "39" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) else: fehlermeldung = "28" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) else: for i in range(laenge_liste_regeln): # self.response.out.write('nicht leer ') # Hier muss die neue Regel mit den bestehenden Regeln verglichen werden # Variable erzeugen zum Erfassen, ob die neue Regel schon existiert schon_vorhanden = 0 regel = 'IPPermissions:'+protokoll+'('+port_from+'-'+port_to+')' for k in range(laenge_liste_regeln): # Vergleichen if str(liste_regeln[k]) == regel: schon_vorhanden = 1 fehlermeldung = "35" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) if schon_vorhanden == 0: for z in range(laenge_liste_security_groups): # Vergleichen if liste_security_groups[z].name == gruppe: try: #Jetzt die Regel anlegen liste_security_groups[z].authorize(ip_protocol=protokoll, from_port=port_from, to_port=port_to, cidr_ip=cidr_ip, src_group=None) except EC2ResponseError: fehlermeldung = "39" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung) else: fehlermeldung = "28" self.redirect('/gruppenaendern?mobile='+str(mobile)+'&gruppe='+gruppe+'&message='+fehlermeldung)
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Die ID der Instanz holen instance_id = self.request.get('id') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) fehlermeldung = "" try: console_output = conn_region.get_console_output(str(instance_id)) except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": fehlermeldung = '<p> </p> <font color="red">Beim Versuch die Konsolenausgabe der Instanz zu holen, kam es zu einem Fehler</font>' else: fehlermeldung = '<p> </p> <font color="red">While the system tried to get the console output, an error occured</font>' console_ausgabe = '' template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'instance_id': instance_id, 'zone': regionname, 'fehlermeldung': fehlermeldung, 'zone_amazon': zone_amazon, 'console_ausgabe': console_ausgabe, 'zonen_liste': zonen_liste, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "console_output.html") else: path = os.path.join(os.path.dirname(__file__), "templates", sprache, "console_output.html") self.response.out.write(template.render(path,template_values)) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": fehlermeldung = '<p> </p> <font color="red">Beim Versuch die Konsolenausgabe der Instanz zu holen, kam es zu einem Timeout-Fehler.</font>' else: fehlermeldung = '<p> </p> <font color="red">While the system tried to get the console output, a timeout error occured.</font>' console_ausgabe = '' template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'instance_id': instance_id, 'zone': regionname, 'fehlermeldung': fehlermeldung, 'zone_amazon': zone_amazon, 'console_ausgabe': console_ausgabe, 'zonen_liste': zonen_liste, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "console_output.html") else: path = os.path.join(os.path.dirname(__file__), "templates", sprache, "console_output.html") self.response.out.write(template.render(path,template_values)) else: # Wenn es geklappt hat... if console_output.output == '': if sprache == "de": console_ausgabe = '<font color="green">Es liegt noch keine Konsolenausgabe vor</font>' else: console_ausgabe = '<font color="green">Still no console output exists</font>' else: console_ausgabe = '' console_ausgabe = console_ausgabe + '<tt>' console_ausgabe = console_ausgabe + console_output.output.replace("\n","<BR>").replace(" ", " ").replace("", " ") console_ausgabe = console_ausgabe + '</tt>' template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'instance_id': instance_id, 'zone': regionname, 'fehlermeldung': fehlermeldung, 'zone_amazon': zone_amazon, 'console_ausgabe': console_ausgabe, 'zonen_liste': zonen_liste, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "console_output.html") else: path = os.path.join(os.path.dirname(__file__), "templates", sprache, "console_output.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Name des zu löschenden Load Balancers holen loadbalancer_name = self.request.get('name') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("61", "63", "66", "68"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "62", "64", "65", "67", "69"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" try: # Liste mit den Instanzen # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_reservations = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_reservations = len(liste_reservations) if laenge_liste_reservations == "0": # Wenn es keine laufenden Instanzen gibt instanzen_in_region = 0 else: # Wenn es laufenden Instanzen gibt instanzen_in_region = 0 for i in liste_reservations: for x in i.instances: # Für jede Instanz wird geschaut... # ...ob die Instanz in der Region des Volumes liegt und läuft if x.state == u'running': instanzen_in_region = instanzen_in_region + 1 # Mit ELB verbinden conn_elb = loginelb(username) try: # Liste mit den LoadBalancern liste_load_balancers = conn_elb.get_all_load_balancers( load_balancer_names=str(loadbalancer_name)) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... tabelle_instanz_anhaengen = '' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<form action="/loadbalancer_instanz_zuordnen?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str( mobile) tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" method="post" accept-charset="utf-8">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<table border="0" cellspacing="0" cellpadding="5">\n' # Wenn dem Load Balancer noch keine Instanzen zugewiesen wurden... if len(liste_load_balancers[0].instances) == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Es wurden noch keine Instanzen zugewiesen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'No instances asigned yet' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' # Wenn dem Load Balancer schon Instanzen zugewiesen wurden... else: for z in range(len(liste_load_balancers[0].instances)): tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<a href="/loadbalancer_deregister_instance?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '&instanz=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[ 0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str( mobile) if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="Instanz deregistrieren">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Instanz deregistrieren"></a>' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="deregister instance">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister instance"></a>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[ 0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].instances) != 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td> </td>\n' if instanzen_in_region == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center" colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Sie haben keine Instanzen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'You have no instances' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' else: if instanzen_in_region > 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<select name="instanzen" size="1">\n' for i in liste_reservations: for x in i.instances: if x.state == u'running': tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<option>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + x.id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</option>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</select>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="verknüpfen">' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="associate">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</table>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</form>' try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht geklappt hat... if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) tabelle_zonen_aendern = '' tabelle_zonen_aendern = tabelle_zonen_aendern + '<form action="/loadbalancer_zone_zuordnen?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str( mobile) tabelle_zonen_aendern = tabelle_zonen_aendern + '" method="post" accept-charset="utf-8">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<table border="0" cellspacing="0" cellpadding="5">\n' for z in range( len(liste_load_balancers[0].availability_zones) ): tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td>\n' # Wenn dem Load Balancer nur eine Zone zugewiesen ist... if len(liste_load_balancers[0].availability_zones ) == 1: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalanceraendern?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&message=67' tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str( mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' # Wenn dem Load Balancer mehr als nur eine Zone zugewiesen ist... else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalancer_deregister_zone?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&zone=' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[ 0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str( mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td colspan="2">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[ 0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].availability_zones ) != 0: tabelle_zonen_aendern = tabelle_zonen_aendern + '<td> </td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<select name="zonen" size="1">\n' for i in range(laenge_liste_zonen): tabelle_zonen_aendern = tabelle_zonen_aendern + '<option>' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_zonen[ i].name tabelle_zonen_aendern = tabelle_zonen_aendern + '</option>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</select>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="verknüpfen">' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="associate">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</table>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</form>' path = '&path=loadbalanceraendern&name=' + loadbalancer_name + '&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'load_balancer_name': loadbalancer_name, 'tabelle_instanz_anhaengen': tabelle_instanz_anhaengen, 'tabelle_zonen_aendern': tabelle_zonen_aendern, 'input_error_message': input_error_message, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "loadbalancer_change.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "loadbalancer_change.html") self.response.out.write( template.render(path, template_values))
def post(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') neuergruppenname = self.request.get('gruppenname') neuegruppenbeschreibung = self.request.get('gruppenbeschreibung') username = users.get_current_user() # Den Usernamen erfahren conn_region, regionname = login(username) if neuergruppenname == "" and neuegruppenbeschreibung == "": # Wenn kein Name und keine Beschreibung angegeben wurde #fehlermeldung = "Sie haben keinen Namen und keine Beschreibung angegeben" fehlermeldung = "41" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) elif neuergruppenname == "": # Testen ob ein Name für die neue Gruppe angegeben wurde #fehlermeldung = "Sie haben keinen Namen angegeben" fehlermeldung = "42" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) elif neuegruppenbeschreibung == "": # Testen ob eine Beschreibung für die neue Gruppe angegeben wurde #fehlermeldung = "Sie haben keine Beschreibung angegeben" fehlermeldung = "43" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) elif re.search(r'[^\-_a-zA-Z0-9]', neuergruppenname) != None: # Testen ob für den neuen Gruppennamen nur erlaubte Zeichen verwendet wurden fehlermeldung = "45" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) elif re.search(r'[^\ \-_a-zA-Z0-9]', neuegruppenbeschreibung) != None: # Testen ob für die Beschreibung der den neuen Gruppe nur erlaubte Zeichen verwendet wurden # Leerzeichen sind in der Gruppenbezeichnung ok fehlermeldung = "46" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) else: try: # Liste mit den Security Groups # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_security_groups = conn_region.get_all_security_groups() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "47" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "47" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) # Variable erzeugen zum Erfassen, ob die neu Gruppe schon existiert schon_vorhanden = 0 for i in range(laenge_liste_security_groups): # Vergleichen # Für jede existierende Gruppe den Namen der Gruppe # mit dem neuen Gruppennamen vergleichen if liste_security_groups[i].name == neuergruppenname: # Security Gruppe existiert schon! schon_vorhanden = 1 fehlermeldung = "44" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) # Wenn der Schlüssel noch nicht existiert...anlegen! if schon_vorhanden == 0: try: # Security Group anlegen conn_region.create_security_group(neuergruppenname, neuegruppenbeschreibung) except EC2ResponseError: fehlermeldung = "47" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung) else: fehlermeldung = "40" self.redirect('/securitygroups?mobile='+str(mobile)+'&message='+fehlermeldung)
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Die ID der zu stoppenden Instanz holen id = self.request.get('id') # Den Usernamen erfahren username = users.get_current_user() conn_region, regionname = login(username) try: # Liste der Instanzen holen instances = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... # Mit dieser Variable wird überprüft, ob die Instanz gleich gefunden wird # Wenn die Instanz nicht gefunden wird, braucht auch nichts gestoppt zu werden gefunden = 0 for reserv in instances: for inst in reserv.instances: # Vergleichen if str(inst.id) == id: # Die Instanz wurde gefunden! gefunden = 1 # Wenn die Instanz schon im Zustand "terminated" ist, # kann man sie nicht mehr stoppen if inst.state == u'terminated': fehlermeldung = "76" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: try: # Instanz stoppen inst.stop() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "124" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "8" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat... fehlermeldung = "123" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung) # Wenn die Instanz nicht gefunden werden konnte if gefunden == 0: fehlermeldung = "75" self.redirect('/instanzen?mobile=' + str(mobile) + '&message=' + fehlermeldung)
def get(self): # self.response.out.write('posted!') mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": path = '&path=zonen&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join( os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_google_storage.html") else: path = os.path.join( os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path, template_values)) # It is Host Europe Cloud Storage and not am IaaS elif regionname == "HostEuropeCloudStorage": path = '&path=zonen&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join( os.path.dirname(__file__), "../templates/mobile", sprache, "not_implemente_with_host_europe_storage.html") else: path = os.path.join( os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_host_europe_storage.html") self.response.out.write(template.render(path, template_values)) # It is not Google Storage. It is an IaaS else: try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": zonentabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: zonentabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": zonentabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: zonentabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) zonentabelle = '' zonentabelle += '<table border="0" cellspacing="0" cellpadding="5">' for i in range(laenge_liste_zonen): zonentabelle += '<tr>' zonentabelle += '<td>' + str( liste_zonen[i].name) + '</td>' if liste_zonen[i].state == u'available': zonentabelle += '<td bgcolor="#c3ddc3" align="center">' if sprache == "de": zonentabelle += 'verfügbar' else: zonentabelle += str(liste_zonen[i].state) else: zonentabelle += '<td align="center">' zonentabelle += str(liste_zonen[i].state) zonentabelle += '</td>' zonentabelle += '</tr>' zonentabelle += '</table>' path = '&path=zonen&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonenliste': zonentabelle, 'zonen_liste': zonen_liste, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "zonen.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "zonen.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') # Den Usernamen erfahren username = users.get_current_user() if users.get_current_user(): # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' # Get the pull-down menu with the users regions he has already configured zonen_liste = zonen_liste_funktion(username, sprache, mobile) # If the user has still no credentials for cloud services if zonen_liste == '': if sprache == "de": zonen_liste = '<p><font color="red"><b>Sie müssen nun ihre Zugangsdaten (Regionen) einrichten</b></font></p>' else: zonen_liste = '<p><font color="red"><b>Now, you need to configure your Region data</b></font></p>' else: sprache = "en" navigations_bar = navigations_bar_funktion(sprache) url = users.create_login_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Login' regionname = '---' zone_amazon = "" zonen_liste = '<p><font color="red"><b><=== You need to login first with your Google account!</b></font></p>' template_values = { 'navigations_bar': navigations_bar, 'zone': regionname, 'zone_amazon': zone_amazon, 'url': url, 'url_linktext': url_linktext, 'zonen_liste': zonen_liste, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "info.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "info.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Den Namen der zu löschenden Gruppe holen gruppe = self.request.get('gruppe') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: regionname = '---' zone_amazon = "" else: conn_region, regionname = login(username) zone_amazon = amazon_region(username) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' zonen_liste = zonen_liste_funktion(username, sprache, mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("28", "37"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "29", "30", "31", "32", "33", "34", "35", "36", "38", "39"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Security Groups # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_security_groups = conn_region.get_all_security_groups() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "7" self.redirect('/securitygroups?mobile=' + str(mobile) + '&message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "7" self.redirect('/securitygroups?mobile=' + str(mobile) + '&message=' + fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_security_groups = len(liste_security_groups) for i in range(laenge_liste_security_groups): # Vergleichen if liste_security_groups[i].name == gruppe: # Liste mit den Regeln der Security Group holen liste_regeln = liste_security_groups[i].rules # Anzahl der Elemente in der Liste mit den Regeln laenge_liste_regeln = len(liste_regeln) if laenge_liste_regeln == 0: if sprache == "de": regelntabelle = 'Es sind noch keine Regeln vorhanden' else: regelntabelle = 'Still no rules exist' else: for i in range(laenge_liste_regeln): regelntabelle = '' regelntabelle += '<table border="0" cellspacing="0" cellpadding="5">' regelntabelle += '<tr>' regelntabelle += '<th> </th>' if sprache == "de": regelntabelle += '<th align="center">Protokoll</th>' regelntabelle += '<th align="center">Extern</th>' regelntabelle += '<th align="center">Intern</th>' else: regelntabelle += '<th align="center">Protocol</th>' regelntabelle += '<th align="center">From Port</th>' regelntabelle += '<th align="center">To Port</th>' regelntabelle += '</tr>' for i in range(laenge_liste_regeln): regelntabelle += '<tr>' regelntabelle += '<td>' regelntabelle += '<a href="/grupperegelentfernen?regel=' regelntabelle += str(liste_regeln[i]) regelntabelle += "&mobile=" regelntabelle += str(mobile) regelntabelle += '&gruppe=' regelntabelle += gruppe regelntabelle += '" title="Regel löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Regel löschen"></a>' regelntabelle += '</td>' # upper() sorgt für die Großbuchstaben # upper() converts a string to uppercase regelntabelle += '<td align="center">' + str( liste_regeln[i].ip_protocol).upper( ) + '</td>' regelntabelle += '<td align="center">' + str( liste_regeln[i].from_port) + '</td>' regelntabelle += '<td align="center">' + str( liste_regeln[i].to_port) + '</td>' regelntabelle += '</tr>' regelntabelle += '</table>' path = '&path=gruppenaendern&gruppe=' + gruppe template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'gruppe': gruppe, 'regelntabelle': regelntabelle, 'input_error_message': input_error_message, 'zonen_liste': zonen_liste, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "securitygrouprules.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "securitygrouprules.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" #self.response.out.write('posted!') # Anzuhängende Elastic IP-Adresse holen address = self.request.get('address') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) try: # Liste mit den Instanzen # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_reservations = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/elastic_ips?message=' + fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/elastic_ips?message=' + fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_reservations = len(liste_reservations) if laenge_liste_reservations == "0": # Wenn es keine laufenden Instanzen gibt instanzen_in_region = 0 else: # Wenn es laufenden Instanzen gibt instanzen_in_region = 0 for i in liste_reservations: for x in i.instances: # Für jede Instanz wird geschaut... # ...ob die Instanz in der Region des Volumes liegt und läuft if x.state == u'running': instanzen_in_region = instanzen_in_region + 1 tabelle_instanz_anhaengen = '' tabelle_instanz_anhaengen += '<form action="/ip_definitiv_anhaengen?address=' tabelle_instanz_anhaengen += address tabelle_instanz_anhaengen += '" method="post" accept-charset="utf-8">' tabelle_instanz_anhaengen += '\n' tabelle_instanz_anhaengen += '<input type="hidden" name="mobile" value="' + mobile + '">\n' tabelle_instanz_anhaengen += '<table border="0" cellspacing="0" cellpadding="5">' tabelle_instanz_anhaengen += '<tr>' if sprache == "de": tabelle_instanz_anhaengen += '<td align="right"><B>Elastische IP:</B></td>' else: tabelle_instanz_anhaengen += '<td align="right"><B>Elastic IP:</B></td>' tabelle_instanz_anhaengen += '<td>' + address + '</td>' tabelle_instanz_anhaengen += '</tr>' tabelle_instanz_anhaengen += '<tr>' if sprache == "de": tabelle_instanz_anhaengen += '<td align="right"><B>Instanz:</B></td>' else: tabelle_instanz_anhaengen += '<td align="right"><B>Instance:</B></td>' tabelle_instanz_anhaengen += '<td>' if instanzen_in_region == 0: if sprache == "de": tabelle_instanz_anhaengen += 'Sie haben keine Instanz in dieser Region' else: tabelle_instanz_anhaengen += 'You still have no instance inside this region' else: if instanzen_in_region > 0: tabelle_instanz_anhaengen += '<select name="instanzen" size="1">' for i in liste_reservations: for x in i.instances: if x.state == u'running': tabelle_instanz_anhaengen += '<option>' tabelle_instanz_anhaengen += x.id tabelle_instanz_anhaengen += '</option>' tabelle_instanz_anhaengen += '</select>' tabelle_instanz_anhaengen += '</td>' tabelle_instanz_anhaengen += '</tr>' tabelle_instanz_anhaengen += '<tr>' if sprache == "de": tabelle_instanz_anhaengen += '<td align="left" colspan="2"><input type="submit" value="verknüpfen"></td>\n' else: tabelle_instanz_anhaengen += '<td align="left" colspan="2"><input type="submit" value="associate"></td>\n' tabelle_instanz_anhaengen += '</tr>\n' tabelle_instanz_anhaengen += '</table>\n' tabelle_instanz_anhaengen += '</form>\n' path = '&path=associate_address&address=' + address + '&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'tabelle_instanz_anhaengen': tabelle_instanz_anhaengen, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "ip_anhaengen.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "ip_anhaengen.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # self.response.out.write('posted!') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Namen des Buckets holen, dessen Inhalt angezeigt wird bucketname = self.request.get('bucket') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) results = aktivezone.fetch(100) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zugangstyp = zugangstyp_erhalten(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("111", "118", "120"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("112", "119", "121"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" AWSAccessKeyId = aws_access_key_erhalten(username,regionname) AWSSecretAccessKeyId = aws_secret_access_key_erhalten(username,regionname) # Mit S3 verbinden conn_s3 = logins3(username) try: # Liste der Buckets bucket_instance = conn_s3.get_bucket(bucketname) except: # Wenn es nicht klappt... if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 # Wenn es geklappt hat... else: try: # Liste der Keys liste_keys = bucket_instance.get_all_keys() except: # Wenn es nicht klappt... if sprache == "de": bucket_keys_tabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: bucket_keys_tabelle = '<font color="red">An error occured</font>' laenge_liste_keys = 0 else: # Wenn es geklappt hat... # Anzahl der Keys in der Liste laenge_liste_keys = len(liste_keys) # Wenn wir in einer Eucalyputs-Infrastruktur sind, dann muss dieser # dämliche None-Eintrag weg if regionname != "Amazon": liste_keys2 = [] for i in range(laenge_liste_keys): if str(liste_keys[i].name) != 'None': liste_keys2.append(liste_keys[i]) laenge_liste_keys2 = len(liste_keys2) laenge_liste_keys = laenge_liste_keys2 liste_keys = liste_keys2 if laenge_liste_keys == 0: if sprache == "de": bucket_keys_tabelle = 'Der Bucket <B>'+ bucketname+' </B>ist leer.' else: bucket_keys_tabelle = 'The bucket <B>'+ bucketname+' </B>is empty.' else: if mobile == "true": # mobile version... bucket_keys_tabelle = '' bucket_keys_tabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: bucket_keys_tabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 bucket_keys_tabelle += '<tr>' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += '<td> </td>' else: bucket_keys_tabelle += '<td>' bucket_keys_tabelle += '<a href="/bucketkeyentfernen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="Key löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key löschen"></a>' else: bucket_keys_tabelle += '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '<td colspan="2" align="left">' bucket_keys_tabelle += '<a href="' if regionname == "Amazon": bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&') else: port = port_erhalten(username,regionname) bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&').replace('/services/Walrus/', ':'+str(port)+'/services/Walrus/') bucket_keys_tabelle += '">' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += '</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" colspan="2"><b>Größe:</b></td>' else: bucket_keys_tabelle += '<td align="right" colspan="2"><b>Size:</b></td>' bucket_keys_tabelle += '<td align="left">' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: bucket_keys_tabelle += str(liste_keys[i].size) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" colspan="2"><b>Datum:</b></td>' else: bucket_keys_tabelle += '<td align="right" colspan="2"><b>Date:</b></td>' bucket_keys_tabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: datum_der_letzten_aenderung = parse(liste_keys[i].last_modified) bucket_keys_tabelle += str(datum_der_letzten_aenderung.strftime("%Y-%m-%d %H:%M:%S")) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" colspan="2"><b>ACL:</b></td>' bucket_keys_tabelle += '<td align="left">' bucket_keys_tabelle += '<a href="/acl_einsehen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="einsehen/ändern">einsehen/ändern</a>' else: bucket_keys_tabelle += '" title="view/edit">view/edit</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' # In S3 and Google Storage, each MD5 checksum is enclosed by double quotes. # Eliminate them with .replace('"','') bucket_keys_tabelle += '<td align="right" colspan="2"><b>MD5:</b></td>' bucket_keys_tabelle += '<td align="left">'+str(liste_keys[i].etag.replace('"',''))+'</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '</table>' else: # not the mobile version bucket_keys_tabelle = '' bucket_keys_tabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_keys): if counter > 0: bucket_keys_tabelle += '<tr><td colspan="4"> </td></tr>' counter += 1 bucket_keys_tabelle += '<tr>' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += '<td> </td>' else: bucket_keys_tabelle += '<td align="left" bgcolor="#D4D4D4">' bucket_keys_tabelle += '<a href="/bucketkeyentfernen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="Key löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key löschen"></a>' else: bucket_keys_tabelle += '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4"> </td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' bucket_keys_tabelle += '<td colspan="3" align="left">' bucket_keys_tabelle += '<a href="' if regionname == "Amazon": bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&') else: port = port_erhalten(username,regionname) bucket_keys_tabelle += liste_keys[i].generate_url(600, method='GET', headers=None, query_auth=True, force_http=True).replace('&', '&').replace('&amp;', '&').replace('/services/Walrus/', ':'+str(port)+'/services/Walrus/') bucket_keys_tabelle += '">' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += '</a>' bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' if sprache == "de": bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Größe:</b></td>' else: bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Size:</b></td>' bucket_keys_tabelle += '<td align="left">' if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: bucket_keys_tabelle += str(liste_keys[i].size) bucket_keys_tabelle += '</td>' if sprache == "de": bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>Date:</b></td>' bucket_keys_tabelle += '<td align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. if liste_keys[i].name == None and regionname != "Amazon": bucket_keys_tabelle += ' ' else: datum_der_letzten_aenderung = parse(liste_keys[i].last_modified) bucket_keys_tabelle += str(datum_der_letzten_aenderung.strftime("%Y-%m-%d %H:%M:%S")) bucket_keys_tabelle += '</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '<tr>' bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>ACL:</b></td>' bucket_keys_tabelle += '<td align="left">' bucket_keys_tabelle += '<a href="/acl_einsehen?bucket=' bucket_keys_tabelle += str(bucketname) bucket_keys_tabelle += '&typ=pur' bucket_keys_tabelle += '&key=' bucket_keys_tabelle += str(liste_keys[i].name) bucket_keys_tabelle += "&mobile=" bucket_keys_tabelle += str(mobile) if sprache == "de": bucket_keys_tabelle += '" title="einsehen/ändern">einsehen/ändern</a>' else: bucket_keys_tabelle += '" title="view/edit">view/edit</a>' bucket_keys_tabelle += '</td>' # In S3 and Google Storage, each MD5 checksum is enclosed by double quotes. # Eliminate them with .replace('"','') bucket_keys_tabelle += '<td align="right" bgcolor="#D4D4D4"><b>MD5:</b></td>' bucket_keys_tabelle += '<td align="left">'+str(liste_keys[i].etag.replace('"',''))+'</td>' bucket_keys_tabelle += '</tr>' bucket_keys_tabelle += '</table>' # Wenn man sich NICHT unter Amazon befindet, funktioniert der Download von Keys nicht. # if regionname != "Amazon": # if sprache == "de": # eucalyptus_warnung = '<B>Achtung!</B> Unter Eucalyptus 1.6 und 1.6.1 funktioniert der Download von Keys nicht. Dabei handelt es sich um einen Fehler von Eucalyptus. Es kommt zu dieser Fehlermeldung: <B>Failure: 500 Internal Server Error</B>' # else: # eucalyptus_warnung = '<B>Attention!</B> With Eucalyptus 1.6 and 1.6.1 the download of Keys is broken. This is a bug of Eucalyptus. The result is this error message: <B>Failure: 500 Internal Server Error</B>' # else: # eucalyptus_warnung = '' #Dokumentation zum Upload von Keys #http://docs.amazonwebservices.com/AmazonS3/latest/index.html?HTTPPOSTForms.html #http://doc.s3.amazonaws.com/proposals/post.html #http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1434 #http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html # Hier wird das Policy-Dokument erzeugt policy_document = '' policy_document = policy_document + '{' policy_document = policy_document + '"expiration": "2100-01-01T00:00:00Z",' policy_document = policy_document + '"conditions": [' policy_document = policy_document + '{"bucket": "'+bucketname+'"}, ' policy_document = policy_document + '["starts-with", "$acl", ""],' if mobile == "true": policy_document = policy_document + '{"success_action_redirect": "http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=true"},' else: policy_document = policy_document + '{"success_action_redirect": "http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=false"},' policy_document = policy_document + '["starts-with", "$key", ""],' policy_document = policy_document + '["starts-with", "$Content-Type", ""]' policy_document = policy_document + ']' policy_document = policy_document + '}' policy = base64.b64encode(policy_document) signature = base64.b64encode(hmac.new(AWSSecretAccessKeyId, policy, sha).digest()) keys_upload_formular = '' if zugangstyp == "Eucalyptus": endpointurl = endpointurl_erhalten(username,regionname) port = port_erhalten(username,regionname) keys_upload_formular += '<form action="http://'+str(endpointurl)+':'+str(port)+'/services/Walrus/'+bucketname+'" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "GoogleStorage": keys_upload_formular += '<form action="http://commondatastorage.googleapis.com/'+bucketname+'" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "HostEuropeCloudStorage": keys_upload_formular += '<form action="http://'+bucketname+'.cs.hosteurope.de' keys_upload_formular += '" method="post" enctype="multipart/form-data">\n' elif zugangstyp == "DunkelCloudStorage": keys_upload_formular += '<form action="http://'+bucketname+'.dcs.dunkel.de' keys_upload_formular += '" method="post" enctype="multipart/form-data">\n' else: keys_upload_formular += '<form action="http://s3.amazonaws.com/'+bucketname+'" method="post" enctype="multipart/form-data">\n' if mobile == "true": # mobile version... keys_upload_formular += '<table border="0" cellspacing="0" cellpadding="5">\n' keys_upload_formular += '<tr>\n' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="key" value="${filename}">\n' keys_upload_formular += '<select name="acl" size="1">\n' keys_upload_formular += '<option selected="selected">public-read</option>\n' keys_upload_formular += '<option>private</option>\n' keys_upload_formular += '<option>public-read-write</option>\n' keys_upload_formular += '<option>authenticated-read</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' keys_upload_formular += '<select name="Content-Type" size="1">\n' keys_upload_formular += '<option selected="selected">application/octet-stream</option>\n' keys_upload_formular += '<option>application/pdf</option>\n' keys_upload_formular += '<option>application/zip</option>\n' keys_upload_formular += '<option>audio/mp4</option>\n' keys_upload_formular += '<option>audio/mpeg</option>\n' keys_upload_formular += '<option>audio/ogg</option>\n' keys_upload_formular += '<option>audio/vorbis</option>\n' keys_upload_formular += '<option>image/gif</option>\n' keys_upload_formular += '<option>image/jpeg</option>\n' keys_upload_formular += '<option>image/png</option>\n' keys_upload_formular += '<option>image/tiff</option>\n' keys_upload_formular += '<option>text/html</option>\n' keys_upload_formular += '<option>text/plain</option>\n' keys_upload_formular += '<option>video/mp4</option>\n' keys_upload_formular += '<option>video/mpeg</option>\n' keys_upload_formular += '<option>video/ogg</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="success_action_redirect" value="http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=true">\n' keys_upload_formular += '<input type="hidden" name="AWSAccessKeyId" value="'+AWSAccessKeyId+'">\n' keys_upload_formular += '<input type="hidden" name="policy" value="'+policy+'">\n' keys_upload_formular += '<input type="hidden" name="signature" value="'+signature+'">\n' keys_upload_formular += '<input type="file" name="file" size="20">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' if sprache == "de": keys_upload_formular += '<input type="submit" value="Objekt in den Bucket hochladen">\n' else: keys_upload_formular += '<input type="submit" value="upload objekt into bucket">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '</table>' keys_upload_formular += '</form>' else: # Not the mobile version keys_upload_formular += '<table border="0" cellspacing="0" cellpadding="5">' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' keys_upload_formular += '<input type="hidden" name="key" value="${filename}">\n' keys_upload_formular += '<select name="acl" size="1">\n' keys_upload_formular += '<option selected="selected">public-read</option>\n' keys_upload_formular += '<option>private</option>\n' keys_upload_formular += '<option>public-read-write</option>\n' keys_upload_formular += '<option>authenticated-read</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '<select name="Content-Type" size="1">\n' keys_upload_formular += '<option selected="selected">application/octet-stream</option>\n' keys_upload_formular += '<option>application/pdf</option>\n' keys_upload_formular += '<option>application/zip</option>\n' keys_upload_formular += '<option>audio/mp4</option>\n' keys_upload_formular += '<option>audio/mpeg</option>\n' keys_upload_formular += '<option>audio/ogg</option>\n' keys_upload_formular += '<option>audio/vorbis</option>\n' keys_upload_formular += '<option>image/gif</option>\n' keys_upload_formular += '<option>image/jpeg</option>\n' keys_upload_formular += '<option>image/png</option>\n' keys_upload_formular += '<option>image/tiff</option>\n' keys_upload_formular += '<option>text/html</option>\n' keys_upload_formular += '<option>text/plain</option>\n' keys_upload_formular += '<option>video/mp4</option>\n' keys_upload_formular += '<option>video/mpeg</option>\n' keys_upload_formular += '<option>video/ogg</option>\n' keys_upload_formular += '</select>\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>\n' keys_upload_formular += '<input type="hidden" name="success_action_redirect" value="http://koalacloud.appspot.com/bucket_inhalt_pure?mobile=false">\n' keys_upload_formular += '<input type="hidden" name="AWSAccessKeyId" value="'+AWSAccessKeyId+'">\n' keys_upload_formular += '<input type="hidden" name="policy" value="'+policy+'">\n' keys_upload_formular += '<input type="hidden" name="signature" value="'+signature+'">\n' keys_upload_formular += '<input type="file" name="file" size="60">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '<tr>' keys_upload_formular += '<td>' if sprache == "de": keys_upload_formular += '<input type="submit" value="Objekt in den Bucket hochladen">\n' else: keys_upload_formular += '<input type="submit" value="upload objekt into bucket">\n' keys_upload_formular += '</td>' keys_upload_formular += '</tr>' keys_upload_formular += '</table>' keys_upload_formular += '</form>' # Unter Eucalyptus funktioniert das Hochladen von Keys nicht #else: # if sprache == "de": # keys_upload_formular = '<p> </p>\n Das Hochladen von Keys funktioniert unter Eucalyptus noch nicht' # else: # keys_upload_formular = '<p> </p>\n The key upload is still not working with Eucaplyptus' if laenge_liste_keys != 0: alle_keys_loeschen_button = '<p> </p>\n' alle_keys_loeschen_button += '<form action="/alle_keys_loeschen" method="get">\n' alle_keys_loeschen_button += '<input type="hidden" name="mobile" value="'+mobile+'">' alle_keys_loeschen_button += '<input type="hidden" name="s3_ansicht" value="pur"> \n' alle_keys_loeschen_button += '<input type="hidden" name="bucket_name" value="'+bucketname+'"> \n' if sprache == "de": alle_keys_loeschen_button += '<input type="submit" value="Alle Objekte löschen">\n' else: alle_keys_loeschen_button += '<input type="submit" value="Erase all objects">\n' alle_keys_loeschen_button += '</form>\n' else: alle_keys_loeschen_button = '' path = '&path=bucket_inhalt_pure&bucket='+bucketname+'&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'bucket_keys_tabelle': bucket_keys_tabelle, 'input_error_message': input_error_message, 'bucketname': bucketname, 'keys_upload_formular': keys_upload_formular, #'eucalyptus_warnung': eucalyptus_warnung, 'alle_keys_loeschen_button': alle_keys_loeschen_button, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "s3_keys_pur.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "s3_keys_pur.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Name des zu löschenden Load Balancers holen loadbalancer_name = self.request.get('name') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') #url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("61", "63", "66", "68"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green(input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "62", "64", "65", "67", "69"): input_error_message = format_error_message_red(input_error_message) else: input_error_message = "" try: # Liste mit den Instanzen # Man kann nicht direkt versuchen mit get_all_security_groups(gruppen_liste) # die anzulegende Gruppe zu erzeugen. Wenn die Gruppe noch nicht existiert, # gibt es eine Fehlermeldung liste_reservations = conn_region.get_all_instances() except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat und die Liste geholt wurde... # Anzahl der Elemente in der Liste laenge_liste_reservations = len(liste_reservations) if laenge_liste_reservations == "0": # Wenn es keine laufenden Instanzen gibt instanzen_in_region = 0 else: # Wenn es laufenden Instanzen gibt instanzen_in_region = 0 for i in liste_reservations: for x in i.instances: # Für jede Instanz wird geschaut... # ...ob die Instanz in der Region des Volumes liegt und läuft if x.state == u'running': instanzen_in_region = instanzen_in_region + 1 # Mit ELB verbinden conn_elb = loginelb(username) try: # Liste mit den LoadBalancern liste_load_balancers = conn_elb.get_all_load_balancers(load_balancer_names=str(loadbalancer_name)) except EC2ResponseError: # Wenn es nicht klappt... fehlermeldung = "10" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 fehlermeldung = "9" self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung) else: # Wenn es geklappt hat... tabelle_instanz_anhaengen = '' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<form action="/loadbalancer_instanz_zuordnen?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str(mobile) tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" method="post" accept-charset="utf-8">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<table border="0" cellspacing="0" cellpadding="5">\n' # Wenn dem Load Balancer noch keine Instanzen zugewiesen wurden... if len(liste_load_balancers[0].instances) == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Es wurden noch keine Instanzen zugewiesen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'No instances asigned yet' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' # Wenn dem Load Balancer schon Instanzen zugewiesen wurden... else: for z in range(len(liste_load_balancers[0].instances)): tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<a href="/loadbalancer_deregister_instance?loadbalancer=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + loadbalancer_name tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '&instanz=' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&mobile=" tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + str(mobile) if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="Instanz deregistrieren">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Instanz deregistrieren"></a>' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '" title="deregister instance">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister instance"></a>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td colspan="2">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[0].instances[z].id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].instances) != 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td> </td>\n' if instanzen_in_region == 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center" colspan="2">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'Sie haben keine Instanzen' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + 'You have no instances' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' else: if instanzen_in_region > 0: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<select name="instanzen" size="1">\n' for i in liste_reservations: for x in i.instances: if x.state == u'running': tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<option>' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + x.id tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</option>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</select>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<td align="center">\n' if sprache == "de": tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="verknüpfen">' else: tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '<input type="submit" value="associate">' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</td>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</tr>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</table>\n' tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + '</form>' try: # Liste mit den Zonen liste_zonen = conn_region.get_all_zones() except EC2ResponseError: # Wenn es nicht geklappt hat... if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": tabelle_zonen_aendern = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: tabelle_zonen_aendern = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Elemente in der Liste laenge_liste_zonen = len(liste_zonen) tabelle_zonen_aendern = '' tabelle_zonen_aendern = tabelle_zonen_aendern + '<form action="/loadbalancer_zone_zuordnen?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str(mobile) tabelle_zonen_aendern = tabelle_zonen_aendern + '" method="post" accept-charset="utf-8">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<table border="0" cellspacing="0" cellpadding="5">\n' for z in range(len(liste_load_balancers[0].availability_zones)): tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td>\n' # Wenn dem Load Balancer nur eine Zone zugewiesen ist... if len(liste_load_balancers[0].availability_zones) == 1: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalanceraendern?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&message=67' tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str(mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' # Wenn dem Load Balancer mehr als nur eine Zone zugewiesen ist... else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<a href="/loadbalancer_deregister_zone?loadbalancer=' tabelle_zonen_aendern = tabelle_zonen_aendern + loadbalancer_name tabelle_zonen_aendern = tabelle_zonen_aendern + '&zone=' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + "&mobile=" tabelle_zonen_aendern = tabelle_zonen_aendern + str(mobile) if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="Zone deregistrieren">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Zone deregistrieren"></a>' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '" title="deregister zone">' tabelle_zonen_aendern = tabelle_zonen_aendern + '<img src="bilder/stop.png" width="16" height="16" border="0" alt="deregister zone"></a>' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td colspan="2">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[0].availability_zones[z] tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<tr>\n' # Wenn mehr als eine Instanz dem Load Balancer zugewiesen ist, dann muss hier ein # leeres Feld hin. Sonst sieht die Tabelle nicht gut aus! if len(liste_load_balancers[0].availability_zones) != 0: tabelle_zonen_aendern = tabelle_zonen_aendern + '<td> </td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<select name="zonen" size="1">\n' for i in range(laenge_liste_zonen): tabelle_zonen_aendern = tabelle_zonen_aendern + '<option>' tabelle_zonen_aendern = tabelle_zonen_aendern + liste_zonen[i].name tabelle_zonen_aendern = tabelle_zonen_aendern + '</option>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</select>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '<td align="center">\n' if sprache == "de": tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="verknüpfen">' else: tabelle_zonen_aendern = tabelle_zonen_aendern + '<input type="submit" value="associate">' tabelle_zonen_aendern = tabelle_zonen_aendern + '\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</td>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</tr>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</table>\n' tabelle_zonen_aendern = tabelle_zonen_aendern + '</form>' path = '&path=loadbalanceraendern&name='+loadbalancer_name+'&mobile='+mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'load_balancer_name': loadbalancer_name, 'tabelle_instanz_anhaengen': tabelle_instanz_anhaengen, 'tabelle_zonen_aendern': tabelle_zonen_aendern, 'input_error_message': input_error_message, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "loadbalancer_change.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "loadbalancer_change.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Eventuell vorhande Fehlermeldung holen message = self.request.get('message') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) # It is Google Storage and not am IaaS if regionname == "GoogleStorage": template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, } path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "not_implemente_with_google_storage.html") self.response.out.write(template.render(path, template_values)) # It is not Google Storage. It is an IaaS else: if sprache != "de": sprache = "en" input_error_message = error_messages.get(message, {}).get(sprache) # Wenn keine Fehlermeldung gefunden wird, ist das Ergebnis "None" if input_error_message == None: input_error_message = "" # Wenn die Nachricht grün formatiert werden soll... if message in ("11", "13"): # wird sie hier, in der Hilfsfunktion grün formatiert input_error_message = format_error_message_green( input_error_message) # Ansonsten wird die Nachricht rot formatiert elif message in ("8", "12", "14"): input_error_message = format_error_message_red( input_error_message) else: input_error_message = "" try: # Liste mit den Snapshots liste_snapshots = conn_region.get_all_snapshots( owner="amazon") except EC2ResponseError: # Wenn es nicht klappt... if sprache == "de": snapshotstabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>' else: snapshotstabelle = '<font color="red">An error occured</font>' except DownloadError: # Diese Exception hilft gegen diese beiden Fehler: # DownloadError: ApplicationError: 2 timed out # DownloadError: ApplicationError: 5 if sprache == "de": snapshotstabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>' else: snapshotstabelle = '<font color="red">A timeout error occured</font>' else: # Wenn es geklappt hat... # Anzahl der Snapshots in der Liste laenge_liste_snapshots = len(liste_snapshots) if laenge_liste_snapshots == 0: if sprache == "de": snapshotstabelle = 'Es sind keine Snapshots in der Region vorhanden.' else: snapshotstabelle = 'No snapshots exist inside this region.' else: if mobile == "true": # Mobile version of the table snapshotstabelle = '' snapshotstabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">' counter = 0 for i in range(laenge_liste_snapshots): if counter > 0: snapshotstabelle += '<tr><td colspan="3"> </td></tr>' counter += 1 snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="left">' snapshotstabelle += '<a href="/snapshotsentfernen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) snapshotstabelle += "&ami=all" if sprache == "de": snapshotstabelle += '" title="Snapshot löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot löschen"></a>' else: snapshotstabelle += '" title="erase snapshot"><img src="bilder/delete.png" width="16" height="16" border="0" alt="snapshot volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '<td align="center">' snapshotstabelle += '<a href="/volumeaussnapshoterzeugen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) if sprache == "de": snapshotstabelle += '" title="Volume erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Volume erzeugen"></a>' else: snapshotstabelle += '" title="create volume"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>ID:</b></td>' snapshotstabelle += '<td align="center">' + liste_snapshots[ i].id + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>Volume:</b></td>' snapshotstabelle += '<td align="center"><tt>' + liste_snapshots[ i].volume_id + '</tt></td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Größe:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Size:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].volume_size ) + ' GB</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td colspan="2" align="right"><b>Status:</b></td>' if liste_snapshots[i].status == u'completed': snapshotstabelle += '<td bgcolor="#c3ddc3" align="center">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'pending': snapshotstabelle += '<td bgcolor="#ffffcc" align="center">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'deleting': snapshotstabelle += '<td bgcolor="#ffcc99" align="center">' + liste_snapshots[ i].status + '</td>' else: snapshotstabelle += '<td align="center">' + liste_snapshots[ i].status + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Besitzer:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Owner:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].owner_id) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Beschreibung:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Description:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].description) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Datum:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Start Time:</b></td>' snapshotstabelle += '<td align="center">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse( liste_snapshots[i].start_time) snapshotstabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td colspan="2" align="right"><b>Fortschritt:</b></td>' else: snapshotstabelle += '<td colspan="2" align="right"><b>Progress:</b></td>' snapshotstabelle += '<td align="center">' + str( liste_snapshots[i].progress) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '</table>' else: # Not the mobile version snapshotstabelle = '' snapshotstabelle += '<table border="0" cellspacing="0" cellpadding="5">' counter = 0 for i in range(laenge_liste_snapshots): if counter > 0: snapshotstabelle += '<tr><td colspan="4"> </td></tr>' counter += 1 snapshotstabelle += '<tr>' snapshotstabelle += '<td align="left" bgcolor="#D4D4D4">' snapshotstabelle += '<a href="/snapshotsentfernen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) snapshotstabelle += "&ami=all" if sprache == "de": snapshotstabelle += '" title="Snapshot löschen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot löschen"></a>' else: snapshotstabelle += '" title="erase snapshot"><img src="bilder/delete.png" width="16" height="16" border="0" alt="snapshot volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '<td colspan="3" bgcolor="#D4D4D4">' snapshotstabelle += '<a href="/volumeaussnapshoterzeugen?snapshot=' snapshotstabelle += liste_snapshots[i].id snapshotstabelle += "&mobile=" snapshotstabelle += str(mobile) if sprache == "de": snapshotstabelle += '" title="Volume erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Volume erzeugen"></a>' else: snapshotstabelle += '" title="create volume"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create volume"></a>' snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>' snapshotstabelle += '<td align="left">' + liste_snapshots[ i].id + '</td>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Status:</b></td>' if liste_snapshots[i].status == u'completed': snapshotstabelle += '<td bgcolor="#c3ddc3" align="left">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'pending': snapshotstabelle += '<td bgcolor="#ffffcc" align="left">' + liste_snapshots[ i].status + '</td>' elif liste_snapshots[i].status == u'deleting': snapshotstabelle += '<td bgcolor="#ffcc99" align="left">' + liste_snapshots[ i].status + '</td>' else: snapshotstabelle += '<td align="left">' + liste_snapshots[ i].status + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Größe:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Size:</b></td>' snapshotstabelle += '<td align="left">' + str( liste_snapshots[i].volume_size ) + ' GB</td>' snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Volume:</b></td>' snapshotstabelle += '<td align="left">' + liste_snapshots[ i].volume_id + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Fortschritt:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Progress:</b></td>' snapshotstabelle += '<td align="left">' + str( liste_snapshots[i].progress) + '</td>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Besitzer:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Owner:</b></td>' snapshotstabelle += '<td align="left">' + str( liste_snapshots[i].owner_id) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Start Time:</b></td>' snapshotstabelle += '<td colspan="3" align="left">' # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht. datum_der_erzeugung = parse( liste_snapshots[i].start_time) snapshotstabelle += str( datum_der_erzeugung.strftime( "%Y-%m-%d %H:%M:%S")) snapshotstabelle += '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '<tr>' if sprache == "de": snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Beschreibung:</b></td>' else: snapshotstabelle += '<td align="right" bgcolor="#D4D4D4"><b>Description:</b></td>' if liste_snapshots[i].description == "": snapshotstabelle += '<td align="left">---</td>' snapshotstabelle += '<td align="left" colspan="2"> </td>' else: snapshotstabelle += '<td colspan="3" align="left">' + str( liste_snapshots[i].description ) + '</td>' snapshotstabelle += '</tr>' snapshotstabelle += '</table>' if regionname == "Amazon": if sprache == "de": ansicht_amazon_button = '' ansicht_amazon_button += '<form action="/snapshots" method="get">\n' ansicht_amazon_button += '<input type="hidden" name="mobile" value="' + str( mobile) + '">\n' ansicht_amazon_button += '<input type="submit" value="Nur eigene Snapshots anzeigen">\n' ansicht_amazon_button += '</form>\n' ansicht_amazon_button += '<p> </p>\n' else: ansicht_amazon_button = '' ansicht_amazon_button += '<form action="/snapshots" method="get">\n' ansicht_amazon_button += '<input type="hidden" name="mobile" value="' + str( mobile) + '">\n' ansicht_amazon_button += '<input type="submit" value="show only your snapshots">\n' ansicht_amazon_button += '</form>\n' ansicht_amazon_button += '<p> </p>\n' else: ansicht_amazon_button = "" path = '&path=snapshots_amazon_all&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'snapshotstabelle': snapshotstabelle, 'zonen_liste': zonen_liste, 'input_error_message': input_error_message, 'ansicht_amazon_button': ansicht_amazon_button, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "snapshots.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "snapshots.html") self.response.out.write(template.render(path, template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Name des zu anzuhängenden Volumes holen volume = self.request.get('volume') # Name der Zone holen volume_zone = self.request.get('zone') # Den Usernamen erfahren username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache,mobile) url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username,sprache,mobile) liste_reservations = conn_region.get_all_instances() # Anzahl der Elemente in der Liste laenge_liste_reservations = len(liste_reservations) if laenge_liste_reservations == "0": # Wenn es keine laufenden Instanzen gibt instanzen_in_region = 0 else: # Wenn es laufenden Instanzen gibt instanzen_in_region = 0 for i in liste_reservations: for x in i.instances: # Für jede Instanz wird geschaut... # ...ob die Instanz in der Region des Volumes liegt und läuft if x.placement == volume_zone and x.state == u'running': instanzen_in_region = instanzen_in_region + 1 tabelle_anhaengen = '' tabelle_anhaengen = tabelle_anhaengen + '<form action="/volumedefinitivanhaengen?volume=' tabelle_anhaengen = tabelle_anhaengen + volume tabelle_anhaengen = tabelle_anhaengen + '" method="post" accept-charset="utf-8">\n' tabelle_anhaengen = tabelle_anhaengen + '<input type="hidden" name="mobile" value="'+mobile+'">\n' tabelle_anhaengen = tabelle_anhaengen + '<table border="0" cellspacing="0" cellpadding="5">' tabelle_anhaengen += '<tr>' if sprache == "de": tabelle_anhaengen += '<td align="right"><B>Volumen:</B></td>' else: tabelle_anhaengen += '<td align="right"><B>Volume:</B></td>' tabelle_anhaengen += '<td>'+volume+'</td>' tabelle_anhaengen += '</tr>' tabelle_anhaengen += '<tr>' if sprache == "de": tabelle_anhaengen = tabelle_anhaengen + '<td align="right"><B>Instanzen:</B></td>' else: tabelle_anhaengen = tabelle_anhaengen + '<td align="right"><B>Instances:</B></td>' tabelle_anhaengen = tabelle_anhaengen + '<td>' if instanzen_in_region == 0: if sprache == "de": tabelle_anhaengen += 'Sie haben keine Instanzen in dieser Region <b>'+volume_zone+'</b></td>' else: tabelle_anhaengen += 'You have still no instances in this region <b>'+volume_zone+'</b></td>' else: if instanzen_in_region > 0: tabelle_anhaengen = tabelle_anhaengen + '<select name="instanzen" size="1">' for i in liste_reservations: for x in i.instances: if x.placement == volume_zone and x.state == u'running': tabelle_anhaengen = tabelle_anhaengen + '<option>' tabelle_anhaengen = tabelle_anhaengen + x.id tabelle_anhaengen = tabelle_anhaengen + '</option>' tabelle_anhaengen = tabelle_anhaengen + '</select>' tabelle_anhaengen = tabelle_anhaengen + '</td>' tabelle_anhaengen = tabelle_anhaengen + '</tr>' tabelle_anhaengen = tabelle_anhaengen + '<tr>' if sprache == "de": tabelle_anhaengen = tabelle_anhaengen + '<td align="right"><B>Gerät:</B></td>' else: tabelle_anhaengen = tabelle_anhaengen + '<td align="right"><B>Device:</B></td>' tabelle_anhaengen = tabelle_anhaengen + '<td>' tabelle_anhaengen = tabelle_anhaengen + '<select name="device" size="1">' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sda</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdb</option>' tabelle_anhaengen = tabelle_anhaengen + '<option selected="selected">/dev/sdc</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdd</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sde</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdf</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdg</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdh</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdu</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdj</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdk</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdl</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdm</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdn</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdo</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdp</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdq</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdr</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sds</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdt</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdu</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdv</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdw</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdx</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdy</option>' tabelle_anhaengen = tabelle_anhaengen + '<option>/dev/sdz</option>' tabelle_anhaengen = tabelle_anhaengen + '</select>' tabelle_anhaengen = tabelle_anhaengen + '</td>' tabelle_anhaengen = tabelle_anhaengen + '</tr>' tabelle_anhaengen = tabelle_anhaengen + '<tr>' tabelle_anhaengen = tabelle_anhaengen + '<td align="left" colspan="2">' tabelle_anhaengen = tabelle_anhaengen + '\n' if instanzen_in_region == 0: tabelle_anhaengen = tabelle_anhaengen + ' ' else: if sprache == "de": tabelle_anhaengen = tabelle_anhaengen + '<input type="submit" value="Volumen anhängen">' else: tabelle_anhaengen = tabelle_anhaengen + '<input type="submit" value="attach volume">' tabelle_anhaengen = tabelle_anhaengen + '\n' tabelle_anhaengen = tabelle_anhaengen + '</td>' tabelle_anhaengen = tabelle_anhaengen + '</tr>' tabelle_anhaengen = tabelle_anhaengen + '</table>' tabelle_anhaengen = tabelle_anhaengen + '</form>' if regionname != "Amazon": # Wenn die Region nicht Amazon EC2, sondern Eucalyptus ist... if sprache == "de": # ... und die Sprache deutsch ist ... ebs_volumes_eucalyptus_warnung = '<font color="red">Achtung! Das Verbinden von Volumes mit Instanzen dauert unter Eucalyptus teilweise mehrere Minuten.</font>' else: # ... und die Sprache englisch ist ... ebs_volumes_eucalyptus_warnung = '<font color="red">Attention! Attaching volumes with Instances at Eucalyptus needs some time (several minutes).</font>' else: # Wenn die Region Amazon EC2 ist... ebs_volumes_eucalyptus_warnung = "<p> </p>" path = '&path=volumeanhaengen&mobile='+mobile+'&volume='+volume+'&zone='+volume_zone template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'tabelle_anhaengen': tabelle_anhaengen, 'ebs_volumes_eucalyptus_warnung': ebs_volumes_eucalyptus_warnung, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "volume_anhaengen.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "volume_anhaengen.html") self.response.out.write(template.render(path,template_values))
def get(self): mobile = self.request.get('mobile') if mobile != "true": mobile = "false" # Den Namen des Volumes holen # Get the name of the volume volume = self.request.get('volume') # Name der Zone holen volume_zone = self.request.get('zone') # Den Usernamen erfahren # Get the username username = users.get_current_user() if not username: self.redirect('/') # Nachsehen, ob eine Region/Zone ausgewählte wurde aktivezone = db.GqlQuery( "SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username) results = aktivezone.fetch(100) if not results: self.redirect('/') else: # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache sprache = aktuelle_sprache(username) navigations_bar = navigations_bar_funktion(sprache, mobile) url = users.create_logout_url(self.request.uri).replace( '&', '&').replace('&amp;', '&') url_linktext = 'Logout' conn_region, regionname = login(username) zone_amazon = amazon_region(username) zonen_liste = zonen_liste_funktion(username, sprache, mobile) tabelle_snapshot = '' tabelle_snapshot += '<form action="/snapshoterzeugendefinitiv" method="post" accept-charset="utf-8"> \n' tabelle_snapshot += '<input type="hidden" name="mobile" value="' + mobile + '">\n' tabelle_snapshot += '<input type="hidden" name="volume" value="' + volume + '">\n' tabelle_snapshot += '<table border="0" cellspacing="0" cellpadding="5">\n' tabelle_snapshot += '<tr><td align="left"><B>Volume: </B>' + volume + '</td></tr>\n' if sprache == "de": tabelle_snapshot += '<tr><td align="left"><B>Beschreibung:</B></td></tr>\n' else: tabelle_snapshot += '<tr><td align="left"><B>Description:</B></td></tr>\n' if mobile == "true": tabelle_snapshot += '<tr><td><input name="beschreibung" type="text" size="40" maxlength="40"></td></tr>\n' else: tabelle_snapshot += '<tr><td><input name="beschreibung" type="text" size="60" maxlength="60"></td></tr>\n' if sprache == "de": tabelle_snapshot += '<tr><td align="left"><input type="submit" value="Snapshot erzeugen"></td></tr>\n' else: tabelle_snapshot += '<tr><td align="left"><input type="submit" value="create snapshot"></td></tr>\n' tabelle_snapshot += '</table>' tabelle_snapshot += '</form>' # path = '&path=volumes' path = '&path=snapshoterzeugen&volume=' + volume + '&mobile=' + mobile template_values = { 'navigations_bar': navigations_bar, 'url': url, 'url_linktext': url_linktext, 'zone': regionname, 'zone_amazon': zone_amazon, 'zonen_liste': zonen_liste, 'tabelle_snapshot': tabelle_snapshot, 'mobile': mobile, 'path': path, } if mobile == "true": path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "snapshot_erzeugen.html") else: path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "snapshot_erzeugen.html") self.response.out.write(template.render(path, template_values))