Cloud Posse

Geodesic Design

An Opinionated Framework

We designed this shell as the last layer of abstraction. It stitches all the tools together like make, aws-cli, kops, helm, kubectl, and terraform. As time progresses,
there will undoubtedly be even more that come into play. For this reason, we chose to use a combination of bash and make which together are ideally suited to combine the strengths of all these wonderful tools into one powerful shell, without raising the barrier to entry too high.

For the default environment variables, check out Dockerfile. We believe using ENVs this way is both consistent with the "cloud" (12 Factor Pattern) way of doing things, as well as a clear way of communicating what values are being passed without using a complicated convention. Additionally, you can set & forget these ENVs in your shell.

Layout Inside the Shell

We leverage as many semantics of the linux shell as we can to make the experience as frictionless as possible.



is where shell profiles are stored (like aliases). These are executed when the shell starts.


is where all bash completion scripts are kept and sourced when the shell starts.


has some helper scripts like init-terraform or s3 to manage fstab for remote s3 filesystems.


is the current "Message of the Day"


is where we configure the S3 filesystems we should mount


is where we house the local state (like your temporary AWS credentials). This is your native $HOME directory mounted into the container.


is where we mount S3 buckets; these files are never written to disk and only kept in memory for security

Extending the Shell

Geodesic was written to be easily extended by leveraging Docker inheritance. This will let you add or modify any core functionality and easily upgrade between releases.

You can easily extend the Geodesic shell by creating your own Git repo with a Dockerfile. Simply have your Dockerfile inherit FROM geodesic:latest (or we recommend to pin it to a release for stability).

Inside your docker image, you can replace any of our code with your own to make it behave exactly as you wish. We recommend creating one dedicated repo per cluster with configurations tailored specifically for that cluster.

Want to add additional aliases or affect the shell? Drop your script in /etc/profile.d and it will be loaded automatically when the shell starts.

As you can see, you can easily change almost any aspect of how the shell works simply by extending it.

What's Next

Quick Start

Geodesic Quick Start

Geodesic Design