secrets_cli 1.10.0 → 1.11.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/README.md +8 -4
- data/exe/secrets +1 -0
- data/lib/secrets_cli.rb +3 -0
- data/lib/secrets_cli/check/vault.rb +1 -1
- data/lib/secrets_cli/configuration.rb +15 -4
- data/lib/secrets_cli/init.rb +9 -4
- data/lib/secrets_cli/prompts/vault_addr.rb +11 -0
- data/lib/secrets_cli/vault/auth.rb +4 -4
- data/lib/secrets_cli/vault/base.rb +6 -1
- data/lib/secrets_cli/vault/edit.rb +2 -2
- data/lib/secrets_cli/vault/list.rb +1 -1
- data/lib/secrets_cli/vault/push.rb +4 -4
- data/lib/secrets_cli/vault/read.rb +2 -2
- data/lib/secrets_cli/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6af10caecd588872e7b6b71370738b48f7724ea57780e3f25617723e5bbd7c1a
|
4
|
+
data.tar.gz: 3547a5dac42ca6ae752e6fd60fbf330e3da9b85d00a685b7deb9cff01805aff2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3efd83f8f1abcfc6d61188531be16e7e9f9e93386a89b27c9bb56f2dd6710e5e6ec05282008fd5702e17652a3455ae1934696e14aad774942f0957e6ec022cca
|
7
|
+
data.tar.gz: e923815d6e97e9b0f1cf36216863cc16cfa71f7a43eca53263eb47df4148d4deed60e47827d1482e782d53a01fe52cc9fc49aaf397dee3b9cdca7094f98cf032
|
data/README.md
CHANGED
@@ -28,7 +28,7 @@ The following environment variables need to be set:
|
|
28
28
|
|
29
29
|
For `vault` itself:
|
30
30
|
|
31
|
-
VAULT_ADDR
|
31
|
+
VAULT_ADDR - address to your vault server (can also be set through config)
|
32
32
|
VAULT_CACERT - if you have a self issued certificate, point this environment variable to the location of the root CA file
|
33
33
|
|
34
34
|
For `secrets_cli`:
|
@@ -57,8 +57,10 @@ supply the config through options.
|
|
57
57
|
Example of the `.secrets`:
|
58
58
|
|
59
59
|
---
|
60
|
-
:secrets_file: config/application.yml # file where your secrets are kept, depending on your environment gem (figaro, dotenv, etc)
|
61
|
-
:secrets_storage_key: rails/my_project/ # vault 'storage_key' where your secrets will be kept.
|
60
|
+
:secrets_file: config/application.yml # Required; file where your secrets are kept, depending on your environment gem (figaro, dotenv, etc)
|
61
|
+
:secrets_storage_key: rails/my_project/ # Required; vault 'storage_key' where your secrets will be kept.
|
62
|
+
development: # Any configuration can be nested under environment
|
63
|
+
:vault_addr: https://myvault.com # Optional; vault url (default: VAULT_ADDR environment variable)
|
62
64
|
|
63
65
|
### Policies
|
64
66
|
|
@@ -99,7 +101,7 @@ This will allow you to edit secrets on the fly. You choose which editor to use b
|
|
99
101
|
|
100
102
|
The same flags apply for editing as for reading:
|
101
103
|
|
102
|
-
$
|
104
|
+
$ EDITOR='atom -w' secrets edit -e production
|
103
105
|
|
104
106
|
### Pull
|
105
107
|
|
@@ -111,6 +113,8 @@ To pull from a different environment, also supply the `-e` flag and the `-f` fla
|
|
111
113
|
|
112
114
|
$ secrets pull -e production -f config/application.production.yml
|
113
115
|
|
116
|
+
You can also supply the `--ci_mode` or `-y` flag to disable prompts and outputs.
|
117
|
+
|
114
118
|
### Push
|
115
119
|
|
116
120
|
$ secrets push
|
data/exe/secrets
CHANGED
@@ -17,6 +17,7 @@ command :init do |c|
|
|
17
17
|
c.summary = 'Use to initialize project, create .secrets file'
|
18
18
|
c.option '-f', '--secrets_file STRING', String, 'Define secrets file'
|
19
19
|
c.option '-k', '--secrets_storage_key STRING', String, 'Define secrets storage_key'
|
20
|
+
c.option '-a', '--vault_addr STRING', String, 'Vault url'
|
20
21
|
c.action do |_args, options|
|
21
22
|
SecretsCli::Init.new(options).call
|
22
23
|
end
|
data/lib/secrets_cli.rb
CHANGED
@@ -11,6 +11,7 @@ require 'secrets_cli/check/secrets'
|
|
11
11
|
require 'secrets_cli/check/vault'
|
12
12
|
require 'secrets_cli/prompts/secrets_file'
|
13
13
|
require 'secrets_cli/prompts/secrets_storage_key'
|
14
|
+
require 'secrets_cli/prompts/vault_addr'
|
14
15
|
require 'secrets_cli/vault/base'
|
15
16
|
require 'secrets_cli/vault/auth'
|
16
17
|
require 'secrets_cli/vault/list'
|
@@ -20,6 +21,8 @@ require 'secrets_cli/vault/push'
|
|
20
21
|
require 'secrets_cli/vault/edit'
|
21
22
|
require 'secrets_cli/version'
|
22
23
|
|
24
|
+
# require 'pry'
|
25
|
+
|
23
26
|
module SecretsCli
|
24
27
|
SECRETS_CONFIG_FILE = '.secrets'.freeze
|
25
28
|
SECRETS_FIELD = :secrets
|
@@ -10,7 +10,7 @@ module SecretsCli
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def call
|
13
|
-
error! 'Missing
|
13
|
+
error! 'Missing vault_addr' if config.vault_addr.nil?
|
14
14
|
error! 'Missing VAULT_AUTH_METHOD env' if missing_auth_method?
|
15
15
|
case auth_method
|
16
16
|
when 'app_id'
|
@@ -3,24 +3,35 @@ module SecretsCli
|
|
3
3
|
attr_reader :environment, :verbose
|
4
4
|
|
5
5
|
def initialize(options)
|
6
|
-
@environment = options.environment || ENV['RAILS_ENV'] || ENV['NODE_ENV'] || 'development'
|
6
|
+
@environment = (options.environment || ENV['RAILS_ENV'] || ENV['NODE_ENV'] || 'development').to_sym
|
7
7
|
@verbose = options.verbose
|
8
8
|
end
|
9
9
|
|
10
10
|
def config
|
11
|
-
@config ||=
|
11
|
+
@config ||=
|
12
|
+
Psych.load(File.read(SECRETS_CONFIG_FILE), symbolize_names: true)
|
12
13
|
end
|
13
14
|
|
14
15
|
def secrets_file
|
15
|
-
|
16
|
+
fetch(:secrets_file)
|
16
17
|
end
|
17
18
|
|
18
19
|
def secrets_storage_key
|
19
|
-
|
20
|
+
fetch(:secrets_storage_key)
|
21
|
+
end
|
22
|
+
|
23
|
+
def vault_addr
|
24
|
+
fetch(:vault_addr) || ENV['VAULT_ADDR']
|
20
25
|
end
|
21
26
|
|
22
27
|
def self.write(config)
|
23
28
|
File.open(SECRETS_CONFIG_FILE, 'w') { |file| file.write(config.to_yaml) }
|
24
29
|
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def fetch(var)
|
34
|
+
config.fetch(environment, {}).fetch(var, nil) || config[var]
|
35
|
+
end
|
25
36
|
end
|
26
37
|
end
|
data/lib/secrets_cli/init.rb
CHANGED
@@ -17,10 +17,11 @@ module SecretsCli
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def config
|
20
|
-
{
|
21
|
-
secrets_file
|
22
|
-
secrets_storage_key
|
23
|
-
|
20
|
+
{}.tap do |hash|
|
21
|
+
hash[:secrets_file] = secrets_file
|
22
|
+
hash[:secrets_storage_key] = secrets_storage_key
|
23
|
+
hash[:vault_addr] = vault_addr if vault_addr
|
24
|
+
end
|
24
25
|
end
|
25
26
|
|
26
27
|
def secrets_file
|
@@ -32,5 +33,9 @@ module SecretsCli
|
|
32
33
|
storage_key << '/' unless storage_key.end_with?('/')
|
33
34
|
storage_key
|
34
35
|
end
|
36
|
+
|
37
|
+
def vault_addr
|
38
|
+
@vault_addr ||= options.vault_addr || SecretsCli::Prompts::VaultAddr.new.call
|
39
|
+
end
|
35
40
|
end
|
36
41
|
end
|
@@ -21,13 +21,13 @@ module SecretsCli
|
|
21
21
|
def command
|
22
22
|
case auth_method
|
23
23
|
when 'github'
|
24
|
-
|
24
|
+
vault.auth.github(auth_token)
|
25
25
|
when 'token'
|
26
|
-
|
26
|
+
vault.auth.token(auth_token)
|
27
27
|
when 'app_id'
|
28
|
-
|
28
|
+
vault.auth.app_id(auth_app_id, auth_user_id)
|
29
29
|
when 'approle'
|
30
|
-
|
30
|
+
vault.auth.approle(auth_role_id, auth_secret_id)
|
31
31
|
else
|
32
32
|
error! "Unknown auth method #{auth_method}"
|
33
33
|
end.auth.policies
|
@@ -12,6 +12,7 @@ module SecretsCli
|
|
12
12
|
def call
|
13
13
|
options.verbose ? prompt.ok(command) : command
|
14
14
|
rescue => exception
|
15
|
+
# require 'pry'; binding.pry
|
15
16
|
error!(exception.message)
|
16
17
|
end
|
17
18
|
|
@@ -21,8 +22,12 @@ module SecretsCli
|
|
21
22
|
raise NotImplementedError
|
22
23
|
end
|
23
24
|
|
25
|
+
def vault
|
26
|
+
@vault ||= ::Vault::Client.new(address: config.vault_addr)
|
27
|
+
end
|
28
|
+
|
24
29
|
def secrets_full_storage_key
|
25
|
-
File.join(secrets_storage_key, config.environment)
|
30
|
+
File.join(secrets_storage_key, config.environment.to_s)
|
26
31
|
end
|
27
32
|
|
28
33
|
def compare(first, second)
|
@@ -12,10 +12,10 @@ module SecretsCli
|
|
12
12
|
attr_reader :secrets_storage_key
|
13
13
|
|
14
14
|
def command
|
15
|
-
secrets =
|
15
|
+
secrets = vault.logical.read(secrets_full_storage_key)
|
16
16
|
new_secrets = ask_editor(content(secrets))
|
17
17
|
compare(content(secrets), new_secrets)
|
18
|
-
|
18
|
+
vault.logical.write(secrets_full_storage_key, SECRETS_FIELD => new_secrets)
|
19
19
|
new_secrets
|
20
20
|
end
|
21
21
|
|
@@ -20,22 +20,22 @@ module SecretsCli
|
|
20
20
|
private
|
21
21
|
|
22
22
|
def command
|
23
|
-
|
23
|
+
vault.logical.write(secrets_full_storage_key, SECRETS_FIELD => secrets)
|
24
24
|
secrets
|
25
25
|
end
|
26
26
|
|
27
27
|
def compare
|
28
|
-
secrets =
|
28
|
+
secrets = vault.logical.read(secrets_full_storage_key)
|
29
29
|
secrets = secrets.nil? ? ' ' : secrets.data[SECRETS_FIELD]
|
30
30
|
diff = TTY::File.diff(secrets, secrets_file, verbose: false)
|
31
31
|
return if diff == ''
|
32
32
|
prompt.ok("There are some differences between #{secrets_file} and vault:")
|
33
33
|
pretty_diff(diff)
|
34
|
-
exit 0 unless prompt.yes?("Are you sure you want to override #{secrets_full_storage_key}?")
|
34
|
+
exit 0 unless prompt.yes?("Are you sure you want to override #{config.vault_addr} #{secrets_full_storage_key}?")
|
35
35
|
end
|
36
36
|
|
37
37
|
def are_you_sure?
|
38
|
-
prompt.yes?("Are you sure you want to write #{secrets_file} to #{secrets_full_storage_key}")
|
38
|
+
prompt.yes?("Are you sure you want to write #{secrets_file} to #{config.vault_addr} #{secrets_full_storage_key}")
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -13,8 +13,8 @@ module SecretsCli
|
|
13
13
|
attr_reader :secrets_storage_key
|
14
14
|
|
15
15
|
def command
|
16
|
-
secrets =
|
17
|
-
error!("There are no secrets in #{secrets_full_storage_key}") if secrets.nil?
|
16
|
+
secrets = vault.logical.read(secrets_full_storage_key)
|
17
|
+
error!("There are no secrets in #{config.vault_addr} #{secrets_full_storage_key}") if secrets.nil?
|
18
18
|
secrets.data[SECRETS_FIELD]
|
19
19
|
end
|
20
20
|
end
|
data/lib/secrets_cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: secrets_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stjepan Hadjic
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -149,6 +149,7 @@ files:
|
|
149
149
|
- lib/secrets_cli/init.rb
|
150
150
|
- lib/secrets_cli/prompts/secrets_file.rb
|
151
151
|
- lib/secrets_cli/prompts/secrets_storage_key.rb
|
152
|
+
- lib/secrets_cli/prompts/vault_addr.rb
|
152
153
|
- lib/secrets_cli/vault/auth.rb
|
153
154
|
- lib/secrets_cli/vault/base.rb
|
154
155
|
- lib/secrets_cli/vault/edit.rb
|
@@ -179,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
179
180
|
version: '0'
|
180
181
|
requirements: []
|
181
182
|
rubyforge_project:
|
182
|
-
rubygems_version: 2.7.
|
183
|
+
rubygems_version: 2.7.6
|
183
184
|
signing_key:
|
184
185
|
specification_version: 4
|
185
186
|
summary: This is a CLI for easier use of https://www.vaultproject.io/
|