 Looks like we've got some standards in the back, too. Sorry, there's no, there's not enough seating. Let's see, do your best to, you know, when we get into the hands-on stuff, do your best to huddle around, you know, some people that already have tenant IDs. We have 50 tenant IDs that we've given out. There's, I think there's two per table on both sides of the room. So we'll get into what that's all about here in just later on in the session. So let's go ahead and get started. So I'm Cameron Cedar. I work for SUSE, I worked for SUSE for over nine years. And I've been doing a lot of open stack ever since its inception, and messing around with SUSE Cloud specifically. And then we have Jason from Rackspace. Hey everybody, thank you for coming out. What a great showing. I'm very excited to see all the interest in heat. I'm an open cloud architect on the Rackspace Private Cloud team. And even though I'm on the Private Cloud team, there is a lot of heat integration and public cloud integration. And there's a move to the enterprise and on the enterprise side, they're really looking at heat to replace some of the orchestration tools that they have, so I'm happy to be here. And I'll be helping out with the hands-on piece. And then if we get time at the end, we'll look at some other areas like load balancers of service and L3 and things like that. Thank you. Awesome. So this is what we're looking at today. This is the order of operation. We're gonna do a little bit of an introduction here to heat and then we're going to do a hands-on exercise, okay? You're gonna grab a heat stack that I've provided for you to learn and grow from this experience. You're gonna load that heat stack into the tenant ID that's been given out, okay? And then we're gonna launch that heat stack. We have what we're calling right here our lap stack. It's a bunch of laptops, okay? All wired up. It's got OpenStack, SUSE Cloud Distribution with the router. We have a Wi-Fi access point. It doesn't have internet access, but just strictly access to this OpenStack environment. So you'll be connecting up to this during the session. And then we'll do some more advanced stuff which Jason will kind of run you through using some stuff there on RackSpace's infrastructure. So service deployment. That's really what heat is all about. Making it easy. Is it really easy? There's several different ways to really skin this heat stack thing. There's the easy way. There's the not quite so easy way. And then there's the hard upfront but totally easier in the end way. So there's several ways. In fact, there's actually several types of templates that you can use in heat as well. So when you dig into heat for the first time, there is lots and lots of learning that goes on here. So how do I deploy it the easy way? You log into the dashboard, you go to your images, and then you select your image. You launch it, configure your networking. You now have an image launched in your open stack environment. Pretty simple. The not quite so easy way using the API. Making it service driven takes a lot longer to do. So you're going to do some programming. It's gonna take a little bit of time to get that all nailed out with some Q and A with your whatever application you're gonna control that with. So not terribly friendly to everybody. So that's the not quite so easy way. And then there's the hard upfront but totally easier in the end. So from project Grizzly, heat has been in there. Grizzly was, I mean, there's a lot of problems in that particular code, but Havana works really well. It's fully supported in SUSE Cloud 3. So this is what's going to provide your orchestration layer in OpenStack today. So heat uses an OpenStack native REST API and it also uses the cloud formation compatible query API. Okay, so that's important to know because you can actually, a lot of times I find it a lot easier to actually go out to the Amazon documentation and pull out the stuff from there to create my heat stack. It's so much easier because the OpenStack manual pages don't do it sometimes. They don't always have everything that I need. So I always go back and forth. So heat allows you to pre-divine a set of parameters like your compute infrastructure, your networking infrastructure, your storage. So you can do software defined networking, have it create its own private network, the private LAN that you have databases spinning up on, and you have applications accessing that database over that LAN, and it does it all by magic, right? That's what we all hope. So let's dig right into it. All the hands on. So this is, hopefully you don't have a lot of challenges. I've tried to make it as such where we can really dig in and learn what's in these templates, okay? So that you can get a really good understanding, get started on creating heat templates. So we have 50 tenant IDs, and the user names are user one through 50, and their passwords are also the user one through 50. So you should be able to hit this URL right now if you are hitting this Wi-Fi. The SSID is SUSE and the passphrase SUSE Gecko. And so you should be able to hit the 192.168.124.141 address. Everybody hitting that? It's asking for a numeric pin. You got it? Yeah, raise your hand if you're having some trouble, we'll walk around. We got some folks to help, so, okay? These other URLs here, the 192.168.124.10 slash share, that address you're going to need here later on, okay? So keep that in mind, I'll go back to this page, okay? Yeah, it's SUSE Gecko, okay? Now, when we log into our tenant ID, the first thing that we're going to do is create some security groups, okay? Has everybody created a security group before? I certainly hope so. I'll give you just a couple more minutes while you guys are getting this stuff down. Raise your hand if you need some help. The user is user 21. Password is user 21 as well. So, on your tables, there really should only be one or two of you connecting per group because we're limited on IP addresses as well, so some of us are running into some, not being able to get an IP address, okay? So let's be careful with that on divvying up those IP addresses, all right? Okay. So once you're logged in, just hold right there and then we'll get to the templates, okay? Let's make sure that we can get at least four laptops per table logged into this web interface. That should give us enough room to kind of huddle around a little bit per table, okay? Can I get a raise of hand who is not set up? Okay, we got just a minimal few. That should work. Okay, we can't have everybody on it, so some of you aren't going to be able to connect, so you'll need to huddle around somebody that is close by you, okay? We did our best to accommodate. I'm sorry if you can't connect. Yeah, I'll show you some stuff on the screen. Absolutely. All right, let's go ahead and move on. Now the first thing we're going to do inside the web interface, inside Horizon, you've logged in with your tenant ID already. Once we've logged in, we're going to create some security groups. These security groups are required for the heat stack we're deploying. So when you deploy a heat stack, you have to make sure if you're using security groups in your heat stack, you have to make sure that those are deployed already, okay, and make sure that those are set up in the environment, in that tenant environment already, okay? And I'll show you why here in just a minute. So once you create the WWW security group, in fact, you might find that the security groups are already there. I think the security groups are already pre-populated. If they are, what you'll need to do is go in and create a rule. And so you'll need to create the HTTP rule for WWW and the MySQL rule for MySQL security group. That should be fairly easy. Raise your hand if you need some help doing that. We're gonna rock around. So let's go ahead and create those security groups, create the rules for the security groups, okay? So in the WWW security group, let's create a rule called HTTP. And it's just a drop-down list. You'll see HTTP in there, okay? It's already pre-populated for Horizon, okay? And the same goes for MySQL. Go into the MySQL security group, add a new rule. In the drop-down list, you'll see MySQL. It's pre-populated for Horizon. And go ahead and add that as well. I've also added in the command, if you wanna do it from the command line, we're not gonna do that today, however. If you were doing this in your own lab, you could in fact use the Nova security group list and list out the security groups that you have in there. There's also the Nova security group create. There's also the, Neutron also has security group creation as well. What this process is doing is creating those, the IDs that are actually required for us to create the heat stack. Yeah, just a port 80. We don't need HTTPS. We're not doing the execute, okay? That's just information. If you can take back to your own lab and run it from the command line if you'd like, okay? We're not gonna do that part. So I should probably remove that from the slides. You will take that out. Don't wanna confuse anybody. So what this process is doing is it's adding in some IDs for us that we're gonna pull out here in the next step, okay? And I'll show you what these IDs are and where they're used, okay? Again, that's just some information. You're not gonna add in any IDs, okay? You're going to be grabbing the, when you create the WWW and the MySQL security groups, it creates a long UUID and open stack. Those are the IDs that we're gonna be grabbing. No. So if you've already edited your rules, show of hands who hasn't created their rules. Okay, we got one guy in the back. Two in the back. Okay, next step. We're going to create a key pair, okay? So go to your access and security again and let's go ahead and create a key pair. You can call it, you know, tenant one or whatever tenant you are. That would work fine to make it simple. Or you can give it a special name. Doesn't matter to me. Just remember what that is, okay? And then what we're going to do is we're going to input that key pair into our heat template. But we're not gonna do that step yet. All I want you to do is create that key pair. Just go into horizon and create your key pair. You can help with the key pair. Yeah, hit access and security again. No, it'll be down too far. Key pairs. Yeah, it's a little tricky. If you can't see key pairs there, you might need to click on the left bar again under access and security and then it'll show up as a tab option for you. Who needs help with the key pair? Awesome. All right, we're moving on. Now this is not a step that we're going to do. I'm going to explain a couple of things before we move on. We have the NOVA network and what you can see here, this is some JSON code that is pulled out from the heat stack template that we're going to be using. I just want to explain it just a little bit. You see the default ID in there. You'll see a long UUID. That is a UUID that we need to pull out specific for our environment. Now that UUID, the floating network, is the same across the entire open stack infrastructure. I have that in a file that I showed you earlier and you can all grab that. We're not going to grab it yet. I'll tell you when to grab it. I have some information here. You can use the NOVA net list if you're going to use the CLI in your own lab to do this. So you can play around with that. We'll actually list out all the NOVA networks and so you can grab that UUID that you'll need for your heat stack template. The next thing is the fixed network also. It also has the UUID that we'll need to pull out because we are using that in our heat template as well. So again, that's just another UUID that we're going to need to pull out for our heat stack. Okay, I'm going to go back to here. Now here's where the editing fund comes in. So whoever you have designated as your editor on the table, if you haven't designated an editor yet, let's go ahead and do so. And we're going to open up or download the one that says heat template wordpress.json. So let's go ahead and get that downloaded, open that up in your favorite editor and we're going to walk through editing that. Now I'm going to pull it up on my screen, okay? Is everybody able to get that downloaded? Who's not? Sweet. Okay, yes. Some people need to go back. Sorry, my shift F5 skills are not working today. You could go to just the slash share and you'll see the files in there as well. So, and then you can just save them from there. Okay, so I'm going to open up this template just in the web browser. I don't like that view. Let's enlarge it quite a bit. Can everybody see that in the back? Okay, so we have the floating network and we have the fixed network. Let's focus on those two firsts, okay? We need to grab our floating network and our fixed network, UUIDs. And so what I've done, I've actually exported those out under network-list.text, so you'll find those in there. So I've already exported them for you. You'll just need to copy them into your JSON file, okay? In that location. So that's the task right now. Copying those UUIDs over into the right location. Make sure you're putting the floating network as it's labeled in the JSON file in the right location and the fixed network in the right location, okay? Oh, it is correct. Some are saying it's correct already. So maybe I did some work for you. Does it, okay, that's probably correct then. So if it's matching already, no editing then. Okay, okay, yeah, okay. Does everybody remember when we created our key pair? Do you remember the name that you used when you created your key pair? If you did, then you'll need to enter that in right here where you see key name and the default string. The one that's in there is CCeder. That's my user ID. So you'll need to change that for your key pair. Just put in the name that you used, okay? So edit the file, drop in that key pair name. This part right here. Question. You can, however, if you import what's there from the URL, it's not gonna match everything in your tenant ID. There are some things that are different, so it won't launch correctly, okay? So you will have to modify some things. But you could in fact, and that's a great idea, you could in fact do that in your own labs, you know, have them hosted on a web server somewhere and you could actually import them using that web server, okay? Good point. Is everybody able to get that edited for the key pair? We'll go ahead and move on. We've got instance type. I've already populated this one with a special flavor called Sousa. So we won't need to touch that. In your labs, you might need to. You might need to mess with that if you want to have something larger. You could change that default value to M1 medium or large if you like, okay? The WordPress volume size we don't need to mess with. The MySQL volume size we don't need to mess with. The WordPress version and the MySQL version, those are being pulled out from the images that I've already pre-populated. So you'll see two images already in there, okay? So it's important that that image name has a version ID on there. That's where it's grabbing that version from, that string. Okay? Now we get to some fun stuff. These are gonna be different for every single one of your tenants. So this is very important that we actually copy these correctly. I have a file that is populated with everybody's UUID. I'm actually gonna run a for loop right now and get that created again. My colleague informed me that it's not up to snuff right now. So I will get that fixed really fast. This will just take me a moment here. Oh, there we go. Okay. It helps to source the right file. Okay, it should be correct now. Your sequence is only to 30 again. Your sequence is only to 30 again. You only went one to 30 again. Thank you for that. I think programming is best. No one likes to type in front of a Republican. We'll recreate. Yeah, first we thought, oh, 30 will be fine. It's a good thing we did 50. All right, so it's all there. So let's skip on back over to here. So we're back to editing our template file. So open up that text file that I just copied over to that share directory. So you can go out to that web URL, go to share, and you'll see that security group text file. Find your tenant ID, and you will see all the UUIDs that you need to copy out for each one of those groups that you see in your template file. Okay, using users. Okay, let me take a look at it. Uh-huh. Some tenants don't have... Oh gosh. All right, let me... I see what the problem is. Let me fix that real quick. That's what happens when you loop over that same file a couple of times, it dirties it up. Okay, try again. That looks better. Back to the heat template. Go down where we have WWWSECGROUP and the MySQLSECGROUP and defaultSECGROUP. Pull out the UUID from that text file that I just updated for your specific tenant ID and drop them into your template file here. Who needs help? Everybody got this task done? You guys are good. Raise of hands, you're ready to move on? Okay, we've got a few. Okay, we'll wait just a few more minutes so that everybody can get caught up. We're almost ready to launch our heat template. We're getting close. Then we can really see how our lap stack really holds up. Yeah, each one of these laptops has 32 gigabytes of RAM and we've got plenty of disk space to accommodate all these instances. So we'll see how well it does. We did some pre-caching on a lot of these images so it should work out. The UUIDs for these security groups, they should be different for every tenant. But at some point, we need to screen them. No? I'm gonna say that. Okay. Yeah, so if you copied the UUIDs before I actually reran my script to repopulate it, then you have the wrong ID. Because we actually, in our testing, we actually blew everything away and recreated and I didn't run that script. So you'll need to go in and copy the ones that are there now because those ones are correct, okay? Just so you're clear. All right. Okay, so the reason why we're doing this is because when you're creating a heat template and you're using security groups, you need to be aware that when you have security groups in your heat templates, they're different for every tenant ID. Okay, and so you're gonna have to go in and add in those IDs into your heat templates. Okay, manual process. Let me come over here so I can hear you. Yeah, yeah, this is JSON format. This is basic UTF-A JSON format, okay? No, no. So you brought up a good point. Is a heat template always in JSON? No, there are other formats. In fact, there is a specific heat format that you can use. There's a JSON format and there's an Amazon AWS format. Good grief. You can get lost really fast, okay? So do some homework on that. There's lots of reading you can do on the various formats. I find that the AWS one is a lot easier because there's a lot more documentation out there. Quite frankly, going through some of the JSON stuff and some of the stuff on openstack.org is some of it's a little bit limiting. Some of it works. There are some pre-canned templates that you can grab from openstack.org as well to play around with, so do some testing in your own labs with that stuff. But there are different formats, good point. Yes, say again. So he's asking, what's my recommendation? My recommendation is Amazon AWS format because if you have a public cloud and you've already got some templates written, you can utilize them in both places. Just kind of makes sense. Yeah, it just makes sense that way that you would have that backwards compatibility between your public and your private. That's correct. So she asked Amazon only supports their format. Yes. So everybody ready to move on from the UUIDs? Who still needs help on those? You need help on the floating IP? So those should be already ready to go. Okay, so don't even, yeah, I already set those up for you. Let's move on. We have some mappings going on here. These are actually for the instances that get launched. And then we have some resource set up. We're setting up some networks. We've got a data network that we're setting up. And then there's the subnet that's tied with it. So it's a 172.16. So when we launch this heat stack, you'll see that come into play here. And then we've got some ports that are gonna be opened up there. Notice how it still says quantum in there. That's some, yeah. Still some programming to do to get those all changed. So be aware of that. And there's different ports for each one of the, for WordPress, we've got multiple ports for the networking. So the WordPress image will have two networking interfaces. He's tied to the data network and the fixed network. And I believe the MySQL is only tied to the data network. So the MySQL database is completely isolated inside your cloud, which is really sweet. You can't even access it from outside at all. You can't even get to it. The only thing that can get to it is your WordPress image. Pretty darn secure. That's pretty hard. All that data is really secure behind all that security there in your cloud. We don't need to mess around with any of the floating IP stuff here. And then here's the basic instance setup. Pay attention to the term availability zone. If you have a private cloud environment where you've actually created availability zones, you would need to modify that for your specific environment if you have an availability zone. You could in fact have your web server on one availability zone and your database on another availability zone and those get tied together. So you could do it that way if that's how you have your private cloud setup. And then we've got a volume, a couple of volumes actually that we're actually creating for each instance, both WordPress and MySQL. And then it's creating a mount point reference for those. And that's it. That's our heat stack. So we've done all the heavy lifting, the editing. Not really heavy lifting, but. Now we can switch over to the horizon dashboard. Yes, question. Yes. It is not. These images are set up in a way that they automatically set that up inside the image. Now that's a good point to bring up because there are ways within a heat stack, some more advanced methodology to actually traverse into the image and actually make some changes there and have it connect up to that, the database back end and make some changes within the database, that kind of thing. We're not doing that here. These particular images were created using SUSE Studio. So we've actually already pre-populated some items within the image itself. So we don't need to do all the heavy lifting with the heat stack. So there's a couple of different methods that you can take there. Yes. How does the WordPress instance find out the IP address of the MySQL back end? In this particular case, it's being set up with the Nova Fix Network. And so it will also, on the back end, the database will also get set up with the Fix Network as well. So both of them will have that. You can do it that way. I think actually in this case, we are actually populating it on the database being populated with an IP address on the data network that we've actually created a new network called data. And so we've already populated the WordPress image with an IP address on that network so it can connect to it automatically once it's launched. But you could do that within the heat stack itself. But these are pre-populated images that have that already done, yes. So is it a mixture of open stack and AWS? This particular one is just strictly AWS. Say that again. Yes, yes, those, yes. So you make up, that's a good point. So he has, he's asking if they are mixed between the AWS and the open stack templates. There are resources that you can define within that come out of open stack that also fit in with the AWS templates as well. So, but the formatting is the same as what you would see in AWS. Yes, yes. These instances have already been created. They're already pre-populated images. We're using heat to orchestrate the deployment of those. He's asking would we use these fixed IP addresses in production? The answer is yes. He would use these fixed IPs in production. You're gonna have a different address space, of course, than what I'm using here, but yeah. Yes, that's if the IP address is a fixed IP address. In this case it's not, it is dynamic. So, ah, but it does DHCP. Okay, I'm sorry. The image itself is not populated with a static IP address, but it's populated to know that it can connect on that network, that data network. So, the data network that we're creating is a DHCP network. So once it's launched, it will get a DHCP address from the data network as well as the database. And so then they can communicate on that network. Yes, that's correct. I can show you more details about the image afterwards if you'd like. So, yes. I think we have kind of the same question, but we get, okay, they're on the same network. They can communicate the application and the database, but how does the application know where the database is of what IP address? I think it will all come together when we launch it. So let's do that. We're ready to launch it. So let's go to the horizon dashboard. On that 141 IP address. So you should be right back here. 192.168.124.141. And if you're logged in under your project, I'm going to actually use the open stack project. At the very bottom on the left side, you're going to see orchestration. And under that is stacks. So we'll need to select stacks. And there's a button in the upper right-hand corner. You can select launch stack. In our case, we're going to point to the file that we've been editing. And hopefully it's on your local machine somewhere. So you select file and browse to it. This is going to be fun. We're all going to hit the box at once. And once you have that template file already populated in there, hit next. And now we can give it a stack name. Call it whatever you want. The password for the user admin is crowbar, all underscore, crowbar, all lowercase. Sorry, all lowercase. It was a late night last night. Sorry? No, no, no. Admin, right here. Everybody should have admin. No? If it says user, then use user one or user and the number for your tenant then. Yeah, that's right. That's right. So put in your password for that tenant user. And then scroll all the way to the bottom. You can see it's populated everything with your UIDs and everything that we have in that template. And then you can go ahead and hit launch. And when you're ready, go ahead and hit launch. And it's going to start creating your heat stack. If your heat stack fails, you've got a problem with your UIDs or something there. Who's having errors? Okay, okay. I'm going to come by and look, but do one bit of troubleshooting. I should have mentioned this earlier. If you know all of your UIDs are good, everything looks good, check your, so JSON is very sensitive to white space. So if you do a tab instead of a space or if you mess up the white space at all, it doesn't work. So what is, like what errors are you getting? Maybe what I need to do is see who's not here. Okay, so I would say that the flavor ID can't be found. Yeah, that's my problem, that's my mistake. Let me think about, no, I'm kidding. Let me fix that. I'm not kidding though, but it's good that it's gotten better at debugging. The console sometimes will say, you're each stack failed. And not give a lot of traps back. But something like that, I mean, go and double check the flavor IDs. Who's getting an error like that's vague? So you basically kill the stack. I guess I don't need to be yelling this. I think the stack is back. If you got an error on the Sousa flavor, delete it and then launch it again. Delete your stack that you've created and then launch it again. How's everybody doing? So if you're getting that error about the Sousa flavor, delete your stack and start it up again, okay? Cause I just fixed it. Try the Sousa flavor. I'm getting the top of the hour and who's got their heat stack launched? Who hasn't working? Raise the hands. You got one here? Maybe? Okay. Okay. And everything's, when you click on it, is everything green? Does it look like that? Okay. Mine's still creating. At this point we're hitting the disks on this lap stack. Pretty darn hard after we've started deleting. After we deleted our stacks, it's actually deleting it over here too. So those partial creations are being deleted. So it's gonna take a little bit of time. Mine's still actually deploying. It takes a few minutes. Yes. Yeah, it's very possible we might be running out of this space too. So if we go over to instances, actually we're gonna go to admin. It can show you kind of a global view. We've got WordPress from tenant number 24. It's spawning. We've got tenant one, tenant two, tenant 11. Yeah, we've got some of you guys running. Some of them are. Yes. You won't be able to get to that floating IP on this particular network you're connected to though. Not the public IP address, no. We don't have that routed through our stuff here. Not this one, no. Now we don't have that routed out. Yeah, where's that one at? Tenant two, you're launching with an M1 medium, a 40 gigabyte disk. Okay. There's part of our problem on some of our load on our systems here. This is not an ideal production environment. You don't deploy a lap stack. But I hope you learned from this on how to deploy a heat stack, okay? It's a good exercise. I hope you learned from it. Jason Grimm's got a couple of things he wanted to talk about. So Jason, you want to jump into that right now. What I'm hoping is you can take that template back to your labs and you can play around with it some more and see if you can add some more things to that heat template. Maybe change it a little bit and deploy a different kind of database or something, possibly. Well, I would say I'm only trying to find manually, so I'm going to try to just trace it. That's pretty simple. Well, since I created that one manually, I'll be through it, so I don't know if it's going to work. What am I seeing? Oh, wait. No, there was a screen in all of these. Oh, you're right. Oh, never mind. So I did the debug all along. Well, you see what I'm seeing, there's somebody starting to do the debug. Okay. So while we're waiting for the video to switch out, we only have 15 minutes left and I'm going to go through a couple of things that you can also look at, but kind of while we're waiting, are there any questions? And if there are, okay, go ahead and go to the mic, if you would, because they're doing a recording. What's the best way to debug some of these failures that we're seeing? What do you look at other than the fact that it says to create fail? Very good question and very acute observation that the debugging leaves some to be desired in Horizon. So at the CLI and the API level, you get a much richer return on the errors. So the first suggestion is to get into a level of comfort where you can start doing more of the CLI. So Horizon is the probably smallest and most fledgling and most underserved project in the OpenStack ecosystem. So everything, all the functionality comes out at the API level and you have 100% functionality and when they go GA and bless a version becomes trunk, it's certified for like a better term. API works 100%, CLI you're gonna get about 80%, Horizon's going to lag behind at about 60% functionality. So it's just a, if it was a product that was being sold, it would be a de-emphasized feature, right? Because most of the power and most of the use case and most of the scale and all of that stuff is being done at the API and CLI level. So it's not a great answer, but we're on a six month release cycle. So, and people are, I get that question every time I talk to someone about EED, so we'll get more mature, but I would encourage you to move to the CLI or the API. Absolutely, yeah. So again, back to, you can take this log and you can take any logging aggregation, any log search, any logs consolidation, any of that stuff. So I mean, Splunk and everything else is gonna work, it's this log, it all works. If it works on Linux, it works on OpenStack. So there's a common directory structure that those logs are in under var and you can just scrape those. So the question was, is there a common debugging app that's recommended for OpenStack? That's hard to say. So one of the blessings and one of the curses with OpenStack is that it is open and you can do anything you want with it. I go, I meet with customers every day who have very similar business models. It could be from one university to the other, one media company to the next, and they use OpenStack in vastly different ways and they manage it and operate it in vastly different ways. So one of the things I was looking at, I had a monitoring talk and what I found was early on a frustration ad was why isn't it more operationalized? You've got this stuff in there to do it. Why aren't you giving me more logging? Why aren't you giving me more richer interfaces and more alerting and things like that? So they didn't bake that in by design. They are maniacally kind of focused on infrastructure as a service and the core services because they don't want to reinvent or re-bundle or recreate a tool set. They don't want to rewrite Nagios or put that into the product when the Nagios started being around since 99 and it works on Linux. So there's an assumption that shops that OpenStack is deployed in already have a monitoring tool set and already have a logging tool set and already have a management model. And so OpenStack intentionally does not reinvent that. So the upside of that, it's very fast. There's not a lot of bloat. The downside is you've got to take your tool set and integrate it. Yes, I'll show you where mine are posted and these guys I'm sure will do the same. So this was two talks. This was the hands-on 101 workshop and the second talk was kind of an advanced topics piece. And so what you guys did by hand was difficult for your first time. But I encourage you to stick with it because once you have a repository templates and you get a little bit used to it, it is one ASCII text file and we deployed one environment here. In production we deploy very complex environments with load balancers and L3 routing and many tiers, networks auto-created and things like that. And developers now instead of saying, give me a VM, they got a little bit of the drug. Now they can have like a VM in two minutes that's all managed. Now they want a whole environment. Give me two web servers, two app servers, two database servers and give it to me in six minutes instead of two minutes. But you speed that up for them and if operations can streamline to that level that's what it's there for. So give me a second for my Windows VM on my Mac to come up actually. Okay, we got like 12 minutes. Let's see, do anything, did it clear up there? Got it, all right, out. So I'm clearly a Mac noob, no? I think it's mirrored, hold on a second. There we go, I know it's like a game, hold on a second. No, just stay there please. Okay, yeah, I'm going to mirror the displays apparently. There we go. I thought I had a mirror in the most arrangement. Mirror displays, here we go. Hey, so there it is, all right. There we go, you guys get to read on my email. Okay, so a little bit of a different tack and I'm just going to go through a couple of things here. So there's Dev, who's messed around with DevStack? Okay, all right, good. So DevStack for those of you guys don't know, it is what essentially I would, I could probably stand up here with confidence and say 100% of people developing against OpenStack are probably using DevStack. It's a single get call to a repo and a single command to give you an OpenStack environment running on bare metal and all in one OpenStack environment, obviously not for production, but you can do functional testing and write all your code. All the Rackspace developers who write code for the public cloud, it has to pass the DevStack muster before it can go on and be considered for any Rackspace adoption, so we run it. So I'm going to give you the link and these are posted, but taking DevStack and for this advanced tutorial, telling it to give me Solometer and load balusters and service and L3 and some of these advanced things that I needed to do this was a little bit of a trick to get that going, so I'm not going to go through line by line, but at the end, stack.sh, there's one shell script and six minutes later, you've got a fully functioning environment, there's a, you don't have to give it a local.conf file, an answer file or a net file, but if you want to do some of the, if you don't want to take just the defaults, then you do have to put some of the stuff in, so. What you guys didn't do today was go to the command line to do some of these commands by hand. What you'll find when you do that is, you're going to have to export the variables that tell your session at the CLI and similarly, you do the same with JSON to say this is my tenant name and this is my authorization URL. It's just basically sending those variables so that when you execute a command like NovaList or Keystone tenant create or something like that, it knows to where to log in and look that stuff up, so. Excuse me. I thought it was interesting to look at how the environments were created that I built, so I took two servers, one on the East Coast and one on the West Coast, with like 90 gigs of RAM and a 300 gig SSD and what I was going to do in this exercise was each table was a team and it was going to be kind of like a hackathon, bake off competition, right, and I had some scenarios for you guys to go through, but each table was a city on the East Coast or the West Coast and what might be interesting, so with one, and this is bash, it's not heat, so this is the stepchild or this was before the section is of heat, but you can take a bash script and I created 20 instances and I set all my quotas and I actually created users for the, if I could log in and get all that stuff, so it's maybe 12 lines and I created my 20 tenants, created the quotas for all those tenants and also created the local user accounts as well. So, I mean, we're out of time on the exercise, but it's kind of too bad because you could have been a heat initiate or a heat Padawan or a heat master and you'd get 50 points, but there are 200 points or you could like make something up, right? What was, you know, earlier back here, you'll see, I do a git, so line six, there's probably 100 heat templates out there, right? I mean, if you guys went around the industry, you know the power of open source. I mean, there is a selfish and non-selfish reason, like if I put my template out there and someone uses it, debugs it, makes it better, like I have a good reason to want to share that, so just like the people who developed heat, you know, why not throw the heat templates out there? So you pretty much find something that's close to what you need to do. The manual, like learning curve, that's as bad as it gets and it gets, you know, it gets better. After that, you build some, a template library and you get more creative with it and going down the road, so probably over time. We've got five minutes. How about, is there any more Q and A? Right, so that's a good question. He's talking about inserting the IDs as the template is being created. It's like, well, correct me if I'm wrong, you're talking about if the template needs a network, creates the network and then grabs the UID from that network, so it's like the third time about that question. Yes, it's, is the short answer? Yes, it's absolutely possible. It is a bit of a chicken and egg thing and you do have to work around it, but it is a very popular use case that we do. So I've got, I'll have these posted and I think they're, I'll leave the last site up with my site that has the templates on there.