 Good morning. Good afternoon. Good evening and welcome to another edition of get ops guide to the galaxy I am Chris short executive producer of open shift TV, and I am joined by the one and only Christian Hernandez. Hello Christian How are you today, sir? I'm doing well. I'm doing good. I'm Excited because I'm wearing a tecton shirt. I just actually so on brand. Yeah. Yeah on brand, right? Yeah, so exactly So doing good doing good. We're back. We took a little break from from streaming to do kubecon to do the Get ops con right and so fails for those of you who Grab that playlist. Yeah. Yeah, if you grab that playlist drop it in the in the chat We did get ops con we did a day zero event for kubecon That went absolutely amazing far beyond what I expected and hoped for All of you out there you guys are awesome even with the digital fatigue even with the Meeting fatigue you guys stayed on the average three hours. So that's a long time for someone, right? That was a long time for you guys to be To be sitting at a computer and watching talks even after all the digital fatigue that we've been feeling so Which is part of the reason why we took a break, you know during kubecon and just that way you're not just inundated with stuff So so we're back right and thank you everyone who who attended get ops con and Chris is gonna drop a link in the chat. Yeah, I got a playlist take up the place. Yeah. Oh, yeah, I'll take your ticket Too many tabs, right too many tabs exactly This week so this week I'll be talking about application sets and app of apps design. So I'm first. I'm gonna do let me show my screen, right? So let me get this up and running I It's never where you think it is. Okay, of course not. No. Yeah helpful. Yeah, so let me know when you see my screen Is that yeah, it's been good. I got cool So I can't talk about Application sets without first talking about app of apps so in So let's talk a little bit of more about app of apps If you if you Google app of apps is the first hit. So This is a this was a now. Yeah. Yeah Well, it's kind of weird not seeing an ad first, right? So that's that's how you know, this is very specific So what's app of apps, right? So in the show description It starts off with the chicken egg problem. So that the chicken egg thing is Okay, well, I have all these applications I want to deploy in a get-ups fashion, right? So like I'm I'm using Argo CD. I'm doing get-ups. I have all these applications. How do I? How do I bootstrap in a get-ups way, right? How do I get my applications? Bootstrap deployed and managed in a get-ups fashion, right? And this is what I'm gonna make this a little bigger But if you don't see it's And let me drop this link here as well because it's it's a good read It's the It's what we call app of apps pattern. So since Argo CD Deploys only just it all essentially is it's doing it's it's applying YAML, right? Or it's applying manifest, right? It could be we we always assume YAML. I guess most people use YAML, but I mean, I guess you could also do JSON, right? That's a valid Manifest right that that Kubernetes takes so you have that all since all it's doing is applying YAML then The The manifest for the application is also YAML, right? So the the the idea was basically saying well I'm gonna create an application that does nothing more than just deploy applications, right? So it's an application of applications, right or app of apps, right? And here in this in this little diagram You can see How that works basically, right? So you have an application that says hey deploy this application this application this application that application and then And then it'll go ahead and deploy Those manifests, right? So then this does two things, right? It's really dead simple to bootstrap meaning that I can apply one manifest and get my entire You know infrastructure cluster up and running with one manifest and then you kind of also kind of by By extension you get this convenient a watcher app for all your applications. So So let's say here in this example like someone accidentally deletes the guestbook application well The application that deployed that application says hey, that's missing Argo CD then redeploys it. So you get this convenient Watcher application and then you kind of get a Way to roll these out so like you get the things like sink waves and Resource hooks, right? So it for those of you who don't know what that is. There is another I Did a stream about resource hook and sink waves and things like that. So Let's drop that playlist Red dot HT. Yeah, get off. Yeah, right. So I think I have that as a short command Oh, do we have it? We have it as a bank command. That'd be cool. So Yes, not this nice. There you go. Let's say if not there should be um, I just need to change that arc that link But yeah, yeah, well, no, that's yeah. Anyways, well, it it points to the same thing So we well, it's funny is me and Chris had the same idea, but we create a different Bitly links for it. It points to the same thing. I know at some point someone's gonna come along and trample your get-ups thing So I gotta yeah, yeah, exactly. So it's good. It's like those those Instagram people is like, this is my backup account, right? Except this is for bitly, right, I guess the tech the marketing equivalent of that Um, so yeah, so sink ways if you have you haven't if you haven't seen that I did a stream about that You get that as well since it's it's nothing other than just an application either place other applications Another ways the people tried to solve this problem was with helm, right? So they actually did a helm they created a helm chart of a of a Argo CD application, right? So they they kind of laid it out there Right as a as a standard helm help template helm chart, right? And they They parameterized it, right? So they basically made it parameters saying hey And this was kind of a convenient way to quickly stamp these out Right kind of stamp the saying hey, well if I have one application to many companies Too many clusters and I have any clusters to find like how do I do that? You can do that with app of apps or you can do that in this helm fashion where you just kind of say You provide your values.yaml file And then you can just quickly stamp them out like one, two, three, four classes, right? So, um So that was another way of of Of doing this, right? And this is kind of it was a It was an interesting way to solve the problem And so the some of the maintainers of Argo CD says, huh Why can't we just that built that into Argo CD, right? So, um So they came up with something called application sets Argo CD, right? Let me google that. I'm doing this is very Oh, yeah Yeah on the fly On the fly Well, I'm doing this very, um, what do you call it Andrew style, right? Like I'm just kind of show you how how I look look things up Yeah, um So this brings you here, but actually there's an actual documentation site here. So I'll uh, I'll bring that over Here to chat And so The application sets is meant to make this a little bigger. Oops wrong one I was like my discord screen got a lot bigger. I'm like, that's the wrong one. Okay Um And so, uh, I got application sets. So the idea what the application set is essentially a um A graduation or a a a uh, the the next iteration of what application sets work It's just like, all right, let's since everyone's doing application sets and these home charts. That's kind of Mixed things things together, right? Like actually just make this a thing. So they call that an application set so an application set is nothing more than I would like to say an application factory, right? So you give it You know, um, one of the engineers, uh, I was talking to one of the engineers or I go see engineers I said, yeah, application set is nothing more than you give it this application set resource It goes brrr And then a bunch of applications come out, right? So it's kind of like a like a You know, it's like Everything yeah sound effects money counter going yeah money counter going and it and it spits out applications, right? So it's it's um, it's a simple. It's essentially a templating agent to create applications, right? And so, um before I go into Like how to like how to define it and you know, how to use it Let's go to there's this, um Use cases every go so there's there's a few use cases, right? Um That it solves here. So this It gives you the zoom in like one more notch if you could just one more notch. Yeah Is that good? I didn't change the graphic size There we go. There we go. Okay Um, so yeah, you got the little argonaut right here. So essentially you got a a team working on a git repo They think you have argo and then you can stamp out your applications in You know, kind of like a hub and spoke and this is kind of the example i'm gonna go through it in a little bit Is um, I got a central argo and then many kubernetes clusters and One application set one application set can manage all of this for you. And so that's the that was the um One of the uh One of the use cases right that it solves is that if you you know here It says it I think perfectly if you need to scale across large number of clusters and automatically respond to the life cycle of new clusters So it's essentially hub and spoke management model so another one let's go over here is um If you have different teams, right? So if you have like an infra team working And uh, like another another team working on like say an application team two is working on another application um You can use application sets to manage all that for you, right? So it's supposed to be flexible to be um kind of a hub and spoke kind of design or a um, what do you call it? Um application scoped right where it's like argocd can handle You know, what do you call that? Um Oh man, it's been a long week The word is because i'm even blanking on it. Yeah. Yeah Multi-tenancy is what i'm thinking There it is It's a multi-tenancy, right? So it's meant to handle that as well. Um and then um You know, it's also uh supposed to be handling things like uh self-service of applications, right? So I can drop let's say a bunch of yaml and argocd will automatically Bring that up. So, um And so with application sets There are things called generators right and so um Here in this if you go to the generators it'll list them um There's different types of generators. There's one up up and coming that I'll explain. Um at the end uh, there's one that's um list generator And then um, I'm going to go through this really quick because I actually have examples to go through here and I have a cluster gen cluster generator um uh and then Hold on uh the git generator the git generator actually has two sub um generator categories is uh one called a directory and one called a file Right, so there's three main there's three main generators. Um List cluster and git and git has you know a sub sub generators, right? So let's go over um um Some examples here that I have if you guys want to here I can hard link that in the chat as well. So let's Um, let's go over to vizier studio right initial studio code Let's look at the definitely blow that up dude blow that up. Yeah, okay I don't even know what I have the set to Okay, so there you go This generator Here we go Is that good? Maybe one less How's that? How's that look? I know noreen Uh, noreen's on us now. Yeah, is that yeah let us know if if I if I go one up or down here So norenda have a question. Uh, oh, yeah. Yeah, what what is the difference between multi tenant and multi cluster? Yeah, so um, which is very valid point. Yeah, it's a very valid question. Yeah So multi tenant means it usually means that you have one cluster But many users in that cluster and they don't necessarily know about each other, right? So you have like this is the idea of like a centralized cluster um Where you know team one is working on an application and team two is working on another application and they don't actually Necessarily know about each other. I mean, I guess they can right? It's the central cluster in your team, but um plus up on size, please Just one plus, okay They don't necessarily know about each other that's that's multi tenant, right? So you have many tenants in in one cluster whereas multi cluster is exactly what it sounds like you have many clusters so Um, and it's not like or right you can have multiple clusters and all of them be multi tenant Right, so it's um, it's not one or the other so Application set so I have this application set. Um, this one is the list generator List generator takes um, it's a simple kind of like you're just listing elements, right? Um, you're doing essentially key value pairs, right? So cluster. I'm gonna call it cluster one URL. This is the URL of that cluster Right, and then I just go through the list cluster one plus two plus three um And that's the the generator section And in the template section, I'm just taking um What I listed up there And just plugging them in kind of like the helm template idea, right? So this is looks looks very Um, the helm helm charty thing that that I showed you earlier. This is kind of essentially that same idea They're taking those key values and just using those to populate these things also in this case My name of my cluster is gonna My name of my application is going to be Each iteration of cluster um and then When I'm building the the source repo, right? I'm taking things like cluster Right. I'm dropping it in here for my overlay and then My server url. I obviously get it from that url And so what this looks like so let's go back here Should I make this bigger let us know so um So if I do tell you yes, right? Yeah, it's just just right now. It's a huge how about that? Okay, there you go. All right, so let's do um I have I've already um, I have A management cluster and three clusters, right? So um like here cluster one plus two plus three, right? So I have three kubernetes clusters Um, and then I have a central management cluster that I installed argo cd on so I can you can see this with um config What does it get yeah get context? This will be hard to see so I'll just do dash o name um, I have three clusters that I'm connected to I have You know one integer and and three of them on aws cluster one plus two cluster three um See how this looks like this is yeah, that's ugly, but that's essentially what I have here, right? and so um So then I have if I do uh to get cluster, right? So then I have argo cd this clusters I think Uh Cluster list is it yeah, okay Right, I'm already let me let me clear this I've already um You know I have I already attached it right in cluster means the cluster that I'm running on Uh, so the ah, okay Status unknown is because you're there. Yeah, because I'm there. Yeah um Yeah, because do you like I'm already running here. So I don't need to add myself. It's kind of weird that does say status unknown, but um Let me go back here to the argo city and since I can see that here as well Uh clusters right I have cluster one cluster make this bigger about that. Oh, yeah Cluster one cluster two and cluster even more go bigger one more go bigger global home, right? Right like the fact there's gray space Yeah, yeah Just get rid of all the gray spaces. Um So I have this here uh three clusters cluster one cluster two cluster three right and this um in cluster This is the the one running on edge here. Um, so What ends up happening is that um when I go back to My application set is that essentially this is going to build three applications One in cluster one one um cluster two one in cluster three. So I'm going to have I have one app um called bgd deployed across these clusters cluster one cluster two cluster three And depending on where it is it's going to show different colors. So how do I What can I control click here? Yeah Yes open high trust high trust myself Yeah, right like I I think I turned that off a long time ago, but yeah, it turns itself back on from time to time. It's super When you do like an update or something, right? Right. Yeah Let me do this. No, I really meant for you to save that setting Yeah, this okay. So here I have overlays, right? So this um, it's kind of it's it's kind of hard Um to visualize this so bear with me. You may have to watch this video a few times It took me a while to kind of like piece everything together. Um, so Here so when this runs the first time It'll pick up cluster one Right, and it'll drop it in here, right? So here application sets this generator overlays cluster one so application sets this generator overlays cluster one and the change here Is there might not be a change it is blue, right? So I'm gonna have to show a blue square This for those of you who've been watching a while. This is my Yeah Application that shows the blue squares, right? Um When it runs the second time Right, it'll go over overlays cluster. So the second time is cluster two. So let's visit that cluster two Uh oops wrong file I'm gonna make it green and then the third one when it runs the third time It'll do yellow. I've added support for yellow. So it's not just blue green. It's blue green and yellow So fancy stuff going on. Well yellow and blue make green so this only makes sense Yeah, exactly. So I was thinking about Andrew was uh saying do cm yk, right? So oh god, no, we can get crazy like that Um So yeah, so this is essentially it'll create three applications. So um, It'll it'll load this it'll run three times and I'll end up with three applications So let's uh, let's do that. Let's let's have a little fun here. Um see apply get Give them examples application sets a list, right? So we're doing the list generator um, and then So go go. This is the the burr thing I was telling you about earlier. So yeah So it's doing that. Let's go to our go. Um So now here you see it created three applications boom ice Right created Here cluster one right here in cluster two and here in cluster three. So if I go to this guy here um And let's go to this guy's route I can't wait there. So there's an update on an argo cd I was actually talking to engineers today about it that anytime it detects like a route or an ingress It gives you that little external link It gives you a little icon that you could click that takes you to that route or ingress point Instead of now I have to actually click on it Wait until it loads scroll for infinity until I find it Copy it Open a new tab paste it hit enter like it it makes my life easier. But anyways, um So here it has the blue square, right? So Let's go back here. Let's look at Uh, Narendra has a question about namespaces. Um, like I'm assuming you're just using default because it's a demo kind of deal and whatever for No, there's actually, uh a An actual um, I'll answer that question Right right here after I showed but there's is that a really good question. I'll I'll show you What's going on? Um, and then cluster three we should expect the yellow. So let's look at the yellow I hope william tam is watching because this is what I have to do No, that's the that's the this is how you submit issues nowadays. That's how I submit issues I'm publicly shaming people. This is awesome So there's it goes yellow, right? Um That's how you get our fees in right? So that's yellow, right? So blue green yellow Um in different clusters, right? So I have so there's a few things going on here Um with one manifest I was able to create three applications spread across three different clusters. Um So now to nariv A nariv's question, right? So here, um Here I'm the application set actual manifest lives in a namespace called open ship get ops um here I am deploying the application to a To a namespace called bgd, right? So if I go to say here cluster one, let's make this a little bigger oops Control shift That's maybe one too many. Oh well So if I do k get a namespace Well, I can actually do here bgd, right? It'll show up Like bgd. So he actually I'm actually deploying the application in bgd here um when you see default here This is a project but in In the context of Argo cd. So Argo cd has its own concept of a project If I go over here, uh, yeah, one of the filters here Project it has a project here. I haven't created other projects inside of Argo cd. So the reason Um, that's the multi-tenancy aspect of it, right? You can create different namespaces inside of Argo and give permissions to those namespaces to different developers. So Um So yeah, so there it is So that's the answer to that. So that default project Has nothing to do with a kubernetes default project. It's kind of confusing a little bit um, but yeah, um, just because it's a project, right? Like because it's called project, right? Yeah, and also They don't behave the same either. No, they're completely different things, right? Yeah, they're different paradigms even so it's it's kind of Maybe I should do a show about that like how maybe I'm yeah How how how it differs, right? Because it is a mental shift that has to happen. Yeah Exactly and so cool. So, um Uh, so that's that's what that is there. So I deployed an application there if I go and um Delete this right Puster one for shame for shame Puster one bgd I do a foreground delete Um, it'll actually delete the the application but the application set since it's watching it Automatically recreates it. So it's saying oh, hey, you wanted, you know, this application to be created now It's gone. Well, I'm gonna recreate it and so that's the um That's that, you know overarching watcher. So Um, kind of recap. It's kind of a um keep value pair to in order to build um the The application the actual application, um manifest, right? And maybe I should show the actual application manifest. So if I do k get applications can shift Get out Right, I should show three, right? Oh, and if I if I want to show, um, oops application sets, you just add ETS to it right and it shows the bg application set So if I do applications and I do, uh, you know, um cluster one bgd Actually, let me edit this so we can See as you see it just built the um application manifest based on the template so so, um This is a fair question. I'm gonna ask it Are you using Like what shell are you using what enhancements that kind of thing? Shell in In your terminal window here. Yeah Uh, I'm just using like as an ash or power line. This is actually, uh pure line Pure line. Okay, which is which is kind of like power line. So if you look at power line get familiar with that And then there's um the the only problem with power line is that it launches a python sub shell so all so, uh Anyways, what's hillary called? Yeah. Yeah, by the way, hillary cover your ears I don't want the overhead of python running So there's this there's this other thing called pure line that does everything power line does except in bash. So So there you go. Um, so look up pure line And so and also I'm just using k instead of cube ctl because I just created an alias so um Oh, yeah, one thing I did want to do Note about the list generator is that this has to be cluster and this has to be url They're not just dumb key value pairs You actually have to name it cluster and you actually have to name it url. Um There is an rfv to make that any key value pair Uh, so that's out there. Um, they're actively being worked on and then um Uh A way around that today is there's this unknown Um field called values And that could be any key value pair, right like foo Equals a bar, right and then down here instead of cluster you can do things like, um, you know Values foo, right so you can kind of get around Uh, the fact that it isn't just a key value pair um, so so that's the list generator so The next one one of my favorites. Let's let's delete that. Um Let's delete these applications. Uh delete Very cool one manifest this should all go away Yes, so now it's starting to delete. So the next one I want to talk about Is the cluster generator so, um Cluster generators here we go and so here Um, let me remove some of this stuff here so that way you can clearly see this is these are my notes um Because as you see I'm learning is because this is new. Oh, this is one thing I forgot to mention chris that we got yelled about yelled at about um got yelled at about We did Yeah, so application sets Um The open ship get-ups operator is ga application sets come along with the get-ups operator. However There are tech preview. So right there we go. That's your so thank you for saying that. Yeah. Yeah. Yeah Yeah, I just completely forgot. I'm like, whoa, I should say that these are tech previews. So tech preview meaning that um You call, you know, if you have an issue you can call red hat for support, but you may not get the same support, right? It's like best effort. Um, right So it's not a fully big set of support docs and everything else yet. Yeah. Yeah, and then as as you see this is um It's still an alpha, right? So if you um if you see the first line It's not v1. It's v1 alpha one. So it's technically, you know, it's it's tech preview Yeah, it's new new so there will be breaking changes later, right? So like, you know Assume that assume. They'll be breaking changes. So, um So the cluster Generator A little background about cluster generators. So if you go here, um, if I do Argo CD cluster list or list cluster cluster list. Okay, cool. Um The clusters Argo CD has a list of clusters, right? So where does Argo CD keep that? In the database. No, this is cloud native. Um We don't want state stateful stuff. Um, we we use ecd for stateful stuff. So if you do, okay get Secrets, it's actually starting the secret. Um, oh, cool. Get ops. I'll per not a gaps operator open shift. Get ops. There you go. Oops, there we go Oh, okay, let's do. Oh, that's because your font so bad. You're yeah It was so big Greppo That's a weird kind of cookie. Greppo. Yeah, Greppo Um, so here so there's there's a secret um For each corresponding cluster, right? So if I do let me clear the screen Uh, get secrets We should get ops and this This secret, um, let's edit this here. Oops My fingers aren't where it should be. Okay edit so, um Each secret each cluster has a corresponding secrets in argo There is in the secret is data config and this config is just nothing more than the, um, cube Cube config file Um The name right so the name is base 64 encoded and the server is also This is base 64 encoded. So if I take let's just say name Right and then I do an echo Base I believe I can do right. See there you go. It's a cluster cluster one. There you go cluster one. Cool. And then, uh, let's look at the other one Right and then server Right and then we do that base 64 base 64 Right and it just shows the the connection of the right. So, um, so the reason i'm showing you the secret and the, um the fields in there is because this is what the Um The cluster generator uses right and so it'll Uh, this name right here corresponds to the name field in the secret Um server here, right in line line 26 corresponds to that server field in that secret, right? So basically it takes the secret it'll, um It'll, uh, um glean that information from the secret depending on the the the fields in the in the secret. Um That's how it it builds it, right? But how how does it know where to deploy the application, right? Um, and this is where the cluster has something called, uh labels, uh match label selectors and so, um Here I have a label. I'm saying bgd colon dev. So anything that I want to deploy the dev Version of my application, right? So here again, remember, um, I'm specific. Oops, specifying dev Um, I'm gonna label I'm gonna use that label in order to assign it right and and how do I assign it with the label is I basically label the secret. So what's gonna happen is I'm gonna label the secret Then the application says says, okay, you want this cluster to have the dev version Um, I'm gonna build it based on the information that I'm getting from the secret And how that looks is so first let's Um first let me close this because I think I've accidentally made a change. Don't save there we go And then let's let's open it up again. Oops Here we go. Um Or are we yeah, okay, so do uh apply So apply I don't want this generator. I want cluster generator and then I want, um Um application set right And so boom it's created, but if I go back here nothing happened right, so, um The reason nothing happened is I haven't labeled anything already. So And this is a good opportunity to talk about, um troubleshooting if I do okay get pods in, um Open shift get ops there is, um A pod called application set controller. So this is the one um That you want to take a look at right so just kind of To be clear application sets aren't built into argo It's actually a separate controller that all it does is that it builds application That argo knows how to consume So it's not like a um, it's not built into argo. It's just something that interfaces into argo. So That way they can have different life cycles in terms of coding So if I do a um K logs of that guy So one of the things here Yeah, so this here generated zero applications All right, so it generated simple applications because they didn't find anything. So if I do, um Let me clear the screen again Get secrets Could argo cd use only cluster labels? Like cluster and node labels. Maybe is that possible? That's a question from chat Yeah, uh, oh from william. Hey william. Um I only want a cluster only cluster labels. Can you clarify that? Yeah, just a little bit. I I cluster plus node labels. Is that possible? Oh, you don't want to use argo labels at all on this Well, no, I think do you Are you are you talking about? Yeah, I think that's a that's a separation of like you want to deploy to a specific set of nodes On a cluster. I think that's what you mean if you can clarify that. Um, yeah, we can So here, um, you know going back down this path So for those of you who are using acm. This is um analogous to Oh, okay. This is analogous to I'll I'll I'll reference that in a little bit. Uh, this is analogous to placement rules, right? So if I do a k um label Um This uh, I think I have to have to do secret right k label secret And then what um, what key value do I say? Oh bgd dev bgd dev in um Open shift get ops Right. So as soon as I label that guy, um, it creates the application on cluster three and so, uh So like this is cluster one. It should be down Cluster two. It should be down Plus three should be down, but maybe it'll no, it's not it'll it already deployed. So it um deployed the application on cluster three So if I wanted to deploy it, let's say, okay. Well, that that that's awesome. Let's go to cluster two Uh cluster two here If I label that guy Let's go over here Applications and then all of a sudden cluster two, um gets this application. So If you want to Whoever said you should get a yellow square sweet yellow square. So if you want to um, so this is so for those of you Familiar with acm. This is similar to placement rules. Essentially you um You pick a cluster based on the label So it's like, hey, I wanted to play on this cluster. All you need to do is just label the secret and then it'll go and deploy Um that application there. So now um Uh to williams question, right? So uh, the answer is no you're labeling a cluster You want to deploy the applications to that cluster if you wanted to um Deploy it to a specific set of nodes You would have to edit the manifest the actual like actually actually going here And doing uh node selectors in the actual deployment of the application. So Um, although that that's an interesting use case where it's like, like Can you do that for me? Right? Like, right? Like it'd be nice Yeah, like why not that's actually a pretty pretty interesting use case because um, I don't want to have to worry about managing my labels In each one of these like directories, right? Like right because then I would have He says his use case is deployed to a cluster with label x that has no types of gpu. The gpu is yeah Like that that and then I think that makes complete sense. Um So the answer is no and the way you would do it is just put in the deployment However, I think it's a very interesting idea because Then at that at that point I just have to Sky's limit at that point. Yeah, the sky's limit at that point, right? Like I can I can start mixing and matching there. So So there that's the um, that's the idea of the cluster generator. Um, so So the next one that's up, uh, let's um, let's delete this here Oh, one thing I do have to uh, I want to mention I do have this other one here if um If you want to target all clusters, right? Like if you just like I don't care about selectors just Put it in everything Um in every cluster that I have If you just provide an empty an empty list of the clusters, it'll deploy to all the clusters. So Yeah, William says yet another rfv. He has like so I um, William is uh, one of our telco architects And I speak to him um semi regularly There's a few rfvs that we we've come up with just by chatting about these use cases. So And also since it's alpha, if you have use cases, feel free to reach out The rgo cd team um engineers, especially the ones at red hat are very receptive like they they love these use cases right because you know You know, just imagine you're just like in a corner coding all day It's kind of hard to kind of you know, like if you're just coding all day It's you know, you don't have a chance to get all these use cases out They're very appreciative of uh of use cases and very open too Shout out shout out to shubik release that team. He's a great team At red hat here. Uh, let me see here Next is yeah, so if you want to target all clusters just give it an empty set empty set means all so All right, next one next one is actually my favorite one And it's one of the ones that I use a lot It's the let me close these because we don't need these anymore Don't say Where am I get dirt so the get dirt generator. So this is um Get hub directory generator. So this here it All it does it looks at your get repo looks at your directory structure And then just deploys applications depending on your directory structure. And so, um, Since chris, you know, I'm very Uh, I guess I guess there's no easy way to put it opinionated about directory structures Yeah um This is one of my favorites because um, all it There's no Need for like key value pairs or there's no there's no, um, there's nothing There's no logic that you need to to built into into it. It's just depending on how your Get repo is laid out. It'll lay out your applications that same way. So Hilary braided silver says opinionated I guess that's a That is a nice way of putting it. Um And so so here I'm to get basically the generator you say I'm gonna give you a get repo Right. Um, and then look in this path and you notice how there's a star Um There right basically it says pick up all the directories that you find in this path And then create my applications based on that. So I have something called, um Uh, let's see here, um, you know, it'll take path Right and base name. So base name is like built in right so path base name meaning Whatever you find in star Um, and then down here It says build me an application based on that. Um You know here i'm gonna deploy to cluster one In the namespace price list and then, um In the path that it found right so this whole this whole thing and then It'll name it based on the namespace, right? So the best way to see how this works is if I go over here Get dir generator applications. So here I have, um, how do I go here? I think I just have to Anyone from, um Octo tree that's on I have an rfv. Um, Jesus I give you a tool and you Here's the get dir generator So here I have three applications, right? I have, um an application Uh, that's just a that's a bunch of yaml, right? So this is yaml just bunch of this is my front end application All the yamls all essentially this is my front end Um, and then I have a a database which is actually a helm chart So this is interesting. So I have an application made up of some yaml that I have written and A helm chart that basically I'm just consuming a service right here in this in this case. I am using the bitnamis It's my values. There it is the bitnamis My sequel database Right because I'm going to create like to say an ha database, right? So here. This is kind of interesting I have an application that I've written Um, and I'm going to just use a database from a helm chart that I found And then I have some configuration that does things like sets up our back and sets up the The namespace You know kind of config like things And so if I go back here So here essentially since I have three directories, it'll create three applications, right? It'll look in this path It'll take, um, it'll name it whatever the base name of this path is. So if I go back Uh, so the base name it'll be prices front end would be one application prices db Be the next application and prices config would be the last one. Um, and that's how it gets the name And then the complete path right is basically everything that I found it here. So, uh, so since the best way to Figure things out is to apply it. So let's just apply Did you do here we are get dir generator And then here upset Come on. There it goes. There it goes Going back to our go Here so now here I have, uh, three applications right all deployed cluster one as you see here Um, there's a config that goes out Right that creates all that. Um, so that's one application, right? So that's one directory as you saw in my my configuration here So I press this config and then there is the db It goes here, right and that's the next one that that's going out and then the the front end, right? So the front end is actually waiting I have sink waves again. If you haven't caught that sink waves Um and hooks so it's basically waiting for the db to come up before Um, uh before it actually finishes deploying. So if we go to the db Um, this is all This is a lot for a database for simple database, but um, I kind of wanted to Show if I go over here cluster one if I do k get pods um priceless I have a um ha because I just wanted to get fancy and do an ha example of um, there's operators for that, you know, yeah There you go. Yeah That's right. Yeah, and so I just wanted to get fancy do a health chart for this uh database thing here for the first cluster. So um, that's how that works I have um base based on your directory structure um, it'll deploy different um Different applications based on that on that directory structure. So this is pretty cool if um, you know, this works if you have like, um Like a model repo with with all your deployments and all the So you can like in one shot just deploy that that whole that whole application stack. So Also, it's like get up some steroids and feel like right. Yeah. Yeah, exactly. Yeah, it's it's a way to um To massively deploy these out. Yeah So, um, one of my one of my favorite actually favorite things about argo is when they came out with application sets I was like, yes, this is yeah, no, I I could tell your excitement just by talking about them in chat I didn't need to see your face. I already know It's like Well, I was also talking to gerald, uh, one of the architects in canada. Um, I talk about them often on on the on the stream, but um The like I was like literally like like shaking. I'm like, you don't understand this is You know, this is a game changer and then he's like, yeah, whatever and then like a few weeks later He goes, oh, yeah, no, I see why you like these After after after he started playing with it for a little bit. He goes, oh, yeah, I could see I could see why you like this Oh, yeah, I could see why anybody would like this. Absolutely So, uh, the last one So if none of these so the last one is kind of one of those catchalls Like if none of these tickle your fancy sort of things, um, the last one here And I think we're doing pretty good on time. Um, we do have a hard stop today, by the way Yeah, yeah, so I think I think I think it's it's it's actually we did pretty good on on time here Yeah, um is the what we call the get a file generator, right? So what's the get file generator? So get file generator We'll deploy your application based on a config file you have stored inside of get So here Here is you say, okay um This repo this path right in every directory every sub directory. Yeah, yeah every directory you find in this path There's going to be a config dot json file That's what I want you to read. That's what your this is the application set does and in that file It could so in this file it can be Configured however you want it to be as long as it's valid json. That's all that's really the only um, there there's there's two prerequisites one it has to be json. So there's a um, there's a RFE to out also do a yaml, but right now it's just json And as long as it's valid, right? So it's it so this is kind of a Whatever your wildest dreams could be so Greatest over ask can the the same thing be done with docker files Can this same thing? I don't think so Done with docker files. I don't think so I don't think so that's interesting because this is argo. That's operating. Yeah. Yeah. So it'd be interesting To find out if this Can it read? Okay. Oh, I see what you're saying wildest dream Can it can it read? Uh, no For for at least for this one. No, it has to be a config dot json file like it has to actually say config dot json Or something dot json does not say be config, but it has to be valid json um, so if I go here In a look at the git file generator I have a here if you notice i have cluster one with a config here A cluster two with a config and three so if I go over here and look at this json file it's essentially I'm just building a config right name server overlay Here, this is um, if jerald if you're watching this he had kind of a rfv on this generator But I think the config dot json one would probably work would have worked as well for his use case because It could be whatever key value pairs you want. It could literally be foobar. It could be dumb equals. Yes It could be whatever you want Because all it's doing it's reading that file And then taking you know cluster dot name. It takes it actually from this config file cluster name, right? um Here cluster dot overlay is cluster overlay uh cluster dot server Cluster dot server length and then you know namespace. It could have been cluster I could add namespace here, right and then put it in there. It'll so this is essentially Whatever your wildest dreams in the rib And so uh So this this is how it builds that out. So if I go here um Here cluster one. I'll do a cluster one overlay That sort of thing. So if I go back to argo Yes, he so press this is it's up and running as soon as it's up and running. Let's delete it Since we do have a hard stop. I like to do the big reveal of uh apply And this is git generator application set Go go the factory is going and then um Notice how it is deploying this application now, right? So depending on um Can I look at the config here? I think I can have details Manifest there we go. Um You know, it basically it um, it took that config dot json file and just added boom boom boom boom. So um So yeah, so that's the The I guess get yeah application sets in general One last thing I want to mention about application sets is you notice the generators are it's a um, it's an array So you can actually mix and match generators. You don't have to have separate generators You can actually use git dir along with git file along with right so you can You can actually use all all all all four of them if you want All at once in one application set that's they don't you don't they don't like stack on each other, right? So like you can actually override things. So you have to kind of be careful, but You can technically use use them all together. So um, so yeah, that's application sets In under an hour. So I'm gonna need some water. Um, yeah Because it was uh, not stop talking. This is I do have a corresponding blog about this Um, oh, yeah, that's right crap. I should have grabbed that for the Open shift blog. I do have For some reason didn't show up We'll find it first Who will find it first? Yeah, this is probably like the last thing I want to show before we leave Flock is ticking too Let's do It was recently was it not there we go there. Found it. Yes. I found it I uh, there's there's a blog about this right? So this is the stream version of this blog that I've written So uh, check out the blog Um, I go through it in in gruesome detail um, essentially the All the different mixing matching. So Um, so yeah Awesome. I think I think we're I think we're good where we have a hard stop. Yeah 40 seconds to go. That's uh, appreciate that Yeah, all right, buddy. Thank you again. Thank you audience for tuning in and thank you everyone Stay safe out there. But everybody, please. Yep. Yep. Cheers everyone