00:00:13.700
thank you so thanks for braving the escalators
00:00:19.199
coming all the way down here I'm going to talk about blueprint a configuration management software that
00:00:25.619
in many ways is analogous to tools like puppet and chef but I think the focus
00:00:30.779
that I've given it on a good development workflow over operational abstractions
00:00:36.239
is going to be tempting to a lot of you so hi my name is Richard Crowley I work for
00:00:41.760
Dev structure which is the company that produces and and works on blueprint as well as is building some cloud services
00:00:49.020
and other non-free things surrounding blueprint
00:00:55.199
the tool itself is um is written in Python and hold your booze there's no
00:01:00.960
reason to write any python to use blueprint it's implemented in Python purely because that language is
00:01:07.680
available on basically every Linux system and that makes it really easy it's BSD licensed and it runs on Debian
00:01:14.400
and RPM based Linux distributions which is to say that it doesn't really do anything useful on Mac OS X and there's
00:01:21.659
a very good reason for that which we'll get to in just a couple of slides so the point of blueprint the the
00:01:28.200
workflow that it allows you to get into is is that you work on your application and add dependencies and configure your
00:01:34.680
development environment as you please and blueprint's job is to come around and figure out what you did to the
00:01:40.259
server store it locally in a Json format in a local git repository generate code from
00:01:47.159
it so that you can send it to your your neighbor over at the next desk and be able to deploy from it
00:01:54.240
and the uh and the origins of this tool are uh kind of entwined with what now is
00:02:00.780
known as the devops movement so I wanted to start by talking through some of the philosophies that made blueprint the way
00:02:07.560
it is today and the first of those is I believe in realistic development environments and
00:02:14.400
for everyone here I'm willing to bet that means Linux because your production environment is
00:02:20.099
going to be running on Linux and and in addition to using that same operating system in development I think it's
00:02:26.400
important to use the same sorts of web servers and database servers that you use in production
00:02:32.099
there's there's no other way to get a good feeling for the robustness and the
00:02:37.319
the quirky failure scenarios that you're going to come across in production if you're not exercising the same stack in
00:02:43.140
development every single day following closely from that I think it's
00:02:49.260
great to be able to use interactive tools like apt-get or gem install to manipulate how your development
00:02:55.739
environment is configured as a counter example to how easy and great that is think about if you were
00:03:03.120
using puppet or Chef where there's a configuration language off to the side so to add a dependency that you're going
00:03:09.420
to need immediately while you're developing your app you have to have to switch to a different code base and find
00:03:15.180
the correct place to put your your new puppet resource and then test it and check the syntax and then run it and
00:03:21.360
check it in and then you can come back to an application code base where now you can use that dependency you just
00:03:27.720
added so the the context switching overhead is just way too high and I think that me makes a lot of developers
00:03:34.560
hostile towards those tools right from the get-go
00:03:39.980
now configuration management in general this is nothing special to blueprint preaches the notion of managing the
00:03:46.260
entire Stacks configuration and so this means not just your uh your ruby gems and the particular versions of those but
00:03:54.000
also the system packages that they depend on and other other tools that you need this means the configuration files
00:04:01.200
for those services like you'd store and Etsy this means software that you've installed from Source this means the
00:04:07.500
databases and everything and a tool like rubygems for all of its strengths is not by itself capable of
00:04:15.659
handling this um ruby gems and and not to pick on it every language level package manager has
00:04:23.040
chosen a wide compatibility for example with Windows but also with both Debian
00:04:29.520
and RPM based Linux and Mac OS X and everything else so we need a kind of meta dependency declarations to
00:04:36.600
understand the relationship between a set of ruby gems and the underlying system packages that make them work
00:04:43.080
this is where blueprint comes in another thing that uh basically every
00:04:49.320
config management nerd would tell you is that it's important for everything to be item potent and this is this frees you
00:04:55.259
up to run the command over and over again no uh no one's scared to run puppet or Chef twice in a row and expect
00:05:01.860
anything bad to happen and likewise you can run blueprint over and over again without fear that anything bad is going
00:05:08.400
to happen and the reason for this and the the important characteristic is that
00:05:13.500
when we're dealing with commands like installing packages we're dealing with
00:05:19.199
commands that are already item potent that if if things are already in the correct State nothing's going to change
00:05:25.500
when we're dealing with placing files on the file system we're checking and making sure we're placing the entire
00:05:31.380
file's contents and never diffing or appending lines because the first thing that happens when you start applying
00:05:38.100
patches potentially over and over again or appending lines is that you end up appending the same line to your config
00:05:44.340
file but jillions of times you fill up your disk everything's broken nobody's happy so having a notion of item potence means
00:05:52.020
that when you run the config over and over again you're always going to arrive at the same desired state so when you
00:05:59.220
run over and over again you can bring nodes into compliance which is the the buzzword that a lot of Enterprise config
00:06:04.740
management people use the point here is that you won't have the fear at three in the morning when
00:06:10.259
you try to run your blueprint over again to make sure everything's correct
00:06:16.139
now as we've developed blueprint we've come across a lot of decisions where
00:06:21.419
we could do things um in a bit more invasive or custom or
00:06:26.819
unique way or we could do things the Unix way the the Debian way or the red hat way and we try to always choose
00:06:34.919
doing things the most standard and conventional way to to become the least surprising tool that we possibly can be
00:06:42.600
so when when faced with where we look for configuration files for example we
00:06:48.180
limit our search to Etsy because that's where config files belong on Unix so
00:06:53.400
this means that the tool is a lot simpler to understand it's a lot simpler to predict what it's going to do and
00:06:59.039
this means that you can use it without the without fear that it's going to do something crazy
00:07:06.120
um with uh with apologies to a guy named Ryan tomaco from GitHub
00:07:11.400
blueprint means never having to say you're sorry and he he said this about git but I think the same sort of thing applies
00:07:17.520
there's never a case where installing blueprint a month ago instead of five
00:07:23.039
minutes ago will make any difference so there's never a case where I have to say to someone you should have installed
00:07:28.080
blueprint last month before you cowboyed the hell out of that server because the way blueprint works is it's
00:07:34.259
taking an absolute look at the state of the system not a diff between what it is now and what it was last month so no
00:07:41.819
matter what you've done and no matter what order you've done it in we can find out exactly how a server works and
00:07:47.280
reduce it to kind of the minimal State that's necessary to bring it back on another server to do the same thing
00:07:55.919
um so now for a short bit of history when blueprint and really Dev structure the
00:08:02.099
company was first created we were building a development environment that we intended to sell as a service and uh
00:08:09.240
this was a bad terrible idea and the worst of it was that the the data that
00:08:14.759
blueprint was pulling out of systems was being stored in a relational database which seemed awesome at the time but it
00:08:20.879
was actually terrible now all of the data that blueprint extracts from a server is stored in a
00:08:27.419
Json format that is well documented and easy to generate and consume and when
00:08:34.200
necessary we use tarballs to store binary data and the like so no more
00:08:39.779
relational databases no more secret cloud services that uh that are holding onto your data without any ability to
00:08:46.380
get it out it's all very simple and it's all stored locally and of course it's documented and I
00:08:52.860
believe that Unix Man pages are the greatest documentation ever so everything has a man page the commands
00:08:59.940
and this documents what options they take and what they mean but also that file format I was talking about and if
00:09:06.839
the uh if Chrome hadn't crashed on me I'd show you the man pages but imagine and go to the internet and see them and
00:09:14.100
what you'll find in the description of the Json format is that it also describes the algorithm that you should
00:09:20.580
use to apply it so that if you're working from the same blueprint to people's implementation of applying that
00:09:27.120
to a server should work out exactly the same way again it gives you the confidence to do it over and over again
00:09:33.420
without worrying about bad things happening and now the very last bit of philosophy
00:09:39.899
is that I believe uh in a crowded Market that I'm admittedly kind of a late Comer
00:09:45.120
to like config management it's important for tools to interoperate well and so in
00:09:50.519
a bit we'll see how blueprint plays nicely with both puppet and Chef and kind of uh a different sort of
00:09:57.540
interoperability is I believe that the tools we use should take full advantage of the production platforms on which
00:10:04.440
they're deployed so ec2 being kind of the Cadillac of that world right now will show how blueprint integrates
00:10:11.160
tightly with ec2 so philosophy done
00:10:17.300
now we can talk about the workflow that blueprint promotes which I think is the coolest part of it and I think I've said
00:10:23.220
that at least twice now already so I'd like to walk through how blueprint Works how you would use it and
00:10:30.480
what it does behind the scenes while you're using it so since we're now all totally believing My
00:10:37.740
Philosophy we're all starting with a Linux VM in vagrant or virtualbox or in the cloud or in the kitchen and it
00:10:45.120
doesn't matter where it comes from or what flavor it is the important thing is that you have root access and that you
00:10:51.180
use it and so this means that when I get a new VM the first thing I do is install blueprint this doesn't matter if you can
00:10:57.959
read it it sets up a Debian archive and it installs blueprint that's the first thing I do and it's
00:11:03.240
installed system-wide and it's going to be able to appear in a blueprint later in a weird kind of self-hosting way
00:11:09.899
next thing you might want to do with your root access is install some gems I support this system-wide installation
00:11:16.560
means that you have a consistent end and understandable representation of what it
00:11:23.399
is to be that type of system less awesome is if you use uh use a tool
00:11:29.220
like bundler for example to pick on one to install gems often their own directory someplace that's not well
00:11:35.579
known to the system and can't be introspected reliably so given that bundlers basically a
00:11:41.459
requirement for rails install things system wide and then you've got a complete picture of your dependencies in
00:11:48.360
a in a discoverable location now likewise with gems as Ruby itself
00:11:54.980
tools like rvm and rbn have gained a lot of popularity I think mostly because of
00:12:01.380
OS X but once you get to the place where you're developing in a Linux VM there's
00:12:06.839
I don't think any reason not to install Ruby system-wide and and the version of
00:12:11.940
Ruby that you actually want and I'd encourage you to look into a tool yeah
00:12:18.600
very
00:12:28.019
that's he said that some distributions use Ruby for their own means and you
00:12:33.959
might mess that up which is very true and uh it's not so much the location of
00:12:39.600
the files so it's not that it be user bin Ruby it's that it be in the APT or
00:12:44.940
yum database for you to to audit and upgrade and remove that reliably and uh
00:12:50.100
and so here's Josh Timberman from Ops Code uh wrote a little quick thing that
00:12:55.320
uses fpm Jordan's to sells package management tool to uh to build a Debian
00:13:01.019
package for Ruby 192 whatever and this is like I said auditable
00:13:06.420
upgradable downgradable uninstallable and and if you use uh if you run your
00:13:12.779
own Debian archive then you can do this for much more than just Ruby itself you can do this for any particular system
00:13:18.240
dependency you have that you need to deploy outside of the confines of of whatever Debian or or red hat gives you
00:13:27.360
so now that you've got a bunch of stuff on your server and uh and it's all installed system wide we can create a
00:13:33.480
blueprint and so you can imagine you might run blueprint create and give it a name we'll call it Foo this is what
00:13:40.139
kicks off the reverse engineering of the server this is where the magic happens I suppose and uh and it goes through a lot
00:13:48.000
of back ends figuring out what to do and prints a little status along the way so
00:13:53.279
let's talk about what it does at each of these steps so the first thing it looks at are
00:13:58.740
packages in a whole bunch of different package managers the system package managers like apt and yum will in
00:14:06.480
addition to grabbing the full list of all the packages installed and their version numbers
00:14:11.519
it will take a take a hard look at those systems and figure out a representation of the base system the packages that can
00:14:19.620
be ignored because without them you don't even have a functioning Linux server so packages marked essential in Debian
00:14:26.579
and packages descending from the the Yum group called core in Red Hat World uh
00:14:33.420
and there's some others too are taken out of the blueprint so that they don't clutter things up we're reducing noise
00:14:39.860
and at the same time kind of increasing the strength of uh of the statement by
00:14:44.940
that including a package in the blueprint gives if we list every package then it's just these are the packages on
00:14:50.880
the system but if we start to remove stuff that's considered common or or trivial then the blueprint becomes a
00:14:58.980
representation of what's special about your system that means that it's smaller and easier to read and more personal to
00:15:04.199
how your environment works so all these other package managers work roughly the same way grabbing names and
00:15:10.260
versions and storing them in the the Json format for later
00:15:15.540
the next sort of resource that we look for are files unsurprisingly their
00:15:21.360
configuration files for the various packages and services that you've got and by convention those are stored in
00:15:27.720
Etsy so we only look in Etsy and this simplifies the process for blueprint and
00:15:34.019
causes it to be a lot more reliable in picking the correct files again we try to ignore a lot of things
00:15:41.040
like files that are included in a package and haven't been changed from that package as well as a lot of other
00:15:46.680
heuristics about files that are placed by the post install script from a from a
00:15:52.560
package which is a terrible thing don't do that and we have some other dirtier heuristics with c times and uh and some
00:16:01.139
packages in Debian that don't actually include checksums for their files so we do a lot of work to reduce the number of
00:16:06.959
files we include down to just the bare minimum things that are different and special about your system
00:16:15.240
so now another form of resource that we track we call Source installs which is admittedly a little bit of an ambiguous
00:16:21.360
and terrible name but the this feature was invented to handle and allow people to configure
00:16:28.320
make make install on their systems and have that still become part of the blueprint so
00:16:34.560
by convention again those things go into user local and so we only look in user local by default and and this gives you
00:16:41.880
a place to install binary files or custom scripts of your own or even your entire application and and whatever you
00:16:48.660
put in user local we're going to store as a tarball alongside the blueprint so you've got potentially your entire
00:16:54.540
application ready to to deploy via a blueprint
00:17:00.120
and now the last type of resource that blueprint takes a look at are services and these are definitely a little bit
00:17:07.500
different than everything else because if you'll notice everything so far has been file system State it's been one or
00:17:14.699
more files on disk their their metadata Etc whereas a service is a running process
00:17:21.000
it's runtime State and not something that we can describe in the same way so
00:17:26.220
one possibility would be to describe a service by its uh its file that just
00:17:31.559
that determines how it started and stopped but that's in Etsy init or Etsy init.d so that's already a file resource
00:17:38.700
so what we actually care about for a service resource is the conditions under which it should
00:17:45.600
be restarted and this means that we pay attention to things like if a service
00:17:51.360
definition mentions another file or a another directory we restart the service
00:17:57.960
when those files and directories are changed if if a service definition is
00:18:03.179
the member of a package and that package is upgraded we restart the service
00:18:08.760
so this means that when you apply a blueprint you're going to get not only the latest
00:18:13.820
updates to your disk but you're also going to have that reflected in the runtime state of the system so that
00:18:19.440
gives us more like a full deployment system baked into blueprint
00:18:26.220
so remember long ago when this was all the the process of running blueprint
00:18:31.799
create it actually takes about five seconds so that was very long-winded in comparison
00:18:37.260
but once you've got that once it's run it's stored locally in git and you might be tempted and rightfully so to inspect
00:18:44.220
what's in the blueprint so this blueprint show command would tell you in uh in the the Json format what's in
00:18:51.539
the blueprint and so you can see without really needing to read there's a file a
00:18:58.200
package and a service defined here and they Define metadata and versions
00:19:03.780
and uh and you can real quickly inspect that and see what's what's in it and what's not in it
00:19:10.320
likewise another blueprint this one that has the uh systems Ruby some some gems
00:19:16.500
and then a source tarball that we've extracted from user local and again you can see quickly what's in
00:19:22.440
it and what's not in it and uh and and be able to understand if something's missing and we'll get to how
00:19:28.980
you correct that in one moment if the the looking at Raw Json gives you a headache you can use the uh the kind
00:19:36.179
of shell friendly front ends to that blueprint show packages is one that
00:19:41.340
prints the uh the package manager name and version all uh all in a pipeline
00:19:46.860
friendly format that you can send through grep instead and awk and do strange and wonderful things to it
00:19:52.620
uh likewise there's blueprint show sources there's also show files and show services and the sources prints the uh
00:19:59.700
the verbose listing as if from tar TV so you can see what's in those tarballs
00:20:06.059
and you may find after looking at at your blueprint one of many possible ways
00:20:11.580
that you don't like it that there's something missing there's something that's uh too verbose that you you
00:20:16.620
installed a month ago and you don't actually care about and uh inspired basically exactly by git ignore we've
00:20:23.760
got an answer to that in the form of the blueprint ignore file so a file something like this in your
00:20:30.360
home directory would uh would tweak how blueprint determines what files to
00:20:35.760
include what packages to include so the top section looks exactly like a git ignore file it follows all the same
00:20:42.720
rules it ignores directories and files and it unignores things with the the exclamation point in the in the
00:20:49.080
beginning yeah is the blueprint ignore file included in
00:20:55.559
the blueprint not in the same way that another file is but yes it is stored with each revision
00:21:03.240
of the blueprint so you can um a second ago you could say blueprint show packages you can say blueprint show
00:21:09.539
ignore and get the ignore rules for that particular blueprint
00:21:15.660
um so the the second section is where we introduce new syntax uh colon resource
00:21:22.320
type colon so to ignore or unignore packages and likewise at the bottom
00:21:28.039
Source directories we can ignore the very bottom we've unignored the opt directory so that we're now creating a
00:21:34.440
tarball of whatever's in opt and we can deploy whatever we have in opt that way as well
00:21:39.860
there's a curious strange pattern in the middle here where we ignore and then
00:21:45.659
immediately unignor the build essential package and I feel like this deserves explaining because it looks kind of
00:21:51.840
strange when I when I worked on this feature at first we we took a long look at what the
00:21:58.380
least surprising Behavior would be and when you ignore a package the least
00:22:03.600
surprising thing seems to be to also ignore all of its dependencies whereas when you unignore a package the
00:22:10.200
least surprising thing is to only unignore that one package so the
00:22:15.600
behavior that emerged is that if you ignore and then unignore the same package you end up only ignoring its
00:22:22.799
dependencies which is a cosmetic but not functional impact on what actually
00:22:28.440
happens when the blueprint is applied later this just removes the 20 odd dependencies of build essential from the
00:22:35.159
blueprint but make sure that they'll still be there in the end so now with this we run blueprint create
00:22:41.940
again and we've got a blueprint we're real happy with and now you might want
00:22:47.039
to share it with somebody else another developer or or the new hire perhaps and
00:22:52.500
so you can use a free service that we're offering experimentally where you can push it to the cloud and pull it back
00:22:59.940
down on some other service so you run blueprint push and it gives you this nasty long URL that identifies your
00:23:07.080
blueprint uniquely in the cloud and someone else can use that URL to pull it back down
00:23:12.600
and we store them behind really long unguessable random URLs so that
00:23:18.780
there's no need for user accounts in such a simple service and we store them in S3 because that's cheap and easy and
00:23:25.020
reliable and we don't have to convince anybody that that may not trust us that the data is
00:23:32.039
going to be there so when when the new guy pulls that down he's got he's got this blueprint stored
00:23:39.120
locally in his git repository and with blueprint apply Foo he's able to bring that new Dev box that's brand new up to
00:23:47.340
the same state as the one where the blueprint was created a minute ago so now with two commands the new hire is
00:23:53.340
up and running in writing code and that's great but uh it doesn't get you all the way to
00:23:58.620
production which is of course where everybody wants to be right uh you could use that same pattern of
00:24:05.159
pushing and then pulling and then applying on your production servers but that would mean that you have to have
00:24:11.460
blueprint installed which is not a big deal but for some folks that that may mean something and uh
00:24:18.059
and it's a little bit primitive and it's something that we can do better with so we do so the first and the easiest thing that
00:24:24.720
we can do better is uh is by using blueprint show and giving it the dash capital S argument this time and this
00:24:32.100
instead of printing a bunch of Json to the screen which is nearly useless we create a shell script that will apply
00:24:39.720
all of the resources identified in that blueprint one after the other following the algorithmic order and doing so in a
00:24:46.380
safe item potent way so you could take food.sh and immediately send it to production and run it or you could give
00:24:53.220
it to your your version control system and maybe your CI system to walk it
00:24:58.620
through the the staging process and make sure everything works fine there before pushing it to production
00:25:03.960
but now you don't have to worry about carting the whole of blueprint along with it blueprint can remain a
00:25:09.659
development only tool and the the code it generates looks
00:25:14.880
something like this and I mentioned that it follows the algorithm and that it does so in a nice item put in a way so
00:25:21.299
you can see that it's gating the installation of a package by checking
00:25:26.400
the version that's available so we don't waste time in apt if it's ultimately going to decide everything's fine
00:25:32.279
um and then when when that package is upgraded it notes to restart the SSH service which it does on the very last
00:25:38.640
line there if it needs to so that's cool right I didn't put in
00:25:43.740
Shell scripts without having to think about it this is the part where if you're a
00:25:49.260
puppet or Chef Shop already you can use puppet and Chef still in
00:25:55.200
production but uh but use blueprint and development and uh
00:26:01.080
the end result here is that you get the great workflow yet your operators are still happy that there's puppet and Chef
00:26:06.900
code so the puppet code looks something like this it's um
00:26:12.120
pretty much human readable it follows the coding standards and it provides a lot of hooks to be able to grab just the
00:26:18.720
subset of functionality you want should that become necessary and again it follows the algorithm for applying a
00:26:24.840
blueprint by declaring the order of dependencies along the way
00:26:32.279
here is the generated Chef code which is uh actually in Ruby a special API given
00:26:40.020
to Chef recipes and likewise applying those same three resources it follows the coding standards and it performs
00:26:45.960
them in the algorithmic order and if you gave this to your your operators
00:26:52.260
or your guy in charge of Chef or puppet he really wouldn't know the difference between a between this and human written
00:26:58.500
stuff yes
00:27:09.419
it's about the development workflow not about the particular text format or
00:27:14.880
anything like that so it's about the fact that you a developer don't have to ask operations or
00:27:22.200
deal with deal directly with puppet or Chef code to make changes to how the environment works
00:27:30.059
um so there is the generated Chef code it's awesome because it looks like a human wrote it and a machine did
00:27:38.520
um if you're not already using puppet or Chef though I'd encourage you to think about using blueprint through and
00:27:44.100
through and uh and one real cool thing we can do is since there's a cloud
00:27:50.760
service where you can push and pull blueprints we have an API endpoint there that can
00:27:56.760
generate Shell Code for the blueprint remotely which means you can download it analogous to a blueprint pool you can
00:28:03.120
download the Shell Code from the server directly and not have to install blueprint so you can do like this and I
00:28:09.480
apologize for the tiny font you can set a cron tab up to download the Shell Code
00:28:16.020
for your blueprint directly and pipe it to Shell so with one cron tab you've reinvented the the hourly compliance run
00:28:24.240
that puppet and Chef run demons for just right there and this means that when your definition
00:28:31.500
of what it is to be a web server or a database server or an app or whatever else changes everybody brings themselves
00:28:38.640
into compliance automatically as that definition is pushed
00:28:43.679
and the the last thing that we do uh that I think is especially cool is
00:28:48.980
interacting with ec2 and providing this sort of shim to allow straight ec2 users
00:28:56.340
or cloud formation users to immediately bootstrap new servers with a
00:29:01.919
given blueprint and so instead of the food.sh endpoint from a moment ago if you grab userdata.sh you get this little
00:29:08.940
shim that at first boot will launch download and launch the blueprint of
00:29:14.820
your choice to configure a server and make it ready to go yeah
00:29:25.140
it does not currently do that it's something I'm interested in adding
00:29:30.659
however um
00:29:40.679
yes the um in uh let's see in a system where you're
00:29:48.120
if you're uninstalling system packages or you're adding especially downgrading
00:29:53.760
a ruby gem since you can have multiple versions of rubygems those are the two cases where it could bite you
00:30:00.600
um in practice that doesn't tend to happen because people tend to upgrade rubygems
00:30:06.299
and people tend to just not rely if a system package should be uninstalled they tend
00:30:12.659
to just not rely on it anymore so it hasn't come up but it's something that I would like to make better
00:30:19.399
and that's one good piece of future work the others that I'm thinking about are
00:30:24.480
bringing some notion of modularity to the blueprints so that your common functionality across all your types of
00:30:30.960
servers can be in one blueprint and the extra special things that make each server unique can be in their own
00:30:37.500
Blueprints and in addition to that we're always adding new resource types new service providers new package providers
00:30:43.799
so if you've got features we're not supporting yet please submit bugs and tell us about it
00:30:49.020
and uh that's all so if there are more questions bring them on
00:30:54.539
yes
00:31:06.120
so um you caught me in a little bit of a lie it'll totally work on OSX and if we
00:31:11.820
built a package provider for Homebrew we would be able to extract that information very easily the problem is
00:31:18.120
nobody's deploying to OSX so there's not you know we'd have to maintain a mapping of what the Homebrew package name
00:31:24.480
actually means in Debian or red hat and that's that's the hard part and you know
00:31:29.580
it's just it's manual labor that we don't have the resources to do anybody else
00:31:35.880
yes
00:31:52.559
um there's some of that that's true and there's some of that that's not um
00:31:58.080
I think it needs to be a pretty collaborative process and the part that I think is is most of a
00:32:05.520
bottleneck is the evolution not the um and I guess this is the classic
00:32:11.279
argument The Operators want stability so nothing can change the developers want everything to change because they want new features and the middle ground is a
00:32:19.200
place where a developer can add a dependency in a in a real documented understandable way Say by pushing a new
00:32:25.740
version of a blueprint and an operator can understand and perhaps even reply with their own revisions to the
00:32:32.279
blueprint how that change should have been implemented can be implemented better or clean up the mess necessary to
00:32:39.000
actually make it work yes
00:33:11.460
so part of so part of the the process of provisioning one on a new server would
00:33:18.659
be knowing the host name or IP address and what blueprint should be applied and
00:33:25.440
um it's it's definitely outside of the scope of blueprint itself to be kind of an auto scaling uh feedback loop but
00:33:33.899
either through the pushing the git repository that blueprint keeps all of its data in to say your CI server or
00:33:41.700
your your build server or using the push and pull service directly one of those will give you the raw
00:33:48.360
material to configure a new box and then it's a matter of using either the shell download or blueprint show dash s
00:33:55.440
to generate the code that can bring up a new server with the correct configuration
00:34:00.480
but the feedback loop is something people Implement hundreds of different ways outside the scope of config
00:34:06.600
management yep puppets
00:34:29.399
um well with the exception of getting puppet on those nodes that's pretty much correct they're they're headed to a
00:34:35.159
world where uh you have a pool of unallocated servers and puppet can pick
00:34:40.919
one with the appropriate specs to fill a role as needed and that's that's been
00:34:45.960
the real long-term goal of puppet and they're just now getting to the point where that's feasible
00:34:51.960
and even then only on ec2 so far anyone else
00:35:01.020
looks like a no thanks guys
00:35:19.920
foreign