Dem GOP eine neue Teststage hinzufügen

In diesem Tutorial zeige ich, wie man beim GOP neue Stages in dem Helm Chart Beispiel der Petclinic hinzufügt. Was der GOP ist und wie man ihn benutzt, kann man auf der GOP Seite nachlesen

TL;DR

  • Im Repo de Petclinic:
    • neue values-<stage>.yaml im Ordner k8s anlegen.
    • Im Jenkinsfile neue Stage hinzufügen
  • Im Repo Argocd unter /projects/example-apps.yml
    • neue destination und
    • neuen Namespace hinzufügen
  • Im Repo example-apps unter /argocd eine Application in der petclinic-helm.yaml hinzufügen

Der GOP läßt einfach per Shell Script aus der Dokumentation lokal ausführen.

bash <(curl -s \
https://raw.githubusercontent.com/cloudogu/gitops-playground/main/scripts/init-cluster.sh) \
&& docker run --rm -t --pull=always -u $(id -u) \
-v ~/.config/k3d/kubeconfig-gitops-playground.yaml:/home/.kube/config \
--net=host \
ghcr.io/cloudogu/gitops-playground --yes --argocd --ingress-nginx --base-url=http://localhost

Dann wird als Beispiel Applikation die Petclinic von Spring ausgerollt. Einmal als Beispiel mit Helm Chart und einmal als Beispiel mit Kubernetes Manifesten. Das ganze jeweils in 2 Stages, „Production“ und „Staging“.

Step by Step

petclinic-helm anpassen

Im Repository für die petclinic-helm als erstes eine neue Datei für eine neue Stage hinzufügen. In dieser Ordnerstruktur

die values-staging.yaml als Vorlage nehmen und bspw. eine values-qs-yaml anlegen.

Den Inhalt anpassen

service:
  port: 80

ingress:
  hosts:
    - host: qs.petclinic-helm.petclinic.localhost
      paths: ['/']

Neuen host- Namen wählen, den wird dann Kubernetes für uns erstellen.

Als nächstes in diesem Repository das Jenkinsfile anpassen.

In der Stage „Deploy“ wird eine Konfiguration für den gitOps Prozess erstellt, die gitopsConfig Variable Dort wird im Bereich Stages die neue Stage hinzugefügt.

Vorher

stages: [
                                staging: [
                                        namespace: 'example-apps-staging',
                                        deployDirectly: true ],
                                production: [
                                        namespace: 'example-apps-production',
                                        deployDirectly: false ]
                        ]

Nachher

stages: [
                                staging: [
                                        namespace: 'example-apps-staging',
                                        deployDirectly: true ],
                                qs: [
                                        namespace: 'example-apps-qs',
                                        deployDirectly: true ],
                                production: [
                                        namespace: 'example-apps-production',
                                        deployDirectly: false ]
                        ]

Damit wird der Jenkins beim Bauen alles weitere für das Deployment erstellen.

ArgoCD konfigurieren

Damit die Anwendung auch automatisch per GitOps deployt wird, muss nur noch ArgoCD angepasst werden.

Zum einen benötigen ArgoCD ein neues Ziel zum deployen, denn die neue Stage soll in einem eigenen -neu erstelltem – Namespace laufen und zum anderen benötigt ArgoCD für die neue Stage eine neue Application.

Schritt 1, neues Ziel hinzufügen

Im Repository argocd unter argocd/projects die vorhandene example-apps.yaml anpassen. Dort ist die Petclinic konfiguriert für ArgoCD.

Den Bereich destinations erweitern

Vorher

  destinations:
  - namespace: example-apps-production
    server: https://kubernetes.default.svc
  - namespace: example-apps-staging
    server: https://kubernetes.default.svc

Nachher

  destinations:
  - namespace: example-apps-production
    server: https://kubernetes.default.svc
  - namespace: example-apps-staging
    server: https://kubernetes.default.svc
  - namespace: example-apps-qs
    server: https://kubernetes.default.svc

Und in der gleichen Datei die SourceNamespaces erweitern.

  sourceNamespaces:
    - 'example-apps-staging'
    - 'example-apps-production'
    - 'example-apps-qs'

Nun im Repository der example-apps noch die neue Application für die neue Stage für ArgoCD hinzufügen.

Die Source Datei ist unter /argocd und dort die petclinic-helm.yaml

Dort sind bereits 2 Application vorhanden für die beiden vorhandenen Stages „Production“ und „Staging“.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: petclinic-helm
  namespace: example-apps-staging
spec:
  destination:
    namespace: example-apps-staging
    server: https://kubernetes.default.svc
  project: example-apps
  source:
    path: apps/spring-petclinic-helm/staging
    repoURL: http://scmm-scm-manager.default.svc.cluster.local/scm/repo/argocd/example-apps
    targetRevision: main
    directory:
      recurse: true
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

---

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: petclinic-helm
  namespace: example-apps-production
spec:
  destination:
    namespace: example-apps-production
    server: https://kubernetes.default.svc
  project: example-apps
  source:
    path: apps/spring-petclinic-helm/production
    repoURL: http://scmm-scm-manager.default.svc.cluster.local/scm/repo/argocd/example-apps
    targetRevision: main
    directory:
      recurse: true
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Einfach die neue Stage darunter einfügen per Copy&Paste und leichten Anpassungen.

---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: petclinic-helm
  namespace: example-apps-qs
spec:
  destination:
    namespace: example-apps-qs
    server: https://kubernetes.default.svc
  project: example-apps
  source:
    path: apps/spring-petclinic-helm/qs
    repoURL: http://scmm-scm-manager.default.svc.cluster.local/scm/repo/argocd/example-apps
    targetRevision: main
    directory:
      recurse: true
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
example-apps-qs# Create a new namespace named example-apps-qs
  kubectl create namespace example-apps-qs

Nur noch Warten

Alle drei Repositories committen und pushen und warten bis der Jenkins gebaut hat.

In ArgoCD wird dann die Example App neu gesynct

In ArgoCD sieht man auch die Änderung

Und auch die App

Neue Stage ist online

Video

Tutorial: Speed Klettern Video mit Zeit erstellen

Ziel

Ein Video vom Speedklettern mit eingeblendeter Zeit. So wie das hier:

https://www.instagram.com/p/DGlsNWLsIsd

Voraussetzungen:

  • – iPhone
  • – iMovie
  • – Speed Video

Zeitmessung aufnehmen





Bildschirmaufname starten

Stoppuhr aufrufen und starten

Stoppuhr laufen lassen

Nach eigenem ermessen dann Stoppuhr stoppen und Aufnahme stoppen

Das Video befindet sich am normalen Ort, wo auch die Fotos sind.

Video öffnen und den Anfang und Ende anpassen.

Video um 90 Grad drehen!

Danach das Video zurecht schneiden.

Am Ende bleibt ein Video, nur mit der Stoppuhr um 90 Grad gedreht.

Klettervideo vorbereiten

Auch das Klettervideo muss um 90 Grad gedreht werden.

Dies geht am einfachsten im normalen Video Player

Video + Zeit

Nun ist alles vorbereitet um das Video mit der Zeitmessung zusammen zu schneiden.

Nächsten Schritte:

  • iMovie starten
  • Klettervideo importieren
  • Start und Ende markieren
  • Zeitvideo hinzufügen
  1. iMovie starten

Film auswählen

Klettervideo auswählen

so sollte es aussehen

Start und Ende markieren, durch Teilung.

Dies am Anfang und am Ende machen.

Sollte dann so wie rechts aussehen.

Dann genau den Start markieren und das Video mit der Zeit einfügen.

Um das Video mit der Zeit einzufügen, einmal auf das Plus + Klicken.

Dann auf die 3 Punkte.

Und „Bild in Bild“ auswählen

Das Ende dann wieder teilen und entfernen.

Danach Ausrichten und Größe anpassen

Am Ende noch das Standbild für die Zeit hinzufügen

Fertig!

Teilen und genießen

No Retreat, No Surrender – Rock Edition

Idee: Thomas Michael, Ausgearbeitet mit ChatGPT

generiert mit ChatGPT
Generiert von ChatGPT

Kapitel 1:

Der kleine Club war voller Stimmengewirr und klappernder Gläser. Der Geruch von verschüttetem Bier und abgestandener Luft lag schwer in der Atmosphäre, vermischt mit dem schwachen Aroma von billigem Parfüm. Max stand hinter der Bühne und versuchte, seine zitternden Hände unter Kontrolle zu bringen. Sein Herz raste.

„Max, bist du bereit?“ Lisa, die Gitarristin der Band, steckte den Kopf durch den schweren Vorhang, der die Bühne vom Backstage-Bereich trennte. Ihr dunkler Lidstrich verlieh ihr eine entschlossene Ausstrahlung, aber ihre Augen verrieten ihre Unsicherheit.

„Ja… ich glaube schon“, murmelte Max.

„Glauben reicht nicht. Das ist unsere letzte Chance in diesem Club. Wenn wir heute wieder versagen, sind wir hier durch“, sagte sie und zog sich zurück.

Max wusste, dass sie recht hatte. Broken Chords war nie eine erfolgreiche Band gewesen, aber in den letzten Monaten waren sie in einer Abwärtsspirale. Jedes Konzert war eine Zitterpartie, jeder Song ein potenzielles Desaster. Und fast immer lag es an ihm – dem Frontmann, der nicht wusste, wie man eine Bühne beherrscht.

Er atmete tief durch, schloss die Augen und versuchte, die Anspannung abzuschütteln. Es wird schon irgendwie gehen. Es muss einfach gehen.

Dann fiel das Licht im Club und das Publikum verstummte einen Moment, bevor vereinzelt Applaus aufbrandete. Die Band betrat die Bühne. Max spürte das kalte Mikrofon in seiner Hand, hörte das erste Anschlagen von Lisas Gitarre, das rhythmische Trommeln von Eddy im Hintergrund. Dann setzte der Bass ein.

Er musste nur singen. Das war alles.

Max öffnete den Mund – und in genau diesem Moment vergaß er den Text.

Sein Magen zog sich zusammen. Panik breitete sich aus. Er hörte, wie Lisa leicht genervt den Songtext flüsterte, um ihm zu helfen, aber das brachte ihn noch mehr aus dem Konzept. Das Publikum begann zu tuscheln. Einzelne Lacher waren zu hören.

Er zwang sich, weiterzumachen, improvisierte die Worte irgendwie zusammen, aber seine Stimme klang brüchig, unsicher. Der Song, der eigentlich ein energiegeladener Rocksong sein sollte, verlor jede Wirkung. Und dann kam der Höhepunkt des Songs – sein großer Moment. Max nahm Anlauf für die hohe Note und –

– nichts.

Nur ein schwacher Krächzer, dann Stille.

Ein Pfeifen kam aus den hinteren Reihen. Dann Gelächter.

Lisa spielte tapfer weiter, aber Max sah die Frustration in ihren Augen. Der Song endete nicht mit Applaus, sondern mit einem kollektiven Seufzen des Publikums. Jemand klatschte sarkastisch.

Dann kam die Stimme des Clubbesitzers über das Mikrofon an der Bar:

„Danke, Broken Chords, das war… ein Versuch. Und jetzt was anderes: unser DJ wird den Abend retten.“

Max spürte, wie sein Gesicht brannte. Wortlos verließ er die Bühne.

Kapitel 2:

„Das war echt peinlich“, sagte Lisa und ließ ihre Gitarre in den Koffer fallen. „So können wir nicht weitermachen.“

Max lehnte sich gegen die Wand des engen Backstage-Raums. „Ich weiß. Es tut mir leid.“

Eddy warf seine Drumsticks auf den Tisch. „Sorry reicht nicht, Max. Das war unser letzter Gig in diesem Club, und du hast ihn versaut.“

Max öffnete den Mund, um sich zu verteidigen, aber er wusste, dass sie recht hatten. Es war nicht das erste Mal, dass er einen Auftritt ruiniert hatte.

„Ich will nicht gemein sein“, fuhr Lisa fort und stemmte die Hände in die Hüften, „aber vielleicht… solltest du dir überlegen, ob du wirklich der Frontmann dieser Band sein solltest.“

Max blinzelte. „Was meinst du damit?“

Eddy zuckte die Schultern. „Wir haben mit Justin geredet. Er ist ein echt guter Sänger und… naja, wir glauben, er könnte der Band helfen.“

Ein Schlag in die Magengrube. „Ihr habt schon jemanden gefunden?“

„Wir mussten realistisch sein“, sagte Lisa. „Wir haben es mit dir versucht, Max. Ehrlich. Aber es funktioniert einfach nicht.“

Die Worte hingen schwer in der Luft. Max fühlte sich, als hätte ihm jemand den Boden unter den Füßen weggezogen. Diese Band war alles für ihn gewesen. Und jetzt war er nicht mehr Teil davon.

„Also… das war’s?“ Seine Stimme klang hohl.

Lisa und Eddy sahen sich kurz an. „Es tut uns leid, Max“, sagte Lisa schließlich. „Aber ja.“

Ohne ein weiteres Wort griff Max nach seiner Jacke und verließ den Raum.

Draußen peitschte ihm die kalte Nachtluft ins Gesicht. Die Neonlichter der Stadt verschwammen vor seinen Augen. Er lief ziellos durch die Straßen, seine Gedanken ein Chaos aus Wut, Schmerz und Scham.

Er hatte alles verloren.

Kapitel 3:

Nach einer Stunde ziellosen Wanderns fand Max sich vor einem kleinen, unscheinbaren Plattenladen wieder. Das Geschäft war altmodisch, mit verblassten Postern von Rocklegenden im Schaufenster: Led Zeppelin, The Rolling Stones – und Queen.

Max trat ein. Die Luft roch nach Vinyl und Staub.

Er ließ die Finger über die Plattenhüllen gleiten, bis er an einer alten Queen-Vinyl hängen blieb. Auf dem Cover stand Freddie Mercury, in voller Bühnenpose, mit erhobener Faust.

Er seufzte. „Wenn ich nur die Hälfte von deinem Talent hätte…“

Ohne weiter nachzudenken, kaufte er die Platte, ging nach Hause, legte sie auf und ließ sich in sein Bett fallen.

Die Musik füllte den Raum. Die kraftvolle Stimme von Freddie Mercury umhüllte ihn, als würde sie ihm Mut zusprechen. Er schloss die Augen, und während er in den Schlaf glitt, hörte er eine andere Stimme.

Eine tiefe, charismatische Stimme mit britischem Akzent:

„Darling! Du siehst aus, als könntest du ein wenig Hilfe gebrauchen.“

Max riss die Augen auf.

Vor ihm, mitten in seinem kleinen Zimmer, stand Freddie Mercury.

Kapitel 4:

Der Proberaum von Broken Chords war klein, chaotisch und roch nach kaltem Kaffee und alten Gitarrensaiten. Lisa saß mit ihrer Gitarre auf der Couch, während Eddy an seinem Schlagzeug herumtüftelte. Justin, der neue Sänger, warf sich auf einen der alten Sessel und checkte sein Handy.

„Okay, Leute“, sagte Lisa, „unser nächster Gig ist in zwei Tagen. Ich hoffe, ihr habt geübt.“

Justin sah nicht mal auf. „Klar, easy.“

Eddy verdrehte die Augen. „Mann, kannst du vielleicht einmal ernst bleiben?“

„Wieso? Lief doch bisher ganz gut.“

Lisa seufzte. Es lief tatsächlich besser als mit Max. Justin traf die Töne, er war selbstbewusst auf der Bühne, und er zog die Aufmerksamkeit auf sich. Doch es fühlte sich… falsch an.

Lisa spielte eine Melodie an, eine ihrer Lieblingsstellen im Song. „Lass es uns nochmal von vorne machen.“

Justin richtete sich auf und begann zu singen.

Seine Stimme war gut. Technisch gesehen gab es nichts zu meckern. Aber da war keine Seele. Keine Emotion. Kein Herz.

Lisa tauschte einen Blick mit Eddy. Sie hörten es beide.

Doch Justin bemerkte nichts und fuhr fort, als wäre alles perfekt.

Kapitel 5:

Max lag auf seinem Bett, die Augen weit aufgerissen.

Vor ihm, mitten in seinem kleinen, chaotischen Zimmer, stand Freddie Mercury.

Er war genau so, wie Max ihn aus alten Aufnahmen kannte: das markante Gesicht mit dem Schnurrbart, die intensive Ausstrahlung, die berühmte gelbe Militärjacke, die er beim Wembley-Konzert 1986 getragen hatte. Doch das Seltsamste war – er wirkte absolut real. Kein flackernder Geist, keine durchscheinende Erscheinung. Er stand da, als wäre er gerade durch die Tür spaziert.

„Bist du… echt?“ Max’ Stimme war nur ein Flüstern.

Freddie hob eine Augenbraue und grinste. „Natürlich bin ich echt, Darling. Die Frage ist eher – bist du bereit?“

„Bereit wofür?“

„Für dein Training, natürlich! Ich habe dein kleines… Debakel auf der Bühne gesehen. Furchtbar. Absolut grauenhaft.“ Er verzog das Gesicht. „Aber! Ich sehe Potenzial. Und deshalb bin ich hier.“

Max schüttelte den Kopf. „Moment, Moment. Das kann nicht echt sein. Ich träume doch, oder?“

Freddie verschränkte die Arme. „Darling, wenn du träumen würdest, würde ich dann das hier tun?“

Er schnippte mit den Fingern – und plötzlich begann Max’ Plattenspieler von selbst zu spielen. „Don’t Stop Me Now“ dröhnte durch das Zimmer. Max zuckte zusammen.

„Okay… das ist verrückt.“

„Verrückt ist relativ, Darling.“ Freddie ließ sich auf Max’ Schreibtischstuhl fallen und schwang die Beine lässig über die Armlehne. „Die wichtigere Frage ist: Willst du Hilfe – oder willst du weiter bemitleidenswertes Gejammer auf die Bühne bringen?“

Max öffnete den Mund, um zu protestieren – aber dann sackte er in sich zusammen. Er wusste es selbst. Er war nicht gut genug.

Er sah zu Freddie. „Und du kannst mich… wirklich trainieren?“

Ein breites Grinsen erschien auf Freddies Gesicht. „Oh, mein Junge. Ich werde aus dir eine Legende machen.“

Kapitel 7:

Der nächste Gig fand in einem kleinen Club statt, genau wie früher mit Max. Doch diesmal waren mehr Leute da. Justin hatte Charisma, und das Publikum schien ihn zu mögen.

Die Scheinwerfer blendeten. Der stickige Club war voller Menschen, die sich um die kleine Bühne drängten. Der Bass vibrierte in Lisas Brust, als sie mit ihrem Gitarrensolo loslegte.

Justin stand vorne, das Mikrofon fest in der Hand, ein breites Lächeln auf den Lippen.

„Guten Abend, Leute! Wir sind Broken Chords, und wir sind hier, um euch zu zeigen, was wahre Musik bedeutet!“

Lisa verdrehte innerlich die Augen. Das hatte nicht im Skript gestanden.

Dann setzte Justin zum ersten Song an.

Die ersten Takte liefen gut. Justin traf jeden Ton, bewegte sich selbstbewusst auf der Bühne, flirtete mit den ersten Reihen des Publikums. Er war ein Entertainer.

Doch nach ein paar Minuten spürte Lisa es wieder.

Die Musik war leer.

Beim ersten Song ging noch alles gut. Doch als sie einen der emotionalsten Tracks spielten, das Lied, das Max geschrieben hatte, klang es… falsch.

Lisa beobachtete die Menge. Die Energie war anders. Das Publikum war ruhig, manche Leute sahen sich sogar fragend um.

Und dann passierte es.

Ein Typ in der ersten Reihe rief: „Wo ist Max?“

Lisa hielt mitten im Akkord inne. Justin überspielte es mit einem Lachen. „Max? Oh, du meinst den Kerl, der keinen Ton getroffen hat?“

Das Publikum wurde noch stiller.

Lisa spürte, wie sich Wut in ihr regte. Justin sah die Band nicht als Familie. Für ihn war das hier nur eine Bühne für sein Ego.

Eddy schlug ein letztes Mal auf die Drums, dann war der Song vorbei. Es gab Applaus – aber nicht den euphorischen Jubel, den sie sich erhofft hatten.

Kapitel 7:

Das Training begann am nächsten Tag. Oder, genauer gesagt, mitten in der Nacht – denn Freddie ließ sich nicht von so irrelevanten Dingen wie Schlaf aufhalten.

„Erste Regel: Ein Sänger ist ein Athlet“, verkündete Freddie, während er auf Max’ Bett saß und genüsslich eine imaginäre Tasse Tee trank. „Dein Körper ist dein Instrument. Und dein Instrument ist jämmerlich außer Form.“

Max, noch im Schlafanzug, rieb sich die Augen. „Muss das jetzt sein?“

„Muss der Mond nachts am Himmel stehen? Natürlich muss das jetzt sein! Auf die Füße, mein Lieber!“

Und so begann Max’ tägliche Routine:

  • Gesangstraining – Freddie brachte ihm Atemtechniken bei, ließ ihn Tonleitern singen, bis seine Stimme zitterte, und erklärte ihm, wie man mit Emotion singt.
  • Bühnentraining – Max musste im Spiegel Posen einüben, lernen, mit seinem Körper zu arbeiten, und sich „jeden Zentimeter der Bühne zu eigen machen“.
  • Konditionstraining – „Wenn du nach drei Songs außer Atem bist, bist du kein Sänger – du bist ein sterbendes Walross!“ Also joggte Max morgens im Park, während Freddie neben ihm schwebte und Anweisungen rief.

Nach ein paar Tagen bemerkte Max eine Veränderung. Seine Stimme wurde stabiler, sein Auftreten selbstbewusster. Er fühlte sich… anders.

Doch dann kam die größte Herausforderung.

Kapitel 8:

Nach dem Auftritt saßen sie im Backstage-Bereich. Justin grinste selbstgefällig. „Siehst du, Leute? Wir kommen voran. Bald sind wir richtig groß.“

Lisa lehnte sich gegen die Wand. „Ich bin mir nicht sicher, ob das wirklich der richtige Weg ist.“

Justin hob eine Augenbraue. „Wieso? Weil irgend so ein Fan Max zurückhaben will?“ Er lachte. „Vergesst ihn. Er hatte seine Chance.“

Eddy schüttelte den Kopf. „Es geht nicht um ihn. Es geht darum, dass sich unsere Songs leer anfühlen. Du… du singst sie, aber du fühlst sie nicht.“

Justin zuckte mit den Schultern. „Ich singe sie, weil es mein Job ist. Ihr wollt Erfolg, ich bringe Erfolg. Wo ist das Problem?“

Lisa sah ihn lange an. Dann sagte sie leise: „Musik ist kein Job. Musik ist unser Leben.“

Justin winkte ab. „Kommt mal klar, Leute. Emotionen bringen uns nicht ins Fernsehen – Professionalität schon.“

Lisa und Eddy tauschten wieder einen Blick. Zum ersten Mal wurde ihnen klar: Justin war ein guter Sänger. Aber er war nicht der richtige Sänger für Broken Chords.

Kapitel 9:

Eines Abends führte Freddie ihn zu einem verlassenen Park.

„Heute werden wir deine größte Schwäche loswerden“, sagte er.

„Und die wäre?“ fragte Max misstrauisch.

Freddie drehte sich zu ihm um und zeigte auf eine kleine Bühne in der Mitte des Parks – normalerweise genutzt für Straßenmusiker oder kleine Aufführungen.

„Deine Angst vor Menschen.“

Max‘ Magen zog sich zusammen. „Ich weiß nicht, ob ich das kann.“

Freddie schüttelte den Kopf. „Mein Junge, das ist genau das Problem! Jedes Mal, wenn du auf die Bühne gehst, hast du Angst, zu versagen. Du denkst darüber nach, was andere von dir halten. Aber ein echter Performer denkt nicht nach. Er fühlt. Er lebt. Er gibt alles.“

Max schluckte. „Und was soll ich tun?“

„Sing.“

„Hier? Jetzt? Da ist doch kaum jemand.“

Freddie grinste. „Dann sing lauter, bis sie kommen.“

Max sah auf die Bühne. Sein Herz klopfte. Doch dann erinnerte er sich an das Gefühl, als er beim letzten Konzert versagt hatte. Er wollte nie wieder so empfinden.

Er atmete tief durch, stieg auf die Bühne – und begann zu singen.

Zuerst leise. Dann lauter. Seine Stimme klang klarer, stärker als je zuvor. Passanten blieben stehen, hörten zu. Jemand begann zu klatschen.

Als er fertig war, war er außer Atem – aber er fühlte sich lebendig.

Freddie nickte zufrieden. „Nicht schlecht, mein Junge. Aber das war nur der Anfang.“

Kapitel 10:

Die Wochen vergingen. Die Band spielte weiter ihre Gigs in kleinen Clubs, doch der Funke sprang nicht über. Justin war gut, aber er war nicht Max.

Dann kam die große Nachricht.

Lisa saß gerade mit Eddy im Proberaum, als ihr Handy vibrierte. Sie las die Nachricht – und sprang auf.

„Eddy! Wir haben einen TV-Auftritt!“

Eddy riss die Augen auf. „Was?!“

Lisa strahlte. „Ja! Eine Late-Night-Show sucht nach neuen Bands für ihre Musik-Acts – und sie haben uns ausgewählt!“

Eddy sprang auf. „Das ist unsere Chance!“

Sie fielen sich in die Arme. Endlich! Der große Durchbruch war greifbar.

Sie riefen sofort Justin an, um ihm die Neuigkeiten zu erzählen.

„TV-Show?“ wiederholte er und klang… seltsam unbeeindruckt.

„Ja, Justin! Millionen Leute sehen das! Das ist der Moment, auf den wir gewartet haben!“ sagte Lisa euphorisch.

Doch dann hörte sie ihn zögern.

„Ähm… da gibt’s ein Problem“, sagte er schließlich.

Lisas Lächeln gefror. „Was für ein Problem?“

„Ich kann nicht auftreten. Ich hab an dem Tag meine Aufnahmeprüfung für die Musikhochschule.“

Stille.

Eddy nahm ihr das Handy aus der Hand. „Und das fällt dir jetzt ein?!“

Justin klang genervt. „Sorry, Leute, aber meine Karriere geht vor. Ihr kriegt das schon ohne mich hin.“

Eddy wollte etwas erwidern, aber Justin hatte bereits aufgelegt.

Lisa ließ sich auf die Couch fallen. Ihr Herz raste.

„Und jetzt?“ fragte Eddy.

Lisa wusste es. Es gab nur eine Lösung.

Sie griff nach ihrem Handy – und wählte Max’ Nummer.

Kapitel 11:

Lisa starrte auf ihr Handy. Der Anruf war durchgegangen, und es klingelte. Einmal. Zweimal.

Dann nahm Max ab.

„Lisa?“ Seine Stimme klang überrascht – und vorsichtig.

„Max…“ Sie holte tief Luft. „Wir brauchen dich.“

Stille am anderen Ende.

„Ach ja?“ Max’ Stimme war ruhig, aber Lisa konnte den Hauch von Bitterkeit darin hören. „Dachte, ihr kommt ohne mich klar.“

„Justin hat uns hängen lassen.“

Max lachte trocken. „Wirklich? Hätte man ja nie erwarten können.“

„Max, das ist ernst. Es ist eine TV-Show. Millionen Zuschauer. Wir haben keine Zeit für Streitereien. Du bist unsere einzige Chance.“

Wieder eine Pause. Lisa hörte ein leises Atmen am anderen Ende der Leitung.

Dann sagte Max langsam: „Wann ist der Auftritt?“

Lisa spürte Erleichterung in sich aufsteigen.

„In drei Tagen.“

„Drei Tage?“ Max pfiff durch die Zähne. „Nicht gerade viel Zeit.“

„Schaffst du das?“ fragte sie leise.

„Ich habe trainiert“, sagte Max nur. Und Lisa konnte es in seiner Stimme hören – er war bereit.

Kapitel 12:

Max stand vor dem Spiegel in seinem kleinen Zimmer. Die Poster von Queen und anderen Rocklegenden hingen noch immer an den Wänden.

Drei Tage.

Er schloss die Augen. Er wusste, was zu tun war.

„Na dann, Max“, sagte eine vertraute Stimme hinter ihm.

Er drehte sich um – und da stand er.

Freddie Mercury lehnte lässig an der Wand, mit einem schelmischen Grinsen. „Zeit, die Show zu stehlen.“

Max nickte. Er hatte Monate mit Freddie trainiert, hatte gelernt, nicht nur zu singen, sondern die Bühne zu beherrschen.

„Hast du Lampenfieber?“ fragte Freddie.

Max atmete tief ein. „Nein.“

Freddie grinste. „Darling, dann bist du bereit.“

Kapitel 13:

Der Proberaum war voller Spannung. Lisa und Eddy saßen da, unsicher, was sie erwarten würden.

Dann trat Max ein.

Er sah anders aus. Aufrechter. Selbstbewusster.

Lisa schluckte. War das wirklich noch der unsichere Max von damals?

Max trat ans Mikrofon. Er schloss die Augen, atmete tief durch – und begann zu singen.

Die erste Note ließ alle erstarren.

Es war nicht mehr die wackelige, unsichere Stimme von früher. Es war kraftvoll. Emotional. Ehrlich.

Lisa konnte spüren, wie sich eine Gänsehaut über ihre Arme zog.

Eddy sah sie an. Sie wussten es beide.

Max war zurück. Und er war besser als je zuvor.


Kapitel 14:

Das Studio war riesig. Scheinwerfer, Kameras, eine tosende Menge. Lisa, Eddy und Max standen hinter der Bühne.

„Bereit?“ flüsterte Lisa.

Max sah sie an. Er lächelte. Kein Zweifel. Keine Angst.

„Ja“, sagte er.

Dann hörten sie den Moderator.

„Und nun: Bitte begrüßen Sie… Broken Chords!

Das Publikum jubelte, als die drei auf die Bühne traten. Max packte das Mikrofon, schloss die Augen – und begann.

Er war nicht mehr der Max von damals.

Er bewegte sich selbstbewusst. Seine Stimme füllte den Raum. Er war nicht nur ein Sänger – er war ein Performer.

Lisa spürte es. Das Publikum spürte es.

Max war geboren für diese Bühne.

Der Song endete, und für einen Moment war es still.

Dann explodierte das Studio in Applaus.

Lisa lachte, während Eddy Max auf den Rücken schlug. Sie hatten es geschafft.

Max drehte sich zur Kamera und flüsterte leise:

„Danke, Freddie.“

Die Aufzeichnung der Show ging viral. Innerhalb weniger Tage hatte der Auftritt von Broken Chords Millionen von Klicks auf YouTube. Die Kommentare überschlugen sich:

„Wow, wo war dieser Typ die ganze Zeit?!“
„Max ist ein Star in the making!“
„Das war pure Magie. Gänsehaut!“

Die Anfragen häuften sich. Manager meldeten sich. Plattenfirmen wollten Gespräche führen.

Und plötzlich war alles anders.


Kapitel 15:

Lisa, Eddy und Max saßen in einem kleinen Café und scrollten durch die Nachrichten auf ihren Handys.

„Das ist verrückt“, murmelte Lisa. „Ich meine… wir haben immer geträumt, dass so was passiert. Aber jetzt ist es echt.“

Eddy grinste. „Und alles nur, weil Max sich wie ein verdammter Rockstar benommen hat.“

Max nahm einen Schluck Kaffee. Er war ruhig, gelassen – aber innerlich tobte ein Sturm.

„Es fühlt sich surreal an“, sagte er schließlich.

Lisa legte eine Hand auf seine. „Hast du Angst?“

Max überlegte kurz. Dann schüttelte er den Kopf.

„Nein. Ich bin bereit.“

In diesem Moment summte Lisas Handy. Eine neue E-Mail.

Sie las sie – und ihre Augen wurden groß.

„Was ist?“ fragte Eddy.

Lisa schluckte. „Das war eine Einladung zu einem Gespräch. Mit einem der größten Musiklabels überhaupt.

Max sah sie an. Ein Lächeln breitete sich auf seinem Gesicht aus.

„Dann lasst uns Geschichte schreiben.“


Kapitel 16:

Ein paar Tage später bekam Max eine Nachricht von einer unbekannten Nummer.

Justin: Hey. Glückwunsch zum Auftritt. Hab’s gesehen.

Max starrte auf die Worte. Dann schrieb er zurück.

Max: Danke.

Er sah die drei blinkenden Punkte, die anzeigten, dass Justin am Tippen war. Dann verschwand das Symbol. Keine weitere Nachricht kam.

Max atmete durch.

Es war vorbei. Justin war Vergangenheit. Die Zukunft gehörte ihm.

Kapitel 17:

Es war mitten in der Nacht, als Max auf seinen Balkon trat und in den Himmel blickte. Die Sterne funkelten, und eine leichte Brise spielte mit seinem Shirt.

Er dachte an den kleinen Jungen, der er mal gewesen war. Der von großen Bühnen geträumt hatte, aber nicht den Mut hatte, sie zu betreten.

Und er dachte an die Stimme, die ihn all die Monate begleitet hatte.

„Danke, Freddie“, flüsterte er.

Irgendwo in der Ferne, als wäre es nur Einbildung, glaubte er, eine leise Stimme zu hören.

„Die Show muss weitergehen, Darling.“

Max lächelte.

Ja. Das würde sie.

Ende.

Ariadnefaden – Der Weg Richtung DevOps ist ein Labyrinth

In der Java Aktuell vom März kann mein Artikel nachgelesen werden.

https://mydoag.doag.org/formes/pubfiles/12883630/docs/Publikationen/Java-Aktuell/2021/02-2021/02_2020-Java_aktuell-Thomas_Michael-Ariadnefaden_–_der_Weg_Richtung_DevOps_ist_ein_Labyrinth.pdf

Aber auch alle anderen Artikel sind sehr lesenswert. Hier das Heft.

https://mydoag.doag.org/formes/pubfiles/12883614/docs/Publikationen/Java-Aktuell/2021/02-2021/02-2021-Java-aktuell-WEB.pdf

Wenn es euch gefallen hat, könnt ihr MItglied im iJug Verband werden.

https://www.ijug.eu/de/mitgliedschaft/

In AWS Lambda – searching for my Layer

Using AWS Lambda with nodejs with Javascript.

Writing own library and use them as a layer.

Combine Lambda and Layer together.

Normally in Lambda, layer is found under /opt/

const shadowLib = require('/opt/shadow-lib');

But how to analyze, if layer is not found?

Try to get a list of all Files in /opt.

But how to get a list of all files from directory /opt? In AWS. In Lambda-function.

It works with nodejs12.

Try ist Lambda

const fs = require('fs');
const path = require('path');

function getFiles(srcpath) {
    return fs.readdirSync(srcpath)
        .map(file => path.join(srcpath, file))
        .filter(path => fs.statSync(path));
}
exports.handler = async(event, context, callback) => {
const files = getFiles("/opt");
    return files;
}

Et voilá – found my tipping error very quickly!

AWS CloudFormation scripting

if creating a couple of CloudFormation (cf) skripts and run them in a whole bash-script. How to get output from cf before as input for next cf?

One script runs like this:

aws cloudformation deploy --template-file myTemplate.yaml --stack-name myStackName

Or if need package before like this

aws cloudformation package --template-file template.yaml --s3-bucket my-S3-bucket --output-template-file output.yaml

aws cloudformation deploy --template-file output.yaml.yaml --stack-name myStackName

Override a parameter.

aws cloudformation deploy --template-file output.yaml.yaml --stack-name myStackName --parameter-overrides AppName='my First App' DevAccountId=23456 TestAccountId=98765

Creating bash/shell script for more than one cf is here

#!/usr/bin/env bash
AppName='my First App'
DevAccount=123456
TestAccount=98765
aws cloudformation deploy --template-file output1.yaml.yaml --stack-name myFirstStack --parameter-overrides AppName=$AppName DevAccountId=$DevAccount TestAccountId=$TestAccount
aws cloudformation deploy --template-file output2.yaml.yaml --stack-name mySecondStack --parameter-overrides AppName=$AppName DevAccountId=$DevAccount TestAccountId=$TestAccount
aws cloudformation deploy --template-file output3.yaml.yaml --stack-name myThirdStack --parameter-overrides AppName=$AppName DevAccountId=$DevAccount TestAccountId=$TestAccount

And now!

How to combine them? How to use export (not export, only output) from one stack as input to another stack, only using bash?

Getting output, use describe-stacks like this

aws cloudformation describe-stacks --stack-name myStackName --output text

Or with –output json or table, but you got whole stackdescription.

Reduce to output-only with this: All outputs

aws cloudformation describe-stacks --stack-name thomas-is-doph --query "Stacks[0].Outputs[].OutputValue"  --output text

or this: one specific output (Outputs[0] or Outputs[1] )

aws cloudformation describe-stacks --stack-name thomas-is-doph --query "Stacks[0].Outputs[0].OutputValue"  --output text 

You have to know the order of outputs!

But it gets better!

You can get a specific output with

aws cloudformation describe-stacks --stack-name myStackName --query "Stacks[0].Outputs[?OutputKey=='SearchTerm'].OutputValue" --output text

Now you get directly your searchTerm!

If you combine them in a script, a function would be nice

try this:

function getOutput { echo -n "function called to find $1" queryParameter="Stacks[0].Outputs[?OutputKey=='$1'].OutputValue" echo -n "Query Paramter= $queryParameter" outputVar='aws cloudformation describe-stacks --stack-name $2 --query $queryParameter - --output text' 
result=$(eval "$outputVar") 
echo "searching variable:> $result"}

In a whole script it looks like this:

#!/usr/bin/env bash

##################################################
## Getting output from CI! ##
## ##
## Needs 3 parameter ##
## $1 name of Output ##
## $2 name of Stack ##
## result name in mandatory ##
## contains result ##
## ##
## Example: ##
## getOutput KMSKey moe-cloud-stack result ##
##################################################
function getOutput {

  echo -n "function called to find $1"
  queryParameter="Stacks[0].Outputs[?OutputKey=='$1'].OutputValue"
  echo -n "Query Paramter= $queryParameter"
  outputVar='aws cloudformation describe-stacks --stack-name $2 --query $queryParameter --profile moe-ci --output text --region eu-central-1'
  result=$(eval "$outputVar")
  echo "searching variable:> $result"
}

AppName='my First App'
DevAccount=123456
TestAccount=98765
aws cloudformation deploy --template-file output1.yaml.yaml --stack-name myFirstStack --parameter-overrides AppName=$AppName DevAccountId=$DevAccount TestAccountId=$TestAccount

getOutput important myFirstStack result
first=$result

getOutput moreImportant myFirstStack result
second=$result

aws cloudformation deploy --template-file output2.yaml.yaml --stack-name mySecondStack --parameter-overrides AppName=$AppName moreImportant=$second important=$first

very nice, isnt it?

40 Apps in 40 Day – Day Three

My third app is ready!

You can find the story behind that here: Story

What I have done:

New in this app:

  • Using AWS Polly for sound.
  • Using AWS-SDK locally.
  • Using native Audio from html 5 for playing sound.

I took the “Day2-App” with the same AWS API Gateways and Lambdas and poured in some new features on the client App.

Spending time

While working with Polly I spent much time to find a solution for playing a sound file on the client with the ionic-framework. As the solution should have worked on both Android and iOS, I tried new Plugins (like the native-media or the native-audio-plugin), upgrading and downgrading existing ones but nothing worked out at all.
It could have been so easy as ionic and Cordova support the use of HTML5. As I decided to try that out with a few lines…

let myAudio = new Audio (file);

myAudio.play();

Thats all, thats easy, that was not expected!

Second challenge was to convert javascript example into typescript.

Using the example in JavaScript would have cost me an hour. But as I’m more a fan of typescript, so… converting code was the next step. Took like half a day in the end but was worth the work!

What I learned?

  • Keep it simple (stupid) KISS Pattern.
  • Dont ask the framework, what it can do for you, ask yourself if its neccessary. First learn basics, then learn frameworks.
  • Convert javascript into typescript is possible.

Video

Day Three

Whole Story

Story

Roadmap