dockable 0.1.0 → 0.3.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
  SHA256:
3
- metadata.gz: fd1d7cb100226591b20bbbc26e606c6b803a1d37cf63f71592343d595b031605
4
- data.tar.gz: 3125f9a01324f6d95abb26973d814c21a7c9f59b7b26778c2c3d6163c79ba14e
3
+ metadata.gz: b9ab6bf84a924a8f5d7eba45555a481800db93549db54134a78dab089e156e11
4
+ data.tar.gz: 14478faa4b0eecabd75716dd7331c50b28d789e0a0bf200a8a1a6b555b07b813
5
5
  SHA512:
6
- metadata.gz: cbac6d9368592e07a1b13a449ae82e3b352dac162e6fc78636ab3e8413072b5cf3aa06dce94eb07f2cb5482964b0acf2be6f177a37de518a107d78f11645d464
7
- data.tar.gz: d1596a20fed5c85bdc9317f24590b1be27c3b2bb39d7ee8a1d8dfcf0c43690642d9860535aeb2d9fc8a484075d7bea03b83051d9da1538d7ee7377ea03e30d7d
6
+ metadata.gz: 86718d909b9858001a5a58770818bae40650c6ca0d8e3d67edfa348dff565dc0d0b92c2ecc19ade7d46bc9305cffe982a26d6c92321b9c86db462a85ddc2c17c
7
+ data.tar.gz: d88277b0a0933e793759d7fcce3014796694963a3084a4439f79fdf67398430fc642f73ba33d5a24902023f2a281779545dd60a92c7e498304085c0a97864185
@@ -1,41 +1,52 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dockable (0.1.0)
4
+ dockable (0.3.0)
5
5
  aws-sdk-s3
6
+ aws-sdk-ssm
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- aws-partitions (1.64.0)
11
- aws-sdk-core (3.16.0)
11
+ aws-eventstream (1.0.1)
12
+ aws-partitions (1.97.0)
13
+ aws-sdk-core (3.24.0)
14
+ aws-eventstream (~> 1.0)
12
15
  aws-partitions (~> 1.0)
13
16
  aws-sigv4 (~> 1.0)
14
17
  jmespath (~> 1.0)
15
- aws-sdk-kms (1.5.0)
18
+ aws-sdk-kms (1.7.0)
16
19
  aws-sdk-core (~> 3)
17
20
  aws-sigv4 (~> 1.0)
18
- aws-sdk-s3 (1.8.1)
19
- aws-sdk-core (~> 3)
21
+ aws-sdk-s3 (1.17.0)
22
+ aws-sdk-core (~> 3, >= 3.21.2)
20
23
  aws-sdk-kms (~> 1)
21
24
  aws-sigv4 (~> 1.0)
22
- aws-sigv4 (1.0.2)
25
+ aws-sdk-ssm (1.20.0)
26
+ aws-sdk-core (~> 3)
27
+ aws-sigv4 (~> 1.0)
28
+ aws-sigv4 (1.0.3)
29
+ coderay (1.1.2)
23
30
  diff-lcs (1.3)
24
- jmespath (1.3.1)
31
+ jmespath (1.4.0)
32
+ method_source (0.9.0)
33
+ pry (0.11.3)
34
+ coderay (~> 1.1.0)
35
+ method_source (~> 0.9.0)
25
36
  rake (10.5.0)
26
- rspec (3.7.0)
27
- rspec-core (~> 3.7.0)
28
- rspec-expectations (~> 3.7.0)
29
- rspec-mocks (~> 3.7.0)
30
- rspec-core (3.7.1)
31
- rspec-support (~> 3.7.0)
32
- rspec-expectations (3.7.0)
37
+ rspec (3.8.0)
38
+ rspec-core (~> 3.8.0)
39
+ rspec-expectations (~> 3.8.0)
40
+ rspec-mocks (~> 3.8.0)
41
+ rspec-core (3.8.0)
42
+ rspec-support (~> 3.8.0)
43
+ rspec-expectations (3.8.0)
33
44
  diff-lcs (>= 1.2.0, < 2.0)
34
- rspec-support (~> 3.7.0)
35
- rspec-mocks (3.7.0)
45
+ rspec-support (~> 3.8.0)
46
+ rspec-mocks (3.8.0)
36
47
  diff-lcs (>= 1.2.0, < 2.0)
37
- rspec-support (~> 3.7.0)
38
- rspec-support (3.7.1)
48
+ rspec-support (~> 3.8.0)
49
+ rspec-support (3.8.0)
39
50
 
40
51
  PLATFORMS
41
52
  ruby
@@ -43,8 +54,9 @@ PLATFORMS
43
54
  DEPENDENCIES
44
55
  bundler (~> 1.16)
45
56
  dockable!
57
+ pry
46
58
  rake (~> 10.0)
47
59
  rspec (~> 3.0)
48
60
 
49
61
  BUNDLED WITH
50
- 1.16.1
62
+ 1.16.2
data/README.md CHANGED
@@ -28,6 +28,14 @@ You can run puma like this:
28
28
  $ dockable web
29
29
  ```
30
30
 
31
+ ### Loading environment variables from Systems Manager Parameter Store
32
+
33
+ If you've added `DOCKABLE_ENV_SSM_PREFIX` as an environment variable, dockable will look for all values in the AWS Parameter store that begin with that prefix and load them as environment variables.
34
+
35
+ For instance, if I had `/production/staff` set as my `DOCKABLE_ENV_SSM_Prefix` and had the parameter `/production/staff/follower_database_url` set with the value `postgres://funtime.com`, dockable will load that as `FOLLOWER_DATABASE_URL=postgres://funtime.com`
36
+
37
+ _Please Note: setting `DOCKABLE_ENV_SSM_PREFIX` will take precendence over loading environment variables from S3_
38
+
31
39
  ### Loading environment variables from S3
32
40
 
33
41
  If you've specified the `DOCKABLE_ENV_BUCKET_NAME` and `DOCKABLE_ENV_KEY_NAME` variables, it will try to download an environment file from that location.
@@ -7,8 +7,8 @@ require "dockable"
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require "pry"
11
+ Pry.start
12
12
 
13
- require "irb"
14
- IRB.start(__FILE__)
13
+ # require "irb"
14
+ # IRB.start(__FILE__)
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.16"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "rspec", "~> 3.0"
24
+ spec.add_development_dependency "pry"
24
25
 
25
26
  spec.add_dependency "aws-sdk-s3"
27
+ spec.add_dependency "aws-sdk-ssm"
26
28
  end
@@ -3,8 +3,9 @@
3
3
  require "dockable"
4
4
 
5
5
  vars = Dockable.load_environment_variables(
6
- bucket: ENV["DOCKABLE_ENV_BUCKET_NAME"],
7
- key: ENV["DOCKABLE_ENV_KEY_NAME"],
6
+ bucket: ENV["DOCKABLE_ENV_BUCKET_NAME"],
7
+ key: ENV["DOCKABLE_ENV_KEY_NAME"],
8
+ ssm_prefix: ENV["DOCKABLE_ENV_SSM_PREFIX"],
8
9
  )
9
10
 
10
11
  Dir.chdir(ENV["DOCKABLE_ROOT_DIR"]) if ENV["DOCKABLE_ROOT_DIR"]
@@ -1,18 +1,19 @@
1
- require "dockable/version"
2
-
3
1
  require "yaml"
4
2
 
3
+ require "aws-sdk-ssm"
4
+ require "aws-sdk-s3"
5
+
6
+ require "dockable/version"
7
+
5
8
  module Dockable
6
9
 
7
- def self.load_environment_variables(bucket:, key:)
8
- if presence(bucket) && presence(key)
9
- require "aws-sdk-s3"
10
- client = Aws::S3::Client.new
11
- resp = client.get_object(bucket: bucket, key: key)
12
- body = resp.body.read
13
- YAML.load(body).map { |k, v| [ k.to_s, v.to_s ] }.to_h
10
+ def self.load_environment_variables(bucket:, key:, ssm_prefix:)
11
+ if presence(ssm_prefix)
12
+ load_from_ssm(ssm_prefix: ssm_prefix)
13
+ elsif presence(bucket) && presence(key)
14
+ load_from_s3(bucket: bucket, key: key)
14
15
  else
15
- STDERR.puts "Dockable warning: No bucket or key found, no environment file loaded."
16
+ STDERR.puts "Dockable warning: No bucket/key or SSM Prefix found, no environment file loaded."
16
17
  {}
17
18
  end
18
19
  end
@@ -26,7 +27,7 @@ module Dockable
26
27
  else
27
28
  argv
28
29
  end
29
- elsif argv.size == 0
30
+ elsif argv.empty?
30
31
  fail ArgumentError, "No command specified"
31
32
  else
32
33
  argv
@@ -49,4 +50,23 @@ module Dockable
49
50
  end
50
51
  end
51
52
 
53
+ def self.load_from_ssm(ssm_prefix:)
54
+ client = Aws::SSM::Client.new
55
+ ssm_prefix = "/#{ssm_prefix}" if ssm_prefix[0] != "/" # get_parameters_by_path requires leading /
56
+ parameters = client.get_parameters_by_path(path: ssm_prefix, with_decryption: true).each.flat_map(&:parameters)
57
+ parameters.map { |param|
58
+ [
59
+ param.name.split("/").last.upcase.gsub(/\W/, "_"),
60
+ param.value.to_s
61
+ ]
62
+ }.to_h
63
+ end
64
+
65
+ def self.load_from_s3(bucket:, key:)
66
+ client = Aws::S3::Client.new
67
+ resp = client.get_object(bucket: bucket, key: key)
68
+ body = resp.body.read
69
+ YAML.safe_load(body).map { |k, v| [ k.to_s, v.to_s ] }.to_h
70
+ end
71
+
52
72
  end
@@ -1,3 +1,5 @@
1
1
  module Dockable
2
- VERSION = "0.1.0"
2
+
3
+ VERSION = "0.3.0"
4
+
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iain
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-21 00:00:00.000000000 Z
11
+ date: 2018-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: aws-sdk-s3
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: aws-sdk-ssm
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: Some helpers for launching Ruby apps inside Docker
70
98
  email:
71
99
  - iain@iain.nl