It takes us too long to spin up a new project.
A tool that will allow us to create a new project with varying components from scratch with minimal configuration.
- Each piece of the system can be independently run if the paramaters for that piece are already known.
- Each piece of the system can be replaced by pre-configuring that piece's output
- Each project will have differently-configured stacks.
- The system should automate everything we do in the first ~2 days that can be reasonably automated
- Each piece of the system should be replaceable by another piece of the same type (I can swap in a Linode component for an EC2 component without major hullabaloo)
- The system should be written in such a way that new steps are easily added or removed.
- A user can interface with the system through either the command-line or ruby
Keep in mind that this isn't a spec for what the configuration must look like. These are examples of projects that should be easily generated with whatever system we create. I am simply using the config style used by the existing opsworks code to demonstrate the point.
# Generates a project named 'easyreader'
# Generates 4 different repos: A Rails API, an AngularjS app served by NodeJS, an iOS app, an Android app.
# Creates a development environment for each repo
# Spins up a staging environment for a rails API using postgresql and an angularjs app served by nodejs
{
:app_name => 'easyreader',
:domain_name => 'easyreader.com',
:github_access_token => 'XXXXXXX',
:github_account => 'cloudspace',
:private_repo => false,
:is_organization => true,
:aws_key => 'XXXXXXX',
:aws_secret => 'XXXXXXXXXXXXXX',
:data_store => 'postgresql',
:back_end => 'rails',
:front_end => ['angularjs', 'ios', 'android']
}
# Generates a project named 'Onager'
# Generates 1 repo: A Rails app
# Creates a development environment for each repo
# Spins up a staging environment for a rails app using postgresql
{
:app_name => 'Onager',
:domain_name => 'onager.cloudspace.com',
:github_access_token => 'XXXXXXX',
:github_account => 'cloudspace',
:private_repo => false,
:is_organization => true,
:aws_key => 'XXXXXXX',
:aws_secret => 'XXXXXXXXXXXXXX',
:data_store => 'postgresql',
:back_end => 'rails',
:front_end => 'rails'
}
# Generates a project named 'crunchinator'
# Generates 2 different repos: A Rails API, an AngularJS app served by NodeJS
# Creates a development environment for each repo
# Spins up a staging environment for a rails API using postgresql and an angularjs app running on nodejs
{
:app_name => 'easyreader',
:domain_name => 'easyreader.com',
:github_access_token => 'XXXXXXX',
:github_account => 'cloudspace',
:private_repo => false,
:is_organization => true,
:aws_key => 'XXXXXXX',
:aws_secret => 'XXXXXXXXXXXXXX',
:data_store => 'postgresql',
:back_end => 'rails',
:front_end => ['angularjs']
}