tass 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d590a141e3439e74e93e210bf0ca293e9f00480c
4
- data.tar.gz: 54fed348eb8e7aed908d318e4561c489c15b95a2
3
+ metadata.gz: 79e07e545d00ebfdf7c693c8364c34ff1f34db9f
4
+ data.tar.gz: c154c83fa1bf2d09c72fdf7d49de63c015f4af01
5
5
  SHA512:
6
- metadata.gz: bdd2bed48875a84e91c14b90598e72e6852a512d6bb5b6d3ebc5e000af904dd1afda32a0e091ab178e5a50d992bcd254966ba71a48787ad1a30afff39c64ec82
7
- data.tar.gz: 15ccdd755734318995c9be67e4df6668345b939df8fb3c2cd2558e5eb8fa23280b41aa3d8adcb20511b2604976274ff703d7dd2af6cd9a3cbd9960cee2fd84d4
6
+ metadata.gz: 54a540a2fe9185b3e753cb0e978f8d0b6deede19ba571bf084472d5327b8dc369c6bc35dae46539a1546835b8a5acb6efe60dd36a18d3229aa3e9ea26ee8f4e5
7
+ data.tar.gz: bc8c7c3fd4f818adaa42dacfe375edefa110dfeed526ec0cdb2d88bd7ad11ccbb67d2872919b8ec7979fed8bb21b543464b738555acdc1b0edb962bb6585a3bb
data/bin/tass CHANGED
@@ -78,6 +78,19 @@ when 'create'
78
78
  end
79
79
  end
80
80
  end
81
+
82
+ if config.key?(:asg_metrics)
83
+ # We list all metrics because otherwise we can't get GroupStandbyInstances
84
+ Tapjoy::AutoscalingBootstrap::AWS::Autoscaling.client.enable_metrics_collection({
85
+ auto_scaling_group_name: Tapjoy::AutoscalingBootstrap.scaler_name,
86
+ metrics: %w(
87
+ GroupMinSize GroupMaxSize GroupDesiredCapacity GroupInServiceInstances
88
+ GroupPendingInstances GroupStandbyInstances GroupTerminatingInstances
89
+ GroupTotalInstances
90
+ ),
91
+ granularity: '1Minute'
92
+ })
93
+ end
81
94
  end
82
95
  when 'update'
83
96
  opts = Trollop.options do
@@ -96,7 +109,8 @@ when 'update'
96
109
  else
97
110
  confirm_config(aws_env, config, opts)
98
111
 
99
- Tapjoy::AutoscalingBootstrap::LaunchConfiguration.new(config, aws_env, user_data)
112
+ Tapjoy::AutoscalingBootstrap::AutoscalingGroup.new.create(
113
+ opts, config, aws_env, user_data)
100
114
  end
101
115
  when 'audit'
102
116
  opts = Trollop.options do
@@ -37,7 +37,7 @@ module Tapjoy
37
37
  )
38
38
  end
39
39
 
40
- def create(zones:, health_check_type: nil, tags:,
40
+ def create(zones:, health_check_type: nil, placement_group: nil, tags:,
41
41
  vpc_subnets: nil, termination_policies: , **unused_values)
42
42
 
43
43
  group_hash = {
@@ -47,12 +47,20 @@ module Tapjoy
47
47
  min_size: 0, max_size: 0, desired_capacity: 0,
48
48
  termination_policies: termination_policies,
49
49
  vpc_zone_identifier: vpc_subnets,
50
+ placement_group: placement_group,
50
51
  tags: Tapjoy::AutoscalingBootstrap::Autoscaling::Group.new.generate_tags(tags)
51
52
  }
52
53
 
53
54
  self.client.create_auto_scaling_group(**group_hash)
54
55
  end
55
56
 
57
+ def update_launch_config(scaler_name)
58
+ self.client.update_auto_scaling_group(
59
+ auto_scaling_group_name: scaler_name,
60
+ launch_configuration_name: Tapjoy::AutoscalingBootstrap.config_name,
61
+ )
62
+ end
63
+
56
64
  def attach_elb(elb_list)
57
65
  self.client.attach_load_balancers({
58
66
  auto_scaling_group_name: Tapjoy::AutoscalingBootstrap.scaler_name,
@@ -16,7 +16,7 @@ module Tapjoy
16
16
 
17
17
  def create(image_id:, instance_type:, security_groups:, user_data:,
18
18
  keypair:, iam_instance_profile:, classic_link_vpc_id: nil,
19
- classic_link_sg_ids: nil, **unused_values)
19
+ classic_link_sg_ids: nil, spot_price: nil, ebs_optimized: true, **unused_values)
20
20
 
21
21
  self.client.create_launch_configuration(
22
22
  launch_configuration_name: Tapjoy::AutoscalingBootstrap.config_name,
@@ -28,6 +28,8 @@ module Tapjoy
28
28
  key_name: keypair,
29
29
  classic_link_vpc_id: classic_link_vpc_id,
30
30
  classic_link_vpc_security_groups: classic_link_sg_ids,
31
+ spot_price: spot_price,
32
+ ebs_optimized: ebs_optimized,
31
33
  )
32
34
  end
33
35
 
@@ -16,6 +16,8 @@ module Tapjoy
16
16
  )
17
17
  end
18
18
 
19
+ ## TODO Call put_scaling_policy based on whether content of YAML and describe_policies are different
20
+
19
21
  def put_scaling_policy(policy_name: policy, scaling_adjustment:,
20
22
  cooldown:, **unused_values)
21
23
 
@@ -34,7 +34,11 @@ module Tapjoy
34
34
 
35
35
  def delete
36
36
  puts "Deleting launch config #{Tapjoy::AutoscalingBootstrap.config_name}"
37
- Tapjoy::AutoscalingBootstrap::AWS::Autoscaling::LaunchConfig.delete
37
+ begin
38
+ Tapjoy::AutoscalingBootstrap::AWS::Autoscaling::LaunchConfig.delete
39
+ rescue Aws::AutoScaling::Errors::ResourceInUse
40
+ puts "Not deleting the existing launch config, because it's currently in use"
41
+ end
38
42
  end
39
43
  end
40
44
  end
@@ -31,9 +31,20 @@ module Tapjoy
31
31
  Tapjoy::AutoscalingBootstrap::AWS::Autoscaling::Group.create(**config)
32
32
  end
33
33
 
34
+ def update(config:, aws_env:, user_data:)
35
+ if exists
36
+ puts "Updating launch config for scaling group: #{@scaler_name}"
37
+ Tapjoy::AutoscalingBootstrap::LaunchConfiguration.new(config, aws_env, user_data)
38
+ Tapjoy::AutoscalingBootstrap::AWS::Autoscaling::Group.update_launch_config(@scaler_name)
39
+ # increment_autoscale_group
40
+ else
41
+ abort("Scaling group \"#{@scaler_name}\" doesn't exist, and therefore cannot be updated.")
42
+ end
43
+ end
44
+
34
45
  # Check if autoscale group exists
35
46
  def exists
36
- !Tapjoy::AutoscalingBootstrap::AWS::Autoscaling::Group.describe.nil?
47
+ Tapjoy::AutoscalingBootstrap::AWS::Autoscaling::Group.describe.nil? ? false : true
37
48
  end
38
49
 
39
50
  # Encode user data into required base64 form
@@ -7,7 +7,11 @@ module Tapjoy
7
7
 
8
8
  if misc_config[:create_as_group]
9
9
  sec_group_exists(aws_env[:security_groups]) unless misc_config[:vpc_subnets]
10
- create_autoscaling_group(misc_config, aws_env, user_data)
10
+ if autoscaling_group_exists?
11
+ update_autoscaling_group(misc_config, aws_env, user_data)
12
+ else
13
+ create_autoscaling_group(misc_config, aws_env, user_data)
14
+ end
11
15
  else
12
16
  puts 'Skipping creating autoscale group and launch config'
13
17
  puts "\n"
@@ -16,6 +20,11 @@ module Tapjoy
16
20
 
17
21
  private
18
22
 
23
+ # Check if ASG exists so we know whether to create or update
24
+ def autoscaling_group_exists?
25
+ Tapjoy::AutoscalingBootstrap::AWS::Autoscaling::Group.describe.nil? ? false : true
26
+ end
27
+
19
28
  # Check if security group exists and create it if it does not
20
29
  def sec_group_exists(groups)
21
30
  groups.each do |group|
@@ -35,6 +44,14 @@ module Tapjoy
35
44
  Tapjoy::AutoscalingBootstrap.group.create(config: misc_config,
36
45
  aws_env: aws_env, user_data: user_data)
37
46
  end
47
+
48
+ def update_autoscaling_group(misc_config, aws_env, user_data)
49
+ Tapjoy::AutoscalingBootstrap.group.update(
50
+ config: misc_config,
51
+ aws_env: aws_env,
52
+ user_data: user_data
53
+ )
54
+ end
38
55
  end
39
56
  end
40
57
  end
@@ -10,8 +10,12 @@ module Tapjoy
10
10
  updated_config = current.to_hash.merge!(new_config)
11
11
 
12
12
  lc_name = "#{Tapjoy::AutoscalingBootstrap.config_name}_#{date_stamp}"
13
- update(config_name: lc_name, user_data: user_data,
14
- updated_config: updated_config, aws_env: aws_env)
13
+ update(
14
+ config_name: lc_name,
15
+ scaler_name: Tapjoy::AutoscalingBootstrap.scaler_name,
16
+ user_data: user_data,
17
+ updated_config: updated_config, aws_env: aws_env
18
+ )
15
19
  end
16
20
 
17
21
  def current
@@ -26,16 +30,13 @@ module Tapjoy
26
30
 
27
31
  def update(config_name:, scaler_name: 'NaS', user_data: user_data,
28
32
  updated_config:, aws_env:)
29
-
30
33
  Tapjoy::AutoscalingBootstrap.config_name = config_name
31
- Tapjoy::AutoscalingBootstrap.scaler_name = scaler_name
32
-
33
34
  Tapjoy::AutoscalingBootstrap.config.create(updated_config, aws_env,
34
35
  user_data)
35
36
  end
36
37
 
37
38
  def date_stamp
38
- Time.now.strftime('%Y%m%d-%H%M%S')
39
+ Time.now.utc.strftime('%Y%m%d-%H%M%S')
39
40
  end
40
41
  end
41
42
  end
@@ -2,8 +2,8 @@ module Tapjoy
2
2
  module AutoscalingBootstrap
3
3
  module Version
4
4
  MAJOR = 1
5
- MINOR = 0
6
- PATCH = 2
5
+ MINOR = 1
6
+ PATCH = 0
7
7
  end
8
8
 
9
9
  VERSION = [Version::MAJOR, Version::MINOR, Version::PATCH].join('.')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tass
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Tayarani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-07 00:00:00.000000000 Z
11
+ date: 2017-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trollop
@@ -136,6 +136,48 @@ dependencies:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.2.2
139
+ - !ruby/object:Gem::Dependency
140
+ name: codacy-coverage
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: pry-byebug
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
139
181
  description: TASS is the suite of tools that the Tapjoy Operations team uses to manage
140
182
  autoscaling groups and launch configurations.
141
183
  email: ali.tayarani@tapjoy.com
@@ -190,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
232
  version: '0'
191
233
  requirements: []
192
234
  rubyforge_project:
193
- rubygems_version: 2.2.2
235
+ rubygems_version: 2.5.1
194
236
  signing_key:
195
237
  specification_version: 4
196
238
  summary: Tapjoy Autoscaling Suite