MovableInkAWS 1.0.18 → 1.1.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/Gemfile.lock +9 -9
- data/lib/movable_ink/aws.rb +2 -8
- data/lib/movable_ink/aws/ec2.rb +0 -16
- data/lib/movable_ink/aws/metadata.rb +62 -0
- data/lib/movable_ink/version.rb +1 -1
- data/spec/aws_spec.rb +1 -22
- data/spec/ec2_spec.rb +2 -14
- data/spec/metadata_spec.rb +40 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88f1e4859005fa8150bd22e1c712a404ae26e79d39af2812ba5771b17c24fc70
|
4
|
+
data.tar.gz: b9611d91105694d9da25bc8551928f18e9561ef139ec7a291c0f88df5af93c87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ff752b86badeb543f248e9b81781404ed35336b9a28bf0b9e59903945a26ba7c4a7323f77ec99a81c74421058c100fe5d7c82b172f65322433bc20bc6b3931a
|
7
|
+
data.tar.gz: 201f767f782b5d675834a1539e9e336b25b06773c7fa5e9162dc37d4c21fda0efbadec142bfd52f0ff7ef3082b5f0a2c2a7bc7833a110fe1c99f7f2ac26df079
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
MovableInkAWS (1.0
|
4
|
+
MovableInkAWS (1.1.0)
|
5
5
|
aws-sdk-athena (~> 1)
|
6
6
|
aws-sdk-autoscaling (~> 1)
|
7
7
|
aws-sdk-cloudwatch (~> 1)
|
@@ -20,8 +20,8 @@ GEM
|
|
20
20
|
remote: https://rubygems.org/
|
21
21
|
specs:
|
22
22
|
aws-eventstream (1.1.0)
|
23
|
-
aws-partitions (1.
|
24
|
-
aws-sdk-athena (1.
|
23
|
+
aws-partitions (1.325.0)
|
24
|
+
aws-sdk-athena (1.27.0)
|
25
25
|
aws-sdk-core (~> 3, >= 3.71.0)
|
26
26
|
aws-sigv4 (~> 1.1)
|
27
27
|
aws-sdk-autoscaling (1.37.0)
|
@@ -30,18 +30,18 @@ GEM
|
|
30
30
|
aws-sdk-cloudwatch (1.38.0)
|
31
31
|
aws-sdk-core (~> 3, >= 3.71.0)
|
32
32
|
aws-sigv4 (~> 1.1)
|
33
|
-
aws-sdk-core (3.97.
|
33
|
+
aws-sdk-core (3.97.1)
|
34
34
|
aws-eventstream (~> 1, >= 1.0.2)
|
35
35
|
aws-partitions (~> 1, >= 1.239.0)
|
36
36
|
aws-sigv4 (~> 1.1)
|
37
37
|
jmespath (~> 1.0)
|
38
|
-
aws-sdk-ec2 (1.
|
38
|
+
aws-sdk-ec2 (1.165.0)
|
39
39
|
aws-sdk-core (~> 3, >= 3.71.0)
|
40
40
|
aws-sigv4 (~> 1.1)
|
41
|
-
aws-sdk-elasticache (1.
|
41
|
+
aws-sdk-elasticache (1.36.0)
|
42
42
|
aws-sdk-core (~> 3, >= 3.71.0)
|
43
43
|
aws-sigv4 (~> 1.1)
|
44
|
-
aws-sdk-kms (1.
|
44
|
+
aws-sdk-kms (1.33.0)
|
45
45
|
aws-sdk-core (~> 3, >= 3.71.0)
|
46
46
|
aws-sigv4 (~> 1.1)
|
47
47
|
aws-sdk-rds (1.85.0)
|
@@ -50,14 +50,14 @@ GEM
|
|
50
50
|
aws-sdk-route53 (1.35.0)
|
51
51
|
aws-sdk-core (~> 3, >= 3.71.0)
|
52
52
|
aws-sigv4 (~> 1.1)
|
53
|
-
aws-sdk-s3 (1.67.
|
53
|
+
aws-sdk-s3 (1.67.1)
|
54
54
|
aws-sdk-core (~> 3, >= 3.96.1)
|
55
55
|
aws-sdk-kms (~> 1)
|
56
56
|
aws-sigv4 (~> 1.1)
|
57
57
|
aws-sdk-sns (1.24.0)
|
58
58
|
aws-sdk-core (~> 3, >= 3.71.0)
|
59
59
|
aws-sigv4 (~> 1.1)
|
60
|
-
aws-sdk-ssm (1.
|
60
|
+
aws-sdk-ssm (1.80.0)
|
61
61
|
aws-sdk-core (~> 3, >= 3.71.0)
|
62
62
|
aws-sigv4 (~> 1.1)
|
63
63
|
aws-sigv4 (1.1.4)
|
data/lib/movable_ink/aws.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'aws/errors'
|
2
|
+
require_relative 'aws/metadata'
|
2
3
|
require_relative 'aws/ec2'
|
3
4
|
require_relative 'aws/sns'
|
4
5
|
require_relative 'aws/autoscaling'
|
@@ -13,6 +14,7 @@ require 'aws-sdk-cloudwatch'
|
|
13
14
|
|
14
15
|
module MovableInk
|
15
16
|
class AWS
|
17
|
+
include Metadata
|
16
18
|
include EC2
|
17
19
|
include SNS
|
18
20
|
include Autoscaling
|
@@ -93,14 +95,6 @@ module MovableInk
|
|
93
95
|
self.class.regions
|
94
96
|
end
|
95
97
|
|
96
|
-
def availability_zone
|
97
|
-
@availability_zone ||= begin
|
98
|
-
az = `ec2metadata --availability-zone 2>/dev/null`.chomp
|
99
|
-
raise(MovableInk::AWS::Errors::EC2Required) if az.empty?
|
100
|
-
az
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
98
|
def my_region
|
105
99
|
@my_region ||= availability_zone.chop
|
106
100
|
end
|
data/lib/movable_ink/aws/ec2.rb
CHANGED
@@ -63,14 +63,6 @@ module MovableInk
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
def instance_id
|
67
|
-
@instance_id ||= begin
|
68
|
-
id = `ec2metadata --instance-id 2>/dev/null`.chomp
|
69
|
-
raise(MovableInk::AWS::Errors::EC2Required) if id.empty?
|
70
|
-
id
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
66
|
def instance_tags
|
75
67
|
@instance_tags ||= run_with_backoff(quiet: true) do
|
76
68
|
ec2.describe_tags({
|
@@ -79,14 +71,6 @@ module MovableInk
|
|
79
71
|
end
|
80
72
|
end
|
81
73
|
|
82
|
-
def private_ipv4
|
83
|
-
@ipv4 ||= begin
|
84
|
-
ipv4 = `ec2metadata --local-ipv4 2>/dev/null`.chomp
|
85
|
-
raise(MovableInk::AWS::Errors::EC2Required) if ipv4.empty?
|
86
|
-
ipv4
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
74
|
def me
|
91
75
|
@me ||= all_instances.select{|instance| instance.instance_id == instance_id}.first rescue nil
|
92
76
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module MovableInk
|
4
|
+
class AWS
|
5
|
+
module Metadata
|
6
|
+
def http
|
7
|
+
@http ||= begin
|
8
|
+
http = Net::HTTP.new("169.254.169.254", 80)
|
9
|
+
http.open_timeout = 1
|
10
|
+
http.read_timeout = 1
|
11
|
+
http
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve_metadata(key)
|
16
|
+
request = Net::HTTP::Get.new("/latest/meta-data/#{key}")
|
17
|
+
request['X-aws-ec2-metadata-token'] = imds_token
|
18
|
+
response = http.request(request)
|
19
|
+
response.body
|
20
|
+
rescue
|
21
|
+
""
|
22
|
+
end
|
23
|
+
|
24
|
+
def availability_zone
|
25
|
+
@availability_zone ||= begin
|
26
|
+
az = retrieve_metadata('placement/availability-zone')
|
27
|
+
raise(MovableInk::AWS::Errors::EC2Required) if az.empty?
|
28
|
+
az
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def instance_id
|
33
|
+
@instance_id ||= begin
|
34
|
+
id = retrieve_metadata('instance-id')
|
35
|
+
raise(MovableInk::AWS::Errors::EC2Required) if id.empty?
|
36
|
+
id
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def private_ipv4
|
41
|
+
@ipv4 ||= begin
|
42
|
+
ipv4 = retrieve_metadata('local-ipv4')
|
43
|
+
raise(MovableInk::AWS::Errors::EC2Required) if ipv4.empty?
|
44
|
+
ipv4
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def imds_token
|
51
|
+
begin
|
52
|
+
request = Net::HTTP::Put.new('/latest/api/token')
|
53
|
+
request['X-aws-ec2-metadata-token-ttl-seconds'] = 120
|
54
|
+
response = http.request(request)
|
55
|
+
response.body
|
56
|
+
rescue
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/movable_ink/version.rb
CHANGED
data/spec/aws_spec.rb
CHANGED
@@ -2,15 +2,6 @@ require_relative '../lib/movable_ink/aws'
|
|
2
2
|
|
3
3
|
describe MovableInk::AWS do
|
4
4
|
context "outside EC2" do
|
5
|
-
it "should raise an error if EC2 is required" do
|
6
|
-
aws = MovableInk::AWS.new
|
7
|
-
allow(aws).to receive(:`).with('ec2metadata --instance-id 2>/dev/null').and_return("")
|
8
|
-
allow(aws).to receive(:`).with('ec2metadata --availability-zone 2>/dev/null').and_return("")
|
9
|
-
|
10
|
-
expect{ aws.instance_id }.to raise_error(MovableInk::AWS::Errors::EC2Required)
|
11
|
-
expect{ aws.availability_zone }.to raise_error(MovableInk::AWS::Errors::EC2Required)
|
12
|
-
end
|
13
|
-
|
14
5
|
it 'doesnt raise an error if instance_id is set' do
|
15
6
|
aws = MovableInk::AWS.new(instance_id: 'i-987654321')
|
16
7
|
expect(aws.instance_id).to eq('i-987654321')
|
@@ -18,21 +9,9 @@ describe MovableInk::AWS do
|
|
18
9
|
end
|
19
10
|
|
20
11
|
context "inside EC2" do
|
21
|
-
it "should call ec2metadata to get the instance ID" do
|
22
|
-
aws = MovableInk::AWS.new
|
23
|
-
expect(aws).to receive(:`).with('ec2metadata --instance-id 2>/dev/null').and_return("i-12345\n")
|
24
|
-
expect(aws.instance_id).to eq('i-12345')
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should call ec2metadata to get the availability zone" do
|
28
|
-
aws = MovableInk::AWS.new
|
29
|
-
expect(aws).to receive(:`).with('ec2metadata --availability-zone 2>/dev/null').and_return("us-east-1a\n")
|
30
|
-
expect(aws.availability_zone).to eq('us-east-1a')
|
31
|
-
end
|
32
|
-
|
33
12
|
it "should find the datacenter by region" do
|
34
13
|
aws = MovableInk::AWS.new
|
35
|
-
expect(aws).to receive(
|
14
|
+
expect(aws).to receive(:retrieve_metadata).with('placement/availability-zone').and_return("us-east-1a")
|
36
15
|
expect(aws.datacenter).to eq('iad')
|
37
16
|
end
|
38
17
|
|
data/spec/ec2_spec.rb
CHANGED
@@ -4,17 +4,11 @@ describe MovableInk::AWS::EC2 do
|
|
4
4
|
context "outside EC2" do
|
5
5
|
it "should raise an error if trying to load mi_env outside of EC2" do
|
6
6
|
aws = MovableInk::AWS.new
|
7
|
-
allow(aws).to receive(
|
8
|
-
allow(aws).to receive(
|
7
|
+
allow(aws).to receive(:retrieve_metadata).with('instance-id').and_return("")
|
8
|
+
allow(aws).to receive(:retrieve_metadata).with('placement/availability-zone').and_return("")
|
9
9
|
expect{ aws.mi_env }.to raise_error(MovableInk::AWS::Errors::EC2Required)
|
10
10
|
end
|
11
11
|
|
12
|
-
it 'should raise an error if trying to load private_ipv4 outside of EC2' do
|
13
|
-
aws = MovableInk::AWS.new
|
14
|
-
allow(aws).to receive(:`).with('ec2metadata --local-ipv4 2>/dev/null').and_return('')
|
15
|
-
expect{ aws.private_ipv4 }.to raise_error(MovableInk::AWS::Errors::EC2Required)
|
16
|
-
end
|
17
|
-
|
18
12
|
it "should use the provided environment" do
|
19
13
|
aws = MovableInk::AWS.new(environment: 'test')
|
20
14
|
expect(aws.mi_env).to eq('test')
|
@@ -67,12 +61,6 @@ describe MovableInk::AWS::EC2 do
|
|
67
61
|
expect(aws.mi_env).to eq('test')
|
68
62
|
end
|
69
63
|
|
70
|
-
it 'calls ec2metadata to get the private ipv4 address of the instance' do
|
71
|
-
aws = MovableInk::AWS.new
|
72
|
-
allow(aws).to receive(:`).with('ec2metadata --local-ipv4 2>/dev/null').and_return('10.0.0.1')
|
73
|
-
expect(aws.private_ipv4).to eq('10.0.0.1')
|
74
|
-
end
|
75
|
-
|
76
64
|
context 'instance_tags' do
|
77
65
|
it 'returns the tags of the current instance' do
|
78
66
|
ec2.stub_responses(:describe_tags, tag_data)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../lib/movable_ink/aws'
|
2
|
+
|
3
|
+
describe MovableInk::AWS::Metadata do
|
4
|
+
context 'outside ec2' do
|
5
|
+
it 'should raise an error if EC2 is required' do
|
6
|
+
aws = MovableInk::AWS.new
|
7
|
+
allow(aws).to receive(:retrieve_metadata).with('instance-id').and_return("")
|
8
|
+
allow(aws).to receive(:retrieve_metadata).with('placement/availability-zone').and_return("")
|
9
|
+
|
10
|
+
expect{ aws.instance_id }.to raise_error(MovableInk::AWS::Errors::EC2Required)
|
11
|
+
expect{ aws.availability_zone }.to raise_error(MovableInk::AWS::Errors::EC2Required)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should raise an error if trying to load private_ipv4 outside of EC2' do
|
15
|
+
aws = MovableInk::AWS.new
|
16
|
+
allow(aws).to receive(:retrieve_metadata).with('local-ipv4').and_return('')
|
17
|
+
expect{ aws.private_ipv4 }.to raise_error(MovableInk::AWS::Errors::EC2Required)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'inside ec2' do
|
22
|
+
it 'calls the EC2 metadata service to get the private ipv4 address of the instance' do
|
23
|
+
aws = MovableInk::AWS.new
|
24
|
+
allow(aws).to receive(:retrieve_metadata).with('local-ipv4').and_return('10.0.0.1')
|
25
|
+
expect(aws.private_ipv4).to eq('10.0.0.1')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'calls the EC2 metadata service to get the instance ID' do
|
29
|
+
aws = MovableInk::AWS.new
|
30
|
+
expect(aws).to receive(:retrieve_metadata).with('instance-id').and_return("i-12345")
|
31
|
+
expect(aws.instance_id).to eq('i-12345')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'calls the EC2 metadata service to get the availability zone' do
|
35
|
+
aws = MovableInk::AWS.new
|
36
|
+
expect(aws).to receive(:retrieve_metadata).with('placement/availability-zone').and_return("us-east-1a")
|
37
|
+
expect(aws.availability_zone).to eq('us-east-1a')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: MovableInkAWS
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Chesler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05
|
11
|
+
date: 2020-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|
@@ -212,6 +212,7 @@ files:
|
|
212
212
|
- lib/movable_ink/aws/ec2.rb
|
213
213
|
- lib/movable_ink/aws/elasticache.rb
|
214
214
|
- lib/movable_ink/aws/errors.rb
|
215
|
+
- lib/movable_ink/aws/metadata.rb
|
215
216
|
- lib/movable_ink/aws/route53.rb
|
216
217
|
- lib/movable_ink/aws/s3.rb
|
217
218
|
- lib/movable_ink/aws/sns.rb
|
@@ -221,6 +222,7 @@ files:
|
|
221
222
|
- spec/aws_spec.rb
|
222
223
|
- spec/ec2_spec.rb
|
223
224
|
- spec/elasticache_spec.rb
|
225
|
+
- spec/metadata_spec.rb
|
224
226
|
- spec/route53_spec.rb
|
225
227
|
- spec/s3_spec.rb
|
226
228
|
- spec/sns_spec.rb
|