class Stackr::Cli
Public Class Methods
source_root()
click to toggle source
# File lib/stackr/cli.rb, line 45 def self.source_root File.join(File.dirname(__FILE__),'..','..') end
Public Instance Methods
create_change_set(template_name)
click to toggle source
# File lib/stackr/cli.rb, line 202 def create_change_set(template_name) return if !validate_template(template_name) template = load_template(template_name) if !template say "There is no template named \'#{template_name}\'." return end change_set_name = options[:change_set_name] || "new-#{template.name}" stack_name = options[:stack_name] || template.name launcher = Stackr::CloudFormation.new say "Creating CloudFormation stack change set #{change_set_name} from template #{template.name} for stack #{stack_name}\n" begin sets = launcher.create_change_set(stack_name, template, change_set_name, options) rescue Stackr::StackMissingError => e say e.message rescue Stackr::StackUpdateNotRequiredError => e say e.message rescue Stackr::InsufficientCapabilitiesError => e say e.message end end
create_project(name)
click to toggle source
# File lib/stackr/cli.rb, line 50 def create_project(name) @project_name = name say "Creating stackr project: #{name}\n" directory 'templates/project', name end
create_stack(template_name)
click to toggle source
TODO: log parameters and their values
# File lib/stackr/cli.rb, line 115 def create_stack(template_name) return if !validate_template(template_name) template = load_template(template_name) if !template say "There is no template named \'#{template_name}\'." return end name = options[:name] || template.name launcher = Stackr::CloudFormation.new say "Creating CloudFormation stack #{name} from template #{template.name}\n" begin launcher.create_stack(template, options) rescue Stackr::StackAlreadyExistsError => e say e.message end end
create_template(name)
click to toggle source
# File lib/stackr/cli.rb, line 59 def create_template(name) @template_name = name say "Creating template generator #{name}\n" template 'templates/generator.rb.tt', File.join(templates_path, "#{name}.rb") end
delete_change_set(change_set_name)
click to toggle source
# File lib/stackr/cli.rb, line 274 def delete_change_set(change_set_name) launcher = Stackr::CloudFormation.new stack_name = options[:stack_name] begin launcher.delete_change_set(change_set_name, stack_name) rescue Stackr::ChangeSetMissingError => e say e.message return rescue Stackr::StackNameMissingError => e say e.message return end say "Change set #{change_set_name} deleted." end
delete_stack(stack_name)
click to toggle source
# File lib/stackr/cli.rb, line 166 def delete_stack(stack_name) say "Deleting CloudFormation stack #{stack_name}\n" launcher = Stackr::CloudFormation.new begin launcher.delete_stack(stack_name) rescue Stackr::StackMissingError => e say e.message end end
execute_change_set(change_set_name)
click to toggle source
# File lib/stackr/cli.rb, line 294 def execute_change_set(change_set_name) launcher = Stackr::CloudFormation.new stack_name = options[:stack_name] begin launcher.execute_change_set(change_set_name, stack_name) rescue Stackr::ChangeSetMissingError => e say e.message return rescue Stackr::StackNameMissingError => e say e.message return end say "Change set #{change_set_name} executed" end
generate_template(template_name)
click to toggle source
# File lib/stackr/cli.rb, line 67 def generate_template(template_name) template = load_template(template_name) if !template say "There is no template named \'#{template_name}\'." return end json_file = json_template_path(template_name) say "Writing #{template_name} to #{json_file}\n" File.open(json_file, 'w') do |f| f.write(template.body) end end
json_template_path(name)
click to toggle source
# File lib/stackr/cli.rb, line 23 def json_template_path(name) File.join(templates_path, "#{name}.json") end
list_change_sets(stack_name)
click to toggle source
# File lib/stackr/cli.rb, line 228 def list_change_sets(stack_name) launcher = Stackr::CloudFormation.new begin sets = launcher.list_change_sets(stack_name) rescue Stackr::StackMissingError => e say e.message return end rows = [] sets.each do |set| rows << [ set.change_set_name, set.creation_time, set.execution_status, set.status ] end print_table rows end
list_stacks()
click to toggle source
# File lib/stackr/cli.rb, line 178 def list_stacks launcher = Stackr::CloudFormation.new rows = [] launcher.list_stacks.each do |stack| rows << [ stack.name, stack.stack_status, stack.creation_time ? stack.creation_time.iso8601 : '', stack.last_updated_time ? stack.last_updated_time.iso8601 : '' ] end print_table rows end
load_template(name)
click to toggle source
Only load the template the first time
# File lib/stackr/cli.rb, line 28 def load_template(name) if @template.nil? template_file = File.join(templates_path, "#{name}.rb") @template = Stackr::Template.load(template_file) end @template end
project_path()
click to toggle source
# File lib/stackr/cli.rb, line 11 def project_path @project_path || File.basename(Dir.getwd) end
project_path=(name)
click to toggle source
# File lib/stackr/cli.rb, line 7 def project_path=(name) @project_path = name end
show_change_set(change_set_name)
click to toggle source
# File lib/stackr/cli.rb, line 253 def show_change_set(change_set_name) launcher = Stackr::CloudFormation.new stack_name = options[:stack_name] begin set = launcher.show_change_set(change_set_name, stack_name) rescue Stackr::ChangeSetMissingError => e say e.message return rescue Stackr::StackNameMissingError => e say e.message return end require 'json' say JSON.pretty_generate(set) end
templates_path()
click to toggle source
# File lib/stackr/cli.rb, line 19 def templates_path() @templates_path || 'templates' end
templates_path=(path)
click to toggle source
# File lib/stackr/cli.rb, line 15 def templates_path=(path) @templates_path = path end
update_stack(template_name)
click to toggle source
TODO: log parameters and their values
# File lib/stackr/cli.rb, line 141 def update_stack(template_name) return if !validate_template(template_name) template = load_template(template_name) if !template say "There is no template named \'#{template_name}\'." return end name = options[:name] || template.name say "Updating CloudFormation stack #{name} from template #{template.name}\n" launcher = Stackr::CloudFormation.new begin launcher.update_stack(template, options) rescue Stackr::StackMissingError => e say e.message rescue Stackr::StackUpdateNotRequiredError => e say e.message rescue Stackr::InsufficientCapabilitiesError => e say e.message end end
validate_template(template_name)
click to toggle source
# File lib/stackr/cli.rb, line 84 def validate_template(template_name) template = load_template(template_name) if !template say "There is no template named \'#{template_name}\'." return end launcher = Stackr::CloudFormation.new begin launcher.validate_template(template) rescue Aws::S3::Errors::ServiceError => e say e.message return false else say "Template #{template_name} validates." return true end end
version()
click to toggle source
# File lib/stackr/cli.rb, line 39 def version say Stackr::VERSION end