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