Package: houston
Easy docker stack deployment toCoreOSclusters usingFleetandConsul.Houston installs as a command-line application and is meant to be used for automated
deployment of Dockerized application stacks.Houston deployments allow for files to be placed onto the host OS, the deployment
of dependency containers, confirmed startup of a container using Consul, and
teardown of previous container versions in a single run.InstallationHouston may be installed via thePython package indexwith the tool of your choice:pipinstallhoustonDocumentationDocumentation is available onReadTheDocs.There is also anexample configuration directory.Deployment TypesHouston has 3 deployment types: global, standalone stacks, and services. All three types allow for file archive deployments[1]using acloud-init stylewrite_filessection.Global deployments place a single list of units intended to be shared across all or a majority of CoreOS instances.Standalone deployments are like the global deployment but allows for more targeted deployments with file archives deployed first.Service deployments allow for the deployment of a single unit and the shared units that it is dependent uponUsage ExampleExample of deploying a full stack application:$ houston -c config -e test-us-east-1 example 7b7d061b
INFO     Deploying example-file-deploy@11bede3c.service
INFO     Deploying example-memcached@1.4.24.service
INFO     Deploying example-nginx@35f9e1f3.service
INFO     Deploying example-consul-template-nginx@d3bac01d.service
INFO     Deploying example-pgbouncer@f20fb494.service
INFO     Deploying example-consul-template-pgbouncer@d3bac01d.service
INFO     Deploying example-datadog@ff444e66.service
INFO     Deploying example@7b7d061b.service
INFO     example@7b7d061b.service has started
INFO     Validated service is running with Consul
INFO     Destroying example@b67b4317.service
INFO     Deployment of example 7b7d061b and its dependencies successful.
INFO     Eagle, looking great. You're Go.When executed, houston creates a tarball of files from theservice’s file manifestand uploads it to Consul’s KV database. It then deploys a dynamically created systemd unit to fleet,
which pulls the tarball from Consul and extracts the files to the CoreOS filesystem.In the next step, it iterates through the dependency containers specified in themanifest, submitting and starting each unit, waiting
until a unit is listed asactivein systemd for all nodes, and then
moves on to the next.One the dependency containers have started, it starts the example service,
waiting for systemd to report it as active. It then queries Consul for the version
of the service that has started, ensuring that it is running on all the expected
nodes that fleet says it has deployed it to.Once a deployment has been confirmed, it looks at all units submitted to fleet,
checking to see if there are other versions of containers running than what it deployed.
If so, it will destroy those other containers with fleet.Finally it will check to see if any other file archive versions exist in Consul’s for the
service, removing them if so.One of the more interesting parts for managing stack deployment is the namespacing
of the shared stack elements in fleet, so that updating one stack does not impact
another.  For example, in the configuration, a service may be referred to as onlypgbouncer:f20fb494, but when deployed it will be prefixed and versioned
appropriately asexample-pgbouncer@f20fb494if the service name isexample.Version HistoryAvailable athttps://houston.readthedocs.org/en/latest/history.html[1]Global file deployments happen after the unit files are deployed so that Consul can be up and running prior to the placement of the global files.