 Next, I'm going to bring up Zach Robinson. He's the CAPI project lead. That's the team that builds the Cloud Controller, core part of the Cloud Foundry application runtime. He's going to demo some really interesting new capabilities that some of the new API endpoints, new API capabilities are allowing us to start to bring together. So, Zach, come on up. So say it if you want to go, say it if you want to go, say it if you want to go. Thanks for coming. Thanks, chef. I was nervous. I didn't see you, and I had to go check. Oh, I'm here. All right, so while you plug in, as we've done with everybody, why don't you give them a feel for what it is that you want to show, and I think maybe more generally, some of the work that the CAPI team has been doing around new APIs within a controller. Sure. So the demo I want to do today is something we're working on called rolling application updates. And as Chip said, this is something we're sort of able to do with some of our new API work, which has really been around taking what an app is and decomposing it down. So app is a really central thing to Cloud Foundry. It encapsulates a lot in the V2 world. It's our application. We scale the app. We put our environment variables on our app. We put our start command on our app. It's where we upload our bits and what we stage and all this stuff. And what we've really done is taken that and sort of decomposed it down into smaller API parts. And what that does is gives us sort of more nouns that we can interact with and sort of build different workflows. So the workflow we're going to talk about today is what we said, rolling application updates. And this is really a story about availability. And this is something that Cloud Foundry does for us. We push our app up, and we expect to be able to get traffic to it. And we expect to get traffic to it all the time. And but there's some caveats to that. And so we want to sort of smooth over some of the rough spots here. So we should pull up the demo now so we can, or at least your screen, so we can take a look. Oh, I'm going to have to make that bigger. I think 7 is the magic number. Yeah. How's it look in the back? Thumbs up? That goes. Yeah? All right. So this is really a story of push, which we're going to work our way through. And I think a few of you have seen this before. We think push is pretty great. So we're going to do that. But we think it can also be a little better. So first, I'm going to start off. I've got just a simple application here. Static index HTML page, nothing too crazy. Let's take a look at it. I just got a header with a version, with a number we can increment as we sort of work through this. So we can see the changes over time. And then I broke out my sort of Microsoft paint skills. So I had to hear that program's going away. And put a little image in there for us. It is really upsetting, but you're using a Mac. Right? You can have it all, Chip. Yes, you can. Yes, you can. All right. So I'm going to go ahead and push this up. And this is, sorry, I love doing this. You have push on the keynote stage, right? We should do this as many times as we can. This is like the quintessential experience of Cloud Foundry here, right? Absolutely. Took my simple app. I pushed it. Now I've got a route. I can take a look at it. I have a running instance. And since this demo is all about availability, I'm going to go ahead and start out by just scaling it up to five instances. Because I really want to make sure, oh no, I did it wrong. Really want to make sure it's highly available, because that's what we're really here for. So let's take a look at our app real quick. And here we go. You might recognize this guy. If Chip wasn't working hard enough, I want to make sure he works a little harder for this demo here. He asked if he could use my likeness. I didn't tell him what I was going to use it for, though. But he looks pretty happy in this one, right? Seems all right. So what I want to do here is I'm going to set up an auto refresh sort of thing here. Because again, this is all about availability. So I'm going to start this off. And then we're going to make a change to the app. And we're going to push it up. And we're going to kind of see what the little issue is that we want to start working with here. And yes, I'm typing nano. I think Vim and Emacs have had their day. We've got to try nano out every now and then. So I'm going to increment our version number. And I get a little bit of a different image. Are we skipping two? We'll come back to two. I'm actually getting really nervous. And we'll push it up again. And oh no. That didn't work. Our app is down, right? And this is what actually happens with push today. Now we have a lot of ways to work around this. But it's sort of a workaround, right? So this is what happens today. And oh no, we got Chip back. And he's not quite as happy in this image. I don't know if he's sad or mean. I don't know if he has one of those images. I was being mean at the time. So Chip is disappointed that our app went down, right? Because that's sort of what we're here to do with Cloud Foundry. Now anyone who's pushed before, we have ways of working around this, right? Everyone's sort of doing blue-green deploys. And that's pretty good. CLI plugins are amazing. Right. We've got CLI plugins. I speak to a lot of folk. And a lot of people have their own custom scripts. People even write their own apps that sort of work this flow out for them. And if you're not familiar with this, this is the thing where we sort of maybe you have two apps. So I've got an app here called Summit. But you might have an app called Summit-green, Summit-blue. And you push to one or the other to get your code changes and use routing to switch traffic between. So you're always getting your traffic. But there's some downsides to this. Because you have two different apps, you have two different log streams, you have two different metric streams. So if you want some historical view, you've got to sort of compare across a couple of different apps. All of our configuration applies to applications. So you bind services to your app. You set environment variables on your app. And you want to make sure those are the same across your different app versions. So it's a little bit of extra overhead to make sure you sort of set that all up. So what we want to do is sort of try and ease that pain. And this is where rolling updates come in. So I want to get sort of sad chip off the screen here real quick. Let's go back to it. I'd appreciate that. Again, though, I was angry. Right. Angry chip. People want that. So if happy chip is good, then like, I don't know, maybe four of them is better or something. Just to make a little update here. And we'll push that up. And so what we're going to do, this is just a normal push. And we're going to get back to happy chip because we want to stay there. And what we really want to do is keep them happy. So I'm going to make one more change after this one. And we're going to do a push. And as great as push is, we want push to be a little better. So one thing to point out is this is a proof of concept of a feature that's in development right now. So I had to do a little changes. And I've got a special command called Better Push that we'll use. Well, that's the fun of an open source conference, right? Right. We get to show things that maybe aren't even done yet. That's good. Let's get all our chips on the screen. Oh, goodness. All right. So we'll make a little change here. We'll bump our version again. And here we go. We want to get, I don't know, there we go. Here's this number two that you're talking about, Chip. We're getting there. It's outstanding. Cool. And now I want to change this sort of a little bit. I want to really show that we're going to try and get all the traffic. So I'm going to jump down to 0.2 seconds and try and really refresh this second crash. And so we're going to do Better Push. And what we want to see here is that we're getting all the traffic. And we don't see that 404. So last time it went down kind of around staging. So hopefully we hit staging. We're still up. This is good. We're still getting traffic on our old version. What we want to see is we start moving traffic over to our newer version here as that sort of comes up. Oh, my gosh. Here we go. We got Chip to dance on it. It looks like I'm dancing. All right. That's really neat. And there was a route to the host the whole time. And then we'll see it'll sort of converge right now. So the implication here is we have two different versions running live. And it'll eventually converge on the later. What are some of the lower API components that are used to kind of piece that together? Right. And I actually kind of want to do one more little step. We want to see Chip dance one more time, I think, right? So one of the components we have is something called droplets. And those are the runnable units of Cloud Foundry. And so we've exposed this as a separate API instead of just being sort of an implicit part of app. And so we've got some new commands. So if you actually list droplets for our app, we'll see, remember, we pushed four times. I've got four different versions. So I actually get a historical view of versions I pushed. So I want to jump back and grab the previous one. And we can actually set that droplet. And what that means is we want to execute that previous droplet. And so this is kind of cool because we have this history, and we have this ability to do rolling updates. What we'll hopefully see, maybe not that I said throwing, there we go, is that we'll actually roll back to a previous version. You can see that version number dropped down to version three. That's really neat. Yeah. And the mechanism for that is that we have two different sets of instances running. We have sort of our web set and our web deploy set. And we're sort of rolling one at a time through these two different sets. And so droplets are an example of one of those lower level APIs that we're sort of able to expose. And now that we have this thing, we can pick and choose which one we want to run. That is really cool. And I kind of feel like I have a whiplash now. No, no. Anything else you want to show, folks? I think that's all I've got today, other than I would like to ask you all to stop out later, maybe, and check out some Cappy hours if you think this feature will help you or want to chat about it all. So 11.25 AM, they took you off the screen. So 11.25 AM at the runner's circle, down in the foundry, come talk to Zach. They've got a lot of really cool stuff happening. So go join him. So, Zach, thank you very much. Thanks for being a sportsman. That wasn't too painful. Thanks.