 Hi zusammen. Oder auch, falls jemand einen kleinen kardialen Handshake braucht. Moin! So, jetzt sind wir wach. Auch schon die erste Mate drin. Zum allvorträglichen Morgensport möchte ich aufrufen. Wer hat irgendwie Chef so am Laufen? Egal, ob testmäßig oder produktiv oder Hände hoch. Uno. Fuck. Okay. Chef. Ja, also. DevOps, Bla, Mindset. Wir müssen alle umdenken und ach du Scheiße, wir machen ja alles falsch. Ja, wenn ich vor meiner Infrastruktur stehe und mir wird erzählt, wie andere Firmen das alles total hipstermäßig cool machen und man hat dann ein Kumpel, der wird dort eingestellt und er kriegt dann, er kriegt man auch von dieser jenem Kumpel, der Person erzählt, was auch diese Firmen falsch machen. Also lasst euch von diesem Hype nicht allzu sehr, weil auch wenn man sein Zeug so total hipstermäßig in die Cloud packt oder auch so Sachen mit OpenStack, können auch ziemlich extrem schief gehen. Aber es ist schon toll, was jetzt mittlerweile da so alles gibt, aber klar. Let's Code. Chef. Was ist Chef? Ich habe mir das mal angeguckt. Das ist toll, so ein bisschen. So, weil A, ich dachte, das ist ein Professionierer. Also sagen wir es mal so, dass die Toolchain, die sich da um Chef rumaufgebaut hat, die ist mittlerweile beträchtlich oder auch das, was sich um die anderen Professionierer rumgebildet hat, was man mit Chef mitverwenden kann. So tolle Sachen wie Serverspack, aber dazu kommen wir nachher. TLDR wäre schon mal mit Puppet, Puppet, Hände hoch, Puppet. Ui, ah, dann doch schon, ja. Was macht die anderen eigentlich? CF Engine, Hände hoch. Okay. Best Scripte. Ihr seid klasse. Hä? Okay. Salt. Ja, okay. Ja, cool. Also von diesem Standard, von dem man ausgeht, wenn man sagt, okay, hier, ich professioniere, TLDR, ich habe Master, der gibt vor und ich habe Notes, die holen sich vom Master die Informationen, was sie tun sollen. Ist ziemlich einfach, verständlich, kennen wir es schon seit Ewigkeiten. Ist nicht nur im Professionierungsbereich so. So auch bei den Chef Notes, bei den Client Notes. Allerdings kann man das noch auf acht andere Arten und Weisen lösen. Und da wird es dann richtig interessant, aber wir fangen mal klein an. Ich habe mir gedacht, es gibt andere Leute, die viel besser Vorträge halten können, als mich über was ist der Forbes. Es gibt andere Leute, die viel besser Vorträge drüberhalten können, als ich mit was ist Chef und wie tut das? Deswegen habe ich mir gedacht, TLDR, wir coden. Aber vorher noch mal ganz kurz, wie sieht so Chef aus? Ich habe da einfach mal was aufgemacht. Also Papetisten, die werden sagen, ich habe da so Ressourcen und in meinem Code steht dann da drin, wie die auszusehen haben. Meine Ressourcen, wie zum Beispiel hier, dass ich ein Directory angebe, dass das existieren muss. Oder wenn nicht existiert, wird erstellt, das gibt die Action hier an. Aber es sitzt nur bei Beispiel Code, den gucken wir uns gleich genauer an. Ja, also ich finde das auch deklarativ ziemlich easy zu verstehen. Also owner group mode. Also jeder, der da schon mal ein Rechner benutzt hat, sollte wissen, was das bedeutet. Ressourcen gibt es unheimlich viele. Und mit Community Koch Büchern gibt es noch extrem viele mehr. Also ich kann hier mir ein Jam reinladen. Ich kann mir was von einem GitRepo holen. Ich kann GitRepo aufmachen. Ich kann Gruppen angeben. Ich habe mich unheimlich viel. Ja, also die Firma Hinterchef, die hat ein paar Sachen verpeilt, macht allerdings dafür auch ein paar Sachen besser als Puppet. Community haben sie nicht so drauf, leider. Dafür muss man sagen, das was die da gerade hochfahren, ist extrem sexy. Also hier haben zum Beispiel mit Chef Delivery die Pipeline, das Tool, was sie hier für die Pipeline erschaffen ist, ziemlich mächtig. Aber ist sowieso noch nicht fertig, alles was ich hier jetzt dazu erzählen kann, ist eh spekulativ, weil man nicht weiß, wann es kommt. Das heißt irgendwie Ende dieses nächstes Jahr, egal. Wie gesagt, ich kann mit Chef das alles noch auf ganz viele andere Arten machen. Hier zum Beispiel hat jemand schon mal Terraform angeguckt, von HashiCorp, die auch Vagrant Terraform ist, so ein ziemlich Maschinenhochding. Auch das gibt es hier mittlerweile mit Chef Provisioning, nennt sich das dann. Und zwar, ich sage auf irgendeiner Note, die ich irgendwo im Netzhab fahren mir auf diesen Mastersohn so viele Notes mit diesen und diesen Attributen hoch. Also ich brauche zwei Reverse Proxies und vier Web-Notes und drei Datenbank-Notes und das ist produktiv. Und dann machen wir das noch für QA und da möchte ich gerne meine Kochbuchertesten und wenn das alles durchgelaufen ist, dann schiebt das in Staging und da fahre ich meine Akzeptanz-Tests dagegen und dann machen denen es schwenk, wenn das passt so. Das ist alles unheimlich toll. Aber wir wollen ja, wie gesagt, koden. Ein paar Seiten müssen wir noch aufmachen. Wie gesagt, Chef gibt es auch als... Preparation. Nee, nicht V-Chef. Gerade wegen diesen auf vielen Arten und weisen, wie ich das tun kann, gibt es heute auch das Problem. Für was brauche ich überhaupt den Master-Server und für was nicht. Für was kann ich irgendwie Stateless was hochziehen. Wie kann ich irgendwie... Lässt es meine Infrastruktur zu, dass ich ein Gebundel, das Kochbuch gegen den Node schmeiße und dann den Master nicht mehr brauche, weil ich zum Beispiel Konsul verwende oder so. Konsul ist von HashiCorp Auto Discovery Tool, falls jemand nicht kennt. Es gibt es erst mal als Hosted und als On-Premises, also zum selber Hosten. Wo habe ich hier meine Pricings? Nein, nicht sein. Ach ja, hier. Kann ich entweder selber laufen lassen oder kann ich Hosted laufen lassen? Natürlich ist die Firma wie jede andere Firma und möchte erst mal Geld. Ist auch ganz normal und verständlich. Hält sich allerdings sehr im Rahmen. Also wenn ich jetzt nicht gerade so wie du hier mit sehr, sehr, sehr, sehr vielen Notes zu tun habe, sollte sich 6 Dollar pro Node eigentlich... Allerdings gibt es auch hier ein paar Pitfalls. Ich weiß nicht, wie das mit Hosted Chef weitergehen wird. Das weiß auch Chefs, glaube ich, selber nicht. Es gibt hier ein paar Sachen, die sind bei Hosted Chef nicht mit drin, wie zum Beispiel Chef Analytics. Das ist auch mächtig, aber wie gesagt, wir wollen ja Koden. Das ist Hosted Chef in der Oberfläche. Die kann man auch auf seiner selber gehosteten Chef-Server-Instanz mitinstallieren. Das ist quasi ein Plug-in für Chef-Server. Ist halt auch grundsätzlich die Frage mit jedem Paid-Service, den ich nehme. Auch wenn ich das im Free-Service-Paket nehme. Wenn ich das selber hochfahre, dann gehört das alles mir. Dann kann ich mir wieder meinen Aluhut aufsetzen. Aber möchte ich das maintain? Nur weil der mir jetzt zum Beispiel, wenn dem so wäre und ich das nicht von Hand angeben könnte, wenn der mir so einen Postgres unter dem Hintern reinschiebt, weil der halt mit Postgres funktioniert. Habe ich Leute, die es nicht mit Postgres auskennen, weil wenn Postgres in einem Chef-Server zusammenfällt und meine Infrastruktur darauf basiert, dass das läuft, dann habe ich vielleicht ein Problem. Also wie gesagt, Oberfläche, man kann hier alles angucken. Und unter den Reports, wenn man dann mal was available hat, nicht so wie ich, weil ich ihn eigentlich nie gebraucht habe, dann zieht man hier auch schöne Grafen. TLDR, die können auch weg 2.0. Also was steckt da drin? Und bevor wir jetzt hier weitermachen, koden wir. So, ich habe hier ein Jam, nee, ein Kochbuch erstellt. In dem Kochbuch, da ist erstmal nichts drin. Jetzt wollen wir wissen, wie wir das machen. Und zwar schreiben wir ein Recipe. Was soll dieses Recipe machen? Dieses Recipe soll uns irgendwie einen Nutzer erstellen. Ich möchte diesen Nutzer auf dem System dafür nutzen, um mich einzulocken als dieser Nutzer. Dem gebe ich dann ein Authorize-Keyfile. Über SSH kann ich dann in den Rheinschwenken ist. Einer der vielen Anwendungsfälle. Und zwar, wie starte ich damit? Das Schöne ist, für die Entwicklung von dem Ding brauche ich auch keinen Chef-Server. Ich fahre hier mal, dafür brauche ich eine Shell. Genau, dann gehe ich da, so, genau. Neif ist das Totschlag-Zieleitool, mit dem man so gut wie alles machen kann, was mit Chef zu tun hat. In dem normalen Chef-Dingens, also das Ding kann viel. Auch über Plugins. Hier kann ich zum Beispiel sagen, erstellen wir hier mal Digital Ocean Droplet. So, kann viel. Also, hat auch ESX Plugins für Private Cloud und so weiter. Das Licht ist hell und warm. Aber ja, wir wollen ja koden. Wie fangen wir an? Wir sagen, wir wollen eine Group. Diese Group kriegt einen Namen. Und dieser Name, den kann ich hier reinschreiben, weil Leute nicht draufstehen, wenn ich da Text so reinschreibe. Warum? Weil sie dann das Kochbuch, das ich hier mit erstelle, das dann jeder einfach so benutzen kann, müsste er dann anfassen. Und das ist doof, weil dann müsste er mein Kochbuch editieren. Und das ist doof, weil, ja, weil das doof ist. Wir haben für jede Note Attributes und diese Attributes, die können wir anlegen. Wer schon mal mit Provisionierern gearbeitet hat, der weiß auch, dass da meistens so ein Programm gibt. Das gibt mir über von der Note so unheimlich viele Daten zurück. Das heißt bei Chef Ohai. Wenn ich in die Konsole eingebe, können wir gerade mal, nicht, Ohai, Ohai. Kommt da ein riesig großes Jason-Objekt zurück. Also mit allem, was das Herz begehrt. Informationen über Gruppen, laufende Prozesse, meine Mounts, wo mein Ruby ist und so weiter. Ist ja egal. Diese Note, diese Attributes, die sind notespezifisch, kann ich aber auch manuell bearbeiten. Was möchte ich also machen? Ich möchte dem Nutzer die Möglichkeit geben, dass ich den Namen unserer jetzt zu erstellenden Gruppe manuell setzen kann. Also erstelle ich mir eine Attributes-File und sage hier mach mir, ich nenne das jetzt einfach mal User-Management, setze ich mir hier eine Group-ID und Group-Name so. Jetzt steht es da im Klartext. Allerdings, wenn das da steht, ist das kein Problem. Weil derjenige, der nachher mein Kochbuch anwendet, der kann einfach diese Attributes überschreiben. So, damit wir, liegt noch gut in der Zeit. Jetzt, wo wir das gesetzt haben, gehen wir in unser Recipe und sagen, ich möchte hier darauf zugreifen. Das ist unglaublich, ich treffe nichts. So, ich nehme mir also die Daten von meiner Attributes-File, wo ich hier auch eine Group-ID gesetzt habe. Und wenn ich das so schreibe, hatte Nutzer nachher die Möglichkeit, das alles von Hand zu setzen und alles ist grün. Damit wir ein bisschen schneller vorankommen, weil ich bin hier jetzt echt anscheinend unfähig, auch nur irgendwas sinnvoll zu schreiben. Kopiere ich das mal von einer fertigen Version in meinem GitHub-Account so rein. Was übers unbräuchlich ist, ungebräuchlich ist, Ruby versteht das, wenn ich Zahlen so schreibe, dass ich die Tausender Stelle mit Unterstrich ist. Eine Stylefrage, ob man das mag oder nicht, nur falls euch verwirrt. Ich kopiere das jetzt mal auch mein Recipe da rein. Also, was machen wir hier? Wir haben uns unsere Attribute, wie zum Beispiel den Namen. Wir erstellen eine Gruppe mit diesem Namen. Diese sollte erstellt werden, auch wenn sie nicht existiert. Wenn sie existiert, soll sie in Ruhe gelassen werden. Wir setzen erst mal die Members auf Null, weil das machen wir nachher in der User-Ressource, geben den Link eine Group-ID. Wir erstellen uns einen Benutzer mit einem Home-Directory geben, im Comment, also ganz normales Zeug halt. User-Shale kann ich setzen, muss ich nicht. Normalerweise müsste ich hier noch eine Abfrage reinmachen, aber ich erstelle ihm ein Directory, ich erstelle ihm eine Authorized-Keyfile. Diese würde optimalerweise hier unter Files drin liegen, aber ich habe jetzt hier kein SSH-Account, kein SSH-Key dafür erstellt, das gucken wir uns gleich an. Okay, sehr schön. Und erstelle mir dazu, nach der Authorized-Keyfile durch SSH neu starten. Jetzt gibt es da ein Tooling außen rum. Das kann ich mir reinziehen, wenn ich möchte, weil was gescheite Software ist getestet. Davor erst mal die Frage, wie installiere ich Chef? Wer hier in der glücklichen Situation ist, ein Ubuntu auf dem Laptop laufen zu lassen, oder wer in der glücklichen Situation ist, eines dieser Betriebssysteme laufen zu lassen, der darf das tun? Der Chef-Development-Kit, da stecken interessante Dinge drin, eigentlich auf gut Deutsch, so gut wie alles, was man braucht. Wer allerdings, wie ich, etwas anderes, z.B. Gentoo laufen hat, der macht das hier. Jetzt wollen wir natürlich wissen, wie kriegen wir das Zeug getestet. Weil ich habe euch jetzt gezeigt, wie man Recipe schreibt und ihr könnt damit erst mal nichts anfangen, wenn ihr euch Chef noch nicht angeguckt habt. Deswegen wechseln wir mal in ein funktionierendes System. Und da haben wir auch so die Standard Ruby Sachen drin. Wie z.B. Guard, gibt es irgendjemand, dem Guard nichts sagt? Guard ist ein Ruby Jam, das macht auf eurer CLI, ist dauerlaufend und watcht auf Changes und führt dann Dinge aus. Der Node-Hip-Store kennt so etwas, als, wie heißt es, schon lange nicht mehr gemacht, Grant, genau Grant. Wir gucken in die Jam-File rein und sehen hier, wir brauchen Dinge für Development und wir brauchen Dinge für Testing. Das ist alles für Testing, aber damit brauchen wir uns jetzt auch nicht weiter. Auch die Guard-File, also wer schon mal Grant oder Galt gesehen hat, der kennt das auch. Wir fangen mal an und gucken uns das an. Was kann das? Rubocop stinkt normal, linde mir meine Sündtags, weil ich habe ein Team von 20 Devs und wir haben uns auf einen Code Style geeinigt und sag mir, wenn ich gegen den verstoße. FoodCreatic ist ein Programm, das lauscht, während ich schreibe auf Chef und sag mir, ob ich sementische Fehler mache. Das heißt, es gibt so Common Pitfalls, die wurden in ein Ruleset zusammengefasst. Dieses Ruleset wird gegen alles geschmissen, was sich code und da wird geguckt, ob ich gegen grundsätzliche Dinge, die das Chef-Team oder die Chef-Community für Fahrlässig hält, verstößt. Erstback ist einfach nur Unit-Testing gegen Chef. So, und wie sieht das aus? Wo habe ich jetzt mein A? Ja, wie sieht das aus? Ich habe hier mein Recipe, wenn ich meine Maus... Ah, genau. Ich habe hier mein Recipe, meine Attributesfile und bin im Falschen, genau. Ich habe auch hier meine Attributesfile, die kann jeder Nutzer so setzen, wie er Lust drauf hat. Ich habe mein SSH-Key, ich habe mein Recipe, was wir uns angeschaut haben und jetzt starte ich mal die CLI dazu. Er hat mein Cookbook gelintet und er hat die Unit-Tests dazu gefahren. Wie sehen die Unit-Tests aus? Im Prinzip, man muss ja das aufdröseln so ein bisschen, wie man es auch mit jedem System machen muss. Was für eine Form von Tests habe ich? Ich habe Unit-Tests, ich habe Integration-Tests und ich habe vielleicht Akzeptanz-Tests, dafür gibt es noch ein paar andere Stufen, ich muss auch ein bisschen überlegen, was macht im Provisioning-Testing Sinn. Ich kann jetzt hier sagen, ich mache erstmal, wenn ich hier zum Beispiel große IF-Schleifen habe, wenn ich große IF-Blocks habe, wo ich zum Beispiel sage, installiere mir das Paket-Git, aber das Paket-Git heißt in unterschiedlichen Distributionen unterschiedlich. Also sage ich zum Beispiel, wenn ich in diesem Betriebssystem bin, möchte ich gerne, dass dieser Paketname installiert wird, wenn ich das zum Beispiel mache, dann muss ich zum Beispiel schon mal ein Unit-Test-Provideen, der sagt oder sicherstellt, dass mir auch garantiert, unter diesem Betriebssystem dieses Paket installiert wird. Dann lege ich mir ein Spec-Directory an und tu hier solche Dinge wie, ja, auch wer schon mal Ruby-Spec verwendet hat, dem sollte das auch bekannt vorkommen, wem nicht, sage ich das auch hier, ein Rescriptive-Syntax drin ist. Also ich beschreibe mein Kochbuch, da lasse ich ein Solo-Runner drauf. Was ist ein Solo-Runner? Chef gibt es einmal als Klein-Node, Note-Master, dann gibt es noch Chefs Zero und Solo, das sind quasi in Ramm laufende Chef-Instanzen, die gegen die Node geworfen werden. So, mach mal diese Dinge, die da drin stehen. Ich gehe davon aus, dass dieser Chef-Run einen User erstellt, mit diesem Namen, das ist der Pro-Node, von dem, der dann das Kochbuch anwendet, von Hand gesetzt werden kann, mit diesen Variablen. Also im Prinzip kann man sagen, ich habe den Inhalt meines Kochbuches da reinkopiert und gehe davon aus, dass das so ausgeführt wird. Das Kochbuch ist das auch noch einfach. Es gibt aber so tolle Kochbücher wie das PHP Kochbuch von Opscode, also den Leuten, die auch unter anderem bei Chef arbeiten, die unterstützen sehr viele Plattformen. So, und dann wird es erst richtig interessant, wenn ich zum Beispiel den Leuten die Möglichkeit gebe, PHP noch von Hand zu installieren. Und wenn ich PHP von Hand installiere, dann wird es richtig interessant, weil wie sage ich zum Beispiel diesen von Hand installierten PHP, wenn ich zum Beispiel so tolle Software wie Slash verwende, wo es kein Paket dafür gibt. Ja, sprach der Gento nutze, ich weiß. Dann wird es interessant, mit wie sage ich dem, welche Features, ja gut, es ist ein Community Kochbuch, es ist riesig, es kann viel. Gehen wir mal davon aus, dass wir wissen, was zu tun. Ich weiß, ich habe Amazon Linux auf all meinen Kisten, dann kann ich davon Testinstanzen hochfahren, dieses Kochbuch anwenden und sagen, funktioniert das? Das wird in Unitesting so abgedeckt, dass man erst mal sagt, simuliere den Run dieser Node, schmeißt das Kochbuch dagegen, wird da PHP installiert. Dann guckt er erst mal nach dem Install Befehl, wird er ausgeführt, passt. Unitesting ist aber nur halb interessant. Wo es dann interessant wird, ist Integration Testing. Also sowas hier, fahren wir eine richtige Instanz hoch, auch das gibt es schon in Fertig. Das Ding nennt sich Serverspec. Wer in Puppet schon mal was gemacht hat oder in anderen Provisionieren wird sich gefragt haben, wie kann ich sinnvoll Integration testen, so mit Public oder Private Cloud. Kitchen, also Test Kitchen, ist da eines dieser Tools, was Serverspec verwendet. Serverspec selber ist wiederum in zwei Teile gesplittet. Das eine ist das Backend, das andere das Frontend, damit ich es auch z.B. in Palten basierten Dingen, wie heißt das? Einzibelt verwenden kann, danke. Was mache ich hier? Ich verwende eine Jammel Datei, da schreibe ich rein, um die Digital Ocean Droplet dazu herzunehmen, dieses Kochbuch zu testen. Der interessante Part steht hier logischerweise nicht drin, dass ihr morgen auf meine Kosten ein Botnets hochfahrt, das steht in meiner Shell-Environment Variablen. Ja, irgendwie, Standardzeug so. Wenn ich das Droplet hochfahre, dann werden da erstmal die Digital Ocean Credentials verwendet. Das heißt der SSH-Key, den ich speziell für Digital Ocean generiert habe. Wenn jemand das unter home.sh. ID unterstrich rsa diesen Key für Digital Ocean verwendet, kann er sich diese Zeile sparen hier. Das ist eigentlich auch gut dokumentiert. Man sagt dann einfach am Schluss nur noch, ich habe diese und jenes Nudes, diese Nudes, ich habe diese drei Kochbücher, diese möchte ich testen auf diesen und jenem Betriebssystem und teste mir dieses Kochbuch mit, installiere PHP von Hand, installiere PHP als Paket und so weiter. Diese Suits werden, wird alle Tests, die ich dafür schreibe, wie zum Beispiel der eigentliche Integration Test in Serviceback, das kann ich auch noch zum Beispiel Flash schreiben, das heißt dann Ants, ist brutal nützlich, mache ich im Prinzip auch wieder das gleiche. Im Prinzip, wo ich vorhin in meinem Unitest gesagt habe, geht davon aus, dass das so ausgeführt wird. Das heißt, wenn ich einen Betriebssystemabfrage drin habe, dann geht davon aus, dass das so läuft. Hier gucke ich, ob es wirklich läuft. Das ist das eigentliche Akzeptanz-Testing und da fahren wir mit ein paar Anforderungen richtig gegen die Wand. Ja, wir machen dann im Prinzip das da. Und das ist die andere Art, wie Chef zum Beispiel verwendet wird, abgesehen von dieser abgesehen von dieser Master Node Vorgehensweise. Ich schmeiß hier eine Node mit den Einstellungen, die ich angegeben habe. Es wird der Digital Ocean Treiber geladen. Jetzt muss ich auf diesem neu erstellten Digital Ocean Droplet erstmal Chef installieren. Das passiert über Omnibus. Omnibus ist wieder einer der klaren Beweise, was zur Zeit falsch läuft in unserer Gesellschaft, Kurt Basch, aber wenigstens über htdps. Ja, es ist sogar ein Shellscript fallen. Ja, egal. Es wird installiert. Ich habe die Wörse nicht gepinnt. Das heißt, ja, dass ich zum Beispiel eine etwas ältere Version von Chef laufen habe. Es wird entpackt. Es wird installiert. Und dann wird mein Kochbuch da reingeladen, also auf die Node, wo getestet wird, hochgeladen und es werden meine Tests ausgeführt. Und am Schluss kriege ich dann hier angezeigt, ob mein Kochbuch installiert wurde und mein Kochbuch durchliegt. Dann ist der bei den Testausführenden das Testausführende Programm zu installieren. Das nennt sich Serviceback. Das ist das, wo nachher mit entweder Ruby oder dieser Airspec basierten Syntax oder mit Basch diese Tests gegen meine Node fahren kann. Leht die ganzen Gems dafür hoch, und fängt dann nachher an. Also man sieht auch hier, wenn man die Dependency ignoriert, dass hier wirklich Airspec ausgeführt wird. Das heißt auch Serviceback ist nun Airspec-Plaggin. Dass meine Tests ausgeführt wurden und ich kriege hier auch angezeigt, wenn ich irgendwas falsch mache. Das ist aber noch nicht der interessante Part. Das zweite Part ist der Akzeptantstest. Deswegen habe ich auch genau dieses Kochbuch verwendet, um das aufzuzeigen, dass man da richtig gegen die Wand fahren kann. Wer zum Beispiel mal mit Aluhüten sprach, der kriegt dann solche Sachen gesagt oder mit Infosec-Läuten, der kriegt dann zum Beispiel gesagt, mach mal so folgende Dinge wie lasst das einlocken per SSH als root-User nicht zu. Du setzt den SSH-Demon-Port sehr hoch, um den meisten Portscans zu entgehen oder mach mal solche Dinge wie Cyphersmanuell setzen und so weiter. Aber das reicht schon, damit unser Akzeptantstest so schon mal nicht funktionieren wird. Was passiert hier? Ich habe entweder eine Persistente oder eine Neuverbindung auf die Note jedes Mal, wenn ich etwas tue. Von ganz oben, das Ding instanziere und sobald ich mich darauf verbinde, werden diese Credentials meiner Kitchen Digital Ocean Driver Plugin verwendet, um mich zur Note zu verbinden. Das ist meine Standard Credentials. Was macht mein Kochbuch? Er setzt andere. Wenn ich jetzt dieses Kochbuch ausführe, kann es nicht laufen, weil die Verbindung kann nicht aufgebaut werden. Hände-Eye Problem. Ihr versteht? Ja. Wie gesagt, da gibt es noch ein paar interessante Probleme bei. Was ich aber machen kann, ist, ich kann um das Problem rumarbeiten. Ich kann zum Beispiel sagen, dass ich eine Note mit meinen vorkonfigurierten Settings instanzieren soll und sich bei mir zurückzumelden hat, wenn es geklappt hat. Das kann ich machen, wenn ich meinen CI-Server auf einer IP laufen habe, die fest ist. Wenn ich jetzt allerdings in einem Office sitze mit so einer Kabel-Bewähleitung 4 in 6, verspürt ihr schon die ersten Schmerzen? Can you relate? 6 Ja, also auf jeden Fall, wenn ich keine feste IP habe, wird das nichts. Es gibt so ein paar Sachen, die kann man nicht so richtig testen. Aber das Schöne ist, dieses Kochbuch ist nur eines der vielen Kochbücher, die ich verwenden kann, um nachher solche Dinge zu bauen, wie das jetzt so ein sogenanntes Kochbuch, was hier ausgeführt wird. Weil ich habe hier hier nur Kochbücher die einzelne Dinge tun. Das bringt mich aber nicht weiter. Ich will ja wissen, wie ich aus diesen ganzen einzelnen Schrauben und Bolzen dann was Großes bauen kann. Also muss ich ja irgendwo definieren, wenn ich zum Beispiel sage, meine Webnote besteht aus diesen und jenen Komponenten muss ich ja irgendwie wissen, wie mache ich daraus was als großes Ganzes? Halt, nein. What? WTF. Wie fahre ich damit meine Instanzen hoch? Wie mache ich aus der Instanz, die ich hier hochfahren möchte, eine ganze eine ganze Wie mache ich aus den einzelnen Kochbüchern zum Beispiel eine Reverse Proxy? Ein Reverse Proxy, der meine Applikation ausliefert. Wie mache ich das? Das könnte zum Beispiel so laufen, dass ich dass ich dann ein Rapper-Cookbook schreibe, was wiederum andere Kochbücher inkludiert und Sachen überschreibt. Ich kann zum Beispiel so Sachen machen wie ich habe dieses und jenes Cookbook, wie zum Beispiel das große PHP-Cookbook, was von den Obstcodeleuten geschrieben ist, zum Beispiel mein spezielles Betriebssystem nicht implementiert. Da kann ich dann solche Dinge tun, wie ich überschreibe dieses Zeug in einem anderen Kochbuch, überschreibe die Daten, die von denen gegeben werden und teste das ordentlich durch. Wenn ich dann weiß, dass es grundsätzlich funktioniert, dann kann ich denen die ersten Pull Request zuschießen. So, jetzt gehen wir davon aus, dass für alle einzelne Dinge, wie zum Beispiel User Management das Apache ordentlich installiert wird oder dass unsere Applikation per Capistrano richtig auf die Notes fliegt und dass die Reversproxy davorsteht und so weiter. Aber ich kümmere mich jetzt nicht nur um meine Webnote und will jetzt zum Beispiel sagen, ich habe alle einzelnen Kochbücher da, ich möchte jetzt da draus was machen. Ich habe dafür ein Chefrepo, das ich mir von Git holen kann. Ach, wo haben wir es? Workstation Workstation GetPackage ChefDK Sollte laufen. Bla, bla, ja. Es gibt hier ein Na, wo haben wir es hier? Es gibt hier dieses Chefrepo. Das sind dann folgende Inhalte drin. Ich habe ein Chef Directory und vorher muss ich mir halt die grundlegenden Fragen stellen. Wie soll das laufen? Brauche ich überhaupt ein Chef-Server? Oder gehe ich davon aus, wenn ich zum Beispiel nur Server professioniere für langhaltige Langzeitdatenhaltung, die nur sehr selten durchlaufen. Ich habe ein vordefinierter Set und meine Infrastruktur erlaubt es mir zum Beispiel ein vordefinierter Set und das müsste nur äußerst selten laufen und es ändert sich nur äußerst selten was dran. Habe ich überhaupt in diesem Netzwerk in diesem abgeschichteten Netzwerk, habe ich da überhaupt eine Möglichkeit einen Chef-Server laufen zu lassen. Wenn ich zum Beispiel zwei Nas miteinander verbinde um ein Backup zu machen, habe ich da keine Möglichkeit, wenn auf beiden Chef nicht laufen würde. QNAP oder so. Dann kann ich zum Beispiel sagen schieß mich aus dem Ramm. Ich bin zum Beispiel mit beiden Nas mit einem anderen Node verbunden, die zum Beispiel sagen kann oder an einem Switch. Ich kann irgendwie an das USB-Ding, wo aus einem Switch rauskommt, kann ich ein Raspi ran schließen, denn Raspi kann ich an mein Netzwerk hängen und mein Netzwerk sagt dann über Chef Solo oder Chef Zero. Ich habe hier diese Set für diesen Switch, mach das mal und der macht dann aus dem Ramm raus, kriegt die Befehle und führt sie aus. Okay, waren jetzt beides scheiß Beispiele, aber es kann wirklich vorkommen, dass man keinen Chef-Server braucht. Man macht das aus dem Ramm und das ist da gerade passiert, wenn ich das Test habe laufen lassen. Wo ich es im Unitest simuliert habe und im Integration-Test ausgeführt habe, habe ich es aus dem alles ohne Chef-Server gemacht. Wenn ich hier jetzt einen Chef-Server möchte und mir erstmal für meine Tests, bis ich da wirklich damit ernsthaft anfangen kann, diese HostedChef Free-Variante ausführe, dann bekomme ich von diesem Chef-Server, wenn ich mich registriert habe und so weiter, kriege ich da ein Zertifikat. Dieses Zertifikat hole ich mir auf meine Chef-Note und dann bekomme ich diesen Krempel hier. Dieser Krempel sagt folgendes aus einer Note. Die hat zum Beispiel Attribute. Das Zeug von Ohai habe ich euch gerade gezeigt, das andere Zeug kann ich überschreiben, wenn es für meine Kochbücher verwendet wird. Andere Sachen wie zum Beispiel sind Rollen. Eine Note hat zum Beispiel die Rolle Reverse Proxy, hat die Rolle Netzwerkssegment Bayern, München, Rechenzentrum 1, VLAN 5 oder hat zum Beispiel die Rolle ist noch nicht Production Ready oder hat zum Beispiel die Rolle liefert nur statischer HTML-Webseiten aus. Das sind so die Rollen, die ich nur Note geben kann. Environments sagt eigentlich alles aus. Kann so Sachen sein wie Staging, kann so Sachen sein wie myOffice, kann so Sachen sein wie Production, kann so Sachen sein wie Testing, keine Ahnung. Lokal zum Beispiel. Ein Data-Back ist auch was, was in Chef drin ist. Zum Beispiel mein Set an Nutzern, was ich für alle Notes brauche, die ich professionieren will. Den für diese Note in dieser Rolle, in diesem Environment und so weiter, das spielt alles miteinander ein, aber ihr kennt das alle. Es ist alles nichts Neues. Und natürlich mein Set an Cookbooks. Wie es auch mit den Ruby-Jams auf meiner Kiste ist, kann ich auch bei den Kochbüchern, vor allem wenn ich mehrere brauche, ich möchte nicht jedes Mal jedes Kochbuch einzeln auf den Server hochladen. Das kann auf meinem Laptop hier Burgshelf für mich übernehmen. Burgshelf ist im Prinzip so was wie es existiert dann in meiner Home Directory, existiert dann so was wie Punkt-Cookbooks kann ich konfigurieren. In diesem Punkt-Cookbooks sind alle Versionen von allen Kochbüchern, die ich habe. Das heißt, ich muss nicht, wenn ich in zwei Chef-Arbeitsumgebungen die ich habe, das gleiche Kochbuch nochmal laden und nochmal auf den Server laden, weil Burgshelf existiert dann auch auf dem Server, aber das geht jetzt alles noch zu weit. Ich gehe dann in meine mit diesem Zertifikat gehe ich dann gegen den Chef-Server und sage dass du die Experiments kennst du, die würde ich dann in der WebUI angezeigt bekommen und da kann ich dann meine Notes gegenfahren und sagen z.B. Query mir mal alle Notes die in die Rolle Reverse Proxy haben und in Staging sind und fahr da mal folgendes Kommando dagegen EchoTrollolol Ich kann da sagen ja, fahr mir mal Web Notes runter und das alles mit diesem einen Tool aber dazu hilft auch mein Page lesen die es hier nicht gibt weil Ruby Jam ansonsten ansonsten ja Cookbooks sind meine ansonsten andere Cookbooks wer sich fragt hier natürlich das Chef-Client Cookbook wenn ich eine Note damit hoch fahre dann wird die erstmal professioniert wenn ich dann aber entscheide dass diese Note nach wie vor dauerhaft professioniert werden soll dann installiere ich den Chef-Client und der Chef-Client ist dann quasi das Programm was den Server regelmäßig fragt gibt es Änderungen wenn es diese Änderungen gibt wenn ich dann vom Chef-Client übernommen diese braucht man am Anfang bis man sich das genauer angeguckt hat nicht, weil da will man ja sehen was für Ergebnisse es liegen da wenn ich das dann mit dem Chef ernsthaft auf Dauer betreiben möchte, dann kann ich meinen Chef-Service selber installieren was mir dann so die Chef-Analytics Plattform bringt und da wird das jetzt interessant weil da kommt jetzt der richtig kranke Scheiß die Quintessenz ist es gibt man kann alles mit Kochbüchern machen und die letzten Änderungen die mit Chef-12 reinkommen wird der Krempel richtig interessant weil Security Audits auf Betriebssystemebene daraus kann man sich dann für das jeweilige Betriebssystem einfach mal ein ganzes Buch ausdrucken es gibt allerdings für diese eine Plattform schon das komplette vollständige Regelwerk als Tests was gegen das die frisch instanzierte oder schon ewig instanzierte Note gefahren werden kann und das sieht dann so aus ich sage zum Beispiel in einer Control Group das ist ein spezieller Chef-Client Run der sagt mir dann zum Beispiel aus was steht hier ob ich eine separate slash TMP Partition habe das wird erst richtig interessant wenn man dafür die ganzen wenn man zum Beispiel von irgendeiner Zertifizierung abhängig ist HEPA oder so dass man irgendwelche Security Audits durchsteht zu einem Environment und man müsste das ganze Regelwerk so eigentlich jedes mal manuell gegen alle Notes fahren und jedes mal wenn es da eine Änderung gibt dann müsste man den Kerl anrufen der das damals in Bash damals ein paar Jahre zuvor aber ihr kennt es Collective Code ownership ist für Profis also im Prinzip ich gehe hier davon aus dass alles das funktioniert dieses Cookbook gibt es zwar bisher nur für diese eine Plattform aber hier ist heftig viel im Gange auch das für Ubuntu ist schon gebaut werden dauert allerdings alles ewig weil es auch ein riesen Regelwerk und ich wollte das eigentlich auch nur aufzeigen dass es alles mit Chef möglich ist ihr könnt in einem Burgs Run in einem Servers Back Run wenn ihr eine Note frisch instanziert habt ihr habt euer kompletten Bits & Bolts zusammen und sagt ihr baut das alles zu einem zu einem einer Web Note ein Reverse Proxy einer Datenbank zu einer Switch-Konfiguration zusammen und sagt das muss so alles funktionieren und dann könnt ihr speziell in einem Audit Mode diese Tests gegen diese Instanz hochfahren und sagen ist das mit dem Konform ist das mit dem Konform und diese ist das mit diesem ChefAnalytics Audit Mode ist das mit diesem Audit Mode kompatibel so und diese Audits da könnt ihr unheimlich viel hochfahren dann das Akzeptanz-Testing wie gesagt an ja er werdet immer ein paar Fälle finden wo ihr so definitiv gegen die Wand fahren werdet wie bei meinem beschriebenen SSH-Konfig Problem allerdings was gibt uns die Private und die Public Cloud heutzutage als Lösungen dafür Images das ist zum Beispiel eine der Lösungen für dieses Problem ich gebe schon eine Erwachsene im Momentan ziemlich sichere SSHD Demon-Konfig an das Standard-Image weiter was ich verwende weil da werdet ihr diese Audits brauchen weil wenn ihr zum Beispiel den Cloud wechselt dann könnt ihr davon ausgehen dass ihr eine andere Grund SSHD-Konfig habt zum Beispiel der eine der Digital Ocean gibt ihr zum Beispiel die Möglichkeit ok du kannst dich auch mit einem Passwort einloggen dann mach ich den Passwortloggen an wenn man allerdings wie ich einen GitHub Account einen SSH Key dafür erstellt hat und den hochgeladen hat und dem Kitchen Run zum Beispiel sagt dass wat wenn ihr dem Kitchen Run dann zum Beispiel sagt dass wenn ihr dem Kitchen Run dann zum Beispiel sagt verwendet diesen SSH Key dann könnt ihr davon ausgehen dass diese Verbindung funktioniert weil ihr müsst keinen Passwort eingeben der Kitchen Run lässt es mir auch zu dass ich in meinen Test sage ok frag mich nach dem Passwort ich gebe das Passwort ein funktioniert so gebe ich meinen SSH Key an aber das ist der falsche und da wird es halt dann interessant ihr geht, ihr packt es in euer Grund-Image rein und wie gesagt ihr werdet die Audits brauchen wie gesagt auch Digital Ocean kann was an den Grundinformationen ändern an diesem Grundbetriebssystem Image ohne dass ihr es merkt mit diesen Audits merkt ihr es nicht nur ihr werdet auch noch informiert ob das grundsätzlich funktionieren kann was ihr da verwendet und ihr macht es den Auditors nachher einfacher was gerade wenn man in extrem großen Firmen auch internationalen Firmen wichtig ist wenn man zum Beispiel sagt wenn wir mit den Amis zusammenarbeiten wollen oder mit der amerikanischen Regierung zusammenarbeiten wollen brauchen wir diese in jener Sicherheitszertifikate ihr könnt einfach das Kochbuch im Auditor geben und sagen da funktioniert ja funktioniert es möglich funktioniert auf der Not, funktioniert auf der Not einfach und im Prinzip ist das auch schon alles es ist sehr sehr viel möglich damit allerdings wie gesagt ihr werdet auf Probleme stoßen aber dies sind ganz normal es gibt soweit ich weiß auch kein anderen Provisionierer der dieses Problem in seinen Integrations-Tests wirklich gelöst hat also ich habe zumindest von noch keinem gehört ich lasse mich sehr gerne vom Gegenteil überzeugen aber eine Remote Note auf die per SSH verbunden wird die Konfig ändern und dann umschwenken auf die Konfig ohne dass irgendwie eine Verbindung abricht oder so um auch zu asserten dass auf die andere Konfig umgeschwenkt wird und so weiter ich habe es noch nicht gesehen aber lasse mich gerne vom Gegenteil überzeugen gibt es Fragen ich glaube nicht, dass ich das jetzt so allesverständlich rübergebracht habe ich kann mir nicht denken, dass ihr keine Fragen habt ich liebe diese awkward silence also im Prinzip es ist Ruby die DSL ist wirklich nicht sehr speziell wer Ruby gelernt hat, der wird sofort reinfinden die Docs sind sehr umfangreich die Firma macht geilen Scheiß, gerade mit Chef Delivery was da kommen wird, ist heftig es wird auch geiles Zeug veropensourzt und die Cookbooks von der Community sind einfach mächtig wir haben dafür diesen sogenannten Supermarket Supermarkt ich suche ein Kochbuch gib mir ein Kochbuch gib mir ein paar Kochbücher alle da ob ich mich mit der Codebase von die Frage war, ob ich mich mit der Codebase von Chef auskenne nein bisher jedes Problem und auf das ich gestoßen bin gab es schon Blockeintrag dazu muss ich ganz ehrlich sagen und Chef ist auch zu einem großen Teil auch Erling dabei und nein zu be honest ich wollte es mir schon lange mal angucken aber ich bin noch nicht dazu gekommen und ganz ehrlich, ich habe es auch noch nicht gebraucht soweit bin ich noch nicht aber alles was ich bisher gesehen habe hat mich soweit beeindruckt und mein ganzes Umfeld ist über Puppet so am Flame und da habe ich gedacht ich gucke mir Chef mal an und bisher top gibt es sonst noch Fragen mit der Ressourcensortierung da hat es bei Puppet immer drüber in die Penden sieht also wenn ich halt da abhängige Ressourcen keine Verzeichnung ist vielleicht vorher anlegen bevor ich die Verzeichnung drunter anlegen will es wird von oben nach unten durchgeführt ausgeführt du hast du hast in der die Frage war ob ich bei Chef auch dieses parallele Ausführproblem habe, dass ich wie heißt ach egal gibt es Fachbegriff dafür kenne ich normalerweise, kenne ich jetzt gerade nicht du hast hier eine Runlist in der werden die recipes einzeln ausgeführt in jedem Kochbuch sind vielleicht mehrere recipes zum Beispiel im PHP Kochbuch habe ich zum Beispiel das recipe das mir PHP von Hand und einmal per Paket installiert die werden von oben nach unten ausgeführt und auch im Kochbuch wird alles von oben nach unten ausgeführt du kannst allerdings wenn du möchtest und das ist der Unterschied zu Puppet in einem einzelnen Ressortsblock sagen, wenn dieses ausgeführt wurde notify mir folgenden Ressortsblock dass er ausgeführt wird oder gestartet wird und den dann in 15 Stellen zum Beispiel ich gehe davon aus, dass jene Konfiguration über diese Gruppe in dem recipe rufe ich die Gruppe aus die Rolle aus und das Environment wenn jetzt die Rolle folgende und jene ist dann restarten wir diese und jene und dann restarten wir wenn ich das mache, dann müsste ich normalerweise jedes mal die Ressource einfügen mache ich aber nicht, ich sage einmal notify mir restart mir den Webserver und passt das heißt, es ist andersrum ich kann es machen, ich muss es aber nicht das ist der Unterschied sonst noch fragen noch mal dazu das heißt die Abhängigkeiten in meinen unterschiedlichen Ressorts die muss ich schon selbst im Griff haben das sei denn nicht über die in jeder Ressource nochmal also wenn der Info jetzt sagt es wird alles von oben nach unten abgearbeitet einfach so dann sind da ja etliche Fallstricke einfach auf dem Dekor ich möchte irgendwelche Skripte auf den Hofparteien und die sollen aus einem bestimmten Jüger laufen der sich da muss ich das Skripte hinverteilen und schlafen ja wenn ich das in der Fahrt schon einfolge mache dann funktioniert das nicht das heißt darum muss ich nicht bemerken weil Chef du musst mit deinen Testen die Frage war ob ich wenn ich Skripte die ich ausführe in der falschen Reihenfolge ausführe und es garantiert auf die Bretter gehen wird wie komme ich da rum durch Test macht von oben bis unten wenn du Ressourcen verwendest oder ein Kochbuch schreibst dann kannst du Ressourcen schreiben du kannst zum Beispiel sagen ich möchte im PHP gibt es auch eigene Ressourcen wie den Peer Channel Discovery wenn ich die Definition dieser LWRP heißen die Dinger wenn ich die definiere kann ich denen auch sagen dass sie vorher nach dem User gucken sollen weil du kriegst so fällt es zumindest gleich auf die Bretter und nicht wie bei anderen Sachen dass du zum Beispiel hoffst dass es klappt und bei 50% klappt und bei 50% nicht die Dinger kannst du intelligent bauen mit einfachem Code den du auch einfach testen kannst das ist halt killerbam ich danke dass ihr mich ausgehalten habt