aws-asg-fleet 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "aws-asg-fleet"
8
- spec.version = "0.0.1"
8
+ spec.version = "0.0.2"
9
9
  spec.authors = ["Zach Wily"]
10
10
  spec.email = ["zach@zwily.com"]
11
11
  spec.description = %q{AWS Auto Scaling Fleets}
@@ -59,16 +59,13 @@ module AWS
59
59
  old_lc = template_group.launch_configuration
60
60
  image_id = options[:image_id] || old_lc.image_id
61
61
  instance_type = options[:instance_type] || old_lc.instance_type
62
- [ :block_device_mappings, :detailed_instance_monitoring, :kernel_id,
62
+
63
+ options = Fleet.options_from(old_lc,
64
+ :block_device_mappings, :detailed_instance_monitoring, :kernel_id,
63
65
  :key_pair, :ramdisk_id, :security_groups, :user_data,
64
- :iam_instance_profile, :spot_price ].each do |k|
65
- existing_value = old_lc.send(k)
66
- next if existing_value == nil || existing_value == []
67
- options[k] ||= existing_value
68
- end
66
+ :iam_instance_profile, :spot_price).merge(options)
69
67
 
70
68
  launch_configurations = LaunchConfigurationCollection.new(:config => config)
71
- puts options
72
69
  new_lc = launch_configurations.create(name, image_id, instance_type, options)
73
70
 
74
71
  groups.each do |group|
@@ -78,6 +75,24 @@ module AWS
78
75
  new_lc
79
76
  end
80
77
 
78
+ # @private
79
+ # Collects non-nil, non-empty-array attributes from the supplied object
80
+ # into a Hash. Also converts any Array-like objects into real
81
+ # Arrays.
82
+ def self.options_from(obj, *attributes)
83
+ opts = {}
84
+ attributes.each do |key|
85
+ value = obj.send(key)
86
+ next if value.nil?
87
+ if value.is_a? Array
88
+ value = value.to_a
89
+ next if value.empty?
90
+ end
91
+ opts[key] ||= value
92
+ end
93
+ opts
94
+ end
95
+
81
96
  protected
82
97
 
83
98
  def resource_identifiers
@@ -39,7 +39,7 @@ module AWS
39
39
  ## Clone the group
40
40
  template_group = @fleet.template_group
41
41
 
42
- options = options_from(template_group,
42
+ options = Fleet.options_from(template_group,
43
43
  :load_balancers, :min_size, :max_size, :launch_configuration,
44
44
  :availability_zones, :default_cooldown, :desired_capacity,
45
45
  :health_check_grace_period, :health_check_type, :placement_group,
@@ -70,10 +70,15 @@ module AWS
70
70
 
71
71
  group = GroupCollection.new(:config => config).create name, options
72
72
 
73
+ # Match metric collection with the template
74
+ # (If this call ever supports specifying a granularity of other than
75
+ # '1Minute', this will need to change.)
76
+ group.enable_metrics_collection(template_group.enabled_metrics.keys)
77
+
73
78
  ## Clone the scaling policies and alarms from the group
74
79
  cloudwatch = AWS::CloudWatch.new(:config => config)
75
80
  template_group.scaling_policies.each do |template_policy|
76
- policy_options = options_from(template_policy,
81
+ policy_options = Fleet.options_from(template_policy,
77
82
  :adjustment_type, :scaling_adjustment, :cooldown, :min_adjustment_step)
78
83
 
79
84
  policy = group.scaling_policies.create template_policy.name, policy_options
@@ -81,7 +86,7 @@ module AWS
81
86
  template_policy.alarms.keys.each do |template_alarm_name|
82
87
  template_alarm = cloudwatch.alarms[template_alarm_name]
83
88
  alarm_name = "#{template_alarm.name}-#{group.name}"
84
- alarm_options = options_from(template_alarm,
89
+ alarm_options = Fleet.options_from(template_alarm,
85
90
  :namespace, :metric_name, :comparison_operator, :evaluation_periods,
86
91
  :period, :statistic, :threshold, :actions_enabled, :alarm_description,
87
92
  :unit)
@@ -129,17 +134,6 @@ module AWS
129
134
  yield tag.resource
130
135
  end
131
136
  end
132
-
133
- def options_from(obj, *attributes)
134
- opts = {}
135
- attributes.each do |key|
136
- value = obj.send(key)
137
- next if value.nil? || (value.respond_to?(:empty?) && value.empty?)
138
- value = value.to_a if value.is_a? Array
139
- opts[key] ||= value
140
- end
141
- opts
142
- end
143
137
  end
144
138
  end
145
139
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-asg-fleet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-29 00:00:00.000000000 Z
12
+ date: 2013-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk