capistrano-autoscaling 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -76,8 +76,10 @@ The following options are preserved to manage AutoScaling.
76
76
  ### EC2 options
77
77
 
78
78
  * `:autoscaling_ec2_instances` - The EC2 instances behind ELB.
79
- * `:autoscaling_ec2_instance_dns_names` - The DNS name of EC2 instances behind ELB.
79
+ * `:autoscaling_ec2_instance_public_dns_names` - The DNS name of EC2 instances behind ELB.
80
+ * `:autoscaling_ec2_instance_public_ip_addresses` - The IP address of EC2 instances behind ELB.
80
81
  * `:autoscaling_ec2_instance_private_dns_names` - The private DNS name of EC2 instances behind ELB.
82
+ * `:autoscaling_ec2_instance_private_ip_addresses` - The private IP address of EC2 instances behind ELB.
81
83
 
82
84
  ### AMI options
83
85
 
@@ -109,9 +109,9 @@ module Capistrano
109
109
  _cset(:autoscaling_create_alarm) { autoscaling_create_policy }
110
110
 
111
111
  ## ELB
112
- _cset(:autoscaling_elb_instance_name_prefix, "elb-")
112
+ _cset(:autoscaling_elb_instance_name_prefix, "")
113
113
  _cset(:autoscaling_elb_instance_name) { "#{autoscaling_elb_instance_name_prefix}#{autoscaling_application}" }
114
- _cset(:autoscaling_elb_instance) { autoscaling_elb_client.load_balancers[autoscaling_elb_instance_name] }
114
+ _cset(:autoscaling_elb_instance) { autoscaling_elb_client.load_balancers[autoscaling_elb_instance_name] rescue nil }
115
115
  _cset(:autoscaling_elb_port, 80)
116
116
  _cset(:autoscaling_elb_protocol, :http)
117
117
  _cset(:autoscaling_elb_listeners) {
@@ -174,6 +174,10 @@ module Capistrano
174
174
  }
175
175
  _cset(:autoscaling_ec2_instance_dns_names) { autoscaling_ec2_instances.map { |instance| instance.dns_name } }
176
176
  _cset(:autoscaling_ec2_instance_private_dns_names) { autoscaling_ec2_instances.map { |instance| instance.private_dns_name } }
177
+ _cset(:autoscaling_ec2_instance_public_dns_names) { autoscaling_ec2_instances.map { |instance| instance.public_dns_name } }
178
+ _cset(:autoscaling_ec2_instance_ip_addresses) { autoscaling_ec2_instances.map { |instance| instance.ip_address } }
179
+ _cset(:autoscaling_ec2_instance_private_ip_addresses) { autoscaling_ec2_instances.map { |instance| instance.private_ip_address } }
180
+ _cset(:autoscaling_ec2_instance_public_ip_addresses) { autoscaling_ec2_instances.map { |instance| instance.public_ip_address } }
177
181
 
178
182
  ## AMI
179
183
  _cset(:autoscaling_image_name_prefix) { "#{autoscaling_application}/" }
@@ -198,9 +202,9 @@ module Capistrano
198
202
 
199
203
  ## LaunchConfiguration
200
204
  _cset(:autoscaling_launch_configuration) {
201
- autoscaling_autoscaling_client.launch_configurations[autoscaling_launch_configuration_name]
205
+ autoscaling_autoscaling_client.launch_configurations[autoscaling_launch_configuration_name] rescue nil
202
206
  }
203
- _cset(:autoscaling_launch_configuration_name_prefix, "lc-")
207
+ _cset(:autoscaling_launch_configuration_name_prefix, "")
204
208
  _cset(:autoscaling_launch_configuration_name) { "#{autoscaling_launch_configuration_name_prefix}#{autoscaling_image_name}" }
205
209
  _cset(:autoscaling_launch_configuration_instance_type) { autoscaling_instance_type }
206
210
  _cset(:autoscaling_launch_configuration_security_groups) { autoscaling_security_groups }
@@ -211,7 +215,7 @@ module Capistrano
211
215
  }
212
216
 
213
217
  ## AutoScalingGroup
214
- _cset(:autoscaling_group_name_prefix, "asg-")
218
+ _cset(:autoscaling_group_name_prefix, "")
215
219
  _cset(:autoscaling_group_name) { "#{autoscaling_group_name_prefix}#{autoscaling_application}" }
216
220
  _cset(:autoscaling_group_availability_zones) { autoscaling_availability_zones }
217
221
  _cset(:autoscaling_group_subnets) { autoscaling_subnets } # VPC only
@@ -229,7 +233,7 @@ module Capistrano
229
233
  end
230
234
  options.merge(fetch(:autoscaling_group_extra_options, {}))
231
235
  }
232
- _cset(:autoscaling_group) { autoscaling_autoscaling_client.groups[autoscaling_group_name] }
236
+ _cset(:autoscaling_group) { autoscaling_autoscaling_client.groups[autoscaling_group_name] rescue nil }
233
237
 
234
238
  ## ScalingPolicy
235
239
  _cset(:autoscaling_expand_policy_name_prefix, "expand-")
@@ -250,8 +254,8 @@ module Capistrano
250
254
  :type => fetch(:autoscaling_shrink_policy_type, "ChangeInCapacity"),
251
255
  }.merge(fetch(:autoscaling_shrink_policy_extra_options, {}))
252
256
  }
253
- _cset(:autoscaling_expand_policy) { autoscaling_group.scaling_policies[autoscaling_expand_policy_name] }
254
- _cset(:autoscaling_shrink_policy) { autoscaling_group.scaling_policies[autoscaling_shrink_policy_name] }
257
+ _cset(:autoscaling_expand_policy) { autoscaling_group.scaling_policies[autoscaling_expand_policy_name] rescue nil }
258
+ _cset(:autoscaling_shrink_policy) { autoscaling_group.scaling_policies[autoscaling_shrink_policy_name] rescue nil }
255
259
 
256
260
  ## Alarm
257
261
  _cset(:autoscaling_expand_alarm_options) {
@@ -275,8 +279,8 @@ module Capistrano
275
279
  :statistic => fetch(:autoscaling_expand_alarm_evaluation_statistic, "Average"),
276
280
  :namespace => fetch(:autoscaling_expand_alarm_namespace, "AWS/EC2"),
277
281
  :metric_name => fetch(:autoscaling_expand_alarm_metric_name, "CPUUtilization"),
278
- :comparison_operator => fetch(:autoscaling_expand_alarm_comparison_operator, "LessThanThreshold"),
279
- :threshold => fetch(:autoscaling_expand_alarm_threshold, 30),
282
+ :comparison_operator => fetch(:autoscaling_expand_alarm_comparison_operator, "GreaterThanThreshold"),
283
+ :threshold => fetch(:autoscaling_expand_alarm_threshold, 60),
280
284
  },
281
285
  }}
282
286
  _cset(:autoscaling_shrink_alarm_definitions) {{
@@ -325,7 +329,7 @@ module Capistrano
325
329
  end
326
330
  else
327
331
  logger.debug("Creating ELB instance: #{autoscaling_elb_instance_name}")
328
- set(:autoscaling_elb_instance, autoscling_elb_client.load_balancers.create(
332
+ set(:autoscaling_elb_instance, autoscaling_elb_client.load_balancers.create(
329
333
  autoscaling_elb_instance_name, autoscaling_elb_instance_options))
330
334
  sleep(autoscaling_wait_interval) unless autoscaling_elb_instance.exists?
331
335
  logger.debug("Created ELB instance: #{autoscaling_elb_instance.name}")
@@ -340,7 +344,7 @@ module Capistrano
340
344
 
341
345
  task(:destroy_elb, :roles => :app, :except => { :no_release => true }) {
342
346
  if autoscaling_elb_instance and autoscaling_elb_instance.exists?
343
- if 0 < autoscaling_elb_instance.length
347
+ if 0 < autoscaling_elb_instance.instances.length
344
348
  abort("ELB is not empty.")
345
349
  end
346
350
  logger.debug("Deleting ELB: #{autoscaling_elb_instance.name}")
@@ -486,7 +490,7 @@ module Capistrano
486
490
  task(:update_alarm, :roles => :app, :except => { :no_release => true }) {
487
491
  if autoscaling_create_alarm
488
492
  autoscaling_expand_alarm_definitions.each do |alarm_name, alarm_options|
489
- alarm = autoscaling_cloudwatch_client.alarms[alarm_name]
493
+ alarm = ( autoscaling_cloudwatch_client.alarms[alarm_name] rescue nil )
490
494
  if alarm and alarm.exists?
491
495
  logger.debug("Found Alarm for expansion: #{alarm.name}")
492
496
  else
@@ -504,7 +508,7 @@ module Capistrano
504
508
 
505
509
  if autoscaling_create_alarm
506
510
  autoscaling_shrink_alarm_definitions.each do |alarm_name, alarm_options|
507
- alarm = autoscaling_cloudwatch_client.alarms[alarm_name]
511
+ alarm = ( autoscaling_cloudwatch_client.alarms[alarm_name] rescue nil )
508
512
  if alarm and alarm.exists?
509
513
  logger.debug("Found Alarm for shrinking: #{alarm.name}")
510
514
  else
@@ -523,7 +527,7 @@ module Capistrano
523
527
 
524
528
  task(:destroy_alarm, :roles => :app, :except => { :no_release => true }) {
525
529
  autoscaling_expand_alarm_definitions.each do |alarm_name, alarm_options|
526
- alarm = autoscaling_cloudwatch_client.alarms[alarm_name]
530
+ alarm = ( autoscaling_cloudwatch_client.alarms[alarm_name] rescue nil)
527
531
  if alarm and alarm.exists?
528
532
  logger.debug("Deleting Alarm for expansion: #{alarm.name}")
529
533
  alarm.delete()
@@ -532,7 +536,7 @@ module Capistrano
532
536
  end
533
537
 
534
538
  autoscaling_shrink_alarm_definitions.each do |alarm_name, alarm_options|
535
- alarm = autoscaling_cloudwatch_client.alarms[alarm_name]
539
+ alarm = ( autoscaling_cloudwatch_client.alarms[alarm_name] rescue nil )
536
540
  if alarm and alarm.exists?
537
541
  logger.debug("Deleting Alarm for shrinking: #{alarm.name}")
538
542
  alarm.delete()
@@ -563,61 +567,86 @@ module Capistrano
563
567
 
564
568
  desc("Show AutoScaling status.")
565
569
  task(:status, :roles => :app, :except => { :no_release => true }) {
570
+ status = {}
571
+
572
+ if autoscaling_group and autoscaling_group.exists?
573
+ status[:name] = autoscaling_group.name
574
+ status[:availability_zone_names] = autoscaling_group.availability_zone_names.to_a
575
+ status[:desired_capacity] = autoscaling_group.desired_capacity
576
+ status[:max_size] = autoscaling_group.max_size
577
+ status[:min_size] = autoscaling_group.min_size
578
+ end
579
+
580
+ launch_configuration = nil
581
+ if autoscaling_group and autoscaling_group.exists?
582
+ launch_configuration = autoscaling_gruop.launch_configuration
583
+ elsif autoscaling_launch_configuration and autoscaling_launch_configuration.exists?
584
+ launch_configuration = autoscaling_launch_configuration
585
+ end
586
+ if launch_configuration
587
+ status[:launch_configuration] = {
588
+ :name => launch_configuration.name,
589
+ :iam_instance_profile => launch_configuration.iam_instance_profile,
590
+ :instance_type => launch_configuration.instance_type,
591
+ :security_groups => launch_configuration.security_groups.map { |sg| sg.name },
592
+ :image => {
593
+ :id => launch_configuration.image.id,
594
+ :name => launch_configuration.image.name,
595
+ :state => launch_configuration.image.state,
596
+ }
597
+ }
598
+ end
599
+
600
+ load_balancers = nil
566
601
  if autoscaling_group and autoscaling_group.exists?
567
- STDOUT.puts({
568
- :name => autoscaling_group.name,
569
- :availability_zone_names => autoscaling_group.availability_zone_names.to_a,
570
- :desired_capacity => autoscaling_group.desired_capacity,
571
- :max_size => autoscaling_group.max_size,
572
- :min_size => autoscaling_group.min_size,
573
- :launch_configuration => {
574
- :name => autoscaling_group.launch_configuration.name,
575
- :iam_instance_profile => autoscaling_group.launch_configuration.iam_instance_profile,
576
- :instance_type => autoscaling_group.launch_configuration.instance_type,
577
- :security_groups => autoscaling_group.launch_configuration.security_groups.map { |sg| sg.name },
578
- :image => {
579
- :id => autoscaling_group.launch_configuration.image.id,
580
- :name => autoscaling_group.launch_configuration.image.name,
581
- :state => autoscaling_group.launch_configuration.image.state,
602
+ load_balancers = autoscaling_group.load_balancers.to_a
603
+ elsif autoscaling_elb_instance and autoscaling_elb_instance.exists?
604
+ load_balancers = [ autoscaling_elb_instance ]
605
+ end
606
+ if load_balancers
607
+ status[:load_balancers] = load_balancers.map { |lb|
608
+ {
609
+ :name => lb.name,
610
+ :availability_zone_names => lb.availability_zone_names.to_a,
611
+ :dns_name => lb.dns_name,
612
+ :instances => lb.instances.map { |i|
613
+ {
614
+ :id => i.id,
615
+ :private_ip_address => i.private_ip_address,
616
+ :private_dns_name => i.private_dns_name,
617
+ :public_ip_address => i.public_ip_address,
618
+ :public_dns_name => i.public_dns_name,
619
+ :status => i.status,
620
+ }
582
621
  },
583
- },
584
- :load_balancers => autoscaling_group.load_balancers.to_a.map { |lb|
585
- {
586
- :name => lb.name,
587
- :availability_zone_names => lb.availability_zone_names.to_a,
588
- :dns_name => lb.dns_name,
589
- :instances => lb.instances.map { |i|
590
- {
591
- :id => i.id,
592
- :dns_name => i.dns_name,
593
- :private_dns_name => i.private_dns_name,
594
- :status => i.status,
595
- }
596
- },
597
- }
598
- },
599
- :scaling_policies => autoscaling_group.scaling_policies.map { |policy|
600
- {
601
- :name => policy.name,
602
- :adjustment_type => policy.adjustment_type,
603
- :alarms => policy.alarms.to_hash.keys,
604
- :cooldown => policy.cooldown,
605
- :scaling_adjustment => policy.scaling_adjustment,
606
- }
607
- },
608
- :scheduled_actions => autoscaling_group.scheduled_actions.map { |action|
609
- {
610
- :name => action.name,
611
- :desired_capacity => action.desired_capacity,
612
- :end_time => action.end_time,
613
- :max_size => action.max_size,
614
- :min_size => action.min_size,
615
- :start_time => action.start_time,
616
- }
617
- },
618
- :suspended_processes => autoscaling_group.suspended_processes.to_hash,
619
- }.to_yaml)
622
+ }
623
+ }
624
+ end
625
+
626
+ if autoscaling_group and autoscaling_group.exists?
627
+ status[:scaling_policies] = autoscaling_group.scaling_policies.map { |policy|
628
+ {
629
+ :name => policy.name,
630
+ :adjustment_type => policy.adjustment_type,
631
+ :alarms => policy.alarms.to_hash.keys,
632
+ :cooldown => policy.cooldown,
633
+ :scaling_adjustment => policy.scaling_adjustment,
634
+ }
635
+ }
636
+ status[:scheduled_actions] = autoscaling_group.scheduled_actions.map { |action|
637
+ {
638
+ :name => action.name,
639
+ :desired_capacity => action.desired_capacity,
640
+ :end_time => action.end_time,
641
+ :max_size => action.max_size,
642
+ :min_size => action.min_size,
643
+ :start_time => action.start_time,
644
+ }
645
+ }
646
+ status[:suspended_processes] = autoscaling_group.suspended_processes.to_hash
620
647
  end
648
+
649
+ STDOUT.puts(status.to_yaml)
621
650
  }
622
651
 
623
652
  desc("Show AutoScaling history.")
@@ -625,14 +654,16 @@ module Capistrano
625
654
  if autoscaling_group and autoscaling_group.exists?
626
655
  autoscaling_group.scaling_policies.each do |policy|
627
656
  policy.alarms.each do |alarm_name, alarm_arn|
628
- alarm = autoscaling_cloudwatch_client.alarms[alarm_name]
629
- start_date = Time.now - fetch(:autoscaling_history_days, 3) * 86400
630
- history_items = alarm.history_items.with_start_date(start_date)
631
-
632
- STDOUT.puts("--")
633
- STDOUT.puts("Alarm: #{alarm_name} (ScalingPolicy: #{policy.name})")
634
- history_items.each do |hi|
635
- STDOUT.puts("#{hi.timestamp}: #{hi.type}: #{hi.summary}")
657
+ alarm = ( autoscaling_cloudwatch_client.alarms[alarm_name] rescue nil )
658
+ if alarm and alarm.exists?
659
+ start_date = Time.now - fetch(:autoscaling_history_days, 3) * 86400
660
+ history_items = alarm.history_items.with_start_date(start_date)
661
+
662
+ STDOUT.puts("--")
663
+ STDOUT.puts("Alarm: #{alarm_name} (ScalingPolicy: #{policy.name})")
664
+ history_items.each do |hi|
665
+ STDOUT.puts("#{hi.timestamp}: #{hi.type}: #{hi.summary}")
666
+ end
636
667
  end
637
668
  end
638
669
  end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module AutoScaling
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-autoscaling
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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: 2012-12-04 00:00:00.000000000 Z
12
+ date: 2013-01-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -85,3 +85,4 @@ specification_version: 3
85
85
  summary: A Capistrano recipe that configures AutoScaling on Amazon Web Services infrastructure
86
86
  for your application.
87
87
  test_files: []
88
+ has_rdoc: