This Ruby library can be used in a Rakefile to manage infrastructure stacks. It makes use of the cloudspin-stack gem for the actual stack management code. The ideas behind this are documented (somewhat) in that project.
This is a prototype for an infrastructure project delivery framework. It is intended as a basis for exploring project structures, conventions, and functionality, but is not currently in a stable state.
Feel free to copy and use this, but be prepared to extend and modify it in order to make it useful for your own project. There isn't likely to be a clean path to upgrade your projects as this thing evolves - my assumption is that nobody else is directly depending on this code or the gems I've published from it.
I'm using spin-stack-network as an example of an infrastructure stack project to make use of this framework. I may add other projects in the future as the tool is developed.
Add this line to your application's Gemfile:
gem 'cloudspin-stack-rake'
And then execute:
bundle
Or install it yourself as:
gem install cloudspin-stack-rake
Here's a snippet from a Rakefile:
require 'cloudspin/stack/rake'
namespace :stack do
namespace 'test-network' do
Cloudspin::Stack::Rake::StackTask.new(id: 'test-network')
end
end
If you run rake -T
you'll see a list of tasks:
rake stack:test-network:down # Destroy stack test-network
rake stack:test-network:dry # Show command line to be run for stack test-network
rake stack:test-network:plan # Plan changes to stack test-network
rake stack:test-network:up # Create or update stack test-network
You can also add inspec test tasks. The Rakefile snippet:
require 'cloudspin/stack/rake'
namespace :stack do
namespace 'test-network' do
stack = Cloudspin::Stack::Rake::StackTask.new(id: 'test-network').instance
Cloudspin::Stack::Rake::InspecTask.new(stack_instance: stack,
inspec_target: 'aws://eu-west-1/assume-spin_stack_manager-skeleton')
end
end
This includes the stack management tasks from the first example, but adds a new one when you run rake -T
:
rake stack:test-network:inspec # Run inspec tests
This assumes you have a folder ./inspec
with profile and controls in it.
For convenience, you can add a top level task to your Rakefile that creates a stack, runs inspec, and then destroys it:
desc 'Create, test, and destroy the stack'
task :full_test => [
:'stack:test-network:up',
:'stack:test-network:inspec',
:'stack:test-network:down'
]
You can then simply run rake full_test
to do this.
Again, spin-stack-network has an example of this, and is likely to move ahead of this documentation.
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/cloudspin-stack-rake.
This project makes extensive use of ideas and code from Toby Clemson and Jimmy Thompson, particularly infrablocks. I've also benefited from feedback on implementation concepts from Vincenzo Fabrizi, and other ThoughtWorkers.