aws-ec2 1.1.0 → 1.2.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 +4 -4
- data/.gitmodules +3 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +16 -12
- data/aws-ec2.gemspec +7 -1
- data/lib/aws-ec2.rb +4 -1
- data/lib/aws_ec2/{aws_services.rb → aws_service.rb} +1 -1
- data/lib/aws_ec2/cli.rb +4 -0
- data/lib/aws_ec2/create.rb +1 -1
- data/lib/aws_ec2/help/ami.md +2 -2
- data/lib/aws_ec2/help/compile.md +1 -1
- data/lib/aws_ec2/help/completion.md +9 -9
- data/lib/aws_ec2/help/create.md +2 -2
- data/lib/aws_ec2/help/upload.md +1 -1
- data/lib/aws_ec2/help/wait/ami.md +12 -0
- data/lib/aws_ec2/template/helper/ami_helper.rb +3 -2
- data/lib/aws_ec2/version.rb +1 -1
- data/lib/aws_ec2/wait.rb +13 -0
- data/lib/aws_ec2/waiter.rb +5 -0
- data/lib/aws_ec2/waiter/ami.rb +61 -0
- data/spec/lib/cli_spec.rb +5 -0
- metadata +23 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1868534625988933a50ea50d14c3ed0d0b13a825d4d29a6e5feab301fd0d969a
|
4
|
+
data.tar.gz: ae53a49329501b81a4bc3283e4685e05da78b16da9e3bf79e2927ca067f7bcc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9efa949c751ffb52b187a722519b4c22ab0d3714a84a1cec7f96288557eb686dba403365e5b3e5a99719f7f5523417487856f3969e7f49d028397b4ec35ab49a
|
7
|
+
data.tar.gz: 1e8da07ac54e0f09236a84c9a8bb839ef64df6eead452b4a0a511112b2eea857c125341ec087debab54eeb73a2048066ecb584b603ee19b7c77c750450c69567
|
data/.gitmodules
CHANGED
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [1.2.0]
|
7
|
+
- Merge pull request #6 from tongueroo/wait: aws-ec2 wait ami command
|
8
|
+
- Fix dependencies: add aws-sdk-s3 dependency
|
9
|
+
- require render_me_pretty as vendor submodule for now
|
10
|
+
|
6
11
|
## [1.1.0]
|
7
12
|
- Merge pull request #5 from tongueroo/auto-terminate
|
8
13
|
- allow AWS_RDS_CODE_VERSION env variable
|
data/Gemfile.lock
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
aws-ec2 (
|
4
|
+
aws-ec2 (1.1.0)
|
5
5
|
activesupport
|
6
6
|
aws-sdk-ec2
|
7
|
+
aws-sdk-s3
|
7
8
|
colorize
|
8
9
|
dotenv
|
9
10
|
filesize
|
10
11
|
hashie
|
11
|
-
render_me_pretty
|
12
12
|
thor
|
13
|
+
tilt
|
13
14
|
|
14
15
|
GEM
|
15
16
|
remote: https://rubygems.org/
|
@@ -19,16 +20,23 @@ GEM
|
|
19
20
|
i18n (~> 0.7)
|
20
21
|
minitest (~> 5.1)
|
21
22
|
tzinfo (~> 1.1)
|
22
|
-
aws-partitions (1.
|
23
|
-
aws-sdk-core (3.17.
|
23
|
+
aws-partitions (1.72.0)
|
24
|
+
aws-sdk-core (3.17.1)
|
24
25
|
aws-partitions (~> 1.0)
|
25
26
|
aws-sigv4 (~> 1.0)
|
26
27
|
jmespath (~> 1.0)
|
27
|
-
aws-sdk-ec2 (1.
|
28
|
+
aws-sdk-ec2 (1.29.0)
|
29
|
+
aws-sdk-core (~> 3)
|
30
|
+
aws-sigv4 (~> 1.0)
|
31
|
+
aws-sdk-kms (1.5.0)
|
32
|
+
aws-sdk-core (~> 3)
|
33
|
+
aws-sigv4 (~> 1.0)
|
34
|
+
aws-sdk-s3 (1.8.2)
|
28
35
|
aws-sdk-core (~> 3)
|
36
|
+
aws-sdk-kms (~> 1)
|
29
37
|
aws-sigv4 (~> 1.0)
|
30
38
|
aws-sigv4 (1.0.2)
|
31
|
-
byebug (10.0.
|
39
|
+
byebug (10.0.1)
|
32
40
|
codeclimate-test-reporter (1.0.8)
|
33
41
|
simplecov (<= 0.13)
|
34
42
|
coderay (1.1.2)
|
@@ -77,14 +85,10 @@ GEM
|
|
77
85
|
pry (0.11.3)
|
78
86
|
coderay (~> 1.1.0)
|
79
87
|
method_source (~> 0.9.0)
|
80
|
-
rake (12.3.
|
81
|
-
rb-fsevent (0.10.
|
88
|
+
rake (12.3.1)
|
89
|
+
rb-fsevent (0.10.3)
|
82
90
|
rb-inotify (0.9.10)
|
83
91
|
ffi (>= 0.5.0, < 2)
|
84
|
-
render_me_pretty (0.8.0)
|
85
|
-
activesupport
|
86
|
-
colorize
|
87
|
-
tilt
|
88
92
|
rspec (3.7.0)
|
89
93
|
rspec-core (~> 3.7.0)
|
90
94
|
rspec-expectations (~> 3.7.0)
|
data/aws-ec2.gemspec
CHANGED
@@ -21,13 +21,19 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency "activesupport"
|
23
23
|
spec.add_dependency "aws-sdk-ec2"
|
24
|
+
spec.add_dependency "aws-sdk-s3"
|
24
25
|
spec.add_dependency "colorize"
|
25
26
|
spec.add_dependency "dotenv"
|
26
27
|
spec.add_dependency "filesize"
|
27
28
|
spec.add_dependency "hashie"
|
28
|
-
spec.add_dependency "render_me_pretty"
|
29
29
|
spec.add_dependency "thor"
|
30
30
|
|
31
|
+
# spec.add_dependency "render_me_pretty"
|
32
|
+
# render_me_pretty dependencies since temporarily added it as vendored submodule
|
33
|
+
# spec.add_dependency "activesupport" # dup
|
34
|
+
# spec.add_dependency "colorize" # dup
|
35
|
+
spec.add_dependency "tilt"
|
36
|
+
|
31
37
|
spec.add_development_dependency "bundler"
|
32
38
|
spec.add_development_dependency "byebug"
|
33
39
|
spec.add_development_dependency "guard"
|
data/lib/aws-ec2.rb
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
$:.unshift(File.expand_path("../", __FILE__))
|
2
2
|
require "aws_ec2/version"
|
3
3
|
require "colorize"
|
4
|
+
|
5
|
+
$:.unshift(File.expand_path("../../vendor/render_me_pretty/lib", __FILE__))
|
4
6
|
require "render_me_pretty"
|
5
7
|
|
6
8
|
module AwsEc2
|
7
9
|
autoload :Help, "aws_ec2/help"
|
8
10
|
autoload :Command, "aws_ec2/command"
|
9
11
|
autoload :CLI, "aws_ec2/cli"
|
10
|
-
autoload :
|
12
|
+
autoload :AwsService, "aws_ec2/aws_service"
|
11
13
|
autoload :Profile, "aws_ec2/profile"
|
12
14
|
autoload :Base, "aws_ec2/base"
|
13
15
|
autoload :Create, "aws_ec2/create"
|
14
16
|
autoload :Ami, "aws_ec2/ami"
|
17
|
+
autoload :Wait, "aws_ec2/wait"
|
15
18
|
autoload :Template, "aws_ec2/template"
|
16
19
|
autoload :Script, "aws_ec2/script"
|
17
20
|
autoload :Config, "aws_ec2/config"
|
data/lib/aws_ec2/cli.rb
CHANGED
@@ -3,6 +3,10 @@ module AwsEc2
|
|
3
3
|
class_option :noop, type: :boolean
|
4
4
|
class_option :profile, desc: "profile name to use"
|
5
5
|
|
6
|
+
desc "wait SUBCOMMAND", "wait subcommands"
|
7
|
+
long_desc Help.text(:wait)
|
8
|
+
subcommand "wait", Wait
|
9
|
+
|
6
10
|
common_options = Proc.new do
|
7
11
|
option :auto_terminate, type: :boolean, default: false, desc: "automatically terminate the instance at the end of user-data"
|
8
12
|
option :cloudwatch, type: :boolean, default: false, desc: "enable cloudwatch logging, only supported for amazonlinux"
|
data/lib/aws_ec2/create.rb
CHANGED
data/lib/aws_ec2/help/ami.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
Examples:
|
2
2
|
|
3
|
-
|
3
|
+
$ aws-ec2 ami myrubyami --profile ruby --noop
|
4
4
|
|
5
5
|
Launches an EC2 instance to create an AMI. An AMI creation script is appended to the end of the user-data script. The AMI creation script calls `aws ec2 create-image` and causes the instance to reboot at the end.
|
6
6
|
|
7
7
|
It is useful to include to timestamp as a part of the AMI name with the date command.
|
8
8
|
|
9
|
-
|
9
|
+
$ aws-ec2 ami ruby-2.5.0_$(date "+%Y-%m-%d-%H-%M") --profile ruby --noop
|
10
10
|
|
11
11
|
The instance also automatically gets terminated and cleaned up by a termination script appended to user-data.
|
12
12
|
|
data/lib/aws_ec2/help/compile.md
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
Example:
|
2
2
|
|
3
|
-
|
3
|
+
aws-ec2 completion
|
4
4
|
|
5
5
|
Prints words for TAB auto-completion.
|
6
6
|
|
7
7
|
Examples:
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
aws-ec2 completion
|
10
|
+
aws-ec2 completion hello
|
11
|
+
aws-ec2 completion hello name
|
12
12
|
|
13
13
|
To enable, TAB auto-completion add the following to your profile:
|
14
14
|
|
15
|
-
|
15
|
+
eval $(aws-ec2 completion_script)
|
16
16
|
|
17
17
|
Auto-completion example usage:
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
aws-ec2 [TAB]
|
20
|
+
aws-ec2 hello [TAB]
|
21
|
+
aws-ec2 hello name [TAB]
|
22
|
+
aws-ec2 hello name --[TAB]
|
data/lib/aws_ec2/help/create.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Examples:
|
2
2
|
|
3
|
-
|
3
|
+
$ aws-ec2 create my-instance
|
4
4
|
|
5
5
|
To see the snippet of code that gets added to the user-data script you can use the `--noop` option and then view the generated tmp/user-data.txt.
|
6
6
|
|
7
|
-
|
7
|
+
$ aws-ec2 create myscript --noop
|
data/lib/aws_ec2/help/upload.md
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
Examples:
|
2
|
+
|
3
|
+
$ aws-ec2 wait ami ruby-2.5.0_2018-03-24-17-07
|
4
|
+
$ aws-ec2 wait ami ami-b0138dc8
|
5
|
+
|
6
|
+
Polls the AMI with the given AMI name or id until AMI is found and available.
|
7
|
+
|
8
|
+
### Timeout
|
9
|
+
|
10
|
+
Command times out after 30 mins by default. You can control the timeout with the `--timeout` flag. The timeout is specified in seconds.
|
11
|
+
|
12
|
+
$ aws-ec2 wait ami --id ami-b0138dc8 --timeout 3600
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module AwsEc2::Template::Helper::AmiHelper
|
2
|
-
include AwsEc2::
|
2
|
+
include AwsEc2::AwsService
|
3
3
|
|
4
4
|
# Example:
|
5
5
|
#
|
@@ -25,7 +25,8 @@ module AwsEc2::Template::Helper::AmiHelper
|
|
25
25
|
ec2.describe_images(
|
26
26
|
owners: owners,
|
27
27
|
filters: [
|
28
|
-
{name: "name", values: [query]}
|
28
|
+
{name: "name", values: [query]},
|
29
|
+
{name: "state", values: ["available"]}
|
29
30
|
]
|
30
31
|
).images
|
31
32
|
end
|
data/lib/aws_ec2/version.rb
CHANGED
data/lib/aws_ec2/wait.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module AwsEc2
|
2
|
+
autoload :Waiter, 'aws_ec2/waiter'
|
3
|
+
|
4
|
+
class Wait < Command
|
5
|
+
|
6
|
+
desc "ami", "Wait until AMI available."
|
7
|
+
long_desc Help.text("wait:ami")
|
8
|
+
option :timeout, type: :numeric, default: 1800, desc: "Timeout in seconds."
|
9
|
+
def ami(name)
|
10
|
+
Waiter::Ami.new(options.merge(name: name)).wait
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module AwsEc2::Waiter
|
2
|
+
class Ami < AwsEc2::Base
|
3
|
+
include AwsEc2::AwsService
|
4
|
+
|
5
|
+
def wait
|
6
|
+
delay = 30
|
7
|
+
timeout = @options[:timeout]
|
8
|
+
max_attempts = timeout / delay
|
9
|
+
current_time = 0
|
10
|
+
|
11
|
+
puts "Waiting for #{@options[:name]} to be available. Delay: #{delay}s. Timeout: #{timeout}s"
|
12
|
+
puts "Current time: #{Time.now}"
|
13
|
+
return if ENV['TEST']
|
14
|
+
|
15
|
+
# Using while loop because of issues with ruby's Timeout module
|
16
|
+
# http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/
|
17
|
+
detected = detect_ami
|
18
|
+
until detected || current_time > timeout
|
19
|
+
print '.'
|
20
|
+
sleep delay
|
21
|
+
current_time += 30
|
22
|
+
detected = detect_ami
|
23
|
+
end
|
24
|
+
|
25
|
+
if current_time > timeout
|
26
|
+
puts "ERROR: Timeout. Unable to detect and available ami: #{@options[:name]}"
|
27
|
+
exit 1
|
28
|
+
else
|
29
|
+
puts "Found available AMI: #{@options[:name]}"
|
30
|
+
end
|
31
|
+
puts
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
# Using custom detect_ami instead of ec2.wait_until(:image_availalbe, ...)
|
36
|
+
# because we start checking for the ami even before we've called
|
37
|
+
# create_ami. We start checking right after we launch the instance
|
38
|
+
# which will create the ami at the end.
|
39
|
+
def detect_ami(owners=["self"])
|
40
|
+
images = ec2.describe_images(
|
41
|
+
owners: owners,
|
42
|
+
filters: filters
|
43
|
+
).images
|
44
|
+
detected = images.first
|
45
|
+
!!detected
|
46
|
+
end
|
47
|
+
|
48
|
+
def filters
|
49
|
+
name_is_ami_id = @options[:name] =~ /^ami-/
|
50
|
+
|
51
|
+
filters = [{name: "state", values: ["available"]}]
|
52
|
+
filters << if name_is_ami_id
|
53
|
+
{name: "image-id", values: [@options[:name]]}
|
54
|
+
else
|
55
|
+
{name: "name", values: [@options[:name]]}
|
56
|
+
end
|
57
|
+
|
58
|
+
filters
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/spec/lib/cli_spec.rb
CHANGED
@@ -14,6 +14,11 @@ describe AwsEc2::CLI do
|
|
14
14
|
expect(out).to include("Creating EC2 instance")
|
15
15
|
end
|
16
16
|
|
17
|
+
it "wait ami" do
|
18
|
+
out = execute("exe/aws-ec2 wait ami myimage")
|
19
|
+
expect(out).to include("Waiting for")
|
20
|
+
end
|
21
|
+
|
17
22
|
commands = {
|
18
23
|
"am" => "ami",
|
19
24
|
"compile" => "--profile",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-ec2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-s3
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: colorize
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +109,7 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: thor
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - ">="
|
@@ -109,7 +123,7 @@ dependencies:
|
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: tilt
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - ">="
|
@@ -237,7 +251,7 @@ files:
|
|
237
251
|
- exe/aws-ec2
|
238
252
|
- lib/aws-ec2.rb
|
239
253
|
- lib/aws_ec2/ami.rb
|
240
|
-
- lib/aws_ec2/
|
254
|
+
- lib/aws_ec2/aws_service.rb
|
241
255
|
- lib/aws_ec2/base.rb
|
242
256
|
- lib/aws_ec2/cli.rb
|
243
257
|
- lib/aws_ec2/command.rb
|
@@ -257,6 +271,7 @@ files:
|
|
257
271
|
- lib/aws_ec2/help/completion_script.md
|
258
272
|
- lib/aws_ec2/help/create.md
|
259
273
|
- lib/aws_ec2/help/upload.md
|
274
|
+
- lib/aws_ec2/help/wait/ami.md
|
260
275
|
- lib/aws_ec2/hook.rb
|
261
276
|
- lib/aws_ec2/profile.rb
|
262
277
|
- lib/aws_ec2/script.rb
|
@@ -289,6 +304,9 @@ files:
|
|
289
304
|
- lib/aws_ec2/template/helper/script_helper.rb
|
290
305
|
- lib/aws_ec2/template/helper/ssh_key_helper.rb
|
291
306
|
- lib/aws_ec2/version.rb
|
307
|
+
- lib/aws_ec2/wait.rb
|
308
|
+
- lib/aws_ec2/waiter.rb
|
309
|
+
- lib/aws_ec2/waiter/ami.rb
|
292
310
|
- spec/fixtures/demo_project/config/settings.yml
|
293
311
|
- spec/fixtures/demo_project/config/test.yml
|
294
312
|
- spec/fixtures/demo_project/profiles/default.yml
|