 Welcome to the Red Hat Cloud Platforms Business Unit OpenShift Twitch Stream. I'm Eric Jacobs. I'm going to be your producer and host today. We're joined by Chris Short, also from our technical marketing team. Say hello, Mr. Chris. Hello, Mr. Chris. And we weren't supposed to say Mr. Chris. Come on, man. I got you. So we are going to be exploring OpenShift 4.3. Both of us are no-talent clowns when it comes to software development. And so we have chosen to try to be software developers, and we're going to be playing with OpenShift here on Twitch today, trying to hack our way through what languages we end up choosing, Mr. Chris. Python, I figured we use a Django framework or something, maybe. Right? Like, that seems pretty popular. So you're going to try and do an application and a database and a pre-packaged application at that? I mean, is that too much? What were you thinking? I don't think, I mean, I don't know. I'm busy trying to tweet to the world here that we're going to figure out. Yeah, we should probably both tweet. I don't know if you want to show your tweet while you do it, if you have a way to... No, I have another one to open someplace else. What is the name of our Twitch stream here? Red Hat OpenShift. Red Hat OpenShift. All one word. Yes, sir. Red Hat OpenShift. If I go to twitch.tv on my other monitor here, do I see myself? Is this like Inception S? Inception Inception? I mean, I see myself on OBS and I see myself on the screen. Yeah, we are live, man. That is just creepy. All right. We are live on Twitch and broadcasting how to be developers on OpenShift. What's your Twitter handle? At ChrisShort. Well, that's certainly easy. That's the intent. There's a lot of ChrisShorts and tech, surprisingly. So yeah, like when a new platform comes out, we typically rush to go get the handle. So yeah, that's why I am ChrisShort in some places and the ChrisShort in others. The ChrisShort. Look at that. All right. I hit the button. You know, I hope that OpenShift behaves better than Twitter just did, because I swear I hit the tweet button on it. Oh, nothing happened. All right. I have let the world know. All right, man. Well, so what are you showing us right now? Well, I am showing you the OpenShift home screen. You want me to make it bigger? Yeah, sure. You want full screen here? Sorry. Yeah, exactly. Keyboard is going to drive people absolutely bananas. Well, you know, it's your clacky keyboard. Not everyone else's. My keyboard is going to try that. So this is OpenShift? This is OpenShift, man. Like I've got a freshly spun up 4.3 cluster. It's 4.3.5 is the version number here. I can update to 4.3. I think 13 is the latest right now. But for the sake of time, I'm not going to do that, but it is a one click update if we wanted to. Would you upgrade your cluster as a software developer? I mean, probably not, but whatever. Just give everybody access, man. Yeah, you know, I mean, if you're logged in as cluster admin, you know, off you go. But, you know, we're going to try to dig into, you know, some of the other parts. You know, Eric and I spend a lot of time in the administration and optimization and operation of OpenShift. Yeah, you Eric and me Chris. No, not some other guy. Like we spend a lot of time, like making OpenShift work for people. Rarely do we actually put applications on OpenShift, like for ourselves, like to tinker with. Right. I mean, you know, so that's kind of the goal today, right? Like my extent of Python knowledge is very limited. Your extent is somewhat better. Is it? I believe. Yeah, I mean, you know, I don't know. We'll see. But, you know, we can, you can try to make my crappy Python app work on OpenShift. Oh, yeah. I already got it to run on OpenShift. So it's kind of, it'd be sort of cheating, but you've never seen it. So I've never seen it. What crappy app is it? Oh, Ausgabe in the ticket barfing application. Ticket barfing. Yeah, go to my GitHub. By the way, you might want to make your browser font bigger. Like github.com slash thorax, T-H-O-R-A-X-E. Oh, I did a Z instead of an X because. Z. What is it? German keyboard? Maybe. I don't know. By the way, I apologize that my room is such a mess in here. I tried to start organizing a closet over the weekend. And it just sort of. That went well. Yeah. Well, much like the ticket application, it sort of just barfed into the room. Ausgabe in A-U-S-G-E-B-E-N. Let's just look at your repositories real quick. Unless I put it in the wrong place. By the way, that picture looks nothing like you. Of course, you're holding something. There it is. It's a little bit old. Yeah, okay. Okay, so this thing. Yeah. What does this do? Do you have some kind of use case for distributed? Distributing simple users, passwords, and arbitrary. There you go. So we do all these cool workshops for, you know, potential OpenShift customers and for other folks. Yeah. And so, you know. We used to use Etherpad. Not that there's anything wrong with Etherpad. No. But like, you know, you and I both go into Etherpad and then you take user two and then I take user two and now it's just a giant mess. Now it's a mess. Yeah. And so this was like a terrible idea during a hackfest we did in Munich where it was like, well, we should come up with an idea to hand out tickets. And then of course we're in Germany. So, hey, Chris Blum, you're German. What's the German word for handing out a ticket or something like that? He's like, I mean, I guess it would be Ausgaben. I was like, okay, that's the name of this application. Wow. Okay. That's what we got. Fun. All right. So, did you just fork it? I did fork it. Yes, just in case. Just in case you break it. Yeah. Blow it up. All right. So, how do I get this thing started? Let's see. Let's go to my OpenShift dealio. You definitely need to make your browser fun bigger. Yeah. Okay. One, two, three. There's three. Is that enough? More? Did anything change? Yeah. There we go. All right. There's more. I see more. Is it good? Can you see better? Do you want more? It's big enough. Okay. I'll give you one more. All right. Okay. So, what is this? This is a single pod. What are we going to do? Multi-pod? How is this app designed? Probably... Yeah. It's not even fancy. It uses SQLite internally. Oh, cool. Okay. Even better. Yeah. Okay. And so, I haven't actually tried to point it. Like, I haven't tried to do source to image with this one. So, I don't even know. I tried to do source to image locally and I didn't have a good experience. But that was local. Yeah. I don't... Yeah. Okay. Let's just deploy it as a pod. You think that would work? No? Well, you've got to build it from source. Yeah. I mean, there is an image on Quay, but... Well, let's see. Do we want... Oh, shit. I've never done this before. I've never been in the building. Language. Sorry. Shoot. We haven't flipped that mature flag, folks, yet. Dagnabbit. We're still deciding on whether how explicit we want to be or not. Okay. So... You might want to create a new... I would not recommend putting this in the default project. Just saying. No. Yeah. Totally just realize that. We're going to call this us, buggin, whatever it's called. House wagon? Sure. House wagon? House wagon. House wagon? No. House music? What is it? What is it called? House... Gaben. House... Yes. So, Gaben is like to give. Okay. So, Gaben is kind of out of, and so it's out of Gaben kind of because the ticket is coming out of the machine. And so I still need to go on Fiverr and pay somebody to design a logo that's just like a, like a vending machine barfing out tickets. Tickets. I could probably do that. My four-year-old could do that. Anyway, so creating a project here. Yes. Perfusely, if you're not careful. All right. So... Okay. We actually have somebody watching our stream. Adam Klater. I think Adam. Right? Aren't you Adam? Yeah. I don't know. He gave... He gave us a link to an app for FEMA Web. Oh, FEMA Web. Okay. I will send it to you on our stream. It worked on OpenShift 3. Oh, even better. I don't have a good way to send it to you while you're streaming. Other than... You can send it to me through Slack over where I can open. Do you have Slack on a different monitor? Yeah. I have multiple monitors. But I've got the chat open here, so I can just do that too. Oh, there you go. You are smart. I have the chat open as well, but it's really tiny. Yeah, it is very tiny. I don't know why the chat is so small and twitch. That's weird. I want to break that out into a separate window or something. You can tell that this is our first time. Yes. This is why we're doing this, so we can get better at it. Users in chat. I can collapse it, but I cannot pop it out. Whatever. I do have another chat application. I'm just switching to ModView, and I'm hoping that helps. Good. Good. There we go. Broadcaster. Oh, but this is logged in as the wrong person. Are you logged in as yourself or something? No. I'm still logged into the wrong Twitch for... Oh. Okay. Well, I have the app. FEMA Web is a test app. It has an API. That's awesome. It has service URLs and all kinds of stuff. This is a different app. Yeah. Okay. Yeah. This is pretty cool. Okay. So FastCLI, I believe, is open fast too. So I know Alex pretty well. Fast CLI. Fast CLI. What is that? Yes. Open fast. It is function as a service kind of deal. Oh. Oh. Okay. Sorry. It's okay. I'm often confused. It works with both. I am often confused and I often break things. So... So that's why we're here. Yeah. All right. So we're going to use this app. Okay. I don't know if we're off-blogging, but we'll use that namespace. Just because. Just because I'm lazy. Because every good success has a purpose. So I'm going to use this app. Okay. All right. So... I just realized that I might be... If I change... I got to be careful about how I alt-tab. And how I move my mouse. Because I can like... My mouse is suddenly moving over the Twitch stream right now. Oh. Yeah. This is weird. You should turn off... There's a checkbox for the scene. Okay. All right. All right. All right. All right. So... I just realized that I might be... If I change... Scroll... Like open the properties for the scene. Scroll down. There's a checkbox for... I apologize in advance for whatever just happened. It should be pretty safe. You can also do it in studio view, but that's probably harder. I don't see a setting for the scene to do that on the scene. I mean... On the Zoom window. The Zoom window setting. There should be a cursor checkbox. This is real... This is real Bush League stuff, ladies and gentlemen. Oh, I see. Don't make me... You see it now? Don't make me open OBS on my little tiny Baby Mac here. In case anybody knows. View options. There you go. Nope. Nothing about cursor. Really? Yeah. Let's see. Wait. Oh, wait. Are you talking about the Zoom OBS window? Yes. Oh. Zoom setting. Yes. That's what I'm looking at right now. Capture cursor. No. Ta-da. Now you're looking at my downloads folder, apparently. Cool. I'm now streaming the wrong thing. There we go. Switch your input back. What did I do? What? Oh, my God. Oh, man. This is some real Bush League stuff here. All right, we're back. You can tell that this is new to us, but this makes it so much more fun. Oh, man. Christian says we'll do it live. Yes. We will. Yes, we will. We are doing it live. Oh, the livest of live. Oh, man. All right. We should actually do some open shift. Yes. Let's give it a whirl. We're only 13 minutes in. There's actually an S2I directory and two here. Oh, by the way, I have a hard stop at 245. Well, then that's one more stopping. Open shift Kubernetes roadmap. Sure. Oh, yeah. That S2I folder is because you can override some of the source to image behaviors with your application. For those who are watching who don't know, source to image is a mechanism. It's not specific to open shift. It's one of these things where open shift is designed to work with it, but it was not written specifically for open shift. But source to image is a way to combine source code and an existing base image to get a new application image that has your built source code artifact in it that can be executed later. And so open shift takes advantage of that. You can override some of the behaviors for source to image by putting scripts in the S2I folder in your source code repository. So that's why that's there, I think. Cool. Pretty sure. So you have far more source to code experience than I do. It's possible. Source to image. Sorry. S2I. Whatever it's called. In the open shift user interface, we should be able to just put the HTTP. This guy right here. Create a build config now. Isn't there a way to just like use the developer console to Oh, yeah, that's right. There we go. I'm in the wrong console. Let's go to the developer console. We're so addicted to system administration. Exactly. We forget that there's so much more. Yeah. I totally can't even. All right. So from Git. Yes. Let's go grab this. Git repo. Which URL is it asking for is the question? The repo URL. The HTTP. Not the SSH. Great. All right. Oh, do we know? Yeah. What language? Oh, it's also Python. Look at that. We're doing Python anyway. Python, Python, Python, Python. Where's Python? There it is. Python. Three six is fine. I'm assuming. So Python three. Resources. Do we need to do anything with the resources here? Deployment versus deployment config. So yeah, this is, this is kind of one of these interesting things. When Kubernetes first. Was born. So to speak. Really all it had was replication controllers. And pods. And so there wasn't really a way. To roll out new versions of stuff natively. And so red hat came up with the idea of a deployment. Configuration. Which was a controller that would handle. The creation. And alteration and management of replication controllers. So you had a deployment config. Replication controller. And then pods. And then later on in the life cycle. Kubernetes went, oh yeah, that's a cool idea. You know, we want to start doing that. And so they have deployment. They're very similar. Deployment config has a couple of other options for what causes new deployments. And so when you're dealing with open shift deployment configs can be beneficial because we have a system of triggers. That works with things like changing images. So since we're doing building code, we probably want to choose a deployment config. Because then we can get automated triggers when the build. Output changes. Does that make sense? Mucky muck around. Yeah, absolutely. And I think, you know, to your point, Eric, the deployment versus deployment config. What I think a lot of people don't realize is, you know, open shift and Kubernetes have kind of had the same path for a very long time. And open shift has had the customers behind it saying we want certain features that Kubernetes doesn't have in Red Hat being, you know, a good customer service focused organization. We built features on top of Kubernetes and then upstream them as best as we can to make sure that, you know, the functionality gets baked into upstream Kubernetes. So a lot of times when you see deployment versus deployment config or projects versus name spaces, same kind of concept, right? Like Red Hat did something before it was probably fully baked in upstream Kubernetes and boom. Or it wasn't baked at all. Or yeah, nothing at all in Kubernetes in this case, right? With the deployment, like deployment is not existing at the time when deployment config was created by Red Hat. So yeah, like that's kind of the scenario. And that's why people sometimes I feel like, you know, they say, ah, open shift is a fork of Kubernetes. No, it's not. We pull in the upstream Kubernetes and then we layer our stuff that we built previously that our customers are still using on top of that. Yeah. Or we just donate the whole thing to the community. Right. And we've completely donated a ton of features. A lot of the user stuff and some of these other things. Yeah. Christian says we did it before it was cool and he's totally right. We do. Before they were cool. Sometimes we continue to do things even after they're not cool anymore. Well, you know, okay. So create a route to the application. We definitely want that. Right. We want the application to be accessible externally. Yeah. So route is our implementation of kind of ingressy stuff. Yes. All right. So I think we're ready here. Click the button. Punch it. Here we go. Waiting. Yeah. So this is showing us the developer view. If you click on. Gold running. Look at that. What happens if you go to the builds area? That's where I'm at. Going to logs. Getting image source. Yes. So it's got to pull the builder image and who knows how long the. Sorry. Who knows how big the Python build images. Can't be that big. Oh, you'd be surprised. Oh, really? Jafar says security context are now pod security policies and Kubernetes. That's true. They're not. They're not the same though. Yeah. P.S.P. Pod security policies is an evolving thing that kind of is like security context constraints. They're not exactly the same. They're still some differences. PSPs are still evolving. Yeah. But for sure. They're the same. So. They're features that we have created that. Make Kubernetes enterprise ready and also added. Multitenancy. Well. The string get going. Yeah. So, uh, Jafar and Christian are both on our team. They're both in the chat right now because. Uh, chatting is the thing we're doing today. It is also red hat summit time. Open shift. Uh, That's right. I wish we had a banner for red hat side. You could go to the red hat summit website and show. Yes. What's going on. So as, as many of us know. Um, there's this pandemic thing going on. Yeah. It's kind of a bummer for lots of people. Yeah. But because of it, uh, red hat summit has gone completely virtual. And so for those who are interested in, uh, in attending virtually. Ta-da. Eventually. You will see a screen. Yeah. Yeah. I don't know why. It's a very popular event. So it's kind of the websites a little. Yeah. We've got a lot of people logged in right now. Last I heard. So yes, like it's going on. It starts officially tomorrow. Uh, Open shift commons gathering is taking part right now. So you can, I still think get started with that today. You can register still. It's free. Zero dollars. Right. Like you can register for free zero dollars to attend a two day. Event. Packed with content. So that'll be coming out and just wave after wave after wave of new content coming throughout the days. Um, and we also have some other content that will be coming out later in the year as a result of all the content we have and the fact that it's virtual. There's so much more that you can kind of do when you're in a building for four days as opposed to online for two. Right. Like, so, you know, the whole virtual event thing, we're all figuring that out. Oh, Yeah. Yeah. So what happened to know who that is? That's our, that's a, my buddy Rob, who is, uh, Open shift sales specialist. And thank you, Rob. Appreciate you. Commercial. He's in the chat. Yes. And Jafar is asking folks to go to his demo tomorrow. So I will happily open that up for him. Um, assuming this actually opens. Open some window in the background. So that's, that's not your phone. What? Okay. Make sure you attend. Oh, it's, it's just a live and interactive demo. It's not his live and interactive. Oh, Oh, it's going to be Burr our, our master course. Oh, Oh, Oh, Oh, well then let me pull that back up because I thought that was the wrong thing or something that. No, that link is for the Burr for the Burr Sutter. I mean, I'm sure there's other people involved. Yes. There's always lots of people for the keynote. They're usually trying to do pretty cool key notes. Yes. So yeah, Burr's going to do a live demo tomorrow. Oh my gosh. I'm sorry to make you not use 4k. That's okay. What? No, I like my 4k stuff. Actually, I could just do it on this one monitor downsize it for you. If you really want me to. Uh, yeah. So there's Burr's talk. He'll be doing a demo, uh, you know, from the private data center to the edge. Um, you know, uh, when we say edge and I think red hat land, uh, it means a lot of different things to other people, but when I say, there's lots of edges. So yeah, when I say edge, I'm talking like customer right? Like as close to the last mile as possible kind of deal. Perhaps. Perhaps. So I mean we, there's, there's probably going to be several presentations about edge, but you can, you can see more, uh, in Burr's, but you know, edge really, there, there are many edges. There's, um, you kind of have, if you think about it as like an onion, right? Where the, the core of the onion is the data center. Um, there are layers of edges. You move out and further away from the data center. So you've got, uh, near edge, which is, you know, potentially like a smaller data center. Um, you know, far edge might be like a couple of servers on, on a telephone pole or, you know, in a store or something like that. And then if you start thinking about internet of things and whatnot, then you get to like device edge, which might be, um, which could be someone's car or, yeah, or, um, or, you know, just some handheld device that a technician is carrying. Um, so yeah, there's lots of, lots of different edges, but yeah, so user context edge, I think is sharp edges. Yes. They're sharp edges and the peeling of the onion, apparently, so be careful. Uh, the onion edges will definitely make you cry. This is true. Yes. All right. Back to our app, sir. We are an hour away from being done here. All right. So the push was successful. We've got a nice little image in our image registry here. That's, this image is actually local on the, uh, OpenShift cluster itself that we're using here. Yeah. So OpenShift, uh, automatically includes its own internal image registry. And when you use this build process like we did, um, you will automatically push the image into the registry that's already in OpenShift and it's all preconfigured. And it also is tied into the same, um, RBAC, but, uh, Chris is logged in as a cluster admin. So really that we, it's kind of, it'd be hard for us to show something meaningful. Maybe we'll have to do that for another stream. Yes. There you go. We might actually have to do this more than once. Yes. So, uh, you, you know, we're basically running the, the, the, the, the logs, right? Like we know exactly what was happening. We have the events here. Uh, we can do things with these events. For example, if we had an operator, we could trigger off these events. Um, let's see. Wow. Okay. Lots of stuff going on here. Is it running? It appears to be running. Okay. Can we ask logs? I got events. Go find the route. Where be you die. I route apology. Yeah. No, it's opening. This is the route, right? This little button open URL. There's a little bit of a lag between your screen and mine. But yes, that is the button. Where not to live. Oh, fun. Also a tiny font. You know what? I'm gonna keep killing you on it. No, no, you're gonna make me do something and it's gonna be dangerous. Oh, are you gonna change your screen resolution? We're gonna do it live. We're doing it live. Oh, no. We're doing it live. Here we go. This could be bad. I know. It's already kind of going slow. All right. Ultra fine. Here's your largest text I got for you, buddy. Oh my gosh. My webcam just shut off and everything. All right. How about that? No change yet. At least not that I can observe. Oh, there it is. Hey, that looks normal. Okay, cool. Good to know. I shouldn't say normal. That's disparaging to small text. Or people with bad eyesight. I'm not sure which. Yeah, I figured that out. That's true. So yeah, apparently that's 1504 by 840. Yes, guys. You can make the browser text bigger, but the difficulty is that the default browser text for every single new tab is tiny. So you end up having to do it over and over and over and over again. But here's the thing. Much like a job, you have to do it every time. So, Eric, as we discovered earlier today in some of our testing and building with scenes and everything, we discovered that Fedora in Wayland, you can have different zoom settings. Maybe you had. Maybe you could have different zoom settings. Unconfirmed. One monitor with 200% zoom at 4k and you can have another monitor that's like 1080p at 100%. You can't do that very easily. No, right now, for whatever reason. But apparently you can on Mac. So I'm just going to throw that out here, right? Like I just did that. So plus one Mac. All right. I live in Michigan. Let's see. This application uses public data from FEMA, the U.S. Federal Emergency Management Agency's API Open FEMA Project, but is not FEMA endorsed. Enter a two-letter state abbreviation. I don't know what this is going to tell me, but let's see what kind of disasters are going on here. Waiting for the FEMA. It says waiting. Oh, it is waiting. There we go. Oh, wow. Okay. Dang. List of FEMA disasters in Michigan ranked by county. Which county do I live in? I live in Oakland County. Oakland County. Oakland County. You are somewhere on this page, hopefully way down at the bottom of the list. What if your state is just one giant disaster? It might be. Oh, Oakland County is toward the top. That's why I didn't see it. Interesting. Yeah. So Wayne County is the county with Detroit in it. So it has two more than Oakland County, which is where I live. We've got a new follower, Serena Marie. Thank you. Hey, Serena. Thanks for joining. Appreciate you following us. So yeah, we've deployed one app. Yes. And we made a matter of no time. So yeah, there was no issues, no problems there. And I mean, it's cheesy, right? But when you sort of step back and think about what we just did, and I sort of use this example all the time, we clicked three buttons, and there is now an application running and accessible on the internet. And you had already made the fun figure on that tab, which is why it's completely balanced. There we go. Yeah, fix it. And so yeah, like two, three button clicks, we got something live on the internet and some companies that takes like six months. Yeah. Get it accessible and deployed on the internet. Now granted, somebody might have to let you expose something on the internet, but more or less, we just did it live. But from the developer view, you see we have, you know, our deployment config right here, this DC label of the FEMA web. We can go edit our source code and click that. And off we go to GitHub. We can come back. We see our route. That's how we access our application. And then we see the actual like running status switches where we saw the build and log and event details. And, you know, that's our whole application wrapped up and deployed. Pretty cool. Yeah, you want to do another one? We can, we can try Ask Haven and see if it'll actually work. Okay. Let's, let's see, because this browser is so big, I now know, don't know where the damn tab went. So don't you have that cool tab search feature that you turned on the other day? I do. Well, no, it's not tab search. Is it? It's like tab search. No, it's not. It's, it's open if already existing tab, right? Like that's what I was looking for the other day. You know, because you know how like I search in existing tabs. Yeah. There you go. That's what it's called. That thing. Yeah, it's like a feature of Chrome that you have to turn it on. It's buried in the bowels. Very much in the bowels. What, this is a real, what view of GitHub. So, oh, so this over on the left hand side of my screen is called octotree. Yes, this is an actual GitHub plugin that shows you like the actual directory structure. Yeah. So it's like an entry but for GitHub, but for your browser. And, and if you notice, it looks surprisingly like, well, VS code, VS codes, you know, a little nerd tree thingy. So it just makes a more consistent experience for me personally. So that's why I use it. It's free, but it has some paid features if you want. It's called octotree. At octotree.com. Oh, there's my GitHub access token. I'll change that later. Octotree. I might have to put that in the chat here. Octotree. Yes. I'm looking at my other screen. Octotree is loaded with features that bring your productivity on GitHub to the next level. I'm sure they do. All right. So I will take this URL. All right, take this URL. We will, you want to do another in the same project or not? Yeah, let's do the same project. Let's do the same project. Make more tenants, make less tenants, multi tenant, all the tenants, all the tenants, import from Git, so many tenants, all the tenants. This is also Python, correct? Yes. Yes, sir. We will not call it female web app. We'll create an application. The application name is barf goblin, whatever it's called. Last given. Can you call it barf? I could call it barf. You could also call it pizza the hut. I will call it pizza the hut. Schwartz. The Schwartz is with you, sir. Yes. Who was it that was supposed to watch that movie again this weekend? This weekend? Yeah, someone mentioned that they didn't, like we shared a GIF of the aliens mocking scene from Spaceballs and someone was like, what is that movie from? Yeah, remember in Spaceballs at the end, towards the end, they're in the cafe and they're eating, they're ordering something and some guy eats something and like all of a sudden he starts grabbing his chest. Yeah, yeah, check please, that kind of thing. Yeah, I didn't, I guess I wasn't paying attention. That was Andrew. Apparently Andrew on our team. Andrew was the one that didn't see it or Andrew was the one that didn't recognize where the scene was from and apparently from my description, you don't either. So, but at least you know pizza the hut. If I had seen the picture, I might. Yes, maybe I would have been better contact. Supposedly. Yes, exactly. That's what I hear. All right, so this is your app running along here. Oh, it's trying to build the docker file. Yeah, that might not work so good. Let's see what it's doing. That's getting all the requirements. It hasn't exploded. Which is what it did when I tried to build it locally. Bowing. You should consider upgrading pip. That's okay. Copying blobs. It's using some weird. It's using some weird upstream. It's building images. It is not only building them, it is pushing them. Push successful. Hey, it's the little things. All right. So if it works, it's not really going to do a whole lot because you got to push a CSV file into it to actually load content. But it'll at least, when you visit it, it will at least, it'll show you like, hey, click here to get a user, but then it'll probably explode. Not ready. Wait, is it something? Or it's just crashing. I mean, there's lots of options. There's that too. Wow. Can I move this freaking thing? Hide floating meeting controls. Press escape to show floating meeting controls. Thank you. Oh, the. Yes, the zoom stuff. I can't understand. Still not doing a thing. Maybe the image is still pulling. Crash loop back off. Probably because it's expecting to run as a. Rename application from Python script app.py. That's the error we get. That's it. That's it. It's not exciting. No, it's not. All right. That's okay. That's pretty sure. I'm pretty sure that's because it was doing a Docker build, but there are container build, but. Oh, okay. I'm not. So that didn't work. Does it use a web container? Or is it just a command line app? It uses a goon, goonic corn, goonic corn. Oh, really? Yeah, really? Okay. The one that's on Quay works. I don't know. The one that's on Quay works? Or what's the Quay thing? Quay.io slash. Is it under your name space? Okay. Yeah, I think so. Just go to a terminal and do pip install. Do that. All right. Where is your? There it is. That's the one. All right. The repo should have a, well, the Aliscape and repo does have a requirements.txt, but for whatever reason, yeah. It built them. I saw it go through them. Well, because it built the Dockerfile that it found. It didn't do a source build for whatever reason. I don't know. Well, we could try again. We'll do it in here. I need to the stream manager. There we go. That's what I want. All right. That openshift. I pasted it in the chat. Yeah. So I don't know why it did a, well, I know why it did a Dockerfile build, because that's what it found when you did the, from Git, because I don't, but you chose Python, didn't you? Yeah, I chose Python. What does the build config look like? Oh, hang on. Let me go back. Yeah, that's definitely not going to work. The build config. What happens if you clicked the little Git logo in the topology view? Wait, I'm way ahead of you. Oh, sorry. Screen takes a little bit. Yeah. Oh, you need a cough button. Yeah. I think I probably could, there's a mute button. All right. Do you see the build config details page? Yeah. Let's see. Git repository type source. I don't know why it did a container build. That's weird. Okay. Okay. Do you want to try your image or not? You can. Okay. Oh, Jafar says do a, do a hack and get rid of the Dockerfile. All right. So what's going on here? Can't create. Because you already have something called barf. Didn't you? No. Whatever. We'll call it max. Let's make it same. And it still doesn't work. Image name. So wait, wait, wait. To deploy an image from a private, that's not private. No, it's totally public. Yeah. Hit the, hit the search icon. Yeah. Did it do anything? There we go. Oh, there we go. Yeah. So it needed to, yeah, if you don't hit the search button, it doesn't interrogate the image from the registry. So it doesn't know how to expose the resulting image. Cool. So it validates the image. Yes, it does. Oh, sorry. See if only I would pay attention to the chat. Ta-da. All right. Let's create. See what happens. Here's Max. Yes. Serena says it also provides a bunch of defaults. And so it interrogates the image and it finds things like the port that gets exposed and all kinds of other stuff. And so then it knows what to do. I'd be curious to see the log of the busted one again at some point. Sure. I can leave this cluster here for you. Wow. Okay. You have to leave the cluster for me. Well, I can give you the login details right now if you want. This is boring. No, it's boring. If you give me the login details, we're supposed to do it live. I'm gonna trouble you to get it. Oh, that's right. Never mind. Hang on. You're defeating the purpose of the depiction. I'm sorry. I thought you meant later. Like, well, no, well, well, I mean, maybe later, later. Yeah. Before 245 later. Yes. There we go. This is Bruder working with PID 9. It's running though. It's not dead. It's not crash looping. So you should be in the restarting. All right. Let's rock and roll. All right. There's the route. You need to use your workshop. Click here. I don't know what you have. Internal server. That's what I figured, because there's no database. But you can go look at the logs now. We can be like good developer. Why did it fail? App operations. It's a tongue twister. Oh my gosh. This is quite the error message. Error exception and get user. I'm assuming there's gonna be, there you go. No such table. That's because we have not uploaded a CSV file in there. Is there a sample CSV in the repo? Let's go see. There is not. There is a sample format for the CSV file. But I mean, we don't have to go through the exercise of all this fun stuff. GitHub tab opens. You said there was a, so like, how would I load this? If you scroll down and read the rest of the instructions. Oh, shut up. So this URL is going to work? No, it's not. So you have to replace this with the route. Well, first you need to create a CSV file with the following format. And curl that into the route. Exactly. Got it. All right. So live stream. Do it live. Yep. This isn't particularly open, shifty this part. But well, I mean, we've got to sort of make, I guess, because we're going to use the route to Oh, I hit escape and that damn thing reappeared. Oh, sorry. What'd you do? I hit escape and the controls reappeared because I'm in them. Yeah, not a not a power vim user. And I also named that file wrong, but it doesn't matter. So do we even name the file? Yes. It actually, so this will be an interesting text test of the app. Oh, okay. So yeah, yeah, yeah. May complain to you. I don't think that's going to work. Yeah, I'm pretty sure you're right, Adam. I think it's about to. Yeah, no, well, let's, let's see at user data. So barf.tx. I think the code actually checks for the file extension and not the file format. Not the actual format. That would make sense. App.py. And then the URL is over. Get out of here. I can't stand these controls. Where did you hide? All right. It's CSV data. No file. Where's the route? This is the route, right? A loud file. I have some kind of a loud file thing. A lot of extension CSV here. We're going to get an error of the girl. Okay. So I need to fix this. Yeah, the port number is wrong. Man, it's all wrong. God, I need to have some somebody needs to update the documentation because that's not good. Well, actually, no, well, hold on. So you don't need the port number because you're not developing locally. Um, oh, you don't want to see the error? Fine. Well, do you want to see the error? I know it's fine. Well, it helps it with Jesus Christ. Come on, dude. Yes, I'm sure Jesus get at it. Not overwritten. What? What? No, stop. What are you doing? Oh, gosh. Oh, correct. Do a LSL. No, what's going on here? Don't. Now it's fixed. No, I have some extension that's like, are you sure when I do things like renames just to make sure you don't break anything? I don't know. That would drive me bananas. Well, it's starting to drive you bananas. Um, yeah. All right. So now what need to do this? Adam's paying more attention than we are. Cat the file real quick. Okay. He thought they looked like the line numbers had gotten into the file, but they apparently they did not. So I think we're safe. No, we're good. Okay. So we need to curl the barf. Christian is Christian is barfing at your use of Z shell. Really? What? I thought he liked Z shell. He might. I thought he did. Wouldn't be the one that turned me on. This URL is what? That's the route URL. And then I just need the path, right? Yeah, load CSV data because the port. Yeah, it's not relevant. Yeah. So slash load on load underscore CSV underscore data. That's it. Right. Yeah. We'll find out if it's not. Okay. Well, here goes nothing, buddy. Hey, look at that. Wow. Okay. So now if you get a user. Let's refresh this real quick just to make sure it's still online and click here and get a user. Hey, user one password. Functional Python application. Look at that. It's the second one of the day. Wow. I've done two and two days. Dude, we deployed two apps to production. Technically only one of them was from source code, but two apps to production in less than 48 minutes. Well, that's what I was thinking, right? Like we could have gone a little bit harder if we wanted to with like a full Django kind of deal, but, you know, maybe next time. I want to see who this is. We got a new viewer here. If I was asked if I was sure all the time and I answer truthfully, nothing would ever get done. That's true. This is very true. That is very true. Yeah. All right. So two Python apps. We have two Python apps. We have some time left. Oh, hey, Mike. It's a friend of mine from a million years ago. We went to high school together. Let's keep in touch. See? Look, apparently. Did you want to try to get Django to work? I mean, in 30 minutes. Hey, man. You can race him. Jesus. All right. The question is, do we have an app in mind? I thought you want to do Django. That isn't it. Like just Django, like just by itself? Sure. I don't know. It's your show. Does it work by itself? Well, it needs like a database and stuff. Right. Like that's what I mean. Like check. Check if it's already in the operator hub. Oh, good question. Like in the OpenShift user interface. Django Unchained. That this is definitely not that kind of string. Not. No, not that string. Developer. No. What? Why did you switch to administrator? Well, because I'm used to going to operator hub under developer or under administrator. I mean, where do you go to? Add. Really? We should just be able to see stuff. Add from catalog. Yeah. There we go. All right. I mean, technically, I think. Now this looks familiar. Dj, what happens? Django and Postgres. Wow. I don't think that's an operator though. I think it's just a. It's a source damage build of the existing. Okay. Well, we're going to deploy it anyway. We're going to deploy it anyway. So the cool thing that we do, we meaning Red Hat, a lot of these sort of existing common frameworks, I think there's like a Ruby Rails one as well. We've already got sample repositories for those. And so when you do the build, it builds right out of the sample repo. Can you go to the repo for this one? What's actually in it? What is the repo? If you click. There we go. Yeah. There it is. Yes. Django example. Open shift. It's Django. How many years ago was the last commit to this? Oh, shit. I'm sorry. 14 days ago. Give me a break. 14 days. Okay. That's recently. Yeah. It's just some file recreated. This is a minimal Django project. I thought Django was like WordPress-y. It's like a. No, Django is like the framework you build a WordPress-y thing on. Oh, is it just an MVC framework? By itself? I guess. Maybe. Yeah. I mean, it's super powerful. I know Ansible Tower is built on Django, right? I thought it was like its own CMS, but I guess it's a framework. Makes it easier to build and better web apps more quickly and with less code. It is a Python web framework. There you go. Reassuringly secure. I'm not sure that that definition or description by itself is reassuring in and of itself. But anyway, we're not here to pick on web frameworks. We're here to. No, I'm just looking. Is Ausgaben listening on port 80? No, internally it listens on 8,000 and that gets routed to 80. Sorry, 80 gets routed to 10,000. Yeah, the route fixes all sends. So, yeah. I wouldn't say all. Well, most. Come on. What is my Eric Jacobsism? OpenShift does not fix your bad application architecture. Right. I mean, there were so many there I could choose from. So many Jacobsisms or so many bad application architecture. No, no, no. OpenShift doesn't solve your political problems. OpenShift doesn't solve your cultural issues. Technology doesn't solve political problems. That's right. Technology does not solve political problems. Correct. All right. Let's build this thing. Okay. Well, this is kind of cheating though, because you're using an example. Well, but that's why we buy or use OpenShift, right? That's why we use Enterprise. This is the shortcut. Right? I don't know. Maybe. Could be. Yeah. Build versus buy. That's why you buy, because there's stuff ready for you to build on top of already. Status. Not correct. But so far the app was, so the problem with the crash loop had nothing to do with the port. It doesn't detect that problem is different. Yeah, the route. The second one where we deployed it from the image it was working. So. Yeah. What's going on here? Oh, so this uses a template. And so for those who are Kubernetes familiar, OpenShift templates are kind of like Helm charts. I've never actually looked, can you believe I've never looked at a Helm chart? Like I still haven't even touched one. Do they support parameters like templates do? I assume so. I don't know. I haven't touched one either. Oh, man. We are. We are. Yeah. But that's the point of this. Yeah. Yeah. Yeah. Yeah. Just, oh, four three doesn't have Helm though yet, right? That's not until four four. Four four. It's tech preview in four three, I think. Oh, but I don't, you have to like pull levers to get it to work, don't you? Oh, yeah, yeah. I'm sure. Jeez, that is not ready. Why would that? I stopped paying attention. What are you doing? I'm looking for pods or whatever the fuck's going on here. Sorry, language, my bad. Apology. There we go. There should be. Where is Django? There's that. There's Django. It says it's running. It just started running. Yeah. There you go. Until four four in the UI, Helm charts will be available in the developer catalog in form four. Yeah, Helm v3. Right. Thanks, Serena. Hey, look, Django is working. Okay. Success. And this actual application installation as an OpenShift thing gives you all the instructions on how to work with this as is. Yeah. So you could start building on top of it. Can you scroll down so we can see the request information? Yeah. So if you hit refresh, you'll see the page views goes up. Yeah. And so that server hostname information, can you go to the terminal in the web console? Yeah. Yeah. Well, go to the Django pod in the console and then go to the terminal. Please. More, please. So, yeah, another super cool thing about the OpenShift web console is that we give you this terminal so you can actually, it's almost like a shell, so you can execute. Hey, thanks for following us, Adam. So in the shell, if you do envy and pipe that into sort, we should see, there you go. Django, PGSQL, persistent port. That doesn't look like a port. That's a whole string, but whatever. But yeah, all the connection information is being shot into this container as environment variables. And then the application code for Django is written slash configured such that it is looking for the value of the environment variable when it tries to connect to the database. So now we can externalize our configuration as code. Look at all the variables. So many variables. E to many variables. Buffer full. Buffer overrun. Okay, Django. Can we look at the log for my busted code? Yeah. Let's go look at your busted code. My code that's busted. It's the way it's picked it up. I bet it's because it's trying to run as a specific user and we don't have any UID. And so this is it, right? Yeah, crash back off. It's probably barfing. You want to see logs? Yes, please. Oh, it says it's running. That is like the most useless log file. Environment. Nothing in the environment. What are the events on that one? 90 times. If only the developer put that. There used to be a way to debug. I don't think it matters. If it had built it from source, it might have worked better. But under the animal file, that might look obvious to you here. No, it's not that. I mean, it built the image and then it tried to run the image and then it claims that the image is crashing. But unfortunately, Gunicorn is not spitting out enough information. Okay, interesting. It's all right. It's user error, but you're not the user in this case. I am. Well, yes and no. I've done broken it. You've done broken it, but I've done broken it. Well, it's got to be Python. It's just not being verbose enough. It's probably just exiting. I've always pronounced it Gunicorn. I mean, it looks like it's supposed to be unicorn, so. But there's no N to be silent. So it's not like good noon. Good noon, it could be Gunicorn. Gunicorn. I don't have to look it up. Yeah, Gunicorn. What does the internet say? The Gunicorn green unicorn is a Python web server. We have a pronunciation. Oh, pronounced G unicorn. G unicorn. Well, we're all dumb. Is that like G Willikers? G unicorn. G, look at that unicorn. We are all in the wrong. Yeah. Yeah, so I'd probably have to add some more stuff to make it look more better. But it should have built from source and I don't know why it didn't. So I don't either. Can you look at the build config for it? Yeah. You clicked into build. Like I'm seeing the way. I'm on the pod still. Sorry, my bad. I thought you clicked into build. Let me go back to the top. We can click in builds. I did click in builds. But then you clicked in a pod. You want to build config. Yeah. Yeah. Yeah, that's where I'm going. What do you want to see? Um, the YAML. Does it say anything about builds to output, escape and type source from Python 36? Creating webhooks. Oh, shit. I hit the back button, I bet. It says source. Why did it do a source strategy from Python 36? It identified Python. Well, we told it Python. And then what was it? Can you go to look at the build logs? I guess click builds. The builds tab. And then there should be the first build. Unless I just misread the build log. Getting image signatures from user root copy upload source. Oh, never mind. I just read the stupid. I read the log wrong. My bad. Okay. Scroll down. So I think I know what the issue is. User 1001. Yeah, okay. No, it's doing the right thing. So it ran. It did install the requirements. Yeah, Jinja, JSON, flask, all that stuff. Okay, I see what's going on here. So the issue is that this is a flask app that needs to be run in a particular way. And so my guess is that when the container starts, it just immediately exits because it doesn't know. It doesn't have all the stuff. Yeah. So go scroll up to the very beginning. Where does it say that it got the image from? Like we need to look at the S2I run script. No, that's where it got the code from. We need to find the image. The S2I Docker build image. This guy, that one. Yeah, but that just says it's not very helpful. Run. Nothing. You're not helpful to that. I'm never helpful. You don't have to tell me that. Click on builds again. Or like, can you find the image stream? Can I find the image stream? Yeah, click on overview. Sorry. In the build. Yeah. And then scroll down. Build from this guy. Yeah, that's not helpful though. Yeah, I guess we need to see if we can find it on GitHub. Let me see if I can dig it up. Oh, I want to find the run script for... We may need to put an S2I run script in our repo here. Open shift Python. I'm looking on my own. Open female. GitHub. Open shift REST client Python. No. Source to image using images. So many tabs. Yeah, we're going to need to... Oh, go look at the Adam's repo. The one that we built earlier, the FEMA web one. Because he's got an S2I folder in there. Open shift 3 Python 3 3. All it says is app config config.py. And his .s2i. And then look in... Oh, that's the environment. Look in FEMA web, like the root level, top level folder. I don't know if Adam's still watching. Uh, he's got config.py or app.py. Sorry, I was like half paying attention to the thing you just showed. I was half paying attention too. Config. It was app config config.py. So that's why we were confused. So now if we look at... I keep bumping my desk and shaking my monitor. So if we look at config.py... What navigation is available, that's great. Gunicorn processes, threads. G unicorn. Right. Sorry, it's unicorn. Okay. Yeah, I think we just don't know how to use Python S2I as a problem here. So you may even help set these environment variables. App file. The variable specifies the file name pass to the Python interpreter, which is responsible for launching the application. This variable is set to app.py by default. But workers for secure. Sure. Well, but I have app.py. Versus he's finding an example. Yeah, config, secure, key, workers, threads, forwarded, secure. Is there anything else in the top level of this repo? FEMA web. Let me take a look at it myself. I just unplugged my headphones and they went crazy. Sorry, I didn't hear anything you just said for the past 30 seconds. I wasn't saying anything useful. I'm looking for the source code repo for this... For this? Yeah, what's the... No, no, no, for... Yeah, you forked it. What was the parent? A Clare. Okay, I see what... That's weird. Sorry, I'm looking at the Python source to image docs. Config. This variable indicates the path to a valid file with a GUNICORN configuration. GUNICORN configuration. Yeah, so we might need to... Check out this example. Remove everything in the ifv and put your command. Okay, let's see what your... Figure out what your command is and I will... Yeah, but like Adam's using GUNICORN, I think we're just missing the config. So if you copy his... If you copy the config.py from the FEMA web example... Just the whole S2I directory? Yeah, so the S2I directory and then config.py. I would be curious to see if that makes it work. Because basically it just... It doesn't know how to load our app, is what it looks like it is happening. From flask import, flask from application import application. Right, but we're not doing that because it's all in there. Goofy app, 00 port. I shouldn't call it Goofy. Osburger, Aspagin, whatever it is, there it is. You're never going to figure out the name of this thing, are you? No, I'm never... What's funny is I have like a Dutch-German background and I can't say German words to save my life. So you want me to copy FEMA web.s... Yeah, I don't think this is going to work, but it'll be interesting to see what happens. Because I don't have like a traditional... No, you don't. So this is this. Appflask name, ifname equals main. Yeah, I'm going to paste something in the chat for you, Chris. That's the S2I Python docs. And so I think we need to configure something here. There's an example setup test app available. App file, this variable specifies the file name passed to the Python interpreter, which is responsible for launching the application. Right, but apppy is the default, which is what my answer is, app.py. App config. Right, but we don't need that because I'm using default unicorn. Well, maybe it would help. What does this default configuration look like? Well, you can look at the one in Adam's repo in the FEMA web repo, his config.py, which just sets them stuff. Yeah. And then there's a way... I think part of the issue... Well, if you look at his app, is it logging anything interesting? Let's see. Is it logging at all? Because I think the issue with mine, maybe the unicorn is not sending any interesting logs to standard out. Ah, yes, putting connection strings and stuff in here. Like who's connected to that? Yeah, running the file application from pythonscript app.py. This is a development server. It's... what? That's like not using unicorn. So far it says you could try with an S2I been a symbol script where you override the default. Well, the issue's not a symbol, the issue's run. Run. Do you want to commit... Let me commit these changes that I made. Watch it break again, at least. How about that? Oskevin. Yeah. So how would I refire the build? Start build? Yeah, okay. But is it correctly installing the dependencies? Yes, it is. We determined that it was installing the dependencies. Yeah, it was doing that before. Yeah. Yeah. Emote only chat that... Sorry, I got to change my... What are you changing? My arrangement. Just got to see how my screens are arranged because it's throwing me off. Sorry. All right. Still building. It is building. It is doing the things. It is installing its dependencies. And the stuff. And very quickly going... Does it install gunicorn? I'm just curious. It should be like one of the first things, right? Yeah, I thought I saw it downloading. Collecting gunicorn. There you go. Destroying images. Making progress. There's more lines of log, I feel, like this time. This is the build log, not the app log. Yeah, that'll do it. Push successful. So now I should try to roll out number two in the topology or in the pods or whatever. Crash back off of... Crash loop back off. Do we get any more information this time? Nope. Service port 8080. I thought we shouldn't make a difference. Yeah, you can't get a terminal because... Oh wait. Oh, never mind. Well, green for a sec. I saw green for like half a second. And I went red again. So excited. I got excited. I'm excited. No, it's not working. Forgot it's a container, it'll die soon. Yeah, well, no, that shouldn't matter. Okay, well, I wish there was more logs. It's frustrating. I want to find the OpenShift Python, like build... Oh, I think Jafar had shared it. Yeah, he shared... DevOps workshop. No, that's not the one that I want. This one? I want to find the actual... No, no, no, the actual Python source. S2I, source to image. This is for OpenShift 3. Let's go to 4, 2. OpenShift Enterprise 3.0, geez. Yeah, so this is not the right thing. I don't even think it... Do we have S2I in here? Yeah, I mean we do. It's under... Where? Look under builds and then... I don't know that we have like specific Python-y... Using build strategies. Applications? S2I build. Where'd you find that? Oh, build strategies? Yeah, build strategies. I'm hoping it takes me someplace maybe. Securing builds by strategy. Using build strategies. Performing source to image and criminal builds. Overwriting. Both reading the same documentation together. Yeah, let's see. Python, nope. Understanding build configurations. No. Yeah, I'm just going to look on GitHub myself. OpenShift Python. Sample Python. OpenShift REST Client Python. SCO or S2I Python container. I think that's the one that I want. Yes. And we're using 3.6, yeah? We are using... No, we're not using 3.6. We're using 4.2. Or Python 3.6. Sorry, yes. S2I bin. Run. So if you look at the run script. She's going to corn installed, which it should be. Jango's not installed. She should migrate. Get the default web concurrency. Maybe run in an hit rep. Maybe not. Oh, man. App home. Okay, a Python path. Sure, CD app home. App script check. App script equals blah. Okay, we don't have an SH script. Running application from script, which it does. It does. If app script is slash then app script equals dot slash maybe run in a knit wrapper. What is the maybe run in a knit wrapper function do? It's up higher. Yeah, I know. I'm finding that. Enable a knit wrapper then exact. S2I scripts a knit wrapper. S2I scripts a knit wrapper. Okay. So now go to the knit wrapper script on the left column. Please. Please. Please. Opening out. Okay. Well. What? Just wait for a bit. You're going to understand what this does. It's looking for a kill signal. And if it doesn't find one, it assumes it's good. Okay, so go back to the script. If I'm reading this right, I think. Yeah, this is like really smart. People made this and we are not smart enough. Yes, I'm not this smart. Not smart enough. Yeah. Scroll down more and more and more. I haven't sacrificed enough whatever is to make myself this smart. Manage. Look for a managed PY. Okay. If should migrate? No. If is GUNICORN installed, which it is. Setup PY. Find home access to setup. We don't have a setup PY. Look for a whiskey module. I just got my warning to join. Here we go. GUNICORN app module bind 8080 access log file equals dash config app config. App config. You may find out. And you added an app config. That's the only place. Okay. Yes, I did. Assuming it pulled that which. But it never gets to that, right? If you go to the app log. The build log, you mean? No, the app log of the crashing pod. Yeah, yeah. Hang on. Yeah, you got five minutes. It just says running from Python script app.py. Yeah. Okay. So if you go back to the code. Which code? Your code? The run script code. God damn it. I lost that tab. Oh, no. This guy. So if you scroll up. Like I probably don't have my flask app written correctly is the issue. So we could potentially just override the run script. Do something hacky if you want to try that in the last two minutes or whatever. What do you got for me? If you look at in the house gave in repo. In the Docker file. The command line. Yeah. If you just put that command line as the only line in run in the S2I folder. Put this well. Well, not not the not the command. Yeah, but just the unicorn access log file dash just put spaces between everything. Right. And you want that where? And the run. You need to create a file called run in the S2I folder or whatever STI. I don't remember what folder it is. Dot dash A dot S2I. Yeah, CD dot S2I. Is that a run file? You'll need to create a file called run. Yes. Want this without all the dashes and stuff. Yeah, I need a space between all the things. This might work. It might just. Really? I don't know. We're going to find out in two minutes or one minute. 15, six seconds. All right. So you want that there? It's worth a shot. All right. So get status. What do you got for me? Hacking with Python. That's exactly the command you're asking for. Sorry, Jafar. Jafar is joining us all the way from France. It is way past this bedtime. Jafar is always up past that time. Actually, what time is it there? 8 p.m.? Alexa, what time is it in Paris? In Paris. It's 8.43 p.m. 8.43. There we go. Thanks, Alexa. All right. If this was playing through your speakers, I could ask Alexa for things. You could. But it's not. It's playing through my head. Try it locally and it works. You tried asking Alexa what time it is in Paris, Jafar? No, he tried G Unicorn locally. Build number three is running. Here we go. Oh, wait. S2I bin run? We just called it S2I run. We may have made a terrible, horrible error. Language. We have not yet turned on the mature flag. Nope, it's bin run. Is it bin run? Okay. We might be screwed. It's okay. Move from bin. You're out of time. You're going to be late. Get ahead. I know. It's like the coffee mad header thing. Oh, yeah. Very late. Very late for an important date with kid status. Make sure I'm doing this right. Yeah, get pushed. Well, while you're doing that, oh, I can't do that because I'm signed in to Twitch as OpenShift. I was going to set my personal channel to mature audiences so that I can go hack on actually hacking on OBS and then swear while I do it. Okay. Well, I'm going to try this one more time. Are you really? Yeah, why not? We have two concurrently running builds. I wonder. Yes, I don't know which one's going to win. What's going to happen? You can race him, but we did it. I'm pretty sure that number three is going to finish and then number four is going to finish and then number four will get deployed after number three is crashing. Yes, I am joining this thing and another window while we're doing this thing. You're showing us what you're doing. I don't know if that's acceptable. No, I'm not. I'm not. By the way, Twitch says that we have completed not one, not two, but five achievements. I don't even know how far. Oh, really? That's good. No, that's a good thing because there's partners and other things and we need all the things. We need all the things. So many Twitch things. Yes. So many Twitching things. Twitching things. Oh, gosh. It's me without my muscle spasm medicine. Oh, you poor thing. Oh, man. Oh, my God. See, what am I doing? I am in. You're waiting for this build to complete. Oh, you're doing something in a different screen is what you're doing. Yeah. So I'm actually trying to join the chat I'm supposed to be in for OpenShift Commons Gathering. What does it say? Oh, that's fine. I'm on a login to Intra... Oh, what? Nobody worries about that. No, but like I'm supposed to help, there was only 17 people signed up last they checked. 17 people total for OpenShift Commons? Total. No, no, no, no. To help with the chat. Oh, to help. When there was 8,000 people this morning earlier. Yeah, yeah, yeah. Yeah. So, yeah, they need all the help they can get is what I'm hearing. So, yeah. Oh, Askabin also means to spend. I didn't know that. I knew that we had figured out. Christian was actually there for the naming of... For the donning of the Askabin name. But... All right. So how do we get... Oh, you know what I didn't do? I didn't do what I was supposed to do a long time ago. Which was... That could be any number of things. I didn't drag the handle on the Zoom window to make the screen bigger and the webcam smaller because I am a dodo. And I just did that now that we have negative time left in the stream. Good job. That's okay. I'm happy that you... Well, here's the thing. I did a stream Saturday night, just to test streaming and everything here at the house. And I ran half the stream without audio. So, yeah. We is all learning. Well, I have this... I have the mixer box over here that has its on-off button. And I forgot to turn it back on after taking a break. So, yeah. It's because you have too much fancy stuff. That's true. I do. Too many fancy stuff. This might actually be running. Holy smokes, it's running. Boogers. Look at that. All we had to do was completely re-engineer stupidity back into the application. I have outsmarted... Hey, what was my tweet the other day? I don't fix things. I just break them and then make engineers second-guess their decisions. Such a good tweet. Did it work? Did it work? Did it work? No, it did. It's happy. Is it not running? Oh, it's running on the wrong port. Oh, do we need to change ports? So, yeah. We can do one or two things. You can either change the service definition or you can change the run script. Oh, that's true. Because it's running. It's listening on port 8000. It's probably easier to change the service. Oh, is that what it is? Okay. No, just edit the service. Let's show the power of the OpenShift web console. Yes, I'm sure. Fine, fine, fine. We are going to show OpenShift, darn it, whether we like it or not. Can you do this without... Oh, edit pod selector. Yeah, try that. Edit pod selector. It's the first one on the list. Oh, damn. No, that's not right. Okay, try that. Edit service. Service? Try that one. No, that's YAML. Isn't there like some like cool not YAML option? Not YAML thingy? Right here? Please click a line. Can I edit YAML? No, I can't click those. Annotation. You're going to edit the annotations. What other actions are there? I can't... No, that's... I don't think you can change the service once it's instantiated. You can. You can. You were doing it in YAML. No, I mean with YAML. The question is... With YAML, yes. Yeah, is there some sexy UI way to do it? Change port. Serena, if you're still watching, I want a sexy service editor. Set traffic distribution. No, that's not going to work. Why are there two edit application grouping options? That's a good question. I don't know. Just edit the service through the YAML at this point. Okay. Geez, always. And so you want to change the target port because the route is probably... I see it even says... Oh, the route might also be wrong. Just make everything 8,000. All the things. Yeah, man. We're going to make this work or not. I don't know which chat room I'm supposed to be in right now, but... All of them. I don't know. I like... How do you even get to these chat rooms? Anyways, work stuff. I don't know. Well, we'll do it. We could do that on Twitch too. We'll all take that one. No, I'm good. Did you save it? Yeah, I saved. So now you probably have to edit the route as well. Service 8,000. Where's the route? Going to be hiding. In topology... Oh, is there a way to do this from the developer? Uh-huh. Yeah. You can open the route, but that's not going to work. Because it's the route. Unless I'm in here. That's the route. Near the routes here. Here we go. Yeah, I guess we need to head to the... Because the name... Oh, yeah. So it's 8,000 TCP. It does the target port by the name. So the way that OpenShift does the ingress, we have a controller that is router. And it uses these things called route objects. And it works very similar to Kubernetes ingress, but basically the target port is the actual named identification of the port in the service. So on the service definition that we just changed, you'll remember that there was a port called 8,000 TCP, the name. And so now if you save that, yeah, it should work now. Should being the operative quantifier, as opposed to must, which is unlikely. There you go. Yeah, baby. We did Python. We did it. Yeah, the same survey errors last time because we didn't import the file. But if we import the file, it'll work just fine. Yeah, yeah, yeah. See, Chris, I made a Python OpenShift developer out of you. I'm shocked. No, I really am. Not as shocked as I am. No, I'm just kidding. I'm shocked that I was able to do it. How about that? No, that still sounds good. That still sounds good. Yeah, no, no, no. I'm shocked that I was able to lead you down a sufficient path to give you what you needed to get it done. There you go. That makes it sound like it's all me that sucks, which is exactly what I was going for. Is it? You don't suck. You just taught me how to do stuff. How can you suck? Well, damn, I guess I did all right then. Cool. Well, thanks for joining, everyone. This has been our first horrifically awful streaming experience. Hopefully it wasn't too terrible for you. That wasn't awful. We deployed three apps. Okay, the things that we did on the stream were fine. The stream itself, no problem. Well, the actions taken during the stream were good. It was everything else about the stream that was awful. All the middle parts. Yeah, all the middle parts, like using the tools and actually, yeah, that's pretty much it, just all the streaming stuff. So yeah, I'm going to play the outro video and then I'm going to stop the stream and then people can go back to their lives and probably enjoy themselves way more than they did watching us beat total clowns. Maybe. Yeah. Are we doing something again sometime this week? This week, I think we are doing something maybe Thursday or Friday. I forget. I'll have to double check. I know we're not doing anything tomorrow. Is that like a you and me? Because I'm busy with summit. I don't know. You want me to really pull up my calendar real quick? You don't have to pull up your calendar on the stream. I mean, like, I can. Well, it's not in that window. That's stupid. I think it was just that stupid. It's just a thing. It's a thing. Well, let's see. No. Okay. So CNCF. Oh, so before we get off, CNCF has set up a webinar for all of us people, the entire Kubernetes community, to teach us. Does that include me? Yes. Everybody to teach us how to do OBS and Twitch streaming in general, better as a community, because we are all going to be doing more stuff like this. So what you're saying is that thanks to CNCF and George Castro and all the folks that got all that together for us. So what you're saying is that if we had waited until Friday to do this stream, we might have looked less like clowns? No, I'm saying we need all the practice we can get. Oh, okay. Okay. All right. Makes me look smart when I say that. I think it was. But no, we do not have anything else in the books. And I do have a two hour slot open on Thursday if you do want to tinker. So yes, we are going to find something else to tinker with. Maybe we'll turn it around and I'll be the clown trying to do Ruby or something. I mean, I know how to do Ruby, but I haven't done it on four. So that could be no elephant clown. Yeah, we could do that. Or I could break their couch base operator six ways from Sundays again, but whatever. But that's not OpenShift's fault. No, I don't blame couch base either. But like. No, I don't either. I blame me and my ability to point out bugs. All right. I gotta go. All right, chief. Thanks so much. Thanks to everybody for watching. We appreciate all your follows and subscriptions. Be sure to check us out later and we'll be tweeting and letting folks know via social media when we stream again. Thanks so much. Have a great afternoon, evening, whatever. And we'll talk to you later. Bye bye.