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) 
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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)
          
Exemple #7
0
    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))
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
    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)
            
Exemple #12
0
    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)
          
Exemple #18
0
    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)
          
Exemple #20
0
    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)
Exemple #21
0
    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)
Exemple #22
0
    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('&', '&amp;').replace('&amp;amp;', '&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&uuml;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('&', '&amp;').replace('&amp;amp;', '&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(
                '&', '&amp;').replace('&amp;amp;', '&amp;')
            url_linktext = 'Logout'

            conn_region, regionname = login(username)
            zone_amazon = amazon_region(username)

            zonen_liste = zonen_liste_funktion(username, sprache, mobile)

            path = '&amp;path=alle_keys_loeschen&amp;mobile=' + mobile + '&amp;s3_ansicht=' + s3_ansicht + '&amp;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)
Exemple #27
0
    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)
Exemple #30
0
    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('&', '&amp;').replace('&amp;amp;', '&amp;')
          url_linktext = 'Logout'

          conn_region, regionname = login(username)
          zone_amazon = amazon_region(username)

          zonen_liste = zonen_liste_funktion(username,sprache,mobile)

          path = '&amp;path=alle_volumes_loeschen&amp;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)
Exemple #35
0
    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)
Exemple #36
0
    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)
Exemple #37
0
    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('&', '&amp;').replace('&amp;amp;', '&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 = '&amp;path=schluessel&amp;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 = '&amp;path=zonen&amp;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&uuml;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">&nbsp;</td></tr>'
                        counter += 1
                      
                        keytabelle += '<tr>'
                        keytabelle += '<td>'
                        keytabelle += '<a href="/schluesselentfernen?key='
                        keytabelle += liste_key_pairs[i].name
                        keytabelle += "&amp;mobile="
                        keytabelle += str(mobile)
                        keytabelle += '"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Schl&uuml;sselpaar l&ouml;schen"></a>'
                        keytabelle += '</td>'
                        keytabelle += '<td>'+liste_key_pairs[i].name+'</td>'
                        keytabelle += '</tr>'
#                        keytabelle += '<tr>'
#                        keytabelle += '<td>&nbsp;</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>&nbsp;</th>'
                    keytabelle += '<th align="center">Name</th>'
                    if sprache == "de":
                      keytabelle += '<th align="center">Pr&uuml;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 += "&amp;mobile="
                        keytabelle += str(mobile)
                        keytabelle += '"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Schl&uuml;sselpaar l&ouml;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>&nbsp;<\/P>")
#  OpenWindow.document.write("<tt>'''
#                javascript_funktion = javascript_funktion + secretkey_memcache
#                if sprache == "de":
#                  javascript_funktion = javascript_funktion + '''<\/tt>")
#                  OpenWindow.document.write("<P>&nbsp;<\/P>")
#                  OpenWindow.document.write("<B>Achtung!<\/B> Den Secret Key m&uuml;ssen Sie speichern.<BR>")
#                  OpenWindow.document.write("Am besten in einer Datei <tt>'''
#                else:
#                  javascript_funktion = javascript_funktion + '''<\/tt>")
#                  OpenWindow.document.write("<P>&nbsp;<\/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>&nbsp;<\/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&uuml;ssel</b>'
                else:
                  new_keypair_secretkey += '<b>Your new secret key</b>'
                new_keypair_secretkey += '<p>&nbsp;</p>'
                new_keypair_secretkey += '<tt>'+secretkey_memcache+'</tt>'
                new_keypair_secretkey += '<p>&nbsp;</p>'
                if sprache == "de":
                  new_keypair_secretkey += '<b>Achtung!</b> Ihren geheimen Schl&uuml;ssel m&uuml;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>&nbsp;</p>'         
                
                
                new_keypair_secretkey_download_link = ''
                new_keypair_secretkey_download_link += '<a href="'+secretkey_memcache+'">'+neuerkeyname+'.secret</a>'
                new_keypair_secretkey_download_link += '<p>&nbsp;</p>' 
                                       
              else:
                  # neu ist nicht "ja"
#                  bodycommand = " "
#                  javascript_funktion = " "
                  new_keypair_secretkey = ""
                  new_keypair_secretkey_download_link = ""
  
              path = '&amp;path=schluessel&amp;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))
Exemple #38
0
    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('&', '&amp;').replace('&amp;amp;', '&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 = '&amp;path=securitygroups&amp;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 = '&amp;path=zonen&amp;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">&nbsp;</td></tr>'
                      counter += 1
                    
                      gruppentabelle += '<tr>'
                      gruppentabelle += '<td width="75">'
                      gruppentabelle += '<a href="/gruppenentfernen?gruppe='
                      gruppentabelle += liste_security_groups[i].name
                      gruppentabelle += "&amp;mobile="
                      gruppentabelle += str(mobile)
                      if sprache == "de":
                        gruppentabelle += '" title=" Sicherheitsgruppe l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe l&ouml;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 += "&amp;mobile="
                      gruppentabelle += str(mobile)
                      if sprache == "de":
                        gruppentabelle += '" title="Regeln einsehen/&auml;ndern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/&auml;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">&nbsp;</td></tr>'
                      counter += 1
                    
                      gruppentabelle += '<tr>'
                      gruppentabelle += '<td align="left" bgcolor="#D4D4D4">'
                      gruppentabelle += '<a href="/gruppenentfernen?gruppe='
                      gruppentabelle += liste_security_groups[i].name
                      gruppentabelle += "&amp;mobile="
                      gruppentabelle += str(mobile)
                      if sprache == "de":
                        gruppentabelle += '" title=" Sicherheitsgruppe l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Security Gruppe l&ouml;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 += "&amp;mobile="
                      gruppentabelle += str(mobile)
                      if sprache == "de":
                        gruppentabelle += '" title="Regeln einsehen/&auml;ndern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Regeln einsehen/&auml;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 = '&amp;path=securitygroups&amp;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))
Exemple #39
0
    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('&', '&amp;').replace('&amp;amp;', '&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 &Auml;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 = '&amp;path=s3&amp;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))
Exemple #40
0
    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)
Exemple #41
0
    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('&', '&amp;').replace('&amp;amp;', '&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>&nbsp;</p> <font color="red">Beim Versuch die Konsolenausgabe der Instanz zu holen, kam es zu einem Fehler</font>'
            else:
              fehlermeldung = '<p>&nbsp;</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>&nbsp;</p> <font color="red">Beim Versuch die Konsolenausgabe der Instanz zu holen, kam es zu einem Timeout-Fehler.</font>'
            else:
              fehlermeldung = '<p>&nbsp;</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(" ", "&nbsp;").replace("", "&nbsp;")
              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(
                '&', '&amp;').replace('&amp;amp;', '&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 + "&amp;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 + '&amp;instanz='
                            tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[
                                0].instances[z].id
                            tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&amp;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>&nbsp;</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&uuml;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 + "&amp;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 + '&amp;message=67'
                                tabelle_zonen_aendern = tabelle_zonen_aendern + "&amp;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 + '&amp;zone='
                                tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[
                                    0].availability_zones[z]
                                tabelle_zonen_aendern = tabelle_zonen_aendern + "&amp;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>&nbsp;</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&uuml;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 = '&amp;path=loadbalanceraendern&amp;name=' + loadbalancer_name + '&amp;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))
Exemple #43
0
    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)
Exemple #44
0
    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)
Exemple #45
0
    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(
                '&', '&amp;').replace('&amp;amp;', '&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 = '&amp;path=zonen&amp;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 = '&amp;path=zonen&amp;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&uuml;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 = '&amp;path=zonen&amp;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))
Exemple #46
0
    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(
                '&', '&amp;').replace('&amp;amp;', '&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&uuml;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(
                '&', '&amp;').replace('&amp;amp;', '&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(
            '&', '&amp;').replace('&amp;amp;', '&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>&nbsp;</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 += "&amp;mobile="
                                regelntabelle += str(mobile)
                                regelntabelle += '&amp;gruppe='
                                regelntabelle += gruppe
                                regelntabelle += '" title="Regel l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Regel l&ouml;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 = '&amp;path=gruppenaendern&amp;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(
                '&', '&amp;').replace('&amp;amp;', '&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&uuml;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 = '&amp;path=associate_address&amp;address=' + address + '&amp;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))
Exemple #49
0
    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('&', '&amp;').replace('&amp;amp;', '&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">&nbsp;</td></tr>'
                    counter += 1
                    
                    bucket_keys_tabelle += '<tr>'
                    if liste_keys[i].name == None and regionname != "Amazon":
                      bucket_keys_tabelle += '<td>&nbsp;</td>'
                    else:
                      bucket_keys_tabelle += '<td>'
                      bucket_keys_tabelle += '<a href="/bucketkeyentfernen?bucket='
                      bucket_keys_tabelle += str(bucketname)
                      bucket_keys_tabelle += '&amp;typ=pur'
                      bucket_keys_tabelle += '&amp;key='
                      bucket_keys_tabelle += str(liste_keys[i].name)
                      bucket_keys_tabelle += "&amp;mobile="
                      bucket_keys_tabelle += str(mobile)
                      if sprache == "de":
                        bucket_keys_tabelle += '" title="Key l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key l&ouml;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('&', '&amp;').replace('&amp;amp;', '&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('&', '&amp;').replace('&amp;amp;', '&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&ouml;&szlig;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 += '&nbsp;'
                    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 += '&nbsp;'
                    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 += '&amp;typ=pur'
                    bucket_keys_tabelle += '&amp;key='
                    bucket_keys_tabelle += str(liste_keys[i].name)
                    bucket_keys_tabelle += "&amp;mobile="
                    bucket_keys_tabelle += str(mobile)
                    if sprache == "de":
                      bucket_keys_tabelle += '" title="einsehen/&auml;ndern">einsehen/&auml;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">&nbsp;</td></tr>'
                    counter += 1
                    
                    bucket_keys_tabelle += '<tr>'
                    if liste_keys[i].name == None and regionname != "Amazon":
                      bucket_keys_tabelle += '<td>&nbsp;</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 += '&amp;typ=pur'
                      bucket_keys_tabelle += '&amp;key='
                      bucket_keys_tabelle += str(liste_keys[i].name)
                      bucket_keys_tabelle += "&amp;mobile="
                      bucket_keys_tabelle += str(mobile)
                      if sprache == "de":
                        bucket_keys_tabelle += '" title="Key l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Key l&ouml;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">&nbsp;</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('&', '&amp;').replace('&amp;amp;', '&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('&', '&amp;').replace('&amp;amp;', '&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&ouml;&szlig;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 += '&nbsp;'
                    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 += '&nbsp;'
                    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 += '&amp;typ=pur'
                    bucket_keys_tabelle += '&amp;key='
                    bucket_keys_tabelle += str(liste_keys[i].name)
                    bucket_keys_tabelle += "&amp;mobile="
                    bucket_keys_tabelle += str(mobile)
                    if sprache == "de":
                      bucket_keys_tabelle += '" title="einsehen/&auml;ndern">einsehen/&auml;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>&nbsp;</p>\n Das Hochladen von Keys funktioniert unter Eucalyptus noch nicht'
          #  else:
          #    keys_upload_formular = '<p>&nbsp;</p>\n The key upload is still not working with Eucaplyptus'


          if laenge_liste_keys != 0:
            alle_keys_loeschen_button = '<p>&nbsp;</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&ouml;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 = '&amp;path=bucket_inhalt_pure&amp;bucket='+bucketname+'&amp;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('&', '&amp;').replace('&amp;amp;', '&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 + "&amp;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 + '&amp;instanz='
                  tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + liste_load_balancers[0].instances[z].id
                  tabelle_instanz_anhaengen = tabelle_instanz_anhaengen + "&amp;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>&nbsp;</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&uuml;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 + "&amp;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 + '&amp;message=67'
                    tabelle_zonen_aendern = tabelle_zonen_aendern + "&amp;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 + '&amp;zone='
                    tabelle_zonen_aendern = tabelle_zonen_aendern + liste_load_balancers[0].availability_zones[z]
                    tabelle_zonen_aendern = tabelle_zonen_aendern + "&amp;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>&nbsp;</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&uuml;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 = '&amp;path=loadbalanceraendern&amp;name='+loadbalancer_name+'&amp;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(
                '&', '&amp;').replace('&amp;amp;', '&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">&nbsp;</td></tr>'
                                counter += 1

                                snapshotstabelle += '<tr>'
                                snapshotstabelle += '<td colspan="2" align="left">'
                                snapshotstabelle += '<a href="/snapshotsentfernen?snapshot='
                                snapshotstabelle += liste_snapshots[i].id
                                snapshotstabelle += "&amp;mobile="
                                snapshotstabelle += str(mobile)
                                snapshotstabelle += "&amp;ami=all"
                                if sprache == "de":
                                    snapshotstabelle += '" title="Snapshot l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot l&ouml;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 += "&amp;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&ouml;&szlig;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">&nbsp;</td></tr>'
                                counter += 1

                                snapshotstabelle += '<tr>'
                                snapshotstabelle += '<td align="left" bgcolor="#D4D4D4">'
                                snapshotstabelle += '<a href="/snapshotsentfernen?snapshot='
                                snapshotstabelle += liste_snapshots[i].id
                                snapshotstabelle += "&amp;mobile="
                                snapshotstabelle += str(mobile)
                                snapshotstabelle += "&amp;ami=all"
                                if sprache == "de":
                                    snapshotstabelle += '" title="Snapshot l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Snapshot l&ouml;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 += "&amp;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&ouml;&szlig;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">&nbsp;</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>&nbsp;</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>&nbsp;</p>\n'
                else:
                    ansicht_amazon_button = ""

                path = '&amp;path=snapshots_amazon_all&amp;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('&', '&amp;').replace('&amp;amp;', '&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&auml;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 + '&nbsp;'
          else:
            if sprache == "de":
              tabelle_anhaengen = tabelle_anhaengen + '<input type="submit" value="Volumen anh&auml;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>&nbsp;</p>"
  
          path = '&amp;path=volumeanhaengen&amp;mobile='+mobile+'&amp;volume='+volume+'&amp;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))

          
Exemple #53
0
    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(
                '&', '&amp;').replace('&amp;amp;', '&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 = '&amp;path=volumes'
            path = '&amp;path=snapshoterzeugen&amp;volume=' + volume + '&amp;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))