﻿WEBVTT

00:00:00.001 --> 00:00:08.120
You've probably heard of infrastructure-as-a-service cloud providers such as Amazon AWS and, to a lesser degree, Microsoft's Azure cloud platform.

00:00:08.120 --> 00:00:10.260
But have you heard of OpenStack?

00:00:10.260 --> 00:00:19.920
It's an incredibly powerful infrastructure-as-a-service platform where you can buy it as a service or install it in your own data center to build your own private cloud.

00:00:19.920 --> 00:00:21.920
Yeah, private clouds. That's a thing.

00:00:21.920 --> 00:00:29.280
Flavio Percoco, who works at Red Hat and spends his days writing Python code for OpenStack, is here to tell us all about it.

00:00:29.700 --> 00:00:34.840
This is Talk Python2Me, episode number 33, recorded October 16th, 2015.

00:00:59.400 --> 00:01:06.160
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.

00:01:06.160 --> 00:01:10.300
This is your host, Michael Kennedy. Follow me on Twitter where I'm @mkennedy.

00:01:10.300 --> 00:01:16.760
Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via at Talk Python.

00:01:17.360 --> 00:01:24.580
Let me introduce Flavio. Flavio Percoco is a software engineer at Red Hat, where he spends his days working on OpenStack.

00:01:24.580 --> 00:01:32.120
In his spare time, he speaks at conferences, contributes to Rust, plays with MongoDB, smokes his coffee, and drinks his pipe.

00:01:32.120 --> 00:01:34.520
Flavio, welcome to the show.

00:01:34.520 --> 00:01:37.460
Thank you, Michael. Thanks for having me here. It's really exciting.

00:01:37.800 --> 00:01:44.500
Yeah, it's really exciting, and it's great to catch up with you. It's been a few years since we've met up at the last MongoDB Master Summit in New York City, right?

00:01:44.500 --> 00:01:48.900
Yeah, it is. I think it's exactly like two years from there, yeah.

00:01:48.900 --> 00:01:50.120
Yeah, almost. Cool.

00:01:50.680 --> 00:01:54.360
So we're not going to talk about MongoDB today, even though it is excellent.

00:01:54.360 --> 00:02:00.740
We're going to talk about OpenStack and your work at Red Hat and cloud computing and all that kind of stuff, right?

00:02:00.740 --> 00:02:05.260
Yeah. I'm really excited about sharing more stuff about OpenStack.

00:02:05.260 --> 00:02:09.840
I spend most of my time there, honestly, so I have a lot to say.

00:02:09.840 --> 00:02:11.180
Yeah, that's excellent.

00:02:11.180 --> 00:02:17.060
So before we get into what OpenStack is and all the details, what's your story? How did you get into programming?

00:02:17.060 --> 00:02:22.260
I guess my story about how I got into programming is not like...

00:02:22.260 --> 00:02:26.480
I guess there are many people like me out there, but it's not like most of the cases where you just like...

00:02:26.480 --> 00:02:28.700
You were born knowing that you wanted to be a programmer.

00:02:28.700 --> 00:02:33.100
In my case, I actually didn't know what I wanted to do until very late.

00:02:33.100 --> 00:02:36.900
And I started digging into different areas.

00:02:36.900 --> 00:02:43.360
I went to study medicine, and then I went to be a psychologist, and then I wanted to learn foreign languages.

00:02:43.980 --> 00:02:46.520
And at some point I said, like, let me...

00:02:46.520 --> 00:02:50.180
Like, I saw this lump course that I...

00:02:50.180 --> 00:02:53.740
Somewhere, and it's like, okay, like doing webpages.

00:02:53.740 --> 00:02:54.720
It sounds cool.

00:02:54.720 --> 00:02:57.240
And I just gave it a try.

00:02:57.240 --> 00:03:00.760
And I just fell in love with it and started doing more.

00:03:00.760 --> 00:03:03.680
And I guess that's how I actually started.

00:03:04.120 --> 00:03:08.260
I tried to go to college, and it just didn't work for me, actually.

00:03:08.260 --> 00:03:10.620
And I just like...

00:03:10.620 --> 00:03:16.360
I dropped out of college at some point, and actually it was very early in my career, in my studies there.

00:03:16.360 --> 00:03:19.100
And I just went straight to working.

00:03:19.100 --> 00:03:23.560
And I already knew how to program, and I had done a couple of courses anyway.

00:03:23.960 --> 00:03:28.440
And I got into my first job and started improving and learning a lot from open source.

00:03:28.440 --> 00:03:35.660
And so I guess, like, it would be fair to say that, like, my background in programming is actually just open source.

00:03:35.660 --> 00:03:40.240
I started learning from other projects and sharing everything I did.

00:03:40.240 --> 00:03:44.180
I joined IRC channels and spent a lot of time there and learned from others.

00:03:44.660 --> 00:03:46.600
Many good people out there.

00:03:46.600 --> 00:03:52.580
And I guess I just made my way through it and got where I'm at today.

00:03:52.580 --> 00:03:54.240
Yeah, that's excellent.

00:03:54.240 --> 00:03:59.120
And, you know, I had a similar path in that I sort of became an accidental programmer.

00:03:59.120 --> 00:04:03.080
I just learned programming because I was trying to do something else, and I needed to know it.

00:04:03.080 --> 00:04:04.860
And I realized, wait, this is way better.

00:04:04.860 --> 00:04:07.420
So, yeah, there's a lot of us out there like that.

00:04:07.420 --> 00:04:12.080
Yeah, I feel really lucky to have just sort of stumbled into such a cool area.

00:04:12.080 --> 00:04:14.400
Yeah, same here.

00:04:14.400 --> 00:04:15.960
Yeah, so that's how you got into programming.

00:04:15.960 --> 00:04:16.720
How did you get into Python?

00:04:16.720 --> 00:04:25.220
Well, like I said, like, my first approach to programming was that LAMP course I did a long time ago.

00:04:25.220 --> 00:04:28.260
So that obviously means that I learned PHP there.

00:04:28.260 --> 00:04:32.680
And from PHP, I just decided that I wanted to create my own web browser.

00:04:32.680 --> 00:04:37.540
So I started learning C# for some reason because I didn't know enough back then.

00:04:37.540 --> 00:04:40.160
And I just, like, started playing with it, and I had all the plugins and stuff.

00:04:40.160 --> 00:04:43.700
And then I realized that that wasn't actually a very good idea.

00:04:44.140 --> 00:04:46.920
And I found Python through a friend of mine.

00:04:46.920 --> 00:04:49.120
And he just started explaining it to me.

00:04:49.120 --> 00:04:52.100
And I also attended, like, a small, like, Python 101.

00:04:52.100 --> 00:04:56.200
And I just, like, took off from there.

00:04:56.200 --> 00:04:59.380
And my first job was actually on Python.

00:04:59.380 --> 00:05:06.640
And it allowed me to learn way more about it and, you know, like, improve my skills.

00:05:06.640 --> 00:05:09.080
And I just kept doing Python ever since then.

00:05:09.640 --> 00:05:10.680
Yeah, that's excellent.

00:05:10.680 --> 00:05:15.920
And today you get paid to write open source code with Python, right?

00:05:15.920 --> 00:05:16.820
Yeah.

00:05:16.820 --> 00:05:17.460
That's awesome.

00:05:17.460 --> 00:05:18.160
So what do you do?

00:05:18.160 --> 00:05:20.680
I get paid to write open source code.

00:05:21.520 --> 00:05:23.060
And it's, like, 100 upstream.

00:05:23.060 --> 00:05:30.660
So I'm even happier because I'm just, I feel like I'm giving back to all those guys that, at some point, they gave me a lot.

00:05:30.660 --> 00:05:31.940
And they allowed me to learn.

00:05:31.940 --> 00:05:40.100
And so I like, like, one of the things I love is not just the technology I'm working on, but the fact that I know that it will be used by some other people to learn how to program.

00:05:40.180 --> 00:05:45.500
And I'm also part of all the, like, you know, like, mentoring other people.

00:05:45.500 --> 00:05:47.860
And there are several programs in OpenStack to do that.

00:05:47.860 --> 00:05:50.660
And I'm always, like, trying to participate there.

00:05:50.660 --> 00:05:54.340
So that's part of, like, what excites me the most about my current job, actually.

00:05:54.340 --> 00:05:55.040
Yeah, that's great.

00:05:55.040 --> 00:05:56.200
And you work at Red Hat, right?

00:05:56.200 --> 00:05:57.800
I work at Red Hat.

00:05:57.800 --> 00:06:00.460
I'm a software engineer there.

00:06:00.720 --> 00:06:07.500
And, like I said, I work 100% upstream on OpenStack, mostly oriented on storage projects.

00:06:07.500 --> 00:06:09.480
Like, OpenStack has many pieces.

00:06:09.480 --> 00:06:11.040
Like, it's huge right now.

00:06:11.040 --> 00:06:16.400
There's something like 375 GitHub repositories or something like this, right?

00:06:16.400 --> 00:06:17.940
Yeah, it is insane.

00:06:17.940 --> 00:06:21.820
Like, many of those are services.

00:06:21.820 --> 00:06:26.300
Tons of them, like, probably most of them are, like, libraries.

00:06:26.300 --> 00:06:31.160
And then we have a lot of projects that we use for CI that we have written ourselves.

00:06:31.160 --> 00:06:39.720
And there are many other projects that started off as part of OpenStack, but they just, like, improved and became, like, standalone services.

00:06:39.720 --> 00:06:41.380
And some others that just died.

00:06:41.380 --> 00:06:46.920
And we just kept the code there, obviously, because it's OpenStack, and why would you ever delete COVID?

00:06:46.920 --> 00:06:50.240
Let's start with what is OpenStack.

00:06:50.240 --> 00:06:54.100
And I just should tell everybody, like, I really don't know a whole lot about OpenStack.

00:06:54.100 --> 00:06:58.780
I've looked at it a little bit, but I'm basically new to it as well.

00:06:58.780 --> 00:07:00.380
So tell me, what is OpenStack?

00:07:00.380 --> 00:07:03.080
I'm going to tell you how OpenStack started.

00:07:03.080 --> 00:07:05.440
It started as an infrastructure as a service provider.

00:07:05.440 --> 00:07:13.160
And it just focused a lot on making sure that you could use all the hardware you have to provide cloud services.

00:07:13.160 --> 00:07:19.120
So it would use all your compute servers and power, sorry.

00:07:19.120 --> 00:07:22.980
All your compute power, and it will just allow you to use it as a service.

00:07:22.980 --> 00:07:27.080
And it will do the same for your networking routers and everything you have there.

00:07:27.080 --> 00:07:34.200
And it will create, like, private networks for you, clouding IP addresses and everything that you would need to have a cloud.

00:07:34.680 --> 00:07:37.120
And it will do the same with the storage and everything.

00:07:37.120 --> 00:07:39.820
But it was very focused on infrastructure as a service.

00:07:39.820 --> 00:07:48.340
So infrastructure as a service is basically using all your, like, metal to provide, like, a cloud service.

00:07:48.340 --> 00:07:54.180
You would just reuse all that and make sure that you can run several services and virtual machines and everything in there.

00:07:54.580 --> 00:08:01.880
If I had, like, Python web app I wanted to host, just, like, a simple blog or something, I probably wouldn't go to OpenStack.

00:08:01.880 --> 00:08:10.200
But if I wanted to create a better data center or my hosting company or something like this, then I would look to use OpenStack to make that happen.

00:08:10.200 --> 00:08:10.820
Is that accurate?

00:08:10.820 --> 00:08:11.980
Right.

00:08:11.980 --> 00:08:13.380
That's quite accurate.

00:08:13.380 --> 00:08:16.460
But there's, and that's how it started, actually.

00:08:16.460 --> 00:08:17.720
But there's more to it now.

00:08:17.720 --> 00:08:24.280
And it's the fact that at some point, the community realized that there was more to OpenStack than just infrastructure.

00:08:24.280 --> 00:08:36.460
And it just, I like to say, it just outgrow itself to the point that it just became a cloud provider, like, entire cloud provider, instead of just focusing on infrastructure.

00:08:36.460 --> 00:08:41.900
And you now have a whole lot of other services that are required to actually maintain a cloud.

00:08:41.900 --> 00:08:50.380
And this is something that I believe the community learned from its own experience while working on OpenStack.

00:08:50.380 --> 00:08:53.100
And it's the fact that to run a cloud, you need more than just infrastructure.

00:08:53.100 --> 00:09:06.220
If you want to be a good cloud provider or you want to have a cloud that you can manage easily without suffering a lot on maintenance and controlling it and ops and everything, you need more than that.

00:09:06.220 --> 00:09:07.100
You need, like, DNS.

00:09:07.100 --> 00:09:09.820
You need to make your networking easy to use.

00:09:09.820 --> 00:09:11.540
You probably need a database as a service.

00:09:11.540 --> 00:09:21.480
You need to make your own database if you have a big, like, you know, developer's team and you want those steps to be able to create databases easily without, like, spending much time maintaining those.

00:09:21.480 --> 00:09:24.700
But there's, like, you can use that in production as well.

00:09:24.700 --> 00:09:27.260
So there are many other services that are not necessarily infrastructure.

00:09:27.260 --> 00:09:30.280
Like, you even have, like, web search as a service.

00:09:30.280 --> 00:09:35.340
So you can store all your files and things into your cloud.

00:09:35.340 --> 00:09:41.060
So there's a lot into cloud development, into cloud management and cloud services than just infrastructure.

00:09:41.060 --> 00:09:45.520
So that's something, like, the community learned by itself while working on OpenStack.

00:09:45.520 --> 00:09:48.080
And it just became more than infrastructure.

00:09:48.080 --> 00:09:49.520
It's now, like, a cloud provider.

00:09:49.660 --> 00:09:51.620
That's how I like to think about it.

00:09:51.620 --> 00:09:53.080
That's how I like to present OpenStack.

00:09:53.080 --> 00:09:56.280
It is a cloud provider, and it will give you everything you need to run your cloud.

00:09:56.280 --> 00:10:09.960
To me, it feels somewhat on par with something like EC2 and the related services at AWS, much more so than, like, somewhere where you can just go get a virtual machine.

00:10:09.960 --> 00:10:17.420
You know, somewhere like DigitalOcean, where they have great virtual machines, but there's not, like, there's not a lot more than that around to help you, right?

00:10:17.420 --> 00:10:18.080
There's not.

00:10:18.080 --> 00:10:19.300
Exactly.

00:10:19.300 --> 00:10:19.420
Exactly.

00:10:19.420 --> 00:10:20.000
Exactly.

00:10:20.000 --> 00:10:28.900
The virtual private networks and the load balancing and the storage and the persistent disks across machines and all that kind of stuff, right?

00:10:28.900 --> 00:10:30.900
That is correct.

00:10:30.900 --> 00:10:34.720
And I've been giving this talk, like, this year.

00:10:34.720 --> 00:10:37.960
It's called Infrastructure as a Service Beyond Infrastructure.

00:10:38.040 --> 00:10:50.740
Well, like, I kind of, like, talk about what I think your cloud should have in order for it to be considered a cloud, which doesn't mean that companies or services like DigitalOcean are not good.

00:10:51.240 --> 00:10:53.620
But they're, like, they're not exactly clouds.

00:10:53.620 --> 00:10:55.520
They just provide a different kind of service.

00:10:55.520 --> 00:11:00.840
Like, DigitalOcean basically just provides you virtual private services, like servers, sorry.

00:11:00.960 --> 00:11:03.920
So you create your server and you have to manage it yourself.

00:11:03.920 --> 00:11:08.060
You don't have everything that you would need to run a cloud right there, right?

00:11:08.060 --> 00:11:22.740
And if you want to put your application in a cloud, you would just go to either OpenSack or other cloud providers that have all those services that you would need to run your application and don't die while trying to run it.

00:11:23.740 --> 00:11:36.920
Yeah, so I feel like services like DigitalOcean are excellent, but if you build increasingly complex and large-scale systems, you're probably going to, at some point, outgrow them.

00:11:36.920 --> 00:11:42.540
And then you're going to start looking around and say, okay, well, I need more than just a bunch of good VMs.

00:11:42.540 --> 00:11:45.940
I need, you know, all this orchestration and putting it together.

00:11:45.940 --> 00:11:50.720
And a lot of people go to places like EC2 or maybe Azure.

00:11:51.840 --> 00:12:01.100
But OpenStack, is there like an online service I can go pay a monthly fee and get access to the system?

00:12:01.100 --> 00:12:03.180
Or is this something I've got to put on just my data centers?

00:12:03.180 --> 00:12:04.780
Oh, not at all.

00:12:04.780 --> 00:12:08.900
There are many public cloud providers running OpenStack right now.

00:12:08.900 --> 00:12:14.660
A good example, probably one of, well, I'm actually not sure if it is the oldest one.

00:12:14.660 --> 00:12:15.820
It's probably one of the oldest one.

00:12:15.820 --> 00:12:17.400
It is Rackspace itself.

00:12:17.400 --> 00:12:18.920
They run OpenStack.

00:12:18.920 --> 00:12:20.620
There's also HP Cloud.

00:12:20.620 --> 00:12:22.460
There's VEX Host.

00:12:22.460 --> 00:12:23.820
There are tons of them.

00:12:23.820 --> 00:12:27.580
There's Enter Cloud in Italy as well.

00:12:27.580 --> 00:12:32.220
So there are many cloud providers, public cloud providers running OpenStack right now.

00:12:32.220 --> 00:12:33.580
They have different versions.

00:12:33.580 --> 00:12:35.740
They're not all running the latest version.

00:12:36.380 --> 00:12:48.400
When you have to decide whether you want to go to AWS, Azure, or just use OpenStack, you have to ask yourself many questions.

00:12:48.400 --> 00:12:57.260
One of the things that I believe make OpenStack the best solution for you is the fact that OpenStack is interpretable.

00:12:58.700 --> 00:13:14.780
Whatever you write on, whatever your application looks like, if you're running it in an OpenStack cloud and you want to migrate it from this cloud to another cloud and it is still OpenStack, you are guaranteed to be able to do that in a painless way.

00:13:14.900 --> 00:13:18.760
Because different OpenStack versions are interpretable.

00:13:18.760 --> 00:13:19.860
They keep backwards compatibility.

00:13:19.860 --> 00:13:24.960
So you can be sure that whatever works in HP, an HP cloud will also work in Rackspace cloud.

00:13:24.960 --> 00:13:28.780
If you write scripts on top of it and everything.

00:13:29.320 --> 00:13:39.120
Yeah, that's a pretty unique proposition because AWS is entirely proprietary, even though internally it runs a ton of open source stuff.

00:13:39.120 --> 00:13:41.960
It's all behind the scenes, super secret.

00:13:41.960 --> 00:13:46.580
Same thing with Windows Azure and some of the other hosting places, right?

00:13:46.580 --> 00:13:58.820
So the fact that you can take this maybe from a cheap hosting company over to Rackspace and then maybe even later into your own data center, if you really wanted to do that.

00:13:59.040 --> 00:13:59.160
Right.

00:13:59.160 --> 00:13:59.480
Right.

00:13:59.480 --> 00:14:02.540
But that's a possibility that you don't really have to worry about, right?

00:14:02.540 --> 00:14:03.680
Because it's all OpenStack.

00:14:03.680 --> 00:14:05.040
Exactly.

00:14:05.040 --> 00:14:07.780
And you don't just have to...

00:14:07.780 --> 00:14:11.040
It's not just about migrating your application from one cloud to another cloud.

00:14:11.040 --> 00:14:21.860
It also applies to using several clouds at the same time because not all public clouds are supposed to run all the services in order for them to be OpenStack compliant.

00:14:21.860 --> 00:14:27.500
I can decide to have my own public cloud running just Trove, which is database as a service.

00:14:28.080 --> 00:14:31.760
And there are other clouds like HP Cloud that did run all OpenStack, right?

00:14:31.760 --> 00:14:37.640
But as a user, if I want to have my internal cloud...

00:14:37.640 --> 00:14:39.360
So let me give you an example.

00:14:39.360 --> 00:14:41.220
Let me put it in another way.

00:14:41.720 --> 00:14:50.300
I may want to have all my web heads and my compute nodes running in one of the public clouds, like let's say Rackspace, right?

00:14:50.300 --> 00:14:51.060
Or HP Cloud.

00:14:51.060 --> 00:14:52.280
I want to have them there.

00:14:52.280 --> 00:14:54.400
But I want all my data to be in my cloud.

00:14:54.400 --> 00:15:00.660
So I can use my own servers and install my database as a service there or whatever, my own database and have a hybrid cloud.

00:15:01.940 --> 00:15:08.600
So it is not just a matter of deciding whether you want to have, whether you want to use a public cloud or a private cloud.

00:15:08.600 --> 00:15:20.400
But it's the fact that you can also mix them together and you are going to be guaranteed that they will be interpretable and they can all use the same service with the same data and everything.

00:15:20.620 --> 00:15:21.900
Really interesting point.

00:15:21.900 --> 00:15:26.780
I hadn't thought of just taking an individual piece and running that locally.

00:15:26.780 --> 00:15:28.460
But yeah, that makes a lot of sense.

00:15:28.460 --> 00:15:33.860
So cloud computing is, of course, important to Python developers.

00:15:33.860 --> 00:15:42.160
But OpenStack is especially relevant to Python developers because Python is used a little bit inside the development, right?

00:15:42.900 --> 00:15:43.300
Yeah.

00:15:43.300 --> 00:15:53.800
I normally say that OpenStack right now, well, when I joined OpenStack, it's probably not true anymore.

00:15:53.800 --> 00:15:56.940
When I joined OpenStack, it was like 500% Python.

00:15:56.940 --> 00:16:03.040
And there was like this 0.0001% of JavaScript because we have a UI dashboard.

00:16:03.040 --> 00:16:10.840
And I say it's not true anymore because we now also maintain like puppet manifests ourselves.

00:16:11.220 --> 00:16:12.580
And that's not Python, obviously.

00:16:12.580 --> 00:16:15.280
We keep like we maintain Ansible scripts.

00:16:15.280 --> 00:16:27.040
Like there are teams focusing a lot on operations and making OpenStack installable and easy to manage and reduce the maintenance more than from users.

00:16:27.040 --> 00:16:30.220
So it's not just like 500% Python anymore.

00:16:30.220 --> 00:16:38.140
But I can say like all the services right now are written in Python and they are mostly pure Python.

00:16:38.260 --> 00:16:41.020
There are some services doing some experiments with Google as well.

00:16:41.020 --> 00:16:43.760
But most of them are Python, yeah.

00:16:43.760 --> 00:16:47.980
Like the community is definitely 100% Python oriented.

00:16:47.980 --> 00:16:52.820
And there are like obviously other tastes for other programming languages.

00:16:52.820 --> 00:16:54.040
Yeah, of course.

00:16:54.040 --> 00:16:55.600
So that's really excellent.

00:16:55.600 --> 00:16:58.620
And I think that's a great testament to Python itself, right?

00:16:58.620 --> 00:17:03.900
That you can build such an amazing infrastructure as a service system with it, right?

00:17:04.660 --> 00:17:05.600
Yeah, it is.

00:17:05.600 --> 00:17:09.060
And I would say it even goes beyond that.

00:17:09.060 --> 00:17:24.020
It's not just the fact that you can build such a cloud system with Python, but the fact that it has allowed us to make it in an easy enough way and to be more welcoming as a community.

00:17:24.380 --> 00:17:31.760
Like to welcome more people because Python is easier to learn because Python is, it has a big, well, it has a quite big community.

00:17:33.200 --> 00:17:35.860
It is even for beginners.

00:17:35.860 --> 00:17:48.060
Like we have many people like just still in college or right out of college coming to OpenStack saying, okay, like I still don't have a job, but I want to do something interesting.

00:17:48.060 --> 00:17:50.380
And they apply for all these mentorship programs.

00:17:50.380 --> 00:17:53.800
They're like Google, Google Summer of Code or Outreach.

00:17:53.800 --> 00:17:58.920
And they will just learn as they go from OpenStack itself.

00:17:58.920 --> 00:18:14.080
So, and all the CI system and the fact that we can test all the programs, all the services easily and run like the number of jobs, of CI jobs that we run daily is insanely high.

00:18:14.080 --> 00:18:20.180
And I already forgot the exact number, but when I heard it the first time, I was like, that's insane.

00:18:20.180 --> 00:18:28.880
Like you wouldn't be able to do that with other programming languages like that would require you to compile the software before you can actually test it, for instance.

00:18:28.880 --> 00:18:39.360
It's interesting to compare OpenStack against places like AWS, where if you're wondering how some service works, you really could go in there and look.

00:18:39.360 --> 00:18:42.920
And it's out there for everybody to see what's going on, right?

00:18:43.960 --> 00:18:45.020
Yeah, it is.

00:18:45.020 --> 00:18:54.880
And one other thing that I like, and I also hate at the same time about OpenStack is the fact that it is non-opinionated in many different areas.

00:18:54.880 --> 00:18:59.920
And by non-opinionated, I mean that you have, let's talk about Nova, for instance.

00:18:59.920 --> 00:19:04.080
Nova is the compute service, and it's the one that will allow you to create virtual machines, right?

00:19:04.080 --> 00:19:07.100
But there are many hypervisors out there.

00:19:07.100 --> 00:19:11.680
So most of the services, several of the services in OpenStack are just provisioning services.

00:19:11.680 --> 00:19:15.840
They would sit on top of something else, and they would just manage that.

00:19:16.360 --> 00:19:23.720
So the default hypervisor for Nova right now is like LibWare to KVM.

00:19:23.720 --> 00:19:29.700
But you can also have Hyper-V and VMware.

00:19:29.700 --> 00:19:37.360
You can have different hypervisors under the hood, and you would just pick whatever you want when you want to deploy OpenStack.

00:19:39.220 --> 00:19:52.020
And what it gives you is that it gives you the opportunity to pick your own flavor of what the underlying virtualization layer should look like,

00:19:52.020 --> 00:19:54.320
and run whatever you prefer there.

00:19:54.320 --> 00:19:59.600
It is good to some extent because it just gives you all that flexibility.

00:20:00.020 --> 00:20:06.820
And the part that I don't really like a lot is because it just forces you to create more and more abstractions on top of that,

00:20:06.820 --> 00:20:14.760
which I don't think is necessarily bad in many areas, but there are some other areas where being more opinionated would be good.

00:20:15.760 --> 00:20:21.180
And the reason I'm saying this is because I'm pretty sure AWS is just focused on any single hypervisor,

00:20:21.180 --> 00:20:26.920
whereas in OpenStack you can also look at how you can orchestrate not only a cloud service,

00:20:26.920 --> 00:20:32.020
but also a cloud service that can run on top of several different underlying technologies

00:20:32.020 --> 00:20:38.460
that would allow you to just pick your favorite flavor and just run with it.

00:20:38.460 --> 00:20:40.560
Yeah, that's interesting.

00:20:40.560 --> 00:20:43.940
You know, that kind of stuff is good for the flexibility,

00:20:43.940 --> 00:20:48.980
but it also makes it potentially harder for people who are getting started to know what to choose, right?

00:20:48.980 --> 00:20:53.940
Because they've got to make a decision instead of just following some opinionated sort of guidance, right?

00:20:55.080 --> 00:20:55.520
Exactly.

00:20:55.520 --> 00:20:59.460
And you just made a very good point,

00:20:59.460 --> 00:21:04.920
and that's something that we started looking at in the last, I would say, two cycles probably.

00:21:04.920 --> 00:21:12.180
And it's the fact that we wanted to have some kind of like starter kit for people that are coming to OpenStack

00:21:12.180 --> 00:21:16.720
and they say, okay, okay, I've heard OpenStack is cool, so where should I start?

00:21:17.540 --> 00:21:28.000
And this starter kit is like four services running in a very simple and tiny that's lightweight,

00:21:28.000 --> 00:21:28.980
let's say lightweight.

00:21:28.980 --> 00:21:35.900
And so that you can just run those four, you can play with OpenStack a little bit,

00:21:35.900 --> 00:21:41.140
but you're not going to hit a dead end because as soon as you start liking it

00:21:41.140 --> 00:21:46.300
and you want to grow OpenStack and your own development and your own deployment, I'm sorry,

00:21:46.300 --> 00:21:50.700
you can just start from there and just install more services

00:21:50.700 --> 00:21:54.000
or change some configurations parameter and make it just better.

00:21:54.000 --> 00:21:59.940
So that starter kit is really important because it just lets you know where to start from

00:21:59.940 --> 00:22:04.500
and what are the kind of like essential services to actually have a cloud.

00:22:04.500 --> 00:22:06.220
Yeah, that sounds really helpful.

00:22:06.220 --> 00:22:06.820
Excellent.

00:22:06.820 --> 00:22:08.860
I'll link to that in the show notes as well.

00:22:08.860 --> 00:22:09.560
Awesome.

00:22:09.560 --> 00:22:23.160
This episode is brought to you by Hired.

00:22:23.160 --> 00:22:28.160
Hired is a two-sided, curated marketplace that connects the world's knowledge workers

00:22:28.160 --> 00:22:29.620
to the best opportunities.

00:22:29.620 --> 00:22:33.980
Each offer you receive has salary and equity presented right up front

00:22:33.980 --> 00:22:38.800
and you can view the offers to accept or reject them before you even talk to the company.

00:22:39.440 --> 00:22:45.160
Typically, candidates receive five or more offers in just the first week and there are no obligations ever.

00:22:45.160 --> 00:22:47.240
Sounds pretty awesome, doesn't it?

00:22:47.240 --> 00:22:49.300
Well, did I mention there's a signing bonus?

00:22:49.300 --> 00:22:53.400
Everyone who accepts a job from Hired gets a $2,000 signing bonus.

00:22:53.400 --> 00:22:57.720
And as Talk Python listeners, it gets way sweeter.

00:22:57.720 --> 00:23:05.280
Use the link Hired.com slash Talk Python To Me and Hired will double the signing bonus to $4,000.

00:23:06.280 --> 00:23:07.020
Opportunity's knocking.

00:23:07.020 --> 00:23:10.640
Visit Hired.com slash Talk Python To Me and answer the call.

00:23:19.440 --> 00:23:25.140
So, speaking of starter kits and so on, when would it make sense to think,

00:23:25.140 --> 00:23:32.420
okay, it's time for me to stop just running a virtual machine here and there and try to focus on

00:23:32.420 --> 00:23:38.880
maybe bringing OpenStack into my software deployment data center type scenario?

00:23:39.160 --> 00:23:41.100
What kind of apps do I run?

00:23:41.100 --> 00:23:47.020
I guess what sort of experiences you have with people getting started and then growing into this?

00:23:47.020 --> 00:23:52.980
That's actually a very good question because many people think that in order to run OpenStack,

00:23:52.980 --> 00:23:59.620
the requirement for running OpenStack is having a huge public cloud service.

00:24:00.300 --> 00:24:01.780
And that is not true.

00:24:01.780 --> 00:24:07.340
Like, we have people running small deployments of OpenStack.

00:24:07.340 --> 00:24:11.520
I myself run a small deployment of OpenStack in my test environment.

00:24:11.520 --> 00:24:15.820
And that's what I used to create, new virtual machines where I would test OpenStack and everything I'm doing.

00:24:16.400 --> 00:24:23.120
So, and I would say, like, the moment you start needing more than just one virtual machine,

00:24:23.120 --> 00:24:28.980
and that would be a good moment for you to start considering something like OpenStack.

00:24:28.980 --> 00:24:32.520
Or even starting from the moment where you need a virtual machine.

00:24:32.520 --> 00:24:35.840
And the reason I'm saying this is because if you're working on a service,

00:24:35.840 --> 00:24:38.500
you're likely going to scale it at some point.

00:24:38.700 --> 00:24:43.000
It's not going to scale enough within a single virtual machine,

00:24:43.000 --> 00:24:46.980
and you'll need more compute power or storage or network.

00:24:46.980 --> 00:24:48.940
At least for durability, right?

00:24:48.940 --> 00:24:50.120
Exactly.

00:24:50.120 --> 00:24:50.760
Yeah.

00:24:50.760 --> 00:24:51.760
Exactly.

00:24:51.760 --> 00:25:02.260
And so you likely need something that will allow you to add more compute or whatever to your deployment.

00:25:02.260 --> 00:25:08.100
And from that moment, you already need something like OpenStack, like a cloud provider.

00:25:08.100 --> 00:25:14.860
And if you're starting, you definitely don't want to give money to other people.

00:25:14.860 --> 00:25:19.820
But obviously, like OpenStack, it doesn't run on air.

00:25:19.820 --> 00:25:21.280
It obviously needs some compute.

00:25:21.280 --> 00:25:26.240
And it really depends on what your needs are in that case.

00:25:26.240 --> 00:25:30.760
But seriously, when you start needing virtual machines to deploy yourself,

00:25:30.760 --> 00:25:33.820
that's probably a very good moment to start using OpenStack.

00:25:33.820 --> 00:25:38.040
Because it will allow you to do that easily, and it will manage all the virtual machines for you.

00:25:38.040 --> 00:25:41.120
And the fact that you don't have to care about it,

00:25:41.120 --> 00:25:46.500
the fact that you don't have to worry about starting the virtual machine yourself,

00:25:46.500 --> 00:25:48.520
about making sure that it is running there,

00:25:48.520 --> 00:25:52.940
and that your data is in the right volume or whatever,

00:25:52.940 --> 00:25:56.240
and that you're networking, setting up all of your networking, which is very painful.

00:25:57.040 --> 00:26:00.840
All those things that OpenStack makes easier for you,

00:26:00.840 --> 00:26:08.560
they will pay off later by saving you a lot of time on development and maintenance and deployment.

00:26:08.920 --> 00:26:10.600
Yeah, that's good advice.

00:26:10.600 --> 00:26:17.300
And one of the things that OpenStack has that I'm not entirely sure that AWS has,

00:26:17.300 --> 00:26:19.240
I haven't seen it, maybe I'm wrong,

00:26:19.240 --> 00:26:24.240
is like a local dev version of OpenStack.

00:26:24.240 --> 00:26:27.340
So if I'm disconnected from the internet or whatever,

00:26:27.340 --> 00:26:30.240
I just want to build out something, I could actually do that locally, right?

00:26:30.240 --> 00:26:31.420
Yeah.

00:26:31.420 --> 00:26:33.600
Yeah, you can do that locally with OpenStack.

00:26:33.600 --> 00:26:38.840
You can install OpenStack on your own laptop and just have it there running.

00:26:38.840 --> 00:26:45.220
And that's something that's also very helpful in OpenStack,

00:26:45.220 --> 00:26:48.840
like the fact that you can just run it there and start not only playing with it,

00:26:48.840 --> 00:26:55.140
but also using it for your own purposes and make something good out of it.

00:26:55.140 --> 00:26:59.560
That's something you don't get from AWS or any other public cloud

00:26:59.560 --> 00:27:02.140
that are managed by private companies.

00:27:03.020 --> 00:27:07.100
Because, well, okay, obviously they don't want to allow you to access the code

00:27:07.100 --> 00:27:08.280
and install it locally.

00:27:08.280 --> 00:27:10.400
That's their business, I guess.

00:27:10.400 --> 00:27:12.020
Yeah, it is their business.

00:27:12.020 --> 00:27:14.920
But I think that's a really cool advantage

00:27:14.920 --> 00:27:17.560
because I haven't seen anything like this for AWS.

00:27:17.560 --> 00:27:22.740
And you're usually on the internet, but at the same time,

00:27:22.740 --> 00:27:25.940
there's certainly situations where you have spotty connectivity

00:27:25.940 --> 00:27:28.260
and you'd rather be able to just work, right?

00:27:28.360 --> 00:27:30.540
But also you don't necessarily want to pay for that,

00:27:30.540 --> 00:27:33.800
depending on whether the company's paying, you're paying, right?

00:27:33.800 --> 00:27:36.040
That might or might not be a consideration.

00:27:36.040 --> 00:27:38.040
Sure.

00:27:38.040 --> 00:27:39.800
I mean, it's not just about paying.

00:27:39.800 --> 00:27:43.820
Paying is definitely a big point here,

00:27:43.820 --> 00:27:45.380
but it's not just about paying.

00:27:45.380 --> 00:27:48.780
It's also about using your resources wisely,

00:27:48.980 --> 00:27:50.920
and by resources I also mean time.

00:27:50.920 --> 00:27:53.060
Like, you don't need...

00:27:53.060 --> 00:27:56.380
The other thing is that people think that you need a lot of power

00:27:56.380 --> 00:27:57.540
to run up the stack.

00:27:57.540 --> 00:28:00.580
It might have been true in the past,

00:28:00.700 --> 00:28:06.640
but it has come a long way on using less resources

00:28:06.640 --> 00:28:09.520
from your computing nodes

00:28:09.520 --> 00:28:13.880
to the point where you can also just run OpenStack on top of Docker.

00:28:13.880 --> 00:28:19.880
And instead of using a hypervisor,

00:28:19.880 --> 00:28:22.980
you could use just Docker and create Linux containers

00:28:22.980 --> 00:28:25.900
which are cheaper for your laptop.

00:28:25.900 --> 00:28:27.540
Yeah, that's awesome.

00:28:27.540 --> 00:28:29.920
Yeah, I definitely want to come back and talk about Docker.

00:28:30.080 --> 00:28:31.580
But maybe before we do,

00:28:31.580 --> 00:28:35.860
maybe we should talk about the various building blocks of OpenStack

00:28:35.860 --> 00:28:37.860
because if people are kind of new to it,

00:28:37.860 --> 00:28:40.220
they maybe don't know what it offers, what it doesn't.

00:28:40.220 --> 00:28:45.120
If we start from top to bottom from a user perspective,

00:28:45.120 --> 00:28:49.580
I guess the first service that a user would get is Keystone,

00:28:49.580 --> 00:28:51.380
which is the one that provides authentication.

00:28:51.380 --> 00:28:54.740
Whenever you want to log into OpenStack Cloud,

00:28:54.740 --> 00:28:56.360
you're likely going to talk to Keystone

00:28:56.360 --> 00:28:59.500
to get a token or something that will...

00:28:59.500 --> 00:29:01.180
create a session for you

00:29:01.180 --> 00:29:02.500
so that you can talk to other services

00:29:02.500 --> 00:29:04.540
and use that as an authenticated user

00:29:04.540 --> 00:29:07.280
and get your goal and all the information you need from there.

00:29:07.280 --> 00:29:07.780
Sure.

00:29:07.780 --> 00:29:10.000
And you guys have a web front-end,

00:29:10.000 --> 00:29:13.280
like a UI and a command-line interface and an API, right?

00:29:13.280 --> 00:29:15.060
That is correct.

00:29:15.060 --> 00:29:16.240
Okay.

00:29:16.240 --> 00:29:17.020
That is correct.

00:29:17.860 --> 00:29:21.320
I would say we have a UI and an API.

00:29:21.320 --> 00:29:23.660
We have a lot of CLI tools,

00:29:23.660 --> 00:29:29.880
but you could also write your own in your own language if you want, right?

00:29:29.880 --> 00:29:34.400
And the CLI tool is super useful and we all use it

00:29:34.400 --> 00:29:37.860
and we tend to think about it as the reference to access OpenStack,

00:29:38.020 --> 00:29:41.340
but the actual reference is the API that is deployed

00:29:41.340 --> 00:29:45.000
and then that's the way you actually talk to OpenStack.

00:29:45.000 --> 00:29:46.860
And so we have a UI.

00:29:46.860 --> 00:29:49.480
It used to be based in Django

00:29:49.480 --> 00:29:53.120
and now they moved a lot of things to just JavaScript.

00:29:53.120 --> 00:29:56.960
And it allows you to access all the services you have deployed.

00:29:56.960 --> 00:29:58.380
Your OpenStack deployment,

00:29:58.380 --> 00:30:02.100
you don't need to have them all deployed to use the UI.

00:30:02.240 --> 00:30:04.840
You can just deploy the UI service

00:30:04.840 --> 00:30:08.180
and just have a few of the OpenStack services running in the ground

00:30:08.180 --> 00:30:11.780
and it will just show you the tabs, so to speak,

00:30:11.780 --> 00:30:13.920
for those services that you have enabled.

00:30:13.920 --> 00:30:16.820
But even to log in into the UI,

00:30:16.820 --> 00:30:18.140
you need to access Keystone,

00:30:18.140 --> 00:30:19.960
which is the one that provides your authentication.

00:30:19.960 --> 00:30:22.260
So then you have the UI, like I said,

00:30:22.260 --> 00:30:25.720
and then you have a whole bunch of other services

00:30:25.720 --> 00:30:29.940
that will provide that cloud thing for you.

00:30:29.940 --> 00:30:31.420
One of them is Nova.

00:30:32.060 --> 00:30:33.580
Nova is the one that provides,

00:30:33.580 --> 00:30:37.300
that manages all the hypervisors and compute resources for you.

00:30:37.300 --> 00:30:40.660
And then you have Neutron.

00:30:40.660 --> 00:30:44.140
Neutron is the one responsible for doing all the networking.

00:30:44.140 --> 00:30:47.260
It will create networks, routers,

00:30:47.260 --> 00:30:51.380
and it has different support for different network layers.

00:30:51.380 --> 00:30:53.440
I'm honestly not a network expert,

00:30:53.440 --> 00:30:58.100
so right now I'm just saying the things I know there are in Neutron,

00:30:58.560 --> 00:31:02.460
but I probably don't necessarily know what all those things mean.

00:31:02.460 --> 00:31:05.800
And then you also have Cinder,

00:31:05.800 --> 00:31:07.980
which is the one that provides block devices,

00:31:07.980 --> 00:31:11.260
and it takes different storage devices,

00:31:12.300 --> 00:31:14.840
and it allows you to also attach those devices,

00:31:14.840 --> 00:31:17.580
those volumes to the virtual machines you're running,

00:31:17.580 --> 00:31:22.440
so you have all your data persisted in your storage.

00:31:23.880 --> 00:31:24.700
What else?

00:31:24.700 --> 00:31:26.640
You also have Swift,

00:31:26.640 --> 00:31:29.220
which is an object store,

00:31:29.220 --> 00:31:31.620
and it's pretty much like S3,

00:31:31.620 --> 00:31:35.800
in case people are not very familiar with object store.

00:31:35.800 --> 00:31:36.760
It provides,

00:31:36.760 --> 00:31:39.000
it has its own API,

00:31:39.000 --> 00:31:41.020
but it also has support for the S3 API,

00:31:41.200 --> 00:31:42.780
so if you have a service that,

00:31:42.780 --> 00:31:44.720
a script that talks to S3,

00:31:44.720 --> 00:31:46.260
and you want to give Swift a try,

00:31:46.260 --> 00:31:47.500
you can just install Swift,

00:31:47.500 --> 00:31:50.620
install the Swift S3 layer,

00:31:50.620 --> 00:31:52.280
and you can talk to S3,

00:31:52.280 --> 00:31:53.880
even using the Boto library.

00:31:53.880 --> 00:31:54.900
Oh, that's cool.

00:31:54.900 --> 00:31:55.700
That's a nice feature.

00:31:55.700 --> 00:31:57.140
Yeah,

00:31:57.140 --> 00:31:57.640
yeah,

00:31:57.640 --> 00:31:58.000
there is.

00:31:58.000 --> 00:32:00.100
Some of the services have,

00:32:00.100 --> 00:32:01.340
yeah,

00:32:01.340 --> 00:32:02.780
some of the services have that as well,

00:32:02.780 --> 00:32:04.220
but some others have dropped it.

00:32:05.600 --> 00:32:06.280
I also,

00:32:06.280 --> 00:32:08.880
I forgot one of the current services is Glance.

00:32:08.880 --> 00:32:12.100
The fun fact is I'm the technical leader of that project,

00:32:12.100 --> 00:32:13.200
and I just forgot about it.

00:32:13.200 --> 00:32:13.880
So,

00:32:13.880 --> 00:32:18.300
Glance is the service that provides images for your cloud,

00:32:18.300 --> 00:32:23.480
so whenever you want to start a virtual machine,

00:32:23.480 --> 00:32:26.500
you've got to tell Nova what image you want to run,

00:32:26.500 --> 00:32:28.680
and you've got to tell Nova,

00:32:28.680 --> 00:32:28.900
hey,

00:32:28.900 --> 00:32:30.520
I want to run this Fedora image.

00:32:30.520 --> 00:32:32.020
Can you boot it for me?

00:32:32.020 --> 00:32:34.260
And in that moment,

00:32:34.260 --> 00:32:35.380
Nova will talk to Glance,

00:32:35.420 --> 00:32:36.020
and it will say,

00:32:36.020 --> 00:32:36.460
hey, Glance,

00:32:36.460 --> 00:32:37.420
you have this image.

00:32:37.420 --> 00:32:38.500
Like,

00:32:38.500 --> 00:32:40.420
I was asked to boot this image with this ID,

00:32:40.420 --> 00:32:42.860
and then Glance will just provide the image to Nova,

00:32:42.860 --> 00:32:44.860
and Nova will do all the magic.

00:32:44.860 --> 00:32:45.640
So,

00:32:45.640 --> 00:32:47.660
Glance is an image registry.

00:32:47.660 --> 00:32:49.620
You will have all your images there,

00:32:49.620 --> 00:32:52.520
and whenever you create a snapshot from your virtual machine,

00:32:52.520 --> 00:32:55.220
the snapshot will be created in the form of an image,

00:32:55.220 --> 00:32:56.760
and it will be uploaded back to Glance

00:32:56.760 --> 00:33:01.500
so that you can boot it afterwards whenever you need it.

00:33:01.500 --> 00:33:02.460
Nice.

00:33:02.460 --> 00:33:03.620
Can you make images,

00:33:03.620 --> 00:33:03.920
like,

00:33:03.920 --> 00:33:04.980
locally on your machine,

00:33:05.120 --> 00:33:06.920
and then upload them to be booted?

00:33:06.920 --> 00:33:07.360
Absolutely.

00:33:07.360 --> 00:33:07.800
Yes.

00:33:07.800 --> 00:33:08.180
That's cool.

00:33:08.180 --> 00:33:09.800
Yeah,

00:33:09.800 --> 00:33:11.200
and it has support for different,

00:33:11.200 --> 00:33:13.620
for different images formats.

00:33:13.620 --> 00:33:15.860
It is not tied to a single format.

00:33:15.860 --> 00:33:17.260
You can upload raw images,

00:33:17.260 --> 00:33:18.360
cue call images,

00:33:18.360 --> 00:33:19.960
VHDs,

00:33:19.960 --> 00:33:21.740
whatever image format you want to upload there.

00:33:21.740 --> 00:33:24.100
As long as your hypervisor knows how to run those,

00:33:24.100 --> 00:33:25.680
I think you're going to be just fine.

00:33:26.580 --> 00:33:26.840
Yeah,

00:33:26.840 --> 00:33:27.340
very nice.

00:33:27.340 --> 00:33:27.500
So,

00:33:27.500 --> 00:33:31.960
those are all the services involved in sort of running and creating the virtual machines.

00:33:31.960 --> 00:33:32.940
And then you also have,

00:33:32.940 --> 00:33:33.500
like,

00:33:33.500 --> 00:33:34.840
some deployment tools.

00:33:34.840 --> 00:33:42.260
You said there's actually people working just almost dedicated to Ansible and Chef and Puppet work.

00:33:42.320 --> 00:33:42.520
Yeah,

00:33:42.520 --> 00:33:43.340
there are many,

00:33:43.340 --> 00:33:44.220
there are many,

00:33:44.220 --> 00:33:45.200
many other services.

00:33:45.200 --> 00:33:46.060
So,

00:33:46.060 --> 00:33:51.960
the ones that help with all the operations of maintaining and deploying OpenStack,

00:33:51.960 --> 00:33:52.660
probably,

00:33:52.660 --> 00:33:53.280
we just,

00:33:53.280 --> 00:33:53.780
we have,

00:33:53.780 --> 00:33:54.000
like,

00:33:54.000 --> 00:33:54.760
Puppet manifest,

00:33:54.760 --> 00:33:55.660
we have Ansible,

00:33:56.220 --> 00:33:57.960
we have a service called Triple O,

00:33:57.960 --> 00:33:58.860
which is,

00:33:58.860 --> 00:34:01.700
it's Triple O because it's called OpenStack on OpenStack.

00:34:01.700 --> 00:34:04.500
It basically means it's using OpenStack to deploy OpenStack.

00:34:04.500 --> 00:34:05.360
What else?

00:34:05.360 --> 00:34:06.980
We have other,

00:34:06.980 --> 00:34:08.820
well,

00:34:08.820 --> 00:34:14.920
there are several installers around the community maintained by different companies as well

00:34:14.920 --> 00:34:17.760
that will allow you to install OpenStack.

00:34:17.760 --> 00:34:23.640
And the fun fact about OpenStack is that the problem is not just installing it.

00:34:23.640 --> 00:34:25.920
Installing OpenStack was,

00:34:25.920 --> 00:34:27.180
hard at the beginning.

00:34:27.180 --> 00:34:28.840
It has come a long way.

00:34:28.840 --> 00:34:29.900
But the,

00:34:29.900 --> 00:34:31.920
what really matters and what,

00:34:31.920 --> 00:34:32.200
what,

00:34:32.200 --> 00:34:34.840
what's really interesting is the,

00:34:34.840 --> 00:34:35.640
like,

00:34:35.640 --> 00:34:37.600
the life cycle of an OpenStack deployment.

00:34:37.600 --> 00:34:39.060
It's not just installing it,

00:34:39.060 --> 00:34:40.180
but also upgrading it.

00:34:40.180 --> 00:34:40.920
Like,

00:34:40.920 --> 00:34:42.880
making sure it runs well,

00:34:42.880 --> 00:34:45.140
making sure that there are not pieces falling,

00:34:45.140 --> 00:34:46.880
falling apart in some,

00:34:46.880 --> 00:34:48.160
in some of the OpenStack areas.

00:34:48.160 --> 00:34:48.840
So,

00:34:48.840 --> 00:34:51.660
all that life cycle of OpenStack is,

00:34:51.660 --> 00:34:52.480
is what,

00:34:52.480 --> 00:34:55.500
what installers are specializing themselves now.

00:34:55.500 --> 00:34:56.080
Yeah,

00:34:56.080 --> 00:34:59.720
that can be a real challenge in infrastructure as a service scenarios,

00:34:59.720 --> 00:35:00.100
right?

00:35:00.100 --> 00:35:01.600
Right,

00:35:01.600 --> 00:35:04.640
especially because you are running actual software on top of it.

00:35:04.640 --> 00:35:05.120
Like,

00:35:05.120 --> 00:35:07.520
you're running your production environments in many cases,

00:35:07.520 --> 00:35:08.800
or test or whatever,

00:35:08.800 --> 00:35:10.160
analysis environments,

00:35:10.420 --> 00:35:13.640
and you want to make sure that your virtual machines don't die,

00:35:13.640 --> 00:35:14.140
um,

00:35:14.140 --> 00:35:15.700
out of the blue,

00:35:15.700 --> 00:35:16.520
uh,

00:35:16.520 --> 00:35:18.300
and that your data is still persisted,

00:35:18.300 --> 00:35:20.380
and that you're going to be able to access it afterwards,

00:35:20.380 --> 00:35:22.640
and it's not going to die in one of the upgrades,

00:35:22.640 --> 00:35:24.100
from one version to another.

00:35:24.100 --> 00:35:25.080
And,

00:35:25.080 --> 00:35:26.220
and in many cases,

00:35:26.220 --> 00:35:26.900
and there are many,

00:35:26.900 --> 00:35:27.720
um,

00:35:27.720 --> 00:35:28.120
there,

00:35:28.120 --> 00:35:28.640
there,

00:35:28.640 --> 00:35:31.260
there are a couple of folks working on this around the communities,

00:35:31.260 --> 00:35:31.800
that is,

00:35:31.800 --> 00:35:32.880
is to provide,

00:35:32.880 --> 00:35:33.180
uh,

00:35:33.180 --> 00:35:33.940
live upgrades,

00:35:33.940 --> 00:35:34.840
live migrations,

00:35:34.840 --> 00:35:35.580
uh,

00:35:35.580 --> 00:35:36.020
for,

00:35:36.020 --> 00:35:37.000
for,

00:35:37.000 --> 00:35:38.020
for some of their resources,

00:35:38.020 --> 00:35:40.060
like live migrating virtual machines from,

00:35:40.060 --> 00:35:42.460
from one compute node to another compute node,

00:35:42.460 --> 00:35:43.480
like migrating,

00:35:43.480 --> 00:35:44.020
uh,

00:35:44.020 --> 00:35:44.940
volumes from,

00:35:44.940 --> 00:35:46.760
from one storage to another storage.

00:35:46.760 --> 00:35:47.480
Um,

00:35:47.480 --> 00:35:48.280
those are very,

00:35:48.280 --> 00:35:49.380
very interesting things.

00:35:49.380 --> 00:35:50.100
Yeah,

00:35:50.100 --> 00:35:50.300
that,

00:35:50.300 --> 00:35:50.980
that is a,

00:35:50.980 --> 00:35:52.040
a big challenge,

00:35:52.040 --> 00:35:54.640
but really super valuable if you get it done right,

00:35:54.640 --> 00:35:54.840
yeah?

00:35:54.840 --> 00:35:55.640
Yeah.

00:35:55.640 --> 00:35:55.700
Yeah.

00:35:55.700 --> 00:36:13.460
This episode is brought to you by Codeship.

00:36:13.460 --> 00:36:16.040
Codeship has launched organizations,

00:36:16.040 --> 00:36:17.100
create teams,

00:36:17.100 --> 00:36:19.260
set permissions for specific team members,

00:36:19.260 --> 00:36:22.300
and improve collaboration in your continuous delivery workflow.

00:36:22.300 --> 00:36:25.260
Maintain centralized control of your organization's project,

00:36:25.260 --> 00:36:25.800
projects,

00:36:25.800 --> 00:36:28.200
and teams with Codeship's new organizations plan.

00:36:28.200 --> 00:36:29.980
And as Talk Python listeners,

00:36:29.980 --> 00:36:33.720
you can save 20% off any premium plan for the next three months.

00:36:33.720 --> 00:36:35.900
Just use the code TALKPYTHON,

00:36:35.900 --> 00:36:36.540
all caps,

00:36:36.540 --> 00:36:37.240
no spaces.

00:36:37.240 --> 00:36:41.720
Check them out at Codeship.com and tell them thanks for supporting the show on Twitter,

00:36:41.720 --> 00:36:42.980
where they're at Codeship.

00:36:42.980 --> 00:36:51.720
So all of that sounds like infrastructure as a service,

00:36:51.720 --> 00:36:52.940
but then on top of that,

00:36:53.000 --> 00:36:53.800
you have some more,

00:36:53.800 --> 00:36:54.260
you know,

00:36:54.260 --> 00:37:00.820
platform as a service type of things like queuing and DNS and so on,

00:37:00.820 --> 00:37:00.960
right?

00:37:00.960 --> 00:37:02.520
Do you want to talk about what you got there a little bit?

00:37:02.520 --> 00:37:03.840
Absolutely.

00:37:03.840 --> 00:37:08.100
So other services that are in the OpenStack,

00:37:08.100 --> 00:37:09.880
what we call the OpenStack Big Tent,

00:37:09.880 --> 00:37:14.940
and it's like this huge Big Tent where we welcome projects that are,

00:37:14.940 --> 00:37:18.420
that are targeting to making the cloud better.

00:37:19.020 --> 00:37:19.820
we have,

00:37:19.820 --> 00:37:20.900
we have Trove,

00:37:20.900 --> 00:37:22.220
which is database as a service.

00:37:22.220 --> 00:37:23.820
We have Zakar,

00:37:23.820 --> 00:37:25.480
which is messaging as a service.

00:37:25.480 --> 00:37:28.720
We have Q,

00:37:28.720 --> 00:37:31.400
which is also,

00:37:31.400 --> 00:37:33.460
which is brokers as a service.

00:37:33.460 --> 00:37:35.780
Instead of providing messaging as a service,

00:37:35.780 --> 00:37:36.480
it provides,

00:37:36.480 --> 00:37:38.580
it provisions brokers for you,

00:37:38.580 --> 00:37:41.280
so you don't have to maintain your own rabbit and you run it,

00:37:41.520 --> 00:37:44.600
but it will maintain it for you and it allows you to create clusters and everything.

00:37:44.600 --> 00:37:47.240
What else we've got?

00:37:47.240 --> 00:37:48.960
We've got DNS as a service.

00:37:48.960 --> 00:37:51.120
We've got load balances as a service.

00:37:52.000 --> 00:37:57.680
We've got telemetry and metering services so that you can monitor your cloud environment.

00:37:57.680 --> 00:38:02.180
And so every OpenStack service,

00:38:02.180 --> 00:38:02.960
or most of them,

00:38:02.960 --> 00:38:08.120
emit notifications every time something happens within the service.

00:38:08.120 --> 00:38:10.040
Like whenever you put a new virtual machine,

00:38:10.040 --> 00:38:10.460
it will say,

00:38:10.460 --> 00:38:10.720
hey,

00:38:10.720 --> 00:38:12.540
I'm putting a new virtual machine with this image.

00:38:12.540 --> 00:38:14.600
Whenever you do that with a blog device,

00:38:14.600 --> 00:38:15.320
it will do the same.

00:38:15.740 --> 00:38:22.680
And then there's this metering service that will just get all those notifications

00:38:22.680 --> 00:38:25.060
and will create statistics for you.

00:38:25.060 --> 00:38:27.640
It will allow you to see what's going on in your cloud,

00:38:27.640 --> 00:38:30.120
when all those virtual machines were started or not.

00:38:30.120 --> 00:38:32.340
And it will also allow you to build on top of that.

00:38:32.340 --> 00:38:33.480
Based on that information,

00:38:33.480 --> 00:38:34.400
you can build users.

00:38:34.400 --> 00:38:36.240
Like you've been using a lot of like,

00:38:36.240 --> 00:38:39.620
like and virtual machines and compute resources or storage,

00:38:39.620 --> 00:38:41.200
or you've been using these images.

00:38:41.200 --> 00:38:44.400
And you can also even build based on the images they're using

00:38:44.400 --> 00:38:49.600
and all like different features that can be enabled or disabled in a cloud environment.

00:38:49.600 --> 00:38:50.880
What else?

00:38:50.880 --> 00:38:51.620
Oh,

00:38:51.620 --> 00:38:52.480
Jesus.

00:38:52.480 --> 00:38:54.560
There are many others and I just forgot about that.

00:38:54.560 --> 00:38:54.680
Yeah,

00:38:54.680 --> 00:38:55.120
there's a lot,

00:38:55.120 --> 00:38:55.460
aren't there?

00:38:55.460 --> 00:38:56.020
Yeah.

00:38:56.020 --> 00:38:58.620
So could you maybe walk us through what it's like?

00:38:58.620 --> 00:39:00.720
So I've already got my OpenStack all set up,

00:39:00.720 --> 00:39:05.920
but I would like to have a database and I'd like to have three web frontends

00:39:05.920 --> 00:39:08.020
and a load balancer in a virtual private network.

00:39:08.020 --> 00:39:09.680
Like what are the steps to make that happen?

00:39:09.680 --> 00:39:11.660
So you want to have a database,

00:39:11.660 --> 00:39:13.980
you want to have a load balancer,

00:39:14.340 --> 00:39:16.580
and you want to have like three web heads.

00:39:16.580 --> 00:39:16.820
Yeah,

00:39:16.820 --> 00:39:17.160
exactly.

00:39:17.160 --> 00:39:17.920
Something like this.

00:39:17.920 --> 00:39:20.400
So I guess the first step would,

00:39:20.400 --> 00:39:22.800
would be creating your database so that you get your,

00:39:22.800 --> 00:39:24.640
your URLs connected to your database.

00:39:24.640 --> 00:39:24.920
Okay.

00:39:24.920 --> 00:39:25.660
Um,

00:39:25.660 --> 00:39:27.460
and after that,

00:39:27.460 --> 00:39:28.040
uh,

00:39:28.040 --> 00:39:30.600
you would create obviously your private network,

00:39:30.600 --> 00:39:31.480
uh,

00:39:31.480 --> 00:39:32.820
so that whenever you,

00:39:32.820 --> 00:39:33.320
uh,

00:39:33.320 --> 00:39:34.640
put your virtual machines,

00:39:34.640 --> 00:39:35.060
uh,

00:39:35.060 --> 00:39:35.780
they will connect,

00:39:35.780 --> 00:39:37.460
they will use a network and they will,

00:39:37.460 --> 00:39:37.820
uh,

00:39:37.820 --> 00:39:39.260
get some IP assigned,

00:39:39.260 --> 00:39:41.080
IPs assigned based,

00:39:41.080 --> 00:39:41.440
uh,

00:39:41.440 --> 00:39:42.160
from that network.

00:39:42.760 --> 00:39:44.380
and once you have your network,

00:39:44.380 --> 00:39:45.300
you will also,

00:39:45.300 --> 00:39:47.900
you will start your virtual machines.

00:39:47.900 --> 00:39:50.020
You'll deploy your web heads there.

00:39:50.020 --> 00:39:50.520
Uh,

00:39:50.520 --> 00:39:51.700
obviously they will talk to,

00:39:51.700 --> 00:39:52.440
uh,

00:39:52.440 --> 00:39:54.080
your newly created database.

00:39:54.080 --> 00:39:56.340
And then you'll create your,

00:39:56.340 --> 00:39:58.020
you'll configure your load balancer,

00:39:58.020 --> 00:39:58.940
uh,

00:39:59.000 --> 00:39:59.540
to,

00:39:59.540 --> 00:40:03.460
to balance the load across those three web heads.

00:40:03.460 --> 00:40:08.620
And you can do all that without installing,

00:40:08.620 --> 00:40:09.160
like,

00:40:09.160 --> 00:40:09.380
I'm,

00:40:09.380 --> 00:40:11.640
I'm trying to make sure I'm not saying something wrong here.

00:40:11.640 --> 00:40:12.600
That you can,

00:40:12.600 --> 00:40:19.820
you can do that all that without installing any single service that is not open stack.

00:40:19.820 --> 00:40:23.040
Like you can do that by using just CLI tools and say like,

00:40:23.040 --> 00:40:24.160
give me a load balancer,

00:40:24.160 --> 00:40:26.220
balance load across these three,

00:40:26.220 --> 00:40:26.940
three nodes.

00:40:26.940 --> 00:40:28.500
Give me three virtual machines.

00:40:28.500 --> 00:40:32.200
And you don't have to install a single service yourself,

00:40:32.200 --> 00:40:33.280
but you don't have to install,

00:40:33.280 --> 00:40:34.040
I don't know,

00:40:34.040 --> 00:40:36.480
HAProxy yourself or NGINX.

00:40:36.480 --> 00:40:37.720
You don't have to do that.

00:40:37.720 --> 00:40:38.340
Uh,

00:40:38.340 --> 00:40:40.200
you can do that all using,

00:40:40.200 --> 00:40:41.880
like just using open stack tools,

00:40:41.880 --> 00:40:42.500
which is,

00:40:42.500 --> 00:40:43.700
it just like,

00:40:43.700 --> 00:40:45.140
it just blew my mind right now.

00:40:45.140 --> 00:40:45.900
Yeah.

00:40:45.900 --> 00:40:46.220
That's,

00:40:46.220 --> 00:40:47.640
that's really cool.

00:40:47.640 --> 00:40:52.340
And could I actually put all that together in like an Ansible playbook and just run it and make it all happen?

00:40:53.020 --> 00:40:53.640
Oh yeah.

00:40:53.640 --> 00:40:54.960
That just makes it even better.

00:40:54.960 --> 00:40:55.820
Um,

00:40:55.820 --> 00:40:56.500
like you,

00:40:56.500 --> 00:40:58.080
you can just script that,

00:40:58.080 --> 00:40:58.900
uh,

00:40:58.900 --> 00:40:59.220
because,

00:40:59.220 --> 00:40:59.760
uh,

00:40:59.760 --> 00:41:02.140
every single CLI tool is,

00:41:02.140 --> 00:41:02.740
um,

00:41:02.740 --> 00:41:04.820
like the client libraries in open stack,

00:41:04.820 --> 00:41:06.460
they're all written in Python,

00:41:06.460 --> 00:41:07.320
uh,

00:41:07.320 --> 00:41:07.720
right now,

00:41:07.720 --> 00:41:09.460
but there are also some other outside,

00:41:09.460 --> 00:41:10.120
um,

00:41:10.120 --> 00:41:11.720
the repos that are written in other languages.

00:41:11.720 --> 00:41:12.080
Anyway,

00:41:12.080 --> 00:41:12.700
I digress.

00:41:12.700 --> 00:41:13.280
Uh,

00:41:13.280 --> 00:41:13.720
you can,

00:41:13.720 --> 00:41:20.000
you can get your libraries and you can write scripts on top of that and make that all scriptable and,

00:41:20.000 --> 00:41:21.520
and either using Ansible,

00:41:21.680 --> 00:41:25.460
pop it or even your own script because you don't want to use any of those tools.

00:41:25.460 --> 00:41:25.860
Yeah.

00:41:25.860 --> 00:41:26.060
Yeah.

00:41:26.060 --> 00:41:26.360
That's,

00:41:26.360 --> 00:41:27.040
that's cool.

00:41:27.040 --> 00:41:28.440
That it's,

00:41:28.440 --> 00:41:29.880
it's amazing times we live in,

00:41:29.880 --> 00:41:30.100
right?

00:41:30.100 --> 00:41:31.680
Absolutely.

00:41:31.680 --> 00:41:32.800
Like I,

00:41:32.800 --> 00:41:35.120
I normally talk about this and I say like,

00:41:35.400 --> 00:41:35.800
you know,

00:41:35.800 --> 00:41:35.800
you know,

00:41:35.800 --> 00:41:36.700
if your clouds,

00:41:36.700 --> 00:41:38.140
if your cloud don't provide,

00:41:38.140 --> 00:41:39.240
uh,

00:41:39.240 --> 00:41:42.320
if your cloud doesn't provide you a load balance as a service,

00:41:42.320 --> 00:41:43.840
I believe your cloud is incomplete.

00:41:43.840 --> 00:41:47.780
And now that you just asked me to build that change of events,

00:41:47.780 --> 00:41:48.620
um,

00:41:48.620 --> 00:41:49.460
how they would work.

00:41:49.460 --> 00:41:50.100
I'm just like,

00:41:50.100 --> 00:41:50.560
whoa,

00:41:50.560 --> 00:41:51.100
I mean,

00:41:51.100 --> 00:41:52.740
the fact that you can do it actually,

00:41:52.740 --> 00:41:56.080
like just using CLI tools and you can get your application running in,

00:41:56.080 --> 00:41:57.540
in no time,

00:41:57.540 --> 00:41:57.980
basically.

00:41:57.980 --> 00:41:59.080
It's just amazing.

00:41:59.080 --> 00:41:59.460
Yeah,

00:41:59.560 --> 00:42:00.320
it really is.

00:42:00.320 --> 00:42:03.660
So what's Red Hat's involvement in OpenStack?

00:42:03.660 --> 00:42:05.820
Like why you work for Red Hat,

00:42:05.820 --> 00:42:06.900
but you work on OpenStack.

00:42:06.900 --> 00:42:07.820
What's the story there?

00:42:07.820 --> 00:42:11.180
The story is Red Hat is full,

00:42:11.180 --> 00:42:12.220
uh,

00:42:12.220 --> 00:42:13.540
immersed in OpenStack.

00:42:13.540 --> 00:42:17.040
Like we are 100% on,

00:42:17.040 --> 00:42:20.040
on the project and we believe 100% on it.

00:42:20.040 --> 00:42:21.600
And we are,

00:42:21.600 --> 00:42:25.120
we are betting a lot on cloud and,

00:42:25.120 --> 00:42:29.540
and different flavors and versions of clouds and whatever will make it.

00:42:29.540 --> 00:42:33.260
make your cloud better and your development workflows better.

00:42:33.260 --> 00:42:36.940
And that will allow you to scale your application and,

00:42:36.940 --> 00:42:38.600
and your environments,

00:42:38.600 --> 00:42:39.940
either private or public,

00:42:39.940 --> 00:42:43.960
which basically means that when we see something like OpenStack,

00:42:43.960 --> 00:42:44.840
we say,

00:42:44.840 --> 00:42:46.000
we gotta be there.

00:42:46.000 --> 00:42:47.040
And that's,

00:42:47.040 --> 00:42:47.820
that's what we did.

00:42:47.820 --> 00:42:48.280
We,

00:42:48.280 --> 00:42:51.900
we just jumped into OpenStack and we started working on OpenStack full time

00:42:51.900 --> 00:42:53.140
upstream right away.

00:42:53.140 --> 00:42:55.160
We got developers and we just put them there.

00:42:55.160 --> 00:42:56.420
And that's,

00:42:56.420 --> 00:42:58.240
that's actually my case as well.

00:42:58.620 --> 00:43:00.060
And that I'm part of,

00:43:00.060 --> 00:43:05.100
of that upstream only team that dedicates full time to making,

00:43:05.100 --> 00:43:08.140
or trying to make OpenStack better every day.

00:43:08.140 --> 00:43:09.140
That's a great mission.

00:43:09.140 --> 00:43:13.860
Then we talked a little bit about why OpenStack,

00:43:13.860 --> 00:43:16.700
why it's good for OpenStack to be built with Python.

00:43:16.700 --> 00:43:18.100
It has this great community.

00:43:18.540 --> 00:43:20.240
It's easy for newcomers to,

00:43:20.240 --> 00:43:23.400
to come on board and sort of learn from OpenStack,

00:43:23.400 --> 00:43:24.600
but also contribute to it.

00:43:24.600 --> 00:43:25.880
But what,

00:43:25.880 --> 00:43:29.460
what I recently learned that I thought was pretty interesting is it works the

00:43:29.460 --> 00:43:30.260
other way as well.

00:43:30.260 --> 00:43:31.980
Like Python is benefiting from OpenStack,

00:43:31.980 --> 00:43:32.880
right?

00:43:33.980 --> 00:43:34.480
It is.

00:43:34.480 --> 00:43:34.480
It is.

00:43:34.480 --> 00:43:35.540
It is.

00:43:35.540 --> 00:43:36.040
Um,

00:43:36.040 --> 00:43:40.340
I believe one of the good things that OpenStack is giving back,

00:43:40.340 --> 00:43:41.160
uh,

00:43:41.160 --> 00:43:43.500
to Python is actually Python.

00:43:43.500 --> 00:43:45.500
and is the fact that we,

00:43:45.500 --> 00:43:46.500
the community,

00:43:46.500 --> 00:43:48.500
the OpenStack community is huge.

00:43:48.500 --> 00:43:48.500
Uh,

00:43:48.500 --> 00:43:49.500
there's a lot,

00:43:49.500 --> 00:43:51.500
a lot of Python going on there.

00:43:51.500 --> 00:43:53.500
And it's not just huge.

00:43:53.500 --> 00:43:53.940
We have,

00:43:53.940 --> 00:43:57.940
we also have many of the key members of the Python community are also part of the

00:43:57.940 --> 00:43:58.500
OpenStack community,

00:43:58.500 --> 00:44:00.500
which means we are,

00:44:00.500 --> 00:44:01.100
we are,

00:44:01.100 --> 00:44:05.420
we are interconnected with the Python community and everything we do,

00:44:05.420 --> 00:44:08.140
we do it in a way that we can give back to the community.

00:44:08.140 --> 00:44:08.980
We,

00:44:08.980 --> 00:44:10.300
like in the OpenStack community,

00:44:10.300 --> 00:44:12.980
we are very against of,

00:44:12.980 --> 00:44:14.020
uh,

00:44:14.020 --> 00:44:16.500
reinventing the wheel and,

00:44:16.500 --> 00:44:19.820
and redoing things that exist already in the Python community.

00:44:19.820 --> 00:44:24.300
Whenever we can just use a Python library that exists already and make it better,

00:44:24.300 --> 00:44:25.700
which has happened a lot,

00:44:25.700 --> 00:44:26.660
uh,

00:44:26.660 --> 00:44:27.220
we,

00:44:27.220 --> 00:44:28.020
we just do it.

00:44:28.020 --> 00:44:30.540
And if we end up writing our own library,

00:44:30.540 --> 00:44:34.060
we make it in a way that is not OpenStack dependent,

00:44:34.060 --> 00:44:34.740
uh,

00:44:34.740 --> 00:44:37.460
so that we can just give it back to the Python community.

00:44:37.460 --> 00:44:39.420
When it is OpenStack dependent,

00:44:39.420 --> 00:44:42.460
we would just mark it in a way that you would know,

00:44:42.460 --> 00:44:44.500
it's like all the dope libraries that you know,

00:44:44.500 --> 00:44:45.420
those are part of dope.

00:44:45.420 --> 00:44:45.940
Well,

00:44:45.940 --> 00:44:48.100
we do the same with OpenStack.

00:44:48.100 --> 00:44:53.180
There are some libraries that we have built that are meant to be used by OpenStack.

00:44:53.180 --> 00:44:54.380
And it's not,

00:44:54.380 --> 00:44:56.380
it doesn't necessarily mean that,

00:44:56.380 --> 00:44:56.940
uh,

00:44:56.940 --> 00:44:57.940
you cannot use them,

00:44:57.940 --> 00:44:58.580
uh,

00:44:58.580 --> 00:44:59.460
outside of OpenStack,

00:44:59.460 --> 00:45:01.860
but it definitely means the API is,

00:45:01.860 --> 00:45:09.460
the API has been taught for OpenStack in a way that will make OpenStack better or easier to consume the library across OpenStack.

00:45:09.460 --> 00:45:11.980
so I believe one of the,

00:45:11.980 --> 00:45:15.980
the best thing that OpenStack is giving back to Python is actually Python.

00:45:15.980 --> 00:45:20.380
There's a lot of contributions back to the language itself, to the testing libraries.

00:45:20.380 --> 00:45:21.900
like I said before,

00:45:21.900 --> 00:45:22.900
like I said before,

00:45:22.900 --> 00:45:27.900
like our CI system is huge and it runs a lot of patches and tests per day.

00:45:27.900 --> 00:45:36.420
And all the things that have been written and found out in our CI system that are not necessarily a problem in OpenStack, but probably a problem outside of OpenStack.

00:45:36.420 --> 00:45:38.420
All those things have been contributed back.

00:45:38.420 --> 00:45:39.940
many,

00:45:39.940 --> 00:45:42.940
many new workflows from,

00:45:42.940 --> 00:45:43.940
from a test perspective,

00:45:43.940 --> 00:45:48.940
from a requirements and dependencies management perspective have been contributed back to the community somehow.

00:45:48.940 --> 00:45:50.460
even in way,

00:45:50.460 --> 00:45:52.780
even in a way of documentation,

00:45:52.780 --> 00:45:53.380
um,

00:45:53.380 --> 00:45:55.060
I believe that's a huge,

00:45:55.060 --> 00:45:55.380
uh,

00:45:55.380 --> 00:45:57.740
benefit the Python community is getting from OpenStack.

00:45:57.740 --> 00:45:58.860
Many things like,

00:45:58.860 --> 00:46:01.660
it recently happened like two weeks ago,

00:46:01.660 --> 00:46:02.260
um,

00:46:02.260 --> 00:46:05.220
there was a new release of Request.

00:46:05.220 --> 00:46:06.020
And,

00:46:06.020 --> 00:46:06.460
uh,

00:46:06.460 --> 00:46:06.740
you know,

00:46:06.740 --> 00:46:07.420
Request has a,

00:46:07.420 --> 00:46:09.020
it vendors your,

00:46:09.020 --> 00:46:09.420
uh,

00:46:09.420 --> 00:46:10.620
your lead three.

00:46:10.620 --> 00:46:15.220
And it just like the latest release just brought some of the OpenStack client libraries.

00:46:15.220 --> 00:46:18.620
And we just found it and it was a lot of like table listed.

00:46:18.620 --> 00:46:20.020
And one hour later,

00:46:20.020 --> 00:46:23.620
we just found the issue and we just went back to Request and said like,

00:46:23.620 --> 00:46:23.820
Hey,

00:46:23.820 --> 00:46:24.340
you know what?

00:46:24.340 --> 00:46:24.700
I got,

00:46:24.700 --> 00:46:27.220
you just broke OpenStack and some of the,

00:46:27.220 --> 00:46:27.780
yeah.

00:46:27.780 --> 00:46:29.700
Call up Kenneth writes and say,

00:46:29.700 --> 00:46:30.180
Hey Kenneth,

00:46:30.180 --> 00:46:31.080
we have a problem.

00:46:31.080 --> 00:46:32.300
Exactly.

00:46:32.300 --> 00:46:33.600
We've got a problem.

00:46:33.600 --> 00:46:34.600
Um,

00:46:34.600 --> 00:46:38.580
but it turns out like some of the Request maintainers are also part of OpenStack.

00:46:38.580 --> 00:46:40.620
So it was even easier to just say like,

00:46:40.620 --> 00:46:41.120
Hey man,

00:46:41.120 --> 00:46:41.440
uh,

00:46:41.440 --> 00:46:42.000
do your mind?

00:46:42.000 --> 00:46:45.880
And like the issue was resolved in no time.

00:46:45.880 --> 00:46:48.320
Like the patch was written and landed.

00:46:48.320 --> 00:46:49.220
In no time.

00:46:49.220 --> 00:46:51.400
The release came a couple of days later.

00:46:51.400 --> 00:46:52.020
Uh,

00:46:52.020 --> 00:46:52.580
in the meantime,

00:46:52.580 --> 00:46:52.860
we,

00:46:52.860 --> 00:46:55.520
we kind of tried to apply the workaround for it,

00:46:55.520 --> 00:46:59.240
but like we resolved the whole issue within a week,

00:46:59.240 --> 00:47:02.440
which we were talking about Request,

00:47:02.440 --> 00:47:06.420
which is a like widely used library everywhere.

00:47:06.420 --> 00:47:07.560
and OpenStack,

00:47:07.560 --> 00:47:09.520
which has a huge ecosystem,

00:47:09.520 --> 00:47:12.520
which is hard to maintain consistent and sane.

00:47:12.520 --> 00:47:21.740
Making all that happen in a single week means that we've managed to create a workflow or to contribute back to the Python community in a way that is effective as well.

00:47:21.740 --> 00:47:22.300
Yeah.

00:47:22.300 --> 00:47:22.580
That's,

00:47:22.580 --> 00:47:23.540
that's a really great story.

00:47:23.540 --> 00:47:29.120
And one of the points that I heard someone make was you guys are really betting on Python.

00:47:29.120 --> 00:47:30.440
And if for some reason,

00:47:30.440 --> 00:47:31.620
say like a section,

00:47:31.620 --> 00:47:34.600
some operation or something in Python is too slow,

00:47:34.600 --> 00:47:35.220
instead of saying,

00:47:35.220 --> 00:47:35.420
Oh,

00:47:35.420 --> 00:47:35.900
forget this.

00:47:35.900 --> 00:47:40.340
We're going to switch over to go or something like you guys actually across,

00:47:40.340 --> 00:47:40.660
you know,

00:47:40.660 --> 00:47:43.220
Red Hat and Rackspace and so on,

00:47:43.220 --> 00:47:50.160
actually employ some of the core contributors and actually just make Python better to fix those problems.

00:47:50.160 --> 00:47:50.680
And that,

00:47:50.680 --> 00:47:51.640
that benefits everyone.

00:47:51.640 --> 00:47:51.900
Right.

00:47:51.900 --> 00:47:53.340
Absolutely.

00:47:53.340 --> 00:47:53.900
Like we,

00:47:53.900 --> 00:47:55.440
like we,

00:47:55.440 --> 00:47:58.140
I can talk about Red Hat because I'm part of it and I know,

00:47:58.140 --> 00:47:59.380
and I know how it works there.

00:47:59.380 --> 00:48:03.340
It's not just about just talking about the company that pays my salary.

00:48:03.340 --> 00:48:04.140
Um,

00:48:04.140 --> 00:48:05.300
it's yeah.

00:48:05.300 --> 00:48:06.700
But like we've,

00:48:06.700 --> 00:48:16.280
we've hired people dedicated to open source library and like they work on those open source libraries that OpenStack consumes.

00:48:16.280 --> 00:48:18.340
They don't even work on OpenStack.

00:48:18.860 --> 00:48:19.340
And,

00:48:19.340 --> 00:48:23.780
and we do that because we believe in OpenStack and that library is a huge part of OpenStack.

00:48:23.780 --> 00:48:28.960
And if that library breaks or that person just decides to leave the library and drop it and never maintain it,

00:48:28.960 --> 00:48:31.060
I'm not going to say the community won't pick it up,

00:48:31.060 --> 00:48:34.000
but why wouldn't you like,

00:48:34.000 --> 00:48:42.340
why wouldn't you give this guy that has dedicated a lot or GERD that has dedicated a lot of time on that library an opportunity to just keep doing it and,

00:48:42.340 --> 00:48:44.200
and have OpenStack benefit from that.

00:48:44.200 --> 00:48:44.620
Right.

00:48:44.620 --> 00:48:48.840
So it's not a matter of hiring people or having people working on OpenStack.

00:48:48.840 --> 00:48:49.340
full time,

00:48:49.340 --> 00:48:55.480
but also having people working on libraries that OpenStack uses to make sure that OpenStack stays sane and,

00:48:55.480 --> 00:48:57.240
and those libraries won't break it in the future.

00:48:57.240 --> 00:48:57.640
Yeah.

00:48:57.640 --> 00:49:00.860
That's a great stabilizing force in the whole open source industry,

00:49:00.860 --> 00:49:01.160
right?

00:49:02.060 --> 00:49:02.560
Yeah, exactly.

00:49:02.560 --> 00:49:03.500
And like I said,

00:49:03.500 --> 00:49:05.860
like OpenStack is a huge ecosystem and,

00:49:05.860 --> 00:49:09.100
and keep it sane and consistent and stable.

00:49:09.100 --> 00:49:12.580
Like it takes a lot of minds and resources to do that.

00:49:12.580 --> 00:49:15.440
And I'm not going to say like it's rocket science,

00:49:15.440 --> 00:49:16.980
but it definitely,

00:49:16.980 --> 00:49:21.640
there are many separate independent pieces that need to talk to each other.

00:49:21.700 --> 00:49:23.860
And if one of those pieces don't do that,

00:49:23.860 --> 00:49:26.420
it'll just all fall down right away.

00:49:26.420 --> 00:49:27.380
Yeah.

00:49:27.380 --> 00:49:32.000
Thinking of all the interdependencies between 375 different repositories.

00:49:32.000 --> 00:49:33.060
That's right.

00:49:33.060 --> 00:49:33.420
That's,

00:49:33.420 --> 00:49:34.040
that's complicated,

00:49:34.040 --> 00:49:35.760
but you guys are doing it.

00:49:35.760 --> 00:49:36.160
That's awesome.

00:49:36.980 --> 00:49:39.740
So one thing I did want to come back to is Docker.

00:49:39.740 --> 00:49:42.820
What's the story with Docker and OpenStack?

00:49:42.820 --> 00:49:45.860
We were just embracing it.

00:49:45.860 --> 00:49:51.720
It is not a matter of whether you have to pick Docker or you have to pick OpenStack.

00:49:51.720 --> 00:49:52.120
Even,

00:49:52.120 --> 00:49:53.520
even if you have Docker,

00:49:53.520 --> 00:49:56.840
you still need to maintain all your containers,

00:49:56.840 --> 00:49:57.300
right?

00:49:57.300 --> 00:49:59.340
There are other tools to do that out there,

00:49:59.340 --> 00:50:01.040
but OpenStack is also one of them.

00:50:01.040 --> 00:50:03.740
You can have services,

00:50:03.740 --> 00:50:05.460
there's Magnum,

00:50:05.780 --> 00:50:06.220
and it'll,

00:50:06.220 --> 00:50:12.020
it'll just allow you to manage all your Docker containers like you would do with Nova and virtual machines,

00:50:12.020 --> 00:50:12.600
basically.

00:50:12.600 --> 00:50:15.860
So you don't really need to pick one or the other.

00:50:15.860 --> 00:50:17.580
We believe in Docker.

00:50:17.580 --> 00:50:22.100
We believe Docker is an amazing tool and it gives you a lot of power and,

00:50:22.100 --> 00:50:22.960
and resources.

00:50:22.960 --> 00:50:24.800
It does that in a different way.

00:50:24.800 --> 00:50:25.200
It has,

00:50:25.200 --> 00:50:28.580
it has its own issues as virtual machines have their own,

00:50:28.580 --> 00:50:30.660
but we,

00:50:30.660 --> 00:50:34.980
we believe that the containers and Docker itself is also part of,

00:50:34.980 --> 00:50:36.340
of what a good cloud,

00:50:36.340 --> 00:50:37.180
uh,

00:50:37.180 --> 00:50:37.960
is and,

00:50:37.960 --> 00:50:40.200
and which is why we have also services that,

00:50:40.200 --> 00:50:41.660
that would allow you to just use Docker.

00:50:41.660 --> 00:50:41.740
there.

00:50:41.740 --> 00:50:46.280
So much like I can go up to OpenStack and say,

00:50:46.280 --> 00:50:50.880
I would like three virtual machines with this image and then put them into a private network.

00:50:50.880 --> 00:50:51.980
I can say,

00:50:51.980 --> 00:50:56.620
I would like these three containers based on these images and I want them in a private network.

00:50:56.620 --> 00:50:57.520
Is that possible?

00:50:57.520 --> 00:50:58.800
Yes,

00:50:58.800 --> 00:50:59.280
absolutely.

00:50:59.280 --> 00:51:00.140
And you can also say,

00:51:00.280 --> 00:51:03.360
I want two virtual machines and just one container and make them work to do it.

00:51:03.360 --> 00:51:04.560
That's awesome.

00:51:04.560 --> 00:51:06.220
Yeah.

00:51:06.220 --> 00:51:07.200
You just like,

00:51:07.200 --> 00:51:08.140
you pick your,

00:51:08.140 --> 00:51:10.040
you pick your flavor and like,

00:51:10.040 --> 00:51:11.660
is it really like,

00:51:11.660 --> 00:51:15.360
it like everything in our industry depends on the context and your needs.

00:51:15.360 --> 00:51:15.740
Right.

00:51:15.800 --> 00:51:17.720
And that's probably one of the best excuse,

00:51:17.720 --> 00:51:18.280
uh,

00:51:18.280 --> 00:51:19.340
we have in our industry.

00:51:19.340 --> 00:51:21.080
Whenever you don't want to answer something,

00:51:21.080 --> 00:51:21.740
you just say that,

00:51:21.740 --> 00:51:22.480
uh,

00:51:22.480 --> 00:51:23.300
like,

00:51:23.300 --> 00:51:23.520
well,

00:51:23.520 --> 00:51:23.660
yeah,

00:51:23.660 --> 00:51:24.280
but I digress.

00:51:24.280 --> 00:51:24.560
That's,

00:51:24.560 --> 00:51:25.080
that was a joke.

00:51:25.400 --> 00:51:25.840
Um,

00:51:25.840 --> 00:51:27.940
but even for open stack,

00:51:27.940 --> 00:51:28.800
it really depends on,

00:51:28.800 --> 00:51:29.700
on your needs actually.

00:51:29.700 --> 00:51:30.960
Like if you don't want to,

00:51:30.960 --> 00:51:35.020
if you don't need all the security layers and features that a virtual machine,

00:51:35.020 --> 00:51:35.640
uh,

00:51:35.640 --> 00:51:36.680
provides and give you,

00:51:36.680 --> 00:51:38.000
you can also use Docker.

00:51:38.000 --> 00:51:39.760
It's not just a matter of resources.

00:51:39.760 --> 00:51:43.120
It's not like a virtual machine will use more resources than a Docker container.

00:51:43.120 --> 00:51:43.920
Uh,

00:51:43.920 --> 00:51:45.120
to some extent that is true,

00:51:45.120 --> 00:51:48.160
but the footprint of virtual machine has right now,

00:51:48.160 --> 00:51:48.740
nowadays,

00:51:48.740 --> 00:51:50.000
has been improved a lot.

00:51:50.000 --> 00:51:50.260
And,

00:51:50.260 --> 00:51:51.840
and I'm not going to say it's as,

00:51:51.840 --> 00:51:54.540
it is as cheap as running a Docker container,

00:51:55.060 --> 00:51:55.460
but,

00:51:55.460 --> 00:51:55.940
um,

00:51:55.940 --> 00:51:57.920
it is not as expensive as it used to be.

00:51:57.920 --> 00:51:58.680
Yeah.

00:51:58.680 --> 00:52:02.460
But Docker enables different kinds of workflows and exactly,

00:52:02.460 --> 00:52:03.300
you know,

00:52:03.300 --> 00:52:05.420
super responsive scale,

00:52:05.420 --> 00:52:05.940
right?

00:52:05.940 --> 00:52:06.300
You know,

00:52:06.300 --> 00:52:07.080
a hundred milliseconds.

00:52:07.080 --> 00:52:08.380
You've got a container up and running.

00:52:08.380 --> 00:52:11.520
Like there's just different things you can do and trade offs you can make.

00:52:11.520 --> 00:52:12.280
So it's really cool.

00:52:12.280 --> 00:52:12.980
You guys support it.

00:52:12.980 --> 00:52:14.100
Yeah,

00:52:14.100 --> 00:52:14.700
absolutely.

00:52:14.700 --> 00:52:15.980
Awesome.

00:52:15.980 --> 00:52:17.880
So Flavio,

00:52:17.880 --> 00:52:19.940
we're coming up kind of near the end of the show.

00:52:19.940 --> 00:52:24.160
Do you have any like final call to actions or things you want to let people know about that?

00:52:24.180 --> 00:52:25.380
we haven't spoken about yet?

00:52:25.380 --> 00:52:32.240
What I would like to say again is that you don't need to have a huge public cloud for OpenStack to be worth it.

00:52:32.240 --> 00:52:36.980
Like just install it and improve your development and testing workflow using OpenStack.

00:52:37.300 --> 00:52:37.800
Uh,

00:52:37.800 --> 00:52:39.760
you don't need to deploy it on 800 virtual machines.

00:52:39.760 --> 00:52:42.680
You have a starter kit and you can just start small,

00:52:42.680 --> 00:52:43.640
give it a try.

00:52:43.640 --> 00:52:44.360
Uh,

00:52:44.360 --> 00:52:45.000
and if you like it,

00:52:45.000 --> 00:52:46.180
you can just grow from there.

00:52:46.180 --> 00:52:47.020
All right.

00:52:47.020 --> 00:52:47.440
That's awesome.

00:52:47.440 --> 00:52:50.200
And they can go out and check out the starter kit to get started maybe,

00:52:50.200 --> 00:52:50.420
right?

00:52:50.420 --> 00:52:50.740
Right.

00:52:50.740 --> 00:52:51.620
And if it,

00:52:51.620 --> 00:52:52.580
if it doesn't work,

00:52:52.580 --> 00:52:53.600
you know where to find us.

00:52:53.600 --> 00:52:54.480
That's right.

00:52:55.920 --> 00:52:56.420
All right.

00:52:56.420 --> 00:52:57.720
Two final questions before you go.

00:52:57.720 --> 00:52:59.120
If you're going to write some Python code,

00:52:59.120 --> 00:53:00.280
what editor do you open?

00:53:00.280 --> 00:53:01.480
Uh,

00:53:01.480 --> 00:53:01.940
right now,

00:53:01.940 --> 00:53:02.320
Emacs.

00:53:02.320 --> 00:53:03.280
Um,

00:53:03.280 --> 00:53:03.840
I,

00:53:03.840 --> 00:53:05.280
I love both Veeam and Emacs.

00:53:05.280 --> 00:53:06.020
I used to be a,

00:53:06.020 --> 00:53:07.540
just only Veeam developer.

00:53:07.540 --> 00:53:09.400
Then I just gave Emacs a try.

00:53:09.660 --> 00:53:11.640
and there's a Trump mode that I love.

00:53:11.640 --> 00:53:12.800
Um,

00:53:12.800 --> 00:53:14.360
especially when traveling.

00:53:14.360 --> 00:53:15.120
So,

00:53:15.120 --> 00:53:15.560
uh,

00:53:15.560 --> 00:53:16.460
right now is Emacs.

00:53:16.460 --> 00:53:16.940
That's,

00:53:16.940 --> 00:53:18.100
that's what I often do.

00:53:18.100 --> 00:53:18.400
Oh,

00:53:18.400 --> 00:53:18.700
excellent.

00:53:18.700 --> 00:53:19.020
They've,

00:53:19.020 --> 00:53:19.940
they've converted you,

00:53:19.940 --> 00:53:20.140
huh?

00:53:20.140 --> 00:53:21.520
Yeah,

00:53:21.520 --> 00:53:21.880
man,

00:53:21.880 --> 00:53:22.880
but I can go back.

00:53:22.880 --> 00:53:23.780
Like I use both.

00:53:23.780 --> 00:53:24.200
Honestly,

00:53:24.200 --> 00:53:24.480
it's,

00:53:24.480 --> 00:53:24.900
it's,

00:53:24.900 --> 00:53:25.740
it's very weird.

00:53:25.740 --> 00:53:28.920
Like sometimes I just run bin and start doing it.

00:53:28.920 --> 00:53:29.120
And,

00:53:29.120 --> 00:53:30.240
but right now,

00:53:30.240 --> 00:53:31.580
most of the time it's just Emacs.

00:53:31.580 --> 00:53:32.700
Cool.

00:53:32.700 --> 00:53:36.600
And of all the thousands of PyPI packages out there,

00:53:36.600 --> 00:53:38.600
what are ones you think people should know about that?

00:53:38.600 --> 00:53:39.420
Maybe they don't.

00:53:40.420 --> 00:53:40.900
Whoa.

00:53:40.900 --> 00:53:43.120
Probably one of the,

00:53:43.120 --> 00:53:44.140
there's,

00:53:44.140 --> 00:53:46.780
there's this package that I was actually creating as part of OpenStack.

00:53:46.780 --> 00:53:47.600
And I like a lot.

00:53:47.600 --> 00:53:47.900
And,

00:53:47.900 --> 00:53:52.420
and it's called also messaging and it's an RPC library.

00:53:52.420 --> 00:53:53.340
Um,

00:53:53.340 --> 00:53:53.740
so,

00:53:53.740 --> 00:53:56.040
and it's important to understand it's an RPC library.

00:53:56.040 --> 00:53:59.120
It does not provide just pure messaging across brokers.

00:53:59.120 --> 00:54:03.980
It is an opinionated RPC library that will allow you to either use RabbitNQ,

00:54:03.980 --> 00:54:04.900
um,

00:54:04.900 --> 00:54:06.000
QP Proton,

00:54:06.000 --> 00:54:08.560
or some other broker that is supported.

00:54:09.080 --> 00:54:09.500
um,

00:54:09.500 --> 00:54:12.160
to create your,

00:54:12.160 --> 00:54:12.780
uh,

00:54:12.780 --> 00:54:17.400
distributed system and make different parts talk through RPC,

00:54:17.400 --> 00:54:18.320
uh,

00:54:18.320 --> 00:54:18.700
calls.

00:54:18.700 --> 00:54:21.300
So that's widely used in OpenStack.

00:54:21.300 --> 00:54:22.860
And it's probably one of the,

00:54:22.860 --> 00:54:23.780
um,

00:54:23.780 --> 00:54:26.460
one of those sticks that if you remove it,

00:54:26.460 --> 00:54:28.000
openstack will just fall down.

00:54:28.000 --> 00:54:28.620
And,

00:54:28.620 --> 00:54:36.940
and most of the services that have a distributed architecture in OpenStack are using those messaging right now to make sure that all the pieces in the service can talk to each other.

00:54:36.940 --> 00:54:37.680
Um,

00:54:37.680 --> 00:54:38.600
so if you,

00:54:38.600 --> 00:54:39.780
if you are in the need of,

00:54:39.780 --> 00:54:40.640
of writing,

00:54:40.640 --> 00:54:41.260
uh,

00:54:41.260 --> 00:54:43.860
of having different notes talking to each other and,

00:54:43.860 --> 00:54:46.580
and RPC is one of the things you might want to give a try.

00:54:46.760 --> 00:54:47.200
Well,

00:54:47.200 --> 00:54:49.340
Oslo messaging is an amazing library for that.

00:54:49.880 --> 00:54:50.360
perfect.

00:54:50.360 --> 00:54:52.000
So very good recommendation.

00:54:52.000 --> 00:54:54.020
So if you're out there listening,

00:54:54.020 --> 00:54:58.240
go check out OpenStack and check out their starter kit,

00:54:58.240 --> 00:54:59.440
which you can find on the homepage.

00:54:59.440 --> 00:55:00.980
Definitely a cool project.

00:55:01.120 --> 00:55:03.920
And I love the whole Python component to it,

00:55:03.920 --> 00:55:04.220
Flavio.

00:55:04.220 --> 00:55:04.680
Thanks.

00:55:04.680 --> 00:55:05.440
Awesome.

00:55:05.440 --> 00:55:06.660
Thank you for having me here.

00:55:06.660 --> 00:55:07.320
Yeah.

00:55:07.320 --> 00:55:08.020
Thanks for being on the show.

00:55:08.020 --> 00:55:08.440
See you later.

00:55:08.440 --> 00:55:12.320
This has been another episode of Talk Python To Me.

00:55:12.320 --> 00:55:14.280
Today's guest was Flavio Prococo.

00:55:14.280 --> 00:55:17.080
And this episode has been sponsored by Hired and Cochip.

00:55:17.080 --> 00:55:18.800
Thank you guys for supporting the show.

00:55:18.800 --> 00:55:21.800
Hired wants to help you find your next big thing.

00:55:21.800 --> 00:55:30.420
Visit Hired.com slash Talk Python To Me to get five or more offers with salary and equity presented right up front and a special listener signing bonus of $4,000.

00:55:30.420 --> 00:55:34.220
Cochip wants you to always keep shipping.

00:55:34.220 --> 00:55:38.360
Check them out at Cochip.com and thank them on Twitter via at Cochip.

00:55:38.360 --> 00:55:40.360
Don't forget the discount code for listeners.

00:55:40.360 --> 00:55:41.020
It's easy.

00:55:41.020 --> 00:55:41.880
Talk Python.

00:55:41.880 --> 00:55:42.520
All caps.

00:55:42.520 --> 00:55:43.180
No spaces.

00:55:43.180 --> 00:55:50.140
You can find the links from today's show at talkpython.fm/episodes slash show slash 33.

00:55:50.140 --> 00:55:52.440
And be sure to subscribe to the show.

00:55:52.440 --> 00:55:55.180
Open your favorite podcatcher and search for Python.

00:55:55.180 --> 00:55:56.480
We should be right at the top.

00:55:56.480 --> 00:56:00.400
You could also find the iTunes and direct RSS feeds in the footer of the website.

00:56:00.400 --> 00:56:05.820
Our music is Developers, Developers, Developers by Corey Smith who goes by Smix.

00:56:05.820 --> 00:56:09.120
You can hear the whole song on talkpython.fm.

00:56:09.120 --> 00:56:10.900
This is your host, Michael Kennedy.

00:56:10.900 --> 00:56:12.700
Thank you very much for listening.

00:56:12.700 --> 00:56:14.960
Smix, take us out of here.

00:56:22.400 --> 00:56:24.640
The mic back to who rocked his best.

00:56:24.640 --> 00:56:24.640
The mic back to who rocked his best.

00:56:24.640 --> 00:56:24.640
The mic back to who rocked his best.

00:56:24.640 --> 00:56:24.640
The mic back to who rocked his best.

00:56:24.640 --> 00:56:36.640
The mic back to who rocked his best.

