chambermaid 0.4.0 → 1.0.1
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/.github/workflows/commitlint.yml +16 -0
- data/.github/workflows/release.yml +56 -0
- data/CHANGELOG.md +51 -0
- data/Gemfile.lock +1 -1
- data/README.md +62 -2
- data/chambermaid.gemspec +2 -0
- data/lib/chambermaid/base.rb +0 -3
- data/lib/chambermaid/environment.rb +11 -0
- data/lib/chambermaid/namespace.rb +27 -0
- data/lib/chambermaid/parameter_store.rb +22 -0
- data/lib/chambermaid/railtie.rb +1 -1
- data/lib/chambermaid/version.rb +2 -2
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db11b6ed46ebe0bec94edbdfc616b67dcbfd22e280ee5d2ef04c870ff27ea44d
|
4
|
+
data.tar.gz: ab097d0efc95e0e51d1fce0e51b771591c408d683f230716199cc880a3f813ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35e8d6217d1e90d8e4c24ebea8df5549cf514b82f54e59eec5ae986a84677175d57c1d6074f3b8ec9fa43f6d20e43180f53cba80294b002959bcea6bba676dfe
|
7
|
+
data.tar.gz: 2dd4f31782acc1fbd3ecf314d8462040cf7b1edff7df76d6ee9df46d794ce42b6e0d1796056f80e38092c59a1ebe52aed50db7039f44643f1669e9906d3eaa9d
|
@@ -0,0 +1,16 @@
|
|
1
|
+
name: commitlint
|
2
|
+
on:
|
3
|
+
- pull_request
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
lint:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
env:
|
9
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
10
|
+
steps:
|
11
|
+
- uses: actions/checkout@v2
|
12
|
+
with:
|
13
|
+
fetch-depth: 0
|
14
|
+
- uses: wagoid/commitlint-github-action@v1
|
15
|
+
with:
|
16
|
+
failOnWarnings: true
|
@@ -0,0 +1,56 @@
|
|
1
|
+
name: release
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- master
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
create-release:
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
env:
|
11
|
+
GITHUB_TOKEN: ${{ secrets.GHUB_PAT }}
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
with:
|
15
|
+
fetch-depth: 0
|
16
|
+
- uses: ridedott/release-me-action@master
|
17
|
+
id: get-version-number
|
18
|
+
with:
|
19
|
+
dry-run: true
|
20
|
+
release-rules: |
|
21
|
+
[
|
22
|
+
{ "type": "release", "scope": "major", "release": "major" },
|
23
|
+
{ "type": "refactor", "release": "patch" }
|
24
|
+
]
|
25
|
+
- uses: actions/setup-ruby@v1
|
26
|
+
with:
|
27
|
+
ruby-version: "2.6"
|
28
|
+
- run: gem install bundler -v 2.1.2
|
29
|
+
- name: Set version.rb and Gemfile.lock
|
30
|
+
run: |
|
31
|
+
printf "module Chambermaid\n VERSION = \"$NEW_VERSION\"\nend" > lib/chambermaid/version.rb
|
32
|
+
bundle install
|
33
|
+
env:
|
34
|
+
NEW_VERSION: ${{ steps.get-version-number.outputs.version }}
|
35
|
+
- run: bundle exec rake build
|
36
|
+
- uses: ridedott/release-me-action@master
|
37
|
+
with:
|
38
|
+
commit-assets: |
|
39
|
+
./lib/chambermaid/version.rb
|
40
|
+
./Gemfile.lock
|
41
|
+
release-assets: |
|
42
|
+
./pkg/*.gem
|
43
|
+
release-rules: |
|
44
|
+
[
|
45
|
+
{ "type": "release", "scope": "major", "release": "major" },
|
46
|
+
{ "type": "refactor", "release": "patch" }
|
47
|
+
]
|
48
|
+
- name: publish to rubygems
|
49
|
+
run: |
|
50
|
+
mkdir -p ~/.gem
|
51
|
+
printf -- "---\n:rubygems_api_key: $GEM_HOST_API_KEY" > ~/.gem/credentials
|
52
|
+
chmod 0600 ~/.gem/credentials
|
53
|
+
gem push pkg/chambermaid-$NEW_VERSION.gem
|
54
|
+
env:
|
55
|
+
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
56
|
+
NEW_VERSION: ${{ steps.get-version-number.outputs.version }}
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
## [1.0.1](https://github.com/mileszim/chambermaid/compare/v1.0.0...v1.0.1) (2020-08-03)
|
2
|
+
|
3
|
+
### Code Refactoring
|
4
|
+
|
5
|
+
- load dependencies specific to each module ([f52aa00](https://github.com/mileszim/chambermaid/commit/f52aa00410f6abc63263403d6180b463eca4c0bf))
|
6
|
+
|
7
|
+
# [1.0.0](https://github.com/mileszim/chambermaid/compare/v0.5.5...v1.0.0) (2020-08-03)
|
8
|
+
|
9
|
+
### Documentation
|
10
|
+
|
11
|
+
- **README:** update README with authentication instructions ([fd2a826](https://github.com/mileszim/chambermaid/commit/fd2a826066a7507ecb97b68a8fbbaad2146da764))
|
12
|
+
|
13
|
+
### Other
|
14
|
+
|
15
|
+
- **major:** release version 1 ([eb2f11c](https://github.com/mileszim/chambermaid/commit/eb2f11cb7d963c27aba467643d46f52eddce2e7e))
|
16
|
+
|
17
|
+
## [0.5.5](https://github.com/mileszim/chambermaid/compare/v0.5.4...v0.5.5) (2020-08-03)
|
18
|
+
|
19
|
+
### Documentation
|
20
|
+
|
21
|
+
- add links to documentation and more info for rdoc ([3f7ec6d](https://github.com/mileszim/chambermaid/commit/3f7ec6ddb07478ceefef83403c1e5b9de447509a))
|
22
|
+
|
23
|
+
## [0.5.4](https://github.com/mileszim/chambermaid/compare/v0.5.3...v0.5.4) (2020-08-03)
|
24
|
+
|
25
|
+
### Bug Fixes
|
26
|
+
|
27
|
+
- **release:** chmod 0600 ~/.gem/credentials after generating ([ed85d5b](https://github.com/mileszim/chambermaid/commit/ed85d5b1d9b76762bcc50734c806a6e1cd224ad5))
|
28
|
+
|
29
|
+
## [0.5.3](https://github.com/mileszim/chambermaid/compare/v0.5.2...v0.5.3) (2020-08-03)
|
30
|
+
|
31
|
+
### Bug Fixes
|
32
|
+
|
33
|
+
- **release:** use bash end of args with printf ([fbc0ae2](https://github.com/mileszim/chambermaid/commit/fbc0ae28961c40f984e6685e5feb33799934f510))
|
34
|
+
|
35
|
+
## [0.5.2](https://github.com/mileszim/chambermaid/compare/v0.5.1...v0.5.2) (2020-08-03)
|
36
|
+
|
37
|
+
### Bug Fixes
|
38
|
+
|
39
|
+
- **release:** set rubygem api key into ~/.gem/credentials ([7faef58](https://github.com/mileszim/chambermaid/commit/7faef587631284c3bb89c22572b8bce9c31172d0))
|
40
|
+
|
41
|
+
## [0.5.1](https://github.com/mileszim/chambermaid/compare/v0.5.0...v0.5.1) (2020-08-03)
|
42
|
+
|
43
|
+
### Bug Fixes
|
44
|
+
|
45
|
+
- **release:** publish to rubygems on successful release ([e019c7d](https://github.com/mileszim/chambermaid/commit/e019c7df3f43c251a5542374cc9c869fc4b00d92))
|
46
|
+
|
47
|
+
# [0.5.0](https://github.com/mileszim/chambermaid/compare/v0.4.1...v0.5.0) (2020-08-03)
|
48
|
+
|
49
|
+
### Features
|
50
|
+
|
51
|
+
- add commitlint and release workflow (#2) ([1159e69](https://github.com/mileszim/chambermaid/commit/1159e69e95701e4763fdbe08430d579c2a2a8440)), closes [#2](https://github.com/mileszim/chambermaid/issues/2)
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -4,6 +4,8 @@ Companion RubyGem for [chamber](https://github.com/segmentio/chamber).
|
|
4
4
|
|
5
5
|
Chambermaid injects AWS SSM params into your ENV. Plays nice with other ENV gems like dotenv.
|
6
6
|
|
7
|
+
- [RubyDocs](https://rubydoc.info/gems/chambermaid)
|
8
|
+
|
7
9
|
## Installation
|
8
10
|
|
9
11
|
Add this line to your application's Gemfile:
|
@@ -46,8 +48,10 @@ Chambermaid.configure do |config|
|
|
46
48
|
config.add_namespace("/my/important/namespace", overload: true)
|
47
49
|
end
|
48
50
|
|
49
|
-
#
|
50
|
-
Chambermaid.load
|
51
|
+
# If this is standalone ruby (not a Rails environment),
|
52
|
+
# call `Chambermaid.load!` after the configuration block
|
53
|
+
#
|
54
|
+
# Chambermaid.load!
|
51
55
|
```
|
52
56
|
|
53
57
|
**Reload SSM into ENV**
|
@@ -79,6 +83,62 @@ Chambermaid.log_level = :warn
|
|
79
83
|
|
80
84
|
_Note: Chambermaid.logger is set to Rails.logger automatically if including inside a rails app_
|
81
85
|
|
86
|
+
### AWS Authentication
|
87
|
+
|
88
|
+
Chambermaid expects your AWS credential configuration to live inside ENV on application load.
|
89
|
+
|
90
|
+
> **Note:** `AWS_DEFAULT_REGION` or `AWS_REGION` is **required**
|
91
|
+
|
92
|
+
You can use either:
|
93
|
+
* `AWS_ACCESS_KEY_ID`
|
94
|
+
* `AWS_SECRET_ACCESS_KEY`
|
95
|
+
|
96
|
+
or STS grants:
|
97
|
+
```bash
|
98
|
+
$ aws-vault exec my-user -- bundle exec rails server
|
99
|
+
```
|
100
|
+
> *See [aws-vault](https://github.com/99designs/aws-vault/blob/master/USAGE.md) docs for more info*
|
101
|
+
|
102
|
+
or a metadata endpoint grant:
|
103
|
+
* Available in attached Task or EC2 instance. *See [AWS Docs](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint.html) for more info.*
|
104
|
+
* Through aws-vault: `aws-vault exec -s my-user`
|
105
|
+
|
106
|
+
#### IAM Permissions Required
|
107
|
+
|
108
|
+
Since this is meant to work out of the box as a complement to [chamber cli](https://github.com/segmentio/chamber), it needs similar IAM permissions.
|
109
|
+
|
110
|
+
In this case, however, we can grant read-only to the namespace(s).
|
111
|
+
```json
|
112
|
+
{
|
113
|
+
"Version": "2012-10-17",
|
114
|
+
"Statement": [
|
115
|
+
{
|
116
|
+
"Sid": "",
|
117
|
+
"Effect": "Allow",
|
118
|
+
"Action": "ssm:DescribeParameters",
|
119
|
+
"Resource": "*"
|
120
|
+
},
|
121
|
+
{
|
122
|
+
"Sid": "",
|
123
|
+
"Effect": "Allow",
|
124
|
+
"Action": [
|
125
|
+
"ssm:GetParametersByPath",
|
126
|
+
"ssm:GetParameters",
|
127
|
+
"ssm:GetParameter",
|
128
|
+
"kms:Decrypt"
|
129
|
+
],
|
130
|
+
"Resource": [
|
131
|
+
"arn:aws:ssm:us-east-1:1234567890:parameter/my-chamber-service",
|
132
|
+
"arn:aws:kms:us-east-1:1234567890:key/258574a1-cfce-4530-9e3c-d4b07cd04115"
|
133
|
+
]
|
134
|
+
}
|
135
|
+
]
|
136
|
+
}
|
137
|
+
```
|
138
|
+
> **Note:** `Resource` array MUST include the full ARN of the key id used for chamber cli
|
139
|
+
> *(Default alias is `parameter_store_key`)*
|
140
|
+
|
141
|
+
|
82
142
|
## Development
|
83
143
|
|
84
144
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/chambermaid.gemspec
CHANGED
@@ -16,6 +16,8 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
17
17
|
spec.metadata["source_code_uri"] = "https://github.com/mileszim/chambermaid"
|
18
18
|
spec.metadata["changelog_uri"] = "https://github.com/mileszim/chambermaid/blob/master/CHANGELOG.md"
|
19
|
+
spec.metadata["documentation_uri"] = "https://rubydoc.info/gems/chambermaid"
|
20
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/mileszim/chambermaid/issues"
|
19
21
|
|
20
22
|
# Specify which files should be added to the gem when it is released.
|
21
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
data/lib/chambermaid/base.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
module Chambermaid
|
2
|
+
# Environment keeps a set of params available to load into ENV. It also
|
3
|
+
# maintains a copy of ENV at the time of its initialization, in order to
|
4
|
+
# restore it.
|
5
|
+
#
|
6
|
+
# @attr_reader [Hash] params
|
2
7
|
class Environment < Hash
|
3
8
|
attr_reader :params
|
4
9
|
|
@@ -35,16 +40,22 @@ module Chambermaid
|
|
35
40
|
end
|
36
41
|
|
37
42
|
# Inject into ENV without overwriting duplicates
|
43
|
+
#
|
44
|
+
# @return [Hash]
|
38
45
|
def load!
|
39
46
|
each { |k, v| ENV[k] ||= v }
|
40
47
|
end
|
41
48
|
|
42
49
|
# Inject into ENV and overwrite duplicates
|
50
|
+
#
|
51
|
+
# @return [Hash]
|
43
52
|
def overload!
|
44
53
|
each { |k, v| ENV[k] = v }
|
45
54
|
end
|
46
55
|
|
47
56
|
# Restore to original ENV
|
57
|
+
#
|
58
|
+
# @return [ENV]
|
48
59
|
def unload!
|
49
60
|
ENV.replace(@_original_env)
|
50
61
|
end
|
@@ -1,4 +1,9 @@
|
|
1
|
+
require "chambermaid/environment"
|
2
|
+
require "chambermaid/parameter_store"
|
3
|
+
|
1
4
|
module Chambermaid
|
5
|
+
# Namespaces each contain a ParameterStore and Environment instance,
|
6
|
+
# along with the overload flag
|
2
7
|
class Namespace
|
3
8
|
# @param [String] path
|
4
9
|
# @param [Boolean] overload
|
@@ -10,23 +15,45 @@ module Chambermaid
|
|
10
15
|
@env = Environment.new({})
|
11
16
|
end
|
12
17
|
|
18
|
+
# Create a namespace and immediately fetch and inject params to ENV
|
19
|
+
#
|
20
|
+
# @see Chambermaid::Namespace.load!
|
21
|
+
#
|
22
|
+
# @param [String] path
|
23
|
+
# @param [Boolean] overload
|
24
|
+
#
|
25
|
+
# @return [Chambermaid::Namespace]
|
13
26
|
def self.load!(path:, overload: false)
|
14
27
|
namespace = new(path: path, overload: overload)
|
15
28
|
namespace.load!
|
16
29
|
namespace
|
17
30
|
end
|
18
31
|
|
32
|
+
# Load ParameterStore and inject into ENV
|
33
|
+
#
|
34
|
+
# @see Chambermaid::ParameterStore#load!
|
35
|
+
# @see Chambermaid::Environment#load!
|
36
|
+
# @see Chambermaid::Environment#overload!
|
19
37
|
def load!
|
20
38
|
@store.load!
|
21
39
|
load_env!
|
22
40
|
end
|
23
41
|
|
42
|
+
# Unload params from ENV, reload ParameterStore, and inject into ENV
|
43
|
+
#
|
44
|
+
# @see Chambermaid::Environment#unload!
|
45
|
+
# @see Chambermaid::ParameterStore#reload!
|
46
|
+
# @see Chambermaid::Environment#load!
|
47
|
+
# @see Chambermaid::Environment#overload!
|
24
48
|
def reload!
|
25
49
|
@env.unload!
|
26
50
|
@store.reload!
|
27
51
|
load_env!
|
28
52
|
end
|
29
53
|
|
54
|
+
# Unload params from ENV
|
55
|
+
#
|
56
|
+
# @see Chambermaid::Environment#unload!
|
30
57
|
def unload!
|
31
58
|
@env.unload!
|
32
59
|
Chambermaid.logger.info("unloaded #{@env.size} params from ENV")
|
@@ -1,30 +1,52 @@
|
|
1
1
|
require "aws-sdk-ssm"
|
2
2
|
|
3
3
|
module Chambermaid
|
4
|
+
# ParameterStore instances fetch all parameters under a namespace/path
|
5
|
+
# from AWS SSM
|
6
|
+
#
|
7
|
+
# @note AWS authentication requires configuration via ENV (IAM credentials/STS)
|
4
8
|
class ParameterStore
|
9
|
+
# @param [String] path
|
5
10
|
def initialize(path:)
|
6
11
|
@path = path
|
7
12
|
end
|
8
13
|
|
14
|
+
# Fetch and decrypt all parameters selected by a namespace/path string
|
15
|
+
#
|
16
|
+
# @return [Boolean]
|
9
17
|
def load!
|
10
18
|
fetch_ssm_params!
|
11
19
|
end
|
12
20
|
|
21
|
+
# Clear cached parameters and re-fetch parameters from AWS SSM
|
22
|
+
#
|
23
|
+
# @return [Boolean]
|
13
24
|
def reload!
|
14
25
|
clear_params!
|
15
26
|
fetch_ssm_params!
|
16
27
|
end
|
17
28
|
|
29
|
+
# Returns true if parameters have been fetched from AWS SSM
|
30
|
+
#
|
31
|
+
# @return [Boolean]
|
18
32
|
def loaded?
|
19
33
|
!@params_list.empty?
|
20
34
|
end
|
21
35
|
|
36
|
+
# Create a ParameterStore and fetch from AWS SSM immediately
|
37
|
+
#
|
38
|
+
# @see Chambermaid::ParameterStore#load!
|
39
|
+
#
|
40
|
+
# @return [Chambermaid::ParameterStore]
|
22
41
|
def self.load!(path:)
|
23
42
|
store = new(path: path)
|
24
43
|
store.load!
|
25
44
|
store
|
26
45
|
end
|
27
46
|
|
47
|
+
# ENV formatted Hash of parameters loaded from AWS SSM
|
48
|
+
#
|
49
|
+
# @return [Hash]
|
28
50
|
def params
|
29
51
|
@params ||= @param_list.map { |p|
|
30
52
|
[p.name.split("/").last.upcase, p.value]
|
data/lib/chambermaid/railtie.rb
CHANGED
data/lib/chambermaid/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Chambermaid
|
2
|
-
VERSION = "0.
|
3
|
-
end
|
2
|
+
VERSION = "1.0.1"
|
3
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chambermaid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miles Zimmerman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-08-
|
11
|
+
date: 2020-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-ssm
|
@@ -59,9 +59,12 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
+
- ".github/workflows/commitlint.yml"
|
63
|
+
- ".github/workflows/release.yml"
|
62
64
|
- ".gitignore"
|
63
65
|
- ".rspec"
|
64
66
|
- ".travis.yml"
|
67
|
+
- CHANGELOG.md
|
65
68
|
- CODE_OF_CONDUCT.md
|
66
69
|
- Gemfile
|
67
70
|
- Gemfile.lock
|
@@ -85,6 +88,8 @@ metadata:
|
|
85
88
|
homepage_uri: https://github.com/mileszim/chambermaid
|
86
89
|
source_code_uri: https://github.com/mileszim/chambermaid
|
87
90
|
changelog_uri: https://github.com/mileszim/chambermaid/blob/master/CHANGELOG.md
|
91
|
+
documentation_uri: https://rubydoc.info/gems/chambermaid
|
92
|
+
bug_tracker_uri: https://github.com/mileszim/chambermaid/issues
|
88
93
|
post_install_message:
|
89
94
|
rdoc_options: []
|
90
95
|
require_paths:
|