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:
parent
6fa29c714e
commit
87f1a789a2
9 changed files with 392 additions and 0 deletions
|
@ -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
|
||||
|
||||
request_path 'fog/aws/requests/cloud_formation'
|
||||
request :create_change_set
|
||||
request :create_stack
|
||||
request :update_stack
|
||||
request :delete_change_set
|
||||
request :delete_stack
|
||||
request :describe_change_set
|
||||
request :describe_stack_events
|
||||
request :describe_stack_resources
|
||||
request :describe_stacks
|
||||
request :execute_change_set
|
||||
request :get_template
|
||||
request :validate_template
|
||||
request :list_change_sets
|
||||
request :list_stacks
|
||||
request :list_stack_resources
|
||||
|
||||
|
|
16
lib/fog/aws/parsers/cloud_formation/create_change_set.rb
Normal file
16
lib/fog/aws/parsers/cloud_formation/create_change_set.rb
Normal 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
|
136
lib/fog/aws/parsers/cloud_formation/describe_change_set.rb
Normal file
136
lib/fog/aws/parsers/cloud_formation/describe_change_set.rb
Normal 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
|
30
lib/fog/aws/parsers/cloud_formation/list_change_sets.rb
Normal file
30
lib/fog/aws/parsers/cloud_formation/list_change_sets.rb
Normal 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
|
70
lib/fog/aws/requests/cloud_formation/create_change_set.rb
Normal file
70
lib/fog/aws/requests/cloud_formation/create_change_set.rb
Normal 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
|
26
lib/fog/aws/requests/cloud_formation/delete_change_set.rb
Normal file
26
lib/fog/aws/requests/cloud_formation/delete_change_set.rb
Normal 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
|
43
lib/fog/aws/requests/cloud_formation/describe_change_set.rb
Normal file
43
lib/fog/aws/requests/cloud_formation/describe_change_set.rb
Normal 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
|
26
lib/fog/aws/requests/cloud_formation/execute_change_set.rb
Normal file
26
lib/fog/aws/requests/cloud_formation/execute_change_set.rb
Normal 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
|
40
lib/fog/aws/requests/cloud_formation/list_change_sets.rb
Normal file
40
lib/fog/aws/requests/cloud_formation/list_change_sets.rb
Normal 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
|
Loading…
Reference in a new issue