36C3 Vorspannmusik
Herald: Applaus, Applaus, Applaus,
Applaus, weil an der Stelle ein riesiges
Applaus für Heiko Borchers.
Applaus
Herald: Er ist Fachinformatiker und in
seiner Vita steht, dass er sich von Autos
in der Cloud kümmert. Also ein spannendes
Thema und er redet über „Ansible all the
things“. Darum viel Spaß und
ich lerne jetzt bestimmt auch viel.
Applaus
Heiko Borchers: Ja, dann erst mal guten
Morgen an Tag 1. Ich hätte nicht
gedacht, dass an Tag 1 um die frühe
Uhrzeit schon so viele Leute hier sind.
Und ja ich werde darüber reden „Ansible
all the things“, was mir dann tatsächlich
geholfen hat, wie ich Ansible gelernt
habe. Zu mir: Ich bin Sysadmin, mach
hauptsächlich Cloud-Infrastruktur, wie der
Pupe ja auch schon gesagt hatte. Großteil
davon ist für Elektroautos und eigentlich
automatisiere ich mir halt am liebsten
alles weg. Und da sind halt dann für die
Cloud Terraform und Ansible auch im
täglichen Einsatz und meine Motivation für
diesen Talk war tatsächlich: Ansible ist
mein Lieblingstool und ich hab auf Twitter
viel dieses Jahr gelesen: Ja eigentlich würde
ich das sehr gerne lernen aber wie fange
ich an? Irgendwie kam viel, habe ich von
vielen Leuten gehört, dass sie keinen
Startpunkt gefunden haben und da wollte
ich jetzt dann halt mal einen Startpunkt
liefern. Erstmal: Warum mag ich Ansible so?
Ich arbeite viel mit Kundensystemen und
da dann noch mal irgendwas zusätzliches zu
installieren ist vielleicht nicht ganz so
optimal. Deswegen agentless, man braucht
auf dem Kundensystem später nichts mehr
zusätzlich, hat relativ wenig, was die
Software noch rummüllt, es braucht nicht
noch zusätzliche zentrale Infrastruktur,
wie man es teilweise mit Puppet hat, kann
man haben, muss man nicht nutzen. Ich finde
es war relativ leicht zu lernen, es ist
Open Source, was immer praktisch ist. Und
wenn man die Ansbile-Rollen richtig
geschrieben hat, kann man sie einmal
laufen lassen, zweimal laufen lassen, das
Ergebnis wird am Ende immer das Gleiche
sein. Ja, vielleicht: Warum nicht Ansible?
Es ist nicht unbedingt schnell und man
muss YAML lernen und YAML ist pingelig, was
Leerzeichen und Tabstops angeht. Da hat
man gerne mal ’ne falsche Einrückung und
am Ende fliegt einem alles um die Ohren.
Dann fange ich auch direkt mit den Basics
an: so sieht so eine Standard-
Ordnerstruktur aus von Ansible. Man hat
seine config, man hat eventuell Hashes von
irgendwelchen Credentials. Man hat
Variablen, die für ganze Gruppen da sind.
Man hat so ein hosts-File, wo sämtliche
Server drin stehen, die man hat. Man hat
ein sogenanntes Playbook, in dem drin
steht, was man mit seiner Infrastruktur
machen will und dann hat man verschiedene
Rollen. Und ja, wie sieht so eine Config
aus? Das ist jetzt tatsächlich meine
config, die ich auch normalerweise nutze.
Das ist tatsächlich halt wie jedes
andere config-File unter x-beliebigen
Betriebssystemen: einfach nur Key
und Value. Dann so ein ganz einfaches
Playbook. Das würde jetzt auf allen
Hosts laufen, die man so in seinem
Inventory stehen hat. Wie das Inventory
aussieht, zeige ich euch gleich noch.
Und man gibt hier halt noch ein
Variablen-File an und hat dann
verschiedene Rollen. Das ist jetzt
so das Playbook, was ich tatsächlich
immer als allererstes laufen
lasse, installiert die Rolle Packages,
da werden einfach so die Standardpakete,
die ich gerne habe, werden installiert.
Dann date_time: wird ein NTP-Server
konfiguriert. Über den hosts wird
die /etc/hosts noch angepasst und mit der
Rolle user kopiere ich tatsächlich meine
ganzen dot-files und alles, was ich gerne
an config habe, direkt auf den Server,
damit ich überall so arbeiten kann, wie es
mir am besten gefällt. Und ja da haben wir
dann jetzt so eine Rolle, das ist die
user-Rolle. Und da gibt es dann halt auch
wieder so eine Ordnerstruktur. Die
Ordnerstruktur lege ich mir für, jedes mal
wenn ich eine neue Rolle schreibe, lege
ich mir diese Ordnerstruktur mit defaults,
files, handlers, tasks und vars halt
einfach mit einem kleinen Bashskript an.
Die Ordner werden halt eh alle fast immer
gebraucht. Das sind so defaults, wirklich
default-Werte, die man setzt. Files sind
einfach nur Dateien, die ihr auf der
Maschine haben wollt, die keine Templates
sind sondern tatsächlich feste Files,
Binaries oder halt bei mir meine dot-
files. Und dann haben wir tatsächlich, das
sind die verschiedenen Tasks. Es wird das
sudoer-File erstmal an einen sicheren Ort
kopiert, das Original. Dann wird
tatsächlich einfach nur in der Datei ein
bisschen was geändert. Am Ende wird noch
ein Sanity-Check gemacht und nach dem
Sanity-Check, wenn alles so funktionieren
sollte, wird der ssh-daemon einfach neu
gestartet, damit man nicht … der Task ist
tatsächlich dafür da dass man nicht immer
als root auf den Server connecten muss
sondern mit seinem Nutzernamen und dann
mit seinem Nutzernamen sudo verwenden
kann. Das ist der Handler, der dann
aufgerufen wird, um den ssh-daemon
neu zu starten. Wird dann das Ansible-
Modul für systemd oder initV-Services
benutzt und es wird einfach nur geguckt,
beziehungsweise der Service wird neu
gestartet und wenn dann halt die Meldung
zurückkommt, „service has restarted“, ist
der Handler dann auch abgeschlossen. So
sieht halt auch so ein Task aus, hat einen
Namen, installiere die Base-Software, die
Pakete, wird geguckt, je nachdem welches
OS, ob jetzt ein CentOS haben oder ein
Debian, und dann wird die Liste an Paketen
einfach durch geguckt und das jeweilige
Paket installiert. Hier haben wir auch noch
mal dieses notify, es gibt halt dann dem
Handler die Info. Und bei dem Tag habe ich
halt noch reingeschrieben „new system“, das
Tag wird dann, wenn das System einmal
konfiguriert ist, auch gelöscht. Und hier
haben wir jetzt so einen Auszug aus einem
Variablen-File. Bei Debian heißen die
monitoring plugins, monitoring-plugins-
basic. Bei Red Hat heißen sie nagios
plugins und auf Arch Linux heißen sie halt
monitoring-plugins. und weil man in seiner
Rolle nicht jetzt in dem Fall drei
verschiedene Plugins, also drei
verschiedene Paketnamen angeben will, hat
man es halt in den Variablen-Dateien und
Ansible guckt vorher, welches
Betriebssystem ist das jetzt, was ich
provisioniere und nimmt dann
dementsprechend aus diesen Dreien das, was
für das Betriebssystem das Richtige ist.
Dann gibt es auch noch Variablen, die
möchte man nicht unbedingt im Klartext
haben. Wenn man zum Beispiel irgendwelche
Privat-Keys auf eine Maschine kopieren
muss oder für ein Cluster oder
Datenbankserver-Sync, wenn man mit Key-
Files arbeitet. Die schiebt man vielleicht
auch aus Versehen einmal ins git und dann
liegen sie im Klartext in irgendeinem git-
Repo. Ist doof. Dafür hat Ansible halt das
Ansible-Vault. Und dann steht da halt
erstmal nur drinnen: Ansible_Vault ist
AES256 verschlüsselt und quasi zufällige
Daten und ja ich weiß die sehen jetzt
nicht zufällig aus. Ich wollte hier keine
verschlüsselten Daten auf die Wand werfen.
Und ja so von den Basics her war es das
auch. Was man für Ansible sonst noch
braucht, ist einfach nur sein
Lieblingseditor, kann man mit vi oder
emacs machen, kann man aber auch mit IDEs
machen. Aber eigentlich braucht man nur
einen Texteditor und Ansible als Software
selber. Und was mir dabei tatsächlich
geholfen hat, es vernünftig zu lernen,
war, ich habe mir meinen RaspberryPi
zuhause genommen …
Moment, da hat ich doch auch noch eine
Slide, wo ist die denn hin verschwunden?
Warum habe ich diese Slide übersprüngen?
Das war nämlich das Inventory, das ist
halt auch wieder eine YAML-Datei.
Hier habe ich jetzt die Gruppe
MeineServer: mein root-Server, auf dem
auch die Präsentation gerade läuft und
mein RaspberryPi und um es mir selber
beizubringen, habe ich tatsächlich auf dem
RaspberryPi so die kleinste Debian
Installation genommen, die ich finden
konnte, und dann alles, was ich
auf dem Pi zuhause haben wollte,
per Ansible drauf installiert.
Erst mal mit kleinen Sachen
angefangen wie halt dem ntp-daemon
konfigurieren, dann für zuhause
vielleicht nicht ganz so relevant, aber
fail2ban konfigurieren. Solche kleineren
Sachen kann man relativ gut machen ohne
dass man sich das komplette System
zerschießt. Und dann halt später immer
größer werden. Und das ist tatsächlich
auch mein Tipp: Wer es lernen möchte, nimmt
sich halt einfach den Kleinstcomputer der
Wahl, packt da ein Linux drauf und bewirft
den erstmal mit Ansible. Von der
Performance her tut sich da eh nicht
soviel, ob man jetzt ein RaspberryPi oder
einen großen Rechner nimmt. Viel bei
Ansible ist Ausprobieren, Warten, Failen,
noch mal ausprobieren. Und, ja, ansonsten
wäre ich jetzt durch. Wenn Fragen sind,
könnt ihr gerne auch noch Fragen stellen.
Herald: Erstmal einen warmen Applaus bevor
wir hier irgendwie mit
Fragen anfangen, weil …
Applaus
Herald: So, es werden sich ja gleich hier
links und rechts die Lampen zum
Telefonjoker eröffnen, das heißt, wer
Fragen hat, gerne dort. Wo kann man dich
erreichen, wenn man jetzt irgendwie Blut
geleckt hat, mit dem was du hier gemacht
hast, dass man während des Congress noch
mal auf dich zukommt, in welchem …
Heiko: auf dem Congress, ich renn
eigentlich immer rum
Herald: Stehst unter deinen
Namen im DECT-System?
Heiko: Ja, ich stehe unter meinem Namen im
DECT-System. Die Slides werde ich auch
gleich dann by Chaos-West beim Talk noch
hinzufügen, wer sie sich noch mal angucken
will. Und in den Slides steht auch später
noch der Link zum GitHub-Repo mit den
Slides selber.
Herald: Ja, das ist ja vorbildlich! Da
würde ich sagen volle Punktzahl, keine
Fragen mehr, an der Stelle dann aber
nochmal ein Applaus, weil so einfach
lassen wir keinen von der Bühne gehen.
Applaus
Abspannmusik
Untertitel erstellt von c3subtitles.de
im Jahr 2020. Mach mit und hilf uns!