We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Next generation configuration mgmt: Autonomous Databases

00:00

Formale Metadaten

Titel
Next generation configuration mgmt: Autonomous Databases
Alternativer Titel
Mgmt Config: Autonomous Datacentres: Real-time, autonomous, automation
Serientitel
Anzahl der Teile
490
Autor
Lizenz
CC-Namensnennung 2.0 Belgien:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
Identifikatoren
Herausgeber
Erscheinungsjahr
Sprache

Inhaltliche Metadaten

Fachgebiet
Genre
Abstract
Mgmt is a real-time automation tool that is fast and safe. One goal of the tool is to allow users to model and manage infrastructure that was previously very difficult or impossible to do so previously. The tool has two main parts: the engine, and the language. This presentation will have a large number of demos of the language. To showcase this future, we'll show some exciting real-time demos that include scheduling, distributed state machines, and reversible resources. As we get closer to a 0.1 release that we'll recommend as "production ready", we'll look at the last remaining features that we're aiming to land by then. Finally we'll talk about some of the future designs we're planning and discuss our free mentoring program that helps interested hackers get involved and improve their coding, sysadmin, and devops abilities.
33
35
Vorschaubild
23:38
52
Vorschaubild
30:38
53
Vorschaubild
16:18
65
71
Vorschaubild
14:24
72
Vorschaubild
18:02
75
Vorschaubild
19:35
101
Vorschaubild
12:59
106
123
Vorschaubild
25:58
146
Vorschaubild
47:36
157
Vorschaubild
51:32
166
172
Vorschaubild
22:49
182
Vorschaubild
25:44
186
Vorschaubild
40:18
190
195
225
Vorschaubild
23:41
273
281
284
Vorschaubild
09:08
285
289
Vorschaubild
26:03
290
297
Vorschaubild
19:29
328
Vorschaubild
24:11
379
Vorschaubild
20:10
385
Vorschaubild
28:37
393
Vorschaubild
09:10
430
438
KonfigurationsraumHackerWeb logProgrammfehlerDatenverwaltungVersionsverwaltungBitMaßerweiterungQuadratzahlWeb logBAYESGenerator <Informatik>HackerData MiningComputeranimation
ImpulsHackerWeb logKonfigurationsraumMKS-SystemQuadratzahlProgrammfehlerRechter WinkelQuick-SortPunktCodeLie-GruppeWort <Informatik>Computeranimation
MKS-SystemCodeAutonome DifferentialgleichungNeuroinformatikProgrammiergerätMultiplikationsoperatorComputeranimationTechnische Zeichnung
Formale SpracheRechenwerkDemo <Programm>MereologieProjektive EbeneFormale SpracheZweiBitQuaderComputeranimationTechnische Zeichnung
AchtDreiMKS-SystemEreignishorizontDemo <Programm>Virtuelle MaschineBootenAbenteuerspielMultiplikationsoperatorGraphPhysikalisches SystemCodeMathematikDienst <Informatik>Elektronische PublikationPasswortPhasenumwandlungBitParallele SchnittstelleVorlesung/KonferenzComputeranimation
MathematikGebäude <Mathematik>Ein-AusgabeTopologieVersionsverwaltungVerzeichnisdienstBootstrap-AggregationServerMailing-ListeAlgorithmusSynchronisierungGraphFehlermeldungCodeKontextbezogenes SystemMini-DiscLoopStetige FunktionReverse EngineeringExistenzsatzCodeATMSkriptspracheNabel <Mathematik>NormalvektorRechter WinkelElektronische PublikationPhysikalisches SystemMultiplikationsoperatorCASE <Informatik>AggregatzustandComputeranimationProgramm/Quellcode
MathematikLoginTouchscreenRadikal <Mathematik>Rechter WinkelElektronische PublikationCASE <Informatik>AggregatzustandComputeranimation
Domänenspezifische ProgrammierspracheFehlermeldungNotebook-ComputerGüte der AnpassungQuaderOffice-PaketComputeranimationVorlesung/Konferenz
Workstation <Musikinstrument>BildschirmfensterKlon <Mathematik>DreiMengentheoretische TopologieEreignishorizontNotebook-ComputerGrundsätze ordnungsmäßiger DatenverarbeitungZahlenbereichAbgeschlossene MengeComputeranimation
GruppenkeimPasswortMKS-SystemArithmetischer AusdruckTaskInstantiierungEchtzeitsystemFormale SpracheBitProgrammierspracheVirtuelle MaschineDomänenspezifische ProgrammierspracheCodierungMultiplikationsoperatorZusammenhängender GraphProgrammierungWeb-SeiteDemo <Programm>MathematikComputeranimation
MKS-SystemFormale SpracheDeklarative ProgrammierspracheFunktionalROM <Informatik>Domänenspezifische ProgrammierspracheUmwandlungsenthalpieSystemprogrammierungRechenwerkGraphSynchronisierungAlgorithmusMathematikRechter WinkelCodeDemo <Programm>Web-SeiteReelle ZahlElektronische PublikationMultiplikationsoperatorInhalt <Mathematik>ProgrammfehlerProgrammierumgebungStrömungsrichtungEinsEchtzeitsystemSpeicherabzugVersionsverwaltungPunktStreaming <Kommunikationstechnik>FunktionalEinfache GenauigkeitComputeranimation
Vorzeichen <Mathematik>SchätzungInhalt <Mathematik>ExistenzsatzTemplateCodeMKS-SystemHyperbelverfahrenDifferenteVollständigkeitNotebook-ComputerFehlermeldungRegulärer AusdruckSpeicherabzugEreignishorizontLastVirtuelle MaschineInhalt <Mathematik>MinimumEinsZeichenketteTemplateZahlenbereichEchtzeitsystemFormale SpracheFunktionalElektronische PublikationEin-AusgabeE-MailMultiplikationsoperatorPunktMeterZweiQuick-SortMusterspracheDemo <Programm>MereologieQuellcodeDatenstrukturComputeranimation
FluidGraphElektronische PublikationMKS-SystemPASS <Programm>Rechter WinkelAggregatzustandCodeElektronische PublikationMusterspracheVerzeichnisdienstQuick-SortDifferenteSchaltnetzMailing-ListeInhalt <Mathematik>Fahne <Mathematik>FlächeninhaltCASE <Informatik>Computeranimation
DifferenteCodeElektronische PublikationComputerunterstützte ÜbersetzungDemo <Programm>Quick-SortSpeicherabzugVerzeichnisdienstReelle ZahlGebäude <Mathematik>AggregatzustandVersionsverwaltungComputeranimation
MKS-SystemReverse EngineeringAggregatzustandGruppenoperationNichtlinearer OperatorKategorie <Mathematik>DatenverwaltungElektronische PublikationMaßerweiterungParametersystemCodeComputeranimation
GeradeInhalt <Mathematik>ATMMagnetooptischer SpeicherNichtlinearer OperatorCodeVersionsverwaltungCase-ModdingComputervirusElektronische PublikationMathematikMultiplikationsoperatorReverse EngineeringZweiÄquivalenzklasseRechter WinkelEchtzeitsystemVirtuelle MaschineBitComputeranimation
SystemaufrufLoopServerGraphSynchronisierungSyntaktische AnalyseGebäude <Mathematik>TopologieVersionsverwaltungDigitalfilterBootstrap-AggregationElektronische PublikationInnerer PunktMagnetooptischer SpeicherVerzeichnisdienstMultiplikationsoperatorElektronische PublikationInhalt <Mathematik>ZweiAggregatzustandSystemaufrufATMComputerunterstützte ÜbersetzungComputeranimation
MKS-SystemTotal <Mathematik>SystemaufrufMailing-ListeServerLoopGraphZellularer AutomatSynchronisierungTUNIS <Programm>ComputervirusInnerer PunktMehrrechnersystemZahlenbereichGebäude <Mathematik>TopologieVersionsverwaltungVerzeichnisdienstKnotenmengeMathematikKonvexe HülleInhalt <Mathematik>ATMInhalt <Mathematik>Virtuelle MaschineBinärcodeEchtzeitsystemMereologieElektronische PublikationEntscheidungstheorieRoutingServerRechter WinkelHalbleiterspeicherMini-DiscLoopEreignishorizontAbstraktionsebeneBitImplementierungProgrammiergerätPhysikalisches SystemGeradeDatenbankBenutzerbeteiligungProgrammierungCodeInformationsspeicherungMathematikMultiplikationsoperatorAggregatzustandEndliche ModelltheorieCoxeter-GruppeGraphZweiWurzel <Mathematik>Demo <Programm>Dämon <Informatik>SchedulingVerzeichnisdienstComputeranimation
GraphGraphInstallation <Informatik>Overhead <Kommunikationstechnik>GruppenoperationTransaktionDatenverwaltungDifferenteComputeranimation
GraphRechenschieberServerCodeDifferenteGruppenoperationElektronische PublikationCASE <Informatik>MereologieFunktionalComputeranimation
Wurzel <Mathematik>Inhalt <Mathematik>Inklusion <Mathematik>MKS-SystemMini-DiscFunktionalElektronische PublikationServerCodeMereologieCASE <Informatik>BimodulDifferenteSpeicherabzugGruppenoperationFirewallDemo <Programm>Endliche ModelltheorieEnergiedichteComputeranimation
Elektronische PublikationClientLesen <Datenverarbeitung>MAPServerReelle ZahlFunktion <Mathematik>Elektronische PublikationLoginRoutingDatei-ServerRechter WinkelClientDemo <Programm>Computeranimation
Streaming <Kommunikationstechnik>Formale SpracheSISPRechnernetzSystemaufrufGraphAlgorithmusSynchronisierungTemplateAdressraumServerOffice-PaketZeitzoneElektronische PublikationComputeranimationProgramm/Quellcode
SISPSummierbarkeitRechnernetzInformationsmanagementStreaming <Kommunikationstechnik>SLAM-VerfahrenStrebeZellularer AutomatTUNIS <Programm>GraphOffene MengeSynchronisierungAlgorithmusTeilbarkeitOffice-PaketPhysikalische TheorieSchnittmengeProgrammfehlerDemo <Programm>SoftwareTermStreaming <Kommunikationstechnik>VierzigComputeranimationProgramm/Quellcode
Inhalt <Mathematik>GraphSynchronisierungServerQuellcodeKnotenmengeUniformer RaumSISPProdukt <Mathematik>MultiplikationsoperatorEinfach zusammenhängender RaumFlächeninhaltBrowserRechter WinkelComputeranimation
QuellcodeGraphInhalt <Mathematik>Streaming <Kommunikationstechnik>BenutzeroberflächeMKS-SystemCodeFunktion <Mathematik>WärmeübergangBrowserLoginBootenQuick-SortPatch <Software>FunktionalProgrammbibliothekFormale SpracheBitProgrammfehlerStandardabweichungComputeranimation
MKS-SystemSoftwaretestPatch <Software>Web logHackerWeb logPatch <Software>SoftwaretestGemeinsamer SpeicherTwitter <Softwareplattform>Quick-SortUmsetzung <Informatik>HackerComputeranimationXML
MKS-SystemHackerWeb SiteHackerInternetworkingHilfesystemMessage-PassingSoftwareProjektive EbeneWeb SiteWellenpaketBildschirmmaskeComputeranimation
FreewareTwitter <Softwareplattform>Web logTouchscreenE-MailMKS-SystemTwitter <Softwareplattform>Mailing-ListeRoboterE-MailWeb logFormale SpracheBesprechung/InterviewComputeranimation
BildschirmfensterDatenverwaltungKonfigurationsraumModul <Datentyp>BimodulOffene MengeFunktion <Mathematik>QuellcodeGebäude <Mathematik>Notebook-ComputerFreewareDigitale PhotographieFormale SpracheLesen <Datenverarbeitung>Dienst <Informatik>Computeranimation
Offene MengeLesen <Datenverarbeitung>ServerComputeranimation
Open SourcePunktwolkeComputeranimation
Transkript: Englisch(automatisch erzeugt)
How do I introduce this guy? The person who messed up my Spotify history with all his crazy rap songs. We have two more talks left and the next one is by James and also known as Purple Idea.
He will talk about next generation conflict management with MGMT. Thank you Walter. Hi. So I'm going to go really fast but I'm also going to try and go a little bit slower on some other stuff.
So I'm going to assume some knowledge of automation and config management or puppet and even MGMT to a certain extent because I've talked a lot about MGMT but I don't want to start giving the same beginner talk about MGMT so if you have missed something you'll have to go see a talk of mine. I might sit down for a little bit so if you can't see me don't be afraid. I'm still here and I'll have some questions at the end.
So who am I? I'm a hacker. I work on config management things. I write the technical blog of James. Who's seen it? Just raise your hand. Who's seen my blog? If you haven't just raise your hand anyway so I seem really popular. Everyone? Thank you. Used to be a physiologist but now I'm doing hacker stuff. Just some background.
There's a lot of LibreOffice bugs but behind the black square is Beaker. Sorry about that. So every day and nowadays we're kind of everything's yammering. It seems to be like Ansible and Kubernetes and all this yaml stuff to describe things. At the end of the day the whole point of all this is to describe our infrastructure
and ideally we'd like to describe it in some sort of way so that if we got all our code right and there weren't any bugs it would just sit there and do its thing and we could go lie on the beach or chill in Canada or somewhere cool. And that's what I want to build. I want to build autonomous systems and I want to figure out how we describe to the computers to do what we want over time.
Do we want everything in yaml? We just write this yaml and throw it in a tool. Do we want to be yaml programmers? I don't think so. So this is my answer to the yaml programmers.
I'm sorry if you've seen this before. He pushes the note button and it's gone. Anyways, so long story short I sat down some years ago and started working on a project called MGMT which has this logo. There's two main parts, the engine and the language. I've talked about this a lot before. And I'll show you just a quick demo.
I can actually even pull a demo that I was going to do this morning. Should we do that? I'll take a little bit longer and I'll waste two more seconds and show you a demo that I was going to do this morning in my talk which didn't work out because I forgot.
So just boot up a little machine. The idea basically is that we have this engine and it can run things in parallel. So the DAG, the graph of resources that gets work done, normally we run it one thing at a time but we can run that in parallel. And each resource is event-driven. So whether it's a file or a package or a service or a user or a virtual machine, all those things can detect the state
and detect when that state changes. So changing the graph of resources can be done very efficiently and we never have to recheck that whole graph. So every time you have a new Puppet run or a new Ansible run, it's rechecking every single thing. We only ever have to check once. And the whole thing works as a distributed system. Is that big enough? Can you see? Okay, the password is password.
And I'll just show you, this was the MGMT demo I was going to do. So if we just look at the code here, it's just a small amount of code to create a user. I'll even, let me just SSH in. It'll be a little bit nicer. I wonder if Avahi is working. Oh yeah, cool.
So we just go here. And if we just run this command, run, it's running MGMT. You can see it's adding a user. And I'll just show you what the code is doing. So run.sh, it's just literally running MGMT to create those users and it shuts down.
But the cool thing is we can actually run it in the normal mode, run continuously, so it's just going to run that code. I just made this shell script so I don't have to run it. If it's really important, otherwise you'll have to wait until the short talk. So MGMT is running continuously,
but if I go over here, and delete user, sorry, user delete MGMT1, and I delete the user, you can see MGMT wakes up and puts the user right back.
So id user id MGMT1, there's, it's, what were the users called, let's see. Oh yeah, there they are. So user del MGMT2, and you see MGMT goes right back and adds the user right back.
So it's not doing work, polling every time, it's always just listening to see the state of the system, whether it's a package or a file or a user, and it will guarantee that state's always the case. And this is just simple, this is just for a user resource, but it's more fun if we do fancier things. Do you want to see some fancier stuff? Okay, let me just kill this.
VM, because my poor laptop does not have a lot of RAM. First destroy, flustam 2020. What was the VM called? Oh my goodness, it's in boxes, boxes.
This is me hacking away. How do you shut it down? Oh my god, when you close it, it sleeps. Okay, that's why. So anyways, back to the talk. The whole talk is me randomly hacking on my laptop, so be prepared. So how many resources do we have in MGMT now?
Yes, call it a number. A thousand, thirty, close, we have twenty-seven. So five more in the last year. So we can do all these cool things, can be managed in real time. Even virtual machines, EC2 instances and so on. And now I want to talk a little bit more about the language. So the language is this special DSL. It's not a full programming language. What the Pulumi people are doing is cool,
but ultimately if you want to describe safe infrastructure, I don't think a general purpose programming language is the right approach. So that's why we have a DSL, this domain specific language that allows us to model the time components and the coding components safely. Here's a quote about that. It should be safe, it should be reactive. As I showed you, it wakes up and detects when something changes and so on.
So let's do some demos. I showed you the user demo. I've showed this demo before. We're going to show it once more just to get us all on the same page. So I'm going to run this MGMT code here on the left. I'm in my dev environment, so there's sometimes some bugs. So if there's something bad happens, we'll fix it. So MGMT has created this file, and I'm just going to,
on the right here, I'm just going to pull the file to see the contents. And you can see that it's updating this file in real time. And that's because the code, which is running continuously, looks like this. There's no syntax highlighting, but basically, here's a slightly nicer version. We have a datetime function, which is a core function that's in MGMT.
You can have other ones that you write yourself. And it takes this value. It's not really a single time point. It's a stream of times. The current time, the number of seconds, the next time, the second later. And it's always updating. And whenever this updates, this expression updates. And whenever this expression updates, it changes this struct, which has a bunch of different values in it.
And all of this goes into a big template. And that is the contents of this file down here at the bottom. And that's what we're showing. The other values that go into this big string for the file is the load and this VU meter function. And as you can see, it's constantly changing.
So the load, the time is going up. The load is changing. And if you look, you can see one of the inputs is actually my laptop microphone. And so the language is taking all these different real-time event sources, combining them in a safe way, and doing something useful. Now, this is a complete garbage example because it doesn't do something really useful apart from show off at conferences.
But the really cool example is something when you have the load and error scenarios and are, say, auto-scaling up and down machines and replacing machines on failure in real time before you even get an email that something happened. Does that make sense? It's a bit abstract, but we're going to stop the abstract stuff.
I have some more concrete examples. Do you want to see some more demos? Yes or no? Everyone in the back, do you want to see some more demos? All right. I'm going to show one silly example. This is a new thing in MGMT. If anyone's done Puppet, there's a fragment sort of pattern where you take a bunch of files and you glue them together to make a bigger file.
So I realized there was a better way to do this in MGMT. So the file resource itself, it has state, right? State exists or whatever. But now instead of content for kind of like Puppet, we have this fragments pattern which can take a list of things. In this case, it's a directory or a file or both. And you can see here's a file down here that's just a normal file.
And this is another file down here. I'm just going to run this fragment example right here on the left. And you can see the actual code takes a bunch of different files and glues them together. So if we look at this file, is it in?
Just watch. It's this file whole. Whoops. Whole one. There we go. So you can see this file is a combination of these three files and this bonus file. Basically this code here plus some more frags. But the cool thing is if you go into that directory down here, frags,
you can see those files there. And same thing. If I delete F2, it comes right back. Because that's an individually managed file that's always ensuring the right state. You can delete F2 and cat F2, it comes back. But you can even put echo hey FOSDEM into a new file and see it picked it up and right away.
Someone here said that's fast. It is. The real question is not why is this fast. Why are all the other tools so damn slow? Am I wrong? Like this is how it should be. I was getting super old like waiting for puppet runs and Ansible runs to go for like,
you know, I'd go have a coffee or whatever. Anyway, so this is the idea. So we can build the fragments all with the core file resource. And that's a new thing. I think there's another demo I wanted to show you with that. That's most of it. There's not, I mean, basic thing, but just a thing that's done I think the right way.
So when you're building config files from different pieces, just sort of native. But I want to do something harder. Do you want to do something harder? Okay, let's move on. More real world examples. So reversible resources. This is a new thing. So in my main talk today, I was talking about some properties of config management. One is idempotence, which you all know.
One is convergence, which means is the whole state converged as a whole. And there's a third property which is almost never talked about, which is called reversibility. And what reversibility is, so you take a resource, it's idempotent, it gets you to a certain desired state. If that state transition is what I call reversible, that means there should be a reverse operation that takes you back to the original state exactly.
Now, not everything has this, but everything ideally should have this to a certain extent. So for example, if I create a file, and then I run the reverse operation, what should happen? It removes that file, okay? So let me show you that first example.
So I'm going to have an example, temp mgmt hello. And all I do is I say this is the file, and I add this meta-parameter. This is built into mgmt. You don't have to do any of this. You just say reverse true, please. And here's what happens. This is reverse. Okay, so I'm going to run this file.
And what I've done, I've actually, I'll show you the code just so you can see what's happening. I've decided to make it a little bit fancier. So this code right here is just a very simple way to say every four seconds switch the variable from true to false, true to false. So since mgmt can run in real time,
it's just going to flip a variable on and off, on and off every four seconds so you can see it running. And the thing that we actually do, this variable is right here. See that mod variable? This one at the very bottom. And so this is the equivalent of anyone who's done Puppet or something like that has written some code, you ran the Puppet code,
and then you changed it in Git, and you ran it again. And in that new Git version of the code, that resource is just absent. You didn't change it, you just removed it from the code. And what happens? That file is still there on your machine, right? So the whole point of reversible is if you have a resource which is declared, and then at some later time that resource is no longer declared in your code,
mgmt will say, aha, this was asked to be removed, this was set as reversible, so it will do the reverse operation when that code disappears. And what I'm effectively doing, if mod equals true, by saying true is false, it's effectively taking that code out of mgmt. You could obviously just change this code by deleting the code
and running mgmt again, but this is more visual. So we're running this code. What was the file name? Tempmgmt, hello. So it's running here. And tempmgmt, where is it?
Did it work? So I'll just remove the state time file. And I'm just going to cat star. And you can see there's the file. Four seconds go by. Oh, it disappears. Four seconds come by and it goes true again.
And when it goes to false, you can see, oh, it's going to disappear. Cool? Is that cool? You can applaud if you like. I think that's cool, right? Okay. No, no, no, wait, wait, wait, wait, wait. Let's make it more difficult. So the second thing, what about this one down here, this second file? So this one I'm saying I don't declare the contents.
I'm just declaring the mode. And when we run this, now I just have to just double check. It might take me a second to get this one right. So there's the file.
And it disappeared. So I just have to actually make a file first because it doesn't create one. So echo foo into hello, right? So there's one that has to be there to start off. And so now when we run mgmt, you can see it takes it away and puts it back.
One second. Does it start off as true or false? I'm going to go, I think that's it.
Running the right code? Let me just check. There might be a bug in this, but it usually works. Oh, sorry, this one doesn't have the mode. My mistake. I went to do reverse three. Yeah, this one has the mode. That's why. You've got to pick the right demo.
So once more, we'll run mgmt on the left. So there's no file initially, so we've got to create one. And you can see, watch the mode. So it's just setting this. The reason I had to create the file is because in my resource definition,
I did not specify state present or state absent. So it's just going to leave that part alone. It's only managing the mode, and it can only manage the mode if there's actually a file there. And so that's basically, what it's actually doing is when it changes the mode the first time, just before it makes that change, it actually stores the existing mode to know what to reverse it to.
So whatever that initial mode happened to be on your system is there. Now this is a bit of an abstract example, right? Because changing a file mode is maybe not the kind of thing we want, but the kind of place where this is going to get super interesting is where in our code, we're declaring the state of running containers
and running virtual machines and all these other real-time systems, and when they disappear, we can turn them off and stuff like that. So we can build fancy systems. We could build a Kubernetes scheduler in 100 lines of MCL code, and it would be super safe and easy to customize, and no YAML involved. How long do I have left?
Until 50? 55. 55, oh my god, short talk. Okay, I'm going to show you another thing. So I decided we have resources, and our resource model has this event system built in, which for programmers means that in the implementation of each kind of resource, there's a main loop from event-based programming, main loop programming.
Maybe that rings a bell, but it basically means we can run some code inside that main loop. And one of the things we can do is we can run a TFTP server in the resource. It's just a simple daemon. It could be a web server. It could be even a huge database server, although that might get a little huge. But just as a simple example, we have a TFTP server resource which I built,
which I'll show you in a second. And the cool thing is, so you have the resource itself. When that first resource runs, it sets up the server and starts listening. It's in the MGMT binary, so it's just like a super powerful binary. And then the other thing is, say you want to actually have files that that resource serves. I've defined down here a TFTP file,
so there's no data on disk anywhere. It's going directly into memory in the TFTP server. And just for fun, for traditionalists, I've made a normal folder, which is this root directory here. So you can actually just have a folder of stuff on a disk, and that will also be part of the TFTP server resource. Now here's the magic part. You might remember this from a very early talk I gave many years ago
called automatic grouping. So this is a graph of resources that MGMT produces, right? And MGMT does a really cool thing with this graph, which is it makes it more efficient, in that if you see there's three package resources, and with Puppet and every other tool what's going to happen, it's going to see this graph.
Those are the dependencies. Those are the different resources. And it's going to start up the package manager, install Powertop, then shut it down, install Cowsay, shut it down, install SL, which has a lot of overhead. So MGMT can actually analyze this graph. You don't have to do anything. It happens automatically. And it will rearrange this particular graph to look like this. And that will group those three resources
that can be run together. And it will actually take that package resource and turn it into a like yum install, three packages in one transaction, which makes it really fast. And so the way this works for the TFTP resource is that different parts of the resource
that all should be part of the same running code base, in this case the server and all the different file definitions, will actually be grouped together automatically in the background. And so they'll all function together as a single entity. And so magic stuff happens. But to the end user it looks simple and separate. So different parts of your code, different modules in the Apache package
versus some other package can actually now contribute code to each other's functioning with automatic grouping. Does that make sense? This was always like a problem we had in Puppet. There was no way for this module to play nicely with the firewall module or vice versa. Exported resources got you for some of this stuff, which we can do in a different way and other way as well.
But this is a core thing which was not in Puppet, which I think is quite helpful. Do you want to see a demo of this? No? Do you want to see a demo? I'm trying to put the energy, so... All right, so let's run this TFTP. So I'm just running it here on the left. And I forget how to actually... I have a little... It's not as exciting as you want.
TFTP. So I have a go run. I just have a simple TFTP client in the Git repository, so you can just run that yourself. It's on port 1069, so I don't need root. And we can just ask it. I'll just put some here. I'll ask for file 0. And you can see on the left, you see in the logs,
the resource is like, ah, something happened. I requested a file, and you can see the output of the file right there. And you can do other stuff. There's another file on the file server. You can see that and so on and so forth. Cool? This is actually practical. It's not useless to have a TFTP server because I have to do something real. So I'm going to try this one demo over SSH
just to show you. Don't tell... So this is some phone that I have running in Canada. And over here, this is MGMT running. And what it's doing, it's just an MGMT cluster in Canada somewhere running a TFTP server, and it has files for, as you guess,
each MAC address for the device. There's a MGMT template, which builds the templates. And let's restart the phone. This is in someone's office, so let's hope they don't mind. I think factor set's probably better. I don't know if this is going to work because, like, I've been gone for a while,
and they might have moved the phone around. But in theory, this poor phone in some lady's office is going to reboot right now. And after a while... Here, I'll just show you. MGMT is really running. Oh, what was that about? Oh, that's my SSH forwarding. After a while, you should see...
This will take a little while because the phone is, like, from Grandstream, which is this Chinese company that makes really bad software. So if anyone knows anyone at Grandstream... I've found more bugs in these phones. It's unbelievable. So that's just the long-term demo. It should eventually come back, and it will provision itself. It takes a little while. And while that happens, you'll see the logs,
and, like, I'm really using this now in production for setting up crappy SIP phones. That's cool, right, Walter? Yeah. So I've got a few minutes left. 50. What is the time at the end? Okay, so I'm going to... So the connection area you're seeing is just my SSH tunnel because the web browser is trying to connect back,
but in a while, the phone should boot up. While that happens, I'm just going to sort of finish off the end of the talk, and then we'll look at the logs because that's awesome. This is a shorter talk, so what's left? So I'd always like a few more functions in the standard library. We actually have a lot of the Golang standard library imported automatically into MGMT,
so we have all the functions you could want. There's some new features which are not there yet. There's a few bugs, unfortunately. There's a really yucky race in the engine, and there's this function as values stuff, which I'm going to probably talk about a bit tomorrow in the languages dev room, which is not finished. But how can you help? This is about you. So use this. Test it. Patch it.
Share it. Document it. Start it. Blog it. Tweet it. Discuss it. Hack it if you think it's cool. Hack on this stuff. Are we at a hacker conference? Like, I get surprisingly few patches from hacker conferences, so I'm kind of, like, worried. And I basically... I used to work at Red Hat, and they stopped funding my work. I decided to leave Red Hat and just sort of do this on my own dime.
So it super sucks to pay for all this stuff, and life's expensive. So if you want to send me money on the internets, funding a hacker is very sexy. I'm trying to make this into something that will be viable on its own, because I don't want to do proprietary software. I would like to do this because I believe in this project. But, you know, you've got to eat. So in the next six months, or in 2020,
I'm going to be trying to launch a corporate sponsorship thing. So we're having an MGMT website that's launching, and we're going to put your logo in the big front and center for, like, some small amount of money per year. So if you work for a company and you can convince them for, like, a few thousand euros per year or something like that, a small amount, that would be great.
And then we won't forget you when we're a big company and we, like, are feeling angry at small businesses. I'll be like, you are a founder sponsor. So, yeah, please reach out to me. Send me a message to this contact form saying, hey, I'd love to have my company be involved, or I'd like to have a training session, or I'd like to help sponsor, help out.
We'd love to work with you. That cool? Will you all do this? Ask your companies, please. Let's just recap. It's a recapping joke. It's not funny. I've used it before. There's an IRC channel where I talk about what I'm working on and stuff like that. There's a Twitter bot and a mailing list. There's the technical blog of James.
So everyone knows about this now. So you can go to Google. It has RSS even. Check it out. I'm Purple Idea on Twitter and GitHub and all this stuff. So if you want to ping me, which is fun. Oh, this is actually the wrong date. So not tomorrow, but tomorrow there is one more technical talk about MGMT in the minimalistic languages
dev room that I'm giving. And then the day after, like in Ghent, there's this conference that Chris and another one else are organizing, which there's more fun stuff. And if you want, if you come, I will give you a sticker on your way out. Now let's just quickly see. Actually, you can see right here.
The TFTP server is in fact reading and the phone is provisioning. So it's starting up. So that actually worked. Wait, wait, wait. Two seconds, two seconds. You can thank Chris and Toshan if you like my talk. He's here in the front.
Thank you very much.