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.



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.



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 capabilities the stack is granted. Currently CAPABILITY_IAM for allowing the creation of IAM resources.



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



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.

Options Hash (options):

  • StackName (String)

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

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.



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.



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.

Options Hash (options):

  • StackName (String)

    Name of the stack for the change set.

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.

Options Hash (options):

  • NextToken (String)

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

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.



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.



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.

Options Hash (options):

  • StackName (String)

    Name of the stack to describe.

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



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.

Options Hash (options):

  • StackName (String)

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

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.



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.



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.



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.

Options Hash (options):

  • StackName (String)

    Name of the stack to describe.

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.

Options Hash (options):

  • StackName (String)

    Name of the stack to describe.

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.



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



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.



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.



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.

Options Hash (options):

  • TemplateBody (String)

    template structure

  • TemplateURL (String)

    template url

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