1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 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 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
module Fog
module AWS
class AutoScaling
class Real
require 'fog/aws/parsers/auto_scaling/basic'
# Creates a new Auto Scaling group with the specified name. Once the
# creation request is completed, the AutoScalingGroup is ready to be
# used in other calls.
#
# ==== Parameters
# * auto_scaling_group_name<~String> - The name of the Auto Scaling
# group.
# * availability_zones<~Array> - A list of availability zones for the
# Auto Scaling group.
# * launch_configuration_name<~String> - The name of the launch
# configuration to use with the Auto Scaling group.
# * max_size<~Integer> - The maximum size of the Auto Scaling group.
# * min_size<~Integer> - The minimum size of the Auto Scaling group.
# * options<~Hash>:
# * 'DefaultCooldown'<~Integer> - The amount of time, in seconds,
# after a scaling activity completes before any further trigger-
# related scaling activities can start.
# * 'DesiredCapacity'<~Integer> - The number of Amazon EC2 instances
# that should be running in the group.
# * 'HealthCheckGracePeriod'<~Integer> - Length of time in seconds
# after a new Amazon EC2 instance comes into service that Auto
# Scaling starts checking its health.
# * 'HealthCheckType'<~String> - The service you want the health
# status from, Amazon EC2 or Elastic Load Balancer. Valid values
# are "EC2" or "ELB".
# * 'LoadBalancerNames'<~Array> - A list of LoadBalancers to use.
# * 'PlacementGroup'<~String> - Physical location of your cluster
# placement group created in Amazon EC2.
# * 'Tags'<~Array>:
# * tag<~Hash>:
# * 'Key'<~String> - The key of the tag.
# * 'PropagateAtLaunch'<~Boolean> - Specifies whether the new tag
# will be applied to instances launched after the tag is
# created. The same behavior applies to updates: If you change
# a tag, the changed tag will be applied to all instances
# launched after you made the change.
# * 'ResourceId'<~String>: The name of the AutoScaling group.
# * 'ResourceType'<~String>: The kind of resource to which the
# tag is applied. Currently, Auto Scaling supports the
# auto-scaling-group resource type.
# * 'Value'<~String>: The value of the tag.
# * 'TerminationPolicies'<~Array> - A standalone termination policy
# or a list of termination policies used to select the instance to
# terminate. The policies are executed in the order that they are
# listed.
# * 'VPCZoneIdentifier'<~String> - A comma-separated list of subnet
# identifiers of Amazon Virtual Private Clouds (Amazon VPCs).
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# * 'ResponseMetadata'<~Hash>:
# * 'RequestId'<~String> - Id of request
#
# ==== See Also
# http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_CreateAutoScalingGroup.html
#
ExpectedOptions[:create_auto_scaling_group] = %w[DefaultCooldown DesiredCapacity HealthCheckGracePeriod HealthCheckType LoadBalancerNames PlacementGroup Tags TerminationPolicies VPCZoneIdentifier]
def create_auto_scaling_group(auto_scaling_group_name, availability_zones, launch_configuration_name, max_size, min_size, options = {})
options.merge!(AWS.indexed_param('AvailabilityZones.member.%d', [*availability_zones]))
options.delete('AvailabilityZones')
if load_balancer_names = options.delete('LoadBalancerNames')
options.merge!(AWS.indexed_param('LoadBalancerNames.member.%d', [*load_balancer_names]))
end
if tags = options.delete('Tags')
options.merge!(AWS.indexed_param("Tags.member.%d", [*tags]))
end
if termination_policies = options.delete('TerminationPolicies')
options.merge!(AWS.indexed_param('TerminationPolicies.member.%d', [*termination_policies]))
end
request({
'Action' => 'CreateAutoScalingGroup',
'AutoScalingGroupName' => auto_scaling_group_name,
'LaunchConfigurationName' => launch_configuration_name,
'MaxSize' => max_size,
'MinSize' => min_size,
:parser => Fog::Parsers::AWS::AutoScaling::Basic.new
}.merge!(options))
end
end
class Mock
def create_auto_scaling_group(auto_scaling_group_name, availability_zones, launch_configuration_name, max_size, min_size, options = {})
unexpected_options = options.keys - ExpectedOptions[:create_auto_scaling_group]
unless unexpected_options.empty?
raise Fog::AWS::AutoScaling::ValidationError.new("Options #{unexpected_options.join(',')} should not be included in request")
end
if self.data[:auto_scaling_groups].key?(auto_scaling_group_name)
raise Fog::AWS::AutoScaling::IdentifierTaken.new("AutoScalingGroup by this name already exists - A group with the name #{auto_scaling_group_name} already exists")
end
unless self.data[:launch_configurations].key?(launch_configuration_name)
raise Fog::AWS::AutoScaling::ValidationError.new('Launch configuration name not found - null')
end
self.data[:auto_scaling_groups][auto_scaling_group_name] = {
'AutoScalingGroupARN' => Fog::AWS::Mock.arn('autoscaling', self.data[:owner_id], "autoScalingGroup:00000000-0000-0000-0000-000000000000:autoScalingGroupName/#{auto_scaling_group_name}", @region),
'AutoScalingGroupName' => auto_scaling_group_name,
'AvailabilityZones' => [*availability_zones],
'CreatedTime' => Time.now.utc,
'DefaultCooldown' => 300,
'DesiredCapacity' => 0,
'EnabledMetrics' => [],
'HealthCheckGracePeriod' => 0,
'HealthCheckType' => 'EC2',
'Instances' => [],
'LaunchConfigurationName' => launch_configuration_name,
'LoadBalancerNames' => [],
'MaxSize' => max_size,
'MinSize' => min_size,
'PlacementGroup' => nil,
'SuspendedProcesses' => [],
'Tags' => [],
'TargetGroupARNs' => [],
'TerminationPolicies' => ['Default'],
'VPCZoneIdentifier' => nil
}.merge!(options)
response = Excon::Response.new
response.status = 200
response.body = {
'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
}
response
end
end
end
end
end
|