Module: Stackdeploy

Defined in:
lib/stackdeploy.rb,
lib/stackdeploy/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.runObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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/stackdeploy.rb', line 6

def self.run
  region = ARGV[0]
  stack_name = ARGV[1]
  param_name = ARGV[2]
  param_value = ARGV[3]

  if !region || !stack_name || !param_name || !param_value
    puts "Usage: stackdeploy region stack param value"
    exit(1)
  end

  puts "Updating stack #{stack_name} in #{region} with parameter #{param_name}=\"#{param_value}\""

  cloudformation = Aws::CloudFormation::Client.new(region: region)
  stacks = cloudformation.describe_stacks(stack_name: stack_name)
  stack = stacks.stacks[0]

  if !stack
    puts "Stack #{stack} not found."
    exit(1)
  end

  options = {
    stack_name: stack_name,
    use_previous_template: true,
    parameters: [],
    capabilities: ["CAPABILITY_IAM"],
    notification_arns: stack.notification_arns
  }

  stack.parameters.each do |param|
    options_param = {
      parameter_key: param.parameter_key
    }

    if param.parameter_key == param_name
      options_param[:parameter_value] = param_value
      options_param[:use_previous_value] = false
      param.use_previous_value = false
    else
      options_param[:parameter_value] = nil
      options_param[:use_previous_value] = true
    end

    options[:parameters] << options_param
  end

  begin
    response = cloudformation.update_stack(options)
  rescue Aws::CloudFormation::Errors::ValidationError => e
    puts "Update failed: #{e}"
    exit(1)
  end

  if response.successful?
    puts "Update requested successfully."
  else
    puts "Update request failed."
    exit(1)
  end
end