1
0
Fork 0
mirror of https://github.com/fog/fog-aws.git synced 2022-11-09 13:50:52 -05:00

change sets

This commit is contained in:
Neill Turner 2016-09-12 09:39:51 +01:00
parent 6fa29c714e
commit 87f1a789a2
9 changed files with 392 additions and 0 deletions

View file

@ -7,14 +7,19 @@ module Fog
recognizes :host, :path, :port, :scheme, :persistent, :region, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name recognizes :host, :path, :port, :scheme, :persistent, :region, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
request_path 'fog/aws/requests/cloud_formation' request_path 'fog/aws/requests/cloud_formation'
request :create_change_set
request :create_stack request :create_stack
request :update_stack request :update_stack
request :delete_change_set
request :delete_stack request :delete_stack
request :describe_change_set
request :describe_stack_events request :describe_stack_events
request :describe_stack_resources request :describe_stack_resources
request :describe_stacks request :describe_stacks
request :execute_change_set
request :get_template request :get_template
request :validate_template request :validate_template
request :list_change_sets
request :list_stacks request :list_stacks
request :list_stack_resources request :list_stack_resources

View file

@ -0,0 +1,16 @@
module Fog
module Parsers
module AWS
module CloudFormation
class CreateChangeSet < Fog::Parsers::Base
def end_element(name)
case name
when 'RequestId', 'Id'
@response[name] = value
end
end
end
end
end
end
end

View file

@ -0,0 +1,136 @@
module Fog
module Parsers
module AWS
module CloudFormation
class DescribeChangeSet < Fog::Parsers::Base
def reset
#@change_set = fresh_change_set
@response = fresh_change_set
reset_parameter
reset_change
reset_resource_change
reset_resource_change_detail
reset_resource_target_definition
end
def reset_parameter
@parameter = {}
end
def reset_change
@change = {}
end
def reset_resource_change
@resource_change = {'Details' => [], 'Scope' => [] }
end
def reset_resource_change_detail
@resource_change_detail = {}
end
def reset_resource_target_definition
@resource_target_definition = {}
end
def fresh_change_set
{'Capabilities' => [], 'Changes' => [], 'NotificationARNs' => [], 'Parameters' => [], 'Tags' => []}
end
def start_element(name, attrs=[])
super
case name
when 'Capabilities'
@in_capabilities = true
when 'Changes'
@in_changes = true
when 'ResourceChange'
@in_resource_change = true
when 'Scope'
@in_scope = true
when 'Details'
@in_details = true
when 'Target'
@in_target = true
when 'NotificationARNs'
@in_notification_arns = true
when 'Parameters'
@in_parameters = true
when 'Tags'
@in_tags = true
end
end
def end_element(name)
case name
when 'ChangeSetId', 'ChangeSetName', 'Description', 'ExecutionStatus', 'StackId', 'StackName', 'StatusReason'
@response[name] = value
when 'CreationTime'
@response[name] = Time.parse(value)
when 'member'
if @in_capabilities
@response['Capabilities'] << value
elsif @in_scope
@resource_change['Scope'] << value
elsif @in_notification_arns
@response['NotificationARNs'] << value
elsif @in_parameters
@response['Parameters'] << @parameter
reset_parameter
elsif @in_tags
@response['Tags'] << @tag
reset_tag
elsif @in_details
@resource_change['Details'] << @resource_change_detail
reset_resource_change_detail
elsif @in_changes
@response['Changes'] << @change
reset_change
end
when 'ParameterValue', 'ParameterKey'
@parameter[name] = value if @in_parameters
when 'Parameters'
@in_parameters = false
when 'Value', 'Key'
@tag[name] = value if @in_tags
when 'Tags'
@in_tags = false
when 'Capabilities'
@in_capabilities = false
when 'Scope'
@in_scope = false
when 'NotificationARNs'
@in_notification_arns = false
when 'Type'
@change[name] = value if @in_changes
when 'Changes'
@in_changes = false
when 'ResourceChange'
if @in_resource_change
@change[name] = @resource_change
@in_resource_change = false
end
when 'Action','LogicalResourceId','PhysicalResourceId','Replacement','ResourceType'
@resource_change[name] = value if @in_resource_change
when 'Details'
@in_details = false
when 'CausingEntity','ChangeSource','Evaluation'
if @in_details
@resource_change_detail[name] = value
end
when 'Attribute','Name','RequiresRecreation'
if @in_target
@resource_target_definition[name] = value
end
when 'Target'
if @in_target
@resource_change_detail[name] = @resource_target_definition
@in_target = false
end
end
end
end
end
end
end
end

View file

@ -0,0 +1,30 @@
module Fog
module Parsers
module AWS
module CloudFormation
class ListChangeSets < Fog::Parsers::Base
def reset
@change_set = {}
@response = { 'Summaries' => [] }
end
def end_element(name)
case name
when 'ChangeSetId', 'ChangeSetName', 'Description', 'ExecutionStatus', 'StackId', 'StackName', 'Status', 'StackReason'
@change_set[name] = value
when 'member'
@response['Summaries'] << @change_set
@change_set = {}
when 'RequestId'
@response[name] = value
when 'CreationTime'
@change_set[name] = Time.parse(value)
when 'NextToken'
@response[name] = value
end
end
end
end
end
end
end

View file

@ -0,0 +1,70 @@
module Fog
module AWS
class CloudFormation
class Real
require 'fog/aws/parsers/cloud_formation/create_change_set'
# Create a Change Set.
#
# * stack_name [String] Name of the stack to create.
# * options [Hash]:
# * ChangeSetName [String] The name of the change set.
# * Description [String] A description to help you identify this change set.
# * TemplateBody [String] Structure containing the template body.
# or (one of the two Template parameters is required)
# * TemplateURL [String] URL of file containing the template body.
# * UsePreviousTemplate [Boolean] Reuse the template that is associated with the stack to create the change set.
# * NotificationARNs [Array] List of SNS topics to publish events to.
# * Parameters [Hash] Hash of providers to supply to template.
#
# @return [Excon::Response]:
# * body [Hash:
# * Id [String] - The Amazon Resource Name (ARN) of the change set
#
# @see http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_CreateChangeSet.html
def create_change_set(stack_name, options = {})
params = {
'StackName' => stack_name,
}
if options['ChangeSetName']
params['ChangeSetName'] = options['ChangeSetName']
end
if options['Description']
params['Description'] = options['Description']
end
if options['UsePreviousTemplate']
params['UsePreviousTemplate'] = options['UsePreviousTemplate']
end
if options['NotificationARNs']
params.merge!(Fog::AWS.indexed_param("NotificationARNs.member", [*options['NotificationARNs']]))
end
if options['Parameters']
options['Parameters'].keys.each_with_index do |key, index|
index += 1 # params are 1-indexed
params.merge!({
"Parameters.member.#{index}.ParameterKey" => key,
"Parameters.member.#{index}.ParameterValue" => options['Parameters'][key]
})
end
end
if options['TemplateBody']
params['TemplateBody'] = options['TemplateBody']
elsif options['TemplateURL']
params['TemplateURL'] = options['TemplateURL']
end
request({
'Action' => 'CreateChangeSet',
:parser => Fog::Parsers::AWS::CloudFormation::CreateChangeSet.new
}.merge!(params))
end
end
end
end
end

View file

@ -0,0 +1,26 @@
module Fog
module AWS
class CloudFormation
class Real
require 'fog/aws/parsers/cloud_formation/basic'
# Delete a change set.
#
# @param ChangeSetName [String] The name of the change set to delete.
# @option options StackName [String] The Stack name or ID (ARN) that is associated with change set.
#
# @return [Excon::Response]
#
# @see http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_DeleteChangeSet.html
def delete_change_set(change_set_name, options = {})
options['ChangeSetName'] = change_set_name
request({
'Action' => 'DeleteChangeSet',
:parser => Fog::Parsers::AWS::CloudFormation::Basic.new
}.merge!(options))
end
end
end
end
end

View file

@ -0,0 +1,43 @@
module Fog
module AWS
class CloudFormation
class Real
require 'fog/aws/parsers/cloud_formation/describe_change_set'
# Describe change_set.
#
# * ChangeSetName [String] The name of the change set to describe.
# @param options [Hash]
# @option options StackName [String] Name of the stack for the change set.
#
# @return [Excon::Response]
# * body [Hash]:
# * ChangeSetId [String] -
# * ChangeSetName [String] -
# * Description [String] -
# * CreationTime [Time] -
# * ExecutionStatus [String] -
# * StackId [String] -
# * StackName [String] -
# * Status [String] -
# * StackReason [String] -
# * NotificationARNs [Array] -
# * NotificationARN [String] -
# * Parameters [Array] -
# * parameter [Hash]:
# * ParameterKey [String] -
# * ParameterValue [String] -
#
# @see http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_DescribeChangeSet.html
def describe_change_set(change_set_name, options = {})
options['ChangeSetName'] = change_set_name
request({
'Action' => 'DescribeChangeSet',
:parser => Fog::Parsers::AWS::CloudFormation::DescribeChangeSet.new
}.merge!(options))
end
end
end
end
end

View file

@ -0,0 +1,26 @@
module Fog
module AWS
class CloudFormation
class Real
require 'fog/aws/parsers/cloud_formation/basic'
# Execute a change set.
#
# @param ChangeSetName [String] The name of the change set to delete.
# @option options StackName [String] The Stack name or ID (ARN) that is associated with change set.
#
# @return [Excon::Response]
#
# @see http://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_ExecuteChangeSet.html
def execute_change_set(change_set_name, options = {})
options['ChangeSetName'] = change_set_name
request({
'Action' => 'ExecuteChangeSet',
:parser => Fog::Parsers::AWS::CloudFormation::Basic.new
}.merge!(options))
end
end
end
end
end

View file

@ -0,0 +1,40 @@
module Fog
module AWS
class CloudFormation
class Real
require 'fog/aws/parsers/cloud_formation/list_change_sets'
# List change sets.
#
# @param stack_name String] Name or the ARN of the stack for which you want to list change sets.
#
# @option options StackName [String] Name of the stack to describe.
#
# @return [Excon::Response]
# * body [Hash]:
# * Summaries [Array] - Matching change sets
# * stack [Hash]:
# * ChangeSetId [String] -
# * ChangeSetName [String] -
# * Description [String] -
# * CreationTime [Time] -
# * ExecutionStatus [String] -
# * StackId [String] -
# * StackName [String] -
# * Status [String] -
# * StackReason [String] -
#
#
# @see http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListChangeSets.html
def list_change_sets(stack_name, options = {})
request({
'Action' => 'ListChangeSets',
'StackName' => stack_name,
:parser => Fog::Parsers::AWS::CloudFormation::ListChangeSets.new
}.merge!(options))
end
end
end
end
end