# Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License"). You# may not use this file except in compliance with the License. A copy of# the License is located at## http://aws.amazon.com/apache2.0/## or in the "license" file accompanying this file. This file is# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF# ANY KIND, either express or implied. See the License for the specific# language governing permissions and limitations under the License.moduleAWSclassCloudFormationclassStackCollectionincludeCore::Collection::SimpleincludeStackOptions# @privatedefinitializeoptions={}@status_filter=options[:status_filter]superend# Creates a new stack.## @example Creating a stack with a template string.## template = <<-JSON# {# "AWSTemplateFormatVersion" : "2010-09-09",# "Description": "A simple template",# "Resources": {# "web": {# "Type": "AWS::EC2::Instance",# "Properties": {# "ImageId": "ami-41814f28"# }# }# }# }# JSON# stack = cfm.stacks.create('stack-name', template)## @example Creating a stack from an S3 object.## template = AWS::S3.new.buckets['templates'].objects['template-1']# stack = cfm.stacks.create('stack-name', template)## @example Creating a stack with 3 parameters.## template = <<-JSON# {# "AWSTemplateFormatVersion" : "2010-09-09",# "Description": "A simple template",# "Parameters" : {# "KeyName" : {# "Description" : "Name of a KeyPair to use with SSH.",# "Type" : "String"# },# "SecurityGroup" : {# "Description" : "The security group to launch in.",# "Type" : "String"# },# "InstanceType" : {# "Description" : "The size of instance to launch.",# "Type" : "String"# }# },# "Resources": {# "web": {# "Type": "AWS::EC2::Instance",# "Properties": {# "InstanceType": { "Ref" : "InstanceType" },# "SecurityGroups" : [ {"Ref" : "SecurityGroup"} ],# "KeyName": { "Ref" : "KeyName" },# "ImageId": "ami-41814f28"# }# }# }# }# JSON## stack = cfm.stacks.create('name', template, :parameters => {# 'KeyName' => 'key-pair-name',# 'SecurityGroup' => 'security-group-name',# 'InstanceType' => 'm1.large',# })# # @param [String] stack_name## @param [String,URI,S3::S3Object,Object] template The stack template.# This may be provided in a number of formats including:## * a String, containing the template as a JSON document.# * a URL String pointing to the document in S3.# * a URI object pointing to the document in S3.# * an {S3::S3Object} which contains the template.# * an Object which responds to #to_json and returns the template.## @param [Hash] options## @option options [Array<String>] :capabilities The list of capabilities# that you want to allow in the stack. If your stack contains IAM # resources, you must specify the CAPABILITY_IAM value for this # parameter; otherwise, this action returns an # InsufficientCapabilities error. IAM resources are the following: ## * AWS::IAM::AccessKey# * AWS::IAM::Group# * AWS::IAM::Policy# * AWS::IAM::User# * AWS::IAM::UserToGroupAddition## @option options [Boolean] :disable_rollback (false)# Set to true to disable rollback on stack creation failures.## @option options [Object] :notify One or more SNS topics ARN# string or {SNS::Topic} objects. This param may be passed# as a single value or as an array. CloudFormation will publish # stack related events to these topics.## @option options [Hash] :parameters A hash that specifies the# input parameters of the new stack.## @option options [Integer] :timeout The number of minutes # that may pass before the stack creation fails. If # +:disable_rollback+ is false, the stack will be rolled back.## @return [Stack]#defcreatestack_name,template,options={}client_opts=options.dupclient_opts[:template]=templateapply_stack_name(stack_name,client_opts)apply_template(client_opts)apply_disable_rollback(client_opts)apply_notification_arns(client_opts)apply_parameters(client_opts)apply_timeout(client_opts)resp=client.create_stack(client_opts)Stack.new(stack_name,:config=>config,:stack_id=>resp.stack_id)enddef[]stack_nameStack.new(stack_name,:config=>config)end# Limits the stacks that are enumerated.## cloud_formation.stacks.with_status(:create_complete).each do |stack|# puts stack.name# end# # @param [Symbol,String] status_filter A status to filter stacks with.# Valid values include:# * +:create_in_progress+# * +:create_failed+# * +:create_complete+# * +:rollback_in_progress+# * +:rollback_failed+# * +:rollback_complete+# * +:delete_in_progress+# * +:delete_failed+# * +:delete_complete+# * +:update_in_progress+# * +:update_complete_cleanup_in_progress+# * +:update_complete+# * +:update_rollback_in_progress+# * +:update_rollback_failed+# * +:update_rollback_complete_cleanup_in_progress+# * +:update_rollback_complete+## @return [StackCollection] Returns a new stack collection that# filters the stacks returned by the given status.#defwith_statusstatus_filterStackCollection.new(:status_filter=>status_filter,:config=>config)endprotecteddef_each_itemoptions={}client.describe_stacks.data[:stacks].eachdo|summary|stack=Stack.new_from(:describe_stacks,summary,summary[:stack_name],:config=>config)yield(stack)endendendendend