Class: Gantree::Update

Inherits:
Base
  • Object
show all
Defined in:
lib/gantree/update.rb

Instance Method Summary collapse

Methods inherited from Base

#authenticate_librato, #cfm, #check_credentials, check_for_updates, #check_template_bucket, #create_default_env, #eb, #env_type, #error_msg, #escape_characters_in_string, #get_latest_docker_solution, #print_options, #s3, #set_aws_keys, #tag, update_configuration, #upload_templates

Constructor Details

#initialize(stack_name, options) ⇒ Update

Returns a new instance of Update.



6
7
8
9
10
11
12
13
14
# File 'lib/gantree/update.rb', line 6

def initialize stack_name,options
  check_credentials
  set_aws_keys
  @options = options
  @options[:stack_name] = stack_name 
  @options[:env] ||= create_default_env
  @options[:env_type] ||= env_type
  @templates = ['master','resources','beanstalk']
end

Instance Method Details

#add_role(name) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/gantree/update.rb', line 42

def add_role name
  env = @options[:env].sub('app', name)
  beanstalk = JSON.parse(IO.read("cfn/#{@options[:stack_name]}-beanstalk.cfn.json"))
  unless beanstalk["Resources"][name] then
    role = {
      "Type" => "AWS::ElasticBeanstalk::Environment",
      "Properties"=> {
        "ApplicationName" => "#{@options[:stack_name]}",
        "EnvironmentName" => "#{env}",
        "Description" => "#{name} Environment",
        "TemplateName" => {
          "Ref" => "ConfigurationTemplate"
        },
        "OptionSettings" => []
      }
    }
    #puts JSON.pretty_generate role
    beanstalk["Resources"]["#{name}".to_sym] = role
    IO.write("cfn/#{@options[:stack_name]}-beanstalk.cfn.json", JSON.pretty_generate(beanstalk)) unless @options[:dry_run]
    puts JSON.pretty_generate(beanstalk["Resources"].to_a.last)
    puts "Added new #{name} role".green
  else 
    puts "Role already exists".red
  end
end

#change_solution_stackObject



29
30
31
32
33
34
35
36
# File 'lib/gantree/update.rb', line 29

def change_solution_stack 
  beanstalk = JSON.parse(IO.read("cfn/#{@options[:stack_name]}-beanstalk.cfn.json"))
  solution_stack = set_solution_stack
  beanstalk["Resources"]["ConfigurationTemplate"]["Properties"]["SolutionStackName"] = solution_stack
  beanstalk["Resources"]["ConfigurationTemplate"]["Properties"]["Description"] = solution_stack
  IO.write("cfn/#{@options[:stack_name]}-beanstalk.cfn.json",JSON.pretty_generate(beanstalk))
  puts "Updated solution to #{solution_stack}".green
end

#runObject



16
17
18
19
20
21
22
23
# File 'lib/gantree/update.rb', line 16

def run
  puts "Updating stack from local cfn repo"
  add_role @options[:role] if @options[:role]
  change_solution_stack if @options[:solution]
  return if @options[:dry_run]
  upload_templates
  puts "Stack Updated".green if cfm.stacks[@options[:stack_name]].update(:template => stack_template)
end

#set_solution_stackObject



38
39
40
# File 'lib/gantree/update.rb', line 38

def set_solution_stack
  @options[:solution] == "latest" ? get_latest_docker_solution : @options[:solution]
end

#stack_templateObject



25
26
27
# File 'lib/gantree/update.rb', line 25

def stack_template
  s3.buckets["#{@options[:cfn_bucket]}/#{@stack_name}"].objects["#{@stack_name}-master.cfn.json"]
end