MovableInkAWS 1.0.18 → 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/Gemfile.lock +37 -33
- data/MovableInkAWS.gemspec +1 -0
- data/lib/movable_ink/aws.rb +6 -8
- data/lib/movable_ink/aws/ec2.rb +1 -17
- data/lib/movable_ink/aws/eks.rb +58 -0
- 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 +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7154439aecffd0332803c4aad89b681008e58a3f297116b56a4a3119d531be9b
|
4
|
+
data.tar.gz: a22a422e58c5631efc1ef57d6802dbafd5f8823cb1432769313b088e767ffcd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d04cbc7a65a5d71459009150197091bdd59137ee6da40e521d275ccfca861f8c85ecc0c3c07dac9741bae004828726341f8509dc0f4eab5ddada36e40309408
|
7
|
+
data.tar.gz: 14e3171ff0d0c041cb88deabfe10a39d43826769436e94b4ae7f8adbd92811a645b7d3ec33e7d4cd1a30a40ae4888c2d9c7b7d40604b03affc3fd2c550bcd863
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
MovableInkAWS (1.0
|
4
|
+
MovableInkAWS (1.2.0)
|
5
5
|
aws-sdk-athena (~> 1)
|
6
6
|
aws-sdk-autoscaling (~> 1)
|
7
7
|
aws-sdk-cloudwatch (~> 1)
|
8
8
|
aws-sdk-core (~> 3)
|
9
9
|
aws-sdk-ec2 (~> 1)
|
10
|
+
aws-sdk-eks (~> 1)
|
10
11
|
aws-sdk-elasticache (~> 1)
|
11
12
|
aws-sdk-rds (~> 1)
|
12
13
|
aws-sdk-route53 (~> 1)
|
@@ -20,48 +21,51 @@ GEM
|
|
20
21
|
remote: https://rubygems.org/
|
21
22
|
specs:
|
22
23
|
aws-eventstream (1.1.0)
|
23
|
-
aws-partitions (1.
|
24
|
-
aws-sdk-athena (1.
|
25
|
-
aws-sdk-core (~> 3, >= 3.
|
24
|
+
aws-partitions (1.353.0)
|
25
|
+
aws-sdk-athena (1.30.0)
|
26
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
26
27
|
aws-sigv4 (~> 1.1)
|
27
|
-
aws-sdk-autoscaling (1.
|
28
|
-
aws-sdk-core (~> 3, >= 3.
|
28
|
+
aws-sdk-autoscaling (1.44.0)
|
29
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
29
30
|
aws-sigv4 (~> 1.1)
|
30
|
-
aws-sdk-cloudwatch (1.
|
31
|
-
aws-sdk-core (~> 3, >= 3.
|
31
|
+
aws-sdk-cloudwatch (1.42.0)
|
32
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
32
33
|
aws-sigv4 (~> 1.1)
|
33
|
-
aws-sdk-core (3.
|
34
|
+
aws-sdk-core (3.104.3)
|
34
35
|
aws-eventstream (~> 1, >= 1.0.2)
|
35
36
|
aws-partitions (~> 1, >= 1.239.0)
|
36
37
|
aws-sigv4 (~> 1.1)
|
37
38
|
jmespath (~> 1.0)
|
38
|
-
aws-sdk-ec2 (1.
|
39
|
-
aws-sdk-core (~> 3, >= 3.
|
39
|
+
aws-sdk-ec2 (1.183.0)
|
40
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
40
41
|
aws-sigv4 (~> 1.1)
|
41
|
-
aws-sdk-
|
42
|
-
aws-sdk-core (~> 3, >= 3.
|
42
|
+
aws-sdk-eks (1.39.0)
|
43
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
43
44
|
aws-sigv4 (~> 1.1)
|
44
|
-
aws-sdk-
|
45
|
-
aws-sdk-core (~> 3, >= 3.
|
45
|
+
aws-sdk-elasticache (1.40.0)
|
46
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
46
47
|
aws-sigv4 (~> 1.1)
|
47
|
-
aws-sdk-
|
48
|
-
aws-sdk-core (~> 3, >= 3.
|
48
|
+
aws-sdk-kms (1.36.0)
|
49
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
49
50
|
aws-sigv4 (~> 1.1)
|
50
|
-
aws-sdk-
|
51
|
-
aws-sdk-core (~> 3, >= 3.
|
51
|
+
aws-sdk-rds (1.95.0)
|
52
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
52
53
|
aws-sigv4 (~> 1.1)
|
53
|
-
aws-sdk-
|
54
|
-
aws-sdk-core (~> 3, >= 3.
|
54
|
+
aws-sdk-route53 (1.40.0)
|
55
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
56
|
+
aws-sigv4 (~> 1.1)
|
57
|
+
aws-sdk-s3 (1.76.0)
|
58
|
+
aws-sdk-core (~> 3, >= 3.104.1)
|
55
59
|
aws-sdk-kms (~> 1)
|
56
60
|
aws-sigv4 (~> 1.1)
|
57
|
-
aws-sdk-sns (1.
|
58
|
-
aws-sdk-core (~> 3, >= 3.
|
61
|
+
aws-sdk-sns (1.29.0)
|
62
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
59
63
|
aws-sigv4 (~> 1.1)
|
60
|
-
aws-sdk-ssm (1.
|
61
|
-
aws-sdk-core (~> 3, >= 3.
|
64
|
+
aws-sdk-ssm (1.86.0)
|
65
|
+
aws-sdk-core (~> 3, >= 3.99.0)
|
62
66
|
aws-sigv4 (~> 1.1)
|
63
|
-
aws-sigv4 (1.1
|
64
|
-
aws-eventstream (~> 1
|
67
|
+
aws-sigv4 (1.2.1)
|
68
|
+
aws-eventstream (~> 1, >= 1.0.2)
|
65
69
|
diff-lcs (1.3)
|
66
70
|
httparty (0.16.3)
|
67
71
|
mime-types (~> 3.0)
|
@@ -75,15 +79,15 @@ GEM
|
|
75
79
|
rspec-core (~> 3.9.0)
|
76
80
|
rspec-expectations (~> 3.9.0)
|
77
81
|
rspec-mocks (~> 3.9.0)
|
78
|
-
rspec-core (3.9.
|
79
|
-
rspec-support (~> 3.9.
|
80
|
-
rspec-expectations (3.9.
|
82
|
+
rspec-core (3.9.2)
|
83
|
+
rspec-support (~> 3.9.3)
|
84
|
+
rspec-expectations (3.9.2)
|
81
85
|
diff-lcs (>= 1.2.0, < 2.0)
|
82
86
|
rspec-support (~> 3.9.0)
|
83
|
-
rspec-mocks (3.9.
|
87
|
+
rspec-mocks (3.9.1)
|
84
88
|
diff-lcs (>= 1.2.0, < 2.0)
|
85
89
|
rspec-support (~> 3.9.0)
|
86
|
-
rspec-support (3.9.
|
90
|
+
rspec-support (3.9.3)
|
87
91
|
|
88
92
|
PLATFORMS
|
89
93
|
ruby
|
@@ -93,4 +97,4 @@ DEPENDENCIES
|
|
93
97
|
rspec (~> 3.6)
|
94
98
|
|
95
99
|
BUNDLED WITH
|
96
|
-
1.
|
100
|
+
2.1.3
|
data/MovableInkAWS.gemspec
CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.add_runtime_dependency 'aws-sdk-autoscaling', '~> 1'
|
15
15
|
s.add_runtime_dependency 'aws-sdk-cloudwatch', '~> 1'
|
16
16
|
s.add_runtime_dependency 'aws-sdk-ec2', '~> 1'
|
17
|
+
s.add_runtime_dependency 'aws-sdk-eks', '~> 1'
|
17
18
|
s.add_runtime_dependency 'aws-sdk-elasticache', '~> 1'
|
18
19
|
s.add_runtime_dependency 'aws-sdk-rds', '~> 1'
|
19
20
|
s.add_runtime_dependency 'aws-sdk-route53', '~> 1'
|
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'
|
@@ -6,6 +7,7 @@ require_relative 'aws/route53'
|
|
6
7
|
require_relative 'aws/ssm'
|
7
8
|
require_relative 'aws/athena'
|
8
9
|
require_relative 'aws/s3'
|
10
|
+
require_relative 'aws/eks'
|
9
11
|
require_relative 'aws/elasticache'
|
10
12
|
require_relative 'aws/api_gateway'
|
11
13
|
require 'aws-sdk-cloudwatch'
|
@@ -13,6 +15,7 @@ require 'aws-sdk-cloudwatch'
|
|
13
15
|
|
14
16
|
module MovableInk
|
15
17
|
class AWS
|
18
|
+
include Metadata
|
16
19
|
include EC2
|
17
20
|
include SNS
|
18
21
|
include Autoscaling
|
@@ -22,6 +25,7 @@ module MovableInk
|
|
22
25
|
include S3
|
23
26
|
include ElastiCache
|
24
27
|
include ApiGateway
|
28
|
+
include EKS
|
25
29
|
|
26
30
|
class << self
|
27
31
|
def regions
|
@@ -61,6 +65,7 @@ module MovableInk
|
|
61
65
|
Aws::EC2::Errors::ResourceAlreadyAssociated,
|
62
66
|
Aws::EC2::Errors::Unavailable,
|
63
67
|
Aws::SNS::Errors::ThrottledException,
|
68
|
+
Aws::AutoScaling::Errors::Throttling,
|
64
69
|
Aws::AutoScaling::Errors::ThrottledException,
|
65
70
|
Aws::S3::Errors::SlowDown,
|
66
71
|
Aws::Route53::Errors::Throttling,
|
@@ -68,6 +73,7 @@ module MovableInk
|
|
68
73
|
Aws::Route53::Errors::PriorRequestNotComplete,
|
69
74
|
Aws::Route53::Errors::ServiceUnavailable,
|
70
75
|
Aws::SSM::Errors::TooManyUpdates,
|
76
|
+
Aws::SSM::Errors::ThrottlingException,
|
71
77
|
Aws::Athena::Errors::ThrottlingException,
|
72
78
|
MovableInk::AWS::Errors::NoEnvironmentTagError
|
73
79
|
sleep_time = (num+1)**2 + rand(10)
|
@@ -93,14 +99,6 @@ module MovableInk
|
|
93
99
|
self.class.regions
|
94
100
|
end
|
95
101
|
|
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
102
|
def my_region
|
105
103
|
@my_region ||= availability_zone.chop
|
106
104
|
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
|
@@ -98,7 +82,7 @@ module MovableInk
|
|
98
82
|
name: 'tag:mi:roles',
|
99
83
|
values: roles
|
100
84
|
})
|
101
|
-
instances = load_all_instances(
|
85
|
+
instances = load_all_instances(region, filter: filter)
|
102
86
|
else
|
103
87
|
instances = all_instances(region: region).select { |instance|
|
104
88
|
instance.tags.select{ |tag| tag.key == 'mi:roles' }.detect { |tag|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'aws-sdk-eks'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module MovableInk
|
5
|
+
class AWS
|
6
|
+
module EKS
|
7
|
+
def eks(region: my_region)
|
8
|
+
@eks_client ||= {}
|
9
|
+
@eks_client[region] ||= Aws::EKS::Client.new(region: region)
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate_kubeconfig(region: my_region, cluster_name:)
|
13
|
+
client = eks(region: region)
|
14
|
+
|
15
|
+
resp = run_with_backoff do
|
16
|
+
client.describe_cluster({ name: cluster_name })
|
17
|
+
rescue Aws::EKS::Errors::ResourceNotFoundException
|
18
|
+
return nil
|
19
|
+
end
|
20
|
+
|
21
|
+
cluster_arn = resp.cluster.arn
|
22
|
+
cluster_server_address = resp.cluster.endpoint
|
23
|
+
cluster_certificate_authority_data = resp.cluster.certificate_authority.data
|
24
|
+
|
25
|
+
{
|
26
|
+
'apiVersion' => 'v1',
|
27
|
+
'clusters' => [{
|
28
|
+
'cluster' => {
|
29
|
+
'certificate-authority-data' => cluster_certificate_authority_data,
|
30
|
+
'server' => cluster_server_address,
|
31
|
+
},
|
32
|
+
'name' => cluster_arn
|
33
|
+
}],
|
34
|
+
'contexts' => [{
|
35
|
+
'context' => {
|
36
|
+
'cluster' => cluster_arn,
|
37
|
+
'user' => cluster_arn,
|
38
|
+
},
|
39
|
+
'name' => cluster_arn,
|
40
|
+
}],
|
41
|
+
'current-context' => cluster_arn,
|
42
|
+
'kind' => 'Config',
|
43
|
+
'preferences' => {},
|
44
|
+
'users' => [{
|
45
|
+
'name' => cluster_arn,
|
46
|
+
'user' => {
|
47
|
+
'exec' => {
|
48
|
+
'apiVersion' => 'client.authentication.k8s.io/v1alpha1',
|
49
|
+
'args' => ['--region', region, 'eks', 'get-token', '--cluster-name', cluster_name],
|
50
|
+
'command' => 'aws',
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}]
|
54
|
+
}.to_yaml
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
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.2.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-
|
11
|
+
date: 2020-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: aws-sdk-eks
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: aws-sdk-elasticache
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -210,8 +224,10 @@ files:
|
|
210
224
|
- lib/movable_ink/aws/athena.rb
|
211
225
|
- lib/movable_ink/aws/autoscaling.rb
|
212
226
|
- lib/movable_ink/aws/ec2.rb
|
227
|
+
- lib/movable_ink/aws/eks.rb
|
213
228
|
- lib/movable_ink/aws/elasticache.rb
|
214
229
|
- lib/movable_ink/aws/errors.rb
|
230
|
+
- lib/movable_ink/aws/metadata.rb
|
215
231
|
- lib/movable_ink/aws/route53.rb
|
216
232
|
- lib/movable_ink/aws/s3.rb
|
217
233
|
- lib/movable_ink/aws/sns.rb
|
@@ -221,6 +237,7 @@ files:
|
|
221
237
|
- spec/aws_spec.rb
|
222
238
|
- spec/ec2_spec.rb
|
223
239
|
- spec/elasticache_spec.rb
|
240
|
+
- spec/metadata_spec.rb
|
224
241
|
- spec/route53_spec.rb
|
225
242
|
- spec/s3_spec.rb
|
226
243
|
- spec/sns_spec.rb
|
@@ -243,8 +260,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
260
|
- !ruby/object:Gem::Version
|
244
261
|
version: '0'
|
245
262
|
requirements: []
|
246
|
-
|
247
|
-
rubygems_version: 2.7.7
|
263
|
+
rubygems_version: 3.0.8
|
248
264
|
signing_key:
|
249
265
|
specification_version: 4
|
250
266
|
summary: AWS Utility methods for MovableInk
|