Class: Fog::AWS::CloudFormation::Real

Inherits:
Object
  • Object
show all
Includes:
Fog::AWS::CredentialFetcher::ConnectionMethods
Defined in:
lib/fog/aws/cloud_formation.rb,
lib/fog/aws/requests/cloud_formation/list_stacks.rb,
lib/fog/aws/requests/cloud_formation/create_stack.rb,
lib/fog/aws/requests/cloud_formation/delete_stack.rb,
lib/fog/aws/requests/cloud_formation/get_template.rb,
lib/fog/aws/requests/cloud_formation/update_stack.rb,
lib/fog/aws/requests/cloud_formation/describe_stacks.rb,
lib/fog/aws/requests/cloud_formation/signal_resource.rb,
lib/fog/aws/requests/cloud_formation/get_stack_policy.rb,
lib/fog/aws/requests/cloud_formation/list_change_sets.rb,
lib/fog/aws/requests/cloud_formation/set_stack_policy.rb,
lib/fog/aws/requests/cloud_formation/create_change_set.rb,
lib/fog/aws/requests/cloud_formation/delete_change_set.rb,
lib/fog/aws/requests/cloud_formation/validate_template.rb,
lib/fog/aws/requests/cloud_formation/execute_change_set.rb,
lib/fog/aws/requests/cloud_formation/cancel_update_stack.rb,
lib/fog/aws/requests/cloud_formation/describe_change_set.rb,
lib/fog/aws/requests/cloud_formation/get_template_summary.rb,
lib/fog/aws/requests/cloud_formation/list_stack_resources.rb,
lib/fog/aws/requests/cloud_formation/describe_stack_events.rb,
lib/fog/aws/requests/cloud_formation/estimate_template_cost.rb,
lib/fog/aws/requests/cloud_formation/describe_account_limits.rb,
lib/fog/aws/requests/cloud_formation/describe_stack_resource.rb,
lib/fog/aws/requests/cloud_formation/continue_update_rollback.rb,
lib/fog/aws/requests/cloud_formation/describe_stack_resources.rb

Instance Method Summary collapse

Methods included from Fog::AWS::CredentialFetcher::ConnectionMethods

#refresh_credentials_if_expired

Constructor Details

#initialize(options = {}) ⇒ Real

Initialize connection to CloudFormation

Notes

options parameter must include values for :aws_access_key_id and :aws_secret_access_key in order to create a connection

Examples

cf = CloudFormation.new(
 :aws_access_key_id => your_aws_access_key_id,
 :aws_secret_access_key => your_aws_secret_access_key
)

Parameters

  • options<~Hash> - config arguments for connection. Defaults to {}.

Returns

  • CloudFormation object with connection to AWS.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/fog/aws/cloud_formation.rb', line 60

def initialize(options={})

  @use_iam_profile = options[:use_iam_profile]

  @instrumentor       = options[:instrumentor]
  @instrumentor_name  = options[:instrumentor_name] || 'fog.aws.cloud_formation'
  @connection_options = options[:connection_options] || {}
  options[:region] ||= 'us-east-1'
  @region = options[:region]
  @host = options[:host] || "cloudformation.#{options[:region]}.amazonaws.com"
  @path       = options[:path]        || '/'
  @persistent = options[:persistent]  || false
  @port       = options[:port]        || 443
  @scheme     = options[:scheme]      || 'https'
  @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)

  setup_credentials(options)
end

Instance Method Details

#cancel_update_stack(stack_name) ⇒ Excon::Response

Cancels an update on the specified stack.

Parameters:

  • stack_name

    String] Name of the stack to cancel update.

Returns:

  • (Excon::Response)

See Also:



15
16
17
18
19
20
21
# File 'lib/fog/aws/requests/cloud_formation/cancel_update_stack.rb', line 15

def cancel_update_stack(stack_name)
  request(
    'Action'    => 'CancelUpdateStack',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::Basic.new
  )
end

#continue_update_rollback(stack_name) ⇒ Excon::Response

For a specified stack that is in the UPDATE_ROLLBACK_FAILED state, continues rolling it back to the UPDATE_ROLLBACK_COMPLETE state.

Parameters:

  • stack_name (String)

    The name or the unique ID of the stack that you want to continue rolling back.

Returns:

  • (Excon::Response)

See Also:



16
17
18
19
20
21
22
# File 'lib/fog/aws/requests/cloud_formation/continue_update_rollback.rb', line 16

def continue_update_rollback(stack_name)
  request(
    'Action'    => 'ContinueUpdateRollback',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::Basic.new
  )
end

#create_change_set(stack_name, options = {}) ⇒ Excon::Response

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.

    • Capabilities [Array] List of capabilties the stack is granted. Currently CAPABILITY_IAM for allowing the creation of IAM resources.

Returns:

  • (Excon::Response)

    :

    • body [Hash:

      • Id [String] - The Amazon Resource Name (ARN) of the change set

See Also:



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
67
68
69
70
71
# File 'lib/fog/aws/requests/cloud_formation/create_change_set.rb', line 27

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

  if options['Capabilities']
    params.merge!(Fog::AWS.indexed_param("Capabilities.member", [*options['Capabilities']]))
  end

  request({
    'Action'    => 'CreateChangeSet',
    :parser     => Fog::Parsers::AWS::CloudFormation::CreateChangeSet.new
  }.merge!(params))
end

#create_stack(stack_name, options = {}) ⇒ Excon::Response

Create a stack.

  • stack_name [String] Name of the stack to create.

  • options [Hash]:

    • 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.

    • DisableRollback [Boolean] Controls rollback on stack creation failure, defaults to false.

    • OnFailure [String] Determines what action will be taken if stack creation fails. This must be one of: DO_NOTHING, ROLLBACK, or DELETE.

    • NotificationARNs [Array] List of SNS topics to publish events to.

    • Parameters [Hash] Hash of providers to supply to template

    • TimeoutInMinutes [Integer] Minutes to wait before status is set to CREATE_FAILED

    • Capabilities [Array] List of capabilties the stack is granted. Currently CAPABILITY_IAM for allowing the creation of IAM resources

    • StackPolicyBody [String] Structure containing the stack policy body.

    • StackPolicyURL [String] URL of file containing the stack policy.

    • Tags [Array] Key-value pairs to associate with this stack.

Returns:

  • (Excon::Response)

    :

    • body [Hash:

      • StackId [String] - Id of the new stack

See Also:



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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/fog/aws/requests/cloud_formation/create_stack.rb', line 30

def create_stack(stack_name, options = {})
  params = {
    'StackName' => stack_name,
  }

  if options['DisableRollback']
    params['DisableRollback'] = options['DisableRollback']
  end

  if options['OnFailure']
    params['OnFailure'] = options['OnFailure']
  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

  num_tags = 0
  if options['Tags']
    options['Tags'].keys.each_with_index do |key, index|
      index += 1 # tags are 1-indexed
      num_tags += 1 # 10 tag max

      params.merge!({
        "Tags.member.#{index}.Key"   => key,
        "Tags.member.#{index}.Value" => options['Tags'][key]
      })
    end
  end

  if num_tags > 10
    raise ArgumentError.new("a maximum of 10 tags can be specified <#{num_tags}>")
  end

  if options['TemplateBody']
    params['TemplateBody'] = options['TemplateBody']
  elsif options['TemplateURL']
    params['TemplateURL'] = options['TemplateURL']
  end

  if options['StackPolicyBody']
    params['StackPolicyBody'] = options['StackPolicyBody']
  elsif options['StackPolicyURL']
    params['StackPolicyURL'] = options['StackPolicyURL']
  end

  if options['TimeoutInMinutes']
    params['TimeoutInMinutes'] = options['TimeoutInMinutes']
  end

  if options['Capabilities']
    params.merge!(Fog::AWS.indexed_param("Capabilities.member", [*options['Capabilities']]))
  end

  request({
    'Action'    => 'CreateStack',
    :parser     => Fog::Parsers::AWS::CloudFormation::CreateStack.new
  }.merge!(params))
end

#delete_change_set(change_set_name, options = {}) ⇒ Excon::Response

Delete a change set.

Parameters:

  • ChangeSetName (String)

    The name of the change set to delete.

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • StackName (String)

    The Stack name or ID (ARN) that is associated with change set.

Returns:

  • (Excon::Response)

See Also:



16
17
18
19
20
21
22
# File 'lib/fog/aws/requests/cloud_formation/delete_change_set.rb', line 16

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

#delete_stack(stack_name) ⇒ Excon::Response

Delete a stack.

Parameters:

  • stack_name (String)

    Name of the stack to create.

Returns:

  • (Excon::Response)

See Also:



15
16
17
18
19
20
21
# File 'lib/fog/aws/requests/cloud_formation/delete_stack.rb', line 15

def delete_stack(stack_name)
  request(
    'Action'    => 'DeleteStack',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::Basic.new
  )
end

#describe_account_limitsExcon::Response

Describe account_limits.

Returns:

  • (Excon::Response)
    • body [Hash]:

      • AccountLimits [Array]

      • member [Hash]:

        • StackLimit [Integer]

See Also:



18
19
20
21
22
23
# File 'lib/fog/aws/requests/cloud_formation/describe_account_limits.rb', line 18

def ()
  request(
    'Action' => 'DescribeAccountLimits',
    :parser  => Fog::Parsers::AWS::CloudFormation::DescribeAccountLimits.new
  )
end

#describe_change_set(change_set_name, options = {}) ⇒ Excon::Response

Describe change_set.

  • ChangeSetName [String] The name of the change set to describe.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • StackName (String)

    Name of the stack for the change set.

Returns:

  • (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 Also:



33
34
35
36
37
38
39
# File 'lib/fog/aws/requests/cloud_formation/describe_change_set.rb', line 33

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

#describe_stack_events(stack_name, options = {}) ⇒ Excon::Response

Describe stack events.

Parameters:

  • stack_name (String)

    stack name to return events for.

  • options (Hash) (defaults to: {})

Options Hash (options):

  • NextToken (String)

    Identifies the start of the next list of events, if there is one.

Returns:

  • (Excon::Response)
    • body [Hash]:

      • StackEvents [Array] - Matching resources

        • event [Hash]:

          • EventId [String] -

          • StackId [String] -

          • StackName [String] -

          • LogicalResourceId [String] -

          • PhysicalResourceId [String] -

          • ResourceType [String] -

          • Timestamp [Time] -

          • ResourceStatus [String] -

          • ResourceStatusReason [String] -

See Also:



29
30
31
32
33
34
35
# File 'lib/fog/aws/requests/cloud_formation/describe_stack_events.rb', line 29

def describe_stack_events(stack_name, options = {})
  request({
    'Action'    => 'DescribeStackEvents',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::DescribeStackEvents.new
  }.merge!(options))
end

#describe_stack_resource(logical_resource_id, stack_name) ⇒ Excon::Response

Describe stack resource.

Parameters:

  • options

    Hash]:

    • LogicalResourceId [String] Logical name of the resource as specified in the template

    • StackName [String] The name or the unique stack ID

Returns:

  • (Excon::Response)
    • body [Hash]:

      • StackResourceDetail [Hash] - Matching resources

        *Description [String] -
        * LastUpdatedTimestamp [Timestamp] -
        * LogicalResourceId [String] -
        * Metadata [String] -
        * PhysicalResourceId [String] -
        * ResourceStatus [String] -
        * ResourceStatusReason [String] -
        * ResourceType [String] -
        * StackId [String] -
        * StackName [String] -
        

See Also:



29
30
31
32
33
34
35
36
# File 'lib/fog/aws/requests/cloud_formation/describe_stack_resource.rb', line 29

def describe_stack_resource(logical_resource_id, stack_name )
  request(
    'Action'    => 'DescribeStackResource',
    'LogicalResourceId' => logical_resource_id,
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::DescribeStackResource.new
  )
end

#describe_stack_resources(options = {}) ⇒ Excon::Response

Describe stack resources.

Parameters:

  • options (defaults to: {})

    Hash]:

    • PhysicalResourceId [String] name or unique identifier that corresponds to a physical instance ID

    or (one of PhysicalResourceId and StackName is required)

    • StackName [String] Only return events related to this stack name

    • LogicalResourceId [String] Logical name of the resource as specified in the template

Returns:

  • (Excon::Response)
    • body [Hash]:

      • StackResources [Array] - Matching resources

        • resource [Hash]:

          • StackId [String] -

          • StackName [String] -

          • LogicalResourceId [String] -

          • PhysicalResourceId [String] -

          • ResourceType [String] -

          • Timestamp [Time] -

          • ResourceStatus [String] -

See Also:



29
30
31
32
33
34
# File 'lib/fog/aws/requests/cloud_formation/describe_stack_resources.rb', line 29

def describe_stack_resources(options = {})
  request({
    'Action'    => 'DescribeStackResources',
    :parser     => Fog::Parsers::AWS::CloudFormation::DescribeStackResources.new
  }.merge!(options))
end

#describe_stacks(options = {}) ⇒ Excon::Response

Describe stacks.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • StackName (String)

    Name of the stack to describe.

Returns:

  • (Excon::Response)
    • body [Hash]:

      • Stacks [Array] - Matching stacks

        • stack [Hash]:

          • StackName [String] -

          • StackId [String] -

          • CreationTime [String] -

          • StackStatus [String] -

          • DisableRollback [String] -

          • Outputs [Array] -

            • output [Hash]:

              • OutputKey [String] -

              • OutputValue [String] -

See Also:



28
29
30
31
32
33
# File 'lib/fog/aws/requests/cloud_formation/describe_stacks.rb', line 28

def describe_stacks(options = {})
  request({
    'Action'    => 'DescribeStacks',
    :parser     => Fog::Parsers::AWS::CloudFormation::DescribeStacks.new
  }.merge!(options))
end

#estimate_template_cost(options = {}) ⇒ Excon::Response

Returns the estimated monthly cost of a template.

  • options [Hash]:

    • 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.

    • Parameters [Hash] Hash of providers to supply to template

Returns:

  • (Excon::Response)

    :

    • body [Hash:

      • Url [String] - An AWS Simple Monthly Calculator URL with a query string that describes the resources required to run the template.

See Also:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/fog/aws/requests/cloud_formation/estimate_template_cost.rb', line 21

def estimate_template_cost(options = {})
  params = {}

  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'    => 'EstimateTemplateCost',
    :parser     => Fog::Parsers::AWS::CloudFormation::EstimateTemplateCost.new
  }.merge!(params))
end

#execute_change_set(change_set_name, options = {}) ⇒ Excon::Response

Execute a change set.

Parameters:

  • ChangeSetName (String)

    The name of the change set to delete.

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • StackName (String)

    The Stack name or ID (ARN) that is associated with change set.

Returns:

  • (Excon::Response)

See Also:



16
17
18
19
20
21
22
# File 'lib/fog/aws/requests/cloud_formation/execute_change_set.rb', line 16

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

#get_stack_policy(stack_name) ⇒ Excon::Response

Describe stacks.

Parameters:

  • stack_name (String)

    The name or unique stack ID that is associated with the stack whose policy you want to get.

Returns:

  • (Excon::Response)
    • body [Hash]:

      • StackPolicyBody [String] - Structure containing the stack policy body.

See Also:



17
18
19
20
21
22
23
# File 'lib/fog/aws/requests/cloud_formation/get_stack_policy.rb', line 17

def get_stack_policy(stack_name)
  request(
    'Action'    => 'GetStackPolicy',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::GetStackPolicy.new
  )
end

#get_template(stack_name) ⇒ Excon::Response

Describe stacks.

Parameters:

  • stack_name (String)

    stack name to get template from

Returns:

  • (Excon::Response)
    • body [Hash]:

      • TemplateBody [String] - structure containing the template body (json)

See Also:



17
18
19
20
21
22
23
# File 'lib/fog/aws/requests/cloud_formation/get_template.rb', line 17

def get_template(stack_name)
  request(
    'Action'    => 'GetTemplate',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::GetTemplate.new
  )
end

#get_template_summary(options = {}) ⇒ Excon::Response

Returns information about a new or existing template.

  • options [Hash]:

    • stack_name [String] Name of the stack or the stack ID.

    or

    • TemplateBody [String] Structure containing the template body.

    or

    • TemplateURL [String] URL of file containing the template body.

Returns:

  • (Excon::Response)

    :

    • body [Hash:

      • Capabilities [Array] List of capabilties in the template.

      • CapabilitiesReason [String] The list of resources that generated the values in the Capabilities response element.

      • Description [String] Template Description.

      • Metadata [String] Template Metadata.

      • Parameters [Array] A list of parameter declarations that describe various properties for each parameter.

      • ResourceTypes [Array] all the template resource types that are defined in the template

See Also:



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fog/aws/requests/cloud_formation/get_template_summary.rb', line 27

def get_template_summary(options = {})
  params = {}

  if options['StackName']
    params['StackName'] = options['StackName']
  elsif options['TemplateBody']
    params['TemplateBody'] = options['TemplateBody']
  elsif options['TemplateURL']
    params['TemplateURL'] = options['TemplateURL']
  end

  request({
    'Action'    => 'GetTemplateSummary',
    :parser     => Fog::Parsers::AWS::CloudFormation::GetTemplateSummary.new
  }.merge!(params))
end

#list_change_sets(stack_name, options = {}) ⇒ Excon::Response

List change sets.

Parameters:

  • stack_name

    String] Name or the ARN of the stack for which you want to list change sets.

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • StackName (String)

    Name of the stack to describe.

Returns:

  • (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 Also:



30
31
32
33
34
35
36
# File 'lib/fog/aws/requests/cloud_formation/list_change_sets.rb', line 30

def list_change_sets(stack_name, options = {})
  request({
    'Action'    => 'ListChangeSets',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::ListChangeSets.new
  }.merge!(options))
end

#list_stack_resources(options = {}) ⇒ Excon::Response

List stack resources.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • StackName (String)

    Name of the stack to describe.

Returns:

  • (Excon::Response)
    • body [Hash]:

      • StackResourceSummaries [Array] - Matching stacks

        • resources [Hash]:

          • ResourceStatus [String] -

          • LogicalResourceId [String] -

          • PhysicalResourceId [String] -

          • ResourceType [String] -

          • LastUpdatedTimestamp [Time] -

See Also:



25
26
27
28
29
30
# File 'lib/fog/aws/requests/cloud_formation/list_stack_resources.rb', line 25

def list_stack_resources(options = {})
  request({
    'Action'    => 'ListStackResources',
    :parser     => Fog::Parsers::AWS::CloudFormation::ListStackResources.new
  }.merge!(options))
end

#list_stacks(options = {}) ⇒ Excon::Response

List stacks.

Parameters:

  • options (Hash) (defaults to: {})

Returns:

  • (Excon::Response)
    • body [Hash]:

      • StackSummaries [Array] - Matching stacks

        • stack [Hash]:

          • StackId [String] -

          • StackName [String] -

          • TemplateDescription [String] -

          • CreationTime [Time] -

          • DeletionTime [Time] -

          • StackStatus [String] -

          • DeletionTime [String] -

See Also:



26
27
28
29
30
31
# File 'lib/fog/aws/requests/cloud_formation/list_stacks.rb', line 26

def list_stacks(options = {})
  request({
    'Action'    => 'ListStacks',
    :parser     => Fog::Parsers::AWS::CloudFormation::ListStacks.new
  }.merge!(options))
end

#reloadObject



79
80
81
# File 'lib/fog/aws/cloud_formation.rb', line 79

def reload
  @connection.reset
end

#set_stack_policy(stack_name, options = {}) ⇒ Excon::Response

Sets a stack policy for a specified stack.

  • options [Hash]:

    • StackPolicyBody [String] Structure containing the stack policy body.

    or (one of the two StackPolicy parameters is required)

    • StackPolicyURL [String] URL of file containing the stack policy.

    • Parameters [Hash] Hash of providers to supply to StackPolicy

Parameters:

  • stack_name (String)

    Name or unique stack ID that you want to associate a policy with.

Returns:

  • (Excon::Response)

    :

See Also:



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/fog/aws/requests/cloud_formation/set_stack_policy.rb', line 20

def set_stack_policy(stack_name, options = {})
  params = {}

  if options['StackPolicyBody']
    params['StackPolicyBody'] = options['StackPolicyBody']
  elsif options['StackPolicyURL']
    params['StackPolicyURL'] = options['StackPolicyURL']
  end

  request({
    'Action'    => 'SetStackPolicy',
    'StackName' => stack_name,
    :parser     => Fog::Parsers::AWS::CloudFormation::Basic.new
  }.merge!(params))
end

#signal_resource(logical_resource_id, stack_name, status, unique_id) ⇒ Excon::Response

Sends a signal to the specified resource.

Parameters:

  • options

    Hash]:

    • LogicalResourceId [String] The logical ID of the resource that you want to signal.

    • StackName [String] The stack name or unique stack ID that includes the resource that you want to signal.

    • Status [String] The status of the signal, which is either success or failure.

    • UniqueId [String] A unique ID of the signal.

Returns:

  • (Excon::Response)

See Also:



19
20
21
22
23
24
25
26
27
28
# File 'lib/fog/aws/requests/cloud_formation/signal_resource.rb', line 19

def signal_resource(logical_resource_id, stack_name, status, unique_id )
  request(
    'Action'    => 'SignalResource',
    'LogicalResourceId' => logical_resource_id,
    'StackName' => stack_name,
    'Status' => status,
    'UniqueId' => unique_id,
    :parser     => Fog::Parsers::AWS::CloudFormation::Basic.new
  )
end

#update_stack(stack_name, options = {}) ⇒ Excon::Response

Update a stack.

Parameters:

  • stack_name (String)

    Name of the stack to update.

  • options (Hash) (defaults to: {})
    • 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.

    • Parameters [Hash] Hash of providers to supply to template.

    • Capabilities [Array] List of capabilties the stack is granted. Currently CAPABILITY_IAM for allowing the creation of IAM resources.

    • NotificationARNs [Array] List of SNS topics to publish events to.

    • ResourceTypes [Array] The template resource types that you have permissions to work.

    • StackPolicyBody [String] Structure containing the stack policy body.

    • StackPolicyURL [String] URL of file containing the stack policy.

    • StackPolicyDuringUpdateBody [String] Structure containing the stack policy body to use during update.

    • StackPolicyDuringUpdateURL [String] URL of file containing the stack policy to use during update.

    • Tags [Array] Key-value pairs to associate with this stack.

    • UsePreviousTemplate [Boolean] Reuse the existing template that is associated with the stack that you are updating.

Returns:

  • (Excon::Response)
    • body [Hash]:

      • StackId [String] - Id of the stack being updated

See Also:



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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/fog/aws/requests/cloud_formation/update_stack.rb', line 31

def update_stack(stack_name, options = {})
  params = {
    'StackName' => stack_name,
  }

  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

  if options['StackPolicyBody']
    params['StackPolicyBody'] = options['StackPolicyBody']
  elsif options['StackPolicyURL']
    params['StackPolicyURL'] = options['StackPolicyURL']
  end

  if options['StackPolicyDuringUpdateBody']
    params['StackPolicyDuringUpdateBody'] = options['StackPolicyDuringUpdateBody']
  elsif options['StackPolicyDuringUpdateURL']
    params['StackPolicyDuringUpdateURL'] = options['StackPolicyDuringUpdateURL']
  end

  num_tags = 0
  if options['Tags']
    options['Tags'].keys.each_with_index do |key, index|
      index += 1 # tags are 1-indexed
      num_tags += 1 # 10 tag max

      params.merge!({
        "Tags.member.#{index}.Key"   => key,
        "Tags.member.#{index}.Value" => options['Tags'][key]
      })
    end
  end

  if num_tags > 10
    raise ArgumentError.new("a maximum of 10 tags can be specified <#{num_tags}>")
  end

  if options['Capabilities']
    params.merge!(Fog::AWS.indexed_param("Capabilities.member", [*options['Capabilities']]))
  end

  if options['NotificationARNs']
    params.merge!(Fog::AWS.indexed_param("NotificationARNs.member", [*options['NotificationARNs']]))
  end

  if options['ResourceTypes']
    params.merge!(Fog::AWS.indexed_param("ResourceTypes.member", [*options['ResourceTypes']]))
  end

  if options['UsePreviousTemplate']
    params['UsePreviousTemplate'] = options['UsePreviousTemplate']
  end

  request({
    'Action'    => 'UpdateStack',
    :parser     => Fog::Parsers::AWS::CloudFormation::UpdateStack.new
  }.merge!(params))
end

#validate_template(options = {}) ⇒ Excon::Response

Describe stacks.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • TemplateBody (String)

    template structure

  • TemplateURL (String)

    template url

Returns:

  • (Excon::Response)
    • body [Hash]:

      • Description [String] - description found within the template

      • Parameters [String] - list of template parameter structures

See Also:



20
21
22
23
24
25
# File 'lib/fog/aws/requests/cloud_formation/validate_template.rb', line 20

def validate_template(options = {})
  request({
    'Action'    => 'ValidateTemplate',
    :parser     => Fog::Parsers::AWS::CloudFormation::ValidateTemplate.new
  }.merge!(options))
end