 All right, good afternoon, everybody, and thanks for joining this session. I'm going to spend about 25 minutes just doing a really quick overview of two of the most common ways that people interact with OpenStack Clouds. The first is using the OpenStack Horizon client, which I have the login page for up right here. And then the second is the OpenStack command line client based off of Python. So just before we get started, I want to get a quick sense of since this is kind of a 101 and beginners talk like, how many people here, how many people here, is this your first summit or are you new to OpenStack? So that's perfect, that's exactly what I kind of wanted to see. If you are interested in following along and trying this out at home later on, also to start off with, I have a project up on GitHub called Getting Started with OpenStack. This is actually something that Dan Ray does from Red Hat put together. And I've maintained it, and this is the most recent version. If you're running Vagrant on your laptop, you can download this, you can spin up a server, and you can start trying out OpenStack on your own. Okay, so let's get started. So this is the horizon dashboard. After when you come across an OpenStack instance, whether it's something that you've installed, or it's one that your company has installed, or you're accessing as a public cloud, you're gonna be presented with a login. Today we're going to be using a login that we're using administrator credentials. It's like you wouldn't have administrator credentials if you're accessing a public cloud, but a lot of the concepts are still the same. So we're gonna start off by giving a username and a password, which I conveniently saved in my password manager. And if you're logged in as an administrator, it'll drop you into the projects page. But if you log in as a user, it's gonna drop you into an overview page. And the classic view of OpenStack is it's gonna provide you with compute, networking, and storage. In the overview, you're gonna get a sense of what your quotas are like. And so whenever you log into a system, you're gonna be given some limits on how many servers you can spin up, how many volumes you can create, how many floating IPs you can use. So you can see here that we really aren't using any of the resources. This is actually just kind of a stock OpenStack installation. It comes right out of the box, looking like this. You can tab through. We have the compute tab, which gave us an overview of the system. We can see instances, don't have any instances created. We can check the status of our volumes. We do have something here. We actually have an image that's ready to boot. And oftentimes in OpenStack Cloud, you can also upload your own images. So let's start off by doing that. This is gonna be one of the first things we wanna do is if we don't have an image that we wanna boot, we're gonna upload one. So, it's just a matter of saying you wanna create an image. You don't wanna give it a name. In this case, we're gonna be uploading a CentOS image. It's gonna be CentOS 7, Cloud. I've already downloaded it to my hard drive, but you can sometimes also load these up from the internet, depending upon the configuration of your Cloud. So we select a file. We go to our downloads. Choose our image there, CentOS 7. It's going to be in a QCOW2 format. There's no kernel, there's no RAM disk. We're gonna make it publicly available, and we'll leave it unprotected. And so publicly available means that it's visible to not just you, but all of the other tenants in the system. Protected means that it can be, if you protect it, it means it can't be deleted, it can't be changed. So we're gonna go right there, we're gonna create the image. It's being uploaded through the horizon dashboard. And once this is completed, takes a little bit of time to process. Come on, this is all a live demo on the system on my laptop. So I'm walking on the high wire here. You can choose other options too, like a minimum disk, a minimum RAM disk size, a bunch of things to help with your image. So I'm actually, in the interest of time, I'm gonna cancel this out, since we already have an image up and running. It's probably just kind of processing in the background. Actually, let's do this instead. Let's leave that open, and we'll open a new tab with that right there. Yeah, so it's not quite available yet. But let's move on and let's talk about how we boot this image, right? So we have a machine image that is uploaded, it's ready to go. And so we can start off by launching it. So when we hit the launch tab, again, the nice thing about Horizon is that kind of, you don't necessarily need to know a ton of information about how OpenStack works or how to do things up. We have these nice wizards here, and they just kind of step you through the process of what you need to do to accomplish the different tasks that you wanna accomplish inside of OpenStack. So in this case, we're gonna call the instance name OpenStack Boston. You're presented with an availability zone, and so larger OpenStack installations will oftentimes have different availability zones that you can choose from that have different properties, like say, bare metal availability zone or virtualization availability zone. In our little instance, we only have one. You can actually bring up multiple instances if you want. We're choosing to boot from an image. We're gonna create a volume and attach that to that. And so generally when you boot an image in OpenStack, all of the storage associated with that is what we call ephemeral. Any storage that's attached to that virtual machine as it's brought up will disappear when you take that machine down. But by creating a volume, we're creating storage that is external to that virtual machine and will be attached to it. And you're able to store more permanent data inside of that. And so this is a case where we wanna create an attach a volume to it. We're gonna give it a volume size of one gigabyte. We're using the name, we're using this, the seros image. There are different flavors that we can choose from. So in this case, we're gonna choose M1 Tiny. You know, this specifies just how many resources are available. There's gonna be 512 megabytes of RAM, a gigabyte of total disk. You know, this is an addition to the volume that we're attaching. This is the ephemeral disk and one virtual CPU. We also need to access our cloud somehow, so we're gonna attach it to a private network. And then on this private network, we will later attach a public floating IP address to it. Then you can kind of scan through, you can. Now for logging in, this is a common question that you often have. You're booting a machine, how do you actually log into that? Within OpenStack Clouds, the common way that that happens is the compute nodes will run something called cloud init. And cloud init will go out and gather information from a service that's running inside of your cloud, including injection of any credentials you want that you need to log into the machine. And so in this case, we'll actually create a key pair so that we can log into the account. So we'll call it the Boston key. We'll create the key pair and we'll see that that's downloaded to our system. And it's gonna automatically be injected into the system. A few other things you can add, a customization script, server groups you want it to be a part of, and even have metadata available. So once we've gone through all that, we select launch instance. And if we go to our instances tab, we'll see that our instance is in the build process. So we've done two things so far. We're creating a virtual machine, attaching storage to it, attach it to a network. So we've already touched the three major components of an OpenStack installation. Compute, networking, and storage. Whoops, and it looks like the instance wasn't created. This is what happens when you do a live demo. So let's try that again. We'll launch it. This time we won't attach the storage because I think that's where it failed. Attach it to the private network, make sure that we use our Boston key. We'll launch this instance again. Both of them are there now. And you can see that it's being attached to an IP address on there. And in the meantime, while this is booting up, let's associate a floating IP to it. So actually, let me explain how the floating IP works there. If we go into the network tab, we're gonna see a network topology here. These networks were pre-created. We have a public network on the left. This is where we're accessing our system from the public internet, that the public to my laptop. There's a router connected to that, which then connects to a private network. And you can see on that private network is this instance that we just started up. If we view the instance details on this tab, you can see there's a log that is running. There is also a console that should be running. Unfortunately, my machine did not come up in a good state. So what I may do is, status is an error, and I don't know why. Yep, that's exactly what it is. Yeah, we will delete both of these instances. Thank you. Yeah, all right, both of those are deleted. We're gonna try this one more time, boot from an image. We will not create a new volume, make it M1 tiny, attach our private network, make sure our key pair is being injected, and select zero, so we'll launch the instance. Okay, so not to worry, I had a backup. Luckily, we also have lots of amazing public clouds. I know that my Vex host instance is going to be running, so let's log into the Vex host and let's see, here's the sign in for here. That's the sign up, okay, here we go. It's gonna be a little bit different, but this is a public cloud provider. The dashboard is going to look a little bit different, but a lot of things are the same. So let's do the same thing. This time it'll work. Choosing a source, we're gonna choose our seros image. We're gonna give it, it's time of V1 standard. Every cloud has its own thing. We're gonna attach it to a network. We're gonna use my Vex host key pair. And we're gonna launch the instance. So we see that it's spawning, is it going to work this time? Right, and there we go, success. See, I should have gone public cloud in the first place. And one of the nice things about this is you get all of this information about the instance there, including a lot of times the open stack dashboards give you consoles that you can log in directly to. But let's take a look at this instance here. And we'll see that the console is being brought up. And success we can log in, right? We can also, there are public IP addresses associated with this, including some IPv6 addresses. And we can SSH into those also. And didn't like my unprotected key file. And I'm logged in, right, just like that. Okay, so that was just a really kind of basic overview of how the horizon dashboard works and there are so many other things that you can kind of take a look at into there. But while having the web interface is really nice to kind of like get an understanding of the things that you can do inside of open stack. And what resources are there? Kind of the real power comes is when you start controlling it programmatically and automating that control. And so now we're gonna move on to the open stack client. And we're gonna kind of talk a little bit about how to use the open stack client to accomplish the same things. So I have a couple of windows open here, right? So the first thing that you'll usually see inside of one of these, to get started with using the open stack client, is you have to supply the credentials for it somehow. If you remember before, we went to a website, we logged in using our username and password, and we were granted access through the client. So you need those same things to be able to log into your cloud. In this instance, I have an open RC file that kind of has all this basic information. We have a username, a password, which is, this is not the password that I used to log in. An authentication URL, and so this is where I'm actually connecting to the services and where all of my requests are going to be made to. As well as a project name, a domain name, and an identity version that we want to use. Typically, when you log into Horizon, you're actually given the option to download this RC file. And so this isn't something that you have to build on your own. This is something that Horizon will actually give to you. It's one of the features of Horizon. And we can see that in right here. If you go up to that panel up there, you can download the open RC file from there. So we source that file into our environment. And then we use the OpenStack command. Now there are a number of different ways that you can install the OpenStack command. Your package manager will typically have it if you have OpenStack installed. You can also use PIP to install it. You can also use PIP install Python OpenStack Client. But if we just type the command OpenStack, we're going to be, if we just type the command OpenStack, we're going to be dropping to an environment. Which is kind of nice, all of your credentials are going to be there. You can issue commands directly against it. You can type help. It's going to give you a list of all sorts of things that you can do. And the way the OpenStack Client works is, it tries to have a very consistent way that you interact with it. It's almost always going to be subject verb. And so, for example, if we want to manage servers, you would type OpenStack server something. So let's try it, let's try it here, right? So we say OpenStack server list, right? And what we get there is, this is my local cloud. You can see that there is one server in an error state. But because OpenStack Clouds are interoperable with one another, if I actually am in another, I can be in another environment and I can change my credentials. And so, this is an environment where I recently sourced my Vex host. So this is my Vex host openRC file that once again I downloaded. And I can do OpenStack server list. And we're going to see that there is another server there. The command line can sometimes be a little bit opaque though, but don't fear, there's lots of information there to help you figure out how the commands work. So if we do OpenStack server, if you just type OpenStack server, we forgot the verb. It's going to give us a list of all of the verbs that we can perform against servers. And so let's go to server create. How do we do that? You can type OpenStack server create. You just type it with no options right there. It's actually going to give you a little bit of help. So it's going to tell you the things that are absolutely required. So let's create a new server. We need some information to do that though. We need a flavor. And we need a flavor, a network, and a image. So we guess OpenStack image list. It's going to give us a whole list of images for us to choose from. OpenStack flavor list. It's going to give us an entire list of flavors to choose from. And now an OpenStack network list is going to give us networks to choose from. And then we can launch our instance. So OpenStack server create. We needed the flavor. So minus, minus flavor. We go back up to our list. We choose our V1 standard. You can choose the ID or the name. We choose our image. We're going to give it seros. We're going to give it a net. We're going to attach it to a network. Connect that there. And we're going to give it a name. Yep. What did I miss there? Net ID is equal to right. This has to be equal there. And it's going to reach out and it's going to start. Cannot find resource seros. So it probably wanted seros one. Yep, thank you. And I've already exceeded my cores. V1 standard 64. You're right, I chose a really, I chose a really big one. See, and that's nice too because it gives you some helpful error messages. Thanks to everyone for, right. And it returns that it's going over to its build state. And then if we do an open stack image list, oops, open stack server list. It'll give us the status of all the current images. And I think that that is the end of this quick demo. Thanks for everyone for bearing with me, especially the demo crashes. And if you have any more questions, please feel free to ask.