Cloudspin rake task reference
Installing the gem in your project
To use the cloudspin rake tasks, you’ll need to add a Gemfile and Rakefile to your project. The Gemfile should add the
bundle install to actually install the gems into your project. This will create a
Gemfile.lock file, which you can add to your project in source control so that consistent versions of the gems are used wherever the project is checked out and run.
Basic rake tasks for a single stack instance
By creating an instance of the ruby StackTask class in your Rakefile, a set of tasks are created to manage a stack instance.
require 'cloudspin/stack/rake' Cloudspin::Stack::Rake::StackTask.new(id: 'test-network').instance
This assumes that the
./src/stack-definition.yaml exists. It will also look for
./stack-instance-local.yaml, and use these for parameters to pass to terraform. If the Terraform source code under
./src declares variables without defaults, they will need to be declared in one of these files.
Simplifying StackTask declarations
If you include the module in your rakefile, the code to declare the tasks becomes simpler, which helps if you go beyond the very simple example:
require 'cloudspin/stack/rake' include Cloudspin::Stack::Rake StackTask.new(id: 'test-network').instance
In the above example, the tasks are created in the root namespace. But as you add more things to your rakefile, namespaces are useful to organize code and tasks. Simply wrap the StackTask declaration in a namespace:
require 'rake/clean' require 'cloudspin/stack/rake' CLEAN.include('work') CLEAN.include('build') CLOBBER.include('state') include Cloudspin::Stack::Rake namespace :network do StackTask.new(id: 'test-network').instance end
This makes the task list a bit more organized:
$ rake -T rake clean # Remove any temporary products rake clobber # Remove any generated files rake network:down # Destroy stack test-network rake network:dry # Show command line to be run for stack test-network rake network:plan # Plan changes to stack test-network rake network:up # Create or update stack test-network
Inspec task for testing
The cloudspin-stack-rake library includes a task for running Inspec tests against a stack instance. It assumes the inspec profile(s) are in
Including the inspec task in the rakfile:
include Cloudspin::Stack::Rake stack = StackTask.new(id: 'test-network').instance InspecTask.new(stack_instance: stack)
All stack instance attributes (as described in the project structure reference guide) defined for the stack instance to be tested are made available as Inspec attributes, so they can be used in tests.
aws_region = attribute('region', description: 'aws region') describe aws_region do it 'region attribute should be available' do expect(subject).not_to eq('') end end
Files generated by the inspec task:
An inspec attribute file is automatically generated in
The log output from the inspec run, including stack traces, is generated in
./work/inspec/results-for-stack-INSTANCE_NAME-profile-PROFILE_NAME.json. PROFILE_NAME is set in the inspec profile file (