class CfnVpn::Deployer
Public Class Methods
new(region,name)
click to toggle source
# File lib/cfnvpn/deployer.rb, line 10 def initialize(region,name) @name = name @stack_name = "#{@name}-cfnvpn" @client = Aws::CloudFormation::Client.new(region: region) end
Public Instance Methods
create_change_set(template_body: nil, parameters: {})
click to toggle source
# File lib/cfnvpn/deployer.rb, line 32 def create_change_set(template_body: nil, parameters: {}) change_set_name = "#{@stack_name}-#{CfnVpn::CHANGE_SET_VERSION}-#{Time.now.utc.strftime("%Y%m%d%H%M%S")}" change_set_type = get_change_set_type() if !template_body.nil? params = get_parameters_from_template(template_body) else params = get_parameters_from_stack() end params.each do |param| if !parameters[param[:parameter_key]].nil? param[:parameter_value] = parameters[param[:parameter_key]] param[:use_previous_value] = false end end changeset_args = { stack_name: @stack_name, parameters: params, tags: [ { key: "cfnvpn:version", value: CfnVpn::VERSION, }, { key: "cfnvpn:name", value: @name, } ], change_set_name: change_set_name, change_set_type: change_set_type, capabilities: ['CAPABILITY_IAM'] } if !template_body.nil? changeset_args[:template_body] = template_body else changeset_args[:use_previous_template] = true end CfnVpn::Log.logger.debug "Creating changeset" change_set = @client.create_change_set(changeset_args) return change_set, change_set_type end
does_cf_stack_exist()
click to toggle source
TODO: check for REVIEW_IN_PROGRESS
# File lib/cfnvpn/deployer.rb, line 17 def does_cf_stack_exist() begin resp = @client.describe_stacks({ stack_name: @stack_name, }) rescue Aws::CloudFormation::Errors::ValidationError return false end return resp.size > 0 end
execute_change_set(change_set_id)
click to toggle source
# File lib/cfnvpn/deployer.rb, line 95 def execute_change_set(change_set_id) CfnVpn::Log.logger.debug "Executing the changeset" stack = @client.execute_change_set({ change_set_name: change_set_id }) end
get_change_set(change_set_id)
click to toggle source
# File lib/cfnvpn/deployer.rb, line 89 def get_change_set(change_set_id) @client.describe_change_set({ change_set_name: change_set_id, }) end
get_change_set_type()
click to toggle source
# File lib/cfnvpn/deployer.rb, line 28 def get_change_set_type() return does_cf_stack_exist() ? 'UPDATE' : 'CREATE' end
get_outputs_from_stack()
click to toggle source
# File lib/cfnvpn/deployer.rb, line 133 def get_outputs_from_stack() resp = @client.describe_stacks({ stack_name: @stack_name, }) stack = resp.stacks.first return Hash[stack.outputs.collect {|output| [output.output_key.underscore.to_sym, output.output_value]}] end
get_parameter_value(parameter)
click to toggle source
# File lib/cfnvpn/deployer.rb, line 118 def get_parameter_value(parameter) resp = @client.describe_stacks({ stack_name: @stack_name }) stack = resp.stacks.first parameter = stack.parameters.detect {|p| p.parameter_key == parameter} return parameter ? parameter.parameter_value : nil end
get_parameters_from_stack()
click to toggle source
# File lib/cfnvpn/deployer.rb, line 108 def get_parameters_from_stack() resp = @client.get_template_summary({ stack_name: @stack_name }) return resp.parameters.collect { |p| { parameter_key: p.parameter_key, use_previous_value: true } } end
get_parameters_from_stack_hash()
click to toggle source
# File lib/cfnvpn/deployer.rb, line 125 def get_parameters_from_stack_hash() resp = @client.describe_stacks({ stack_name: @stack_name, }) stack = resp.stacks.first return Hash[stack.parameters.collect {|parameter| [parameter.parameter_key.to_sym, parameter.parameter_value]}] end
get_parameters_from_template(template_body)
click to toggle source
# File lib/cfnvpn/deployer.rb, line 113 def get_parameters_from_template(template_body) resp = @client.get_template_summary({ template_body: template_body }) return resp.parameters.collect { |p| { parameter_key: p.parameter_key, parameter_value: p.default_value } } end
wait_for_changeset(change_set_id)
click to toggle source
# File lib/cfnvpn/deployer.rb, line 78 def wait_for_changeset(change_set_id) CfnVpn::Log.logger.debug "Waiting for changeset to be created" begin @client.wait_until :change_set_create_complete, change_set_name: change_set_id rescue Aws::Waiters::Errors::FailureStateError => e change_set = get_change_set(change_set_id) CfnVpn::Log.logger.error("change set status: #{change_set.status} reason: #{change_set.status_reason}") exit 1 end end
wait_for_execute(change_set_type)
click to toggle source
# File lib/cfnvpn/deployer.rb, line 102 def wait_for_execute(change_set_type) waiter = change_set_type == 'CREATE' ? :stack_create_complete : :stack_update_complete CfnVpn::Log.logger.info "Waiting for changeset to #{change_set_type}" resp = @client.wait_until waiter, stack_name: @stack_name end