Transcript: Ansible
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python Podcast, Episode 44.
Heute soll es gehen um Ansible.
Hi Jochen.
Herzlich willkommen Dominik.
Oh meine Güte, das geht ja schon holprig los.
Heute ist der Max dabei.
Wir haben ein bisschen Pause gemacht und schon geht nichts mehr.
Und der Max, natürlich, hallo, willkommen.
Hallo, heute bin ich dabei.
Ja, wir reden über Ansible, aber erstmal natürlich wieder wie immer die News.
Jochen, was hast du denn für News?
Ja, was hatte ich, es ist eine ganze Menge passiert.
wurden ja auch schon auf Twitter
mitbekommen habt.
Ja, und aber auch schon angehauen,
dass wir doch mal wieder was machen sollen.
Genau, machen wir jetzt auch wieder was.
Insofern ist viel passiert, aber das meiste habe ich wieder vergessen.
Daher egal.
Eine wichtige Geschichte war das Release von Django 4.1.
Das ist auch noch gar nicht so lange her.
Das ist sehr nett.
Also sowieso in letzter Zeit die ganzen Django-Releases
finde ich sehr...
Es wirkt nicht so
bombastisch irgendwie,
und Jochen unterhalten sich über die Programmiersprache Python
ASGI zu
irgendwie, man kann Async Views schreiben,
zu irgendwann werden wir auch komplett
irgendwie alles Async haben.
Das wird noch eine ganze Zeit lang dauern. Also ich
rechne da ehrlich gesagt nicht mit, dass das vor
einem Jahr oder so möglich wird.
Aber ein Jahr ist auch gar nicht so, ne?
Bitte? Ein Jahr ist auch gar nicht so, ne? Ja, stimmt,
stimmt. Letztes Jahr ist auch quasi gestern, das stimmt
schon. Insofern, ja.
Aber wenn man jetzt überlegt, wann haben wir
den Artikel?
Letzten Sommer. Das war nicht letzten Sommer.
Doch, das war letzten Sommer.
und Jochen unterhalten sich über die Programmiersprache Python
jetzt sowas sagt wie await
Query-Side-Shelter irgendwas oder so.
Dann, wenn irgendwann die ganzen anderen Dinge, die auch
alle dann async werden müssen und wo das dann funktionieren muss,
alles funktioniert, dann
kriegt man einfach so
schnellere Datenbank-Ergebnisse,
ohne dass man was dafür tun muss. Und das ist natürlich
sehr praktisch. Also insofern, jetzt kann man das halt schon
so verwenden, als wäre es da, aber es ist
halt noch nicht da, weil es
gibt noch keine Unterstützung für PsychoPG3
oder für AsyncPG oder sowas
daher. Man kann, glaube ich,
Dinge machen, über ein Threadpool.
Also wenn man wirklich will, dann kann man auch so ein bisschen
Async machen, aber das ist
halt noch nicht so wirklich das richtige Ding.
Aber das war
eine Geschichte. Dann
aber eigentlich die interessanteren Features, weil die kann man
halt schon wirklich benutzen und die bringen einem was,
sind sowas wie
Model Constraints. Also wenn man
in einem Model festlegt,
dass man irgendwie bestimmte
Check Constraints in der Datenbank haben will, also irgendwas
darf nicht größer als so und sowas sein oder
Wert muss zwischen dem und dem liegen
oder darf nichts anderes sein als das oder so.
Irgendwas auch immer man für Constraints da festlegt.
Dann war es halt früher so,
da musste man das halt in den
Modelformen nochmal mit validieren,
damit das
wirklich funktioniert. Ansonsten hat das Formen
gesagt, alles okay und dann
wenn das, wenn der
View oder was auch immer oder das Formen versucht, das
in den Datenbank zu schreiben, gibt es einen Integrity Error.
Was natürlich ein bisschen kacke ist.
Und jetzt ist es halt so, dass man tatsächlich
vom Formen auch gesagt bekommt, nee, das geht so nicht,
weil da ist ein Constraint
auf dem Model.
Das ist ja letztlich super angenehm, weil
vorher muss man selber checken und meistens
wird die Datenbank dann angefangen.
Ja, und dann
eigentlich, also meiner Perspektive
die coolste Neuerung,
ich habe es mir jetzt noch nicht so richtig, aber es klang schon
alles sehr viel sprechend, das was ich gelesen habe, klang auch sehr
gut. Das coolste
Feature ist halt, also es hat sich viel an den
Forms getan, auch in Django 4.0 hat sich schon einiges
an den Formularen getan, dass man halt
an Formulare auch dran schreiben kann.
Also dieses Formular wird gerendert über
irgendwie
ein Template. Und jetzt ist es halt
komplett so, dass man auch global
einstellen kann,
welches Template verwendet
wird, um Formen zu rendern, sodass man es gar nicht mehr unbedingt
in jedem Formen einstellen muss.
Und ja, da gibt es jede Menge.
Es ist deutlich flexibler geworden,
wie man Formulare rendern kann.
Das habe ich noch nicht persönlich überprüft,
aber ich fände es schön, wenn es so wäre, weil ich habe
Anfang des Jahres so ein bisschen was mit
Crispy Forms gemacht und so.
Ja, das war immer ein bisschen anstrengend.
und ich habe es
früher immer nur so ein bisschen verwendet und so,
so war es eigentlich okay und dann habe ich da irgendwann mal so
richtig tief reingeguckt, weil ich dachte so, okay,
weil es darum ging, das mit
JumboHTML, also mit
HTML zusammen zu benutzen und dann hätte ich
gern halt nur, ich ändere
ein Feld, dann geht das,
gehen die Formulardaten
an einen View und dann
möchte ich eigentlich quasi nur das Feld
zurückbekommen und die Fehlermeldung, wenn da irgendwas
nicht validiert zum Beispiel.
Aber das heißt, ich muss halt irgendwie
ein Feld plus eine Fehlermeldung
ändern.
In sehr komplizierten Formularen.
Und allein
nur das zurückgeben.
Um das hinzukriegen, muss ich sehr tief in CrispyForms
reingucken, wie das eigentlich funktioniert und so.
Und wie die ganzen Tablet-Packs funktionieren.
Und ja, da dachte ich mir, oh mein Gott,
das muss weg. Das kann nicht so bleiben. Das ist alles schrecklich.
Was heißt das?
Formtweaks?
Ah, Django Formtweaks.
Das macht es ein bisschen schöner, aber nimmt das Problem
auch nicht so ganz weg.
und letztlich habe ich dann auch, eigentlich habe ich auch so ein Riesentemplate, was alles durchrendert, also alles durchloopt und dann letztlich dann die EFAP-Fragen macht, falls irgendwas irgendwo schiefläuft.
Aber das ist jetzt auch einfacher, dadurch, dass man angeben kann, okay, ich will jetzt dieses Template und man muss dann nicht mehr sagen, okay, ich include das Form.
Ja, aber wie löst du da das Problem, wenn du jetzt zum Beispiel quasi HTMLX verwendest und sagst, okay, wenn da jemand draufklickt, dann wird das, eigentlich möchte ich nur einen kleinen Teil austauschen, das geht dann ja wahrscheinlich nicht so einfach, wenn du das Formular in einem großen Template rennerst
Ja, du
sagst ja, wohin das
soll, letztlich.
Und
da über den Response kannst du dann
letztlich
das ändern.
Tatsächlich muss ich sagen,
wenn ich dann in so ein spezielleres
Form gehe, was halt nicht so 0815 ist,
dann schreibe ich die auch
komplett von der Pike auf.
Ich dann die meiste
Control ab, weil mir da Django einfach nicht so
genug entgegenkommt.
Ich verstehe das durchaus, aber zum Beispiel
den Fall, den wir da hatten,
der war halt, dass es ganz viele
unterschiedliche Formulare gab, aber
viele der Formularteile waren halt gleich.
Sodass man das eigentlich so machen möchte, dass man
sagen möchte, okay, dieser Teil des Formulars,
das ist eine Menge Logik
hinter und so, den möchte ich jetzt in unterschiedlichen
Formularen irgendwie verwenden können.
Und aber auch nur diesen Teil rendern und nicht
das ganze Formular.
Und wenn da jemand was eingibt und so,
Also quasi mehr in die Component-Ebene rein.
Ja.
Dann vielleicht ein eigenes Feld schreiben.
Und dann kann man sich das ja auch wieder holen.
Das haben wir dann auch gemacht.
Ja, klar.
Genau, das wäre dann auch mein Ersatz.
Ja, aber es war alles nicht so ganz...
Also das wird jetzt mit Python und mit Dango 4.
Genau, also angeblich braucht man das nicht mehr.
Angeblich braucht man Crispy Forms unter Umständen nicht mehr
und die ganzen Template-Packs nicht mehr.
Und das kann man jetzt alles selber machen.
Und das klingt sehr gut, weil das ist echt so ein...
Ja, da kann es schon leicht schmerzhaft werden.
Ja, genau.
More News?
Ansonsten irgendwie
ja, Pydentic 2
kommt jetzt, also
beziehungsweise ist es noch nicht released, aber das
wird jetzt so allmählich Richtung Release
geht das
und also du meintest
ja auch schon mal so, genau, Pydentic Core
Genau, Pydentic Core.
Rust-Implementierung und Rust, dass das schnell wird.
Ja.
Ja, das ist ja genau,
also das ist halt halt das Problem,
also Pathentic hat auch so ein paar Probleme, die
in ganzen
Internals sind halt eher so ein bisschen
ja, vielleicht
nicht mehr dem Verbreitungsgrad,
wie das halt verwendet wird und so,
angemessen und es ist halt auch langsam,
es ist sogar deutlich langsamer, als wenn man jetzt einfach nur
Data Classes nimmt. Ja, oder
halt Data Classes
sind auch nochmal deutlich langsamer als
ganz normale Klassen.
Ja, okay, oder Etis oder so, glaube ich, das kann ich stellen.
Ja.
Und ja, das ist natürlich irgendwie ein bisschen
doof.
Deswegen,
das ist jetzt halt in Rust neu
implementiert. Da waren auch so ein paar Sachen dabei.
Ich habe letztens auch einen Podcast gehört,
Talk Python to Me, letzte oder vorletzte Episode,
weiß ich nicht genau, mit dem
Autor von Pydentic,
Samuel Cohn.
Und
da sagte er so,
da waren ein paar, weil ich normalerweise
dann immer denke, das Erste, was man macht, wenn man es halt schon schnell
haben will, warum nimmt man nicht einfach Saiten?
Und da hat er relativ ausführlich
und Jochen unterhalten sich über die Programmiersprache Python
Rust-Geschichten einbinden kann.
Und das macht halt...
In beide Richtungen sogar.
Und die Binaries werden halt
deutlich kleiner und das ist natürlich schön, weil
das war nicht so...
Und es ist halt genau...
Man kann halt alles wegputzen, was man nicht gebraucht hat oder so, glaube ich.
Ja, und die ganze Parsing-Logik
ist jetzt bei Python-Decor komplett
in Rust und es ist halt auch gar nicht so,
dass... Also bei Zeiten würde man halt
sagen, okay, einige Teile macht man halt in C
oder schreibt man in Zeiten, die dann nach C
kompiliert wird und dann wieder. Und da ist es so,
das passiert halt alles in Rust
und am Schluss werden halt Python-Objekte
erzeugt, aber man geht gar nicht
den Umweg sozusagen
da doppelt irgendwie Sachen machen
zu müssen. Also ja, war
auf jeden Fall sehr interessant und da bin ich mal gespannt, wie das
so wird, weil ja, das ist auch
immer sowas,
wenn dann Leute dann aus der
Google-Ecke sagen oder so, ja, wenn man
viele Datenbankzeilen aus der Datenbank
holt, dann ist er bei Python immer langsam.
und ja, also wenn man Pydentik verwendet oder irgendwie
sonst wie ein ORM und dann
Objekte daraus erzeugt, also bei Pydentik
ist es noch schlimmer als bei anderen ORMs,
aber dann kann das halt schon
sehr langsam werden, aber ich meine, das ist halt
die Frage, wenn man möchte, dass es
schnell ist und Millionen Zahlen aus der Datenbank holt,
dann darf man halt nicht aus jeder Zahl ein Objekt machen.
Das ist halt dann nicht gut.
Ja.
Ja, hast du noch weitere News?
Nee. Ich auch, der EU-Python.
Ja, das war natürlich ganz interessant.
Also total tolle Veranstaltung,
kann ich nur empfehlen, da teilzunehmen,
wenn man da die Möglichkeit so hat.
Das war in Dublin. Dublin ist natürlich auch
sehenswert. Es gibt da leckere
Getränke.
Aber aus der Python-Bestseller-Diktatur wäre das natürlich auch schön,
mal so ein bisschen die Leute zu hören
und verschiedene Sachen.
Vielleicht erzähle ich mal so ein bisschen, was ich ganz besonders interessant fand.
Und zwar hat der Patrick,
Patrick Raminio,
bei Strawberry einen netten Workshop gemacht.
Das war sehr schön und interessant zu hören.
Das war eine GraphQL-Schnittstelle, die man einbauen kann.
Das gibt es auch Strawberry Django.
Dann kann man das halt direkt als GraphQL
View quasi benutzen.
Sehr interessante Art und Weise mit der Datenbank
untergehen. Da kann man relativ gut definieren,
welche Queries möglich sind auf die
Datenbank und hat dann einen Endpunkt, das Exposed,
den man dann halt erfragen kann, um mal so ein bisschen
den Nutzer
dieser API direkt entscheiden zu lassen, was er denn
haben will und muss dann halt nicht die ganze Quad-Interface
implementieren. Bei GraphQL
habe ich immer so die Frage, also ich
muss ja das ganze Schema schreiben
und irgendwie habe ich immer am Ende
das Gefühl, ja die
Django OM gibt mir das aber eigentlich gratis, was ich dem rausgeben will.
Ja, es ist so ein bisschen mismatched zwischen, man hat halt eigentlich das nochmal, weil man irgendwie dem Frontend halt so eine Art Datenbankinterface zur Verfügung stellt.
Es ist schon so ein bisschen, ja, ich weiß auch nicht, also ich bin in letzter Zeit, also ich habe auch mal eine Zeit lang irgendwie intensiv GraphQL gemacht, meistens dann halt Django Graphene.
Ja, das wird dann auch manchmal so unerklärlich langsam und ich mache halt mal so Probleme, das rauszukriegen dann, warum da und ja, ich glaube ich hatte auch diverse Designprobleme, auch ich glaube der Autor von Graphene meinte dann irgendwann, ach, ihr müsst das nochmal alles komplett neu schreiben und keine Ahnung.
An den Punkt kommt man eigentlich immer.
Ja, natürlich. Und ich weiß auch nicht, ich weiß ehrlich gesagt nicht, ob GraphQL überhaupt noch so eine Idee ist.
Ich habe letztens auch kritische Stimmen gehört, in die Richtung.
Ja, Armin Runacher
hat es vielleicht jetzt letztens auf Twitter, da schrieb er dann so
irgendwie, also, ach,
das war glaube ich, oder war das der HTMX-Typ?
Ich bin mir nicht mehr sicher.
Der dann schrieb, naja, bedenke, dass
du, ach so, genau, ich glaube,
Armin Runacher hat immer gesagt, also diese GraphQL-Geschichte
ist so unfassbar komplex und das wird alles so
wie ist jemand
jemals auf diese Idee gekommen, das so zu machen?
darauf hat dann der
HTMX-Autor irgendwie geantwortet und meinte so, ja, also
bedenke immer, wenn du so einen
generischen Datenbankendpunkt
quasi deinem Frontend zur Verfügung
stellst, du stellst dir nicht nur deinem Frontend
zur Verfügung, sondern auch allen anderen, inklusive
Leuten, die dich angreifen wollen.
Ja, also du kannst auf jeden Fall schon tossen damit.
Das ist natürlich extrem schwierig zu verhindern,
dass das nicht geht.
Also
ja, ja.
Also auf jeden Fall trotzdem, der Workshop war sehr interessant.
Ja, aber es ist gut sein.
So ein bisschen ähnlich von FastAPI,
also ungefähr, also vom Prinzip her viel
mit modernen Typings und so.
Ja, dann gab es noch einen schönen
Talk, das war auch direkt am Anfang, über
einen Blog-Eintrag
von Peter Norweg, und zwar
hat das Luciano Romano das gemacht, und
über Lisk-Screen-Parser in Python
relativ kurz, das gab so ein,
weiß nicht wie lang das ist,
gelogen 70 Teilen oder sowas in Python,
kompletter Lisk-Screen-Parser, was halt irgendwie ganz cool ist,
weil man da so ein bisschen versteht, wie so ein Parser funktioniert
und was so ein Ast ist und
so ein Lisk-Screen ist ja relativ ähnlich zu JavaScript, glaube ich,
oder so, wie man dann Tugends baut und Funktionen
und fand es ganz interessant, das mal so zu sehen, auch mit
Python und so versehen.
Generell, wo Python überall verwendet wird,
also James Webb Space Telescope
von der NASA war auch jemand da, der dann sagte, hey, wie denn die Bilder
in Python zur Erde geschickt werden und so, das freut man sich
immer, dass es so berühmte Anwendungsfelder gibt.
Die Lynn hat einen sehr schönen Talk
gemacht über Everyday-RPs von Spotify.
ist das eine Entwicklerin, die da
einfach so einen netten Talk gemacht hat,
so wie wir das auch machen, aber sie hat eine sehr hübsche
Folien, die können wir auch mal verlinken.
Das haben wir nicht. Genau.
Da kann man sich nochmal so angucken.
Abis Design, glaube ich, das war irgendwie, dann fand ich ganz
interessant.
Auch super, das war einer der,
für mich fand ich, das war so die didaktisch besten Talks,
das war von Niall O'Connor, irgendwie über
Fibonacci Retrace Levels, Asset Price
Prediction Reverse von der Bank of
America, der ist auch so rumgespringen,
hat die ganze Zeit über
Resistances gesprochen und da ist
immer die Folie gewechselt.
Ein weiter, ein weiter, in the long run we are all dead
und dann klick, klick, klick, eine Folie nach dem
anderen Team. Das war super, ich fand's toll.
Muss man sich eigentlich wenigstens mal angucken.
Ich muss auch mal irgendwann
so ein Trading-Bot bauen, keine Ahnung.
Was ich auch ganz cool fand, war das
Team von Huggingface
war da. Die haben ja dieses
DALI gemacht, das heißt, da kann man
ja irgendwie durch Texteingaben Bilder
generieren lassen von so einer KI.
Oh, da habe ich jetzt auch, da habe ich meine
Verifikation bekommen, ich kann jetzt
per Dolly Bilder generieren
Ja, cool, genau, ja und das Coole ist
es gibt da einen Python-Wrapper drum, um HGFace
der nennt sich Gradio, den kann man einfach
installieren und dann kann man gerade sagen Gradio Use
den Namen dieses
Machine Learning Modells und kann dann direkt diese
vortrainierten Modelle nehmen und die auf seine eigenen Daten schmeißen
und die auch annotieren und die Features irgendwie
anpassen, das fand ich sehr nice, so zum
ausprobieren und so ganz schnell Machine Learning
innerhalb von kurzen Teilen bauen, das war
Ja, sehr cool, very nice
Ja, da gab es noch so ein paar politische Talks
über AI, Dystopia und so, was man alles nicht
mit Killer-Robotern machen kann und so
wenn man sich das nochmal angucken möchte, so die Argumentationen
dahinter stecken
Dann
darüber, wie man 3.11 jetzt schneller
gemacht hat, hat Mike Shannon gesagt
Ja, das ist super
Das war auch sehr schön, also ein bisschen C-Python wieder
und da in dem Fall auch Sam Gross von
Facebook hat was dazu gesagt, wie er
No-Gill macht und wie das aussieht
dass man halt in Python nicht mehr No-Gill benutzen möchte
Robin habe ich gesehen, das ist ein neues
Framework, ein
asynchrones Python-Web-Framework, das mit einer Rust-Runtime
läuft. Dann kannst du halt sowas wie Ubicon
sparen vorneweg und hast halt
direkt diese Rust-Runtime und das ist relativ
schnell, wenn du relativ gute
Anforderungen hast. Ja, das ist auf jeden Fall eine interessante
Idee. Also ich meine, ich würde jetzt sagen,
also ob einem das so wahnsinnig viel
hilft, wenn man das jetzt in Rust
also das Einzige, also ich meine, Ubicon finde ich ja eigentlich schon ganz
gut, ist relativ schnell und so,
aber also zum Beispiel
in, wenn ich Files ausliefere, also meine Benchmarks sagen, so Ubiquon ist deutlich schneller, äh, deutlich langsamer als sowas wie Nginx und so, ich weiß nicht warum. Ich hab keine Ahnung, wahrscheinlich müsst ihr mal tiefer reingucken, was das eigentlich, also bei den Roboing ist auf jeden Fall auch diese, ähm, so ein paar Benchmarks, ich weiß halt immer nicht, du bist ja immer bei Benchmarks, bist du da ein bisschen kritisch, wie gut die sind oder wie weit gerade die sind? Ja, ja, schwierig, also sag mal so, es ist einfach schwierig, Benchmarks so zu machen, dass sie halt etwas sagen, die Informationen darüber geben, was du eigentlich wissen willst und nicht, dass du irgendwie dein Benchmark-Tool gebenchmarked hast oder deine CPU gebenchmarked hast oder den Speicherbus gebildet hast, es ist halt irgendwie,
kann vielfältig schief gehen.
Ja, also jedenfalls, das war super interessant.
Achso, genau, ich hatte auch noch dieses
Tim-Gross-Talk, da geht es halt um Reference-Counting auch,
mit dem Nogel, dass man halt irgendwie das ersetzen kann.
Ja, dann
gab es noch
einen Talk über Jot, fand ich ganz interessant,
da wusste ich noch nicht alles drüber, da haben die Jessica erzählt,
so ein bisschen nochmal
so die Details
darüber, was da für ein Payload drin ist und so weiter,
das war interessant. Und noch
der Luciano Roman hat noch einen über Typing.
Ja, der hat ja jetzt,
Also überhaupt, ich weiß nicht, ob der so bekannt ist, der Name, wenn man den sagt, dass der den Leuten interessiert.
Das ist der Autor von Fluid Python.
Ganz lange Zeit schon Community aktiv.
Und ich finde, Python ist halt auch so eines der besten Python-Bücher, die so draußen sind.
Und davon gab es jetzt auch im Frühjahr irgendwie eine zweite Ausgabe.
Und da ist eine der Neuerungen ein Kapitel über Typing.
Und das ist halt super.
Genau, das meint ja so, wie du dich das vorgestellt hast.
Das war.
Ich höre dich bei der Talk bei
Pythons as Guido in Tende.
Ah, okay.
Weil das würde mich jetzt mal interessieren,
weil ich habe das,
also ich habe da so ein bisschen reingelesen,
ich habe es noch nicht komplett gelesen,
aber so ein bisschen quer gelesen
und ich weiß auch sonst,
was er darüber schon mal so geschrieben hat
und der war ja auch schon mal Gast
in diversen Podcasts und so.
Und der ist ja auch eher so ein bisschen kritisch
gegenüber dieser ganzen Type-In-Geschichte.
Er sagt so, meine Güte,
das ist halt irgendwie ein ganz schöner Aufwand,
das zu lernen
und teilweise ist es ganz schön schwer.
Also das Beispiel,
was ich jetzt auch schon ein paar Mal gebracht habe
mit Min- und Max-Funktionen
und den Type-Annotationen, das kommt von
ihm. Ja, ich glaube, er hat ein Protokoll
entwickelt, wie man das machen kann. Also typing.protocol
macht er irgendwie, um solche Sachen zu lösen.
Das war ganz spannend.
Ja, dann Supersearch
mit OpenSearch, war noch ganz interessant.
Also OpenSearch als Elasticsearch
Fork, irgendwie mit Python.
Ganz schöner Talk dazu.
Ja,
Dublin war toll, man konnte auch
an den Strand fahren, war super Wetter und
nette Leute kennengelernt, großer Marlene.
Und ja.
Ja, sehr schön.
Das war eine super Veranstaltung. Kann ich empfehlen, das nächste Mal gerne wieder.
Ja, nächstes Mal schaffe ich es gleich auch.
Ein Gruß an Jörn Hendrik auch.
War auch sehr schön.
Ja.
Ja, habt ihr noch News?
Dann sind wir vielleicht endlich beim Thema.
Ja.
Das Thema ist nämlich heute Ensebel.
Und ich würde sagen, jetzt ist auch der perfekte
Teilpunkt für Max, dass Max sich vorstellt und
Hallo sagt.
Ja, hallo, ich bin Max.
und
ja, programmiere
viel in Python,
mache viel mit Django,
bin bei einer
Compliance-Beratung, wir kümmern uns um
Datenschutz, Qualitätsmanagement,
Arbeitssicherheit und eigentlich
stelle ich so den Beratern die Tools
zur Verfügung, damit die
weniger arbeiten müssen
und alles ein bisschen schöner
am Ende aussieht.
Und da setzen wir hauptsächlich Python
ein und haben natürlich auch eine
Ecke an Servern, die wir dann
mit Ansible bespielen.
Das heißt Ansible zur Servereinrichtung.
Genau, also so.
Ansible macht ja Konfigurationsmanagement.
Kennt ihr alle Ansible?
Ja, ich doch.
Was macht Ansible? Ja genau, Konfigurationsmanagement
heißt also, du rollst
irgendwas auf dem Server aus und sagst dem,
was das für ein Server sein soll und dann
macht Ansible die ganzen Skripts und die Konfigurationen
und die Einstellungen von der Kiste.
Genau, also Ansible ist
deklarativ, das heißt, ich sage dem Ansible nur, so soll das am Ende aussehen
und dann kümmert sich das um alles
weitere.
Es gibt da natürlich viele verschiedene Tools, die das halt machen.
Da gibt es natürlich auch Chef und Puppet, die man zum Beispiel nutzen kann.
Salt gibt es natürlich auch. Das sind so die großen, die man dann
letztlich hat.
Und die Frage ist dann immer,
okay, welches von diesen Tools nehme ich denn am Ende?
Und ich finde,
ja, Ansible ist halt
das Tool mit der niedrigsten Hürde,
weil man
am Ende halt
YAML schreibt
und dort halt relativ klar reinschreibt,
was man denn am Ende haben möchte.
Und es funktioniert halt
agentless, das heißt, ich muss halt
vorher keinen Kontakt zu dem
Server gehabt haben, also
kein Agent installieren
und dem werfe
ich dann einfach Befehle zu und der führt die dann
aus.
Ja, das ist
so wie, also per SSH brauchst du natürlich Zugriff.
Genau, man braucht SSH-Zugriff
und man braucht Python auf der Kiste.
Ja, okay.
Genau, und
ab da läuft es dann
sehr autonom.
Auf der anderen Seite gibt es natürlich auch
so ein paar Trade-offs in der Richtung.
ist nämlich dann, dass Ansible
eigentlich so den State der Maschine
nicht kennt.
Wenn man Agent drauf hat, der meldet dann
regelmäßig zurück und sagt dann,
ja hör mal, hier ist übrigens gerade
die Pakete sind ausgelaufen, kannst mal ein Update
machen, davon weiß
Ansible dann nichts.
Es geht einfach kaputt oder aus, wenn irgendwas nicht stimmt.
Ja, also der hält dann
State nicht, also wenn du sagst,
okay, ich möchte halt immer die aktuellste Version
vom Apache drauf haben,
dann ist das
für den Moment, wo das ausgeführt wird, so.
Genau, und danach ist es halt historisch, ja.
Genau, danach ist es dann gewesen.
Und die andere Annahme ist natürlich
dann auch, dass halt niemand
auf dem Server was macht,
außer über Ansible.
Damit man halt den State hat,
den man einmal... Aber das ist so eine Konvention, die man dann
haben muss. Also es könnte ja auch anders sein. Es könnte ja auch sein,
dass irgendein Admin irgendein Login hat und dann einfach irgendwas macht
und das hat mit dem, was die Ansible-Wahrheit war,
nichts zu tun. Genau, und deswegen
und weiß ich, also wenn ich das nächste Mal
dann Ansible ausführe,
halt nicht, wie sieht denn jetzt die Wirklichkeit
auf der Maschine aus.
Ja, also vielleicht wollen wir tatsächlich so ein bisschen reingehen,
was Ansible macht, wie das so macht.
Ja, also ich würde sagen, generell der größte
Unterschied eben zu den anderen ist halt, dass es
Ancient-less ist, das ist halt ein Riesenunterschied
und da kommen dann halt, also einmal ist es halt ein Riesenvolk,
man braucht nur SSH, das ist alles, das hat man ja
meistens, also ich würde sagen, es passt halt gut zu dieser
Geschichte, was passiert eigentlich, wenn man
jetzt halt eben so irgendwo sich ein Rechner klickt, dann kriegt man halt meistens ein
Root-Login da. Bis dahin ist es ja meistens schon automatisiert. Ab dann ist halt die
Frage, was macht man dann? Aber dann braucht man halt auch nicht mehr. Dann kann man mit
Enzimid schon anfangen, während man bei anderen Sachen, da muss man halt dann irgendwie einen
Agent installieren und keine Ahnung. Ja, das ist halt der Vorteil, aber es ist halt
natürlich in gewisser Weise auch ein Nachteil irgendwie, weil das macht dann halt dann
bestimmte Sachen eben, wie er schon angesprochen hat.
Also eine Geschichte, die ich noch hinzufügen würde,
ist, macht das halt auch langsam.
Dadurch, dass das alles sich erst haben muss.
Also wenn zum Beispiel Files kopieren,
viele Files kopieren, ist halt mit
templates, die dann,
wie man da abzahlt, das ist halt schon relativ klar.
Ja, weiß ich nicht. Das kommt wieder ein bisschen
drauf an. Okay, gut. Interessant, ja.
Ja, also weil,
ich nehme das vielleicht erst vorweg, also was
bei mir immer so ein bisschen
bei dieser Infrastruktur-as-a-Service-Geschichte
dazukommt, ist halt dann Terraform,
weil ein Terraform-Provider
halt, die sind geschrieben für
AWS und
Azure und Google Cloud und auch zum Beispiel
Hetzner oder sowas, also jeder kann seinen eigenen Provider in Go
irgendwie schreiben für
Terraform, diese HashiCorp-Language,
in der man dann auch in YAML
Infrastruktur definieren kann, also wie sieht die
tatsächliche Hardware auf, wie viele Kerne
hat der Rechner, den du haben willst, wie groß ist die Platte
und wie ist die Netzwerkkonfiguration
von dem Ding, also das alles, was
diese Cloud-Provider anbieten
und dann ist jetzt die Frage, wie man das
Ansible beispielsweise kombiniert.
Ja, man hat halt dann entweder
macht man per Ansible so Terraform,
da musst du manchmal nochmal erklären, wie das funktioniert,
das habe ich noch nicht ganz begriffen. Und wie ich das
mache, was ich ganz nett finde, ist tatsächlich
Terraform
anzufangen und bei dem Apply
mit die Ansible-Kommandos reinzugeben,
die auf dem Server laufen sollen. Und dann
bedeutet das natürlich,
das ist so ein bisschen von hinten in die Musse des Auges,
man muss dann so ein Cloud-Init-Skript zum Beispiel mit angeben, was dann
auch quasi Ansible
selbst auf dem Rechner installiert und dann
ein Local Host Inventory läuft.
Also das Host läuft dann halt
local.
Ja, kann man so machen.
Ist aber sehr kompliziert, ja.
Ja, du hast halt hinterher das Problem,
dass du halt für Management die IPs wieder rausreichen
musst und einen SSH-Zugang brauchst, den Enso benutzen
kann, damit es halt dann sowas wie Upgrades
oder sowas auf einen Kisten ausgerollt werden kann, wenn du
da mehrere Farmen mitträumen wirst.
Ich weiß nicht, ob ich das
kompliziert finde, aber das ist halt
so andersrum, weil du hast halt immer nur so einen Local
Host, die du dann provisionst.
Aber der sieht dann schon so aus, wie du willst.
Vielleicht erklärst du noch mal kurz, wie es andersrum bei dir funktioniert.
Erst Ansible, dann Terraform.
Ja, also letztlich mache ich
auch erst
Terraform. Achso.
Und dann lasse ich mir das
Inventory dynamisch erstellen.
Ah, genau. Das hätte ich jetzt auch gedacht, dass das vielleicht ein guter Weg ist.
Und dann, genau.
Also der andere Weg, Ansible und dann
Terraform, heißt dann, okay, ich habe dann erstmal
Ansible und lasse dann
ja,
Da soweit dann schon mal alle Templates
und soweit ausfüllen, wie ich das letztlich haben möchte
und starte von da aus dann den Terraform.
Kann man dann auch machen.
Aber ich finde,
der
richtige TMW wäre...
Vielleicht müssen wir das nochmal kurz auseinander druseln.
Also erst Ansible lässt du
dann die Terraform-Templates von Ansible
befüllen, dass halt quasi
Terraform
dann weiß, welche...
Also die Frage ist halt, wo läuft dann diese
Ascent-Control-Node? Läuft die dann lokal und
füllt dann quasi die Terraform-Templates mit den Dingen,
die du dir vorgestellt hast, über ein
eigenes Ansible-Inventory
oder irgendwelche Rollen, die du dir definiert hast, aus.
Und dann fängt es an, dann die Infrastruktur
zu deployen. Und die nächste
Frage wird dann wieder, wie sehen denn
die Kisten aus? Also dann muss Ansible ja quasi wieder hingehen,
diese Nodes, die es erstellt hat,
connecten und dann da seine
Rollen aufbauen.
Eine Ansible-Rolle ist quasi genau das,
was man hat. Also eine Konfiguration für irgendwas.
Also Rolle, Datenbank-Server, Rolle,
Web-Applikation, Rolle.
Wollen wir nochmal in die Definition gehen, damit wir das Thema Playbooks, Plays, Tasks und Rollen klar haben, weil ich finde, das ist das Verwirrendste. Also Inventory, damit kommt man ja irgendwie so klar.
Vielleicht doch nochmal erklären, für jemand, der es noch gar nicht gehört hat.
Also Inventory, das sind so meine Kisten, das ist eigentlich eine YAML oder INI-Datei und da kann ich dann die IPs oder die Server reinschreiben, die ich dann erreichen möchte und die kann ich auch ein bisschen kopieren, um dann zu sagen können, okay, das sind meine Datenbank-Server, das sind meine Web-Server und die kann ich dann letztlich in einem Playbook halt ansprechen.
Also ein Playbook ist quasi eine Anleitung, welche Rollen ein Server haben soll, der die und die Bestimmung erfüllt.
Ja, es ist so ein bisschen die Metapher aus dem Football. Du hast dann als Coach von deinen Servern, sagst, okay, wir spielen jetzt diesen Spielzug und alle Server, die Datenbank sind, gehen jetzt alle nach links. Und da ist dann das Play drin, wo dann drin steht, okay, das sind die einzelnen Anweisungen, die erledigt werden müssen.
Okay, dann in einem Play, also dann
wenn eine Rolle ausgeführt wird, in jeder Rolle stehen
dann Aufgaben drin, also Tasks drin,
welche alle aus diesem Föber ausgeführt werden sollen,
damit das so ist, wie man
sich das vorstellt. Genau, aber
Play ist halt, ein Playbook kann
halt Rollen benutzen, aber
Play, das ist keine Rolle
selber, sondern Playbook ist halt, da kann ich halt
genau, Rollen drin benutzen,
aber es gibt auch Leute, die das gar nicht machen, sondern die alles
immer inkluden irgendwie,
ist halt, ja.
Ja, letztlich ist es eine Hilfe, dann
seinen Code zu organisieren.
Man kann natürlich auch
alles in eine große Datei schreiben.
Ich mache tatsächlich
ganz viele Rollen irgendwie.
Ich weiß nicht,
aber der Ensemble Galaxy ist auch ganz sch das ist halt der Cloud Die Sammlung von Rollen die Sammlung von Rollen die kann man hochstellen Wie Pip quasi blo f Ensebel
Also ich bin immer so ein bisschen picky,
ich mache immer viele Sachen selber, also
Notimated hier und so.
Ja.
Die Ensebel Galaxy
gucke ich mir dann auch zur Inspiration an.
Genau.
Ja, und
jedenfalls, da könnte man sich halt auch
solche Rollen einfach inkluden von dort.
und dann baut man halt seine Rollen und da
legt man dann halt fest,
welche Konfigurationsaufgaben
ausgeführt werden müssen.
Da kann man dann, weiß nicht, aus
Tinder-Templates Konfigurationsdateien
sich belegen und befüllen lassen mit Variablen,
die man reinreicht von außen
und so weiter. Das ist ja genau die Besonderheit
bei Rollen. Da sind ja dann
Variablen mit drin, Plugins mit drin,
Templates mit drin, Dateien mit drin
und das ist quasi so
der Gegensatz dann zum Playbook,
was das dann nicht unbedingt mit drin hat
also okay, also weil ich
definiere mir halt immer so Playbooks
wo dann halt diese Rollenliste drin ist
die benenne ich dann irgendwie immer so
Setup Web Server with
bla oder so
ja
Postgres zum Beispiel und Django auf einmal
also dann wäre ja die Rolle letztlich Postgres
ja, dann wäre die Rolle Postgres und Django beispielsweise
genau
ja und vielleicht haben die noch Dependencies, keine Ahnung, also bei mir ist zum Beispiel
dann so ein Minimum Server Setup oder so
mit drauf oder so
und letztlich die Rollen, die
soll man quasi so schreiben, dass man die
wiederverwenden kann.
Modular, austauschbar, egal.
Postgres ist halt überall, der Postgres
und der... Also ich finde das zum Beispiel
schwierig, weil
was Ensemble ja zum Beispiel auch ermöglicht ist,
eine Unterscheidung zwischen den Betriebssystemen,
die benutzt werden, also ob ich jetzt
ein Meta-Enterprise habe oder ein
Debian oder so und
das finde ich ein bisschen blöd, weil
ich habe keine Lust, immer meine Rollen
für alle Systeme zu schreiben, die ich nicht benutze.
Ja. Also so.
Genau.
Also deswegen ist es eigentlich ganz gut,
die Themen so homogen zu halten,
damit man nicht so viele
unterstützen muss. Aber da kann man
natürlich auch nochmal mit dem Inventory arbeiten
und dann beim Inventory
den einzelnen Servern nochmal Variablen
mitgeben und sagen, okay, der ist halt
anders als die anderen.
Ja.
Genau. Also das, ja.
Ich meine, ich verstehe schon, dass Leute,
diesen Fall haben. Ich habe den selber auch nicht. Bei mir sind alle
Server haben irgendwie das gleiche Betriebssystem.
Welches benutzt du?
Ja, Debian tatsächlich Pulse I zur Zeit.
Das ist nicht Arch Linux.
Naja, nee.
By the way.
Es gibt da auch interessante
Alternativen. Also womit ich ab und zu mal
geliebt und ordnet habe, ist halt nix.
Aber ja.
Ich habe nix auch benutzt, aber nur als
Server-Variante.
Gerade Python ist da sehr, sehr nervig
mit, weil man halt gar nicht so
wie Paketmanagement, wo er seine Projekte
verwalten kann, sondern muss halt jedes Mal seine eigenen
Environments irgendwie zusammenfummeln und ist
nicht alles verfügbar und das ist einfach
sehr, sehr viel Maintenance-Arbeit,
wenn man da irgendwie Updates fahren will.
Man hat halt sehr viel Kontrolle,
die man auch ausüben muss.
Ja, genau.
Das ist schon irgendwie sexy, aber...
Genau, das würde mich eigentlich
reizen, weil mir das Konzept natürlich schon irgendwie ganz
gut gefällt und so, aber auf der anderen Seite
irgendwie Debian benutze ich halt schon so lange und kenne ich halt gut
und es gibt keine Überraschungen und
Die Frage ist, muss ich halt die Schlachten aussuchen?
Dann würde ich sagen,
dann überlebe ich damit, dass es halt irgendwie ein langweiliges
Debian ist.
Und dann kann ich die interessanten...
meinen Innovation-Token
irgendwo anders ausgeben, wo es halt vielleicht
irgendwie mehr bringt. Aber es reizt mich schon,
das muss ich sagen.
Ja, also bei der Definition
jetzt, ich glaube, wo waren wir denn?
Inventories, Playbooks, Hosts?
Haben wir das klar genug definiert?
Oder sind wir da auf der Suche?
Ja, genau.
Ich wollte irgendwas sagen, ich habe es wieder vergessen.
Ich glaube, ich habe diesen Fall eben auch,
das nervt mich auch in diesen Rollen, die man halt von
Galaxy
bekommt, ja eben sowas wie Postgres
zum Beispiel. Also
was ich dann, wenn ich diese Rolle, wenn ich, ich weiß nicht,
ob ihr die kennt, die habe ich mal
irgendwann benutzt, ich weiß nicht, ob es ja noch aktuell ist.
Da gibt es immer einen, der schreibt die alle.
Wie heißt der? Gerling? Genau.
Der hat auch ein richtig gutes
Buch über Ansible
und noch ein paar gute YouTube-Videos.
Alle in die Show Notes? Genau.
und der hat auch einen Vortrag,
wie man rausfindet,
welche Rollen
gut sind in der Ansible Galaxy.
Hat dann ein Schaubild gesagt
mit so ein bisschen Augenzwinkern.
Also man guckt dann, ob er der Autor ist.
Ja, tatsächlich.
Und wenn nicht, dann fragt man ihn an und wartet so lange,
bis die da kommt.
Ja, genau. Aber das Problem bei denen
ist halt oft,
weil der hat dann eben für Postgres zum Beispiel
eine und die fand ich nicht, sondern ich habe seine gefragt
und dann
und einfach, das ist zwar, also den Hauptteil davon, der interessiert mich halt nicht, irgendwie die ganzen Installationen von allen möglichen Plattformen, ja, und dann der Teil, der mich interessiert für Debian, da hätte ich keine andere Version und dann muss ich das aber irgendwie patchen, dass das dann doch geht.
Ja, gut, Ansible Galaxy, das ist halt für alle Anwendungsfälle
und gut, also wie gesagt, eher so die Inspirationsquelle
oder wenn man es halt wirklich mal schnell hochziehen will
und so gucken, okay, wie sieht das so aus
Ja, okay, das ist so ein bisschen der Docker-Container für den Server
oder so, also so eine Rolle
Ich spawne jetzt meine Server in der und der
Ja, in gewisser Weise, das ist vielleicht ein guter Vergleich
und so weiter.
oder Docker Compose oder sowas.
Nur, dass es halt irgendwie
dass man die ganzen Einschränkungen
nicht hat, die man bei Docker so hat.
Und auch die ganzen
Security-Sachen sind, finde ich, da deutlich,
wenn man das so macht, deutlich klarer als jetzt bei Docker.
Und, naja.
Ja, nochmal so zum
Abgrenzung Rolle und Playbook.
Ja, Rolle ist wirklich dafür gedacht,
alleine zu stehen.
Bei dem Playbook, dann sage ich, okay,
ich möchte halt
so einen bestimmten Server auf die
oder eine bestimmte Gruppe von Servern,
so konfiguriert haben und
eine Rolle wäre dann quasi so die
Unterfunktion davon.
Diese Konfiguration wird dann angewandt.
Genau.
Und das Playbook,
wenn man sich dann
so ein größeres Cluster
vorstellt, enthält dann es halt
mehrere Rollen. Also ein Loadbalancer,
ein Webserver, eine Datenbank.
Was der Running Back machen soll, was der Quarterback machen soll,
wie die Defense stehen soll.
Richtig, genau.
Ja, ja.
Okay, also ich glaube dann die grundsätzlichen
haben wir definiert. Haben wir noch was vergessen?
Achso, vielleicht Facts. Was ist ein Fact?
Ja, das ist halt das, was
Ansible irgendwie
rausfindet. Also am Anfang...
Die Variablen schreibt vielleicht? Ja, man macht das
halt so ein Gathering Facts.
Das kann man aber auch abschalten, wenn man es nicht braucht.
Dinge, wo dann halt bestimmte Variablen belegt werden
mit Informationen über das System
auf dem man gerade irgendwie... Kommt natürlich daher,
dass Ansible das erstmal nicht weiß.
so, wo bin ich denn?
Und da kriegt man natürlich dann auch ein schönes Python
Directory zurück, was halt
alles Erdenkliche auf diesem
System herausgefunden hat.
Da kann man auch mal schön reingucken.
Ja, da ist auch viel interessantes Zeug drin.
Genau. Auch noch genau die Sachen vielleicht,
also die ganzen Variablen, die man irgendwie reinpiped
oder die man dann behandelt als Facts oder sowas,
die halt da schon drin sind, da kann man
ja ganz viele Python-Funktionen
auch drauf pipen, die halt relativ nativ
sich anfühlen, wenn man das irgendwie
verarbeiten möchte. Achso, du meinst,
um nochmal andere Dinge, die da jetzt nicht drin waren,
rauszusein.
Man kann in einem Task sagen, Set Fact und dann
halt irgendwas.
Dann kann man dann Pipe, Strip,
String, Station, was auch immer.
Die Playbooks, die sind ja letztlich,
läuft da halt auch ein Ginger2-Support hinter
und das heißt, ich kann alles
letztlich machen, was ich in Ginger2 machen kann
mit den Facts, die
vorher Ansible gesammelt hat und ich
kann die letztlich wie ein Directory
accessen, beziehungsweise ist sie ja eins
und dann kann ich da alles
machen, was
Ginger 2 mir letztlich erlaubt.
Das ist ja echt eine ganze Menge.
Da vielleicht
ein Exkurs. Ginger 2?
Ja, Ginger 2.
Templating Engine.
Letztlich
so wie
alle Templating Engines,
die man so kennt.
Ist auch ähnlich.
Nicht genau so.
Ginger 2 ist wahrscheinlich sogar die bessere
Template Language.
schon ein bisschen. Genau, es gibt auch
Ginger2-Support für Django, wenn man
das dann machen möchte und
bietet eigentlich auch die Möglichkeit,
direkt Python
in das Template zu schreiben oder halt in das
Playbook dann und auch Funktionen zu
definieren, die man dann später haben möchte.
Wäre dann halt am Ende
die Frage, ob man dann nicht lieber ein Modul
schreibt, wo man dann direkt in Python arbeitet.
Ja, okay.
Interessant.
Ich glaube, jetzt haben wir so ein bisschen
definiert.
Ich habe noch so jede Menge Fragen, die ich da irgendwie dazwischen
habe, wenn man irgendwie mit dieser Sache umgeht.
Aber jetzt vielleicht nochmal, warum wir kurz das definieren
wollten, um diese Terraform-Enzibel-Sache
nochmal so ein bisschen zu verstehen.
Was
spricht jetzt zum Beispiel dagegen,
sowas wie dieses lokale
Enzibel zu machen, deiner Meinung nach, wenn man sagt,
okay, man lädt jetzt
einen Localhost einfach und sagt
dem, welche Rollen er hat?
Ja, also wirklich
viel dagegen spricht nicht. Also es ist halt
anders gedacht.
Und
dann bin ich immer doch eher dafür,
die Werkzeuge so zu benutzen,
wie die letztlich gedacht sind. Klar, du würdest
dir halt die SSH-Verbindung dann sparen.
Nee, ich brauche die halt
über Terraform muss ich die SSH-Verbindung bauen.
Genau, aber nicht mehr dann die
auf dem, also wenn du ja
über die Local Connection gehst. Genau, ich mache dann
Fire and Forget, also ich sage dem halt quasi
renn los und dann macht er halt sein Endebekram.
Ich habe da wenig Kontrolle
drüber, ich muss halt dann auf den Servern dann in die Logs gucken
oder was auch immer, um festzustellen, wo sind die denn gerade.
Genau, also
da gibt es ja dann auch nicht mehr diese Rückmeldung
zurück. Brauche ich vielleicht
am Ende auch nicht, wenn ich dann in die Logs gucke.
Ja gut, man muss halt einmal ordentlich IDE backen, damit
er einmal sicherstellen kann, dass ein Server das macht, was er will.
Aber ja.
Also es ist auf jeden Fall
durchaus ein gangbarer Weg.
Ist dann die Frage,
ob man da
ein bisschen so die Idee
hinter Ansible
und ja.
Also ich frage mich halt, was sonst Terraform ist, weil ich
frage mich halt, wie dann halt Terraform sonst aussehen soll,
weil ich weiß ja gar nicht, mit
Ansible anzufangen, welches Server habe ich denn denn jetzt?
Ja, aber ich meine,
gut, vielleicht macht ihr das, aber
ich wundere mich mal, ich verwende gar keinen
Terraform. Ich meine, ich habe
jetzt auch nicht irgendwie
jobmäßig irgendwas, große Cluster zu konfigurieren
und so, wenn ich das hätte, hätte ich das vielleicht
dann doch, aber so für meinen
privaten oder so semi-privaten
Bereich. Jochen hat gerade zugegeben, dass er sich
die einzelnen Klausel einfach zusammen klickt.
Ja, das hat er selbst.
Und ich rufe jemanden an, der macht das dann.
Aber ich kenne,
es sind so wenige, ja, so Privat-
Handverlesene, Server,
so viele habe ich da nicht, dass ich die nicht mehr kennen würde.
Da kenne ich jeden Einzelnen
mit Namen sozusagen.
Und die kann ich dann auch in Ventury reinschreiben.
Ja, aber das ist ja eigentlich auch erst Terraform,
also weil das macht ja genau das, was du da klicken würdest.
Und dann Enzable.
Also nur mit dem Unterschied, dass ich jetzt halt einmal hingehe
und sonst in Terraform beispielsweise
Moment, das wird interessant.
Du machst, du
connectest dich,
wenn du Ansible benutzt, auf
einen User? Nein.
Auf dem Rechner? Nein, Moment.
Ich gehe hin, ich baue eine Kiste,
beispielsweise bei Hether oder bei
Azure oder so, und sage dem
über so ein Cloud-Init-Skript,
bitte installiere Ansible
lokal. Aber dann kannst du
auch alles über das Cloud-Init-Skript machen.
Ja, also mache ich im Prinzip schon.
also, aber ich möchte
halt gerne diese Flexibilität der Rollen haben,
die ich dann über das Terraform-Skript
reingebe, ja, das heißt, ich gebe quasi
eigentlich nur den Pfad zum Playbook mit den Variablen,
das kommt über Terraform, also die
Extravariablen und das Playbook ist ausgeführt werden soll,
kommt rein und ich klone quasi lokal
das Ansible-Server-Repo
und dann lasse ich da lokal
mit Localhost
das Playbook laufen mit den entsprechenden Variablen.
Was aber auch das
Geschwindigkeitsproblem, was Jochen hatte, löst, weil das halt alles
lokal auf der Maschine läuft.
Es kann gut sein, dass das dann schneller ist.
Genau, das läuft halt dann schnell einfach durch und
konfiguriert die Maschinenlokal halt einfach so, wie sie
sein soll.
Was ich dann natürlich machen muss, ist, also was ich
auch mache, ist, ich konfiguriere jetzt meistens
meinen Admin-User mit den entsprechenden Keys und tralala.
Den könnte ich ja dann wieder rausgeben.
Ich brauche halt den Key,
der Zugriff darauf hat. Ich brauche den
Nutzer-Account, der das darf
und ich brauche die IP vom Server. Die kann ich mir
aus den Terraform-Outputs hier wieder einsammeln
und mir dann quasi so ein
Service-Ansible
noch da reinschreiben.
Das sind aber dann trotzdem zwei Repos. Das eine Repo ist das
Terraform-Repo mit diesem Service-Ansible, wo dann quasi
ich mit Updates fahren kann oder sowas.
Oder ich überprüfe bitte den State für alle Web-Applikationen
und upgradee Django auf die neueste Variante
oder so.
Und auf der anderen Seite des Ansibles-Setup
läuft halt über das Ansible-Repo,
wo halt dann die ganzen Standard-Rollen
drin sind.
Ah, okay.
Ja, interessant. Also das ist irgendwie ganz anders,
als ich das mal gesagt habe.
Ja, ne, witzig.
Also ich muss sagen, es funktioniert ganz gut.
Es witzigt sich auch so ein bisschen von hinten, wie ich Brustsatz
habe, ich habe mehrere Blog-Einträge durchgelesen
mit so für und wieder und ich,
das war am Anfang so ein bisschen halt gefummelt, das so hinzubekommen,
dass das so funktioniert, aber
das funktioniert halt gut.
Ja, also
mein einziger Einwand wäre dann
zu sagen, okay, du hast die halt
dann sehr stark verknüpft.
Ja, habe ich das?
Ja, also schon. Also ich meine,
Das will ich ja auch. Also ich will ja quasi schon sagen, was für Rollen das haben soll. Nicht nur die Hardware festlegen.
Weil das ist ja auch genau das. Also ich will ja nicht nur irgendeine Hardware haben und dann sagen, okay, vielleicht das mal, das mal, das mal, das.
Sondern ich habe eigentlich, wenn ich eine Hardware habe, hat die auf jeden Fall schon direkt einen Zweck.
Und das läuft halt dann so, dass ich quasi Terraform-Ordner habe für jedes einzelne Projekt.
Also auch für so bestimmte Rollen ist ein Terraform-Ordner Dango-Server, ein Terraform-Ordner Bucket, ein Terraform-Ordner Datenbank-Server, irgendwie so.
und da werden die Sachen halt dann, kann man die auch so schnell skalieren, weil die Variablen stehen halt dann direkt mit drin und dann sagt man halt, okay, Tatmark-Server ist ein bisschen schneller oder so und hat ein bisschen andere Netzwerkkonfigurationen oder sowas.
Ja, gut.
Okay, ja auch.
Das klingt irgendwie, ja.
Genau, also erinnert mich auch so ein bisschen an Vagrant, was man vor Docker gemacht hat.
Da konnte man ja auch die Ansible-Playbooks reingeben und dann hat der einen dann den Vagrant so hochgezogen, wie man das letztlich im Playbook stand.
Ja, ja, ja.
Also.
Ja, ja, ja.
Ich erinnere mich da auch noch dran, das habe ich 2000, wann war das?
2012, 13
habe ich das mal gemacht. Das war ziemlich schrecklich,
ehrlich gesagt.
Ja, aber da gab es noch kein Docker.
Da gab es noch kein Docker, genau. Deswegen muss man da ein bisschen...
Ja, ja, ja.
Anderer Punkt.
Entschuldigung, ich wollte dich nicht unterbrechen,
aber...
Ich zum Beispiel,
ich mag es auch,
den BN Desktop
per Ansible auszurollen.
Ja, also kann ich
absolut verstehen, nur weil
und ich hatte auch so eine Diskussion online,
für Linux gibt es kein Endpoint-Management.
Und da muss man sich einfach mal überlegen,
ja, was ist denn der Endpunkt?
Also was ist der Unterschied zwischen Server und Laptop bei Linux?
Dass ein X11 läuft oder Valent
und den Rest kann man ja genauso benutzen am Ende.
Also von daher eine wunderschöne Sache,
das mit Ansible zu machen.
Ja, also die Alternative wäre nix gewesen.
Aber dass da in mich nix genervt hat an so ein paar Punkten,
weil dann habe ich dann gesagt, okay, dann mache ich es mit Enzabel, weil
ich möchte auf jeden Fall eine reproduzierbare
Maschine haben, weil mich nervt das jedes Mal
selber rumkonfigurieren zu müssen und so
und das ist halt nicht nur irgendwie dotfiles, sondern
das ist halt noch mehr
und deswegen wollte ich das halt bei Enzabel steuern. Da muss man halt
dann immer fliegen, muss halt immer dann ein Repo
haben, was halt für seinen Desktop ist, muss da halt da immer
dran rumfummeln, wenn man die Konfiguration hat
die updaten, aber dann kann man halt egal wo man ist einfach
seine Sachen reproduzieren
und wenn man auch irgendwie sein
ja seine irgendwie sonstige Sachen
irgendwie in der Cloud hat, dann kann man egal wo man ist einfach mit seinem
System, wie man es gewohnt ist, genauso arbeiten.
Das finde ich irgendwie schon nett.
Ja, aber das gibt es ja auch so die Bewegung,
das dann letztlich wieder über Docker zu machen.
Dann auch zu sagen, okay, wir können ja auch
grafische Anwendungen in Docker laufen lassen.
Ja.
Ja, ja, kann man auch.
Aber Docker ist halt so ein Tischenlayer irgendwie noch.
Das ist so ein bisschen, ich weiß nicht,
ob es ein Personennummer gibt. Also ich meine, die Rechner, die wir nutzen,
sind ja meistens relativ strong, aber
ja.
Ja, es gibt schon irgendwie so ein bisschen
Einsprünge, aber es gibt inzwischen sehr, sehr
häufig, dass man halt auch auf vielen Projektseiten
sieht. Also ich meine gerade, ich kann es auch verstehen, wenn es
halt irgendwas ist, was man einfach
schwer zu installieren ist. Und da gibt es ja durchaus Software.
Also man sagt, jo, okay, nimm doch
hier einfach diesen Docker-Code, dann geht's.
Bevor du jetzt irgendwie
sowas wie zum Beispiel,
es gibt halt manche Software so mit Abhängigkeiten
zu
Qt und so, wo man dann halt erst mal
anderthalb Stunden kompilieren muss.
Ja, also genau, ich glaube, das Kompilieren ist das, was lange dauert.
Und Updates sind halt immer ein bisschen nervig.
Wenn man halt irgendwie so Breaking Changes irgendwo hat, dann muss man alles
wieder umbauen?
Ja, also
früher hat man auch dann
mehr Ansible-Playbooks gesehen,
wenn es dann um schwierige Installationen ging.
Ja, leider
ist es so ein bisschen auf dem
absteigenden Ast.
Was macht man denn jetzt? Nur Docker dann?
Oft findet man halt die Docker-Container
und das hier. Also wenn du das einfach
dem Run sagst, dann läuft der
und dann kannst du
leben.
Ja, das finde ich auch faszinierend, weil
Ich sehe diesen Trend durchaus auch,
aber ich finde ehrlich gesagt,
wie fühlt es sich von der Benutzung her an?
Docker wird
eher immer schlimmer.
Ich habe noch zwischen euch ganz gerne genutzt,
aber ich weiß nicht, irgendwas finde ich nervig.
Das ist immer so gekapselt auch.
Ich habe nicht so den direkten Zugriff.
Es nimmt
einem schon irgendwie Probleme ab, aber
es hat halt auch nicht so ganz
die Flexibilität, wie es Demon & Ansible hat.
also gerade was man bei Docker dann doch irgendwie öfter mal
was einem dann passiert, so zum Beispiel irgendwie so
irgendwie das Filesystem ist halt voll
so, man weiß halt nicht genau warum
und dann guckt man halt und denkt, ach ja deswegen
ach und dann, uh, was liegt denn hier noch alles rum
ich habe jetzt den container
30 mal hier
solche Sachen, oh Docker kommt bloß dauernd vergessen, ups
an der Stelle ist die Abstraktion halt schon sehr leaky
oder man muss halt sich gut mit Docker auskennen
oder was ich dann halt oft sehe
wie Leute dann so, so wirklich
in größeren, großen Firmen, wo dann
Leute da sitzen und
irgendwie, wo dann das halt alles
vereinheitlicht ist, wo alle Entwickler irgendwie
Docker verwenden und dann so, ah ja, okay,
ich muss hier ein neues Paket für das Docker-Image
und dann warten die halt da irgendwie
stoisch eine halbe Stunde, bis das irgendwie alles
kumuliert ist und die Dinger sind halt, die
Images, dann denken sie, hä,
das dauert eine halbe Stunde, bis die Images
da, hä, was macht ihr denn da?
Und dann so, ja, das ist doch normal,
das ist doch immer so, guck mal rein und so,
dann nehmen sie dann halt Alpine
irgendwie
Linux und dann installieren sie
aber NumPy und dann zieht das erstmal
in GCC nach und dann wird erstmal die komplette
Compiler-Toolchain irgendwie
kopiliert und dann
ist kein Wunder, warum das so lange dauert.
Aber es ist halt irgendwie so
und die Images werden riesig.
Dann nehmen sie Alpine, damit die klein werden und dann werden die
irgendwie anderthalb Gigabyte groß.
Und dann denke ich so,
also irgendwie,
ihr haltet das falsch rum.
Ja, genau.
Das ist irgendwie das, ja.
Aber
ich habe das Gefühl, es
hindert die Leute. Also ich denke, das ist
eigentlich ein ziemliches Katastrophenszenario.
Und eigentlich müsste man sagen,
es müsste den Leuten doch irgendwie auffallen,
dass das jetzt alles furchtbar ist, oder?
Aber das ist nicht so. Die Leute
halten das für normal und das ist dann jetzt halt so.
Und dann verbreitet es sich trotzdem. Und das finde ich
immer faszinierend. Sind wir noch bei Docker
oder schon bei JavaScript?
Ja, bei JavaScript.
und irgendwie, ja,
NPM und diesen ganzen, ja, das ist teilweise so ähnlich,
ja.
Es gibt doch jetzt bei LPN ganz viele andere Sachen,
Dino und Bun, oder wie? Ja, aber das ist auch alles
ziemlich furchtbar. Also, ich meine, gut,
vielleicht liegt es irgendwann so,
ja, wird das da auch mal wieder.
Egal, Entschuldigung. Wir wollten nicht über
da machen. Man überlebt sich halt irgendwann in die
Komplexität und dann
macht das auch Spaß und keiner weiß mehr,
wie es geht und dann hat man auch mal so eine
Expertenrolle. Das ist auch schön. Genau, also wenn keiner
mehr weiß, wie es geht, dann ist es ziemlich
an. Job Security
ist auch ganz wichtig.
Ja.
Aber ja.
Und
ich weiß nicht.
So im direkten Vergleich.
Das habe ich früher gemacht.
Zum Beispiel PythonPodcast.de.
Wenn man sich das anguckt, das ist tatsächlich
ein Cookie-Cutter-Template für Django.
Und dann ist da auch
ein Docker-Container oder mehrere Docker-Container,
weil da ist halt auch ein Datenbank und so.
Und es ist halt
und irgendwie Report.
Als ich angefangen habe, Sachen zu lernen,
hat Jochen mir gesagt, das ist so, wie man das macht.
Und dann stand ich erst mal auf dieser komplexen Ziele.
Ich kam ja von Vagrant und da war das
aus, als wäre das Fortschritt.
Also ich musste erst mal ein paar Mal gegenhauen und habe mich jetzt mal gefragt,
was ist das denn jetzt? Wie geht denn das jetzt?
Muss ich mich jetzt eingeben? Muss ich mir irgendwie tausendlange
Kommandozeilen, Listen schreiben?
Und dann überhaupt
die Introspection. Das war schon echt
ein Komplexitätsmonster, muss ich sagen.
Ja, also
es tut mir leid, aber so ist es.
und ja, aber das läuft noch
alles auf Docker und so
und
es ist aber nicht, es ist, also wenn ich
das jetzt vergleiche, ist ja auch der Betrieb davon
mit irgendwie, ich mache jetzt schon seit einiger
Zeit, ich habe es noch nicht geschafft, das eine auf das andere umzuziehen,
also sozusagen die alte Infrastruktur läuft immer noch
und ich habe den direkten Vergleich noch und letztens
hatte ich da das Problem, dass da irgendwas, es ging nicht
mehr und irgendwas war vollgelaufen und ich wusste,
oh mein Gott, ich muss in diese Docker-Container reingucken,
oh je, habe ich eigentlich ein Backup, habe ich wirklich
ein Backup, hoffentlich
mache ich jetzt nichts kaputt,
und ich vergleiche das jetzt so mit dem, was ich jetzt mache und das ist halt
irgendwie die Dinger einfach direkt via Ansible zu installieren und ich habe halt für jeden Service
halt einen eigenen User und der hat halt ein eigenes Virtual-Enterter nochmal drin
und das wird einfach alles so hochgezogen und
hat dann auch ein schreibbares Dateisystem und so. Man kann auch so eine Backup-Rolle installieren,
dann überläuft das vernünftig, jetzt weiß man auch, wo die sind, das ist alles ordentlich.
Ja, aber man kann auch überall reingucken, man kann da einfach als Root mal
so irgendwie über alle drüber gucken
und gucken, was da so los ist. Das ist
deutlich angenehmer und so viel länger
sind die Playbooks nicht als die Docker-Files
mit dem ganzen drumherum Start-Stopp-Zeugs,
das man da sonst so hat.
Ja, vor allem, wenn die einmal gut sind, dann ist das eigentlich
gut. Und es ist halt viel transparenter.
Ja, man muss halt gucken,
welche Vorteile bietet einem
letztlich der Docker-Container und nutze
ich die überhaupt? Oder
manchmal ist es auch ganz schön, einfach
einen richtig großen Server zu haben
und da laufen halt die
und Jochen unterhalten sich über die Programmiersprache Python
vor sich hin, weil dann sagt er, aber auf meiner
Maschine läuft es und jemand klopft ihm auf die Schulter und sagt,
okay, dann shippen wir eben deine Maschine.
Das ist natürlich so, ja, wenn du sonst einfach
nicht deployed kriegst, außer du shippst, dass das der
Entwickler, dann ist Docker möglicherweise sehr gut
und wenn du dann viele von solchen Sachen auf einer
Maschine laufen lassen willst, dann führt vielleicht um
Docker auch kein Weg drumherum.
Aber das ist ja letztlich auch der Kritikpunkt
an Python, dass man quasi immer die
Entwicklermaschine shippen muss, damit sie überhaupt läuft.
Ja, das ist natürlich auch bei
so ein Problem.
Ich finde Poetry löst das,
wenn Poetry läuft.
Ja, Poetry läuft so.
Das war meine Erfahrung. Das läuft so drei Monate,
vier Monate und auf einmal
ist irgendwas irgendwo kaputt und dann
Cache reparieren, neue Versionen
installieren, pre.
Fällt jetzt alles auseinander, genau.
Ich stelle momentan auch
Sachen, wenn ich alte Projekte habe und ich sehe,
dafür bin ich noch Poetry, ich stelle es mal auf
PipTools. Aber PipTools ist furchtbar.
Aber PIP wird auch
verfürchtert von PIP-Tools, weil letztlich ist es nur PIP.
Ja, genau.
Und wenn jemand PIP brechen sollte, dann
fällt auf und dann machen andere Ärger.
Es ist so viel Ärger, dass das dann wieder funktioniert schnell.
Also genau,
es ist letztlich nur PIP und
man kann sich da ja Tools drumherum schreiben, die das halt
angenehm zu benutzen machen.
Ja, wie PUT.
Oh, ich habe jetzt,
das habe ich dann nochmal versucht, weil du meintest,
es kann auch PIP-Tools können,
also nicht so richtig, nein.
Ja, genau.
Und ich brauche PyProject Hummel. Also ich finde
die super. Das ist eine gute Idee.
Ja.
Weil diese ganzen
TXT-Files mit irgendwie...
Ich will die ganze Konfiguration
in PyProject Hummel haben. Ich will die Pakete
da drin haben.
Was man auch machen könnte,
man kann ja einfach einen Tummel-Parser nehmen
und dann die Dinger automatisch generieren
aus seiner Puppe.
Das ist auch wieder sehr eklig.
Ja, gut.
Ja, okay.
Ich stelle das jetzt alles um und ich finde auch vom Deployment-Aspekt her ist PipTools deutlich angenehmer als Poetry, weil Poetry ist auch beim Deployment ganz schön hakelig.
Naja, aber das habe ich jetzt gelöst.
Wie installierst du denn Poetry?
Also ich installiere Python, dann PipX, dann Poetry, das funktioniert gut.
Ach, du installierst dann Poetry per PipX?
Genau.
Das ist aber nicht die empfohlene Art.
Es ist furchtbar, die empfohlene Art ist furchtbar, das zu tun.
Ja, das ist nämlich ein Shell-Skript runterladen und ausführen.
Ja, genau, das ist komisch und deswegen per PipX,
aber das funktioniert dann super und dann habe ich
dann per PipX kann ich dann Potree benutzen, um
halt meine Environments installieren und
ein Konfig-Setting für Potree
Aber das ist schon ein ganz schöner
auch irgendwie... Es ist ein Playbook.
Ja, ja, das ist
aber ja, das funktioniert gut.
Und wie kommst du an den, erzeugst du deine
Virtual-Infs auch über Potree? Ja.
Wie kommst du an deinen Interpreter,
wenn du jetzt mal sowas wie manage migrate
ausführen willst oder so im General Context?
Du kannst den ja einfach dann
lokal zum Beispiel nehmen.
Ja, aber Poetry macht halt so
komische Verzeichnisse mit einem Hash drin,
die irgendwie immer anders sind. Das ist egal.
Das ist nicht immer anders. Das ist reproduzierbar.
Ich habe mir eine Foto geschrieben, die mit den Namen von Event.
Ja, das habe ich nämlich auch gemacht. Genau.
Ich sehe dann ein Muster.
Genau das habe ich nämlich auch gemacht.
Da gucke ich dann jetzt immer so drauf und denke mir so,
warum nehme ich da an der Stelle nicht einfach ein Virtual End
und dann weiß ich vorher, wo der Pfad ist.
Ja, was halt geht ist, du kannst halt die Virtual Env in Project
Path dann machen, das mache ich bei Deployments dann,
weil dann ist das Problem erledigt.
Weil dann hast du es halt einfach lokal drin liegen.
Und dann kannst du den Pfad, kannst du ja auch angeben,
dann macht der halt nicht irgendwo unter Envs mit
Hash, sondern dann setzt das rein und das würde ich
empfehlen. Aber das ist auch genau der Punkt,
also benutzen wir Docker, weil wir
eben daherkamen, auf Produktionsmaschinen?
Ich würde fast sagen nein, weil das hat auch zu viel
Hardwarefrist und man möchte ja relativ viel
Kraft und auch Netzwerkprobleme hat man
auch, wenn man das mit Docker macht, das ist auch sehr nervig.
und deswegen würde ich die Sachen in Produktion
direkt auf die Maschinen deployen, aber
in Dev würde ich sagen,
will man vielleicht Docker-Container benutzen zum
entwickeln, weil man halt oft Entwickler hat, die auf
unterschiedlichen Maschinen arbeiten, um die Konsistenz
zu sichern. Also das wäre der einfachste Grund, weil
die Leute halt keine Lust haben, irgendwie
gleiche Sachen zu benutzen.
Es gibt ja auch Entwickler, die Windows benutzen.
Da kommt man dann mit Docker schon mal
ein bisschen weiter.
Ich musste das auch auf der Arbeit viel und da ist halt,
habe ich halt auch entforst, dass wir
Docker-Container nehmen, weil halt viele Sachen dann auf Linux
nur kompilieren richtig und
auf Windows, dass er mal von hinten durch die Brust ins Auge ist
oder irgendwelche C-Libraries nachinstallieren muss,
was man auch manchmal meistens hinkriegt,
bis auf ein paar Ausnahmen, aber das ist manchmal sehr,
sehr, sehr nervig und wenn man das mit Leuten macht, die sich
da nicht gut mit auskennen, dann hat man immer
Gegenüberwand und deswegen entwickeln im Docker
befreit einen einfach von diesem Schmerz,
weil das ist relativ klar.
Wobei ich ja, also wie gesagt,
mit diesem Windows-Subsystem für Linux
und dann einfach da ein Debian draufhaben oder so,
dann kommen wir ja auch schon relativ weit.
Nur was ich jetzt letztens immer wieder
doch häufiger gesehen habe, ist, dass halt, wenn
dann Leute dann eine IDE verwenden, die dann wieder
unter Windows läuft, dass dann irgendwie
ein Fallsystem manchmal Probleme gibt oder jedenfalls
Leute machen so, hä, und dann kommen hier komische Fehler.
Oh, irgendwie ist das, was da in dem Linux-Fallsystem
ist, nicht das gleiche.
Genau, und die Pfade werden halt gemountet,
also zum Beispiel in Windows-Gipfelstatt so ein
fag.wc, Doppelpunkt, Backslash, bla bla bla.
Das wird halt unter Mount C irgendwie abgelegt.
Und dann muss man halt die Pfade tatsächlich gucken. Das muss man eigentlich
über ein Weibchenvergabe machen.
Die werden zum Beispiel von VS Code
nicht immer direkt unterstützt, sondern nur in bestimmten
Fällen und dann muss man eigentlich relativ laden
und muss halt dann zum Beispiel wie jetzt Code
dann das Verzeichnis machen und so.
WSL hat noch ein paar andere Probleme Zum Beispiel ist es dann oft wenn man Windows hat weil dann irgendwelche Leute mit Active Directory Zugriff das einfach sperren k hat man zwei WSL drauf aber ohne Update also das kann man
halt nicht richtig benutzen und die Frage ist,
warum man Windows benutzen will, wenn man WSL benutzt, weil
also aus der, ich sag mal,
Maschinendeployment-Methode. Also der
Grund, warum ich das in letzter Zeit immer gesehen
habe, ist halt, weil Leute sagen, ja, ja, weil halt
der Rest der Firma quasi
in der Windows-Welt hängt und man mit dem kooperieren
können möchte. Genau, aber so mache ich das bei mir
privat auch, wenn ich Windows benutze und dann mache ich das auch mit
WSL2 oder so, das ist super, aber
jetzt in der Firma beispielsweise, wenn ich jetzt
ein Windows-Management-System habe oder
ein Team habe, was halt über Active Directory
die Zugriffe kontrolliert und ausrollen will,
dann macht es relativ wenig Sinn, wenn ich den Leuten dann
WSL freischalte, weil dann
die nämlich wieder rauskommen und das will ich ja eigentlich
gar nicht.
Das ist so ein bisschen blöd.
Da gibt es noch nicht so die gute Lösung für oder wenig
gut konfigurierte Teams
würde ich jetzt sagen oder ist das gar nicht so einfach,
das ordentlich zu konfigurieren?
dass das halt genau diese ganzen
Scherze dann nicht ermöglicht oder halt
ein bisschen besser macht
Ja, dann wäre die Frage, vielleicht ist es dann besser
wenn die nicht auf der lokalen Maschine
arbeiten, sondern
mit einer IDE dann
irgendwo hinkonnekten und darauf arbeiten
Ja
Also letztlich
Und dann fällt das WLAN aus
Da kann man nichts mehr machen
Da weiß man gar nicht mehr, wo die Dokumentation ist
Irgendwo muss man halt schärmen
Das fand ich sehr witzig
habe ich jetzt letztens einen Podcast
gehört mit der
mit einer der
Engineering-Chefin und ich glaube es ist nicht CTO, sondern
irgendwas drunter, aber auch Chefin von
500 Entwicklern bei GitHub,
die meinte, GitHub
ist intern
auf Codespaces umgezogen.
Also quasi komplett
in der Cloud.
Also wie ist Code und Codespace?
Also sozusagen deren
komplette Entwicklungsumgebung sind halt immer
auf irgendeiner Maschine
bei Azure.
Machen sie halt deswegen, weil sie bei Azure nicht zahlen müssen,
weil sie gehört zu Microsoft.
Komisch, komisch, komisch.
Ja, ist natürlich praktisch.
Es könnte natürlich
ihren Move dahin
ein wenig irgendwie
genatscht haben, sozusagen,
dass das passiert.
Kurze Warnung an der Stelle.
Die Azure Linux Web Apps
laufen auf einem Windows.
Unten runter,
das ist so ein bisschen blöd. Das ist mir noch ein paar Mal auch gefallen,
als ich irgendwelche Tracebacks bekommen habe, wo ich dachte, also ups.
Ja,
ich weiß auch nicht, ob das so, also ich
wäre da nicht so early
dabei, das zu adopten, quasi so rein
in der Cloud zu kommen, aber ich kann es in gewisser
Weise verstehen, weil man löst damit halt auch
dieses Problem, was Docker ansonsten
vielleicht dann lösen würde und halt
unterschmerzen, weil ehrlich gesagt,
also gut, ich kann jetzt nur von Mac sprechen,
kann sein, dass es unter Windows besser ist, aber
auf Mac ist Docker Desktop
halt ein unfassbarer
Schrott.
echt. Also wie oft mir das
gestorben ist und zwar auf eine Art, dass ich das nicht mehr
reparieren konnte.
Ja, da Updates gehen nicht oder so.
Ja, Updates gehen nicht.
Ich hatte es mehrfach, dass mir doch jemand gesagt hat,
das Spinery ist kaputt.
So nach einem Update-Versuch.
Kaputt.
Ganz hart einfach das wegschmeißen und dann
nochmal wegschmeißen, aus der Registry,
aus der Windows-Registry rauslöschen, also quasi die ganzen
Pfeils irgendwo aufsammeln und rausfinden, wo die
sind, wegschmeißen, neu machen, damit
es funktioniert. Furchtbar.
und langsam und komisch
und ich verstehe nicht so richtig,
warum dieses Ding so...
Und wenn man davon wegkommt,
dadurch, dass man das in der Cloud macht, ja, das könnte man
mir vorstellen, dass es für viele Leute vielleicht durchaus...
Ja, okay. Ja, wahrscheinlich.
Gute Idee.
Wir entwickeln die Leute dazu, wie es gut ist.
Ja, also PyCharm bietet das jetzt auch,
dass man in der Cloud arbeiten kann.
In derselben? Oder ist das dann um zwei unterschiedliche?
Also muss man sich entscheiden? Oder kann man die
parallel benutzen?
Ich glaube, das sind unterschiedliche.
bietet nämlich da glaube ich, also
es gibt dann wieder so ein Angebot,
dass man da so
Dev Spaces zusammen hat.
Bist du PyCharm oder VS Code?
PyCharm.
Also PyCharm für Python
und VS Code ist eigentlich ein schöner
Texteditor, also wenn man das
Microsoft Zeug wegnimmt und VS Codium nimmt,
dann ist das ein schöner Editor und
dann kann man halt
viele Sachen damit machen.
Ich mag es sehr gerne.
Ja, aber letztlich so dieses
vollintegrierte IDE, da ist man ja bei PyCharm einfach
komplett
ohne irgendwas konfigurieren zu müssen.
Man macht es an und dann ist man drin.
Würde ich auch sagen, ja, vielleicht mit Konfiguration,
aber wir haben ja mit diesem Battle
noch nichts gefunden, was ich nicht andersrum so oder so lösen könnte.
Das ist ein Muster.
Ja, also
Man kann das durchaus, also ich habe beides jetzt auch schon
ausgebildet, man kann durchaus beides verwenden, denke ich.
Aber ich finde auch PyCharm ist halt, wenn man Python
macht, ist schon, es hat auch noch so ein paar
nette Funktionen. Also zum Beispiel ein Ding, das mich mir
vielleicht habe ich was,
ob du das mit VSCode hingekriegt hast,
weil ich habe es bisher noch nicht hingekriegt,
bei auf PyTest Fixtures klicken
und dann im Code der Fixture landen.
Das macht PyCharm einfach so.
Auf die Fixtures?
Ja, weil das tatsächlich ein Use Case, den ich häufig
habe, wo ich dann bei VSCode dann so klicke und denke,
äh, klingt das denn jetzt nicht richtig?
Das funktioniert irgendwie nicht.
Ach nee, wie ist gut, kann das nicht.
Das fand ich auch immer sehr angenehm bei PyCharm.
Dass man halt so schnell springen kann.
Ja gut, das Ganze, also wie es so
entwickelt ist, muss ich gerade überlegen.
Muss ich mal ausprobieren. Also vielleicht gibt es irgendein Plugin,
das das kann, aber so einfach so
und mit dem Microsoft-Language-Server und so, das geht nicht.
Aber ich finde, die entwickeln relativ schnell.
Es gab auch einen Microsoft-Standard auf der Europe-Python,
wo die meinten so, oh ja, voll gut, und sagt mal, was uns noch fehlt.
Wir bauen das halt einfach so einfach ein.
Ja, ja, da ist viel Druck hintergrat.
Ja, ja.
Zum Beispiel auch Azure war halt irgendwie erst auf Python 3.8 noch, da habe ich mir auch gedacht, hey Leute, geht doch gar nicht.
Aber da arbeiten sie wohl dran, da ist wohl...
Aber Editor Wars.
Ja, wir haben es eigentlich...
Also Wim ist eigentlich auch ganz gut.
Ja, genau.
Gut, dass hier niemand E-Mails hat.
Hallo, Johann.
Ja, ja, ja.
Ja, oh, das ist auch ganz...
Da muss man ein bisschen Zeit mitbringen, aber vielleicht...
Ich hatte dann so ein nostalgisches
Gefühl und dann musste ich das anhören.
Lex Friedman Podcast.
Eine der letzten
Episoden ist mit
John Carmack.
Der John Carmack, der von
Quake.
Ja, genau.
Es ist fast
fünfeinhalb Stunden lang, aber
für die jüngere Generation.
Ein Docker-Bild.
Genau.
Das war sehr kurzweilig.
Für der SecCode 1 brauche ich immer die Konsole auf Tilde.
Ah, ja, ja.
Das war mein Bein.
Ja, und das war ganz interessant,
weil da beteiligte sich
sich an diesem Editor Wars ein bisschen
und der
hat dann auch irgendwann mal versucht, Wim zu verwenden.
Also ich meine, eine Woche angeschlossen
versucht er es zu lernen und dann rauszukriegen,
warum Leute das gut finden, aber es hat
ihn nicht überzeugen können. Er ist
auch so eher auf der IDE-Seite und
viele Debugger verwenden.
Und ja,
er macht das nicht so extrem wie andere. Andere machen
sowas wie eine uralte,
nicht wie das Code, sondern tatsächlich
Visual Studio-Version verwenden.
So Visual Studio 6 oder sowas,
was dann halt auf den Rechnern damals gerade so ging.
und dann auf den heutigen Rechnern ist es halt einfach
sackschnell und alles ist instant
sofort
da und ja,
dann schreibt er halt meistens irgendwie
C-artiges C++ oder sowas
und macht halt viel im Debugger.
Aber ich fand es interessant, also einfach
mal so zu hören, wie er da so
Sachen macht und so.
Das ist natürlich ein Guru, ne?
Ja, tatsächlich.
Damals
habe ich so ein bisschen,
ich meine, ich habe es nie gespielt, aber ich habe ein bisschen geguckt,
und was sie so im Grafikbereich machen.
Er hat es nie gespielt.
Ich habe es vielleicht mal gespielt, aber ich habe nie
Ehrgeiz entwickelt oder mich da lange
miteinander...
Kurze Anekdote, ich war damals
Clan-Based in der Liga und da waren wir
relativ weit oben, also ich glaube European Top
3. Wow, okay.
Das war ganz gut.
Ja, gut, 2 TTF.
Ja, ja, dann TTF hieß damals noch was anderes.
Ja, und
genau, also
aber was da so im Grafikbereich zum Beispiel
über Quaken oder so passiert das. Das war gerade zu der Zeit,
wo ich da auch irgendwie
so mit Informatik und Grafik da
das war, da waren
schon einige abgefahrene Sachen dabei.
Wow, krass, das ist ja so irgendwie
Spieleentwickler, die machen da irgendwie so ein bisschen
das war schon so echt
okay, das sind, die
implementieren da wirklich
so ganz, ganz aktuelle
Forschungsgeschichten direkt
und machen das halt besser als alle anderen
und so. Wahnsinn.
Insofern, ja, also
und hat mich schon interessiert, wie der dann so arbeitet und so.
Ehrlich gesagt, was ich so ein bisschen frustrierend fand,
ist, dass eines der Geheimnisse hinter seiner Produktivität wohl einfach ist,
wahnsinnig viel arbeiten.
Verdammt.
Hätte mir eine andere Antwort gewünscht, eine andere Lösung für dieses Problem.
Ich wäre gerne auch sehr produktiv, aber das mit dem Arbeiten, das gefällt mir nicht.
Das muss irgendwie anders auch gehen.
Ja, finde ich auch dafür.
Ja, aber er meinte so, ja, das ist halt eines seiner,
der hat einfach wahnsinnig viel gearbeitet.
Es gibt auch Leute, die können einfach schnell ertippen.
Die haben dann sowas wie 500 oder 600 Anschläge.
die Mutti, wie war das?
Meistens ist es ja nicht, wie schnell ich den Code
in die Datei bekomme, sondern
wie schnell ich darüber nachdenke.
Ja, genau.
Oder im Machine Interface.
Er redet dann sogar locker flockig.
Er hat ja immer Stress im Internet,
wenn dann Leute meinen, naja, bei mehr als 8 Stunden
dann ist man ja nicht mehr so produktiv.
Ja, das ist schon so. Man ist dann nach 8 Stunden nicht mehr so produktiv.
Aber man ist halt noch so ein bisschen produktiv.
Also nicht mehr so produktiv wie in den ersten 8 Stunden,
aber man kann ja noch ein paar Stunden weiterarbeiten
und ist dann halt nicht mehr so produktiv.
aber das ist ja dann immer noch mehr als voll.
Ja, das ist richtig.
Wenn es nicht am nächsten Tag kann,
bei mir ist das so, am nächsten Tag
reduziert sich dann meine Produktivität auch deutlich.
Bei mir ist das anders.
Er meint auch, er ist ein bisschen neidisch auf Leute, die dann halt
nur vier Stunden schlafen müssen und am nächsten Tag wieder topfit sind
und das lange durchhalten können und das kann er auch nicht,
sondern nach zwölf Stunden Programmieren ist halt bei ihm auch
irgendwie Ende, aber das kann er
tatsächlich sustainable durchhalten.
Er meint so, zwölf Stunden am Tag programmieren kann ich
sustainable machen, habe ich seit ein paar
Jahrzehnten gemacht, das geht.
Ich krieg dann auch keinen Burnout oder so
Das geht einfach immer so weiter
Okay
Das ist mir ein bisschen zu hart, ehrlich gesagt
Also schon nachvollziehbar, wenn man so richtig
Bock hat, dann hört man auch nicht mehr auf
Ja, aber das kann tatsächlich länger als 2-3 Monate
durchziehen, denn irgendwann
brauchst du halt wieder ein bisschen Luft
und
Ja
Seine Einstellung war dazu
Diese ganzen Quatsch brauch ich nicht, ich brauch nur
Diet Coke und Pizza und dann
Das Sozialleben leidet dann zwar,
aber wenn man sich
so richtig dann zurückzieht und dann...
Die artige Vampirblässe.
Erinnert mich so ein bisschen an die
Anfangszeiten, wo ich dann programmiert habe
und herausgefunden habe, wie alles funktioniert, auch mit Django.
Und
ja, da habe ich eigentlich
jede freie Minute
an Django geschrieben und das
gemacht. Das waren coole Zeiten,
aber mittlerweile geht das auch nicht mehr.
Long Time No See Galaxy Far,
Far Away.
Ja.
Aber ich frage mich, ob das bei, also das ist auch etwas,
was ich von vielen Leuten höre,
dass sie halt eine Phase hatten, wo sie das sehr intensiv,
also ich habe auch eine Phase,
so phasenweise irgendwie Dinge sehr
intensiv gemacht und ich weiß nicht, ob vielleicht das
notwendig ist.
Bei T's Ende oder sowas.
Auch danach.
Bis wann geht das?
Das ist so eine Feedback-Loop. Je länger du das machst,
desto länger machst du das, desto länger machst du das.
Und wenn du da aus dieser Loop nicht rauskommst,
dann,
Wo ist das Limit?
Ja, keine Ahnung.
Ich warte noch, ob das weitergeht. Ich hoffe mal, irgendjemand kommt da mal
und sagt so, ich mache das immer so zwei Stunden am Tag und ist
trotzdem irgendwie sehr produktiv dabei geworden und
kriegt irgendwie Dinge hin. Das wäre nett, weil
das wäre, ich wünsche mir das
irgendwann mal so.
Am Anfang auch, also in Python zu lernen, auch 70 Stunden
investiert war. Ja, ja, eben.
Ich höre das von vielen. Ja, also diese Rechnung
ist halt tatsächlich irgendwie, wenn man
betonen wir es mal so, schaffen maximal
Produktivität in der Sendung, wenn man da ist.
und wenn man jetzt 5 Stunden die Woche was macht oder 70 Stunden die Woche und dann macht man das 2 Jahre lang und man ist genauso gut,
dann ist derjenige im Verhältnis zu demjenigen, der das 5 Stunden die Woche macht, einfach um 28 Jahre weiter.
Ja, ich glaube, man kann es nicht so naiv rechnen.
Ja, natürlich, aber der Punkt ist ja, glaube ich, relativ klar.
Also man kann das im Leben nicht aufholen, wenn man das versucht, so nebenbei.
Ja, also der eine Effekt ist halt, dass man natürlich irgendwie nicht die ganze Zeit so gut dazulernen kann, wenn man das so lange macht, sondern dann halt irgendwann weniger lernt und auch nicht so produktiv ist. Auf der anderen Seite ist es so, wenn man sehr langsam lernt, dann ist zwar die Zeit, die man investiert, besser investiert, aber das Problem ist, man vergisst dann ja auch wieder Sachen.
Ja, wir hatten uns schon mal dagegen drum gestritten, um so eine Sache, die ich persönlich sehr effektiv finde, und zwar ist das, wenn irgendwas nicht funktioniert, da so lange gegenteil, bis es kaputt geht.
Ja, genau.
Also lieber weggehen und unter der Dusche fährt man dann ein,
was natürlich auch stimmt bei bestimmten Sachen,
aber ich finde halt auch durch dieses Gegenhauen von allen
Seiten und das irgendwann kaputt machen, lernt man
halt intensiver und man merkt
sich die Sachen mehr, weil man so lange
gegengehauen hat, bis es kaputt gegangen ist, dass man gemerkt hat,
wo man halt gegenhauen kann, es passiert nichts
und wo man halt vielleicht doch was umfällt, dass man
beim nächsten Mal auf jeden Fall schneller dahin kommt, wo man
gegenhauen muss zum Beispiel. Und wenn man
dann halt nur die Einfalllösung hat,
dann hat man diese ganzen Schläge von der Seite oder sowas verpasst.
Also ich fand das schon immer gut.
Ja, kann sein. Vielleicht sind auch unterschiedliche Leute einfach unterschiedlich.
Oder unterschiedliche Themen oder sowas, wo das halt hilft oder nicht hilft.
Ich weiß nicht.
So ein bisschen Guru-Meditation.
Ja, ja.
Ja, ich habe auch das Gefühl,
dass ich das früher tatsächlich nicht konnte,
irgendwie mehrere Projekte gleichzeitig.
Das mache ich jetzt halt gern.
Wenn es irgendwo nicht weitergeht, dann mache ich halt was anderes.
Und dann bis da nichts mehr weitergeht
und dann wieder was anderes.
Ich habe das Gefühl, das geht jetzt eigentlich ganz gut.
Und früher hätte ich das überhaupt nicht machen können.
Früher hätte mich das total rausgebracht.
Also, ich weiß auch nicht.
Ja, vielleicht ändere ich halt über die Zeit auch.
Ich weiß es eigentlich keine Ahnung.
Ja, seltsam. Ja, irgendwie
der heilige Gral an der Stelle noch nicht gefunden.
Schade, schade.
Wir sind übrigens in der Ensebel-Folge.
Ja, genau, genau, Ensebel.
Ja.
Also, ich habe hier noch so ein paar Sachen gestehen und zwar
also einmal, was macht man mit den Outputs, wo bekommt man die her,
wie sammelt man die ein, das ist so ein bisschen technisch schlecht zu erklären.
Testen würde ich gerne nochmal drüber sprechen.
Wie geht das, macht man das, braucht man das?
Ja, vielleicht die ganzen Commandos, Bildschirms, was gibt es denn überhaupt?
Was kann man denn damit machen, dass man so ein bisschen
mal vielleicht weiß, was ist denn schon drin, wofür muss man denn
so Community-Module nehmen oder so?
Und
wie machen wir das mit so Secrets oder so?
Wie startet man die, kann man die auch
irgendwie committen, macht man das Nutzerskontroll?
Irgendwie so. Vielleicht nochmal so als
kleine Mini-Struktur
vorweg für den nächsten Teil,
der nächsten Chapter-Mark.
Hint, hint.
Genau, wo sollen wir einsteigen?
Fangen wir oben an.
Also vielleicht nochmal mit dem Output.
Man hat jetzt Zeugs
und man braucht den Output davon, weil man irgendwie
ja, man hat jetzt keine Ahnung, seine
Datenbank exposed und
wusste vorne nicht, welche Server-IP gab's
denn da und die muss dann der Server
drücken oder so. Genau, da kann
ich dann in der Task selbst
eine Variable registrieren mit dem Output
und die kann ich dann halt über das
ganze Play letztlich
benutzen.
Okay, ansonsten muss man die halt irgendwo
hinschicken. Man kann die natürlich
dann auch eine Datei schreiben?
Ja, die Frage ist genau das. Man muss die vielleicht auf der
Control-Node irgendwo ablegen, weil vielleicht braucht man
die beim nächsten Run
beispielsweise zu
ähm, wie klingt das?
Also man möchte jetzt sowas machen wie
Updates. Und man hat
jetzt nicht das Denux, dass man einfach sagen kann, okay,
ich reiße den jetzt ab und baue den mit der Neuesten Version neu auf,
sondern man möchte vielleicht den
updaten. Und das Problem ist ja, wenn man irgendwie was
so ein Staging-System vielleicht daneben
haben will, um zu gucken, ob das läuft, wenn man einen Test fahren muss,
wenn das eine kritische Infrastruktur ist, dann muss man
vielleicht auf der alten Version aufbauen
und dann updaten.
Weil sonst das
nicht dasselbe ist wie das Produktionssystem,
was man ja nur updaten muss.
Du meinst, du willst das Update testen?
Genau.
Also da würde ich letztlich dann sagen,
okay, ich habe dann mein Inventory
und dann habe ich da definiert, welche Server
da in der Staging-Umgebung
sind und dann lasse ich
das Playbook...
Aber du musst ja erst auf die historische Version laufen
und dann das Update fahren.
Und dafür muss ich mir wahrscheinlich
die letzte
Version irgendwo merken oder sowas.
Ja, das ist natürlich
auch nochmal so die
Geschichte deklarativ.
Wenn ich jetzt sage, ganz einfach
im Package Manager, yum oder apt
und da kann ich dann halt sagen,
welchen State soll das Paket haben.
Nein, beispielsweise ich habe
eine Software, die ich selber geschrieben habe, dann muss ich
mir die Version zum Beispiel merken, weil jetzt nicht über App kommt,
zum Beispiel über den GitHub-Revo oder den GitHub-Tag oder sowas.
Ja, da kann ich natürlich dann sagen,
okay, welches Tag möchte ich denn überhaupt auschecken?
Ja. Oder möchte ich einfach die Latest
auschecken? Dann habe ich halt immer die Latest, egal
welche. Genau, aber wenn ich jetzt genau dieses Update-Fall
habe, dann muss ich ja mir merken, welche Version
in Produktion läuft, beispielsweise.
Damit ich
erstmal das auschecken kann, um dann das Update auf die Latest
zu fahren, um dann sicherzustellen,
dass ich das testen kann, um dann die Latest auf
Produktion auszurollen. Dann muss ich mir wieder merken,
was war denn jetzt Latest, was läuft denn jetzt da? Und das muss ich irgendwo
hinschreiben.
und dafür brauche ich irgendwie so eine...
Also das klingt mir ehrlich gesagt so ein bisschen kompliziert.
Also ich weiß nicht, ob es das Problem
löst, aber willst du
wirklich deine Ansible-Geschichten testen?
Weil ich würde jetzt sagen, es geht nicht so gut.
Man kann das natürlich machen, aber ich weiß nicht,
ist das eine schlaue Idee? Also wäre es nicht besser?
Also ich würde eher dazu tendieren, die ganzen
Tests in die Applikationen zu verlagern und zu sagen,
wenn die Tests in meiner Applikation grün sind,
dann gehe ich davon aus, dass die funktioniert.
Und
ob das mit der neuen Version funktioniert oder nicht,
das kann ich auch lokal testen.
Da wäre letztlich so die Frage, wie funktioniert mein Update-Mechanismus?
Ja, also warum willst du das auf Produktion testen und nicht lokal?
Ja, weil dich ja vielleicht die Infrastruktur kaputt geht beim Bauen oder sowas.
Wenn ich Änderungen an der Infrastruktur habe, keine Ahnung, es kommt ein neues Netzwerk dazu oder so,
dann hilft es mir jetzt nicht, wenn die Anwendung selber irgendwie grün ist und läuft,
wenn da irgendwie bei der Netzwerkkonfiguration irgendwas kaputt geht.
Also als quasi Integrationstest?
Ungefähr, ja.
und das kann ja sein, dass beim Staging-System, wenn ich das einfach vom Scratch baue, dann funktioniert diese Netzwerkkonfiguration,
aber beim Update, weil da irgendwelche Versionen inkompatibel sind, muss ich irgendwie eine Migrationsfahrt wählen, damit das funktioniert.
Damit ich halt von der alten auf die neue Infrastruktur umwechseln kann.
Und deswegen muss ich ja irgendwie wissen, auf welche alten Variante ich das bauen muss oder so.
Ja gut, das wäre dann so das Thema, das hole ich mir dann aus den Facts.
Ja, aber genau, diese Facts muss ich ja irgendwie dann zwischenspeichern, weil das ist ja ein Alter-Fact gewesen.
Das ist ja automatisch.
Genau, also bevor irgendwas gemacht wird, werden ja die Facts geholt und anhand der Facts kann ich ja letztlich dann auch wieder entscheiden, was ich mache.
Okay, das heißt, du musst dann tatsächlich sehen, okay, dein Repo ist ausgecheckt auf Tag und dann nicht auf Main oder Master oder Trunk oder was oder auf Production, wie auch immer man den Branch jetzt nennen will, in der jeweiligen Version.
Genau, also das ist vielleicht auch so eine andere Denkweise.
durch dieses
Deklarative, also dass man halt
nur sagen möchte, ich möchte immer die neueste
Version haben oder ich möchte immer diese
Version haben, dann wäre das
letztlich schon im Play oder im Playbook
definiert.
Und dann würde ich halt
ein Playbook ändern.
Das ist genau was, was wir am Anfang hatten. Du sagst halt,
wenn ich jetzt Latest eingebe, dann ist Latest
in zwei Monaten nicht mehr Latest.
Genau, also wenn ich dann über das Playbook nochmal
laufen lasse, dann guckt er, gibt es was Neues?
Okay, ich soll Latest nehmen, also update ich die Version.
Und ob dann was kaputt geht, ist dem Ansible erstmal egal.
Genau, und das ist das, was ich meine.
Dafür müsste man sich diese Facts, was war denn jetzt Latest, irgendwie rausschreiben, also diesen State.
Muss man sich irgendwie merken, um den Reproduzierwert zu haben.
Also nach dem Motto, baue mir jetzt das Latest von vor zwei Monaten und dann check, ob das Update funktioniert, was ich mir überlegt habe.
Ja, aber das klingt mir doch sehr stark.
Ich verstehe,
wofür du das machen willst.
Aber ich
habe auch schon gehört, dass Leute eben,
das ist ja alles irgendwie auch
Infrastructure as a Code
Infrastructure as a Code
Geschichte, dass man halt auch
diese komplette Infrastruktur irgendwie testbar machen
können will.
Aber ich weiß nicht, will man das wirklich?
Am Ende ist es halt auch so,
dann müsste ich halt
immer meine Version pinnen. Vielleicht ist das auch
eine gute Idee zu sagen. Ich pinne sowieso
immer und nehme Latest nicht.
Dann würde ich halt dann
mein Ansible
Script oder mein Ansible
Playbook bearbeiten. Dann wüsste ich das
und dann würde ich halt
wahrscheinlich ist ja im Git eingecheckt und dann
sagen, okay, neuer Commit und dann das testen.
Aber also
so wie ich dich verstanden habe, ist es so,
du möchtest im Grunde sagen können,
also auf meinem Produktionssystem ist
jetzt gerade, keine Ahnung, Version
so und so viel von meinem Projekt installiert.
und ich möchte jetzt auf meinem Staging-System
testen können, oder das muss ja gar nicht das Staging-System
sein, sondern ich ziehe automatisch
mit Terraform irgendwie mir Infrastruktur hoch
und zwar in Versionen, so wie ich sie auf dem
Produktionssystem habe und dann will ich testen,
dass wenn ich das jetzt update, dass dann
alles noch funktioniert. Das ist aber im Grunde
ein Test
deines Systems. Genau, das würde
man ja dann einfach machen und gucken, ob es geht.
Das Problem ist halt,
wenn du das Update auf dem Produktionssystem
fährst und es funktioniert nicht, dann ist es halt blöd.
Genau, deswegen Staging.
Ja, oder
Genau, und die muss halt dann so gerade
Aber du musst halt das Update reproduzieren, du kannst halt nicht einfach
dann vom Sketch eine neue Version bauen, weil dann
wirst du das Produktionssystem abreißen und neu bauen
Aber da würde ich sagen, will man
wirklich in eine
Situation kommen, in der man sowas machen muss
Ich weiß nicht, ob es anders geht
Ich würde versuchen, das zu vermeiden
Aber wie vermeidest du das?
Nämlich die Tests halt in der Applikation
laufen lassen. Ja gut, aber dann weißt du, ob deine Applikation
funktioniert und nicht, ob deine Serverinfrastruktur funktioniert
Ja, wenn man jetzt ins Fast-Fact-Rabot geht, dann
weiß ich, habe ich einen neuen Test für meine Applikation
Der Sinn der Staging-Umgebung, um dann
einmal das zu machen
Aber die ist ja in einem anderen Zustand
Genau, das ist was ich meine, also die Frage ist halt
Du musst halt diese Staging-Umgebung, diesen zwei
Ebenen bauen, damit du quasi
dieses Update simulieren kannst, weil wenn du nur
die neue Version baust im Staging-System, kann es sein, dass das
aus irgendwelchen Gründen funktioniert, aber
das Update halt nicht
Also, ja, wie gesagt, was ich gehört habe
ist, dass Leute halt auch Tests eben
gegen, sie ziehen dann sogar temporär Infrastruktur
hoch, ein System und
machen dann ihre Tests dagegen.
Das hört sich für mich ganz schrecklich an, weil das Problem
ist, das macht ja dann auch seine Entwicklung total langsam, weil
allein das Hochziehen von dem Kram und auch
ehrlich gesagt, ich finde Ansible ist halt schon, also
bei mir, ich glaube vielleicht mache ich irgendwas ganz falsch,
langsam. Also das dauert Minuten.
Die ICT macht es langsam, also es dauert eher länger als
Stunden.
Ja, das ist ja schrecklich, also wenn du halt sozusagen
so einen Feedback-Loop haben willst, irgendwie du änderst was,
guckst, ob es funktioniert, wenn es nicht funktioniert,
wieder was ändern. Also für mich
und Jochen unterhalten sich über die Programmiersprache Python
eine Sache, warum Azure nervig ist.
Ja, überhaupt nicht.
Aber die Frage ist, was würdest du denn sagen, was wäre denn die Lösung
von diesem Problem? Also für mich,
ich weiß natürlich nicht, ob das immer geht, aber ich würde
sagen, man schiebt die Tests in die
Applikationen zum Beispiel, also ein Beispiel jetzt,
wo ich das auch gehört habe, wo Leute
sowas testen, wo die sagen, ja, also
wenn ich jetzt zum Beispiel irgendwie
nach AWS deploye
und dann weiß ich zum Beispiel, die haben genau dieses
Ding, wo ich auch denke, oh mein Gott, das ist einer
der Gründe, warum ich ganz viel zu diesen
Fileswerving auch gemacht habe,
Also, das ist auch bei dem jetzigen
Python-Podcast ist es so, die Files kommen von
S3.
Aber das Problem ist jetzt natürlich,
wenn ich jetzt Files
gerne hätte, wo Leute sich authentifizieren müssen,
um sie sehen zu können,
dann muss ich ja dann S3 darum kümmern,
dass das so ist.
Oder Django.
Ja, das Problem, Django kann sich ja nicht
darum kümmern, so in gewisser Weise, weil
da ist ja sozusagen dann nur, also auf der
Webseite ist ja nur ein Link auf S3.
Ja.
Das heißt, man kann natürlich dafür sorgen, dass der Link nicht sichtbar ist, wenn es nicht authentifiziert ist
Also verschiedene Möglichkeiten, dass man dem Engine X zum Beispiel
da mitgibt
Wenn es über S3 geht, ist es S3, aber das S3 ist sozusagen nur das
Backend für CloudFront, für so ein CDN
Jetzt ist halt die Frage, okay, wenn es über ein CDN geht, das geht ja nicht über dein Engine X
sondern das geht ja außenrum
So, jetzt kannst du, gibt's ja natürlich schon gewisse, du kannst die URLs so generieren, dass die halt signiert sind zum Beispiel. Und dann kannst du dem S3 bzw. CloudFront oder wie auch immer sagen, ah, die URL muss aber signiert sein und die Signaturen sind nur für so und so lange gültig oder du musst halt irgendwie Cookies setzen. Es gibt ja diverse Möglichkeiten, wie man sich authentifizieren kann.
Aber das Problem ist jetzt natürlich, wenn du
darauf angewiesen bist, dass das wirklich funktioniert,
musst du das ja eigentlich testen.
Du musst ja sagen, okay, wenn jetzt jemand hier
im Django-Admin gesagt hat,
da darf keiner, da darf nur ein Autorifizierter
darauf zugreifen, dann muss man diese Logik irgendwie
testen können. Aber wenn die
tatsächliche Überprüfung irgendwie
in CloudFront stattfindet,
dann kannst du das nicht mehr gut
testen, ohne dass du
tatsächlich irgendwie das nach CloudFront hochschiebst,
irgendwie deine Einstellungen machst.
Du musst jetzt natürlich dann einen Mock dafür machen.
Ja, aber das ist ja
das ist genau
Jetzt kommt der Punkt, warum dann Leute
genau das gleiche
Szenario quasi, wenn Leute
sagen so, ja und wir ziehen unsere Infrastruktur
ja per Terraform hoch und das ist ja
der Vorteil, dass wir das auf unterschiedliche
Cloud-Anbieter hochschieben können und jetzt haben wir
zum Beispiel eben genau dieses Problem, wir haben
zum Beispiel da irgendwie
Byte-Range-Requests irgendwie
erlaubt, das muss man irgendwie bei AWS, muss man das irgendwie
so und so konfigurieren, dass das geht oder eben
Authentifizierung und jetzt schieben wir das Ganze nach Azure
und jetzt
hat irgendjemand in der Terraform-Config
irgendwie diese komische Konfiguration
für AWS oder so gesehen, wie man das macht,
hat sich gedacht so, was ist das denn?
Das habe ich ja noch nie gehört. Was sind denn
Byte-Range-Requests? Ach, das ist bestimmt ein Artefakt
von irgendeiner uralten Geschichte.
Ich nehme das mal raus und gucke, ob es geht.
Man nimmt das raus, guckt, ob es geht
und dann geht es auch,
aber man hat damit halt einen ganz wichtigen Teil
der Funktionalität kaputt gemacht.
Und jetzt müssen alle Clients plötzlich irgendwie alle Files
immer komplett holen, weil ByteRange
wird jetzt nicht mehr gehen und
wie zum Beispiel bei Podcast oder PodcastPlayer
holen sich immer nur Teile,
wenn das Teilformat das unterstützt.
Und ja,
das ist in der Produktion dann unterbestimmt eine riesen
Katastrophe, wenn das halt abgeschaltet ist und nicht mehr geht.
Das heißt eigentlich, wenn du solche Sachen
da drin hast, dass halt
Teile der
Features deiner Applikation sozusagen
darin bestehen, dass du dein
ObjectStore
oder CDN richtig konfigurierst,
dann musst du das eigentlich testen.
Dann musst du das auf einer Test, irgendwie testmäßig
hochziehen, dann deine
Features, die halt
im CDN liegen, halt testen.
Und dann kannst du erst sagen, wenn das alles funktioniert, okay,
es funktioniert. Das war gerade ein Plädoyer für das, was ich gerade
eben gesagt habe.
Für mich hört sich das an, oh mein Gott, das würde man auf gar keinen Fall
machen. Für mich klingt das nach einem Plädoyer,
ich software meine Files selber,
ich mache das nicht bei einem CDN.
Aber erst mal als Beispiel.
Dann kann ich so eine Applikation testen.
Aber du müsstest deine Byte-Request-Tests tatsächlich testen mit AWS?
Nein, muss ich nicht.
Du hast jetzt bei AWS.
Okay, aber dann wäre der Test, wenn du den hättest, würdest du halt merken, wenn jemand ein Update fährt und das geht dann nicht mehr.
Aber das würdest du nur mit meinem Update vielleicht.
Naja, es ist halt furchtbar.
Wie würdest du es denn machen?
Also ich würde sagen, es geht wahrscheinlich nicht immer.
Also manchmal muss man dann vielleicht sowas Furchtbares tun, wie irgendwie dann solche Tests gegen eine Testinstallation fahren.
Ich würde es so machen, ich würde sagen, ich serve die
Requests halt selber und teste
das halt auch, dass die Byte-Range-Requests halt gehen
und dass Authentifizierung geht, lokal, ohne
irgendein CDN. Und ich benutze
dann halt eben kein CDN für diese Art von,
also vielleicht benutze ich ein CDN für Sachen, wo es egal ist,
wo ich keine Konfiguration brauche, aber für die Sachen,
wo ich halt irgendwie Spezialkonfigurationen brauche,
nehme ich halt kein CDN, sondern
serve es halt direkt.
Okay, aber das ist eine Entscheidung, die an deine Stelle
kommen muss. Das macht mich
an mehreren Stellen vielleicht unbeweglich.
Ja, also solange das funktioniert, bin ich damit deutlich flexibel.
Ja, also solange du den Hut auf hast, schon.
Ja, also
ist halt die Frage.
Ich weiß nicht, ob es auch
aber diese Geschichte, ich ziehe mir eine
Testinfrastruktur hoch und mache dann Tests dagegen und
das dauert alles irgendwie 30 Minuten.
Das klingt ziemlich schrecklich, ehrlich gesagt.
3,5 Stunden.
Aber letztlich muss man dann auch überlegen,
sind diese Dateien so wichtig, dass ich mir 3,5 Stunden
Zeit nehme, damit ich
halt absolut sicher bin?
Ja.
Also ich sag mal, bei Kundendaten, die du nicht einfach mal so neu reinbauen kannst, dann sollte man das vielleicht in Erwärmung ziehen.
Genau, und dann muss man halt gucken, was ist das Richtige.
Ja, natürlich.
Und vielleicht kann man dann auch überlegen, okay, ich habe jetzt in dem Bereich nichts gemacht, da reicht so die normalen Tests.
Ja.
Ja, ja, also.
Ja, okay.
Testing haben wir ja. Okay, aber
vielleicht nochmal Man kann Molek gibt es bei Enzebel oder Assertions Achso ich meine ich schreibe keine Tests f die Enzebel sondern ich probiere es halt aus und wenn es geht dann sage ich mir okay das ist gut genug
Alles, was ich wirklich testen möchte,
teste ich in der Applikation.
Also was ich mache, bei Enzebel-Sachen ist, ich mache Assertions
am Anfang, so ein paar,
die dann halt mir um die Ohren fliegen, weil es sich relativ schnell
funktioniert, also nicht ein wahrteiliges ganze Playbook
da läuft, sondern einfach direkt, okay, irgendwas geht hier nicht,
danke, mach nochmal.
Aber das sind so einfache Sachen eigentlich nur.
Ja, also geht ja ganz am Anfang los
mit einer Debug-Flag, um sich da einfach mal
alles so anzeigen zu lassen und zu sehen,
okay, passieren auch die Dinge,
wo ich vermute, die passieren.
Tatsächlich
teste ich die letztlich auch
gegen Vagrant und gucke dann, ob der
die am Ende
die Konfiguration hat, die ich haben möchte.
Okay, interessant.
Mit Vagrant testen?
Was ist mit Molecule? Kennt ihr das?
Ist auch so
Endable-Molecule-Testing, da kann man
Testmodule schreiben, die man dann irgendwie reinsetzt
in seinen,
ja, wenn man jetzt so selber Ensemble-Module
schreibt, dann kann man das irgendwie machen.
Müssen wir vielleicht nochmal nachgucken. Genau, also in die
Verlegenheit bin ich bisher noch nicht gekommen, weil es gibt
echt viel, was man letztlich,
was es schon gibt.
Und wenn es das nicht
gibt, am Ende setze ich dann einfach ein Command
ab. Ja, okay, das ist halt
tatsächlich die Frage, weil es gibt halt viele,
viele Buildings von Ensemble, also Ensemble-Building
irgendwas, ermöglicht einem relativ viel,
Kommandos auch dann.
Community ist meistens schon vorinstalliert
mit, wenn man das, die meisten Community-Sachen
sind mit drin, für schöne Sachen.
Die Frage ist, gibt es
so Dinge, die man dann selber bauen will? Beispielsweise
man hat irgendein Command-Line-Interface,
das man ständig benutzt, was dann immer
sehr hässliche, ellenlange
Befehlszeilen ausgibt. Da könnte
man ja selber sich ein Enable-Modul verschreiben
in Python, was dann quasi ein
Abstraktionslayer drüber schreibt, wo man dann
ein eigenes Enable-Modul,
ob man das in Galaxy hochlegt, wie auch immer,
benutzt, um dann zu sagen,
hey, wir hatten ein einfacheres,
schöneres Interface, um
so Befehle zu bieten.
Ja,
also tatsächlich so,
bisher habe ich noch alles gefunden in Ansible,
was man so braucht.
Ja, oder man hat tatsächlich dann direkt Shell-Kommandos,
die man halt ausführen kann. Genau.
Und ja, dann hat man sich überlegt, okay,
am Ende
wird eine SSH-Verbindung aufgemacht
und ein Shell-Kommando abgesetzt.
und dann kann man natürlich gucken,
okay, wenn ich ein Modul entwickle, dann
gucke ich, dass halt das Richtige
am Ende rauskommt. Ja, ich würde auch noch ein bisschen
das Assoziationsniveau, kann man halt manchmal, wenn wirklich
man komplex sagt, kann man es so ein bisschen vereinfachen,
vielleicht für Leute, mit denen man arbeitet oder die es benutzen,
indem man das so ein bisschen wegabstrichelt vielleicht.
Aber beim Thema Modul schreiben sind wir wieder so,
dann schreibe ich
natürlich auch wieder ganz viele Sachen
für ganz viele Betriebssysteme,
die ich vielleicht dann
doch nicht brauche.
Also, ja, das ist halt immer so die Abwägung, wann macht es Sinn, in die höhere Abstraktion zu gehen, um einfach zu sagen, okay, das bringt mir jetzt so viel.
Vielleicht hätten wir das mit der Teamgröße zu tun. Also wie viele Anwender von deinem Ende-Bim-Modul gibt es zum Beispiel intern, in dem du was machen willst und wie viele Leuten kannst du da Arbeit erleichtern oder sowas.
Ja, dann
ich glaube, was noch fehlt,
jetzt nur noch nach meiner Liste,
sind die Secrets und wie man mit Secrets umgeht
und wo man die herbekommt. Gibt es irgendwelche
Vaults, aus denen man sich authentifiziert?
Wie macht man das? Schreibt man Secrets
mit in irgendwelche Repos rein,
in Source Control? Ist das eine schlechte Idee? Also man kann
jetzt zum Beispiel verschlüsselt reinschreiben und dann irgendwie
aufschlüsseln und dann
einen Schlüssel nur mitgeben oder so und
was würdet ihr sagen? Genau, also
es gibt Ansible Vault
und da kann ich dann letztlich
einen beliebigen String
verschlüsseln gegen ein Passwort
und bekomme dann halt
das Secret rausgeworfen,
das kann ich dann in meinen Playbook reinpacken,
dann kann ich das
letztlich auch einchecken, weil es verschlüsselt ist
und muss dann beim Ausführen des Playbooks
einfach sagen, okay,
frag mich nach dem Geheimnis oder nach dem
Schlüssel für das Geheimnis und dann
entschlüsselt er das Ganze.
Ich kann es natürlich letztlich
auch wieder ins Inventory schreiben
zum Entschlüsseln, aber dann
bin ich wieder bei dieser Debatte.
Sollte ich
unter welchen Umständen sollte ich Geheimnisse
in meine Repos einchecken?
Das ist ja spannend. Beispielsweise wenn das gerade bei
dem ganzen Infrastrukturprozess, muss das ja irgendwo
rein und irgendwo entschlüsselt sein.
Also irgendeine Maschine kennt dann
das Secret, entweder als lokale
.env oder was auch immer und da muss man halt wenigstens hingehen
und das für den Zeitraum, wo man die Befehle ausführt,
dann entschlüsseln, aufmachen und
dann da reinschieben. Dann muss man halt auch fassen, dass es irgendwo
nicht in irgendwelchen Logs oder irgendwo im Speicher
zwischendurch weggeschrieben wird.
Genau, also letztlich die Maschine, die es ausführt,
die weiß es.
Ja, ja, also da gibt es...
Also jede Maschine, die es ausführt, weiß es.
Genau.
Die Vermittlung zwischendrin muss halt auch stabil sein und so.
Ja gut, die sind ja da
SSR relativ abgehangen.
Das ist wahrscheinlich nicht das Problem,
aber ja, also ich meine, die Secrets
sind halt auf der Maschine unter...
Ich meine, das Schlimmste...
Es gibt ja diese 12-Factor-App-Geschichte,
wie man halt, also das ist halt
eigentlich die Art, wie Heroku
irgendwie Dinge deployed hat,
und die haben das halt so aufgeschrieben und das dann so genannt.
Und da ist ja eine der
Geschichten so für Secrets oder so
Umgebungsvariablen zu verwenden.
Ist halt auch so eine, also ich mach's häufig
auch so, aber auf der anderen
Seite so ein simpler
Einwand dagegen ist halt, dass Leute
sagen, ja, du machst es damit Angreifern aber auch extrem
einfach, weil
eigentlich muss ein Angreifer, wenn er weiß, dass du das so machst
oder ich meine eigentlich, das ist halt das erste, was man dann tut
als Angreifer, einfach mal das Environment
nehmen, weil das ist ja super einfach zu lesen
wenn du halt das Gehaft hast, irgendwie
Code im Kontext von irgendeinem Prozess auszuführen
nimmst du das Environment und schickst es irgendwo hin
und dann hast du halt schon viele Secrets möglicherweise
alle möglichen AWS Keys und so
irgendwo hingeschickt und das ist halt das erste, was ein Angreifer macht
Ja, wenn man bei GitHub danach sucht, da gibt es dann
einige
gesquattete
Raypos, die genau das
machen, also die quasi den Quellcode nehmen und halt
wenn man sich vertippt hat,
dann einfach mal die Environment woanders
hinschicken. Genau, und das ist
natürlich so ein bisschen, und wenn man das irgendwie
anders machen würde, also zum Beispiel
über, also was ich auch gern mache,
jetzt nicht bei Django mache ich es tatsächlich
meistens über Environment, weil es halt irgendwie so praktisch ist
und aber
in Projekten, wo ich Pydentic habe,
mache ich es meistens mit Base-Settings oder so, wo es
dann halt aus einem File gelesen wird und man das halt
wissen muss und importieren muss und das ist halt schon mal
so ein automatisierter Angriff funktioniert.
Und dann diese Base-Settings werden dann in
Environment-Variablen geschrieben.
Am Ende ist es bei
der IT-Security immer das Thema,
was ist denn mein Angriffsszenario,
wenn ich jetzt sage,
okay, ich bin eh in einem privaten Repo
und
wenn jemand dann Zugriff auf
mein privates Report, was auf mein CI läuft
und alles, also sagen wir, ich habe ein privates
GitLab und da ist jemand drin,
ja, dann ist es egal.
oder wenn ich sage, okay,
aber es ist ja dann im Rahmen
und wenn jemand jetzt meine Umgebungsvariablen
auslesen kann, dann auch schon wieder
ein Problem.
Das ist, wenn ich meinem
Provider oder meinem Hoster nicht traue, dann
habe ich auch ein Problem. Irgendwo
muss man dann sagen, okay,
diese Risiken gehe ich ein
oder das sind die Maßnahmen, die ich
geändert habe.
Ich wurde gezwungen von der Konzern-Security,
für den Konzern, für den ich was gemacht habe,
eben nicht direkt Environment Variables
zu setzen, was ich gewollt hätte,
also in so eine
Terraform irgendwie rein, da kommen das halt aus Secrets
und das ist halt irgendwie gekapselt, sondern
ich musste es nochmal über einen Umweg in einen
extra Vault reinschreiben, der
dann irgendwie extra verschlüsselt
wird, wo dann keiner mehr dran Zugriff drauf haben
sollte angeblich.
Ende von mir war aber, es wurde dann doch wieder
da als Environment Variable in diese Container
reingeschrieben. Das heißt,
das Ergebnis war dasselbe, nur dass ich zwischendurch
noch ein paar extra Schritte gehen musste, wo
und Jochen unterhalten sich über die Programmiersprache Python
haben, was man überhaupt tut, bevor man irgendwie die Regeln in FOS statisch irgendwie...
Ja, aber das steht so in der Policy,
das machen wir so. Ja, genau, das ist ITIL.
Irgendwer hat einen ITIL-Prozess definiert, wo das drinsteht,
wie man das macht.
Also ich kann ja einfach sagen, wie ist das? Also ich check
tatsächlich die Secrets
irgendwie mit ein, auch in
öffentlichen Repos und da
braucht man halt dann eben eine entsprechende Passphrase.
Also was ich mir vorstelle, was man noch da verbessern
könnte, weil momentan ist halt das Problem, okay, wie schnell
verhält man denn das
Passwort oder das Wohlpasswort, das man
dafür braucht halt.
Ja gut.
Man braucht halt irgendeinen vertrauenswürdigen Kanal,
über den man das übermitteln kann. Ich glaube, man kann auch
irgendwie Dinge mit GPG machen.
Also ich würde sowas versuchen, wie die Yubi-Keys zu verschicken.
Ja.
Wo dann halt die Keys drauf sind, die das funktionieren.
Und dann vielleicht geht das...
Die sind halt auch nicht kopiersicher oder sowas.
Ja, die Yubi-Keys, genau, die könnte man natürlich dann über den
SSH-Agent...
Und dann könnte man
GPG machen und dann könnte man das wieder
entschlüsseln.
Ja.
Also mein idealer
Workflow sozusagen, ich kann es momentan nur so
beschreiben, wie ich es gerne hätte, aber ich weiß noch nicht genau, wie man
es implementiert, ist halt sozusagen, dass ich sage, wenn ich
jetzt halt irgendwas deployen will oder möchte an die Secrets,
dass mich das
Ansible halt dann, dass ich mich irgendwie bei Ansible
einhake oder so und dann, dass dann, keine Ahnung,
auf meinem Telefon halt dann irgendwie
Two-Factor-mäßig irgendwas aufgeht und sagt halt,
hier bestätige mal, dass ich irgendwie
das angucken
kannst und dann geht es halt auf
so zum Beispiel
oder YubiKey oder so.
Also ich finde die Kombination cool. Auf dem Telefon geht auch
halt mal bitte an das Telefon in YubiKey.
Ja, irgendwie sowas.
Ja, da könnte man dann auch gleich überlegen,
mache ich das vielleicht auf der Ebene von SSH,
dass ich den Zwei-Faktor-SSH mache?
Gibt es auch eine Lösung?
Da geht es auch mit YubiKey übrigens.
Da habe ich letztens irgendwie, der Johannes hat das so gelinkt,
so einen Artikel in seinen Weak News.
Ja, ja.
Ja, genau.
Wem musst du vertrauen?
Deinen Mitarbeitern vertrauen?
Ist auch vielleicht nicht immer so einfach. Für was?
und so, aber klar, also wenn du jetzt irgendwie einen Admin hast,
der Sachen entwickeln soll, der muss natürlich schon zugefahren.
Das macht halt sonst keinen Sinn, wenn du jedes Mal irgendwie
einen Antrag stellen musst und in drei Tagen warten musst.
Für mich wäre das natürlich totaler Quatsch.
Ja, oder?
Ja, an irgendeiner Stelle muss ich halt
Leuten vertrauen und ich muss halt dann die
Abwägung treffen, wem möchte ich
denn vertrauen? Ich finde das mit physisch, glaube ich, ganz gut.
Also wenn man den Leuten einen physischen Schlüssel in die Hand geben kann,
den die vielleicht sogar
kopiergeschützt, ich weiß nicht, ob es so etwas gibt.
Ja, also die YubiKeys,
ja, die soll
also an sich, diese ganzen
Hardware-Schlüssel sind kopiergeschützt.
Ja, also
wenn einer rausfindet, wie es geht.
Wenn ich halt jemanden dann sage, okay, wir treffen uns,
oder ich schicke ihn per Postakku,
da fängst du dann an,
wer hat dann den Zugriff auf diese ganzen Sachen.
Aber wenn man den halt dann
abgeben kann, dann ist das schon
relativ sicher, okay, dass ich jetzt in meiner Chain
dann nur die Leute anwenden, die diesen
Schlüssel auch von mir bekommen haben.
Das ist ja schon mal ein Vorteil.
oder Zertifikate.
Auch schön. Die kann man ja auch
sagen, die laufen ab relativ schnell.
Und dann ist die Root Authority, die
ist dann...
Ja, genau.
Geht ja auch relativ fix, so eine CA
aufzustellen. Die sicher zu halten, ist
wieder schwierig. Ja, das ist absolut super. Wir haben auch so eine
Root CA, die sich selbst definiert hat und
die dann die ganzen Zertifikate mit raus...
Warum macht ihr denn den Scheiß drauf?
Ja.
Ja, ja.
Das ist Security auch. Sehr, sehr
schwieriges Thema.
Ja, man
kriegt es nicht absolut sicher hin
und man, also es ist wirklich, man muss sich
die Risiken vor Augen führen und sagen,
dieses Risiko gehe ich jetzt ein.
Man braucht halt irgendwie eine unabhängige Autorität, der man
vertrauen kann.
TÜV geprüft, ne?
Ja.
Man müsste irgendwo so ein Denkmal machen,
da steht dieser ursprüngliche Schlüssel drin und der ist dann
noch, ne?
Ja.
Och, ja, ja.
Es ist schwierig.
Ja, das
einen spannenden Aspekt, den wir
noch nicht so beleuchtet haben. Also wir haben ja
auch viel über Docker gesprochen
und dass das so, ja, vielleicht
auch Ansible verdrängt. Aber
was Ansible jetzt viel macht, ist
in die Network Automation
reinzugehen. Das heißt,
ja, alle großen Anbieter, die bieten
jetzt auch Ansible-Module an. Das heißt,
ich kann letztlich Cisco
Switch mit Ansible konfigurieren.
Das sind interessante Sachen.
und alles, was relativ groß ist, Palo Alto, Unipy, Nokia,
die lassen sich jetzt über Ansible ansprechen.
Und wer schon mal so eine Cisco-Konsole bedient hat...
Ja, das will man automatisiert wegschieben über seine eigene Shell,
wo man sagt, ich habe hier ein Skript für Rennmal.
Genau, Ansible definiert mir hier jetzt mal, welche IP-Adressen wohin und welche VLAN es gibt.
und das ist schöner,
als das alles mit der Hand einmal einzupicken.
Das kann man dann auch wieder schön testen eigentlich.
Dann weiß man halt, okay, stabil.
Dann kann man auf jeden Fall Use Cases finden,
wenn es nicht stabil ist, okay, dann mach es mal anders.
Also dieses Ganze,
ich muss jetzt immer manuell dran rumfummeln,
bis es stimmt.
Das sollte man nicht machen.
Klar, das ist natürlich,
davon muss man irgendwie weg.
Also ich finde,
also prinzipiell, dass das halt alles
in Repositories drin ist und die
Änderungen getrackt werden und man
auch den Stand wieder reproduzieren kann.
Das sind alles super Sachen.
Das will man eigentlich schon haben.
Aber
gut, bei Testen wäre ich mir jetzt...
Ich kann mir auch vorstellen, dass es Situationen gibt, wo man das
auch dann testen können will. Ich wäre mir jetzt nur nicht so
sicher, ob der Aufwand
sich immer lohnt oder ob es nicht andere Wege gibt,
das gleiche Ziel zu erreichen.
Du musst es halt wie bei Ronny machen. Sobald
die Coverage bei deinem Commit runtergeht
oder bei deinem Pull-Request, wird er direkt
by the Night.
Ja, genau.
Ja.
Ja, ja.
Ich weiß nicht. Ach so, genau.
Ich wollte irgendwas sagen.
Ja, genau.
Dinge, die mir noch so,
die ich noch gerne loswerden würde,
man kann auch noch so Dinge tun wie,
wenn Sachen lange laufen, kann man irgendwie
Async mitgeben und dann wird halt immer nur
ab und zu mal geguckt und andere Sachen können halt
parallel weiterlaufen. Das ist manchmal ganz praktisch.
Also auf einer Maschine oder auf
an den anderen Posts.
Für den Task zum Beispiel.
Aber die Task auf einer Maschine parallel, in verschiedenen Prozessen?
Ja, du kannst, ja, oder
auf einer Maschine.
Ja, genau, das wollte ich gerade fragen.
Ja, klar, also du hast die Parallelität über
unterschiedliche Maschinen, nicht auf einer.
Ja, genau.
Und du kannst natürlich auch angeben, wie viele Prozesse
das sein sollen. Wenn du viele Maschinen hast
und viele Prozesse, dann wird es natürlich irgendwann doof auf dem
Host, auf dem du das ausführst.
Ja, kann man auch so Waitpoints machen?
Keine Ahnung, du musst jetzt aber warten, bis das und das
und das fertig ist.
und
Geschichten nicht funktioniert haben
und das geht ja alles.
Also das kannst du ja nicht schaffen.
Das sind Sachen, die sind so nervig, manchmal
gerade Infrastruktur, erste Service aufbauen
und dann zwischendurch hast du so Fehler, die
unvorhersehbar sind, weil irgendwelche Netzwerkprobleme
sind oder irgendein Name Server gerade nicht reagiert hat
oder sowas und irgendeine IP noch nicht kennt oder so
und dann macht es bumm und du fragst dich warum
und dann lässt es nochmal laufen und es funktioniert wieder.
Das ist eine furchtbare Hölle.
Genau, da kannst du auch so ein Retrys mitgeben.
Aber ja,
man läuft halt dann halt
wirklich diese unschönen Probleme rein
und es wird auch nicht schöner.
Achso, jetzt richtig, jetzt weiß ich wieder, was ich sagen wollte.
Genau, also
einer der Gründe, warum ich meine ganzen
Incivil-Geschichten, die meisten davon nicht
eingecheckt habe, also manche davon schon, aber
die meisten nicht, ist halt, dass ich
also man kann bei Incivil auch sagen,
das habe ich halt noch nicht gemacht, aber
sollte vielleicht, die Inventories
kann man halt auch auf Server legen oder so,
dass es halt nicht aus dem Textfile kommt, sondern irgendwo
und momentan bei mir kommen sie meistens aus dem Textfile
und das heißt, wenn ich mein Inventory wieder einchecke,
dann checke ich meine gesamte Infrastruktur mit ein und das will ich
echt nicht. Das Inventory kann
halt auch ein Skript sein,
das kann ein Ordner sein,
das kann wieder ein Ansible-Modul sein,
wo sich das halt dann die
Punkte wieder herholt. Dynamisches Anbauen, ne?
Ja, du musst halt dazwischen, wie nennt man das, Jump-Hose
bauen, die dann irgendwie bestimmte Sachen vorbereiten
und ausführen und dann da
so eine Art Date-Warein haben.
Ich kann einfach gegen den Hetzener DNS zum Beispiel
fragen, so, wie sieht's
hier aus und dann gibt er mir das als
Inventory.
Also
da gibt es verschiedene Plugins
AWS, Docker, Kubernetes,
Proxmox
und noch viele mehr.
Was ist Proxmox?
Das ist auch eine
Virtualisierungsumgebung, also eher wie
ein
Hardwarehost,
der einem halt dann
verschiedene
so wie früher
vor MWR.
Nur halt so ein bisschen als Community-Projekt.
Okay, vielleicht
auch mal reinhören.
Habt ihr noch Punkte auf eurer Liste?
Ja, genau.
Einen Punkt habe ich noch, was man auch machen kann.
Man kriegt eine Textausgabe, wenn man einfach
Ansible so auf der Kommando-Zelle ausführt.
Aber man kann halt
Ansible auch sagen, hier ist
dein Callback-Command
irgendwie. Und dann
kann man selber zum Beispiel eine Funktion schreiben,
in die die Ausgaben von Ansible
reingehen, beziehungsweise nicht nur die Ausgaben, sondern man kriegt halt wirklich... Man kann das loggen, wenn man will?
Man könnte es loggen, also wozu ich das benutze ist, ich gebe halt JSON aus,
also ich passe das dann halt auf und dann packe ich das in mein eigenes JSON-Format und gebe dann halt JSON aus,
weil dann kann ich das halt, während es läuft,
irgendwie direkt auf einer Webseite anzeigen. Okay, dann weißt du halt, in welcher State
gerade ist und wo ist denn das gerade und wie weit ist denn das?
Und vor allen Dingen habe ich an der Stelle auch eine sehr schöne Abstraktion,
wo ich das ja auftrennen kann, weil
ich verwende jetzt meistens zwar Ansible,
aber es könnte auch Situationen geben, wo ich nicht
Ansible verwenden will, sondern
wo ich direkt SSH verwenden will
oder ein Skript, einfach nur
oder ein Python-Skript oder
was ganz anderes. Ich will Ansible durch was anderes ersetzen.
Es gibt ja auch so, ich meine,
bei den Boxinen,
die verwenden ja, die hatten Ansible
lange Zeit verwendet und sind
dann auf was anderes umgestiegen.
Weißt du was?
Ich habe es wieder vergessen. Ich wusste es mal.
Okay, der Jens hat irgendwas Eigenes gebaut.
Nee, nee, aber ja, oder er hat
irgendwas Eigenes, ich weiß es nicht mehr genau.
Jedenfalls,
genau, also vielleicht will ich ja auf irgendwas anderes umsteigen,
aber ich kann ja diesen
JSON-Layer halt sozusagen
erhalten, dann muss ich an meinem
quasi Deployment-Überwachungstool
muss ich überhaupt nichts mehr ändern,
muss ich überhaupt nichts ändern, das läuft einfach so weiter
und ich habe unten drunter kann ich das Ansible austauschen
und also das finde ich ganz nett,
dass man das weiß, dass das geht, dass man nicht
irgendwie Ansible Tower oder so verwenden muss,
weil das war auch sowas, nicht?
Was ist Ansible Tower?
Ah ja, gut, stimmt, das müssen wir noch machen.
Das wäre ich auch noch zugekommen.
Ja, also
diese ganzen Probleme, die Ansible ja hat,
zum Beispiel, manchmal hat man ja Tasks,
die sollen
so wie ein Cronjob laufen,
aber dann sollen die nicht auf der lokalen Maschine
laufen und dann
hat man erstmal ein Problem.
Ja, man müsste quasi irgendwas online halten die ganze Zeit, was dann Sachen...
Genau, und das wäre genau
Ansible Tower, der kann dann halt
und da kann man halt Playbooks reintun und die laufen dann...
Und wo steht denn der?
Also den kann man sich von Red Hat mieten.
Ah, deswegen rum jetzt zu der Enterprise-Variante.
Genau, und die Enterprise-Preise werden auch nicht angezeigt auf der Webseite.
Gut, aber theoretisch könnte man sich auch eigentlich so einen eigenen Server per Enzel konfigurieren,
der dann Kontos laufen lässt.
Genau, also Enzible Tower an sich, wenn man es gehostet laufen lässt, ist auch teuer.
kann es auch selber aufsetzen
aber
habe ich bisher noch nie geschafft
komischerweise ist es auch ein Docker-Container
und kein Ansible-Playbook
hätte ich jetzt eher erwartet
Dogfood
aber warum macht man dann nicht so etwas wie einfach Conjobs auf einem
Bare Metal
der Ansible-Tower
gibt ja natürlich noch eine schöne Web-Oberfläche
die dann die Logs einfängt
und alles sagt
kann man ja auch alles selber bauen
und wie so ein Grafana-Problem ist.
Ja, alles selber bauen ist natürlich
auch immer eine gute Zeitsenkung.
Ja, ich habe es getan und
ja, es war dann sehr, ich konnte
quasi beliebig viel Zeit dran senken, das war gar kein Problem.
Ja, das war so eine
der ersten Django-Apps, die ich hatte
oder hat dann,
also die zweite App, die hat nämlich dann
die erste App, die ich hatte, deployed per
Ansible Playbooks.
Ach, sehr gut.
Jetzt kommt mir irgendwie bekannt vor.
Ja, genau, das mache ich halt auch.
Genau, wir können mal gucken, ob ich das hier...
Das ist natürlich so im...
Ja, aber ich hatte auch...
Bei mir heißt das Steward. Ich habe mir überlegt,
ich muss die ganze Nacht nach Schiffen nennen.
Die Server heißen alle nach Planeten und die Dinge
Steward, Lieutenant, also ich gehe nach denen.
Ja, genau.
Es gibt auch die Möglichkeit,
die Server einfach nach dem zu benennen, was sie tun.
Dann ist es für alle sofort klar.
Ja, also was heißt denn für alle?
Es muss ja hinreichend
geheim und...
Wer muss das nennen?
Ja, aber ich habe im Grunde sowas wie ein Tower, das macht nicht, dass das Tower macht, sondern noch ein bisschen mehr und andere Dinge, aber es ist halt tatsächlich sehr ähnlich.
Ich kann richtig gut User Interfaces.
Nee, gar nicht. Das sieht man hier auch.
Aber das macht halt genau sowas.
Das kann halt eben
diese Dinge, das kann er direkt live einzeigen,
was da halt passiert. Und was ich halt damit auch
machen kann, ich kann halt
Playbooks, die deployen halt,
also wenn ich jetzt zum Beispiel Hosting machen will
für andere Leute, dann kann ich dem sagen,
okay, nimm halt dieses Playbook und setz halt
die Domain auf das und die Datenbank
auf das.
Man könnte natürlich auch Variablen dann mitgeben,
die abgefragt werden.
Ja, genau.
Das ist schön, ja.
Ja, und da es ja alles Python ist,
integriert sich das ja auch alles sehr schön
dann wieder mit Django und man kann quasi aus dem Django
raus direkt dann das Ansible aufrufen.
Ja, das habe ich jetzt nicht gemacht,
sondern ich habe hier,
weil ich dachte, für diese Geschichte habe ich nicht Django
verwendet, sondern irgendwie FastAPI,
weil...
Ja, wird ja auch gehen.
Ja, weil damit halt alles schön async ist, weil das Problem ist,
wenn ich jetzt viele Deployments laufen habe, die laufen alle
async, aber die laufen lange und
da kommen immer mal wieder so Events und dann
habe ich halt Clients, die drauf sind und dann, ich habe das,
das würde ich heute nicht mehr machen, ich habe das
jetzt, hier habe ich das mit WebSockets gemacht und
mit Vue, ich würde dafür
heutzutage, jetzt inzwischen würde ich dafür
tatsächlich HTMLX nehmen, aber
ja,
ja genau,
ich habe ganz viele langlaufende Sachen,
die parallel, wo Dinge so, dann nehme ich
doch irgendwie native async alles.
Ja, hat
viel mehr Zeit gekostet, als ich jetzt
gedacht hätte. Oh,
kurzer Exkurs, ja, also
und
noch nicht so lange, aber ich habe da schon
sehr üble Tracebacks
aus den Internas von SQL Alchemy gesehen,
wo ich mir dachte, so häufig
solche Sachen wie
an diese Stelle solltest du niemals kommen,
hier versuchen gerade zwei,
eine Connection wird von zwei unterschiedlichen
Routinen benutzt oder so,
hier ist irgendwas furchtbar schiefgelaufen,
tschüss.
Und das ist irgendwie häufig passiert,
und überhaupt dieser ganze Tanz,
also man hat ja bei SQL Alchemy hat man eine Engine
und dann hat man, auf der Engine hat man eine Connection.
und diese Connection braucht man halt,
die ist in einem Connection-Pool und dann
gibt es halt eine Session, die hat den Connection-Pool,
die Session muss man auch aufmachen und dann auf dieser Session
hat man halt irgendwie noch Transaktionen.
Diese Transaktionen können dann natürlich noch mal genestet sein und all diese
Dinge, die man aufgemacht hat, die muss man ja auch irgendwie wieder zumachen
und wenn man irgendwo was vergisst,
also manche von den Funktionen, mit denen man die auf-
oder zumacht, sind halt synchron, manche sind
asynchron. Das ist natürlich ganz schlecht,
wenn man jetzt irgendwie ein Ding, was man eigentlich
asynchron erwarten sollte, halt einfach so zumacht.
Dann passiert auch ganz, dann bleibt
plötzlich so, es funktioniert alles und irgendwann plötzlich Dinge hängen oder werden langsam
und irgendwas wird komisch, irgendwas funktioniert nicht mehr so richtig und dann kann man halt irgendwie
so wirklich viel Zeit damit verbringen, rauszukriegen, was läuft denn da eigentlich schief und das ist echt
also das ist einfach ätzend und was mich auch
irgendwie so ein bisschen geärgert hat schon, ist halt, dass das alles
inkonsistent ist, also einmal ist Sync inkonsistent und dann Engine aufmachen
Engine zumachen ist dann halt Engine Dispose, Connection
ist aber Connection Closed. Session
ist wieder auch Session Closed, glaube ich.
Aber es ist halt immer unterschiedlich.
Man muss halt so einen kompletten Tanz
da irgendwie machen.
Wenn man das aufmacht und wieder zumacht und
an welcher Stelle macht man jetzt was
und was darf global im Prozess
leben und was muss man aber für jeden
Request da reinkommen, neu machen.
Das ist kein Spaß.
Manchmal dachte ich mir so, ich probiere jetzt einfach alle Möglichkeiten,
wie man Dinge auf und zu machen kann, irgendwie durch
und versuche irgendwie zu testen, ob das dann noch
funktioniert oder nicht.
Also, ja.
Kurze Plädoyer für Django.
Ja gut, bei Django geht das halt noch gar nicht, was ich da jetzt gemacht habe.
Insofern kann man nicht sagen,
nehmt einfach Django, dann habt ihr das Problem nicht,
sondern dann habt ihr auch die Lösung nicht.
Aber es war schon, also das war,
es hat mich schon so ein bisschen,
also ich fand es schwierig.
Ja, es funktioniert jetzt, halbwegs hoffe ich.
Das hat ja auch doch irgendwo Gegengarum mitgebracht.
Ich mache jetzt einfach tatsächlich alles
pro Request.
Wie man einfach die Konfidenz abnimmt.
Die länger man drüber nachdenkt.
Ja, ja, ja.
Aber ja.
Also ich würde fast sagen, das war das Schlusswort zu der Ensebel-Folge.
Es sei denn, du hast noch was, Max, was wir vergessen haben.
Nur so noch ein paar allgemeine Sachen.
Also sich den ersten Commit von Ensebel anzusehen,
ist auch sehr schön.
Weil da ist es noch sehr einfach
und man sieht, okay,
Ensebel macht halt wirklich
nur eine SSH auf und
gibt den Command weiter.
Und da versteht man noch wirklich viel,
was dann später
nicht mehr der Fall ist.
Also, wenn man sich so
grundsätzlich interessiert, okay,
wie funktioniert das,
dann ist das ein wirklich schöner Commit der Erste.
Okay, cool.
Danke für den Tipp, den muss ich unbedingt mal machen.
Wenn ja auch in der Show-Note direkt linken, würde ich sagen.
Ja, genau.
Ja, gab es noch was zu Ensebel?
Ansonsten können wir auch Pics machen.
Ich würde mit dem Pix-Scan anfangen.
Okay.
Und zwar habe ich auch eben was vergessen bei Europython, was ich noch
mitnehmen wollte, und zwar das
Evis Project. Kennt das von euch jemand?
Oh ja, das habe ich.
Das ist sehr hübsch. Das ist geschrieben
von Wes McKinney, auch
die neue Company.
Das ist so ein Absalationsinterface
auf, ich würde sagen, also Art von SQL,
in dem man halt so Datenmagerfragen machen kann
auf Postgres, auf Pandas
funktioniert das, das funktioniert auf Apache Impala,
auf PySpark und anderen
großen Sachen und das ist so ein
bisschen fast wie so ein ORM oder so fast,
könnte man so ähnlich sehen,
auf Datenstrukturen. Also ich würde sagen,
und es macht halt so etwas möglich auf Pandas, dass man halt Lazy Evaluation hat und es macht halt SQL-like Geschichten.
Weil normalerweise sind alle Sachen, die man auf Data Frames macht, irgendwie so eager.
Also Pandas ist sowieso, das muss man auch verdenken, es gab da so einen schönen Talk von Matthew Rocklin,
der Maintainer von Pandas, der sagt, Pandas ist gerade Crossroads, wir haben jetzt ein paar Optionen, was wir machen können.
also Pandas, da gab es auch schon vor Jahren einen Vortrag von Wes Van Pini, dem ursprünglichen Autor von Pandas
für kleine Datenmengen funktioniert es, aber wenn es jetzt mehrere Zehn Gigabyte
groß wird, dann wird es halt schlecht und es gibt halt diverse Probleme, die Pandas hat halt einfach
aufgrund von der ganzen Geschichte und dass man irgendwie der Blockmanager
und Nampai und ganz viel und
der hat dann Pandas 2.0 quasi angeschartet und das ist aber nie zu
irgendwas geworden.
Aber das eigentliche Pandas-Projekt steht
jetzt wieder an der gleichen Stelle sozusagen und man muss sich halt
überlegen, was man macht. Und ein großer Unterschied zu
anderen Geschichten ist halt, dass es so etwas wie
dass man nicht sagt, okay,
ich compile mir jetzt meinen Filter
und sonst wie keine Ahnung, was ich auf dem DataFrame machen möchte
und dann sage ich irgendwann execute,
sondern es ist halt eager, was halt bedeutet,
ich kann es eigentlich nicht auf viele Maschinen verteilen
und dann irgendwie ein Ergebnis zurückholen.
Was halt die Skalierungsprobleme bei Riesengruten.
Genau, mit Spark und so, da kann man das alles machen.
Oder mit Das geht das natürlich auch.
aber fangen das selber halt nicht.
Und Ibis ist genau das, der Rappertra von Python,
dass du halt mit das und die ganzen Sachen da einfach
alles drauf zugreifen kannst und es benutzen kannst.
Superschönes Python High-Level-Interface.
Es kommt natürlich bekannt vor,
also für eine Funktion.
Ja, genau, da gibt es
diese Firma hinter
ist das Cloudera?
Ich glaube, das war da mal eine Zeit lang.
Da hat er dieses Projekt auch gestartet, weil
ich habe sich das zum ersten Mal vernetzt,
das war auch Ende 2016,
glaube ich, da habe ich Ibis
zum ersten Mal verwendet, Anfang
2017,
weil die ganzen
Geschichten, die oft in so Business Intelligence
Abteilungen sind, die die
mit riesigen SQL-Statements.
Wenn du jetzt eigentlich aber das
in Python machen möchtest, also ich kam da halt
als Python-Entwickler und die
machten alle irgendwie SQL vor allen Dingen
um Sachen aus
riesigen Hadoop-Cluster und
dann SQL-Abfragen
und die gehen dann per Hive,
werden die halt verteilt über MapReduce
oder halt das neue heiße Ding
da war halt Impala, wo das dann halt in Memory
und irgendwie schneller geht.
Impala ist auch unterstützt von
Evis, ja. Genau, und
dann ist aber das Problem, okay,
und dann dachte ich, okay, wie komme ich denn jetzt an meine Daten,
wie kriege ich das denn jetzt in den DataFrames, weil ich würde ja gerne
mit DataFrames-Dingen drauf tun und nicht
das in CSVs rausschreiben,
was die oft dann gemacht haben und dann in R irgendwie
einlesen, das wäre alles ganz schrecklich und die saßen
das war auch so eine Situation, also
wo ich mir denke,
wie könnt ihr ja, das ist ja
irgendwie, wie könnt ihr so leben?
Das geht doch nicht, dass wir so, okay,
jetzt schieße ich diesen Hype-Job ab, dann gehe ich erst mal Mittagessen,
weil das dauert jetzt erst mal anderthalb Stunden oder so, keine Ahnung.
Ja, aber das geht doch nicht.
und ja, für die ging das irgendwie.
Ich hab gedacht, was soll man den ganzen Tag machen?
Ja, gut.
Also man muss halt nicht so viel
arbeiten, wenn dann Python ist ja superproduktiv.
Ja, oder dann halt eben dann auch
diese komischen Zwischenschritte
und Dinge und dass man halt irgendwie so
komisch kommt und dann auch überhaupt diese riesigen SQL-Statements,
der auch so denkt, okay,
wenn das 100 Zeilen werden und man nachdenken
muss, was macht denn dieses SQL-Statement eigentlich?
Ui, ich muss da wirklich mal drüber nachdenken.
Ich hab immer noch nicht verstanden was das wirklich tut Dann ist das schon schlimm aber man hat so Dinge hat mehrere hundert Zeilen und dann macht das so Core wo man sich denkt wenn da irgendwo ein Fehler drin ist Und das ist so kompliziert
also wenn das Code wäre,
das muss ausgiebig getestet werden.
Und bei SQL-Statements
testen ist halt auch so ein Ding, das
passiert nicht so richtig.
Naja, jedenfalls, genau, da bin ich dann auf
Ibis auch gekommen, weil man damit halt schön
quasi irgendwie
Impala, ich weiß nicht, ob es damals von Impala
war, irgendwas direkt abfragen konnte und dann
und Data Friends freimachen.
Ja.
Ja, das war mein Pick der Woche.
Ja, sehr schön.
Hast du noch einen, Max?
Ich habe tatsächlich zwei.
Einmal
den Django Context Decorator
von Rix.
Das ist ein sehr schöner, kleiner
Helfer.
Man sagt einfach, man macht halt
den Decorator drum,
sagt dann, okay,
gib mir das raus
und dann habe ich das halt im Kontext.
Sonst muss ich mir natürlich immer die Kontextvariable holen,
das da reinschreiben und dann rausschicken.
So Mixed-Sense-Bound für sowas oder so.
Genau, erspart. Ungefähr so drei
Zellen Code.
Aber Software-Ergonomie ist halt
dann schön.
Das andere Thema ist
Xonj. Das ist eine
Python-Shell.
Da schreibt man halt nicht Bash, da schreibt
man dann Python.
Das kann man gut und schlecht finden,
aber ich finde es eigentlich sehr
sch denn da kann ich dann auch wie gewohnt in Python dr loopen Ist das dein Default Ja meine Default Genau ich kann da letztlich alle Commands die ich in der
Shell habe, letztlich ausführen und die
laufen dann halt in den Python-Interpreter
rein und dann kann ich schlimme Dinge damit
tun.
Okay, das muss ich mal angucken. Das klingt sehr gut.
Ja, ich muss das irgendwie kombinieren.
Es gibt übrigens auch ein Terminal, jedenfalls auf dem Mac.
Es nennt sich Kitty.
Das ist auch in Python geschrieben.
Genau, das funktioniert super gut mit Xonj zusammen.
Okay, alles klar.
Ja, gibt's auch dann den
Starship-Prompt
für drin.
Nett, das klingt doch gut.
Ja, super, super.
Cool.
Macht es nur nicht als Root-Prompt,
wenn die dann kaputt geht.
Da kommt man nicht mehr weiter.
Ja gut, ne?
Ändert man die Shadowfile.
Ja.
Genau, was hatte ich?
Ja, genau. Mein Pick wäre PyTestMock.
Das habe ich letztens in den WeakNotes von Simon
Willison zufällig... Nee,
er hat das irgendwie auf Twitter gepostet.
Simon Willison hat einen ganz tollen WeakNote, haben wir nochmal verlegt.
Ja, er hat einen ganz tollen WeakNote, das muss man auch mal verlinken.
Ja, also wenn ihr denkt,
oh,
da sind ja immer interessante Links in den WeakNotes von Johannes
und von mir, dann lest
doch lieber die, die sind noch viel interessanter.
Da lese ich mal die WeakNotes.
Ja,
und der hatte auf Twitter, nee, das war auf Twitter,
hat er irgendwie geschrieben, so, ah ja, er hat irgendwie
einen Weg gefunden, irgendwas mit S3 zu machen
und dann habe ich da reingeguckt in den Kunden und dachte so, hä?
Also ich habe ja in Tests oft das Problem also ich benutze Paltests zum Testen meistens und so manchmal also ich versuche ja immer ohne Mocks auszukommen oder wenn dann selber da aber manchmal geht es halt nicht sondern
muss man halt irgendwie viel mocken und dann hat man das Problem,
also entweder stapelt sich dann so eine Kaskade
von Patch-Dekoratoren über
so einen Test oder man hat halt
irgendwie so eine tief geschachtelte Geschichte mit
so WIS-Kontextmanagern,
also geht jetzt mit einer neuen Python-Version
kann man da auch dann klammern und so, aber
das sieht dann manchmal schon sehr wild aus
und ich denke mir so, ach so ein bisschen hässlich ist das ja schon
und eigentlich, ja also
gibt es da nicht irgendwie einen eleganterer Weg
und PyTestMock ist ein eleganterer Weg
weil da sagt man einfach, schreibt man
halt in die
Signatur Mocker rein und dann kriegt man halt
irgendwie quasi
Ding übergeben, dem kann man
dann sagen, Punkt Patch
und dann braucht man aber keinen Context Manager
und man braucht auch nicht einen Dekorator
sondern das passiert dann im Kontext
von dem Test. Und wenn der Test vorbei ist,
dann wird es halt wieder geunpatched
sozusagen automatisch, weil es ist ja
irgendwie über die PyTest-Magie da drin.
Das heißt, man kann das halt alles schön linear
verwenden und ist halt
diese Hässlichkeiten los.
Also ich mache dann auch noch einen zweiten Blick, weil
wenn Tests nicht laufen, dann macht man einfach
Pip in zwei Fuckit-Dekorator drüber.
Dann macht der zwei Exemplars und läuft alles
wunderschön. Sehr schön.
Also das als Abschluss.
Ja, also vielen Dank, dass ihr da wart. Danke, Max.
das war eine schöne Folge
bleibt uns gewogen, schaltet uns wieder ein
und schreibt uns E-Mails an
helloatpythonpodcast.de
Danke Jochen, danke Max
auf Wiederhören