rollo 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f56ade1caa6cdf9c29e8c48346ebcd591550bfbb
4
- data.tar.gz: 9f661dab545588f447394f80d296187800766524
3
+ metadata.gz: 22045e3fa6c8b5a4cec9f59229c160aaae5a2bc9
4
+ data.tar.gz: b51a52be42f0fbafdd70a399678003ca20c84b58
5
5
  SHA512:
6
- metadata.gz: 83a6ee4e91ba74b736b4000a66d8b167ab6cbd432e276e2b7ceb9c2aa7c5cf8f520ce829ffe13b07bcbf32215d976596e433e1ad2ab74bf93210cb9430e3be81
7
- data.tar.gz: b515e70c773228188bf482bba4fcb9405df35f1c9e2ed0025d020298e7f5935b1b0777118fa75c199776e0211db04b81c494c08922037b6222bad19ef5d0b8ae
6
+ metadata.gz: da6e1d740c258510d9cd5eebfc87e3fab41119755f0c0380eac308b4ad5dd6bfa156b1a7346ab72be8a9f38af164e0ed3c3a39ec36e306a2479f9f2dcd21a86e
7
+ data.tar.gz: a08d36a6ce0552b2dc05ef0179f9d907c456a68f30141befc68bc507821edbc3bea8f188e070e2342219f383a2cc389c84a5886f1f5907f84d89844b4a3042fc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rollo (0.5.0)
4
+ rollo (0.6.0)
5
5
  aws-sdk (~> 3.0)
6
6
  aws-sdk-ecs (~> 1.22)
7
7
  hollerback (~> 0.1)
@@ -747,4 +747,4 @@ DEPENDENCIES
747
747
  rspec (~> 3.8)
748
748
 
749
749
  BUNDLED WITH
750
- 1.17.1
750
+ 1.17.2
@@ -33,6 +33,17 @@ module Rollo
33
33
  desc:
34
34
  'The number of hosts / service instances to add / remove at ' +
35
35
  'a time.')
36
+ method_option(
37
+ :maximum_service_instances,
38
+ aliases: '-mx',
39
+ type: :numeric,
40
+ desc: 'The maximum number of service instances to expand to.')
41
+ method_option(
42
+ :minimum_service_instances,
43
+ aliases: '-mn',
44
+ type: :numeric,
45
+ desc: 'The minimum number of service instances to contract to.')
46
+
36
47
  def roll(region, asg_name, ecs_cluster_name)
37
48
  host_cluster = Rollo::Model::HostCluster.new(asg_name, region)
38
49
  service_cluster = Rollo::Model::ServiceCluster
@@ -64,7 +75,8 @@ module Rollo
64
75
  [
65
76
  region, asg_name, ecs_cluster_name,
66
77
  service_cluster
67
- ])
78
+ ],
79
+ maximum_instances: options[:maximum_service_instances])
68
80
 
69
81
  invoke(
70
82
  "hosts:terminate",
@@ -85,7 +97,8 @@ module Rollo
85
97
  [
86
98
  region, asg_name, ecs_cluster_name,
87
99
  service_cluster
88
- ])
100
+ ],
101
+ minimum_instances: options[:minimum_service_instances])
89
102
  end
90
103
 
91
104
  say("Instances in host cluster #{host_cluster.name} rolled " +
@@ -25,11 +25,17 @@ module Rollo
25
25
  type: :numeric,
26
26
  default: 2,
27
27
  desc: 'The number of minutes to wait for services to start up.')
28
+ method_option(
29
+ :maximum_instances,
30
+ aliases: '-mx',
31
+ type: :numeric,
32
+ desc: 'The maximum number of service instances to expand to.')
28
33
 
29
34
  def expand(
30
35
  region, _, ecs_cluster_name,
31
36
  service_cluster = nil)
32
37
  batch_size = options[:batch_size]
38
+ maximum_instances = options[:maximum_instances]
33
39
  service_start_wait_minutes = options[:startup_time]
34
40
  service_start_wait_seconds = 60 * service_start_wait_minutes
35
41
 
@@ -49,7 +55,8 @@ module Rollo
49
55
  "Increasing instance count by #{batch_size} " +
50
56
  "for #{service.name}")
51
57
  with_padding do
52
- service.increase_instance_count_by(batch_size) do |on|
58
+ service.increase_instance_count_by(
59
+ batch_size, maximum_instances: maximum_instances) do |on|
53
60
  on.prepare do |current, target|
54
61
  say(
55
62
  "Changing instance count from #{current} " +
@@ -86,6 +93,11 @@ module Rollo
86
93
  type: :numeric,
87
94
  default: 3,
88
95
  desc: 'The number of service instances to remove at a time.')
96
+ method_option(
97
+ :minimum_instances,
98
+ aliases: '-mn',
99
+ type: :numeric,
100
+ desc: 'The minimum number of service instances to contract to.')
89
101
 
90
102
  def contract(
91
103
  region, _, ecs_cluster_name,
@@ -52,24 +52,28 @@ module Rollo
52
52
  running_count == desired_count
53
53
  end
54
54
 
55
- def increase_instance_count_by(count_delta, &block)
55
+ def increase_instance_count_by(count_delta, options = {}, &block)
56
+ maximum = options[:maximum_instance_count] || Float::INFINITY
56
57
  initial = desired_count
57
58
  increased = initial + count_delta
59
+ target = [increased, maximum].min
58
60
 
59
61
  callbacks_for(block).try_respond_with(
60
- :prepare, initial, increased)
62
+ :prepare, initial, target)
61
63
 
62
- ensure_instance_count(increased, &block)
64
+ ensure_instance_count(target, &block)
63
65
  end
64
66
 
65
- def decrease_instance_count_by(count_delta, &block)
67
+ def decrease_instance_count_by(count_delta, options = {}, &block)
68
+ minimum = options[:minimum_instance_count] || 0
66
69
  initial = desired_count
67
70
  decreased = initial - count_delta
71
+ target = [decreased, minimum].max
68
72
 
69
73
  callbacks_for(block).try_respond_with(
70
- :prepare, initial, decreased)
74
+ :prepare, initial, target)
71
75
 
72
- ensure_instance_count(decreased, &block)
76
+ ensure_instance_count(target, &block)
73
77
  end
74
78
 
75
79
  def ensure_instance_count(count, &block)
data/lib/rollo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rollo
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rollo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-28 00:00:00.000000000 Z
11
+ date: 2018-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk