 Good morning, good afternoon, good evening. Wherever you're hailing from, welcome to another episode of Get Ops Guide to the Galaxy. I am Chris Short, executive producer of OpenShift TV. I am joined by the one and only Get Ops Extraordinaire, Christian Hernandez. Christian, how are you doing today, buddy? Hey, I'm doing good and I'm happy with excited. This is the first official guide to the Galaxy. Yeah, new intro this week. New intro, yeah. We did a test run last week. Now we actually have this. Everything's just off, yeah. So we got the official intro bumper, which is really cool to see. I wore my rocket t-shirt because we're going to the Galaxy straight to the moon, right? Container to Linux. Container to Linux, that's right. So yeah, and Hilary says, good start. We started right on time this time. Yeah, so we're improving. Yeah, we're on top of things since we're official now. So yeah, I'm doing good. Chris and I were talking kind of a little bit before here. I think kind of a crazy couple of weeks. Yeah, we got a lot going on. We got a lot going on. A lot going on. There's KubeCon coming on. There's Summit coming on. There's the summer. People always ask me, when is your busy time? And it's like, it's always summer. Oh, because that's when all the conferences, all the events are. Everybody travels, time off, everything. Yeah, if people want to take time off and do this. And it's just nice lull, although during the winter. But this is the point. I don't even know if it's a lull, man, because it's just like you got to do all the other stuff. Yeah, exactly. You weren't able to do, right? Yeah, you got to do your day job stuff, right? So cool, cool. So yeah, so this week, we're talking about Helm, right? So Helm, Helm, Helm. So a lot of the times, I think a lot of people's default templating agent is customized, right? And so, but almost ignoring the fact that we have this whole ecosystem of Helm that existed beforehand, right? So, right, like, this was this thing. Yeah, yeah. And especially we didn't use it for a while because of reasons. Yeah, and now that it doesn't have tiller, it's like, yay. Flood, right? Right, exactly. Incomes the water. Incomes the water, right? So I think it was a good opportunity to have a show. Kind of introduce Helm in kind of talking about Helm and GetOps and how to use it with Argo. And this will be going forward. We will have not duplicate shows, but shows where kind of will we introduce something and then maybe another show we go a little deeper and another show we'll go a little deeper. So yeah, so this one, we'll talk about Helm. And I think I kind of want to introduce Helm a little bit. I know it kind of seems, let me share my screen, screen, share, and this is always a fun dance I do when I don't know what screen I'm sharing. So hopefully this is the right one. Hey, looks like it was on the first try. Oh yeah, by the way, slides are already uploaded too. Yeah, there we go. Yeah, so, yeah, yeah, grab the link. I'll throw it on there, you guys. This is a very short presentation. It's kind of, I kind of want to introduce Helm only because as a Red Hatter, we actually weren't really using Helm all that much until version three. So it's, you know, it was very big in the ecosystem. I've used Helm before in the past, like on Bear Kubernetes clusters where I want to install some things. I don't know if you guys have seen the ones that are using, you know, I'm pretty sure Washari here has used Helm in the past. But like you start using Helm, you know, V2, right? And then there's Tiller, and they're like, oh, you need to secure Tiller-ing. And I don't know if you've ever read that securing Tiller doc. And it's like kind of overwhelming. I'm like, you know what, not gonna use it. The lazy person in me kind of was like, okay, you know what, never mind. But since Helm three came out, they, you know, they took that away, the need to have Tiller. And so now Helm is the first class citizen on OpenShift, which then, you know, then extends on to your GitOps workflow. So. And thank you Helm team, seriously, right? Yeah, yeah. I know that wasn't an enormous amount of effort to get there. That was a huge undertaking. Yeah. So thank you very much to the Helm team. Yeah, the Helm team, that was great. And so for those of you who don't know, Helm is kind of a package manager for Kubernetes application, right? So think of it in the same vein of like, like DNF, yeah, or like even like DNF or like AppGet or whatever, you know, Pacman, choose your package manager. Yeah, whatever package manager you want. Yeah, yes. Yeah, that's the kind of thing. Right, what is it? Oh, wow. I'm all out. Yeah, same idea, right? So, you know, Helm was a way to, you know, define a set of, I guess, manifests in a, in a predictable manner, right? In a release manner, right? So it's like, okay, I have these manifests that have, that provide this functionality. And there's an order that we need to follow all that fun stuff. Yeah, all that fun stuff, right? And so Helm was a way to install things essentially, right? Like if I want, let's take an example, like MySQL, right? Like a MySQL, you know, like an HA MySQL deploy. Like where you have to have multiple steps done and then like you got to set up a replica and then you have to do, you know, the syncing afterwards, if it's like a read, write kind of deal and you already have data in place. Yeah, exactly, yeah. So you would, you know, you need some logic. Some logic built behind it, yeah. Yeah, Helm does some of that, right? Like you can do a Helm install MySQL, replicas equals three and then off it goes, right? So it's kind of like, you think of that vein of doing package management. And it also, I guess by extension, it's kind of like a templating engine if you really think about it, right? Because you can write your own Helm chart and you can say, well, I want to templatize my application and its deployment. People can then give it parameters and it can deploy it in whatever fashion they want to deploy it, right? So it's kind of, you know, in a way a templating agent, right? So there's a few key pieces, right? So there's what we call a Helm chart, right? So it's essentially, yeah. The calendar driven YAML, that way you all live the right, yeah. Yeah, yeah, so it's, we're all YAML engineers, right? Right. At this point, we have to put that on our. We gotta start with YAML and work our way up. It's like being a web dev HTML. It's now YAML, right? For us, it very much feels like that vein kind of thing. Yeah, it's like, you just, you have a chart repository. Like essentially is, it's everything packaged up Kubernetes YAML files essentially. And, yeah, so there's like, I remember that very well when YAML came out and I was told use this thing that uses YAML and read the YAML specs so you understand it. And I'm reading the YAML spec and I'm like, this isn't helping me understand it. Get down, get down. Yeah, it's the very early days. Yeah, and now it's my life, right? Now it's just like a risk deep in it this whole time. Yeah. It's like, why would you use this instead of XML? But you know, here we are. No, here we are. So yeah, so it's essentially the chart is the package consisting of all the related Kubernetes YAML files. And then we have a repository set exactly what it says it is, right? So you have a repository where you have a collection of charts, a place, central place where you can store and distribute your, all your charts, right? And a release a specific instance of the chart running on your cluster, right? Kubernetes cluster, right? So you have the chart, right? So you use the chart from a repository to install a release. This essentially is what it is. You have that inside of Kubernetes running, right? So how does homework, right? Kind of this high value, right? You take the chart, which may or may not have default values defined. You can also have things like, well, you're required to submit me some values, right? So you can have some dependencies on there. But essentially you have a chart and then you have your values and you kind of, you know, glom that together and it ends up being a release in OpenShift. Either in a namespace or multiple namespaces. I think right now it's a one-to-one, right? You have to have a Helm chart installed in a namespace. So that's pretty cool. You have really multi-tenancy there. So this is essentially how all that gloms together. So and Helm is essentially, you know, if you ever build a Helm chart, I've actually just started building Helm charts because, well, one, I actually needed to do something and like an operator was too much for it, right? But a Helm, it was like perfect for Helm, essentially. So people always ask me, well, what's, you know, why would I use a Helm versus operator, you know, versus OpenShift templates? It's like, it's not a or thing, right? It's like an and thing. Like, you're gonna use the right tool for the right job, right? So, you know, like operators, like I wasn't orchestrating anything crazy. Like I wasn't, yeah, if you're not doing day two stuff and, you know, adding a lot of extra, you know, functionality to it, right? Where it's like, yeah, I can upgrade itself and do all these other things, which you can take a Helm chart and make an operator out of it. Yeah, definitely. Like to give you an idea of like that, like conceptual path, right? Like Helm can be part of your operator. Exactly, yep. To kind of like layer up, you know, if that makes sense, right? Like you're going outside in the cold, you should have backups and redundancy. Yeah, yeah, exactly. Now you need an operator, but you can start with Helm to do that, which is awesome. Yeah, it's exactly. So like my use case was, you know what, like I just need to deploy, you know, a bunch of YAML and have it, have people pass parameters to it. And I was like, why, you know, like an operator, although great and it would have done the job, an operator was pretty heavy. It's like taking a, yeah. They can be, yeah. Yeah, taking a machine gun when all you needed was like, you know, like a slingshot, right? Like it'll do the job, but it's kind of heavy for it. I'm always the right tool for the right job type of guy, right? And actually Braided Silver Hillary here is actually had this conversation with her on Slack, right? About, you know, like, should I make it an operator? Should I make it a Helm chart? And yeah, so Bashari says, Openship templates are deprecating, correct? Yes, so they are deprecating. They will still be a valid API because for the whole lifetime of version four. So however long version four stays out, that's how long it will, the templates will work. But we are essentially deprecating them saying, instead of an Openship template, use a Helm chart. So, and it's essentially the same thing, right? It's like essentially a way to make a template, right? And this is, you know, kind of like, I'm templatizing something. So it's kind of, it fits in really well, so. And then, you know, you can create a values.yaml file, right? And so then instead of passing it through the command line, like instead of saying Helm install dash dash set, dash dash set, dash dash set, you can put that like in a YAML file, right? A lot like Ansibleflowers, right? Like, here's my settings for this thing and it'll pick it up dynamically, kind of deal with any changes happen and rerun it, yeah. Yeah, it's kind of like doing the at values.yaml, right? Whatever, an Ansible, same idea, just pass it to YAML and Helm will take care of that for you, so. And so yeah, and so, so Helm integration with ArgoCity, so it's. Yeah, let's put it. Yeah, so let's put this together, right? Let's marry the two together, yeah. Let's marry the two together, because there's a lot of value in it, I think. So I have a, people have like this whole history of Helm charts, right? They have this whole, there's a whole ecosystem of health charts that people have been using it and then these get-up guys, right? Come say, oh yeah, I do everything with get-up. These get-up guys are doing everything with Customize and it's like, well, there's value and I think using both and I think everyone now believes that, right? So there's a value of, especially if I am consuming a service, right? So I, not in this show, in the next show, I'll show you how I'm kind of pulling pieces, right? When I wanna talk about app of apps, but like if I'm deploying an application and I'm consuming a service that Helm installs, right? Like my friend in app needs a database, but like I don't wanna manage that database, right? Like I don't wanna store all that YAML because it's like the same YAML no matter where I'm deploying it, I'm just gonna use the Helm chart, right? And so I think your applications are made of different components and a Helm can be part of that component, right? So with Argo CD, you can actually just say, deploy this Helm chart with these values, right? You could override the default chart values, right? Either separate value files or individual parameters, right? And when we're messing around here, we'll mess around with some of these parameters here. So this is managed via the UI or the CLI, right? You can do this with the Argo CD CLI or the UI, right? We'll use the UI. I actually don't use the Argo CD CLI all that much and I'm a CLI guy, it was interesting. Right, like that was about to say, you're like, aren't you the CLI guy? Yeah, yeah, so it's, well, it's kind of funny because I guess that's kind of an extension of the practice of get-ups, right? It's like, I'm just doing everything and get and it applies like I do. I rarely need to go down to the Argo CD CLI, very rarely. Really almost a troubleshoot. So maybe I should make it like a troubleshooting stream. Yeah, we should make up like how will this break in all the merry little ways. Yeah, and like how to troubleshoot it, yeah. So I think that's a, I'm gonna put that on my list. Good idea. Yeah, so this ever growing list of things to talk about but I think that would be a good- But a growing list is better than a shrinking list. That's true, yeah. Yeah, so yeah. So there's a caveat with the values.yaml file. Oh yeah, yeah, yeah. So the, if you have your own helm repository, you will store your values.yaml file in that same repository, meaning that you can in a get-ups way in Git, you can store your helm repository and the values.yaml file and then do that workflow. This breaks, right? When you're using a public helm repo because you can't store your bars that your values.yaml file on someone else's, like so exact. This is why you need to fork. Yeah, yeah. Which kind of sucks, but yeah. There's a few ways around this and I'll go over it when I'm missing around here. On the demo or when we're hacking at it. Hacking at it until it works. So that's like one of the things, one of the caveats at the call out is that you can only store the values.yaml file in Git is if you own the helm repo, essentially. Which a lot of places do, right? They have their own internal repo, so that's not a big deal. But if you are consuming external repositories, that might be a challenge to do that. In a GitOps fashion. Or you could get crazy and submodule it somehow. Yeah, well, like you said, you can fork it, right? No way. I mean, that's, you know. As much as a fork diverges from upstream if you're able to keep up with the upstream, and that's all you're doing is just pulling from upstream and adding your values file, right? That's a good pattern. The second you start mucking around with stuff in that fork and you're breaking the upstream compatibility, you're gonna have problems, right? Well, and also some people like to do gating, right? So they do a gate where they sink from the public. And then do another, yeah. Yeah, so that's, you know, you can definitely do that. I mean, I know Chris, you worked, you were in the military, right? And like, you were disconnected all the time. So, yeah. I was putting it mildly. And so like, yeah, running a disconnected network, I mean, that makes sense, right? You're just sinking from the internet and then providing your own. So that'll work too. But there's a ways around it if you're just consuming the public repo. So that's really all I had in terms of like presentation. I kind of want to just talk about Helm in general. You know, what it is, what it does. I don't know if there's anything in the chat. I think, no. Just so Brayden Silver said that they would love to have a debugging episode, you know. Yeah, debugging episode. I think that'd be good too. Yeah. And so one quick note, I do have to give a shout out to Andrew Block, right? Always. Always, right? So he'll always... I've got his book too. Hang on. Yeah, sorry. Well, that's what I was saying. We need to post his book because he literally wrote the book. He literally wrote a book. A book on Helm. So... I got to have been here somewhere. I got the link. I'll post it here. So yeah, Andrew Block here. He's always helping me. He'll always tweet me. He goes, I saw your show. No wonder you were asking me all those questions. Ha ha ha ha ha ha ha. Hey, how does he have time to watch your show? Yeah, yeah, exactly. Who knows, I'll put it on the stream here. So by the way, Learn Helm, right? I put it in the chat for those. Yeah, this is also in Safari books if you have a subscription for O'Reilly Learning. So I told him I was gonna give him a shout out to his book. I promised him that I was gonna buy it, so I will buy it. I did buy it, I think. Yeah. I just kind of find it. Yeah, I need to buy Dolby's book. I need to buy Andrew's book here, so it's gonna, I'm backlogged on books I need to buy. So yeah, so he literally wrote the book on it. So check that out. Good stuff. I have happened to have the luxury of being able to ping him on Slack. So, but most of you don't, so the book would have to suffice. So I have an OpenShift cluster here. If you go to the developer view, the skip the tour, I know how to use it, there is a section on Helm right here, and you can actually deploy things and manage them directly from the UI, right? So first class citizen on OpenShift. So I just kind of wanna point that out. Kind of something weird that happens with Argo, and I'll show you when I do it. Do you need to increase your font size a little bit, folks? Yeah. Probably appreciate that. All right, right there, is that good? Yeah, if you can do one more. Like, there you go. You like that? Yeah. Here you go. So we're on 133. Oh, sorry, so I have to remember that for next time. Watch Donald Chime and it'd be like, it's too small. Yeah. If it is too small, let us know, please. Seriously, you can't read it. It's important, so yeah. Yeah, yeah, exactly. You can't be able to read it. So yeah, so to get an Argo CD application, we are going to be using, let me see here. Maybe get the repo URL, right? So we're gonna be using this repo URL. These are, there we go, Red Hat Community of Practice Helm chart, right? So we have a lot of stuff here. There is, even the IBM guys started putting stuff in here. So this is kind of unofficial, official, right? So these, a lot of these Helm charts are written by our consultants. So it's unofficial meaning that like, you can't call Red Hat to get support, but it's official in that like Red Hat or to writing them, right? Right. And there's a, you know, how to submit a new chart and they're like very strict on what gets, you know, what gets put in and there's like a process and stuff. So I'm about to begin this process because... Not very strict, it's just there's governance, right? Like... Yeah, yeah, yeah, exactly. Strict in that like we're not gonna put anything broken on there. Right. Yeah, we're making sure this is curated well. Yeah, so I'm going to, how do I move this here? You guys don't see this, but I see this here. Oh, there we go. There you go. I don't want to accidentally click hang up. Hang up? Yeah. Oh, hi folks, it's just me now. No idea what Christian was about to do, but let's try it. Who knows, right? I'm about to put the chart that I wrote on here. So I'll, you know, so look for that. Okay, unless you're... You probably don't care about it, this group, it's a Windows container. Help chart. Oh, they might care, you don't know. You might care, yeah, they might care, yeah. So I kind of have weird two worlds going on here, unlike the Windows container guy, the most to get ops guy, so it's kind of like... But I mean, you know, it's just YAML at the end of the day. When you put them together, right, exactly. When you put them together, what does it look like? YAML. It's just you're pulling an image in from someplace else. That's pretty much it. So here in the Argo UI, there's a section for repositories. There's a Get Repository, there's a way to add a Helm repository. So you can actually click here, do Helm, and we're gonna call this red hat developers. Helm, right, in the repository URL. Cool, you have the username and password in case you have it, you know, username and password and a TLS certificate, all that good stuff, right? And you click connect, you'll see that... Oh, it identifies with this Helm. Yeah, yeah, so like, so it's, you know, it's not only a first class citizen on OpenShift, it's also with the Argo CD, right, through the Get Ups tool. Just a little Helm logo, get logo. So here you can start managing your repositories here that you're connected to. Let's create a new app. All right, so when we'll call this, I'm gonna be using Quarkus. Oh, fun. I love Quarkus. Like, I'm not a Java person in any way, shape or form, but I love Quarkus. It just blows my mind. Well, it blows my, well, because coming from, you know, coming from like the old Java world where you have, you know, where, you know, it can take minutes for your Java application to come up, and then now to... Or an hour in some places. Or an hour, yeah. Right? You know, going from, you know, that to like, coming up like in a snap of a finger, right? Like seeing like that Java application come up like almost instantaneously, it's pretty cool. Yeah, I'm telling you, like Daniel O, anytime he gets out there and is demonstrating Quarkus, like the one time last, two years ago now, he was in Raleigh doing DevOps stage Raleigh, he was doing a demo of Quarkus, and literally people in the audience were like, whoa, wow. And like Raleigh is a big Java, like there's a lot of Java in Raleigh. So a lot of Java people, they're very mind blown, trust me. It is cool stuff. And I don't say that lightly. Yeah, yeah, exactly. It is very cool. Yeah, it's pretty cool. Like to the point where I was like, oh, I have to show this, it's cool. Oh, Quarkus app here with the default sync manual. So all this stuff, I'm gonna auto create name space. Like, oh, this is just normal, whether you're doing Git or Helm, you're doing this here. So doing repository URL, if you click here all of a sudden, right, you see a little check mark says Helm, which chart, right? So this is pretty cool. You can, there's some like IBM stuff. I'm gonna use a Quarkus. And then you can choose what version, I'm gonna use the latest. Cluster destination, that's normal, right? Name space, let's do, let's call this demo for lack of a better name. Values files, right? So here, you can actually upload your values files, right? You can change it here, right? Like if you're a YAML person, right? Like I feel at home at YAML, whoops. You can edit the YAML directly, you can upload the values files directly here. Or you can just give it the parameters here. So this is cool, this is kind of like a, yeah, it's kind of nice. So you don't have to like kind of, if you already have the values files and just upload it, but if you don't, if you just kind of want to just deploy an application, you can actually choose it here, right? So that's cool. I'm curious, if you uploaded a volumes file, would it update these parameters, right? Cause I could see this as being like, a way better way to manage things like per app, right? Yeah, yeah. So it would be interesting. Yeah. If you have multiple versions of like a microservice running, right? But they all needed different parameters based off, you know, some business process. Yeah, exactly. Yeah, yeah. You know, being able to just be like, okay, this one is connected to this and it needs those parameters. Yes, it's great to put that in a file and save it somewhere. But also if you got to move it on the fly for some reason, performance, disaster, whatever. Whatever, yeah. Yeah, yeah, it would be nice. Here, this is a source to image builder, but I'm not gonna do that. I'm gonna do, so I set this to false. Notice it says remove overwrite. So I'm saying I'm overriding the default values, right? So I'm gonna set this to false by default. Where is it? I wish these were, there we go. Yeah, I was like, I wish there were an alphabetical order. Oh, actually they are. Thing, sub-resource. Thing, sub-resource. You wish the sub-resources were an alphabetical. Yes, exactly, that's exactly that. I want the sub-resource to be alphabetical, not it. Exactly, so at least you know how I think, right? Now I know. Yeah, so this is a route to the last. To the point TLS route, absolutely, yeah. Yeah, so you did that true. See here. So redirect, I want this to be allow, right? Insecure, right? So that's like, if you want to, I also want it. Forward from HTTP to always HTTPS kind of thing. Yeah, so redirect, it won't listen on 80, but if you put allow, it'll listen on both 80 and 80, right, 443, right? So here there's other termination stuff, right? And then the image, I want to use a specific image. So where is that? That is image name, image name, there we go. So I have this, since this is a cooking show, image name, there we go. I'm using, again, Andrew Block's image. Great artist skill. Yes, exactly. I'm going to, I'm going to make this an NFC and sell it. NFT, NFT, yeah, NFT, sorry. Non-fundable token, which is- Yeah, yeah, exactly, NFT. I want to make this an NFT. Yeah, so that's a conversation for another show. Although I would buy Andrew Block's NFT images because they're worth their weight. I feel like it'd be too expensive for you. Yeah, that's true. The bidding would get pretty high. I need more like Ethereum or something. So you click, you click create, and then normally you'll see a different icon here here. It knows that it's a Helm chart, right? Right, and then here- It's out of sync. Out of sync, right? There's nothing there. So if I click sync, it will begin a sync process. Essentially, it installs the Helm chart here, so. Wow, nice, just like that. Just like that, right? And so, which is pretty cool because good news, bad news, right? So good news is that you don't really have anything on, in Git, that, right? Good news, bad news. So like, I didn't need to apply anything on Git. Bad news, good news, right? So, you know, I can install Helm charts here. Left and right, like without now any obstruction. Yeah, yeah, so I can, and here we go. So we got the route is up. I told you, Quarkus is fast, so. So it's here, let's get this URL here. Let's paste it. Oh, you forgot the queue. I forgot the queue, yeah. Right, so then you get, you know, get up some Helm, maybe you can use it side by side. And so, there. So I have the app up and running. So I actually, one of the things I found kind of weird. So I think, I don't know if Shubik is on chat. Maybe he's watching this later. Maybe. The, one of the, what, Argo CD architects. If I go here to the developer view, right? And I look at demo, right? I can see the, I should be able to see the Quarkus app here, if it, come on, let's go. Did you irritate Firefly? There we go. Yeah, I know, I don't know how I did that. So here it shows the actual app, but if I go to Helm, it doesn't list it here. So I don't know what, I don't know what happens. Also another thing that's kind of weird needs to keep in mind if you do. I think I know why that is. If you do a Helm here, LS, it doesn't show up either. So it's kind of, yeah, so it's kind of weird. I think it has to do with, if I do an OC, get a secrets. Helm installs a, oops, not get, get, get secrets. Helm installs a, what do you call it? A bundle. A bundle in a secret, right? And that's how Helm keeps track of what's installed where. And so I think what's happening, and someone correct me if I'm wrong, is that it does, it doesn't run Helm directly, right? It does, what it does, it basically runs it, I forget the name of the, well, it does a Helm, I forget what it is. There's like a Helm template, and then it basically spews out the YAML, and you can pipe that to like cube apply dash F, right? And so I think that's what's happening. They're doing, they're basically using the Helm to render your YAML, and then piping it through apply, because if I do, it's, what's- Just real quick, I mean, like this past 30 seconds, like I can take this ship at the Serena, and just be like, hey, what's up? Hey, what's up, yeah, exactly. So I'll definitely do that. So like if I do OC new project, and let's call this, I don't know, Foo, right, whatever, and I do OC project, make sure I'm there, and I could do a Helm install of, what is it? What did I call this? Let's do this live, Helm, what is it, repo? List, I called this red hat charts, right? So let me do this, Helm install red hat charts, wait, I need the name, Var. And then red hat charts, Quarkus, and then I guess I don't really care if it's broken or not. You need to pass the parameters, but it's like broken, right? So it doesn't matter. Now I do OC get secrets. There's a Helm release here, right? So the Helm release here, and then I do OC get secrets, secrets of demo, right, where the other Helm chart was supposed to, it doesn't have that Helm. So I think what's happening is Argo is doing a render and apply, so just kind of keep that in mind. I don't, just personally, I don't think it's a big deal. Maybe Washari has a different opinion because he, you know, he's out there in the weeds, you know, doing this stuff. Since I'm managing everything via get ops, I don't think I care all that much. I don't know, I think I'm still kind of mulling that over whether that's a good thing or bad thing, whether it creates a bundle. So, another thing I wanted to show, let me make this bigger, is I have this in get, right? So I have an app, this is how you would do it, be an app. Right, so like, this is essentially the YAML way of doing it via the UI. So this is kind of a get ops way of doing it, where the representation of what's in Argo is in get via this YAML manifest, right? So like, if I want to, you know, make this, instead of false, I wanna make this true, I'll just do a PR against this. And then this will get applied to the repository, right? So in order to do this though, you have to kind of do something called an app of apps where I create an Argo city app that deploys an Argo city app. And that's a thing for another show because there's a whole thing. But you would do something like that, right? So let's try that out. So let's delete this. And then let's create an app of apps, right? So where would I put this? Helm, let's do this. Let me get clone this. So let's go to the UI. Let's go get, get ops examples, get pull. Up to date, okay. Let's go to Helm. Let's create a directory, let's call this, what do we call this? What are we doing here? Helm deploy, for lack of a better term, right? So here I want to create an application that deploys an application. I have an example of this. Hopefully I do. Well, I hope so. Yeah. You're about to do it. Yeah, I'm about to do it. Yeah, so an application of an application. So I'm gonna take this example here. I'll call this Helm app. So here Helm app. Oops, let's take this. I'm gonna change that to Helm. Argo city is fine, Argo city is fine. And so what I'm gonna do. Yeah, okay. And so that's in Helm, Helm deploy. No, that's Argo city app is what I want. Argo app is what I want. So Helm, Helm app is here. I want slash Helm. So it's gonna go to this repository. It's gonna go to Helm, Argo app, and then read that manifest. And then that's the same for this guy. I think that's it. Argo city, our home. So, so let's go Helm. I don't think I need to make a customized file. I guess we'll see. So this, so then let me kind of explain what's going on here. Yeah, okay. So the application here, this application says that I want you to go to this Git repo following this path and apply any manifests that you see there. That's essentially what an application is in Argo CD land. So I'm gonna go to that repo and then go to that directory. And then that directory just so happens to have an application, another application. So it's an application that deploys an application. And so, so then when Argo city says, okay, I'm gonna deploy this. And in here, it's just another application that deploys that. So, and so what we want to do is first, we want to get add, get commit a Helm app. Helm app, get push, right? The best commit messages, only the best. Only the best, no. Well, this is why I always get, how do I wanna say, I always get scolded when I'm like committing upstream to like, you need to squash your commits. I'm like, oh yeah, that's right. Because there's like 800 commits. Right, yeah. That's just updated, updated, updated. Like it's just over like K, K, K. I was like, oh yeah, I need to, sorry, I need to. They're like, please. Typo. So if you see all my PRs, there's at least like the maintainer. There's at least, there's always at least one person that says, can you squash your commits? I'm like, oh yeah, that's right. Yeah. Because updated isn't useful commit. So this creates, so let's go to get off to examples. I'm gonna go to Helm and Helm deploy Helm app, right? So, so let's see what happens when I deploy this. So I wanna do application name. This is a Helm app, default manual sync policy. Sure, why not? I mean, it's not gonna, positive URL getting started. Not getting started. This guy, there we go, this guy. So, and I want Helm, what is it? What are we doing? Helm dash deploy. Destination and then new space, argocd, right? And then let's create this here. So this bars, that's fine. Okay, so this is an app, right? So this is an app that deploys an app. So it's an application of an application, right? And then I'll explain to you why I'm doing this. When I get done. Yeah, I think a lot of it is a lot. So yeah, so like, for first I'm doing the what and then I'm gonna do the why I'm doing it. So once I click sync, you're gonna see another little card pop up of the application. So let's do that, synchronize and then this is syncing. Wait for it. Wait for it, it should pop up soon. Progressing. Progressing or healthy. Yeah, so it's healthy. And this, there we go, corpus app, right? Yeah, there you go. So corpus app. So then here, so this is now an app that deployed another app, right? So now you see the corpus app. If I go here and I look at the URL, make sure you get the queue this time. Yeah. And I get my app again. And so, so why am I doing this, right? So you're gonna say, Christian, why, why are you doing this? Why did you go through all that trouble? Yeah, why did you create an application that deployed an application, right? So especially for Helm, since, remember before I said that like there's really no way to control the bars that YAML file unless you're hosting it. Right. Now you have a way of hosting. Taking that upstream thing. Yeah. Hosting your own thing and smashing them together. Now when you need to make a change, I can make a PR to this. Right. You go to your repo to make it. Yeah. So then, oops, that's the Helm app. What I want is the Argo app. There we go. I can change this. Now this is being managed. Now this is being managed to get ops fashion. Now if I go here and I do this to deploy TNS enabled, if I do this to true, then I commit this. Again, the best commit message in the world. Yes. Updated. And I click sync, right? It's going to say it's out of sync and it's going to sync up nicely, right? There we go. And so this here should give me, should give me theory in theory. Where is, this should give me a HTTPS. We'll see here. Helm. So this says HTTP, but let's see if it gives me an HTTPS. Oh, it would be under it, wouldn't it? Yeah, I would think. Let's see here. There might be something weird I have to do with Helm afterwards. Oh, I think it already redirected you. Yeah. Yeah, there's something in Helm I have to do. I forget what, but I'll figure it out after, just like anything I'll figure out after the show and then I'll have to tweet it out. Or you could be like Andrew and start doing blog posts. Yeah, I was actually thinking about doing a blog post, kind of like a recap of what I did last week. I think, and so. Question from Chat from Carl Phillips. Carl Phillips one, are the logs friendly to read debug from Argo? Yeah, so Argo logs look like. Yeah, so let's, so well, first you need to authenticate, right? For the first time ever, let's do an Argo CD. Here we go. Log in, right? First of all, I need to, Argo CD, right? So I'm starting off clean. Yep. Argo CD, login, SSO, insecure, and then I want this guy here. Oh, yeah, you need the port. Well, I need to remove the HTTP. Yeah, that too. That helps. Then it goes here and then, oh man, they're really making me struggle here too bad. Yeah, they are. I thought you already logged in. Yeah, I know. What's the password? You don't want to do that off-screen. Well, I'm going to destroy this cluster. Oh, okay. No, I'm not. Give it a password here. And if you can memorize this, and you're allowed to. Give me the fortune with you clear. Yeah, yeah, fine. Well, they just hit pause and done. Yeah, yeah. I mean, when this will be gone too. So now I'm authenticated. And then I'm authenticated. Yeah, so if I do an Argo CD app list, it gives you information about this here. There's no error. So it's kind of hard to kind of just show the logs here, but there's a deploy log or something, right? Yeah, Argo CD help. This will give you some. Argo CD. Edit, get this. History. Yeah, there's a. Gotta be a log. Where's the log? Yeah, I was thinking, I was thinking there's like a, maybe get. Yeah, it's probably like get log or something like that. Get logs. Well, first I need an app name. Get app name. Yeah, you need the app name first. And then what do we get? I'll get a corpus app. And then, yeah. So this will give you information on why it's not syncing. Whereas if I do an OC get pods in Argo CD, you must be, of course I got one. Of course you're not logged into the cluster. Yeah, OC get pods Argo CD. I'm in a different session here. Yeah. And so here there is the application controller. There's the operator and there's the server. So the server might have. Oops, not get logs. OC logs, Argo CD. Do you, maybe an easier question. Do you usually view the logs in Argo in case of an error? Yeah, so the errors you get are usually coming from the Argo CD. So like you would do like, well, Argo CD ad get. Yeah, yeah. And like you would sync it and then they would give you the information here on why it's not syncing. I've ran into the issue before where the UI doesn't display. You know, it'll give you that there's an error, but there's, you know, I'm like, okay, well then why though? So that's when you would drop down. So here. Tell me why. Yeah, why, why are you doing this to me, Argo? And so I actually had an error the other day. I wonder if I can recreate it. Misspell something, I'll give you an error, right? Yeah, misspell something, yeah, right. Maybe I'll do that. Let's go to. Easiest way to create an error, syntax. Yeah, so let's go to bdd, this is, and it's got an error. And then let me just, let's go to the names. Let's create this in a namespace, right? Like we'll just have an error. We'll just like make it really messed up. Yeah, make it horrible. Yeah, like an import, you know, like, basically. Oh, wow, you're really tearing it up. Yeah, yeah, yeah. Actually, the service thing might work. You know, the service, it'll probably work. Yeah, yeah. Get push, let's do that. All right. Get push, oh, I think it pulled first. Oh, duh. Yeah, accept everything, okay, now push it. There we go. Get with abandon. So that's good. Get with abandon, right? Project, whatever, manual. Pository URL, this guy, get off the example. And we want it in, watch it work, right? I know, right? Right, we want to break something in the last 10 minutes of the show and it's not gonna work. Yeah, it's not gonna happen, though. Here, let's sync it. Yeah, sync failed. Failed. So usually sync failed. So what does it tell you? Yeah, so if I click sync failed, it'll say one or more synchronization tasks for not valid. It'll give us a message here. Sync failed, SDC, yeah, service not found. Not found, yeah. So it's looking for a service and it's not finding it. Yeah, so, and then if you do, you know, let's sit here, Argo, where does my Argo command go? Okay, app list, it'll give you, you know, out of sync, right, and then you go, I'll get BGD and then it'll say, it'll give you this message here. Yeah, not found. It'd be nice if they had like a describe or something would be cool. Yeah. But this will be here, it'll basically tell you, you know, I made that typo and it says, oh, it's out of sync. And so on another show, we can go deeper in debugging, but you know, it's, so the, I guess the genesis of the question is that, like how can you tell if something's like an OCP or Kubernetes error versus an Argo CD error? For the most part, you have to see what the messages tell you. Because yeah, there can be a disconnect, right? Like your application manifest could be fine. It may be like an error in your, like Kubernetes cluster, right? Like the PVC, you know. Not there. It's not there. It's fine being whatever's happening. Yeah. So there is kind of a, you know, you have to do some kind of spelunking. So it's distributed systems and we're automating distributed systems through Git. So like there's a lot of moving parts there. And it's not just Argo and Kubernetes and OpenShift. Yeah, yeah. Got to peel that on you. Git repo, there's all the files in it. It's a full like ensemble of things. It's an ensemble of things, yeah. And so yeah, cool. So yeah, so kind of just like a basic idea, kind of recap, bring this all together is you can deploy. Like if you have Helm, if you're invested in Helm, you can still have a getups pattern with Helm. And so, you know, in this stream we kind of just touched on it a little bit, right? If you just, James, I'm going to be talking about Helm. You know, I'm going to bring about, you know, maybe using Helm getups patterns, right? Kind of discussing going in a little deeper on how you would do that. Maybe I'll bring in the special guests. There's a lot of special guests I have lined up. Yes, you do. Very, very exciting stuff coming up and look to be diving deeper into these, you know, as we go, you know, take this journey right to the galaxy, get off the guide to the galaxy, we, you know, we'll bring on guests and we'll dig deeper on these little things. So that's all I had today. That's awesome. Yeah, I don't know if anyone has questions, comments here. So Carl Phillips once says, I assume if they are, you know, if they are bad enough, you have to jump back and forth a bit between Argo and OCP to figure out if that's not obvious. Yeah, if it's not obvious, what's really cool is that you actually get the events here. Of course it doesn't show it, right? But you could, well, a pod would have the event, right? Let's go to the event. Yeah. Right, you can see the Kubernetes events, right? Like OC Get events. You can, that comes through in Argo, right? So you can have that, you can take a look at the logs from the actual pod or whatever. So, you know, you can do probably like, I would say 80% of the debugging, right? From like, if you're using the Argo UI, you can see that here. The true is not, the same is not true from the other way around, right? Like I can't see Argo errors from OpenShift. Right, right. I can't see, you know, OpenShift errors in Argo, as you saw that I can take a look at the events and the logs here, but the same is not like the other way around, at least not yet, at least not yet. Right, so last question from Carl Phillips. Is there any Red Hat recommendation slash best practices regarding the structure of the Git repo? So, there is a lively conversation happening. That's the best way you could have put that. Yeah, so, does Red Hat have an official one? No, there's a lot of opinions out there. We're actually, you know, so working on those, there's actually an actual living doc that all the Red Hatters, all the community of practices are, are working on, are hashing out, especially essentially, we're yelling at each other on Google Docs, but what it boils down to, but we all work towards one. I am a believer in, he's gonna hate, I said this, in what I call Gerald Ops. Okay. He, Gerald is a architect in our, what do you call it, in our, yeah, well, our Canadian. Oh, the Canadians, yes. The Canadians are great. He has a, I don't think, I don't think this, oh, there we go. He has a blog, I should have it bookmarked, but I don't. So, he has a blog and in this blog, I just typed Git, Git up standards, there we go. So, he has an opinion and I would say like 90% of it, I agree with on folder structures. I'm using this, and I'll put this in chat. Thank you. Oh, I got it, if you want me to do it. Yeah, and he essentially lays it out and basically just, he put a lot of work into this, right? And I, for like, the most part, I agree with all of it and I'm using it to formulate my opinions in the other doc. So, you can think of this as the upstream for the doc we're developing. And so, yeah. So, my opinion, this is a good way using this approach that these guys came up with. Eventually, Red Hat will have its own, like official, this is our recommendation. So, this is a good place to start is what I'm saying. Right, like, if I go back to Ansible, like the previous job, like you could do an Ansible Galaxy command and it would admit a full like structure for you. Argosy doesn't have a feature like that. No, but we do, we meaning Red Hat, we have the GitOps operator comes with the CAM tool. So, that's the, right, let's see here, but I had developer CAM. There is what we call, where's user documentation. We have a, here, let me drop this here so you guys can take a look at that. The CAM tool does have a bootstrap command, right? So, we do CAM bootstrap and then whatever its parameters and it does actually give you a directory structure similar with Ansible Galaxy, right? And this is the supported, this is like, you know, this is the supported Red Hat way that we're telling users to do it, right? Did to do a repository here. So, take a look at that, yeah, CAM bootstrap, right? So then you do a CAM bootstrap and it gives you the directory structure. That's all we need, need more of that in life. Go start that repo, folks. Yeah, so that's some reading material for you guys to have, you know, start out with this, look at the CAM bootstrap command and it'll, great starting point, so. Yeah, so I know you can see this too. Gerald is using Customize and that guide, maybe Red Hat will work on a Helm version as well if they are not using the same pattern. But yeah, thank you very much. And also, do you know if possible to install a custom management plugin for Argo when using the new GitOps operator? There is a. Helm file as a layer of Helm. There is a plugins mechanism. Actually, Gerald actually used that to update the version of Customize that comes with Argo because like it trails behind a little bit where that comes with us. And so there is a discussion around how to support plugins, right? In terms of the GitOps operator, so.