1 00:00:00,146 --> 00:00:17,920 *36C3 Vorspannmusik* 2 00:00:17,920 --> 00:00:21,851 Herald: Applaus, Applaus, Applaus, Applaus, weil an der Stelle ein riesiges 3 00:00:21,851 --> 00:00:25,591 Applaus für Heiko Borchers. *Applaus* 4 00:00:25,591 --> 00:00:30,350 Herald: Er ist Fachinformatiker und in seiner Vita steht, dass er sich von Autos 5 00:00:30,350 --> 00:00:35,096 in der Cloud kümmert. Also ein spannendes Thema und er redet über „Ansible all the 6 00:00:35,096 --> 00:00:38,640 things“. Darum viel Spaß und ich lerne jetzt bestimmt auch viel. 7 00:00:38,640 --> 00:00:44,130 *Applaus* 8 00:00:44,130 --> 00:00:48,400 Heiko Borchers: Ja, dann erst mal guten Morgen an Tag 1. Ich hätte nicht 9 00:00:48,400 --> 00:00:52,890 gedacht, dass an Tag 1 um die frühe Uhrzeit schon so viele Leute hier sind. 10 00:00:52,890 --> 00:00:57,862 Und ja ich werde darüber reden „Ansible all the things“, was mir dann tatsächlich 11 00:00:57,862 --> 00:01:08,180 geholfen hat, wie ich Ansible gelernt habe. Zu mir: Ich bin Sysadmin, mach 12 00:01:08,180 --> 00:01:12,830 hauptsächlich Cloud-Infrastruktur, wie der Pupe ja auch schon gesagt hatte. Großteil 13 00:01:12,830 --> 00:01:17,540 davon ist für Elektroautos und eigentlich automatisiere ich mir halt am liebsten 14 00:01:17,540 --> 00:01:23,550 alles weg. Und da sind halt dann für die Cloud Terraform und Ansible auch im 15 00:01:23,550 --> 00:01:29,660 täglichen Einsatz und meine Motivation für diesen Talk war tatsächlich: Ansible ist 16 00:01:29,660 --> 00:01:34,490 mein Lieblingstool und ich hab auf Twitter viel dieses Jahr gelesen: Ja eigentlich würde 17 00:01:34,490 --> 00:01:42,250 ich das sehr gerne lernen aber wie fange ich an? Irgendwie kam viel, habe ich von 18 00:01:42,250 --> 00:01:47,320 vielen Leuten gehört, dass sie keinen Startpunkt gefunden haben und da wollte 19 00:01:47,320 --> 00:01:52,650 ich jetzt dann halt mal einen Startpunkt liefern. Erstmal: Warum mag ich Ansible so? 20 00:01:52,650 --> 00:01:56,619 Ich arbeite viel mit Kundensystemen und da dann noch mal irgendwas zusätzliches zu 21 00:01:56,619 --> 00:02:04,180 installieren ist vielleicht nicht ganz so optimal. Deswegen agentless, man braucht 22 00:02:04,180 --> 00:02:11,200 auf dem Kundensystem später nichts mehr zusätzlich, hat relativ wenig, was die 23 00:02:11,200 --> 00:02:17,510 Software noch rummüllt, es braucht nicht noch zusätzliche zentrale Infrastruktur, 24 00:02:17,510 --> 00:02:24,910 wie man es teilweise mit Puppet hat, kann man haben, muss man nicht nutzen. Ich finde 25 00:02:24,910 --> 00:02:31,879 es war relativ leicht zu lernen, es ist Open Source, was immer praktisch ist. Und 26 00:02:31,879 --> 00:02:35,260 wenn man die Ansbile-Rollen richtig geschrieben hat, kann man sie einmal 27 00:02:35,260 --> 00:02:39,110 laufen lassen, zweimal laufen lassen, das Ergebnis wird am Ende immer das Gleiche 28 00:02:39,110 --> 00:02:46,250 sein. Ja, vielleicht: Warum nicht Ansible? Es ist nicht unbedingt schnell und man 29 00:02:46,250 --> 00:02:54,650 muss YAML lernen und YAML ist pingelig, was Leerzeichen und Tabstops angeht. Da hat 30 00:02:54,650 --> 00:03:01,480 man gerne mal ’ne falsche Einrückung und am Ende fliegt einem alles um die Ohren. 31 00:03:01,480 --> 00:03:07,730 Dann fange ich auch direkt mit den Basics an: so sieht so eine Standard- 32 00:03:07,730 --> 00:03:14,070 Ordnerstruktur aus von Ansible. Man hat seine config, man hat eventuell Hashes von 33 00:03:14,070 --> 00:03:21,130 irgendwelchen Credentials. Man hat Variablen, die für ganze Gruppen da sind. 34 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 35 00:03:26,720 --> 00:03:30,590 ein sogenanntes Playbook, in dem drin steht, was man mit seiner Infrastruktur 36 00:03:30,590 --> 00:03:37,150 machen will und dann hat man verschiedene Rollen. Und ja, wie sieht so eine Config 37 00:03:37,150 --> 00:03:42,910 aus? Das ist jetzt tatsächlich meine config, die ich auch normalerweise nutze. 38 00:03:42,910 --> 00:03:48,370 Das ist tatsächlich halt wie jedes andere config-File unter x-beliebigen 39 00:03:48,370 --> 00:03:57,560 Betriebssystemen: einfach nur Key und Value. Dann so ein ganz einfaches 40 00:03:57,560 --> 00:04:03,440 Playbook. Das würde jetzt auf allen Hosts laufen, die man so in seinem 41 00:04:03,440 --> 00:04:08,200 Inventory stehen hat. Wie das Inventory aussieht, zeige ich euch gleich noch. 42 00:04:08,200 --> 00:04:15,790 Und man gibt hier halt noch ein Variablen-File an und hat dann 43 00:04:15,790 --> 00:04:19,480 verschiedene Rollen. Das ist jetzt so das Playbook, was ich tatsächlich 44 00:04:19,480 --> 00:04:24,270 immer als allererstes laufen lasse, installiert die Rolle Packages, 45 00:04:24,270 --> 00:04:29,820 da werden einfach so die Standardpakete, die ich gerne habe, werden installiert. 46 00:04:29,820 --> 00:04:37,860 Dann date_time: wird ein NTP-Server konfiguriert. Über den hosts wird 47 00:04:37,860 --> 00:04:42,660 die /etc/hosts noch angepasst und mit der Rolle user kopiere ich tatsächlich meine 48 00:04:42,660 --> 00:04:46,860 ganzen dot-files und alles, was ich gerne an config habe, direkt auf den Server, 49 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 50 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 51 00:05:05,720 --> 00:05:10,091 wieder so eine Ordnerstruktur. Die Ordnerstruktur lege ich mir für, jedes mal 52 00:05:10,091 --> 00:05:15,940 wenn ich eine neue Rolle schreibe, lege ich mir diese Ordnerstruktur mit defaults, 53 00:05:15,940 --> 00:05:20,359 files, handlers, tasks und vars halt einfach mit einem kleinen Bashskript an. 54 00:05:20,359 --> 00:05:27,379 Die Ordner werden halt eh alle fast immer gebraucht. Das sind so defaults, wirklich 55 00:05:27,379 --> 00:05:35,580 default-Werte, die man setzt. Files sind einfach nur Dateien, die ihr auf der 56 00:05:35,580 --> 00:05:41,139 Maschine haben wollt, die keine Templates sind sondern tatsächlich feste Files, 57 00:05:41,139 --> 00:05:54,009 Binaries oder halt bei mir meine dot- files. Und dann haben wir tatsächlich, das 58 00:05:54,009 --> 00:06:02,240 sind die verschiedenen Tasks. Es wird das sudoer-File erstmal an einen sicheren Ort 59 00:06:02,240 --> 00:06:14,139 kopiert, das Original. Dann wird tatsächlich einfach nur in der Datei ein 60 00:06:14,139 --> 00:06:26,970 bisschen was geändert. Am Ende wird noch ein Sanity-Check gemacht und nach dem 61 00:06:26,970 --> 00:06:32,529 Sanity-Check, wenn alles so funktionieren sollte, wird der ssh-daemon einfach neu 62 00:06:32,529 --> 00:06:39,210 gestartet, damit man nicht … der Task ist tatsächlich dafür da dass man nicht immer 63 00:06:39,210 --> 00:06:43,370 als root auf den Server connecten muss sondern mit seinem Nutzernamen und dann 64 00:06:43,370 --> 00:06:50,680 mit seinem Nutzernamen sudo verwenden kann. Das ist der Handler, der dann 65 00:06:50,680 --> 00:06:55,949 aufgerufen wird, um den ssh-daemon neu zu starten. Wird dann das Ansible- 66 00:06:55,949 --> 00:07:04,380 Modul für systemd oder initV-Services benutzt und es wird einfach nur geguckt, 67 00:07:04,380 --> 00:07:10,229 beziehungsweise der Service wird neu gestartet und wenn dann halt die Meldung 68 00:07:10,229 --> 00:07:18,470 zurückkommt, „service has restarted“, ist der Handler dann auch abgeschlossen. So 69 00:07:18,470 --> 00:07:28,610 sieht halt auch so ein Task aus, hat einen Namen, installiere die Base-Software, die 70 00:07:28,610 --> 00:07:36,770 Pakete, wird geguckt, je nachdem welches OS, ob jetzt ein CentOS haben oder ein 71 00:07:36,770 --> 00:07:48,120 Debian, und dann wird die Liste an Paketen einfach durch geguckt und das jeweilige 72 00:07:48,120 --> 00:08:01,669 Paket installiert. Hier haben wir auch noch mal dieses notify, es gibt halt dann dem 73 00:08:01,669 --> 00:08:10,639 Handler die Info. Und bei dem Tag habe ich halt noch reingeschrieben „new system“, das 74 00:08:10,639 --> 00:08:15,509 Tag wird dann, wenn das System einmal konfiguriert ist, auch gelöscht. Und hier 75 00:08:15,509 --> 00:08:23,550 haben wir jetzt so einen Auszug aus einem Variablen-File. Bei Debian heißen die 76 00:08:23,550 --> 00:08:29,160 monitoring plugins, monitoring-plugins- basic. Bei Red Hat heißen sie nagios 77 00:08:29,160 --> 00:08:36,070 plugins und auf Arch Linux heißen sie halt monitoring-plugins. und weil man in seiner 78 00:08:36,070 --> 00:08:43,751 Rolle nicht jetzt in dem Fall drei verschiedene Plugins, also drei 79 00:08:43,751 --> 00:08:49,280 verschiedene Paketnamen angeben will, hat man es halt in den Variablen-Dateien und 80 00:08:49,280 --> 00:08:53,150 Ansible guckt vorher, welches Betriebssystem ist das jetzt, was ich 81 00:08:53,150 --> 00:08:57,880 provisioniere und nimmt dann dementsprechend aus diesen Dreien das, was 82 00:08:57,880 --> 00:09:05,370 für das Betriebssystem das Richtige ist. Dann gibt es auch noch Variablen, die 83 00:09:05,370 --> 00:09:11,780 möchte man nicht unbedingt im Klartext haben. Wenn man zum Beispiel irgendwelche 84 00:09:11,780 --> 00:09:17,639 Privat-Keys auf eine Maschine kopieren muss oder für ein Cluster oder 85 00:09:17,639 --> 00:09:22,610 Datenbankserver-Sync, wenn man mit Key- Files arbeitet. Die schiebt man vielleicht 86 00:09:22,610 --> 00:09:26,751 auch aus Versehen einmal ins git und dann liegen sie im Klartext in irgendeinem git- 87 00:09:26,751 --> 00:09:32,709 Repo. Ist doof. Dafür hat Ansible halt das Ansible-Vault. Und dann steht da halt 88 00:09:32,709 --> 00:09:39,500 erstmal nur drinnen: Ansible_Vault ist AES256 verschlüsselt und quasi zufällige 89 00:09:39,500 --> 00:09:43,690 Daten und ja ich weiß die sehen jetzt nicht zufällig aus. Ich wollte hier keine 90 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 91 00:09:54,949 --> 00:09:58,930 auch. Was man für Ansible sonst noch braucht, ist einfach nur sein 92 00:09:58,930 --> 00:10:05,979 Lieblingseditor, kann man mit vi oder emacs machen, kann man aber auch mit IDEs 93 00:10:05,979 --> 00:10:10,640 machen. Aber eigentlich braucht man nur einen Texteditor und Ansible als Software 94 00:10:10,640 --> 00:10:17,130 selber. Und was mir dabei tatsächlich geholfen hat, es vernünftig zu lernen, 95 00:10:17,130 --> 00:10:20,135 war, ich habe mir meinen RaspberryPi zuhause genommen … 96 00:10:20,135 --> 00:10:27,160 Moment, da hat ich doch auch noch eine Slide, wo ist die denn hin verschwunden? 97 00:10:27,160 --> 00:10:37,860 Warum habe ich diese Slide übersprüngen? Das war nämlich das Inventory, das ist 98 00:10:37,860 --> 00:10:43,980 halt auch wieder eine YAML-Datei. Hier habe ich jetzt die Gruppe 99 00:10:43,980 --> 00:10:47,970 MeineServer: mein root-Server, auf dem auch die Präsentation gerade läuft und 100 00:10:47,970 --> 00:10:53,199 mein RaspberryPi und um es mir selber beizubringen, habe ich tatsächlich auf dem 101 00:10:53,199 --> 00:10:57,940 RaspberryPi so die kleinste Debian Installation genommen, die ich finden 102 00:10:57,940 --> 00:11:02,450 konnte, und dann alles, was ich auf dem Pi zuhause haben wollte, 103 00:11:02,450 --> 00:11:07,339 per Ansible drauf installiert. Erst mal mit kleinen Sachen 104 00:11:07,339 --> 00:11:13,259 angefangen wie halt dem ntp-daemon konfigurieren, dann für zuhause 105 00:11:13,259 --> 00:11:17,109 vielleicht nicht ganz so relevant, aber fail2ban konfigurieren. Solche kleineren 106 00:11:17,109 --> 00:11:21,360 Sachen kann man relativ gut machen ohne dass man sich das komplette System 107 00:11:21,360 --> 00:11:26,420 zerschießt. Und dann halt später immer größer werden. Und das ist tatsächlich 108 00:11:26,420 --> 00:11:32,460 auch mein Tipp: Wer es lernen möchte, nimmt sich halt einfach den Kleinstcomputer der 109 00:11:32,460 --> 00:11:38,560 Wahl, packt da ein Linux drauf und bewirft den erstmal mit Ansible. Von der 110 00:11:38,560 --> 00:11:42,250 Performance her tut sich da eh nicht soviel, ob man jetzt ein RaspberryPi oder 111 00:11:42,250 --> 00:11:47,110 einen großen Rechner nimmt. Viel bei Ansible ist Ausprobieren, Warten, Failen, 112 00:11:47,110 --> 00:11:56,740 noch mal ausprobieren. Und, ja, ansonsten wäre ich jetzt durch. Wenn Fragen sind, 113 00:11:56,740 --> 00:12:01,380 könnt ihr gerne auch noch Fragen stellen. Herald: Erstmal einen warmen Applaus bevor 114 00:12:01,380 --> 00:12:04,690 wir hier irgendwie mit Fragen anfangen, weil … 115 00:12:04,690 --> 00:12:08,029 *Applaus* 116 00:12:08,029 --> 00:12:13,020 Herald: So, es werden sich ja gleich hier links und rechts die Lampen zum 117 00:12:13,020 --> 00:12:18,280 Telefonjoker eröffnen, das heißt, wer Fragen hat, gerne dort. Wo kann man dich 118 00:12:18,280 --> 00:12:22,200 erreichen, wenn man jetzt irgendwie Blut geleckt hat, mit dem was du hier gemacht 119 00:12:22,200 --> 00:12:26,470 hast, dass man während des Congress noch mal auf dich zukommt, in welchem … 120 00:12:26,470 --> 00:12:29,130 Heiko: auf dem Congress, ich renn eigentlich immer rum 121 00:12:29,130 --> 00:12:31,539 Herald: Stehst unter deinen Namen im DECT-System? 122 00:12:31,539 --> 00:12:36,149 Heiko: Ja, ich stehe unter meinem Namen im DECT-System. Die Slides werde ich auch 123 00:12:36,149 --> 00:12:40,630 gleich dann by Chaos-West beim Talk noch hinzufügen, wer sie sich noch mal angucken 124 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 125 00:12:45,153 --> 00:12:47,939 Slides selber. Herald: Ja, das ist ja vorbildlich! Da 126 00:12:47,939 --> 00:12:51,640 würde ich sagen volle Punktzahl, keine Fragen mehr, an der Stelle dann aber 127 00:12:51,640 --> 00:12:55,163 nochmal ein Applaus, weil so einfach lassen wir keinen von der Bühne gehen. 128 00:12:55,163 --> 00:12:57,678 *Applaus* 129 00:12:57,678 --> 00:13:03,530 *Abspannmusik* 130 00:13:03,530 --> 00:13:25,000 Untertitel erstellt von c3subtitles.de im Jahr 2020. Mach mit und hilf uns!