dockable 0.1.0 → 0.3.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 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