openbox 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -1
- data/README.md +32 -9
- data/lib/openbox/command.rb +12 -0
- data/lib/openbox/version.rb +1 -1
- data/openbox.gemspec +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c0d83b1900aaf94e908bf6cdca2c74226a6e3634a43e22799b98ec6e7d6b0bc
|
4
|
+
data.tar.gz: 5061979673b6b027be1d4926dec24dcd54d0bf1d52b6d862641bd2579f8154bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09da76c126d5e6b30d27153db1f8ac4415a134b7c427485dd8f740d1aacd186d6311a9bde8a26dabba17ba4a048cf3837367baa2bf0eec6e23094ffd3d986a9a'
|
7
|
+
data.tar.gz: 1f2389789c16745950eadb85a69406a95b24a71cd4a54e13568e62c20ab97c24d7b743bdac03dec7e6036681cfc4f802f3f92fee151cf91b1e6f3a259d0e271b
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
openbox (0.
|
4
|
+
openbox (0.5.0)
|
5
|
+
dotenv
|
5
6
|
thor (~> 1.0)
|
6
7
|
|
7
8
|
GEM
|
@@ -14,6 +15,7 @@ GEM
|
|
14
15
|
childprocess (4.1.0)
|
15
16
|
diff-lcs (1.4.4)
|
16
17
|
docile (1.4.0)
|
18
|
+
dotenv (2.7.6)
|
17
19
|
iniparse (1.5.0)
|
18
20
|
overcommit (0.58.0)
|
19
21
|
childprocess (>= 0.6.3, < 5)
|
data/README.md
CHANGED
@@ -44,14 +44,7 @@ The commands are pre-defined for the Rack and Rails applications.
|
|
44
44
|
| `seed` | `rails` | Run database seed |
|
45
45
|
| `sidekiq` | `sidekiq` | Run sidekiq server |
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
| Name | Description |
|
50
|
-
|------------------|--------------------------------------------------------------------------------------|
|
51
|
-
| `AUTO_MIGRATION` | When present, the `migrate` will run before `server` started |
|
52
|
-
| `DATABASE_URL` | When `pg` or `mysql2` gem present, Openbox will use it to ensure database connection |
|
53
|
-
|
54
|
-
### Customize Commands
|
47
|
+
#### Customize Commands
|
55
48
|
|
56
49
|
When `openbox` execute, the `lib/openbox/commands/*/**.rb` will be scanned and require before started.
|
57
50
|
We can register new command by adding files to `lib/openbox/commands` directory.
|
@@ -70,6 +63,33 @@ Openbox::Entrypoint.register Daemon, :daemon, :daemon, 'Run a daemon'
|
|
70
63
|
|
71
64
|
> The Rails are not loaded to speed up bootstrap, if you need Rails please load by yourself.
|
72
65
|
|
66
|
+
### Environments
|
67
|
+
|
68
|
+
| Name | Example | Description |
|
69
|
+
|------------------|----------------------------------------|--------------------------------------------------------------------------------------|
|
70
|
+
| `AUTO_MIGRATION` | `yes` | When present, the `migrate` will run before `server` started |
|
71
|
+
| `DATABASE_URL` | `postgres://user:pass@postgres/dbname` | When `pg` or `mysql2` gem present, Openbox will use it to ensure database connection |
|
72
|
+
| `SWARM_SECRETS` | `app-env` | List the Docker Swarm secret names to load as environment file |
|
73
|
+
|
74
|
+
## Environment Loader
|
75
|
+
|
76
|
+
To rotate secrets easier, we may not use Rails credentials but inject secrets via the environment variables.
|
77
|
+
|
78
|
+
Openbox provides a before hook before the command is executed and load the environments from a security source.
|
79
|
+
|
80
|
+
### Docker Swarm
|
81
|
+
|
82
|
+
When use Docker Swarm, the secret will put into `/run/secrets` directory, you can load these files via Dotenv.
|
83
|
+
|
84
|
+
```yaml
|
85
|
+
# Docker Swarm Stack
|
86
|
+
services:
|
87
|
+
application:
|
88
|
+
environment:
|
89
|
+
- SWARM_SECRETS=sahred-secret,applicate-secret
|
90
|
+
# ...
|
91
|
+
```
|
92
|
+
|
73
93
|
## Roadmap
|
74
94
|
|
75
95
|
* [ ] `config/openbox.rb` config
|
@@ -87,7 +107,10 @@ Openbox::Entrypoint.register Daemon, :daemon, :daemon, 'Run a daemon'
|
|
87
107
|
* [x] `openbox migrate` to `rails db:migrate`
|
88
108
|
* [x] `openbox seed` to `rails db:seed`
|
89
109
|
* [x] Use `AUTO_MIGRATION` to run migration before server started
|
90
|
-
|
110
|
+
* [ ] Load Secrets as Environment
|
111
|
+
* [ ] AWS Secrets Manager
|
112
|
+
* [ ] Hashicorp Valut
|
113
|
+
* [ ] Docker Swarm Secrets
|
91
114
|
|
92
115
|
## Development
|
93
116
|
|
data/lib/openbox/command.rb
CHANGED
@@ -1,12 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'thor'
|
4
|
+
require 'dotenv'
|
4
5
|
|
5
6
|
module Openbox
|
6
7
|
# The base command of openbox
|
7
8
|
#
|
8
9
|
# @since 0.1.0
|
9
10
|
class Command < Thor::Group
|
11
|
+
# Before execute command
|
12
|
+
#
|
13
|
+
# @since 0.5.0
|
14
|
+
def before_execute
|
15
|
+
# TODO: Add AWS KMS, Vault support
|
16
|
+
return if ENV['SWARM_SECRETS'].nil?
|
17
|
+
|
18
|
+
paths = ENV['SWARM_SECRETS'].split(',').map { |name| "/run/secrets/#{name}" }
|
19
|
+
Dotenv.load(*paths)
|
20
|
+
end
|
21
|
+
|
10
22
|
# Execute command
|
11
23
|
#
|
12
24
|
# @since 0.1.0
|
data/lib/openbox/version.rb
CHANGED
data/openbox.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
29
29
|
spec.require_paths = ['lib']
|
30
30
|
|
31
|
-
|
31
|
+
spec.add_dependency 'dotenv'
|
32
32
|
spec.add_dependency 'thor', '~> 1.0'
|
33
33
|
|
34
34
|
# For more information and examples about making a new gem, checkout our
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 蒼時弦也
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dotenv
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: thor
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|