stemcell 0.11.11 → 0.13.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 +5 -5
- data/.travis.yml +1 -2
- data/CHANGELOG.md +17 -0
- data/Gemfile +1 -1
- data/README.md +2 -2
- data/examples/stemcell.json +6 -2
- data/lib/stemcell/launcher.rb +77 -200
- data/lib/stemcell/metadata_launcher.rb +1 -0
- data/lib/stemcell/metadata_source/configuration.rb +2 -2
- data/lib/stemcell/metadata_source.rb +6 -1
- data/lib/stemcell/option_parser.rb +6 -29
- data/lib/stemcell/templates/bootstrap.sh.erb +93 -20
- data/lib/stemcell/version.rb +1 -1
- data/spec/fixtures/chef_repo/stemcell-azs-missing.json +3 -1
- data/spec/fixtures/chef_repo/stemcell-backing-store-legacy.json +13 -0
- data/spec/fixtures/chef_repo/stemcell-cookbook-attribute.json +3 -1
- data/spec/fixtures/chef_repo/stemcell-defaults-missing.json +3 -1
- data/spec/fixtures/chef_repo/stemcell-options-parser.json +6 -2
- data/spec/fixtures/chef_repo/stemcell.json +3 -1
- data/spec/lib/stemcell/launcher_spec.rb +108 -123
- data/spec/lib/stemcell/metadata_source/configuration_spec.rb +16 -3
- data/spec/lib/stemcell/metadata_source_spec.rb +2 -1
- data/stemcell.gemspec +6 -3
- metadata +40 -13
- data/bin/necrosis +0 -114
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stemcell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Rhoads
|
@@ -11,22 +11,50 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2021-12-14 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
|
-
name: aws-
|
17
|
+
name: aws-eventstream
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
20
|
- - "~>"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 1.1.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.1.1
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: aws-sdk-ec2
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '1'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '1'
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: aws-sigv4
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - "~>"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 1.2.4
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 1.2.4
|
30
58
|
- !ruby/object:Gem::Dependency
|
31
59
|
name: net-ssh
|
32
60
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,16 +101,16 @@ dependencies:
|
|
73
101
|
name: nokogiri
|
74
102
|
requirement: !ruby/object:Gem::Requirement
|
75
103
|
requirements:
|
76
|
-
- - "
|
104
|
+
- - "~>"
|
77
105
|
- !ruby/object:Gem::Version
|
78
|
-
version: 1.
|
106
|
+
version: 1.8.2
|
79
107
|
type: :runtime
|
80
108
|
prerelease: false
|
81
109
|
version_requirements: !ruby/object:Gem::Requirement
|
82
110
|
requirements:
|
83
|
-
- - "
|
111
|
+
- - "~>"
|
84
112
|
- !ruby/object:Gem::Version
|
85
|
-
version: 1.
|
113
|
+
version: 1.8.2
|
86
114
|
- !ruby/object:Gem::Dependency
|
87
115
|
name: ffi-yajl
|
88
116
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,7 +185,6 @@ description: A tool for launching and bootstrapping EC2 instances
|
|
157
185
|
email:
|
158
186
|
- igor.serebryany@airbnb.com
|
159
187
|
executables:
|
160
|
-
- necrosis
|
161
188
|
- stemcell
|
162
189
|
extensions: []
|
163
190
|
extra_rdoc_files: []
|
@@ -169,7 +196,6 @@ files:
|
|
169
196
|
- LICENSE.txt
|
170
197
|
- README.md
|
171
198
|
- Rakefile
|
172
|
-
- bin/necrosis
|
173
199
|
- bin/stemcell
|
174
200
|
- examples/stemcell.json
|
175
201
|
- examples/stemcellrc
|
@@ -207,6 +233,7 @@ files:
|
|
207
233
|
- spec/fixtures/chef_repo/roles/unit-simple-override.rb
|
208
234
|
- spec/fixtures/chef_repo/stemcell-azs-missing.json
|
209
235
|
- spec/fixtures/chef_repo/stemcell-backing-store-empty.json
|
236
|
+
- spec/fixtures/chef_repo/stemcell-backing-store-legacy.json
|
210
237
|
- spec/fixtures/chef_repo/stemcell-backing-store-missing.json
|
211
238
|
- spec/fixtures/chef_repo/stemcell-cookbook-attribute.json
|
212
239
|
- spec/fixtures/chef_repo/stemcell-defaults-missing.json
|
@@ -240,8 +267,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
267
|
- !ruby/object:Gem::Version
|
241
268
|
version: '0'
|
242
269
|
requirements: []
|
243
|
-
|
244
|
-
rubygems_version: 2.6.13
|
270
|
+
rubygems_version: 3.0.3
|
245
271
|
signing_key:
|
246
272
|
specification_version: 4
|
247
273
|
summary: no summary
|
@@ -268,6 +294,7 @@ test_files:
|
|
268
294
|
- spec/fixtures/chef_repo/roles/unit-simple-override.rb
|
269
295
|
- spec/fixtures/chef_repo/stemcell-azs-missing.json
|
270
296
|
- spec/fixtures/chef_repo/stemcell-backing-store-empty.json
|
297
|
+
- spec/fixtures/chef_repo/stemcell-backing-store-legacy.json
|
271
298
|
- spec/fixtures/chef_repo/stemcell-backing-store-missing.json
|
272
299
|
- spec/fixtures/chef_repo/stemcell-cookbook-attribute.json
|
273
300
|
- spec/fixtures/chef_repo/stemcell-defaults-missing.json
|
data/bin/necrosis
DELETED
@@ -1,114 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# -*- mode: shell -*-
|
4
|
-
|
5
|
-
require 'aws-sdk-v1'
|
6
|
-
require 'trollop'
|
7
|
-
|
8
|
-
options = Trollop::options do
|
9
|
-
version "Necrosis 0.1.0 (c) Airbnb, Inc."
|
10
|
-
banner "Necrosis: the killing script"
|
11
|
-
|
12
|
-
opt('aws_access_key',
|
13
|
-
"aws access key",
|
14
|
-
:type => String,
|
15
|
-
:default => ENV['AWS_ACCESS_KEY']
|
16
|
-
)
|
17
|
-
|
18
|
-
opt('aws_secret_key',
|
19
|
-
"aws secret key",
|
20
|
-
:type => String,
|
21
|
-
:default => ENV['AWS_SECRET_KEY']
|
22
|
-
)
|
23
|
-
|
24
|
-
opt('aws_regions',
|
25
|
-
"comma-separated list of aws regions to search",
|
26
|
-
:type => String,
|
27
|
-
:default => ENV['AWS_REGIONS'],
|
28
|
-
:short => :r
|
29
|
-
)
|
30
|
-
|
31
|
-
opt :non_interactive, 'Do not ask confirmation', :short => :f
|
32
|
-
end
|
33
|
-
|
34
|
-
NON_INTERACTIVE = options[:non_interactive]
|
35
|
-
|
36
|
-
required_parameters = %w(aws_access_key aws_secret_key)
|
37
|
-
|
38
|
-
required_parameters.each do |arg|
|
39
|
-
raise ArgumentError, "--#{arg.gsub('_','-')} needs to be specified on the commandline or set \
|
40
|
-
by the #{arg.upcase.gsub('-','_')} environment variable" if
|
41
|
-
options[arg].nil? or ! options[arg]
|
42
|
-
end
|
43
|
-
|
44
|
-
raise ArgumentError, "you did not provide any instance ids to kill" if ARGV.empty?
|
45
|
-
|
46
|
-
# a hash from instance_id => [ec2 instance objects]
|
47
|
-
instances = ARGV.inject({}) { |h, n| h[n] = []; h }
|
48
|
-
|
49
|
-
# convert comma-separated list to Array
|
50
|
-
regions = (options['aws_regions'] || '').split(',')
|
51
|
-
|
52
|
-
def authorized? instance
|
53
|
-
return true if NON_INTERACTIVE
|
54
|
-
|
55
|
-
puts 'Terminate? (y/N)'
|
56
|
-
confirm = $stdin.gets
|
57
|
-
confirmed = confirm && confirm.chomp.downcase == 'y'
|
58
|
-
|
59
|
-
if confirmed
|
60
|
-
age = Time.now - instance.launch_time
|
61
|
-
days = age / (24*3600)
|
62
|
-
if days > 2
|
63
|
-
puts "Instance is #{days} days old. REALLY terminate? (y/N)"
|
64
|
-
confirm = $stdin.gets
|
65
|
-
confirmed = confirm && confirm.chomp.downcase == 'y'
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
return confirmed
|
70
|
-
end
|
71
|
-
|
72
|
-
def delete_instance id, instance, region
|
73
|
-
if instance.api_termination_disabled?
|
74
|
-
puts "Cannot terminate instance #{id} -- termination protection enabled"
|
75
|
-
return
|
76
|
-
end
|
77
|
-
|
78
|
-
puts "Instance #{id} (#{instance.status} in #{region.name})"
|
79
|
-
puts "\tKey name: #{instance.key_name}"
|
80
|
-
puts "\tLaunched: #{instance.launch_time}"
|
81
|
-
instance.tags.to_h.each do |k, v|
|
82
|
-
puts "\t#{k} : #{v}"
|
83
|
-
end
|
84
|
-
|
85
|
-
if authorized? instance
|
86
|
-
instance.terminate
|
87
|
-
puts "Instance #{id} terminated"
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
AWS.memoize do
|
92
|
-
ec2 = AWS::EC2.new(:access_key_id => options['aws_access_key'], :secret_access_key => options['aws_secret_key'])
|
93
|
-
ec2.regions.each do |region|
|
94
|
-
next unless regions.empty? || regions.include?(region.name)
|
95
|
-
instances.each do |id, objects|
|
96
|
-
instance = region.instances[id]
|
97
|
-
objects << [instance, region] if instance.exists?
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
instances.each do |id, objects|
|
102
|
-
case objects.count
|
103
|
-
when 0
|
104
|
-
STDERR.puts "No instance #{id} found"
|
105
|
-
next
|
106
|
-
when 1
|
107
|
-
instance, region = objects.first
|
108
|
-
delete_instance id, instance, region
|
109
|
-
else
|
110
|
-
puts "Found multiple instances named #{id}"
|
111
|
-
next
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|