예제 #1
0
파일: Info.py 프로젝트: Smedira/koalacloud
    def get(self):
        mobile = self.request.get('mobile')
        # Den Usernamen erfahren
        username = users.get_current_user()

        if users.get_current_user():
            # Nachsehen, ob eine Region/Zone ausgewählte wurde
            aktivezone = db.GqlQuery("SELECT * FROM KoalaCloudDatenbankAktiveZone WHERE user = :username_db", username_db=username)
            results = aktivezone.fetch(100)

            if not results:
              regionname = '---'
              zone_amazon = ""
            else:
              conn_region, regionname = login(username)
              zone_amazon = amazon_region(username)

            # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache
            sprache = aktuelle_sprache(username)
            navigations_bar = navigations_bar_funktion(sprache,mobile)

            url = users.create_logout_url(self.request.uri).replace('&', '&').replace('&', '&')
            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))
예제 #2
0
    def get(self):
        # Den Usernamen erfahren
        username = users.get_current_user()

        if users.get_current_user():
            hint = '&nbsp;'

            # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache
            # See if a language has already been chosen
            sprache = aktuelle_sprache(username)
            navigations_bar = navigations_bar_funktion(sprache)

            url = users.create_logout_url(self.request.uri).replace(
                '&', '&amp;').replace('&amp;amp;', '&amp;')
            url_linktext = 'Logout'

            # Nachsehen, ob schon Zugansdaten eingegeben wurden
            zugansdaten_vorhanden = db.GqlQuery(
                "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db",
                username_db=username)
            results = zugansdaten_vorhanden.fetch(100)
            if not results:
                # If the user has still no credentials for cloud storage services
                if sprache == "de":
                    hint = '<font color="red"><b>Sie m&uuml;ssen nun ihre Zugangsdaten einrichten</b></font>'
                else:
                    hint = '<font color="red"><b>Now, you need to configure your Credentials</b></font>'
            else:
                hint = ''

        else:
            # If the user is not logged in or has no account yet...
            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'

            hint = '<font color="red"><b><=== You need to login first with your Google account!</b></font>'

        template_values = {
            'navigations_bar': navigations_bar,
            'url': url,
            'url_linktext': url_linktext,
            'hint': hint,
        }

        path = os.path.join(os.path.dirname(__file__), "../templates", sprache,
                            "start.html")
        self.response.out.write(template.render(path, template_values))
예제 #3
0
    def get(self):
        # Get the username
        username = users.get_current_user()
        if not username:
            # If no user is logged in, jump back to root
            self.redirect('/')

        # Datastore query that checks if any credentials for this user exist
        testen = db.GqlQuery(
            "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db",
            username_db=username)

        results = testen.fetch(100)

        if not results:
            # If no credentials exist, jump back to root
            self.redirect('/')
        else:
            sprache = aktuelle_sprache(username)
            navigations_bar = navigations_bar_funktion(sprache)
            url = users.create_logout_url(self.request.uri).replace(
                '&', '&amp;').replace('&amp;amp;', '&amp;')
            url_linktext = 'Logout'

            template_values = {
                'navigations_bar': navigations_bar,
                'url': url,
                'url_linktext': url_linktext,
            }

            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"
        # 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"
        # 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))
예제 #6
0
    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))
예제 #7
0
    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))
예제 #8
0
파일: Zonen.py 프로젝트: Smedira/koalacloud
    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))
예제 #9
0
    def get(self):
        message = self.request.get('message')
        neuerzugang = self.request.get('neuerzugang')
        # Den Usernamen erfahren
        # Get the username
        username = users.get_current_user()
        # self.response.out.write('posted!')

        # Wir müssen das so machen, weil wir sonst nicht weiterkommen,
        # wenn ein Benutzer noch keinen Zugang eingerichtet hat.
        if users.get_current_user():
            sprache = aktuelle_sprache(username)
            navigations_bar = navigations_bar_funktion(sprache)

            url = users.create_logout_url(self.request.uri).replace(
                '&', '&amp;').replace('&amp;amp;', '&amp;')
            url_linktext = 'Logout'

            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 ("127", "128", "129"):
                input_error_message = format_error_message_green(
                    input_error_message)
            elif message in ("89", "90", "91", "92", "93", "94", "95", "96",
                             "97", "98", "99"):
                # Ansonsten wird die Nachricht rot formatiert
                input_error_message = format_error_message_red(
                    input_error_message)
            else:
                input_error_message = ""

            Amazon_vorhanden = "false"
            Eucalyptus_vorhanden = "false"
            GoogleStorage_vorhanden = "false"

            # Erst überprüfen, ob schon ein Eintrag dieses Benutzers vorhanden ist.
            testen = db.GqlQuery(
                "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db",
                username_db=username)
            # Wie viele Einträge des Benutzers sind schon vorhanden?
            anzahl = testen.count()
            # Alle Einträge des Benutzers holen?
            results = testen.fetch(100)

            if anzahl:
                # wenn schon Einträge für den Benutzer vorhanden sind...
                tabelle_logins = ''
                tabelle_logins = tabelle_logins + '<table border="3" cellspacing="0" cellpadding="5">'
                tabelle_logins = tabelle_logins + '<tr>'
                tabelle_logins = tabelle_logins + '<th>&nbsp;</th>'
                if sprache == "de":
                    tabelle_logins = tabelle_logins + '<th align="center">Speicherdienst</th>'
                    tabelle_logins = tabelle_logins + '<th align="center">Adresse (URL)</th>'
                    tabelle_logins = tabelle_logins + '<th align="center">Access Key</th>'
                    tabelle_logins = tabelle_logins + '<th align="center">Name (Beschreibung)</th>'
                else:
                    tabelle_logins = tabelle_logins + '<th align="center">Storage Service</th>'
                    tabelle_logins = tabelle_logins + '<th align="center">Endpoint URL</th>'
                    tabelle_logins = tabelle_logins + '<th align="center">Access Key</th>'
                    tabelle_logins = tabelle_logins + '<th align="center">Name (Description)</th>'
                tabelle_logins = tabelle_logins + '</tr>'
                for test in results:
                    tabelle_logins = tabelle_logins + '<tr>'
                    tabelle_logins = tabelle_logins + '<td>'
                    tabelle_logins = tabelle_logins + '<a href="/zugangentfernen?region='
                    tabelle_logins = tabelle_logins + str(test.regionname)
                    tabelle_logins = tabelle_logins + '&amp;endpointurl='
                    tabelle_logins = tabelle_logins + str(test.endpointurl)
                    tabelle_logins = tabelle_logins + '&amp;accesskey='
                    tabelle_logins = tabelle_logins + str(test.accesskey)
                    if sprache == "de":
                        tabelle_logins = tabelle_logins + '" title="Zugang l&ouml;schen'
                    else:
                        tabelle_logins = tabelle_logins + '" title="erase credentials'
                    tabelle_logins = tabelle_logins + '"><img src="bilder/delete.png" width="16" height="16" border="0"'
                    if sprache == "de":
                        tabelle_logins = tabelle_logins + ' alt="Zugang l&ouml;schen"></a>'
                    else:
                        tabelle_logins = tabelle_logins + ' alt="erase credentials"></a>'
                    tabelle_logins = tabelle_logins + '</td>'
                    tabelle_logins = tabelle_logins + '<td align="center">'
                    tabelle_logins = tabelle_logins + str(test.zugangstyp)

                    if str(test.zugangstyp) == "Amazon":
                        Amazon_vorhanden = "true"
                    if str(test.zugangstyp) == "Eucalyptus":
                        Eucalyptus_vorhanden = "true"
                    if str(test.zugangstyp) == "GoogleStorage":
                        Eucalyptus_vorhanden = "true"

                    tabelle_logins = tabelle_logins + '</td>'
                    tabelle_logins = tabelle_logins + '<td align="center">'
                    tabelle_logins = tabelle_logins + str(test.endpointurl)
                    tabelle_logins = tabelle_logins + '</td>'
                    tabelle_logins = tabelle_logins + '<td align="left">'
                    tabelle_logins = tabelle_logins + str(test.accesskey)
                    tabelle_logins = tabelle_logins + '</td>'
                    tabelle_logins = tabelle_logins + '<td align="left">'
                    tabelle_logins = tabelle_logins + test.eucalyptusname
                    tabelle_logins = tabelle_logins + '</td>'
                    tabelle_logins = tabelle_logins + '</tr>'
                tabelle_logins = tabelle_logins + '</table>'
            else:
                # wenn noch keine Einträge für den Benutzer vorhanden sind...
                if sprache == "de":
                    tabelle_logins = 'Sie haben noch keine Login-Daten eingegeben'
                else:
                    tabelle_logins = 'No credentials available'
                tabelle_logins = tabelle_logins + '<p>&nbsp;</p>'

            if neuerzugang == "eucalyptus":
                if Eucalyptus_vorhanden != "true":
                    eingabefelder = '<p>&nbsp;</p>'
                    eingabefelder = eingabefelder + '<form action="/zugangeinrichten" method="post" accept-charset="utf-8">'
                    eingabefelder = eingabefelder + '<input type="hidden" name="typ" value="eucalyptus">'
                    eingabefelder = eingabefelder + '<table border="0" cellspacing="5" cellpadding="5">'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '  <td></td>'
                    if sprache == "de":
                        eingabefelder = eingabefelder + '    <td><font color="green">Der Name ist nur zur Unterscheidung</font></td>'
                    else:
                        eingabefelder = eingabefelder + '    <td><font color="green">Choose one you like</font></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Name:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="nameregion" value="">'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '  <td></td>'
                    if sprache == "de":
                        eingabefelder = eingabefelder + '    <td><font color="green">Nur die IP oder DNS ohne <tt>/services/Eucalyptus</tt></font></td>'
                    else:
                        eingabefelder = eingabefelder + '    <td><font color="green">Just the IP or DNS without <tt>/services/Eucalyptus</tt></font></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Endpoint URL:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="endpointurl" value="">'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '  <td></td>'
                    if sprache == "de":
                        eingabefelder = eingabefelder + '    <td><font color="green">Google App Engine akzeptiert nur diese Ports</font></td>'
                    else:
                        eingabefelder = eingabefelder + '    <td><font color="green">Google App Engine accepts only these ports</font></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Port:</td>'
                    #eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="5" maxlength="5" name="port" value=""></td>'
                    eingabefelder = eingabefelder + '    <td colspan="2">'
                    eingabefelder = eingabefelder + '      <select name="port" size="1">'
                    eingabefelder = eingabefelder + '        <option>80</option>'
                    eingabefelder = eingabefelder + '        <option>443</option>'
                    eingabefelder = eingabefelder + '        <option>4443</option>'
                    eingabefelder = eingabefelder + '        <option>8080</option>'
                    eingabefelder = eingabefelder + '        <option>8081</option>'
                    eingabefelder = eingabefelder + '        <option>8082</option>'
                    eingabefelder = eingabefelder + '        <option>8083</option>'
                    eingabefelder = eingabefelder + '        <option>8084</option>'
                    eingabefelder = eingabefelder + '        <option>8085</option>'
                    eingabefelder = eingabefelder + '        <option>8086</option>'
                    eingabefelder = eingabefelder + '        <option>8087</option>'
                    eingabefelder = eingabefelder + '        <option>8088</option>'
                    eingabefelder = eingabefelder + '        <option>8089</option>'
                    eingabefelder = eingabefelder + '        <option selected="selected">8188</option>'
                    #              eingabefelder = eingabefelder + '        <option>8442</option>' ####### weg damit!!! ###
                    eingabefelder = eingabefelder + '        <option>8444</option>'
                    eingabefelder = eingabefelder + '        <option>8990</option>'
                    eingabefelder = eingabefelder + '      </select>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Access Key:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="accesskey" value=""></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Secret Access Key:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="secretaccesskey" value=""></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td>&nbsp;</td>'
                    if sprache == "de":
                        eingabefelder = eingabefelder + '    <td align="center"><input type="submit" value="Zugang einrichten"></td>'
                        eingabefelder = eingabefelder + '    <td align="center"><input type="reset" value="L&ouml;schen"></td>'
                    else:
                        eingabefelder = eingabefelder + '    <td align="center"><input type="submit" value="send"></td>'
                        eingabefelder = eingabefelder + '    <td align="center"><input type="reset" value="erase"></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '</table>'
                    eingabefelder = eingabefelder + '</form>'
                else:
                    # Eucalyptus_vorhanden is "true"
                    if sprache == "de":
                        eingabefelder = '<font color="red">Sie k&ouml;nnen keine weiteren Zugansdaten f&uuml;r Eucalyptus importieren</font>'
                    else:
                        eingabefelder = '<font color="red">You cannot add more Eucalyptus credentials</font>'
            elif neuerzugang == "ec2":
                if Amazon_vorhanden == "false":
                    eingabefelder = '<p>&nbsp;</p>'
                    eingabefelder = eingabefelder + '<form action="/zugangeinrichten" method="post" accept-charset="utf-8">'
                    eingabefelder = eingabefelder + '<input type="hidden" name="typ" value="ec2">'
                    eingabefelder = eingabefelder + '<table border="0" cellspacing="5" cellpadding="5">'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Access Key:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="accesskey" value=""></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Secret Access Key:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="secretaccesskey" value=""></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td>&nbsp;</td>'
                    if sprache == "de":
                        eingabefelder = eingabefelder + '    <td align="center"><input type="submit" value="Zugang einrichten"></td>'
                        eingabefelder = eingabefelder + '    <td align="center"><input type="reset" value="L&ouml;schen"></td>'
                    else:
                        eingabefelder = eingabefelder + '    <td align="center"><input type="submit" value="send"></td>'
                        eingabefelder = eingabefelder + '    <td align="center"><input type="reset" value="erase"></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '</table>'
                    eingabefelder = eingabefelder + '</form>'
                else:
                    # Amazon_vorhanden is "true":
                    if sprache == "de":
                        eingabefelder = '<font color="red">Sie k&ouml;nnen keine weiteren Zugansdaten f&uuml;r S3 importieren</font>'
                    else:
                        eingabefelder = '<font color="red">You cannot add more S3 credentials</font>'
            elif neuerzugang == "googlestorage":
                if GoogleStorage_vorhanden == "false":
                    eingabefelder = '<p>&nbsp;</p>'
                    eingabefelder = eingabefelder + '<form action="/zugangeinrichten" method="post" accept-charset="utf-8">'
                    eingabefelder = eingabefelder + '<input type="hidden" name="typ" value="googlestorage">'
                    eingabefelder = eingabefelder + '<table border="0" cellspacing="5" cellpadding="5">'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Access Key:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="accesskey" value=""></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td align="right">Secret Access Key:</td>'
                    eingabefelder = eingabefelder + '    <td colspan="2"><input type="text" size="40" name="secretaccesskey" value=""></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '  <tr>'
                    eingabefelder = eingabefelder + '    <td>&nbsp;</td>'
                    if sprache == "de":
                        eingabefelder = eingabefelder + '    <td align="center"><input type="submit" value="Zugang einrichten"></td>'
                        eingabefelder = eingabefelder + '    <td align="center"><input type="reset" value="L&ouml;schen"></td>'
                    else:
                        eingabefelder = eingabefelder + '    <td align="center"><input type="submit" value="send"></td>'
                        eingabefelder = eingabefelder + '    <td align="center"><input type="reset" value="erase"></td>'
                    eingabefelder = eingabefelder + '  </tr>'
                    eingabefelder = eingabefelder + '</table>'
                    eingabefelder = eingabefelder + '</form>'
                else:
                    # Amazon_vorhanden is "true":
                    if sprache == "de":
                        eingabefelder = '<font color="red">Sie k&ouml;nnen keine weiteren Zugansdaten f&uuml;r Google Storage importieren</font>'
                    else:
                        eingabefelder = '<font color="red">You cannot add more Google Storage credentials</font>'

            else:
                eingabefelder = ''

            if neuerzugang == "eucalyptus" and Eucalyptus_vorhanden != "true":
                port_warnung = '<p>&nbsp;</p>\n'
                if sprache == "de":
                    port_warnung = port_warnung + 'Die Google App Engine akzeptiert nur wenige Ports. '
                    port_warnung = port_warnung + 'Leider ist der Standard-Port von Eucalyputs (8773) nicht dabei. '
                    port_warnung = port_warnung + 'Es empfiehlt sich darum, einen anderen Port auf den Eucalyptus-Port umzuleiten. '
                    port_warnung = port_warnung + 'Ein Beispiel:<br> \n'
                    port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8188 -j ACCEPT</tt><br>\n '
                    port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8188 -j REDIRECT --to-port 8773</tt> '
                else:
                    port_warnung = port_warnung + 'The Google App Engine accepts only a few number of ports '
                    port_warnung = port_warnung + 'and the default port of Eucalyptus (8773) is not included. '
                    port_warnung = port_warnung + 'Because of this fact, you have to route another port to the Eucayptus port. '
                    port_warnung = port_warnung + 'For example:<br> \n'
                    port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8188 -j ACCEPT</tt><br>\n '
                    port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8188 -j REDIRECT --to-port 8773</tt> '
            elif neuerzugang == "nimbus":
                port_warnung = '<p>&nbsp;</p>\n'
                if sprache == "de":
                    port_warnung = port_warnung + 'Die Google App Engine akzeptiert nur wenige Ports. '
                    port_warnung = port_warnung + 'Wenn Cumulus (Nimbus) keinen unterst&uuml;tzten Port (z.B. 8888) verwendet, '
                    port_warnung = port_warnung + 'empfiehlt es sich, einen unterst&uuml;tzten Port auf den Port von Cumulus (Nimbus) umzuleiten. '
                    port_warnung = port_warnung + 'Ein Beispiel:<br> \n'
                    port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8990 -j ACCEPT</tt><br>\n '
                    port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8990 -j REDIRECT --to-port 8888</tt> '
                else:
                    port_warnung = port_warnung + 'The Google App Engine accepts only a few number of ports. '
                    port_warnung = port_warnung + 'If the Cumulus (Nimbus) you want to access, has a non accepted port (e.g. 8888), you have to route an accepted port to the port of the Cumulus. '
                    port_warnung = port_warnung + 'For example:<br> \n'
                    port_warnung = port_warnung + '<tt>iptables -I INPUT -p tcp --dport 8990 -j ACCEPT</tt><br>\n '
                    port_warnung = port_warnung + '<tt>iptables -I PREROUTING -t nat -i eth0 -p tcp --dport 8990 -j REDIRECT --to-port 8888</tt> '
            else:
                port_warnung = '<p>&nbsp;</p>'

            template_values = {
                'navigations_bar': navigations_bar,
                'url': url,
                'url_linktext': url_linktext,
                'eingabefelder': eingabefelder,
                'input_error_message': input_error_message,
                'tabelle_logins': tabelle_logins,
                'port_warnung': port_warnung
            }

            path = os.path.join(os.path.dirname(__file__), "../templates",
                                sprache, "index.html")
            self.response.out.write(template.render(path, template_values))
        else:
            self.redirect('/')
예제 #10
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))
예제 #11
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('/')
        # 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)

          # So ist der HTML-Code korrekt
          url = users.create_logout_url(self.request.uri).replace('&', '&amp;').replace('&amp;amp;', '&amp;')
          # So ist der HTML-Code nicht korrekt
          #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)

          # It is Google Storage and not am IaaS  
          if regionname == "GoogleStorage":
            
            path = '&amp;path=elastic_ips&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 ("0", "3", "5", "7"):
              # 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 ("1", "2", "4", "6", "8", "9", "10"):
              input_error_message = format_error_message_red(input_error_message)
            else:
              input_error_message = ""
  
            try:
              # Liste mit den Adressen
              liste_adressen = conn_region.get_all_addresses()
            except EC2ResponseError:
              # Wenn es nicht klappt...
              if sprache == "de":
                adressentabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>'
              else:
                adressentabelle = '<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":
                adressentabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>'
              else:
                adressentabelle = '<font color="red">A timeout error occured</font>'
            else:
              # Wenn es geklappt hat...
              # Anzahl der Elemente in der Liste
              laenge_liste_adressen = len(liste_adressen)
  
              if laenge_liste_adressen == 0:
                if sprache == "de":
                  adressentabelle = 'Sie haben keine elastischen IPs in dieser Region.'
                else:
                  adressentabelle = 'You have no elastic IPs inside this region.'
              else:
                adressentabelle = ''
                adressentabelle += '<table border="0" cellspacing="0" cellpadding="5">'
                
                counter = 0
                for i in range(laenge_liste_adressen):
                  
                    if counter > 0:
                        adressentabelle += '<tr><td colspan="4">&nbsp;</td></tr>'
                    counter += 1
                  
                    adressentabelle += '<tr>'
                    adressentabelle += '<td>'
                    adressentabelle += '<a href="/release_address?address='
                    adressentabelle += liste_adressen[i].public_ip
                    adressentabelle += "&amp;mobile="
                    adressentabelle += str(mobile)
                    if sprache == "de":
                      adressentabelle += '" title="Elastische IP freigeben">'
                      adressentabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Elastische IP freigeben"></a>'
                    else:
                      adressentabelle += '" title="release elastic IP">'
                      adressentabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="release elastic IP"></a>'
                    adressentabelle += '</td>'

                    adressentabelle += '<td>'+liste_adressen[i].public_ip+'</td>'

                    if liste_adressen[i].instance_id == "" or liste_adressen[i].instance_id == "nobody":
                      adressentabelle += '<td>'
                      adressentabelle += '<a href="/associate_address?address='
                      adressentabelle += liste_adressen[i].public_ip
                      adressentabelle += "&amp;mobile="
                      adressentabelle += str(mobile)
                      if sprache == "de":
                        adressentabelle += '" title="Elastische IP mit Instanz verkn&uuml;pfen">'
                        adressentabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="Elastische IP mit Instanz verkn&uuml;pfen"></a>'
                      else:
                        adressentabelle += '" title="associate elastic IP with instance">'
                        adressentabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="associate elastic IP with instance"></a>'
                      adressentabelle += '</td>'
                    else:
                      adressentabelle += '<td>'
                      adressentabelle += '<a href="/disassociate_address?address='
                      adressentabelle += liste_adressen[i].public_ip
                      adressentabelle += "&amp;mobile="
                      adressentabelle += str(mobile)
                      if sprache == "de":
                        adressentabelle += '" title="Elastische IP von der Instanz l&ouml;sen">'
                        adressentabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="Elastische IP mit Instanz verkn&uuml;pfen"></a>'
                      else:
                        adressentabelle += '" title="disassociate elastic IP from instance">'
                        adressentabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="associate elastic IP with instance"></a>'
                      adressentabelle += '</td>'
                      

                    if liste_adressen[i].instance_id:
                      adressentabelle += '<td align="center">'+liste_adressen[i].instance_id+'</td>'
                    else:
                      adressentabelle += '<td align="center"><tt>---</tt></td>'
                      
                    adressentabelle += '</tr>'
                adressentabelle += '</table>'
  
            path = '&amp;path=elastic_ips&amp;mobile='+mobile
  
            template_values = {
            'navigations_bar': navigations_bar,
            'url': url,
            'url_linktext': url_linktext,
            'zone': regionname,
            'zone_amazon': zone_amazon,
            'adressentabelle': adressentabelle,
            'zonen_liste': zonen_liste,
            'input_error_message': input_error_message,
            'mobile': mobile,
            'path': path,
            }

            if mobile == "true":
                path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "adressen.html")
            else:  
                path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "adressen.html")
            self.response.out.write(template.render(path,template_values))
예제 #12
0
    def get(self):
        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:
            # 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)

            # It is Google Storage and not am IaaS
            if regionname == "GoogleStorage":

                path = '&amp;path=volumes&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 ("15", "22", "23", "24", "27"):
                    # 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", "10", "16", "17", "18", "19", "20", "21",
                                 "25", "26"):
                    input_error_message = format_error_message_red(
                        input_error_message)
                else:
                    input_error_message = ""

                #!!!!!!! (Anfang)
                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>'
                    laenge_liste_zonen = 0
                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>'
                    laenge_liste_zonen = 0
                else:
                    # Wenn es geklappt hat...
                    # Anzahl der Elemente in der Liste
                    laenge_liste_zonen = len(liste_zonen)
                #!!!!!!! (Ende)

#          # Liste mit den Zonen
#          liste_zonen = conn_region.get_all_zones()
#          # Anzahl der Elemente in der Liste
#          laenge_liste_zonen = len(liste_zonen)

# Hier wird die Auswahlliste der Zonen erzeugt
# Diese Auswahlliste ist zum Erzeugen neuer Volumes notwendig
                zonen_in_der_region = ''
                if laenge_liste_zonen == 0:
                    zonen_in_der_region = zonen_in_der_region + "<option>&nbsp;</option>"
                else:
                    for i in range(laenge_liste_zonen):
                        zonen_in_der_region = zonen_in_der_region + "<option>"
                        zonen_in_der_region = zonen_in_der_region + liste_zonen[
                            i].name
                        zonen_in_der_region = zonen_in_der_region + "</option>"

                try:
                    # Liste mit den Volumes
                    liste_volumes = conn_region.get_all_volumes()
                except EC2ResponseError:
                    # Wenn es nicht klappt...
                    if sprache == "de":
                        volumestabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>'
                    else:
                        volumestabelle = '<font color="red">An error occured</font>'
                    # Wenn diese Zeile nicht da ist, kommt es später zu einem Fehler!
                    laenge_liste_volumes = 0
                except DownloadError:
                    # Diese Exception hilft gegen diese beiden Fehler:
                    # DownloadError: ApplicationError: 2 timed out
                    # DownloadError: ApplicationError: 5
                    if sprache == "de":
                        volumestabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>'
                    else:
                        volumestabelle = '<font color="red">A timeout error occured</font>'
                    # Wenn diese Zeile nicht da ist, kommt es später zu einem Fehler!
                    laenge_liste_volumes = 0
                else:
                    # Wenn es geklappt hat...
                    # Anzahl der Volumes in der Liste
                    laenge_liste_volumes = len(liste_volumes)

                    if laenge_liste_volumes == 0:
                        # Wenn es noch keine Volumes in der Region gibt...
                        if sprache == "de":
                            volumestabelle = 'Sie haben keine Volumen in dieser Region.'
                        else:
                            volumestabelle = 'You have no volumes inside this region.'
                    else:
                        # Wenn es schon Volumes in der Region gibt...

                        if mobile == "true":
                            # Mobile version of the table
                            volumestabelle = ''
                            volumestabelle = volumestabelle + '<table border="0" cellspacing="0" cellpadding="5">'

                            counter = 0
                            for i in range(laenge_liste_volumes):
                                if counter > 0:
                                    volumestabelle += '<tr><td colspan="3">&nbsp;</td></tr>'
                                counter += 1

                                volumestabelle += '<tr>'
                                volumestabelle += '<td>'
                                # Nur wenn der Zustand des Volumes "available" ist, darf  man es löschen.
                                # Darum wird hier überprüft, ob der Wert von "attach_data.status" gesetzt ist.
                                # Wenn er nicht gesetzt ist, kann/darf das Volume gelöscht werden.
                                if liste_volumes[i].attach_data.status == None:
                                    volumestabelle = volumestabelle + '<a href="/volumeentfernen?volume='
                                    volumestabelle = volumestabelle + liste_volumes[
                                        i].id
                                    volumestabelle = volumestabelle + "&amp;mobile="
                                    volumestabelle = volumestabelle + str(
                                        mobile)
                                    if sprache == "de":
                                        volumestabelle = volumestabelle + '" title="Volume l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Volume l&ouml;schen"></a>'
                                    else:
                                        volumestabelle = volumestabelle + '" title="erase volume"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase volume"></a>'
                                else:
                                    # Das Volume kann/darf nicht gelöscht werden.
                                    volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">'
                                volumestabelle += '</td>'

                                volumestabelle = volumestabelle + '<td align="center">'
                                volumestabelle = volumestabelle + '<a href="/snapshoterzeugen?volume='
                                volumestabelle = volumestabelle + liste_volumes[
                                    i].id
                                volumestabelle = volumestabelle + "&amp;mobile="
                                volumestabelle = volumestabelle + str(mobile)
                                if sprache == "de":
                                    volumestabelle = volumestabelle + '" title="Snapshot erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Snapshot erzeugen"></a>'
                                else:
                                    volumestabelle = volumestabelle + '" title="create snapshot"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create snapshot"></a>'
                                volumestabelle = volumestabelle + '</td>'

                                if liste_volumes[i].attach_data.status == None:
                                    volumestabelle = volumestabelle + '<td align="center">'
                                    volumestabelle = volumestabelle + '<a href="/volumeanhaengen?volume='
                                    volumestabelle = volumestabelle + liste_volumes[
                                        i].id
                                    volumestabelle = volumestabelle + "&amp;zone="
                                    volumestabelle = volumestabelle + str(
                                        liste_volumes[i].zone)
                                    volumestabelle = volumestabelle + "&amp;mobile="
                                    volumestabelle = volumestabelle + str(
                                        mobile)
                                    if sprache == "de":
                                        volumestabelle = volumestabelle + '" title="Volume anh&auml;ngen">'
                                        volumestabelle = volumestabelle + '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="Volume anh&auml;ngen"></a>'
                                    else:
                                        volumestabelle = volumestabelle + '" title="attach volume">'
                                        volumestabelle = volumestabelle + '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="attach volume"></a>'
                                elif liste_volumes[
                                        i].attach_data.status == u'attaching':
                                    volumestabelle += '<td align="center">attaching</td>'

                                elif liste_volumes[
                                        i].attach_data.status == u'deleting':
                                    volumestabelle += '<td align="center">deleting</td>'

                                elif liste_volumes[
                                        i].attach_data.status == u'busy':
                                    volumestabelle += '<td align="center">busy</td>'

                                elif liste_volumes[
                                        i].attach_data.status == u'attached':
                                    volumestabelle += '<td align="center">'
                                    volumestabelle += '<a href="/volumeloesen?volume='
                                    volumestabelle += liste_volumes[i].id
                                    volumestabelle = volumestabelle + "&amp;mobile="
                                    volumestabelle = volumestabelle + str(
                                        mobile)
                                    if sprache == "de":
                                        volumestabelle += '" title="Volume l&ouml;sen">'
                                        volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="Volume l&ouml;sen"></a>'
                                    else:
                                        volumestabelle += '" title="detach volume">'
                                        volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="detach volume"></a>'
                                    volumestabelle += '</td>'
                                else:
                                    volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                volumestabelle += '<td colspan="2" align="right"><b>ID:</b></td>'
                                volumestabelle += '<td align="center">' + str(
                                    liste_volumes[i].id) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right"><b>Gr&ouml;&szlig;e:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right"><b>Size:</b></td>'
                                volumestabelle += '<td align="center">' + str(
                                    liste_volumes[i].size) + ' GB</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                volumestabelle += '<td colspan="2" align="right"><b>Status:</b></td>'
                                if liste_volumes[i].status == u'available':
                                    volumestabelle += '<td bgcolor="#c3ddc3" align="center">' + liste_volumes[
                                        i].status + '</td>'
                                elif liste_volumes[i].status == u'in-use':
                                    volumestabelle += '<td bgcolor="#ffffcc" align="center">' + liste_volumes[
                                        i].status + '</td>'
                                elif liste_volumes[i].status == u'deleting':
                                    volumestabelle += '<td bgcolor="#ffcc99" align="center">' + liste_volumes[
                                        i].status + '</td>'
                                else:
                                    volumestabelle += '<td align="center">' + liste_volumes[
                                        i].status + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                volumestabelle += '<td colspan="2" align="right"><b>Zone:</b></td>'
                                volumestabelle += '<td align="center">' + str(
                                    liste_volumes[i].zone) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right"><b>Datum:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right"><b>Creation Date:</b></td>'
                                volumestabelle += '<td align="center">'
                                # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht.
                                datum_der_erzeugung = parse(
                                    liste_volumes[i].create_time)
                                volumestabelle += str(
                                    datum_der_erzeugung.strftime(
                                        "%Y-%m-%d  %H:%M:%S"))
                                #volumestabelle = volumestabelle + str(datum_der_erzeugung)
                                #volumestabelle = volumestabelle + str(liste_volumes[i].create_time)
                                volumestabelle += '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                volumestabelle += '<td colspan="2" align="right"><b>Snapshot:</b></td>'
                                if liste_volumes[i].snapshot_id == "":
                                    volumestabelle += '<td align="center">---</td>'
                                else:
                                    volumestabelle += '<td align="center">' + str(
                                        liste_volumes[i].snapshot_id) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right"><b>Ger&auml;t:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right"><b>Device:</b></td>'
                                if liste_volumes[i].attach_data.device == None:
                                    volumestabelle += '<td align="center">---</td>'
                                else:
                                    volumestabelle += '<td align="center">' + str(
                                        liste_volumes[i].attach_data.device
                                    ) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right"><b>Verkn&uuml;pfung:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right"><b>Attach Date:</b></td>'
                                if liste_volumes[
                                        i].attach_data.attach_time == None:
                                    volumestabelle += '<td align="center">---</td>'
                                else:
                                    volumestabelle = volumestabelle + '<td>'
                                    # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht.
                                    datum_des_anhaengens = parse(
                                        liste_volumes[i].attach_data.
                                        attach_time)
                                    volumestabelle = volumestabelle + str(
                                        datum_des_anhaengens.strftime(
                                            "%Y-%m-%d  %H:%M:%S"))
                                    #volumestabelle = volumestabelle + str(liste_volumes[i].attach_data.attach_time)
                                    volumestabelle = volumestabelle + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right"><b>Instanz:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right"><b>Instance:</b></td>'
                                if liste_volumes[
                                        i].attach_data.instance_id == None:
                                    volumestabelle += '<td align="center">---</td>'
                                else:
                                    volumestabelle += '<td align="center">' + str(
                                        liste_volumes[i].attach_data.
                                        instance_id) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right"><b>Status:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right"><b>Attach Status:</b></td>'
                                if liste_volumes[i].attach_data.status == None:
                                    volumestabelle += '<td align="center">---</td>'
                                elif liste_volumes[
                                        i].attach_data.status == u'attached':
                                    volumestabelle += '<td bgcolor="#c3ddc3" align="center">' + str(
                                        liste_volumes[i].attach_data.status
                                    ) + '</td>'
                                elif liste_volumes[
                                        i].attach_data.status == u'busy':
                                    volumestabelle += '<td bgcolor="#ffcc99" align="center">' + str(
                                        liste_volumes[i].attach_data.status
                                    ) + '</td>'
                                else:
                                    volumestabelle += '<td align="center">' + str(
                                        liste_volumes[i].attach_data.status
                                    ) + '</td>'
                                volumestabelle = volumestabelle + '</tr>'
                            volumestabelle = volumestabelle + '</table>'

                        else:
                            # Not the mobile version

                            volumestabelle = ''
                            volumestabelle = volumestabelle + '<table border="0" cellspacing="0" cellpadding="5">'

                            counter = 0
                            for i in range(laenge_liste_volumes):
                                if counter > 0:
                                    volumestabelle += '<tr><td colspan="5">&nbsp;</td></tr>'
                                counter += 1

                                volumestabelle += '<tr>'
                                volumestabelle += '<td bgcolor="#D4D4D4">'
                                # Nur wenn der Zustand des Volumes "available" ist, darf  man es löschen.
                                # Darum wird hier überprüft, ob der Wert von "attach_data.status" gesetzt ist.
                                # Wenn er nicht gesetzt ist, kann/darf das Volume gelöscht werden.
                                if liste_volumes[i].attach_data.status == None:
                                    volumestabelle = volumestabelle + '<a href="/volumeentfernen?volume='
                                    volumestabelle = volumestabelle + liste_volumes[
                                        i].id
                                    volumestabelle = volumestabelle + "&amp;mobile="
                                    volumestabelle = volumestabelle + str(
                                        mobile)
                                    if sprache == "de":
                                        volumestabelle = volumestabelle + '" title="Volume l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Volume l&ouml;schen"></a>'
                                    else:
                                        volumestabelle = volumestabelle + '" title="erase volume"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase volume"></a>'
                                else:
                                    # Das Volume kann/darf nicht gelöscht werden.
                                    volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">'
                                volumestabelle += '</td>'

                                volumestabelle += '<td align="center" bgcolor="#D4D4D4">'
                                volumestabelle += '<a href="/snapshoterzeugen?volume='
                                volumestabelle += liste_volumes[i].id
                                volumestabelle += "&amp;mobile="
                                volumestabelle += str(mobile)
                                if sprache == "de":
                                    volumestabelle += '" title="Snapshot erzeugen"><img src="bilder/plus.png" width="16" height="16" border="0" alt="Snapshot erzeugen"></a>'
                                else:
                                    volumestabelle += '" title="create snapshot"><img src="bilder/plus.png" width="16" height="16" border="0" alt="create snapshot"></a>'
                                volumestabelle += '</td>'

                                if liste_volumes[i].attach_data.status == None:
                                    volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">'
                                    volumestabelle += '<a href="/volumeanhaengen?volume='
                                    volumestabelle += liste_volumes[i].id
                                    volumestabelle += "&amp;zone="
                                    volumestabelle += str(
                                        liste_volumes[i].zone)
                                    volumestabelle += "&amp;mobile="
                                    volumestabelle += str(mobile)
                                    if sprache == "de":
                                        volumestabelle += '" title="Volume anh&auml;ngen">'
                                        volumestabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="Volume anh&auml;ngen"></a>'
                                    else:
                                        volumestabelle += '" title="attach volume">'
                                        volumestabelle += '<img src="bilder/attach2.png" width="16" height="16" border="0" alt="attach volume"></a>'
                                elif liste_volumes[
                                        i].attach_data.status == u'attaching':
                                    volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">attaching</td>'

                                elif liste_volumes[
                                        i].attach_data.status == u'deleting':
                                    volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">deleting</td>'

                                elif liste_volumes[
                                        i].attach_data.status == u'busy':
                                    volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">busy</td>'

                                elif liste_volumes[
                                        i].attach_data.status == u'attached':
                                    volumestabelle += '<td colspan="3" align="left" bgcolor="#D4D4D4">'
                                    volumestabelle += '<a href="/volumeloesen?volume='
                                    volumestabelle += liste_volumes[i].id
                                    volumestabelle += "&amp;mobile="
                                    volumestabelle += str(mobile)
                                    if sprache == "de":
                                        volumestabelle += '" title="Volume l&ouml;sen">'
                                        volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="Volume l&ouml;sen"></a>'
                                    else:
                                        volumestabelle += '" title="detach volume">'
                                        volumestabelle += '<img src="bilder/detach2.png" width="16" height="16" border="0" alt="detach volume"></a>'
                                    volumestabelle += '</td>'
                                else:
                                    volumestabelle += '<img src="bilder/platzhalter.png" width="16" height="16" border="0">'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                volumestabelle += '<td align="right" colspan="2" bgcolor="#D4D4D4"><b>ID:</b></td>'
                                volumestabelle += '<td align="left">' + str(
                                    liste_volumes[i].id) + '</td>'

                                volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Status:</b></td>'
                                if liste_volumes[i].status == u'available':
                                    volumestabelle += '<td bgcolor="#c3ddc3" align="left">' + liste_volumes[
                                        i].status + '</td>'
                                elif liste_volumes[i].status == u'in-use':
                                    volumestabelle += '<td bgcolor="#ffffcc" align="left">' + liste_volumes[
                                        i].status + '</td>'
                                elif liste_volumes[i].status == u'deleting':
                                    volumestabelle += '<td bgcolor="#ffcc99" align="left">' + liste_volumes[
                                        i].status + '</td>'
                                else:
                                    volumestabelle += '<td align="left">' + liste_volumes[
                                        i].status + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Gr&ouml;&szlig;e:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Size:</b></td>'
                                volumestabelle += '<td align="left">' + str(
                                    liste_volumes[i].size) + ' GB</td>'

                                volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Zone:</b></td>'
                                volumestabelle += '<td align="left">' + str(
                                    liste_volumes[i].zone) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Creation Date:</b></td>'
                                volumestabelle += '<td align="left">'
                                # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht.
                                datum_der_erzeugung = parse(
                                    liste_volumes[i].create_time)
                                volumestabelle += str(
                                    datum_der_erzeugung.strftime(
                                        "%Y-%m-%d  %H:%M:%S"))
                                #volumestabelle = volumestabelle + str(datum_der_erzeugung)
                                #volumestabelle = volumestabelle + str(liste_volumes[i].create_time)
                                volumestabelle += '</td>'

                                volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Snapshot:</b></td>'
                                if liste_volumes[i].snapshot_id == "":
                                    volumestabelle += '<td align="left">---</td>'
                                else:
                                    volumestabelle += '<td>' + str(
                                        liste_volumes[i].snapshot_id) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Instanz:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Instance:</b></td>'
                                if liste_volumes[
                                        i].attach_data.instance_id == None:
                                    volumestabelle += '<td align="left">---</td>'
                                else:
                                    volumestabelle += '<td align="left">' + str(
                                        liste_volumes[i].attach_data.
                                        instance_id) + '</td>'

                                if sprache == "de":
                                    volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Status:</b></td>'
                                else:
                                    volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Attach Status:</b></td>'
                                if liste_volumes[i].attach_data.status == None:
                                    volumestabelle += '<td align="left">---</td>'
                                elif liste_volumes[
                                        i].attach_data.status == u'attached':
                                    volumestabelle += '<td bgcolor="#c3ddc3" align="left">' + str(
                                        liste_volumes[i].attach_data.status
                                    ) + '</td>'
                                elif liste_volumes[
                                        i].attach_data.status == u'busy':
                                    volumestabelle += '<td bgcolor="#ffcc99" align="left">' + str(
                                        liste_volumes[i].attach_data.status
                                    ) + '</td>'
                                else:
                                    volumestabelle += '<td align="left">' + str(
                                        liste_volumes[i].attach_data.status
                                    ) + '</td>'

                                volumestabelle += '</tr>'
                                volumestabelle += '<tr>'

                                if sprache == "de":
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>'
                                else:
                                    volumestabelle += '<td colspan="2" align="right" bgcolor="#D4D4D4"><b>Attach Date:</b></td>'
                                if liste_volumes[
                                        i].attach_data.attach_time == None:
                                    volumestabelle += '<td align="left">---</td>'
                                else:
                                    volumestabelle += '<td align="left">'
                                    # Den ISO8601 Zeitstring umwandeln, damit es besser aussieht.
                                    datum_des_anhaengens = parse(
                                        liste_volumes[i].attach_data.
                                        attach_time)
                                    volumestabelle += str(
                                        datum_des_anhaengens.strftime(
                                            "%Y-%m-%d  %H:%M:%S"))
                                    #volumestabelle += str(liste_volumes[i].attach_data.attach_time)
                                    volumestabelle += '</td>'

                                if sprache == "de":
                                    volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Ger&auml;t:</b></td>'
                                else:
                                    volumestabelle += '<td align="right" bgcolor="#D4D4D4"><b>Device:</b></td>'
                                if liste_volumes[i].attach_data.device == None:
                                    volumestabelle += '<td align="left">---</td>'
                                else:
                                    volumestabelle += '<td align="left">' + str(
                                        liste_volumes[i].attach_data.device
                                    ) + '</td>'

                                volumestabelle = volumestabelle + '</tr>'
                            volumestabelle = volumestabelle + '</table>'

                if laenge_liste_volumes >= 1:
                    alle_volumes_loeschen_button = '<p>&nbsp;</p>\n'
                    alle_volumes_loeschen_button += '<table border="0" cellspacing="0" cellpadding="5">\n'
                    alle_volumes_loeschen_button += '<tr>\n'
                    alle_volumes_loeschen_button += '<td align="center">\n'
                    alle_volumes_loeschen_button += '<form action="/alle_volumes_loeschen" method="get">\n'
                    alle_volumes_loeschen_button += '<input type="hidden" name="mobile" value="' + mobile + '">'
                    if sprache == "de":
                        alle_volumes_loeschen_button += '<input type="submit" value="Alle EBS Volumen l&ouml;schen">\n'
                    else:
                        alle_volumes_loeschen_button += '<input type="submit" value="erase all EBS volumes">\n'
                    alle_volumes_loeschen_button += '</form>\n'
                    alle_volumes_loeschen_button += '</td>\n'
                    alle_volumes_loeschen_button += '</tr>\n'
                    alle_volumes_loeschen_button += '</table>\n'
                else:
                    alle_volumes_loeschen_button = '<p>&nbsp;</p>\n'

                path = '&amp;path=volumes&amp;mobile=' + mobile

                template_values = {
                    'navigations_bar': navigations_bar,
                    'url': url,
                    'url_linktext': url_linktext,
                    'zone': regionname,
                    'zone_amazon': zone_amazon,
                    'volumestabelle': volumestabelle,
                    'zonen_in_der_region': zonen_in_der_region,
                    'input_error_message': input_error_message,
                    'zonen_liste': zonen_liste,
                    'alle_volumes_loeschen_button':
                    alle_volumes_loeschen_button,
                    'mobile': mobile,
                    'path': path,
                }

                if mobile == "true":
                    path = os.path.join(os.path.dirname(__file__),
                                        "../templates/mobile", sprache,
                                        "volumes.html")
                else:
                    path = os.path.join(os.path.dirname(__file__),
                                        "../templates", sprache,
                                        "volumes.html")
                self.response.out.write(template.render(path, template_values))
예제 #13
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('/')
        # 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))
예제 #14
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('/')
        # 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 results:
            # 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))
        else:
            self.redirect('/')
예제 #15
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))
    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('/')
        snapshot = self.request.get('snapshot')   
        # Eventuell vorhande Fehlermeldung holen
        message = self.request.get('message')

        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 rot formatiert werden soll...
        if message in ("8", "10", "16", "17", "25"):
          input_error_message = format_error_message_red(input_error_message)
        else:
          input_error_message = ""


        try:
            # Liste mit den Zonen
            liste_zonen = conn_region.get_all_zones()
        except EC2ResponseError:
            # Wenn es nicht geklappt hat...
            fehlermeldung = "10"
            self.redirect('/volumeaussnapshoterzeugen?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('/volumeaussnapshoterzeugen?mobile='+str(mobile)+'&message='+fehlermeldung)
        else:
            # Wenn es geklappt hat...
            # Anzahl der Elemente in der Liste
            laenge_liste_zonen = len(liste_zonen)


        volume_aus_snapshot_erzeugen_tabelle = ''
        volume_aus_snapshot_erzeugen_tabelle += '<form action="/volumeaussnapshoterzeugen_definiv" method="post" accept-charset="utf-8">\n'
        volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">'
        volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="snapshot" value="'+snapshot+'">'
        volume_aus_snapshot_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">'
        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>ID:</b></td>\n'      
        volume_aus_snapshot_erzeugen_tabelle += '<td>'+snapshot+'</td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</tr>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        if sprache == "de":
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zonen:</b></td>\n'
        else:
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zones:</b></td>\n' 
        volume_aus_snapshot_erzeugen_tabelle += '<td>\n'
        for i in range(laenge_liste_zonen):
            volume_aus_snapshot_erzeugen_tabelle += '<input type="radio" name="zone" value="'+liste_zonen[i].name+'"> '+liste_zonen[i].name+'<BR>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</tr>\n'

        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        if sprache == "de":
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Gr&ouml;&szlig;e:</b></td>\n'
        else:
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Size:</b></td>\n' 
        volume_aus_snapshot_erzeugen_tabelle += '<td><input name="groesse" type="text" size="3" maxlength="3">\n'
        volume_aus_snapshot_erzeugen_tabelle += '&nbsp;\n'
        volume_aus_snapshot_erzeugen_tabelle += '<select name="GB_oder_TB" size="1">\n'
        volume_aus_snapshot_erzeugen_tabelle += '<option selected="selected">GB</option>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<option>TB</option>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</select>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</tr>\n'      
        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        if sprache == "de":
            volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Volume aus Snapshot erzeugen"></td>\n'
        else:
            volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create volume from snapshot"></td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</table>'
        volume_aus_snapshot_erzeugen_tabelle += '</form>'

        path = '&amp;path=volumeaussnapshoterzeugen&amp;snapshot='+snapshot+'&amp;mobile='+mobile
          
        template_values = {
        'navigations_bar': navigations_bar,
        'url': url,
        'url_linktext': url_linktext,
        'zone': regionname,
        'zone_amazon': zone_amazon,
        'volume_aus_snapshot_erzeugen_tabelle': volume_aus_snapshot_erzeugen_tabelle,
        'input_error_message': input_error_message,
        'zonen_liste': zonen_liste,
        'path': path,
        }

        if mobile == "true":
            path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "volume_aus_snapshot_create.html")
        else:
            path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "volume_aus_snapshot_create.html")
        self.response.out.write(template.render(path,template_values))
            
예제 #17
0
    def get(self):
        mobile = self.request.get('mobile')
        if mobile != "true":
            mobile = "false"
        # self.response.out.write('test')
        # Den Usernamen erfahren
        # Get the username
        username = users.get_current_user()
        if not username:
            self.redirect('/')
        # Die ID des zu startenden Images holen
        # Get the ID of the image that shall be started
        image = self.request.get('image')
        # Die Architektur des zu startenden Images holen
        # Get the architecture of the image that shall be started
        arch = self.request.get('arch')
        # Das Root Device des zu startenden Images holen
        # Get the root device of the image that shall be started
        root = self.request.get('root')

        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)

        # So wird der HTML-Code korrekt
        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'

        zonen_liste = zonen_liste_funktion(username,sprache,mobile)

        for result in results:

          imageliste = [str(image)]
          # Liste mit den Images
          liste_images = conn_region.get_all_images(image_ids=imageliste)  
          # Anzahl der Images in der Liste
          laenge_liste_images = len(liste_images)
          for i in range(laenge_liste_images):
            if liste_images[i].id == image:
              manifest = str(liste_images[i].location)

        
        if result.zugangstyp == "Nimbus":
          # If it is a Nimbus infrastructure...

          template_values = {
          'navigations_bar': navigations_bar,
          'url': url,
          'url_linktext': url_linktext,
          'zone': regionname,
          'zone_amazon': zone_amazon,
          'image': image,
          'manifest': manifest,
          'zonen_liste': zonen_liste,
          'mobile': mobile,
          }

          if mobile == "true":
              path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "image_starten_nimbus.html")
          else:
              path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "image_starten_nimbus.html")
          self.response.out.write(template.render(path,template_values))

        else:
          # If it is not a Nimbus infrastructure...


          # Wenn es Amazon EC2 ist
          if result.zugangstyp == "Amazon":
            if arch == "i386":
              # Liste mit den Instanz-Typen wenn es ein 32-Bit Image ist
              if root == "ebs":
                liste_instanztypen_eucalyptus = ["t1.micro", "m1.small", "c1.medium"]
              else:
                # root == instance-store
                # t1.micro instances must have an EBS root device
                liste_instanztypen_eucalyptus = ["m1.small", "c1.medium"]
            else:
              # Liste mit den Instanz-Typen wenn es ein 64-Bit Image ist
              liste_instanztypen_eucalyptus = ["t1.micro", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "c1.medium", "c1.xlarge", "cc1.4xlarge", "cc2.8xlarge", "cg1.4xlarge"]
            # Anzahl der Elemente in der Liste
            laenge_liste_instanztypen_eucalyptus = len(liste_instanztypen_eucalyptus)

            instance_types_liste = ""
            for i in range(laenge_liste_instanztypen_eucalyptus):
                if i == 0:
                  instance_types_liste = instance_types_liste + '<option selected="selected">'
                else:
                  instance_types_liste = instance_types_liste + "<option>"
                instance_types_liste = instance_types_liste + liste_instanztypen_eucalyptus[i]
                instance_types_liste = instance_types_liste + "</option>"

            instance_types_liste_laenge = laenge_liste_instanztypen_eucalyptus
          elif result.zugangstyp == "Nimbus":
            # Wenn es Nimbus ist
            instance_types_liste_laenge = 0
            liste_instanztypen_eucalyptus = []
            laenge_liste_instanztypen_eucalyptus = 0
            instance_types_liste = []
          else:
            # Wenn es Eucalyptus ist
            liste_instanztypen_eucalyptus = ["m1.small", "c1.medium", "m1.large", "m1.xlarge", "c1.xlarge"] 
            # Anzahl der Elemente in der Liste mit den Instanz-Typen
            laenge_liste_instanztypen_eucalyptus = len(liste_instanztypen_eucalyptus) 

            instance_types_liste = ""
            for i in range(laenge_liste_instanztypen_eucalyptus):
                if i == 0:
                  instance_types_liste = instance_types_liste + '<option selected="selected">'
                else:
                  instance_types_liste = instance_types_liste + "<option>"
                instance_types_liste = instance_types_liste + liste_instanztypen_eucalyptus[i]
                instance_types_liste = instance_types_liste + "</option>"

            instance_types_liste_laenge = laenge_liste_instanztypen_eucalyptus

          # Liste mit den Zonen
          liste_zonen = conn_region.get_all_zones()
          # Anzahl der Elemente in der Liste
          laenge_liste_zonen = len(liste_zonen)

          # Hier wird die Auswahlliste der Zonen erzeugt
          # Diese Auswahlliste ist zum Erzeugen neuer Volumes notwendig
          zonen_in_der_region = ''
          for i in range(laenge_liste_zonen):
              zonen_in_der_region = zonen_in_der_region + "<option>"
              zonen_in_der_region = zonen_in_der_region + liste_zonen[i].name
              zonen_in_der_region = zonen_in_der_region + "</option>"

          # Liste mit den Schlüsseln
          liste_key_pairs = conn_region.get_all_key_pairs()
          # Anzahl der Elemente in der Liste
          laenge_liste_keys = len(liste_key_pairs)

          keys_liste = ''
          if laenge_liste_keys == 0:
            if sprache == "de":
              keys_liste = '<font color="red">Es sind keine Schl&uuml in der Zone vorhanden</font>'
            else:
              keys_liste = '<font color="red">No keypairs exist inside this security zone</font>'
          # This is not workling. We need a list to get the value to the class that starts the instance
          #elif laenge_liste_keys == 1:
          #  keys_liste = '<input name="keys_liste" type="text" size="70" maxlength="70" value="'
          #  keys_liste = keys_liste + liste_key_pairs[0].name
          #  keys_liste = keys_liste + '" readonly>'
          else:
            keys_liste = keys_liste + '<select name="keys_liste" size="1">'
            for i in range(laenge_liste_keys):
              if i == 0:
                keys_liste = keys_liste + '<option selected="selected">'
              else:
                keys_liste = keys_liste + '<option>'
              keys_liste = keys_liste + liste_key_pairs[i].name
              keys_liste = keys_liste + '</option>'
            keys_liste = keys_liste + '</select>'


          try:
            # Liste mit den Security Groups
            liste_security_groups = conn_region.get_all_security_groups()
          except EC2ResponseError:
            # Wenn es nicht geklappt hat
            fehlermeldung = "78"
            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:
            # Wenn es geklappt hat
            
            # Anzahl der Elemente in der Liste
            laenge_liste_security_groups = len(liste_security_groups)
  
            gruppen_liste = ''
            if laenge_liste_security_groups == 0:
              if sprache == "de":
                gruppen_liste = '<font color="red">Es sind keine Sicherheitsgruppen in der Zone vorhanden</font>'
              else:
                gruppen_liste = '<font color="red">No Security Groups exist inside this security zone</font>'
            # This is not workling. We need a list to get the value to the class that starts the instance
            #elif laenge_liste_security_groups == 1:
            #  gruppen_liste = liste_security_groups[0].name
            else:
              gruppen_liste = gruppen_liste + '<select name="gruppen_liste" size="1">'
              for i in range(laenge_liste_security_groups):
                if i == 0:
                  gruppen_liste = gruppen_liste + '<option selected="selected">'
                else:
                  gruppen_liste = gruppen_liste + '<option>'
                gruppen_liste = gruppen_liste + liste_security_groups[i].name
                #gruppen_liste = gruppen_liste + ' ('
                #gruppen_liste = gruppen_liste + liste_security_groups[i].owner_id
                #gruppen_liste = gruppen_liste + ')'
                gruppen_liste = gruppen_liste + '</option>'
              gruppen_liste = gruppen_liste + '</select>'
  
  
  
            instanz_starten_tabelle = ''
            if mobile == "true":
              # Mobile version
              instanz_starten_tabelle += '<form action="/instanzanlegen" method="post" accept-charset="utf-8">\n'
              instanz_starten_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">\n'
              instanz_starten_tabelle += '<input type="hidden" name="image_id" value="'+image+'">\n'
              instanz_starten_tabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>AMI:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+image+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Manifest:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+manifest+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Root:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+root+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>AKI:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="aki_id" type="text" size="12" maxlength="12"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>ARI:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="ari_id" type="text" size="12" maxlength="12"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              if sprache == "de":
                instanz_starten_tabelle += '<td align="right"><b>Typ:</b></td>\n'
              else:
                instanz_starten_tabelle += '<td align="right"><b>Type:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'
              instanz_starten_tabelle += '<select name="instance_type" size="1">'+instance_types_liste+'</select>\n'
              instanz_starten_tabelle += '</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Zone:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'
              instanz_starten_tabelle += '<select name="zonen_auswahl" size="1">'+zonen_in_der_region+'</select>\n'
              instanz_starten_tabelle += '</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Min:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="number_instances_min" type="text" size="2" maxlength="2" value="1"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Max:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="number_instances_max" type="text" size="2" maxlength="2" value="1"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              if sprache == "de":
                instanz_starten_tabelle += '<td align="right"><b>Schl&uuml;ssel:</b></td>\n'
              else:
                instanz_starten_tabelle += '<td align="right"><b>Keypair:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+keys_liste+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              if sprache == "de":
                instanz_starten_tabelle += '<td align="right"><b>Gruppe:</b></td>\n'
              else:
                instanz_starten_tabelle += '<td align="right"><b>Group:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+gruppen_liste+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td colspan="2" align="left">'
              if sprache == "de":
                instanz_starten_tabelle += '<input type="submit" value="Instanz starten">'
              else:
                instanz_starten_tabelle += '<input type="submit" value="create Instance">'
              instanz_starten_tabelle += '</td>\n'          
              instanz_starten_tabelle += '</tr>\n'            
              instanz_starten_tabelle += '</table>\n'
              instanz_starten_tabelle += '</form>\n'
              
            else:
              # Not the mobile version...
              
              instanz_starten_tabelle += '<form action="/instanzanlegen" method="post" accept-charset="utf-8">\n'
              instanz_starten_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">\n'
              instanz_starten_tabelle += '<input type="hidden" name="image_id" value="'+image+'">\n'
              instanz_starten_tabelle += '<table border="0" cellspacing="0" cellpadding="5">\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>AMI:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+image+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Manifest:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+manifest+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Root:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+root+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>AKI:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="aki_id" type="text" size="12" maxlength="12"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>ARI:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="ari_id" type="text" size="12" maxlength="12"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              if sprache == "de":
                instanz_starten_tabelle += '<td align="right"><b>Typ:</b></td>\n'
              else:
                instanz_starten_tabelle += '<td align="right"><b>Type:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'
              instanz_starten_tabelle += '<select name="instance_type" size="1">'+instance_types_liste+'</select>\n'
              instanz_starten_tabelle += '</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Zone:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'
              instanz_starten_tabelle += '<select name="zonen_auswahl" size="1">'+zonen_in_der_region+'</select>\n'
              instanz_starten_tabelle += '</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Min:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="number_instances_min" type="text" size="2" maxlength="2" value="1"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td align="right"><b>Max:</b></td>\n'
              instanz_starten_tabelle += '<td align="left"><input name="number_instances_max" type="text" size="2" maxlength="2" value="1"></td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              if sprache == "de":
                instanz_starten_tabelle += '<td align="right"><b>Schl&uuml;ssel:</b></td>\n'
              else:
                instanz_starten_tabelle += '<td align="right"><b>Keypair:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+keys_liste+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              if sprache == "de":
                instanz_starten_tabelle += '<td align="right"><b>Gruppe:</b></td>\n'
              else:
                instanz_starten_tabelle += '<td align="right"><b>Group:</b></td>\n'
              instanz_starten_tabelle += '<td align="left">'+gruppen_liste+'</td>\n'
              instanz_starten_tabelle += '</tr>\n'
              instanz_starten_tabelle += '<tr>\n'
              instanz_starten_tabelle += '<td colspan="2" align="left">'
              if sprache == "de":
                instanz_starten_tabelle += '<input type="submit" value="Instanz starten">'
              else:
                instanz_starten_tabelle += '<input type="submit" value="create Instance">'
              instanz_starten_tabelle += '</td>\n'          
              instanz_starten_tabelle += '</tr>\n'            
              instanz_starten_tabelle += '</table>\n'
              instanz_starten_tabelle += '</form>\n'
              

          # Wenn es Amazon EC2 ist
          if result.aktivezone in ("us-east-1", "eu-west-1", "us-west-1", "ap-southeast-1"):
            if arch == "i386": # 32-Bit Image
              tabelle_ec2_instanztypen = '<table border="3" cellspacing="0" cellpadding="5">'
              tabelle_ec2_instanztypen += '<tr>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th>Instanztyp</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th>Type</th>'
              tabelle_ec2_instanztypen += '<th>Bit</th>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th>Kerne</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th>Cores</th>'
              tabelle_ec2_instanztypen += '<th align="center">ECU</th>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th align="center">Speicher</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th align="center">Storage</th>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>t1.micro</td>'
              tabelle_ec2_instanztypen += '<td align="center">32</td>'
              tabelle_ec2_instanztypen += '<td align="center">1</td>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<td align="center">bis zu 2</td>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<td align="center">up to 2</td>'
              tabelle_ec2_instanztypen += '<td align="center">613 MB</td>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<td align="center">nur EBS</td>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<td align="center">only EBS</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m1.small</td>'
              tabelle_ec2_instanztypen += '<td align="center">32</td>'
              tabelle_ec2_instanztypen += '<td align="center">1</td>'
              tabelle_ec2_instanztypen += '<td align="center">1</td>'
              tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">160 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>c1.medium</td>'
              tabelle_ec2_instanztypen += '<td align="center">32</td>'
              tabelle_ec2_instanztypen += '<td align="center">2</td>'
              tabelle_ec2_instanztypen += '<td align="center">5</td>'
              tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">350 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '</table>'
            
              if root != "ebs":
                if sprache == "de":
                  t1_micro_warnung = '<font color="red">t1.micro Instanzen ben&ouml;tigen als Root EBS</font>'
                else:
                  t1_micro_warnung = '<font color="red">t1.micro instances must have an EBS root device</font>'
              else:
                t1_micro_warnung = ''

            elif arch == "x86_64": # 64-Bit Image
              tabelle_ec2_instanztypen = '<table border="3" cellspacing="0" cellpadding="5">'
              tabelle_ec2_instanztypen += '<tr>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th>Instanztyp</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th>Type</th>'
              tabelle_ec2_instanztypen += '<th>Bit</th>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th>Kerne</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th>Cores</th>'
              tabelle_ec2_instanztypen += '<th align="center">ECU</th>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<th align="center">Speicher</th>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<th align="center">Storage</th>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>t1.micro</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">1</td>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<td align="center">bis zu 2</td>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<td align="center">up to 2</td>'
              tabelle_ec2_instanztypen += '<td align="center">613 MB</td>'
              if sprache == "de": # Wenn die Sprache Deutsch ist...
                tabelle_ec2_instanztypen += '<td align="center">nur EBS</td>'
              else:               # Wenn die Sprache Englisch ist...
                tabelle_ec2_instanztypen += '<td align="center">only EBS</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m1.small</td>'
              tabelle_ec2_instanztypen += '<td align="center">32</td>'
              tabelle_ec2_instanztypen += '<td align="center">1</td>'
              tabelle_ec2_instanztypen += '<td align="center">1</td>'
              tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">160 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m1.medium</td>'
              tabelle_ec2_instanztypen += '<td align="center">32</td>'
              tabelle_ec2_instanztypen += '<td align="center">2</td>'
              tabelle_ec2_instanztypen += '<td align="center">5</td>'
              tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">410 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m1.large</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">2</td>'
              tabelle_ec2_instanztypen += '<td align="center">4</td>'
              tabelle_ec2_instanztypen += '<td align="center">7.5 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">850 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m1.xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">4</td>'
              tabelle_ec2_instanztypen += '<td align="center">8</td>'
              tabelle_ec2_instanztypen += '<td align="center">15 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m2.xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">2</td>'
              tabelle_ec2_instanztypen += '<td align="center">6.5</td>'
              tabelle_ec2_instanztypen += '<td align="center">17.1 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">420 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m2.2xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">4</td>'
              tabelle_ec2_instanztypen += '<td align="center">13</td>'
              tabelle_ec2_instanztypen += '<td align="center">34.2 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">850 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>m2.4xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">8</td>'
              tabelle_ec2_instanztypen += '<td align="center">26</td>'
              tabelle_ec2_instanztypen += '<td align="center">68.4 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>c1.medium</td>'
              tabelle_ec2_instanztypen += '<td align="center">32</td>'
              tabelle_ec2_instanztypen += '<td align="center">2</td>'
              tabelle_ec2_instanztypen += '<td align="center">5</td>'
              tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">350 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>c1.xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">8</td>'
              tabelle_ec2_instanztypen += '<td align="center">20</td>'
              tabelle_ec2_instanztypen += '<td align="center">7 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>cc1.4xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">8</td>'
              tabelle_ec2_instanztypen += '<td align="center">33,5</td>'
              tabelle_ec2_instanztypen += '<td align="center">23 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>cc2.8xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">16</td>'
              tabelle_ec2_instanztypen += '<td align="center">88</td>'
              tabelle_ec2_instanztypen += '<td align="center">60.5 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">3370 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '<tr>'
              tabelle_ec2_instanztypen += '<td>cg1.4xlarge</td>'
              tabelle_ec2_instanztypen += '<td align="center">64</td>'
              tabelle_ec2_instanztypen += '<td align="center">8</td>'
              tabelle_ec2_instanztypen += '<td align="center">33,5</td>'
              tabelle_ec2_instanztypen += '<td align="center">22 GB</td>'
              tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
              tabelle_ec2_instanztypen += '</tr>'
              tabelle_ec2_instanztypen += '</table>'
              
              if root != "ebs":
                if sprache == "de":
                  t1_micro_warnung = '<font color="red">t1.micro Instanzen ben&ouml;tigen als Root Device EBS</font>'
                else:
                  t1_micro_warnung = '<font color="red">t1.micro instances must have an EBS root device</font>'
              else:
                t1_micro_warnung = ''

            else:
              # Wenn es etwas ganz anderes ist...?
              tabelle_ec2_instanztypen = ''
              t1_micro_warnung = ''
          else:
            # wenn es Eucalyptus ist
            tabelle_ec2_instanztypen = ''
            t1_micro_warnung = ''
          
          path = '&amp;path=images&amp;mobile='+mobile
          
          template_values = {
          'navigations_bar': navigations_bar,
          'url': url,
          'url_linktext': url_linktext,
          'zone': regionname,
          'zone_amazon': zone_amazon,
          'instance_types_liste': instance_types_liste,
          'instance_types_liste_laenge': instance_types_liste_laenge,
          'keys_liste': keys_liste,
          'gruppen_liste': gruppen_liste,
          'zonen_liste': zonen_liste,
          'tabelle_ec2_instanztypen':tabelle_ec2_instanztypen,
          'zonen_in_der_region': zonen_in_der_region,
          'laenge_liste_zonen': laenge_liste_zonen,
          't1_micro_warnung': t1_micro_warnung,
          'instanz_starten_tabelle': instanz_starten_tabelle,
          'mobile': mobile,
          'path': path,
          }

          if mobile == "true":
              path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "image_starten.html")
          else:
              path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "image_starten.html")
          self.response.out.write(template.render(path,template_values))
예제 #18
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('/')
        snapshot = self.request.get('snapshot')
        # Eventuell vorhande Fehlermeldung holen
        message = self.request.get('message')

        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 rot formatiert werden soll...
        if message in ("8", "10", "16", "17", "25"):
            input_error_message = format_error_message_red(input_error_message)
        else:
            input_error_message = ""

        try:
            # Liste mit den Zonen
            liste_zonen = conn_region.get_all_zones()
        except EC2ResponseError:
            # Wenn es nicht geklappt hat...
            fehlermeldung = "10"
            self.redirect('/volumeaussnapshoterzeugen?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('/volumeaussnapshoterzeugen?mobile=' + str(mobile) +
                          '&message=' + fehlermeldung)
        else:
            # Wenn es geklappt hat...
            # Anzahl der Elemente in der Liste
            laenge_liste_zonen = len(liste_zonen)

        volume_aus_snapshot_erzeugen_tabelle = ''
        volume_aus_snapshot_erzeugen_tabelle += '<form action="/volumeaussnapshoterzeugen_definiv" method="post" accept-charset="utf-8">\n'
        volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="mobile" value="' + mobile + '">'
        volume_aus_snapshot_erzeugen_tabelle += '<input type="hidden" name="snapshot" value="' + snapshot + '">'
        volume_aus_snapshot_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">'
        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>ID:</b></td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<td>' + snapshot + '</td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</tr>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        if sprache == "de":
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zonen:</b></td>\n'
        else:
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Zones:</b></td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<td>\n'
        for i in range(laenge_liste_zonen):
            volume_aus_snapshot_erzeugen_tabelle += '<input type="radio" name="zone" value="' + liste_zonen[
                i].name + '"> ' + liste_zonen[i].name + '<BR>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</tr>\n'

        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        if sprache == "de":
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Gr&ouml;&szlig;e:</b></td>\n'
        else:
            volume_aus_snapshot_erzeugen_tabelle += '<td align="right"><b>Size:</b></td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<td><input name="groesse" type="text" size="3" maxlength="3">\n'
        volume_aus_snapshot_erzeugen_tabelle += '&nbsp;\n'
        volume_aus_snapshot_erzeugen_tabelle += '<select name="GB_oder_TB" size="1">\n'
        volume_aus_snapshot_erzeugen_tabelle += '<option selected="selected">GB</option>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<option>TB</option>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</select>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</tr>\n'
        volume_aus_snapshot_erzeugen_tabelle += '<tr>\n'
        if sprache == "de":
            volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Volume aus Snapshot erzeugen"></td>\n'
        else:
            volume_aus_snapshot_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create volume from snapshot"></td>\n'
        volume_aus_snapshot_erzeugen_tabelle += '</table>'
        volume_aus_snapshot_erzeugen_tabelle += '</form>'

        path = '&amp;path=volumeaussnapshoterzeugen&amp;snapshot=' + snapshot + '&amp;mobile=' + mobile

        template_values = {
            'navigations_bar': navigations_bar,
            'url': url,
            'url_linktext': url_linktext,
            'zone': regionname,
            'zone_amazon': zone_amazon,
            'volume_aus_snapshot_erzeugen_tabelle':
            volume_aus_snapshot_erzeugen_tabelle,
            'input_error_message': input_error_message,
            'zonen_liste': zonen_liste,
            'path': path,
        }

        if mobile == "true":
            path = os.path.join(os.path.dirname(__file__),
                                "../templates/mobile", sprache,
                                "volume_aus_snapshot_create.html")
        else:
            path = os.path.join(os.path.dirname(__file__), "../templates",
                                sprache, "volume_aus_snapshot_create.html")
        self.response.out.write(template.render(path, template_values))
예제 #19
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))
예제 #20
0
    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))
예제 #21
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))
예제 #22
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))
예제 #23
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')

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

            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 ("105", "110"):
                # 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 ("92", "106", "107", "108", "109"):
                input_error_message = format_error_message_red(
                    input_error_message)
            else:
                input_error_message = ""

            # Mit S3 verbinden
            conn_s3 = logins3(username)

            try:
                # Liste der Buckets
                liste_buckets = conn_s3.get_all_buckets()
            except:
                # Wenn es nicht klappt...
                if sprache == "de":
                    bucketstabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>'
                else:
                    bucketstabelle = '<font color="red">An error occured</font>'
            else:
                # Wenn es geklappt hat...
                # Anzahl der Elemente in der Liste
                laenge_liste_buckets = len(liste_buckets)

                if laenge_liste_buckets == 0:
                    if sprache == "de":
                        bucketstabelle = 'Es sind keine Buckets in der Region vorhanden.'
                    else:
                        bucketstabelle = 'Still no buckets exist inside this region.'
                else:

                    if mobile == "true":
                        # Mobile version

                        bucketstabelle = ''
                        bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">'
                        for i in range(laenge_liste_buckets):
                            bucketstabelle += '<tr>'
                            bucketstabelle += '<td align="left">'
                            bucketstabelle += '<a href="/bucketentfernen?bucket='
                            bucketstabelle += str(liste_buckets[i].name)
                            bucketstabelle += "&amp;mobile="
                            bucketstabelle += str(mobile)
                            if sprache == "de":
                                bucketstabelle += '" title="Bucket l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket l&ouml;schen"></a>'
                            else:
                                bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>'
                            bucketstabelle += '</td>'
                            bucketstabelle += '<td colspan="4" align="left">' + str(
                                liste_buckets[i].name) + '</td>'
                            bucketstabelle += '</tr>'
                            bucketstabelle += '<tr>'
                            bucketstabelle += '<td>&nbsp;</td>'
                            if sprache == "de":
                                bucketstabelle += '<td align="right"><b>Reines S3:</b></td>'
                            else:
                                bucketstabelle += '<td align="right"><b>pure S3:</b></td>'
                            bucketstabelle += '<td align="left">'
                            bucketstabelle += '<a href="/bucket_inhalt_pure?bucket='
                            bucketstabelle += str(liste_buckets[i].name)
                            bucketstabelle += "&amp;mobile="
                            bucketstabelle += str(mobile)
                            if sprache == "de":
                                bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            else:
                                bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            bucketstabelle += '</td>'
                            if sprache == "de":
                                bucketstabelle += '<td align="right"><b>Komfort S3:</b></td>'
                            else:
                                bucketstabelle += '<td align="right"><b>comfort S3:</b></td>'
                            bucketstabelle += '<td align="left">'
                            bucketstabelle += '<a href="/bucket_inhalt?bucket='
                            bucketstabelle += str(liste_buckets[i].name)
                            bucketstabelle += "&amp;mobile="
                            bucketstabelle += str(mobile)
                            if sprache == "de":
                                bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            else:
                                bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            bucketstabelle += '</td>'
                            bucketstabelle += '</tr>'
                        bucketstabelle += '</table>'

                    else:
                        # Not the mobile version

                        bucketstabelle = ''
                        bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">'
                        bucketstabelle += '<tr>'
                        bucketstabelle += '<th>&nbsp;</th>'
                        bucketstabelle += '<th align="left">Buckets</th>'
                        if sprache == "de":
                            bucketstabelle += '<th>Reine S3-Darstellung</th>'
                            bucketstabelle += '<th>Komfort-Darstellung</th>'
                        else:
                            bucketstabelle += '<th>Pure S3</th>'
                            bucketstabelle += '<th>S3 with more comfort</th>'
                        bucketstabelle += '</tr>'
                        for i in range(laenge_liste_buckets):
                            bucketstabelle += '<tr>'
                            bucketstabelle += '<td>'
                            bucketstabelle += '<a href="/bucketentfernen?bucket='
                            bucketstabelle += str(liste_buckets[i].name)
                            bucketstabelle += "&amp;mobile="
                            bucketstabelle += str(mobile)
                            if sprache == "de":
                                bucketstabelle += '" title="Bucket l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket l&ouml;schen"></a>'
                            else:
                                bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>'
                            bucketstabelle += '</td>'
                            bucketstabelle += '<td>' + str(
                                liste_buckets[i].name) + '</td>'
                            bucketstabelle += '<td align="center">'
                            bucketstabelle += '<a href="/bucket_inhalt_pure?bucket='
                            bucketstabelle += str(liste_buckets[i].name)
                            if sprache == "de":
                                bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            else:
                                bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            bucketstabelle += '</td>'
                            bucketstabelle += '<td align="center">'
                            bucketstabelle += '<a href="/bucket_inhalt?bucket='
                            bucketstabelle += str(liste_buckets[i].name)
                            if sprache == "de":
                                bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            else:
                                bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                            bucketstabelle += '</td>'
                            bucketstabelle += '</tr>'
                        bucketstabelle += '</table>'

            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,
                'bucketstabelle': bucketstabelle,
                'input_error_message': input_error_message,
                'mobile': mobile,
                'path': path,
            }

            if mobile == "true":
                path = os.path.join(os.path.dirname(__file__),
                                    "../templates/mobile", sprache, "s3.html")
            else:
                path = os.path.join(os.path.dirname(__file__), "../templates",
                                    sprache, "s3.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))
예제 #25
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))
예제 #26
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))
예제 #27
0
    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))
예제 #28
0
파일: S3.py 프로젝트: Smedira/koalacloud
    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')

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

          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 ("105", "110"):
            # 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 ("92", "106", "107", "108", "109"):
            input_error_message = format_error_message_red(input_error_message)
          else:
            input_error_message = ""

          # Mit S3 verbinden
          conn_s3 = logins3(username)

          try:
            # Liste der Buckets
            liste_buckets = conn_s3.get_all_buckets()
          except:
            # Wenn es nicht klappt...
            if sprache == "de":
              bucketstabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>'
            else:
              bucketstabelle = '<font color="red">An error occured</font>'
          else:
            # Wenn es geklappt hat...
            # Anzahl der Elemente in der Liste
            laenge_liste_buckets = len(liste_buckets)

            if laenge_liste_buckets == 0:
              if sprache == "de":
                bucketstabelle = 'Es sind keine Buckets in der Region vorhanden.'
              else:
                bucketstabelle = 'Still no buckets exist inside this region.'
            else:
              
              if mobile == "true":
                # Mobile version
                
                bucketstabelle = ''
                bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">'
                for i in range(laenge_liste_buckets):
                    bucketstabelle += '<tr>'
                    bucketstabelle += '<td align="left">'
                    bucketstabelle += '<a href="/bucketentfernen?bucket='
                    bucketstabelle += str(liste_buckets[i].name)
                    bucketstabelle += "&amp;mobile="
                    bucketstabelle += str(mobile)
                    if sprache == "de":
                      bucketstabelle += '" title="Bucket l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket l&ouml;schen"></a>'
                    else:
                      bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>'
                    bucketstabelle += '</td>'
                    bucketstabelle += '<td colspan="4" align="left">'+str(liste_buckets[i].name)+'</td>'
                    bucketstabelle += '</tr>'
                    bucketstabelle += '<tr>'
                    bucketstabelle += '<td>&nbsp;</td>'
                    if sprache == "de":
                      bucketstabelle += '<td align="right"><b>Reines S3:</b></td>'
                    else:
                      bucketstabelle += '<td align="right"><b>pure S3:</b></td>'
                    bucketstabelle += '<td align="left">'
                    bucketstabelle += '<a href="/bucket_inhalt_pure?bucket='
                    bucketstabelle += str(liste_buckets[i].name)
                    bucketstabelle += "&amp;mobile="
                    bucketstabelle += str(mobile)
                    if sprache == "de":
                      bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    else:
                      bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    bucketstabelle += '</td>'
                    if sprache == "de":
                      bucketstabelle += '<td align="right"><b>Komfort S3:</b></td>'
                    else:
                      bucketstabelle += '<td align="right"><b>comfort S3:</b></td>'
                    bucketstabelle += '<td align="left">'
                    bucketstabelle += '<a href="/bucket_inhalt?bucket='
                    bucketstabelle += str(liste_buckets[i].name)
                    bucketstabelle += "&amp;mobile="
                    bucketstabelle += str(mobile)
                    if sprache == "de":
                      bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    else:
                      bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    bucketstabelle += '</td>'
                    bucketstabelle += '</tr>'
                bucketstabelle += '</table>'
              
              else:
                # Not the mobile version
                
                bucketstabelle = ''
                bucketstabelle += '<table border="0" cellspacing="0" cellpadding="5">'
                bucketstabelle += '<tr>'
                bucketstabelle += '<th>&nbsp;</th>'
                bucketstabelle += '<th align="left">Buckets</th>'
                if sprache == "de":
                  bucketstabelle += '<th>Reine S3-Darstellung</th>'
                  bucketstabelle += '<th>Komfort-Darstellung</th>'
                else:
                  bucketstabelle += '<th>Pure S3</th>'
                  bucketstabelle += '<th>S3 with more comfort</th>'
                bucketstabelle += '</tr>'
                for i in range(laenge_liste_buckets):
                    bucketstabelle += '<tr>'
                    bucketstabelle += '<td>'
                    bucketstabelle += '<a href="/bucketentfernen?bucket='
                    bucketstabelle += str(liste_buckets[i].name)
                    bucketstabelle += "&amp;mobile="
                    bucketstabelle += str(mobile)
                    if sprache == "de":
                      bucketstabelle += '" title="Bucket l&ouml;schen"><img src="bilder/delete.png" width="16" height="16" border="0" alt="Bucket l&ouml;schen"></a>'
                    else:
                      bucketstabelle += '" title="erase bucket"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase bucket"></a>'
                    bucketstabelle += '</td>'
                    bucketstabelle += '<td>'+str(liste_buckets[i].name)+'</td>'
                    bucketstabelle += '<td align="center">'
                    bucketstabelle += '<a href="/bucket_inhalt_pure?bucket='
                    bucketstabelle += str(liste_buckets[i].name)
                    if sprache == "de":
                      bucketstabelle += '" title="Bucket einsehen (reine S3-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    else:
                      bucketstabelle += '" title="List content of this bucket (pure S3)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    bucketstabelle += '</td>'
                    bucketstabelle += '<td align="center">'
                    bucketstabelle += '<a href="/bucket_inhalt?bucket='
                    bucketstabelle += str(liste_buckets[i].name)
                    if sprache == "de":
                      bucketstabelle += '" title="Bucket einsehen (Komfort-Darstellung)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    else:
                      bucketstabelle += '" title="List content of this bucket (S3 with more comfort)"><img src="bilder/right.png" width="16" height="16" border="0" alt="Bucket"></a>'
                    bucketstabelle += '</td>'
                    bucketstabelle += '</tr>'
                bucketstabelle += '</table>'

          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,
          'bucketstabelle': bucketstabelle,
          'input_error_message': input_error_message,
          'mobile': mobile,
          'path': path,
          }

          if mobile == "true":
              path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "s3.html")
          else:
              path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "s3.html")
          self.response.out.write(template.render(path,template_values))
예제 #29
0
    def get(self):
        mobile = self.request.get('mobile')
        if mobile != "true":
            mobile = "false"
        # self.response.out.write('test')
        # Den Usernamen erfahren
        # Get the username
        username = users.get_current_user()
        if not username:
            self.redirect('/')
        # Die ID des zu startenden Images holen
        # Get the ID of the image that shall be started
        image = self.request.get('image')
        # Die Architektur des zu startenden Images holen
        # Get the architecture of the image that shall be started
        arch = self.request.get('arch')
        # Das Root Device des zu startenden Images holen
        # Get the root device of the image that shall be started
        root = self.request.get('root')

        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)

        # So wird der HTML-Code korrekt
        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'

        zonen_liste = zonen_liste_funktion(username, sprache, mobile)

        for result in results:

            imageliste = [str(image)]
            # Liste mit den Images
            liste_images = conn_region.get_all_images(image_ids=imageliste)
            # Anzahl der Images in der Liste
            laenge_liste_images = len(liste_images)
            for i in range(laenge_liste_images):
                if liste_images[i].id == image:
                    manifest = str(liste_images[i].location)

        if result.zugangstyp == "Nimbus":
            # If it is a Nimbus infrastructure...

            template_values = {
                'navigations_bar': navigations_bar,
                'url': url,
                'url_linktext': url_linktext,
                'zone': regionname,
                'zone_amazon': zone_amazon,
                'image': image,
                'manifest': manifest,
                'zonen_liste': zonen_liste,
                'mobile': mobile,
            }

            if mobile == "true":
                path = os.path.join(os.path.dirname(__file__),
                                    "../templates/mobile", sprache,
                                    "image_starten_nimbus.html")
            else:
                path = os.path.join(os.path.dirname(__file__), "../templates",
                                    sprache, "image_starten_nimbus.html")
            self.response.out.write(template.render(path, template_values))

        else:
            # If it is not a Nimbus infrastructure...

            # Wenn es Amazon EC2 ist
            if result.zugangstyp == "Amazon":
                if arch == "i386":
                    # Liste mit den Instanz-Typen wenn es ein 32-Bit Image ist
                    if root == "ebs":
                        liste_instanztypen_eucalyptus = [
                            "t1.micro", "m1.small", "c1.medium"
                        ]
                    else:
                        # root == instance-store
                        # t1.micro instances must have an EBS root device
                        liste_instanztypen_eucalyptus = [
                            "m1.small", "c1.medium"
                        ]
                else:
                    # Liste mit den Instanz-Typen wenn es ein 64-Bit Image ist
                    liste_instanztypen_eucalyptus = [
                        "t1.micro", "m1.small", "m1.medium", "m1.large",
                        "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge",
                        "c1.medium", "c1.xlarge", "cc1.4xlarge", "cc2.8xlarge",
                        "cg1.4xlarge"
                    ]
                # Anzahl der Elemente in der Liste
                laenge_liste_instanztypen_eucalyptus = len(
                    liste_instanztypen_eucalyptus)

                instance_types_liste = ""
                for i in range(laenge_liste_instanztypen_eucalyptus):
                    if i == 0:
                        instance_types_liste = instance_types_liste + '<option selected="selected">'
                    else:
                        instance_types_liste = instance_types_liste + "<option>"
                    instance_types_liste = instance_types_liste + liste_instanztypen_eucalyptus[
                        i]
                    instance_types_liste = instance_types_liste + "</option>"

                instance_types_liste_laenge = laenge_liste_instanztypen_eucalyptus
            elif result.zugangstyp == "Nimbus":
                # Wenn es Nimbus ist
                instance_types_liste_laenge = 0
                liste_instanztypen_eucalyptus = []
                laenge_liste_instanztypen_eucalyptus = 0
                instance_types_liste = []
            else:
                # Wenn es Eucalyptus ist
                liste_instanztypen_eucalyptus = [
                    "m1.small", "c1.medium", "m1.large", "m1.xlarge",
                    "c1.xlarge"
                ]
                # Anzahl der Elemente in der Liste mit den Instanz-Typen
                laenge_liste_instanztypen_eucalyptus = len(
                    liste_instanztypen_eucalyptus)

                instance_types_liste = ""
                for i in range(laenge_liste_instanztypen_eucalyptus):
                    if i == 0:
                        instance_types_liste = instance_types_liste + '<option selected="selected">'
                    else:
                        instance_types_liste = instance_types_liste + "<option>"
                    instance_types_liste = instance_types_liste + liste_instanztypen_eucalyptus[
                        i]
                    instance_types_liste = instance_types_liste + "</option>"

                instance_types_liste_laenge = laenge_liste_instanztypen_eucalyptus

            # Liste mit den Zonen
            liste_zonen = conn_region.get_all_zones()
            # Anzahl der Elemente in der Liste
            laenge_liste_zonen = len(liste_zonen)

            # Hier wird die Auswahlliste der Zonen erzeugt
            # Diese Auswahlliste ist zum Erzeugen neuer Volumes notwendig
            zonen_in_der_region = ''
            for i in range(laenge_liste_zonen):
                zonen_in_der_region = zonen_in_der_region + "<option>"
                zonen_in_der_region = zonen_in_der_region + liste_zonen[i].name
                zonen_in_der_region = zonen_in_der_region + "</option>"

            # Liste mit den Schlüsseln
            liste_key_pairs = conn_region.get_all_key_pairs()
            # Anzahl der Elemente in der Liste
            laenge_liste_keys = len(liste_key_pairs)

            keys_liste = ''
            if laenge_liste_keys == 0:
                if sprache == "de":
                    keys_liste = '<font color="red">Es sind keine Schl&uuml in der Zone vorhanden</font>'
                else:
                    keys_liste = '<font color="red">No keypairs exist inside this security zone</font>'
            # This is not workling. We need a list to get the value to the class that starts the instance
            #elif laenge_liste_keys == 1:
            #  keys_liste = '<input name="keys_liste" type="text" size="70" maxlength="70" value="'
            #  keys_liste = keys_liste + liste_key_pairs[0].name
            #  keys_liste = keys_liste + '" readonly>'
            else:
                keys_liste = keys_liste + '<select name="keys_liste" size="1">'
                for i in range(laenge_liste_keys):
                    if i == 0:
                        keys_liste = keys_liste + '<option selected="selected">'
                    else:
                        keys_liste = keys_liste + '<option>'
                    keys_liste = keys_liste + liste_key_pairs[i].name
                    keys_liste = keys_liste + '</option>'
                keys_liste = keys_liste + '</select>'

            try:
                # Liste mit den Security Groups
                liste_security_groups = conn_region.get_all_security_groups()
            except EC2ResponseError:
                # Wenn es nicht geklappt hat
                fehlermeldung = "78"
                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:
                # Wenn es geklappt hat

                # Anzahl der Elemente in der Liste
                laenge_liste_security_groups = len(liste_security_groups)

                gruppen_liste = ''
                if laenge_liste_security_groups == 0:
                    if sprache == "de":
                        gruppen_liste = '<font color="red">Es sind keine Sicherheitsgruppen in der Zone vorhanden</font>'
                    else:
                        gruppen_liste = '<font color="red">No Security Groups exist inside this security zone</font>'
                # This is not workling. We need a list to get the value to the class that starts the instance
                #elif laenge_liste_security_groups == 1:
                #  gruppen_liste = liste_security_groups[0].name
                else:
                    gruppen_liste = gruppen_liste + '<select name="gruppen_liste" size="1">'
                    for i in range(laenge_liste_security_groups):
                        if i == 0:
                            gruppen_liste = gruppen_liste + '<option selected="selected">'
                        else:
                            gruppen_liste = gruppen_liste + '<option>'
                        gruppen_liste = gruppen_liste + liste_security_groups[
                            i].name
                        #gruppen_liste = gruppen_liste + ' ('
                        #gruppen_liste = gruppen_liste + liste_security_groups[i].owner_id
                        #gruppen_liste = gruppen_liste + ')'
                        gruppen_liste = gruppen_liste + '</option>'
                    gruppen_liste = gruppen_liste + '</select>'

                instanz_starten_tabelle = ''
                if mobile == "true":
                    # Mobile version
                    instanz_starten_tabelle += '<form action="/instanzanlegen" method="post" accept-charset="utf-8">\n'
                    instanz_starten_tabelle += '<input type="hidden" name="mobile" value="' + mobile + '">\n'
                    instanz_starten_tabelle += '<input type="hidden" name="image_id" value="' + image + '">\n'
                    instanz_starten_tabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>AMI:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + image + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Manifest:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + manifest + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Root:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + root + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>AKI:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="aki_id" type="text" size="12" maxlength="12"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>ARI:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="ari_id" type="text" size="12" maxlength="12"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    if sprache == "de":
                        instanz_starten_tabelle += '<td align="right"><b>Typ:</b></td>\n'
                    else:
                        instanz_starten_tabelle += '<td align="right"><b>Type:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">'
                    instanz_starten_tabelle += '<select name="instance_type" size="1">' + instance_types_liste + '</select>\n'
                    instanz_starten_tabelle += '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Zone:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">'
                    instanz_starten_tabelle += '<select name="zonen_auswahl" size="1">' + zonen_in_der_region + '</select>\n'
                    instanz_starten_tabelle += '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Min:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="number_instances_min" type="text" size="2" maxlength="2" value="1"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Max:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="number_instances_max" type="text" size="2" maxlength="2" value="1"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    if sprache == "de":
                        instanz_starten_tabelle += '<td align="right"><b>Schl&uuml;ssel:</b></td>\n'
                    else:
                        instanz_starten_tabelle += '<td align="right"><b>Keypair:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + keys_liste + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    if sprache == "de":
                        instanz_starten_tabelle += '<td align="right"><b>Gruppe:</b></td>\n'
                    else:
                        instanz_starten_tabelle += '<td align="right"><b>Group:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + gruppen_liste + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td colspan="2" align="left">'
                    if sprache == "de":
                        instanz_starten_tabelle += '<input type="submit" value="Instanz starten">'
                    else:
                        instanz_starten_tabelle += '<input type="submit" value="create Instance">'
                    instanz_starten_tabelle += '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '</table>\n'
                    instanz_starten_tabelle += '</form>\n'

                else:
                    # Not the mobile version...

                    instanz_starten_tabelle += '<form action="/instanzanlegen" method="post" accept-charset="utf-8">\n'
                    instanz_starten_tabelle += '<input type="hidden" name="mobile" value="' + mobile + '">\n'
                    instanz_starten_tabelle += '<input type="hidden" name="image_id" value="' + image + '">\n'
                    instanz_starten_tabelle += '<table border="0" cellspacing="0" cellpadding="5">\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>AMI:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + image + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Manifest:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + manifest + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Root:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + root + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>AKI:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="aki_id" type="text" size="12" maxlength="12"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>ARI:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="ari_id" type="text" size="12" maxlength="12"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    if sprache == "de":
                        instanz_starten_tabelle += '<td align="right"><b>Typ:</b></td>\n'
                    else:
                        instanz_starten_tabelle += '<td align="right"><b>Type:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">'
                    instanz_starten_tabelle += '<select name="instance_type" size="1">' + instance_types_liste + '</select>\n'
                    instanz_starten_tabelle += '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Zone:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">'
                    instanz_starten_tabelle += '<select name="zonen_auswahl" size="1">' + zonen_in_der_region + '</select>\n'
                    instanz_starten_tabelle += '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Min:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="number_instances_min" type="text" size="2" maxlength="2" value="1"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td align="right"><b>Max:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left"><input name="number_instances_max" type="text" size="2" maxlength="2" value="1"></td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    if sprache == "de":
                        instanz_starten_tabelle += '<td align="right"><b>Schl&uuml;ssel:</b></td>\n'
                    else:
                        instanz_starten_tabelle += '<td align="right"><b>Keypair:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + keys_liste + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    if sprache == "de":
                        instanz_starten_tabelle += '<td align="right"><b>Gruppe:</b></td>\n'
                    else:
                        instanz_starten_tabelle += '<td align="right"><b>Group:</b></td>\n'
                    instanz_starten_tabelle += '<td align="left">' + gruppen_liste + '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '<tr>\n'
                    instanz_starten_tabelle += '<td colspan="2" align="left">'
                    if sprache == "de":
                        instanz_starten_tabelle += '<input type="submit" value="Instanz starten">'
                    else:
                        instanz_starten_tabelle += '<input type="submit" value="create Instance">'
                    instanz_starten_tabelle += '</td>\n'
                    instanz_starten_tabelle += '</tr>\n'
                    instanz_starten_tabelle += '</table>\n'
                    instanz_starten_tabelle += '</form>\n'

            # Wenn es Amazon EC2 ist
            if result.aktivezone in ("us-east-1", "eu-west-1", "us-west-1",
                                     "ap-southeast-1"):
                if arch == "i386":  # 32-Bit Image
                    tabelle_ec2_instanztypen = '<table border="3" cellspacing="0" cellpadding="5">'
                    tabelle_ec2_instanztypen += '<tr>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th>Instanztyp</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th>Type</th>'
                    tabelle_ec2_instanztypen += '<th>Bit</th>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th>Kerne</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th>Cores</th>'
                    tabelle_ec2_instanztypen += '<th align="center">ECU</th>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th align="center">Speicher</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th align="center">Storage</th>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>t1.micro</td>'
                    tabelle_ec2_instanztypen += '<td align="center">32</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1</td>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<td align="center">bis zu 2</td>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<td align="center">up to 2</td>'
                    tabelle_ec2_instanztypen += '<td align="center">613 MB</td>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<td align="center">nur EBS</td>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<td align="center">only EBS</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m1.small</td>'
                    tabelle_ec2_instanztypen += '<td align="center">32</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">160 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>c1.medium</td>'
                    tabelle_ec2_instanztypen += '<td align="center">32</td>'
                    tabelle_ec2_instanztypen += '<td align="center">2</td>'
                    tabelle_ec2_instanztypen += '<td align="center">5</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">350 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '</table>'

                    if root != "ebs":
                        if sprache == "de":
                            t1_micro_warnung = '<font color="red">t1.micro Instanzen ben&ouml;tigen als Root EBS</font>'
                        else:
                            t1_micro_warnung = '<font color="red">t1.micro instances must have an EBS root device</font>'
                    else:
                        t1_micro_warnung = ''

                elif arch == "x86_64":  # 64-Bit Image
                    tabelle_ec2_instanztypen = '<table border="3" cellspacing="0" cellpadding="5">'
                    tabelle_ec2_instanztypen += '<tr>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th>Instanztyp</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th>Type</th>'
                    tabelle_ec2_instanztypen += '<th>Bit</th>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th>Kerne</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th>Cores</th>'
                    tabelle_ec2_instanztypen += '<th align="center">ECU</th>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th align="center">RAM</th>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<th align="center">Speicher</th>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<th align="center">Storage</th>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>t1.micro</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1</td>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<td align="center">bis zu 2</td>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<td align="center">up to 2</td>'
                    tabelle_ec2_instanztypen += '<td align="center">613 MB</td>'
                    if sprache == "de":  # Wenn die Sprache Deutsch ist...
                        tabelle_ec2_instanztypen += '<td align="center">nur EBS</td>'
                    else:  # Wenn die Sprache Englisch ist...
                        tabelle_ec2_instanztypen += '<td align="center">only EBS</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m1.small</td>'
                    tabelle_ec2_instanztypen += '<td align="center">32</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">160 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m1.medium</td>'
                    tabelle_ec2_instanztypen += '<td align="center">32</td>'
                    tabelle_ec2_instanztypen += '<td align="center">2</td>'
                    tabelle_ec2_instanztypen += '<td align="center">5</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">410 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m1.large</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">2</td>'
                    tabelle_ec2_instanztypen += '<td align="center">4</td>'
                    tabelle_ec2_instanztypen += '<td align="center">7.5 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">850 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m1.xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">4</td>'
                    tabelle_ec2_instanztypen += '<td align="center">8</td>'
                    tabelle_ec2_instanztypen += '<td align="center">15 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m2.xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">2</td>'
                    tabelle_ec2_instanztypen += '<td align="center">6.5</td>'
                    tabelle_ec2_instanztypen += '<td align="center">17.1 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">420 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m2.2xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">4</td>'
                    tabelle_ec2_instanztypen += '<td align="center">13</td>'
                    tabelle_ec2_instanztypen += '<td align="center">34.2 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">850 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>m2.4xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">8</td>'
                    tabelle_ec2_instanztypen += '<td align="center">26</td>'
                    tabelle_ec2_instanztypen += '<td align="center">68.4 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>c1.medium</td>'
                    tabelle_ec2_instanztypen += '<td align="center">32</td>'
                    tabelle_ec2_instanztypen += '<td align="center">2</td>'
                    tabelle_ec2_instanztypen += '<td align="center">5</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1.7 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">350 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>c1.xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">8</td>'
                    tabelle_ec2_instanztypen += '<td align="center">20</td>'
                    tabelle_ec2_instanztypen += '<td align="center">7 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>cc1.4xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">8</td>'
                    tabelle_ec2_instanztypen += '<td align="center">33,5</td>'
                    tabelle_ec2_instanztypen += '<td align="center">23 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>cc2.8xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">16</td>'
                    tabelle_ec2_instanztypen += '<td align="center">88</td>'
                    tabelle_ec2_instanztypen += '<td align="center">60.5 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">3370 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '<tr>'
                    tabelle_ec2_instanztypen += '<td>cg1.4xlarge</td>'
                    tabelle_ec2_instanztypen += '<td align="center">64</td>'
                    tabelle_ec2_instanztypen += '<td align="center">8</td>'
                    tabelle_ec2_instanztypen += '<td align="center">33,5</td>'
                    tabelle_ec2_instanztypen += '<td align="center">22 GB</td>'
                    tabelle_ec2_instanztypen += '<td align="center">1690 GB</td>'
                    tabelle_ec2_instanztypen += '</tr>'
                    tabelle_ec2_instanztypen += '</table>'

                    if root != "ebs":
                        if sprache == "de":
                            t1_micro_warnung = '<font color="red">t1.micro Instanzen ben&ouml;tigen als Root Device EBS</font>'
                        else:
                            t1_micro_warnung = '<font color="red">t1.micro instances must have an EBS root device</font>'
                    else:
                        t1_micro_warnung = ''

                else:
                    # Wenn es etwas ganz anderes ist...?
                    tabelle_ec2_instanztypen = ''
                    t1_micro_warnung = ''
            else:
                # wenn es Eucalyptus ist
                tabelle_ec2_instanztypen = ''
                t1_micro_warnung = ''

            path = '&amp;path=images&amp;mobile=' + mobile

            template_values = {
                'navigations_bar': navigations_bar,
                'url': url,
                'url_linktext': url_linktext,
                'zone': regionname,
                'zone_amazon': zone_amazon,
                'instance_types_liste': instance_types_liste,
                'instance_types_liste_laenge': instance_types_liste_laenge,
                'keys_liste': keys_liste,
                'gruppen_liste': gruppen_liste,
                'zonen_liste': zonen_liste,
                'tabelle_ec2_instanztypen': tabelle_ec2_instanztypen,
                'zonen_in_der_region': zonen_in_der_region,
                'laenge_liste_zonen': laenge_liste_zonen,
                't1_micro_warnung': t1_micro_warnung,
                'instanz_starten_tabelle': instanz_starten_tabelle,
                'mobile': mobile,
                'path': path,
            }

            if mobile == "true":
                path = os.path.join(os.path.dirname(__file__),
                                    "../templates/mobile", sprache,
                                    "image_starten.html")
            else:
                path = os.path.join(os.path.dirname(__file__), "../templates",
                                    sprache, "image_starten.html")
            self.response.out.write(template.render(path, template_values))
예제 #30
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))
예제 #31
0
    def get(self):
        # Namen des Keys holen, dessen ACL angezeigt wird
        keyname = self.request.get('key')
        # Get the MD5 hash of the key that need to be erased
        md5hash = self.request.get('md5hash')
        
        # Get the username
        username = users.get_current_user()
        if not username:
          self.redirect('/')
          
        # Nachsehen, ob Credentials von diesem Benutzer eingeneben wurden
        testen = db.GqlQuery("SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db", username_db=username)
            
        results = testen.fetch(100)

        if not results:
          self.redirect('/')
        else:
          # Nachsehen, ob Credentials für einen Amazon S3 Zugang eingegeben wurden
          testen = db.GqlQuery("SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db AND zugangstyp = :zugangstyp_db", username_db=username, zugangstyp_db="Amazon")
          # Wenn Einträge vorhanden sind, werden sie aus der DB geholt und gelöscht
          results = testen.fetch(100)
          if results:
            # Es gibt schon einen S3 Zugang
            aktuellezone = "Amazon"
            eucalyptusname = "Amazon"
          else:
            # Nachsehen, ob Credentials für einen Eucalyptus Zugang eingegeben wurden
            testen = db.GqlQuery("SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db AND zugangstyp = :zugangstyp_db", username_db=username, zugangstyp_db="Eucalyptus")
            results = testen.fetch(100)
             
            if results:
              # Es gibt einen Eucalyptus (Walrus) Zugang
              aktuellezone = "Eucalyptus"
              # Einen Eucalyptus-Zugang holen
              anzahl = testen.count()   
              for test in results:
                eucalyptusname = str(test.eucalyptusname)
                
            else:
              self.redirect('/')
              
            
        # Connect with storage service
        conn_s3, regionname = logins3(username, aktuellezone)
        
        # Get values from the config file
        # The name of the bucket that is used      
        # The character "@" cannot be used. Therefore we use "at".  
        bucketname = str(parser.get('bucket', 'bucketname'))+str(username).replace('@', 'at').replace('.', '-')
            
        bucket_instance = conn_s3.get_bucket(bucketname)

        

        # Nachsehen, ob eine Sprache ausgewählte wurde und wenn ja, welche Sprache
        sprache = aktuelle_sprache(username)
        navigations_bar = navigations_bar_funktion(sprache)



        url = users.create_logout_url(self.request.uri).replace('&', '&amp;').replace('&amp;amp;', '&amp;')
        url_linktext = 'Logout'



        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="1" cellspacing="0" cellpadding="5"> \n'
        acl_tabelle = acl_tabelle + '<tr> \n'
        if sprache == "de": 
          acl_tabelle = acl_tabelle + '<th>Benutzer</th> \n'
          acl_tabelle = acl_tabelle + '<th>Lesen</th> \n'
          acl_tabelle = acl_tabelle + '<th>Schreiben</th> \n'
          acl_tabelle = acl_tabelle + '<th>Voller Zugriff</th> \n'
        else:
          acl_tabelle = acl_tabelle + '<th>User</th> \n'
          acl_tabelle = acl_tabelle + '<th>Read</th> \n'
          acl_tabelle = acl_tabelle + '<th>Write</th> \n'
          acl_tabelle = acl_tabelle + '<th>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'


        template_values = {
        'navigations_bar': navigations_bar,
        'url': url,
        'url_linktext': url_linktext,
        'keyname': keyname,
        'acl_tabelle': acl_tabelle,
        'md5hash': md5hash
        }


        path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "acl.html")
        self.response.out.write(template.render(path,template_values))
예제 #32
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))
예제 #33
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')

        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 ("8", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60"):
            # wird sie hier, in der Hilfsfunktion rot formatiert
            input_error_message = format_error_message_red(input_error_message)
        else:
            input_error_message = ""

        try:
            # Liste mit den Zonen
            liste_zonen = conn_region.get_all_zones()
        except EC2ResponseError:
            # Wenn es nicht geklappt hat...
            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 = "8"
            self.redirect('/loadbalancer?mobile='+str(mobile)+'&message='+fehlermeldung)
        else:
            # Wenn es geklappt hat...
            # Anzahl der Elemente in der Liste
            laenge_liste_zonen = len(liste_zonen)

        if mobile == "true":
            elb_erzeugen_tabelle = ''
            elb_erzeugen_tabelle += '<form action="/elb_definiv_erzeugen" method="post" accept-charset="utf-8">\n'
            elb_erzeugen_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">'
            elb_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">'
            elb_erzeugen_tabelle += '<tr>\n'
            elb_erzeugen_tabelle += '<td align="right">Name:</td>\n'      
            elb_erzeugen_tabelle += '<td><input name="elb_name" type="text" size="20" maxlength="20"></td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            if sprache == "de":
                elb_erzeugen_tabelle += '<td align="right">Zonen:</td>\n'
            else:
                elb_erzeugen_tabelle += '<td align="right">Zones:</td>\n' 
            elb_erzeugen_tabelle += '<td>\n'
            for i in range(laenge_liste_zonen):
                elb_erzeugen_tabelle += '<input type="checkbox" name="'+liste_zonen[i].name+'" value="'+liste_zonen[i].name+'"> '+liste_zonen[i].name+'<BR>\n'
            elb_erzeugen_tabelle += '</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            if sprache == "de":
                elb_erzeugen_tabelle += '<td align="right">Protokoll:</td>\n'
            else:
                elb_erzeugen_tabelle += '<td align="right">Protocol:</td>\n'
            elb_erzeugen_tabelle += '<td>\n'
            elb_erzeugen_tabelle += '<select name="elb_protokoll" size="1">\n'
            elb_erzeugen_tabelle += '  <option selected="selected">TCP</option>\n'
            elb_erzeugen_tabelle += '  <option>HTTP</option>\n'
            elb_erzeugen_tabelle += '</select>\n'
            elb_erzeugen_tabelle += '</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            elb_erzeugen_tabelle += '<td align="right">Port:</td>\n'
            elb_erzeugen_tabelle += '<td><input name="ELBPort" type="text" size="6" maxlength="6">'
            if sprache == "de":
                elb_erzeugen_tabelle += ' (Lastverteiler)</td>\n'
            else:
                elb_erzeugen_tabelle += ' (load balancer)</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            elb_erzeugen_tabelle += '<td align="right">Port:</td>\n'              
            elb_erzeugen_tabelle += '<td><input name="InstPort" type="text" size="6" maxlength="6">'
            if sprache == "de":
                elb_erzeugen_tabelle += ' (Instanz)</td>\n'
            else:
                elb_erzeugen_tabelle += ' (instance)</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
 
            elb_erzeugen_tabelle += '<tr>\n'
            if sprache == "de":
                elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Elastischen Lastverteiler anlegen"></td>\n'
            else:
                elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create elastic load balancer"></td>\n'
            elb_erzeugen_tabelle += '</table>'
            elb_erzeugen_tabelle += '</form>'
        else:
            elb_erzeugen_tabelle = ''
            elb_erzeugen_tabelle += '<form action="/elb_definiv_erzeugen" method="post" accept-charset="utf-8">\n'
            elb_erzeugen_tabelle += '<input type="hidden" name="mobile" value="'+mobile+'">'
            elb_erzeugen_tabelle += '<table border="0" cellspacing="0" cellpadding="5">'
            elb_erzeugen_tabelle += '<tr>\n'
            elb_erzeugen_tabelle += '<td align="right">Name:</td>\n'      
            elb_erzeugen_tabelle += '<td><input name="elb_name" type="text" size="20" maxlength="20"></td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            if sprache == "de":
                elb_erzeugen_tabelle += '<td align="right">Zonen:</td>\n'
            else:
                elb_erzeugen_tabelle += '<td align="right">Zones:</td>\n' 
            elb_erzeugen_tabelle += '<td>\n'
            for i in range(laenge_liste_zonen):
                elb_erzeugen_tabelle += '<input type="checkbox" name="'+liste_zonen[i].name+'" value="'+liste_zonen[i].name+'"> '+liste_zonen[i].name+'<BR>\n'
            elb_erzeugen_tabelle += '</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            if sprache == "de":
                elb_erzeugen_tabelle += '<td align="right">Protokoll:</td>\n'
            else:
                elb_erzeugen_tabelle += '<td align="right">Protocol:</td>\n'
            elb_erzeugen_tabelle += '<td>\n'
            elb_erzeugen_tabelle += '<select name="elb_protokoll" size="1">\n'
            elb_erzeugen_tabelle += '  <option selected="selected">TCP</option>\n'
            elb_erzeugen_tabelle += '  <option>HTTP</option>\n'
            elb_erzeugen_tabelle += '</select>\n'
            elb_erzeugen_tabelle += '</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            elb_erzeugen_tabelle += '<td align="right">Port:</td>\n'
            elb_erzeugen_tabelle += '<td><input name="ELBPort" type="text" size="6" maxlength="6">'
            if sprache == "de":
                elb_erzeugen_tabelle += ' (Lastverteiler)</td>\n'
            else:
                elb_erzeugen_tabelle += ' (load balancer)</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
            elb_erzeugen_tabelle += '<tr>\n'
            elb_erzeugen_tabelle += '<td align="right">Port:</td>\n'              
            elb_erzeugen_tabelle += '<td><input name="InstPort" type="text" size="6" maxlength="6">'
            if sprache == "de":
                elb_erzeugen_tabelle += ' (Instanz)</td>\n'
            else:
                elb_erzeugen_tabelle += ' (instance)</td>\n'
            elb_erzeugen_tabelle += '</tr>\n'
 
            elb_erzeugen_tabelle += '<tr>\n'
            if sprache == "de":
                elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="Elastischen Lastverteiler anlegen"></td>\n'
            else:
                elb_erzeugen_tabelle += '<td align="left" colspan="2"><input type="submit" value="create elastic load balancer"></td>\n'
            elb_erzeugen_tabelle += '</table>'
            elb_erzeugen_tabelle += '</form>'

        path = '&amp;path=create_load_balancer&amp;mobile='+mobile
              
        template_values = {
        'navigations_bar': navigations_bar,
        'url': url,
        'url_linktext': url_linktext,
        'zone': regionname,
        'zone_amazon': zone_amazon,
        'elb_erzeugen_tabelle': elb_erzeugen_tabelle,
        'input_error_message': input_error_message,
        'zonen_liste': zonen_liste,
        'path': path,
        }

        if mobile == "true":
            path = os.path.join(os.path.dirname(__file__), "../templates/mobile", sprache, "elb_create.html")
        else:
            path = os.path.join(os.path.dirname(__file__), "../templates", sprache, "elb_create.html")
        self.response.out.write(template.render(path,template_values))
        
예제 #34
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))
예제 #35
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('/')
        # 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":
            
            path = '&amp;path=snapshots&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 ("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="self")
            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 = 'Sie haben keine Snapshots in dieser Region.'
                else:
                  snapshotstabelle = 'You have no snapshots inside this region.'
              else: 
                
                if mobile == "true":
                  # Mobile version of the table
                  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="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=own"
                      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">'+liste_snapshots[i].volume_id+'</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=own"
                      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_amazon_all" method="get">\n'
                  ansicht_amazon_button += '<input type="hidden" name="mobile" value="'+str(mobile)+'">\n'
                  ansicht_amazon_button += '<input type="submit" value="Alle erreichbaren 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_amazon_all" method="get">\n'
                  ansicht_amazon_button += '<input type="hidden" name="mobile" value="'+str(mobile)+'">\n'
                  ansicht_amazon_button += '<input type="submit" value="show all available snapshots">\n'
                  ansicht_amazon_button += '</form>\n'
                  ansicht_amazon_button += '<p>&nbsp;</p>\n'
            else:  
                ansicht_amazon_button = ""
                
            path = '&amp;path=snapshots&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))
  
            
예제 #36
0
    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))
예제 #37
0
    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))
예제 #38
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))
예제 #39
0
    def get(self):
        # self.response.out.write('posted!')

        # Get username
        username = users.get_current_user()
        if not username:
            self.redirect('/')
        # Get error messages if any exist
        message = self.request.get('message')

        # Datastore query that checks if any credentials for this user exist
        testen = db.GqlQuery(
            "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db",
            username_db=username)

        # How many entries of this user exist?
        anzahl = testen.count()

        # Get the result of your datastore query
        results = testen.fetch(100)

        if not results:
            self.redirect('/')
        else:
            # Datastore query that checks if credentials for Amazon S3 exist
            testen = db.GqlQuery(
                "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db AND zugangstyp = :zugangstyp_db",
                username_db=username,
                zugangstyp_db="Amazon")
            # Get the result of your datastore query
            results = testen.fetch(100)
            if results:
                # If credentials for Amazon S3 exist
                aktuellezone = "Amazon"
                eucalyptusname = "Amazon"
            else:
                # No credentials for Amazon S3 exist
                # Datastore query that checks if credentials for a Walrus (Eucalyptus) Private Cloud exist
                testen = db.GqlQuery(
                    "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db AND zugangstyp = :zugangstyp_db",
                    username_db=username,
                    zugangstyp_db="Eucalyptus")
                # Get the result of your datastore query
                results = testen.fetch(100)

                if results:
                    # If credentials for an Walrus (Eucalyptus) Private Cloud exist
                    aktuellezone = "Eucalyptus"
                    # Get the credentials for the Walrus (Eucalyptus) Private Cloud
                    anzahl = testen.count()
                    for test in results:
                        eucalyptusname = str(test.eucalyptusname)

                else:
                    # If no Walrus (Eucalyptus) credentials are given, we jump back to the root window
                    self.redirect('/')

            # Get the language of the user
            sprache = aktuelle_sprache(username)
            # Generate the navigations bar
            navigations_bar = navigations_bar_funktion(sprache)

            url = users.create_logout_url(self.request.uri).replace(
                '&', '&amp;').replace('&amp;amp;', '&amp;')
            url_linktext = 'Logout'

            # If the language is not set to german, it is set here to english
            if sprache != "de":
                sprache = "en"

            input_error_message = error_messages.get(message, {}).get(sprache)

            # If no error messages exist, the result here is "None".
            if input_error_message == None:
                input_error_message = ""

            # These error messages are formated in green...
            if message in ("111", "118", "120"):
                # This helper function formats in green
                input_error_message = format_error_message_green(
                    input_error_message)
            # These error messages are formated in red...
            elif message in ("112", "119", "121"):
                input_error_message = format_error_message_red(
                    input_error_message)
            else:
                input_error_message = ""

            # Get Access Kkey for storage service that is used to display the list of keys
            AWSAccessKeyId = aws_access_key_erhalten(username, eucalyptusname)
            # Get Secret Access Key for storage service that is used to display the list of keys
            AWSSecretAccessKeyId = aws_secret_access_key_erhalten(
                username, eucalyptusname)

            # Connect with storage service
            conn_s3, regionname = logins3(username, aktuellezone)

            # Get values from the config file
            # The name of the bucket that is used
            # The character "@" cannot be used. Therefore we use "at".
            bucketname = str(parser.get('bucket',
                                        'bucketname')) + str(username).replace(
                                            '@', 'at').replace('.', '-')

            try:
                # Connect with bucket
                bucket_instance = conn_s3.get_bucket(bucketname)
            except:
                # When it didn't work
                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:
                # When it worked...
                try:
                    # Get a list of all keys inside the bucket
                    liste_keys = bucket_instance.get_all_keys()
                except:
                    # When it didn't work
                    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:
                    # When it worked...
                    # Number of keys inside the list
                    laenge_liste_keys = len(liste_keys)

            # When using Walrus (Eucalyptus), we need to erase the stupid "None" entry.
#          if aktuellezone != "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 we have more than one storage services, we need to compare the MD5 checksums
            if anzahl > 1:
                # If we have keys inside the bucket, we need to create a list that contains the MD5 checksums
                if laenge_liste_keys == 0:
                    # Create an empty List
                    Main_Liste = []
                    # Length of the List
                    Main_Liste_laenge = len(Main_Liste)
                    Second_list = get_second_list(username, aktuellezone,
                                                  eucalyptusname)
                    Second_list_laenge = len(Second_list)
                else:
                    # if laenge_liste_keys is not 0
                    # Create an empty List
                    Main_Liste = []
                    # Walk through the list of keys
                    for i in range(laenge_liste_keys):
                        # In S3 each MD5 checksum is enclosed by double quotes. In Walrus they are not
                        Main_Liste.append(
                            str(liste_keys[i].etag).replace('"', ''))
                    # Sort the List
                    Main_Liste.sort()
                    # Length of the List
                    Main_Liste_laenge = len(Main_Liste)
                    Second_list = get_second_list(username, aktuellezone,
                                                  eucalyptusname)
                    Second_list_laenge = len(Second_list)

#              self.response.out.write(Main_Liste)
#              self.response.out.write(Main_Liste_laenge)
#              self.response.out.write(Second_list)
#              self.response.out.write(Second_list_laenge)

            if laenge_liste_keys == 0:
                # No keys have been imported yet!
                if sprache == "de":
                    bucket_keys_tabelle = 'Sie haben noch keine Dateien importiert.'
                else:
                    bucket_keys_tabelle = 'No keys have been imported yet.'
            else:
                # There are keys in the bucket
                bucket_keys_tabelle = ''
                bucket_keys_tabelle = bucket_keys_tabelle + '<table border="3" cellspacing="0" cellpadding="5">'
                bucket_keys_tabelle = bucket_keys_tabelle + '<tr>'
                bucket_keys_tabelle = bucket_keys_tabelle + '<th>&nbsp;&nbsp;&nbsp;</th>'
                bucket_keys_tabelle = bucket_keys_tabelle + '<th>&nbsp;&nbsp;&nbsp;</th>'
                if sprache == "de":
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="left">Keys</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Dateigr&ouml;&szlig;e</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Letzte &Auml;nderung</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Zugriffsberechtigung</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Pr&uuml;fsumme (MD5)</th>'
                else:
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="left">Keys</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Filesize</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Last Modified</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">Access Control List</th>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<th align="center">MD5</th>'
                bucket_keys_tabelle = bucket_keys_tabelle + '</tr>'

                for i in range(laenge_liste_keys):
                    bucket_keys_tabelle = bucket_keys_tabelle + '<tr>'
                    if liste_keys[i].name == None and aktuellezone != "Amazon":
                        bucket_keys_tabelle = bucket_keys_tabelle + '<td>&nbsp;</td>'
                    else:
                        bucket_keys_tabelle = bucket_keys_tabelle + '<td>'
                        bucket_keys_tabelle = bucket_keys_tabelle + '<a href="/bucketkeyentfernen?md5hash='
                        bucket_keys_tabelle = bucket_keys_tabelle + str(
                            liste_keys[i].etag).replace('"', '')
                        if sprache == "de":
                            bucket_keys_tabelle = 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 = bucket_keys_tabelle + '" title="erase key"><img src="bilder/delete.png" width="16" height="16" border="0" alt="erase key"></a>'
                        bucket_keys_tabelle = bucket_keys_tabelle + '</td>'

                    if liste_keys[i].name == None and aktuellezone != "Amazon":
                        bucket_keys_tabelle = bucket_keys_tabelle + '<td>&nbsp;</td>'
                    else:
                        bucket_keys_tabelle = bucket_keys_tabelle + '<td>'
                        if sprache == "de":
                            bucket_keys_tabelle = bucket_keys_tabelle + '<img src="bilder/document.png" width="16" height="16" border="0" alt="Datei">'
                        else:
                            bucket_keys_tabelle = bucket_keys_tabelle + '<img src="bilder/document.png" width="16" height="16" border="0" alt="File">'
                        bucket_keys_tabelle = bucket_keys_tabelle + '</td>'

                    bucket_keys_tabelle = bucket_keys_tabelle + '<td>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<a href="'
                    bucket_keys_tabelle = bucket_keys_tabelle + liste_keys[
                        i].generate_url(600,
                                        method='GET',
                                        headers=None,
                                        query_auth=True,
                                        force_http=False).replace(
                                            '&', '&amp;').replace(
                                                '&amp;amp;', '&amp;')
                    bucket_keys_tabelle = bucket_keys_tabelle + '">'
                    bucket_keys_tabelle = bucket_keys_tabelle + str(
                        liste_keys[i].name)
                    bucket_keys_tabelle = bucket_keys_tabelle + '</a>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '</td>'

                    bucket_keys_tabelle = bucket_keys_tabelle + '<td align="right">'
                    if liste_keys[i].name == None and aktuellezone != "Amazon":
                        bucket_keys_tabelle = bucket_keys_tabelle + '&nbsp;'
                    else:
                        bucket_keys_tabelle = bucket_keys_tabelle + str(
                            liste_keys[i].size)
                    bucket_keys_tabelle = bucket_keys_tabelle + '</td>'

                    bucket_keys_tabelle = bucket_keys_tabelle + '<td>'
                    # Format ISO8601 timestring for better looking.
                    if liste_keys[i].name == None and aktuellezone != "Amazon":
                        bucket_keys_tabelle = bucket_keys_tabelle + '&nbsp;'
                    else:
                        datum_der_letzten_aenderung = parse(
                            liste_keys[i].last_modified)
                        bucket_keys_tabelle = bucket_keys_tabelle + str(
                            datum_der_letzten_aenderung.strftime(
                                "%Y-%m-%d  %H:%M:%S"))
                    bucket_keys_tabelle = bucket_keys_tabelle + '</td>'

                    bucket_keys_tabelle = bucket_keys_tabelle + '<td align="center">'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<a href="/acl_einsehen?key='
                    bucket_keys_tabelle = bucket_keys_tabelle + str(
                        liste_keys[i].name)
                    bucket_keys_tabelle = bucket_keys_tabelle + '&amp;md5hash='
                    bucket_keys_tabelle = bucket_keys_tabelle + str(
                        liste_keys[i].etag).replace('"', '')
                    if sprache == "de":
                        bucket_keys_tabelle = bucket_keys_tabelle + '" title="ACL einsehen/&auml;ndern">ACL einsehen/&auml;ndern</a>'
                    else:
                        bucket_keys_tabelle = bucket_keys_tabelle + '" title="view/edit ACL">view/edit ACL</a>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '</td>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<td align="center">'
                    bucket_keys_tabelle = bucket_keys_tabelle + '<tt>' + str(
                        liste_keys[i].etag).replace('"', '') + '</tt>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '</td>'
                    bucket_keys_tabelle = bucket_keys_tabelle + '</tr>'
                bucket_keys_tabelle = bucket_keys_tabelle + '</table>'

            #Documentation about howto upload keys into S3
            #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

            # Create the policy dokument
            # expiration date is specified in ISO 8601 format.
            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", ""],'
            policy_document = policy_document + '{"success_action_redirect": "http://cloudoctopus.appspot.com/S3"},'
            policy_document = policy_document + '["starts-with", "$key", ""],'
            policy_document = policy_document + '["starts-with", "$Content-Type", ""]'
            policy_document = policy_document + ']'
            policy_document = policy_document + '}'

            # Encode the policy document using Base64
            policy = base64.b64encode(policy_document)

            # Calculate the signature with the Secret Access Key and the policy
            signature = base64.b64encode(
                hmac.new(AWSSecretAccessKeyId, policy, sha).digest())

            # This is done all before.
            # !!! Silly programming !!!

            # Get data out of the DB
            alledaten = db.GqlQuery(
                "SELECT * FROM OctopusCloudDatenbank WHERE user = :username_db",
                username_db=username)
            # How many entries for this user exist?
            alledaten_clount = alledaten.count()
            # Get all data of user
            alledaten_ergebnisse = alledaten.fetch(100)
            i = 0
            # Walk through every line of the user in the DB
            for alledatendurchlauf in alledaten_ergebnisse:
                i = i + 1
                if i == 1:
                    regionname1 = str(alledatendurchlauf.regionname)
                    endpointurl1 = str(alledatendurchlauf.endpointurl)
                    accesskey1 = str(alledatendurchlauf.accesskey)
                    zugangstyp1 = str(alledatendurchlauf.zugangstyp)
                    eucalyptusname1 = str(alledatendurchlauf.eucalyptusname)
                    port1 = str(alledatendurchlauf.port)
                    ziel_adresse_upload1 = endpointurl1 + '/'

                    AWSSecretAccessKeyId1 = aws_secret_access_key_erhalten(
                        username, eucalyptusname1)
                    signature1 = base64.b64encode(
                        hmac.new(AWSSecretAccessKeyId1, policy, sha).digest())
                else:
                    regionname2 = str(alledatendurchlauf.regionname)
                    endpointurl2 = str(alledatendurchlauf.endpointurl)
                    accesskey2 = str(alledatendurchlauf.accesskey)
                    zugangstyp2 = str(alledatendurchlauf.zugangstyp)
                    eucalyptusname2 = str(alledatendurchlauf.eucalyptusname)
                    port2 = str(alledatendurchlauf.port)
                    ziel_adresse_upload2 = endpointurl2 + '/'

                    AWSSecretAccessKeyId2 = aws_secret_access_key_erhalten(
                        username, eucalyptusname2)
                    signature2 = base64.b64encode(
                        hmac.new(AWSSecretAccessKeyId2, policy, sha).digest())

#              self.response.out.write(regionname1 + '<BR>')
#              self.response.out.write(zugangstyp1 + '<BR>')
#              self.response.out.write(eucalyptusname1 + '<BR>')
#              self.response.out.write(accesskey1 + '<BR>')
#              self.response.out.write(AWSSecretAccessKeyId1 + '<BR>')
#              self.response.out.write(ziel_adresse_upload1+bucketname + '<BR>')
#
#              self.response.out.write(regionname2 + '<BR>')
#              self.response.out.write(zugangstyp2 + '<BR>')
#              self.response.out.write(eucalyptusname2 + '<BR>')
#              self.response.out.write(accesskey2 + '<BR>')
#              self.response.out.write(AWSSecretAccessKeyId2 + '<BR>')
#              self.response.out.write(ziel_adresse_upload2+bucketname + '<BR>')

            ajax_formular = ''
            ajax_formular = ajax_formular + '<script type="text/javascript" src="jquery.min.js"></script>\n'
            ajax_formular = ajax_formular + '<script type="text/javascript" src="upload.js"></script>\n'
            ajax_formular = ajax_formular + '<script type="text/javascript" src="jquery.blockUI.js"></script>\n'

            ajax_formular = ajax_formular + '<script type="text/javascript">'
            if anzahl == 1:

                #            if aktuellezone == "Eucalyptus":
                #              endpointurl = endpointurl_erhalten(username,eucalyptusname)
                #              port = port_erhalten(username,eucalyptusname)
                #              ziel_adresse =  str(endpointurl) + ':' + str(port) + '/services/Walrus/'
                if aktuellezone == "GoogleStorage":
                    ziel_adresse = 'commondatastorage.googleapis.com/'
                else:
                    # aktuellezone == "Amazon":
                    ziel_adresse = 's3.amazonaws.com/'

                ajax_formular = ajax_formular + 'var data = ['
                ajax_formular = ajax_formular + '{sUrl:"http://' + ziel_adresse + bucketname + '",'
                ajax_formular = ajax_formular + ' success_action_redirect:"http://cloudoctopus.appspot.com/S3",'
                ajax_formular = ajax_formular + ' AWSAccessKeyId:"' + AWSAccessKeyId + '",'
                ajax_formular = ajax_formular + ' policy:"' + policy + '",'
                ajax_formular = ajax_formular + ' signature:"' + signature + '"}'
                ajax_formular = ajax_formular + '];'
            else:
                ajax_formular = ajax_formular + 'var data = ['
                ajax_formular = ajax_formular + '{sUrl:"http://' + ziel_adresse_upload1 + bucketname + '",'
                ajax_formular = ajax_formular + ' success_action_redirect:"http://cloudoctopus.appspot.com/S3",'
                ajax_formular = ajax_formular + ' AWSAccessKeyId:"' + accesskey1 + '",'
                ajax_formular = ajax_formular + ' policy:"' + policy + '",'
                ajax_formular = ajax_formular + ' signature:"' + signature1 + '"}'
                ajax_formular = ajax_formular + ' ,'
                ajax_formular = ajax_formular + ' {sUrl:"http://' + ziel_adresse_upload2 + bucketname + '",'
                ajax_formular = ajax_formular + ' success_action_redirect:"http://cloudoctopus.appspot.com/S3",'
                ajax_formular = ajax_formular + ' AWSAccessKeyId:"' + accesskey2 + '",'
                ajax_formular = ajax_formular + ' policy:"' + policy + '",'
                ajax_formular = ajax_formular + ' signature:"' + signature2 + '"}'
                ajax_formular = ajax_formular + '];'
            ajax_formular = ajax_formular + '</script>\n'

            keys_upload_formular = '<p>&nbsp;</p>\n'
            keys_upload_formular = keys_upload_formular + '<form target="frame1" id="form1" action="" method="post" enctype="multipart/form-data">\n'
            keys_upload_formular = keys_upload_formular + '<table border="0" cellspacing="0" cellpadding="5">'
            keys_upload_formular = keys_upload_formular + '<tr>'
            keys_upload_formular = keys_upload_formular + '<td>'
            keys_upload_formular = keys_upload_formular + '<input type="hidden" name="key" value="${filename}">\n'
            keys_upload_formular = keys_upload_formular + '<select name="acl" size="1">\n'
            keys_upload_formular = keys_upload_formular + '<option selected="selected">public-read</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>private</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>public-read-write</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>authenticated-read</option>\n'
            keys_upload_formular = keys_upload_formular + '</select>\n'
            keys_upload_formular = keys_upload_formular + '<select name="Content-Type" size="1">\n'
            keys_upload_formular = keys_upload_formular + '<option selected="selected">application/octet-stream</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>application/pdf</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>application/zip</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>audio/mp4</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>audio/mpeg</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>audio/ogg</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>audio/vorbis</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>image/gif</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>image/jpeg</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>image/png</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>image/tiff</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>text/html</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>text/plain</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>video/mp4</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>video/mpeg</option>\n'
            keys_upload_formular = keys_upload_formular + '<option>video/ogg</option>\n'
            keys_upload_formular = keys_upload_formular + '</select>\n'
            keys_upload_formular = keys_upload_formular + '</td>\n'
            keys_upload_formular = keys_upload_formular + '</tr>\n'
            keys_upload_formular = keys_upload_formular + '<tr>\n'
            keys_upload_formular = keys_upload_formular + '<td>\n'

            keys_upload_formular = keys_upload_formular + '<input type="hidden" id="success_action_redirect" name="success_action_redirect" value="">\n'
            keys_upload_formular = keys_upload_formular + '<input type="hidden" id="AWSAccessKeyId" name="AWSAccessKeyId" value="">\n'
            keys_upload_formular = keys_upload_formular + '<input type="hidden" id="policy" name="policy" value="">\n'
            keys_upload_formular = keys_upload_formular + '<input type="hidden" id="signature" name="signature" value="">\n'

            #keys_upload_formular = keys_upload_formular + '<input type="hidden" id="submit" name="submit" value="submit">\n'

            keys_upload_formular = keys_upload_formular + '</td>\n'
            keys_upload_formular = keys_upload_formular + '</tr>\n'
            keys_upload_formular = keys_upload_formular + '<tr>\n'
            keys_upload_formular = keys_upload_formular + '<td>\n'
            keys_upload_formular = keys_upload_formular + '<input type="file" name="file" size="80">\n'
            keys_upload_formular = keys_upload_formular + '</td>\n'
            keys_upload_formular = keys_upload_formular + '</tr>\n'

            # Traditional Way to upload a Key into S3
            keys_upload_formular = keys_upload_formular + '<tr>'
            keys_upload_formular = keys_upload_formular + '<td>'
            if sprache == "de":
                keys_upload_formular = keys_upload_formular + '<input type="submit" style="display:none" id="button2" name="submit" value="Datei hochladen">\n'
            else:
                keys_upload_formular = keys_upload_formular + '<input type="submit" style="display:none" id="button2" name="submit" value="upload file">\n'
            keys_upload_formular = keys_upload_formular + '</td>'
            keys_upload_formular = keys_upload_formular + '</tr>'

            keys_upload_formular = keys_upload_formular + '</table>\n'
            keys_upload_formular = keys_upload_formular + '</form>'
            keys_upload_formular = keys_upload_formular + '\n'
            keys_upload_formular = keys_upload_formular + '<div id="statustext"></div>'
            keys_upload_formular = keys_upload_formular + '<div style="border:1px solid black;width:200px;height:20px"><div id="statusbar" style="background-color:black;width:1px;height:20px">&nbsp;</div></div>'

            if sprache == "de":
                keys_upload_formular = keys_upload_formular + '<button id="button1">Datei hochladen</button>'
            else:
                keys_upload_formular = keys_upload_formular + '<button id="button1">upload file</button>'

            iframe = '<iframe id="frame1" name="frame1" style="display:none"></iframe>'

            if laenge_liste_keys != 0:
                alle_keys_loeschen_button = '<p>&nbsp;</p>\n'
                alle_keys_loeschen_button = alle_keys_loeschen_button + '<form action="/alle_keys_loeschen" method="get">\n'
                alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="hidden" name="s3_ansicht" value="pur"> \n'
                alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="hidden" name="bucket_name" value="' + bucketname + '"> \n'
                if sprache == "de":
                    alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="submit" value="Alle Keys l&ouml;schen">\n'
                else:
                    alle_keys_loeschen_button = alle_keys_loeschen_button + '<input type="submit" value="Erase all keys">\n'
                alle_keys_loeschen_button = alle_keys_loeschen_button + '</form>\n'
            else:
                alle_keys_loeschen_button = ''

            if anzahl == 1:
                if sprache == "de":
                    redundanz_warnung = 'Sie nutzen aktuell nur einen Cloud-basierten Speicher-Dienst. '
                    redundanz_warnung = redundanz_warnung + 'Somit ist keine Redundanz m&ouml;glich!'
                    redundanz_warnung = redundanz_warnung + '<p>&nbsp;</p>'
                else:
                    redundanz_warnung = 'You use just a single cloud-based storage service. '
                    redundanz_warnung = redundanz_warnung + 'Therefore, the data is not stored in a redundant way!'
                    redundanz_warnung = redundanz_warnung + '<p>&nbsp;</p>'
            elif anzahl >= 1:
                if sprache == "de":
                    redundanz_warnung = 'Sie nutzen aktuell ' + str(
                        anzahl) + ' Cloud-basierte Speicher-Dienste. '
                    redundanz_warnung = redundanz_warnung + 'Somit ist Redundanz m&ouml;glich!'
                    redundanz_warnung = redundanz_warnung + '<p>&nbsp;</p>'
                else:
                    redundanz_warnung = 'You use ' + str(
                        anzahl) + ' cloud-based storage services. '
                    redundanz_warnung = redundanz_warnung + 'Therefore, the data can be stored in a redundant way!'
                    redundanz_warnung = redundanz_warnung + '<p>&nbsp;</p>'
            else:
                redundanz_warnung = ''

            if anzahl == 1:
                # If the number of storage services is 1, the data is always syncron
                synchron_warnung = ''
            else:
                # If there are more than one storage service, check if data is synchron
                # Check here for synchronicity
                if Main_Liste == Second_list:
                    # If both Lists are equal
                    if sprache == "de":
                        synchron_warnung = '<font color="green">Ihre Daten sind synchron</font>'
                        synchron_warnung = synchron_warnung + '<p>&nbsp;</p>'
                    else:
                        synchron_warnung = '<font color="green">Your data are synchron</font>'
                        synchron_warnung = synchron_warnung + '<p>&nbsp;</p>'
                else:
                    # If both Lists are not equal
                    if sprache == "de":
                        synchron_warnung = '<font color="red">Ihre Daten sind nicht synchron!</font>'
                        synchron_warnung = synchron_warnung + '<p>&nbsp;</p>'
                    else:
                        synchron_warnung = '<font color="red">The synchronicity of your data is broken!</font>'
                        synchron_warnung = synchron_warnung + '<p>&nbsp;</p>'

            template_values = {
                'navigations_bar': navigations_bar,
                'url': url,
                'url_linktext': url_linktext,
                'bucket_keys_tabelle': bucket_keys_tabelle,
                'input_error_message': input_error_message,
                'keys_upload_formular': keys_upload_formular,
                'alle_keys_loeschen_button': alle_keys_loeschen_button,
                'redundanz_warnung': redundanz_warnung,
                'ajax_formular': ajax_formular,
                'iframe': iframe,
                'synchron_warnung': synchron_warnung
            }

            path = os.path.join(os.path.dirname(__file__), "../templates",
                                sprache, "s3.html")
            self.response.out.write(template.render(path, template_values))
예제 #40
0
    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))

          
예제 #41
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('/')
        # 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)

        for db_eintrag in aktivezone:
            zugangstyp = db_eintrag.zugangstyp

        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)

            #self.response.out.write(regionname)

            zonen_liste = zonen_liste_funktion(username, sprache, mobile)

            # It is Google Storage and not am IaaS
            if regionname == "GoogleStorage":

                path = '&amp;path=loadbalancer&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 not Google Storage. It is an IaaS
            else:

                if regionname != 'Amazon':
                    #if zugangstyp != 'Amazon':

                    template_values = {
                        'navigations_bar': navigations_bar,
                        'url': url,
                        'url_linktext': url_linktext,
                        'zone': regionname,
                        'zone_amazon': zone_amazon,
                        'zonen_liste': zonen_liste,
                    }

                    if mobile == "true":
                        path = os.path.join(os.path.dirname(__file__),
                                            "../templates/mobile", sprache,
                                            "loadbalancer_non_aws.html")
                    else:
                        path = os.path.join(os.path.dirname(__file__),
                                            "../templates", sprache,
                                            "loadbalancer_non_aws.html")
                    self.response.out.write(
                        template.render(path, template_values))
                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 ("9", "70", "72"):
                        # 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", "10", "71"):
                        input_error_message = format_error_message_red(
                            input_error_message)
                    else:
                        input_error_message = ""

                    # Mit ELB verbinden
                    conn_elb = loginelb(username)

                    try:
                        # Liste mit den LoadBalancern
                        liste_load_balancers = conn_elb.get_all_load_balancers(
                        )
                    except EC2ResponseError:
                        # Wenn es nicht klappt...
                        if sprache == "de":
                            loadbalancertabelle = '<font color="red">Es ist zu einem Fehler gekommen</font>'
                        else:
                            loadbalancertabelle = '<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":
                            loadbalancertabelle = '<font color="red">Es ist zu einem Timeout-Fehler gekommen</font>'
                        else:
                            loadbalancertabelle = '<font color="red">A timeout error occured</font>'
                    else:
                        # Wenn es geklappt hat...

                        # Anzahl der Elemente in der Liste
                        laenge_liste_load_balancers = len(liste_load_balancers)

                        if laenge_liste_load_balancers == 0:
                            if sprache == "de":
                                loadbalancertabelle = 'Sie haben keine Lastverteiler in dieser Region.'
                            else:
                                loadbalancertabelle = 'You have no load balancers inside this region.'
                        else:

                            if mobile == "true":
                                loadbalancertabelle = ''
                                loadbalancertabelle += '<table border="0" cellspacing="0" cellpadding="5" width="300">'

                                counter = 0

                                for i in range(laenge_liste_load_balancers):

                                    if counter > 0:
                                        loadbalancertabelle += '<tr><td colspan="3">&nbsp;</td></tr>'
                                    counter += 1
                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td>'
                                    loadbalancertabelle += '<a href="/delete_load_balancer?name='
                                    loadbalancertabelle += liste_load_balancers[
                                        i].name
                                    loadbalancertabelle += "&amp;mobile="
                                    loadbalancertabelle += str(mobile)
                                    if sprache == "de":
                                        loadbalancertabelle += '" title="Load Balancer l&ouml;schen">'
                                        loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Load Balancer l&ouml;schen"></a>'
                                    else:
                                        loadbalancertabelle += '" title="delete load balancer">'
                                        loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="delete load balancer"></a>'
                                    loadbalancertabelle += '</td>'

                                    loadbalancertabelle += '<td colspan="2" align="center">'
                                    loadbalancertabelle += '<a href="/loadbalanceraendern?name='
                                    loadbalancertabelle += liste_load_balancers[
                                        i].name
                                    loadbalancertabelle += "&amp;mobile="
                                    loadbalancertabelle += str(mobile)
                                    if sprache == "de":
                                        loadbalancertabelle += '" title="Load Balancer einsehen/&auml;ndern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Load Balancer einsehen/&auml;ndern"></a>'
                                    else:
                                        loadbalancertabelle += '" title="check/alter load balancer"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter load balancer"></a>'
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td align="right"><b>ID:</b></td>'
                                    loadbalancertabelle += '<td colspan="2" align="center">' + liste_load_balancers[
                                        i].name + '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td align="right"><b>DNS:</b></td>'
                                    loadbalancertabelle += '<td colspan="2" align="center">' + liste_load_balancers[
                                        i].dns_name + '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    if sprache == "de":
                                        loadbalancertabelle += '<td align="right"><b>Zonen:</b></td>'
                                    else:
                                        loadbalancertabelle += '<td align="right"><b>Zones:</b></td>'
                                    loadbalancertabelle += '<td colspan="2" align="center">'
                                    for x in range(
                                            len(liste_load_balancers[i].
                                                availability_zones)):
                                        loadbalancertabelle += str(
                                            liste_load_balancers[i].
                                            availability_zones[x])
                                        loadbalancertabelle += '&nbsp;'
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    if sprache == "de":
                                        loadbalancertabelle += '<td align="right"><b>Datum:</b></td>'
                                    else:
                                        loadbalancertabelle += '<td align="right"><b>Creation Date:</b></td>'
                                    loadbalancertabelle += '<td colspan="2" align="center">'
                                    datum_der_erzeugung = parse(
                                        liste_load_balancers[i].created_time)
                                    loadbalancertabelle += str(
                                        datum_der_erzeugung.strftime(
                                            "%Y-%m-%d  %H:%M:%S"))
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    if sprache == "de":
                                        loadbalancertabelle += '<td align="right"><b>Instanzen:</b></td>'
                                    else:
                                        loadbalancertabelle += '<td align="right"><b>Instances:</b></td>'
                                    loadbalancertabelle += '<td colspan="2" align="center">' + str(
                                        len(liste_load_balancers[i].instances)
                                    ) + '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td align="right"><b>Ports:</b></td>'
                                    loadbalancertabelle += '<td colspan="2" align="center">'
                                    for x in range(
                                            len(liste_load_balancers[i].
                                                listeners)):
                                        loadbalancertabelle += str(
                                            liste_load_balancers[i].
                                            listeners[x])
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'
                                loadbalancertabelle += '</table>'

                            else:

                                loadbalancertabelle = ''
                                loadbalancertabelle += '<table border="0" cellspacing="0" cellpadding="5">'

                                counter = 0

                                for i in range(laenge_liste_load_balancers):

                                    if counter > 0:
                                        loadbalancertabelle += '<tr><td colspan="2">&nbsp;</td></tr>'
                                    counter += 1
                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td align="left" bgcolor="#D4D4D4">'
                                    loadbalancertabelle += '<a href="/delete_load_balancer?name='
                                    loadbalancertabelle += liste_load_balancers[
                                        i].name
                                    loadbalancertabelle += "&amp;mobile="
                                    loadbalancertabelle += str(mobile)
                                    if sprache == "de":
                                        loadbalancertabelle += '" title="Load Balancer l&ouml;schen">'
                                        loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="Load Balancer l&ouml;schen"></a>'
                                    else:
                                        loadbalancertabelle += '" title="delete load balancer">'
                                        loadbalancertabelle += '<img src="bilder/stop.png" width="16" height="16" border="0" alt="delete load balancer"></a>'
                                    loadbalancertabelle += '</td>'

                                    loadbalancertabelle += '<td align="left">'
                                    loadbalancertabelle += '<a href="/loadbalanceraendern?name='
                                    loadbalancertabelle += liste_load_balancers[
                                        i].name
                                    loadbalancertabelle += "&amp;mobile="
                                    loadbalancertabelle += str(mobile)
                                    if sprache == "de":
                                        loadbalancertabelle += '" title="Load Balancer einsehen/&auml;ndern"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="Load Balancer einsehen/&auml;ndern"></a>'
                                    else:
                                        loadbalancertabelle += '" title="check/alter load balancer"><img src="bilder/einstellungen.png" width="58" height="18" border="0" alt="check/alter load balancer"></a>'
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>ID:</b></td>'
                                    loadbalancertabelle += '<td align="left">' + liste_load_balancers[
                                        i].name + '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    if sprache == "de":
                                        loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Zonen:</b></td>'
                                    else:
                                        loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Zones:</b></td>'
                                    loadbalancertabelle += '<td align="left">'
                                    for x in range(
                                            len(liste_load_balancers[i].
                                                availability_zones)):
                                        loadbalancertabelle += str(
                                            liste_load_balancers[i].
                                            availability_zones[x])
                                        loadbalancertabelle += '&nbsp;'
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    if sprache == "de":
                                        loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Datum:</b></td>'
                                    else:
                                        loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Creation Date:</b></td>'
                                    loadbalancertabelle += '<td align="left">'
                                    datum_der_erzeugung = parse(
                                        liste_load_balancers[i].created_time)
                                    loadbalancertabelle += str(
                                        datum_der_erzeugung.strftime(
                                            "%Y-%m-%d  %H:%M:%S"))
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    if sprache == "de":
                                        loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Instanzen:</b></td>'
                                    else:
                                        loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Instances:</b></td>'
                                    loadbalancertabelle += '<td align="left">' + str(
                                        len(liste_load_balancers[i].instances)
                                    ) + '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>Ports:</b></td>'
                                    loadbalancertabelle += '<td align="left">'
                                    for x in range(
                                            len(liste_load_balancers[i].
                                                listeners)):
                                        loadbalancertabelle += str(
                                            liste_load_balancers[i].
                                            listeners[x])
                                    loadbalancertabelle += '</td>'
                                    loadbalancertabelle += '</tr>'

                                    loadbalancertabelle += '<tr>'
                                    loadbalancertabelle += '<td align="right" bgcolor="#D4D4D4"><b>DNS:</b></td>'
                                    loadbalancertabelle += '<td align="left">' + liste_load_balancers[
                                        i].dns_name + '</td>'
                                    loadbalancertabelle += '</tr>'
                                loadbalancertabelle += '</table>'

                    path = '&amp;path=loadbalancer&amp;mobile=' + mobile

                    template_values = {
                        'navigations_bar': navigations_bar,
                        'url': url,
                        'url_linktext': url_linktext,
                        'zone': regionname,
                        'zone_amazon': zone_amazon,
                        'loadbalancertabelle': loadbalancertabelle,
                        'zonen_liste': zonen_liste,
                        'input_error_message': input_error_message,
                        'mobile': mobile,
                        'path': path,
                    }

                    if mobile == "true":
                        path = os.path.join(os.path.dirname(__file__),
                                            "../templates/mobile", sprache,
                                            "loadbalancer.html")
                    else:
                        path = os.path.join(os.path.dirname(__file__),
                                            "../templates", sprache,
                                            "loadbalancer.html")
                    self.response.out.write(
                        template.render(path, template_values))