dash 3.1.5 → 3.2.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/README.md +26 -6
- data/bin/dash +2 -2
- data/lib/{kamal → dash}/cli/accessory.rb +24 -24
- data/lib/dash/cli/alias/command.rb +10 -0
- data/lib/{kamal → dash}/cli/app/assets.rb +2 -2
- data/lib/{kamal → dash}/cli/app/boot.rb +15 -15
- data/lib/{kamal → dash}/cli/app/error_pages.rb +6 -6
- data/lib/{kamal → dash}/cli/app/rollout_boot.rb +6 -6
- data/lib/{kamal → dash}/cli/app/ssl_certificates.rb +3 -3
- data/lib/{kamal → dash}/cli/app.rb +87 -87
- data/lib/{kamal → dash}/cli/base.rb +73 -49
- data/lib/dash/cli/build/clone.rb +59 -0
- data/lib/{kamal → dash}/cli/build/port_forwarding.rb +1 -1
- data/lib/{kamal → dash}/cli/build.rb +45 -45
- data/lib/{kamal → dash}/cli/doctor/config_checks.rb +3 -3
- data/lib/{kamal → dash}/cli/doctor/endpoint_checks.rb +25 -7
- data/lib/{kamal → dash}/cli/doctor/host_checks.rb +23 -23
- data/lib/{kamal → dash}/cli/doctor.rb +9 -9
- data/lib/{kamal → dash}/cli/healthcheck/barrier.rb +2 -2
- data/lib/{kamal → dash}/cli/healthcheck/drift_error.rb +2 -2
- data/lib/dash/cli/healthcheck/error.rb +2 -0
- data/lib/{kamal → dash}/cli/healthcheck/poller.rb +7 -7
- data/lib/{kamal → dash}/cli/lock.rb +1 -1
- data/lib/dash/cli/main/migrate.rb +77 -0
- data/lib/{kamal → dash}/cli/main.rb +87 -76
- data/lib/{kamal → dash}/cli/proxy/drift.rb +4 -4
- data/lib/{kamal → dash}/cli/proxy/loadbalancer_claim.rb +6 -6
- data/lib/{kamal → dash}/cli/proxy/loadbalancer_reboot.rb +23 -23
- data/lib/{kamal → dash}/cli/proxy/reboot.rb +15 -15
- data/lib/{kamal → dash}/cli/proxy.rb +172 -160
- data/lib/{kamal → dash}/cli/prune.rb +10 -10
- data/lib/{kamal → dash}/cli/registry.rb +13 -13
- data/lib/{kamal → dash}/cli/secrets.rb +3 -3
- data/lib/{kamal → dash}/cli/server.rb +15 -15
- data/lib/{kamal → dash}/cli/templates/deploy.yml +6 -6
- data/lib/dash/cli/templates/sample_hooks/docker-setup.sample +3 -0
- data/lib/dash/cli/templates/sample_hooks/post-app-boot.sample +3 -0
- data/lib/dash/cli/templates/sample_hooks/post-app-stop.sample +9 -0
- data/lib/dash/cli/templates/sample_hooks/post-deploy.sample +14 -0
- data/lib/dash/cli/templates/sample_hooks/post-proxy-deploy.sample +3 -0
- data/lib/dash/cli/templates/sample_hooks/post-proxy-reboot.sample +3 -0
- data/lib/dash/cli/templates/sample_hooks/pre-app-boot.sample +3 -0
- data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-app-stop.sample +2 -2
- data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-build.sample +8 -8
- data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-connect.sample +8 -8
- data/lib/{kamal → dash}/cli/templates/sample_hooks/pre-deploy.sample +9 -9
- data/lib/dash/cli/templates/sample_hooks/pre-proxy-deploy.sample +3 -0
- data/lib/dash/cli/templates/sample_hooks/pre-proxy-reboot.sample +3 -0
- data/lib/dash/cli/templates/secrets +22 -0
- data/lib/{kamal → dash}/cli.rb +2 -2
- data/lib/{kamal → dash}/commander/specifics.rb +2 -2
- data/lib/{kamal → dash}/commander.rb +31 -23
- data/lib/{kamal → dash}/commands/accessory/proxy.rb +1 -1
- data/lib/{kamal → dash}/commands/accessory.rb +2 -2
- data/lib/{kamal → dash}/commands/app/assets.rb +1 -1
- data/lib/{kamal → dash}/commands/app/containers.rb +1 -1
- data/lib/{kamal → dash}/commands/app/error_pages.rb +2 -2
- data/lib/{kamal → dash}/commands/app/execution.rb +1 -1
- data/lib/{kamal → dash}/commands/app/images.rb +1 -1
- data/lib/{kamal → dash}/commands/app/logging.rb +1 -1
- data/lib/{kamal → dash}/commands/app/proxy.rb +1 -1
- data/lib/{kamal → dash}/commands/app.rb +1 -1
- data/lib/{kamal → dash}/commands/auditor.rb +3 -7
- data/lib/{kamal → dash}/commands/base.rb +39 -3
- data/lib/{kamal → dash}/commands/builder/base.rb +2 -2
- data/lib/{kamal → dash}/commands/builder/clone.rb +3 -3
- data/lib/{kamal → dash}/commands/builder/cloud.rb +1 -1
- data/lib/{kamal → dash}/commands/builder/hybrid.rb +1 -1
- data/lib/{kamal → dash}/commands/builder/local.rb +1 -1
- data/lib/{kamal → dash}/commands/builder/pack.rb +1 -1
- data/lib/{kamal → dash}/commands/builder/remote.rb +1 -1
- data/lib/{kamal → dash}/commands/builder.rb +7 -7
- data/lib/{kamal → dash}/commands/docker.rb +1 -1
- data/lib/{kamal → dash}/commands/hook.rb +1 -1
- data/lib/{kamal → dash}/commands/loadbalancer.rb +9 -8
- data/lib/{kamal → dash}/commands/lock.rb +2 -2
- data/lib/{kamal → dash}/commands/proxy/cert_transfer.rb +3 -3
- data/lib/{kamal → dash}/commands/proxy.rb +20 -10
- data/lib/{kamal → dash}/commands/prune.rb +1 -1
- data/lib/dash/commands/registry.rb +44 -0
- data/lib/{kamal → dash}/commands/server.rb +1 -5
- data/lib/dash/commands.rb +2 -0
- data/lib/{kamal → dash}/configuration/accessory.rb +11 -11
- data/lib/{kamal → dash}/configuration/alias.rb +3 -3
- data/lib/{kamal → dash}/configuration/boot.rb +2 -2
- data/lib/{kamal → dash}/configuration/builder.rb +7 -7
- data/lib/{kamal → dash}/configuration/docs/accessory.yml +6 -6
- data/lib/{kamal → dash}/configuration/docs/alias.yml +2 -2
- data/lib/{kamal → dash}/configuration/docs/boot.yml +1 -1
- data/lib/{kamal → dash}/configuration/docs/builder.yml +3 -3
- data/lib/{kamal → dash}/configuration/docs/configuration.yml +25 -18
- data/lib/{kamal → dash}/configuration/docs/env.yml +17 -17
- data/lib/{kamal → dash}/configuration/docs/proxy.yml +53 -30
- data/lib/{kamal → dash}/configuration/docs/registry.yml +6 -6
- data/lib/{kamal → dash}/configuration/docs/role.yml +1 -1
- data/lib/{kamal → dash}/configuration/docs/servers.yml +2 -2
- data/lib/{kamal → dash}/configuration/env/tag.rb +2 -2
- data/lib/{kamal → dash}/configuration/env.rb +5 -5
- data/lib/{kamal → dash}/configuration/loadbalancer.rb +3 -3
- data/lib/{kamal → dash}/configuration/logging.rb +3 -3
- data/lib/{kamal → dash}/configuration/output.rb +4 -4
- data/lib/{kamal → dash}/configuration/proxy/acme.rb +4 -3
- data/lib/{kamal → dash}/configuration/proxy/boot.rb +10 -8
- data/lib/{kamal → dash}/configuration/proxy/run.rb +14 -14
- data/lib/{kamal → dash}/configuration/proxy.rb +16 -16
- data/lib/{kamal → dash}/configuration/registry.rb +3 -3
- data/lib/{kamal → dash}/configuration/role/healthcheck.rb +3 -3
- data/lib/{kamal → dash}/configuration/role.rb +13 -13
- data/lib/{kamal → dash}/configuration/servers.rb +4 -4
- data/lib/{kamal → dash}/configuration/ssh.rb +3 -3
- data/lib/{kamal → dash}/configuration/sshkit.rb +2 -2
- data/lib/{kamal → dash}/configuration/validation.rb +2 -2
- data/lib/{kamal → dash}/configuration/validator/accessory.rb +1 -1
- data/lib/{kamal → dash}/configuration/validator/alias.rb +2 -2
- data/lib/{kamal → dash}/configuration/validator/builder.rb +1 -1
- data/lib/dash/configuration/validator/configuration.rb +6 -0
- data/lib/{kamal → dash}/configuration/validator/env.rb +2 -2
- data/lib/{kamal → dash}/configuration/validator/proxy.rb +8 -8
- data/lib/{kamal → dash}/configuration/validator/registry.rb +1 -1
- data/lib/{kamal → dash}/configuration/validator/role.rb +1 -1
- data/lib/{kamal → dash}/configuration/validator/servers.rb +1 -1
- data/lib/{kamal → dash}/configuration/validator.rb +4 -4
- data/lib/{kamal → dash}/configuration/volume.rb +2 -2
- data/lib/{kamal → dash}/configuration.rb +40 -30
- data/lib/{kamal → dash}/docker.rb +1 -1
- data/lib/{kamal → dash}/env_file.rb +1 -1
- data/lib/{kamal → dash}/git.rb +1 -1
- data/lib/{kamal → dash}/otel_shipper.rb +3 -3
- data/lib/{kamal → dash}/output/base_logger.rb +1 -1
- data/lib/{kamal → dash}/output/file_logger.rb +1 -1
- data/lib/{kamal → dash}/output/formatter.rb +1 -1
- data/lib/{kamal → dash}/output/otel_logger.rb +3 -3
- data/lib/dash/project_directory.rb +28 -0
- data/lib/{kamal → dash}/secrets/adapters/aws_secrets_manager.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters/base.rb +2 -2
- data/lib/{kamal → dash}/secrets/adapters/bitwarden.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters/bitwarden_secrets_manager.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters/doppler.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters/enpass.rb +3 -3
- data/lib/{kamal → dash}/secrets/adapters/gcp_secret_manager.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters/last_pass.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters/one_password.rb +2 -2
- data/lib/{kamal → dash}/secrets/adapters/passbolt.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters/test.rb +1 -1
- data/lib/{kamal → dash}/secrets/adapters.rb +2 -2
- data/lib/{kamal → dash}/secrets/dotenv/inline_command_substitution.rb +5 -3
- data/lib/{kamal → dash}/secrets.rb +6 -6
- data/lib/{kamal → dash}/tags.rb +8 -3
- data/lib/{kamal → dash}/utils/sensitive.rb +1 -1
- data/lib/{kamal → dash}/utils.rb +15 -5
- data/lib/dash/version.rb +3 -0
- data/lib/{kamal.rb → dash.rb} +5 -5
- metadata +171 -216
- data/bin/kamal +0 -18
- data/lib/kamal/cli/alias/command.rb +0 -10
- data/lib/kamal/cli/build/clone.rb +0 -59
- data/lib/kamal/cli/healthcheck/error.rb +0 -2
- data/lib/kamal/cli/templates/sample_hooks/docker-setup.sample +0 -3
- data/lib/kamal/cli/templates/sample_hooks/post-app-boot.sample +0 -3
- data/lib/kamal/cli/templates/sample_hooks/post-app-stop.sample +0 -9
- data/lib/kamal/cli/templates/sample_hooks/post-deploy.sample +0 -14
- data/lib/kamal/cli/templates/sample_hooks/post-proxy-deploy.sample +0 -3
- data/lib/kamal/cli/templates/sample_hooks/post-proxy-reboot.sample +0 -3
- data/lib/kamal/cli/templates/sample_hooks/pre-app-boot.sample +0 -3
- data/lib/kamal/cli/templates/sample_hooks/pre-proxy-deploy.sample +0 -3
- data/lib/kamal/cli/templates/sample_hooks/pre-proxy-reboot.sample +0 -3
- data/lib/kamal/cli/templates/secrets +0 -22
- data/lib/kamal/commands/registry.rb +0 -38
- data/lib/kamal/commands.rb +0 -2
- data/lib/kamal/configuration/validator/configuration.rb +0 -6
- data/lib/kamal/version.rb +0 -3
- /data/lib/{kamal → dash}/configuration/docs/logging.yml +0 -0
- /data/lib/{kamal → dash}/configuration/docs/output.yml +0 -0
- /data/lib/{kamal → dash}/configuration/docs/ssh.yml +0 -0
- /data/lib/{kamal → dash}/configuration/docs/sshkit.yml +0 -0
- /data/lib/{kamal → dash}/sshkit_with_ext.rb +0 -0
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
# Accessories are managed separately from the main service — they are not updated
|
|
7
7
|
# when you deploy, and they do not have zero-downtime deployments.
|
|
8
8
|
#
|
|
9
|
-
# Run `
|
|
10
|
-
# See `
|
|
9
|
+
# Run `dash accessory boot <accessory>` to boot an accessory.
|
|
10
|
+
# See `dash accessory --help` for more information.
|
|
11
11
|
|
|
12
12
|
# Configuring accessories
|
|
13
13
|
#
|
|
@@ -40,7 +40,7 @@ accessories:
|
|
|
40
40
|
# <<: *specific-registry
|
|
41
41
|
# ```
|
|
42
42
|
#
|
|
43
|
-
# See
|
|
43
|
+
# See dash docs registry for more information:
|
|
44
44
|
registry:
|
|
45
45
|
...
|
|
46
46
|
|
|
@@ -83,7 +83,7 @@ accessories:
|
|
|
83
83
|
|
|
84
84
|
# Environment variables
|
|
85
85
|
#
|
|
86
|
-
# See
|
|
86
|
+
# See dash docs env for more information:
|
|
87
87
|
env:
|
|
88
88
|
...
|
|
89
89
|
|
|
@@ -157,10 +157,10 @@ accessories:
|
|
|
157
157
|
#
|
|
158
158
|
# You can run your accessory behind the Kamal proxy for hostname-based
|
|
159
159
|
# routing and automatic SSL. The block accepts the same schema as the
|
|
160
|
-
# app-level `proxy:` (see `
|
|
160
|
+
# app-level `proxy:` (see `dash docs proxy`), though root-only keys such as
|
|
161
161
|
# `loadbalancer` and `reboot_on_deploy` have no effect inside an accessory.
|
|
162
162
|
# Declaring a proxy here makes the accessory's hosts proxy hosts:
|
|
163
|
-
# `
|
|
163
|
+
# `dash proxy boot` (and `dash deploy`) will run kamal-proxy on them
|
|
164
164
|
# automatically.
|
|
165
165
|
#
|
|
166
166
|
# Accessories are never load balanced. The loadbalancer fans the app's own
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# For example, for a Rails app, you might open a console with:
|
|
6
6
|
#
|
|
7
7
|
# ```shell
|
|
8
|
-
#
|
|
8
|
+
# dash app exec -i --reuse "bin/rails console"
|
|
9
9
|
# ```
|
|
10
10
|
#
|
|
11
11
|
# By defining an alias, like this:
|
|
@@ -14,7 +14,7 @@ aliases:
|
|
|
14
14
|
# You can now open the console with:
|
|
15
15
|
#
|
|
16
16
|
# ```shell
|
|
17
|
-
#
|
|
17
|
+
# dash console
|
|
18
18
|
# ```
|
|
19
19
|
|
|
20
20
|
# Configuring aliases
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
#
|
|
7
7
|
# This is a whole-deploy setting: `limit` slices the combined host list of every role, so it cannot
|
|
8
8
|
# hold one role back while another keeps booting. To pace a single role's hosts, set `boot` on that
|
|
9
|
-
# role instead (see
|
|
9
|
+
# role instead (see dash docs role).
|
|
10
10
|
|
|
11
11
|
boot:
|
|
12
12
|
|
|
@@ -19,13 +19,13 @@ builder:
|
|
|
19
19
|
|
|
20
20
|
# Remote
|
|
21
21
|
#
|
|
22
|
-
# The connection string for a remote builder. If supplied,
|
|
22
|
+
# The connection string for a remote builder. If supplied, dash will use this
|
|
23
23
|
# for builds that do not match the local architecture of the deployment host.
|
|
24
24
|
remote: ssh://docker@docker-builder
|
|
25
25
|
|
|
26
26
|
# Local
|
|
27
27
|
#
|
|
28
|
-
# If set to false,
|
|
28
|
+
# If set to false, dash will always use the remote builder even when building
|
|
29
29
|
# the local architecture.
|
|
30
30
|
#
|
|
31
31
|
# Defaults to true:
|
|
@@ -87,7 +87,7 @@ builder:
|
|
|
87
87
|
|
|
88
88
|
# Build secrets
|
|
89
89
|
#
|
|
90
|
-
# Values are read from `.
|
|
90
|
+
# Values are read from `.dash/secrets`:
|
|
91
91
|
secrets:
|
|
92
92
|
- SECRET1
|
|
93
93
|
- SECRET2
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# Destinations
|
|
6
6
|
#
|
|
7
7
|
# When running commands, you can specify a destination with the `-d` flag,
|
|
8
|
-
# e.g., `
|
|
8
|
+
# e.g., `dash deploy -d staging`.
|
|
9
9
|
#
|
|
10
10
|
# In this case, the configuration will also be read from `config/deploy.staging.yml`
|
|
11
11
|
# and merged with the base configuration.
|
|
@@ -44,19 +44,19 @@ volumes:
|
|
|
44
44
|
|
|
45
45
|
# Registry
|
|
46
46
|
#
|
|
47
|
-
# The Docker registry configuration, see
|
|
47
|
+
# The Docker registry configuration, see dash docs registry:
|
|
48
48
|
registry:
|
|
49
49
|
...
|
|
50
50
|
|
|
51
51
|
# Servers
|
|
52
52
|
#
|
|
53
|
-
# The servers to deploy to, optionally with custom roles, see
|
|
53
|
+
# The servers to deploy to, optionally with custom roles, see dash docs servers:
|
|
54
54
|
servers:
|
|
55
55
|
...
|
|
56
56
|
|
|
57
57
|
# Environment variables
|
|
58
58
|
#
|
|
59
|
-
# See
|
|
59
|
+
# See dash docs env:
|
|
60
60
|
env:
|
|
61
61
|
...
|
|
62
62
|
|
|
@@ -81,7 +81,7 @@ asset_path: /path/to/assets
|
|
|
81
81
|
|
|
82
82
|
# Hooks path
|
|
83
83
|
#
|
|
84
|
-
# Path to hooks, defaults to `.kamal/hooks
|
|
84
|
+
# Path to hooks, defaults to `.dash/hooks` (`.kamal/hooks` is still read when only that exists).
|
|
85
85
|
# See https://kamal-deploy.org/docs/hooks for more information:
|
|
86
86
|
hooks_path: /user_home/kamal/hooks
|
|
87
87
|
|
|
@@ -106,8 +106,8 @@ hooks_output:
|
|
|
106
106
|
|
|
107
107
|
# Secrets path
|
|
108
108
|
#
|
|
109
|
-
# Path to secrets, defaults to `.kamal/secrets
|
|
110
|
-
#
|
|
109
|
+
# Path to secrets, defaults to `.dash/secrets` (`.kamal/secrets` is still read when only that exists).
|
|
110
|
+
# dash looks for `<secrets_path>-common` first and then `<secrets_path>`.
|
|
111
111
|
# When using destinations, it instead looks for `<secrets_path>-common` first and then
|
|
112
112
|
# `<secrets_path>.<destination>`. Later files override earlier ones.
|
|
113
113
|
secrets_path: /user_home/kamal/secrets
|
|
@@ -171,59 +171,66 @@ stop_timeout: 30
|
|
|
171
171
|
|
|
172
172
|
# Run directory
|
|
173
173
|
#
|
|
174
|
-
#
|
|
175
|
-
|
|
174
|
+
# Where dash keeps its runtime files on each host — per-app env and assets, the
|
|
175
|
+
# proxy's boot files and apps-config mount, loadbalancer service claims, deploy
|
|
176
|
+
# locks, and the audit log. Resolved against the SSH user's home, default
|
|
177
|
+
# `.dash`. A host still holding the pre-3.4 `.kamal` directory is renamed to
|
|
178
|
+
# `.dash` in place the next time dash takes a lock on it; nothing is rebooted.
|
|
179
|
+
#
|
|
180
|
+
# The key is accepted but not yet honoured — the path is currently always
|
|
181
|
+
# `.dash`. Tracked separately from the stage-3 rename.
|
|
182
|
+
run_directory: .dash
|
|
176
183
|
|
|
177
184
|
# SSH options
|
|
178
185
|
#
|
|
179
|
-
# See
|
|
186
|
+
# See dash docs ssh:
|
|
180
187
|
ssh:
|
|
181
188
|
...
|
|
182
189
|
|
|
183
190
|
# Builder options
|
|
184
191
|
#
|
|
185
|
-
# See
|
|
192
|
+
# See dash docs builder:
|
|
186
193
|
builder:
|
|
187
194
|
...
|
|
188
195
|
|
|
189
196
|
# Accessories
|
|
190
197
|
#
|
|
191
|
-
# Additional services to run in Docker, see
|
|
198
|
+
# Additional services to run in Docker, see dash docs accessory:
|
|
192
199
|
accessories:
|
|
193
200
|
...
|
|
194
201
|
|
|
195
202
|
# Proxy
|
|
196
203
|
#
|
|
197
|
-
# Configuration for kamal-proxy, see
|
|
204
|
+
# Configuration for kamal-proxy, see dash docs proxy:
|
|
198
205
|
proxy:
|
|
199
206
|
...
|
|
200
207
|
|
|
201
208
|
# SSHKit
|
|
202
209
|
#
|
|
203
|
-
# See
|
|
210
|
+
# See dash docs sshkit:
|
|
204
211
|
sshkit:
|
|
205
212
|
...
|
|
206
213
|
|
|
207
214
|
# Boot options
|
|
208
215
|
#
|
|
209
|
-
# See
|
|
216
|
+
# See dash docs boot:
|
|
210
217
|
boot:
|
|
211
218
|
...
|
|
212
219
|
|
|
213
220
|
# Logging
|
|
214
221
|
#
|
|
215
|
-
# Docker logging configuration, see
|
|
222
|
+
# Docker logging configuration, see dash docs logging:
|
|
216
223
|
logging:
|
|
217
224
|
...
|
|
218
225
|
|
|
219
226
|
# Output
|
|
220
227
|
#
|
|
221
|
-
# Configure output loggers (OTel, file), see
|
|
228
|
+
# Configure output loggers (OTel, file), see dash docs output:
|
|
222
229
|
output:
|
|
223
230
|
...
|
|
224
231
|
|
|
225
232
|
# Aliases
|
|
226
233
|
#
|
|
227
|
-
# Alias configuration, see
|
|
234
|
+
# Alias configuration, see dash docs alias:
|
|
228
235
|
aliases:
|
|
229
236
|
...
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Environment variables
|
|
2
2
|
#
|
|
3
|
-
# Environment variables can be set directly in the
|
|
4
|
-
# read from `.
|
|
3
|
+
# Environment variables can be set directly in the dash configuration or
|
|
4
|
+
# read from `.dash/secrets`.
|
|
5
5
|
|
|
6
6
|
# Reading environment variables from the configuration
|
|
7
7
|
#
|
|
@@ -14,33 +14,33 @@ env:
|
|
|
14
14
|
|
|
15
15
|
# Secrets
|
|
16
16
|
#
|
|
17
|
-
#
|
|
17
|
+
# dash uses dotenv to automatically load environment variables from the configured secrets files.
|
|
18
18
|
#
|
|
19
|
-
# Common secrets across all destinations can be set in `.
|
|
20
|
-
# `.
|
|
19
|
+
# Common secrets across all destinations can be set in `.dash/secrets-common`. dash looks for
|
|
20
|
+
# `.dash/secrets-common` first, then `.dash/secrets`, with later values overriding earlier ones.
|
|
21
21
|
#
|
|
22
|
-
# If you are using destinations,
|
|
23
|
-
# `.
|
|
22
|
+
# If you are using destinations, dash looks for `.dash/secrets-common` first, then
|
|
23
|
+
# `.dash/secrets.<destination>`. The non-destination `.dash/secrets` file is not read when a
|
|
24
24
|
# destination is selected.
|
|
25
25
|
#
|
|
26
|
-
# This file can be used to set variables like `
|
|
26
|
+
# This file can be used to set variables like `DASH_REGISTRY_PASSWORD` or database passwords.
|
|
27
27
|
# You can use variable or command substitution in the secrets file.
|
|
28
28
|
#
|
|
29
29
|
# ```shell
|
|
30
|
-
#
|
|
30
|
+
# DASH_REGISTRY_PASSWORD=$DASH_REGISTRY_PASSWORD
|
|
31
31
|
# RAILS_MASTER_KEY=$(cat config/master.key)
|
|
32
32
|
# ```
|
|
33
33
|
#
|
|
34
34
|
# You can also use [secret helpers](../../commands/secrets) for some common password managers.
|
|
35
35
|
#
|
|
36
36
|
# ```shell
|
|
37
|
-
# SECRETS=$(
|
|
37
|
+
# SECRETS=$(dash secrets fetch ...)
|
|
38
38
|
#
|
|
39
|
-
# REGISTRY_PASSWORD=$(
|
|
40
|
-
# DB_PASSWORD=$(
|
|
39
|
+
# REGISTRY_PASSWORD=$(dash secrets extract REGISTRY_PASSWORD $SECRETS)
|
|
40
|
+
# DB_PASSWORD=$(dash secrets extract DB_PASSWORD $SECRETS)
|
|
41
41
|
# ```
|
|
42
42
|
#
|
|
43
|
-
# If you store secrets directly in `.
|
|
43
|
+
# If you store secrets directly in `.dash/secrets`, ensure that it is not checked into version control.
|
|
44
44
|
#
|
|
45
45
|
# To pass the secrets, you should list them under the `secret` key. When you do this, the
|
|
46
46
|
# other variables need to be moved under the `clear` key.
|
|
@@ -62,10 +62,10 @@ env:
|
|
|
62
62
|
# on the context.
|
|
63
63
|
#
|
|
64
64
|
# ```shell
|
|
65
|
-
# SECRETS=$(
|
|
65
|
+
# SECRETS=$(dash secrets fetch ...)
|
|
66
66
|
#
|
|
67
|
-
# MAIN_DB_PASSWORD=$(
|
|
68
|
-
# SECONDARY_DB_PASSWORD=$(
|
|
67
|
+
# MAIN_DB_PASSWORD=$(dash secrets extract MAIN_DB_PASSWORD $SECRETS)
|
|
68
|
+
# SECONDARY_DB_PASSWORD=$(dash secrets extract SECONDARY_DB_PASSWORD $SECRETS)
|
|
69
69
|
# ```
|
|
70
70
|
env:
|
|
71
71
|
secret:
|
|
@@ -87,7 +87,7 @@ accessories:
|
|
|
87
87
|
# Tags
|
|
88
88
|
#
|
|
89
89
|
# Tags are used to add extra env variables to specific hosts.
|
|
90
|
-
# See
|
|
90
|
+
# See dash docs servers for how to tag hosts.
|
|
91
91
|
#
|
|
92
92
|
# Tags are only allowed in the top-level env configuration (i.e., not under a role-specific env).
|
|
93
93
|
#
|
|
@@ -16,7 +16,7 @@ proxy:
|
|
|
16
16
|
# Where each option lives when a loadbalancer fronts the fleet
|
|
17
17
|
#
|
|
18
18
|
# Every deploy option has exactly one home (see
|
|
19
|
-
#
|
|
19
|
+
# Dash::Configuration::Proxy::DEPLOY_OPTION_DISPOSITIONS - the layering
|
|
20
20
|
# contract that enforces this):
|
|
21
21
|
#
|
|
22
22
|
# edge - applied only by the loadbalancer, stripped from the per-host
|
|
@@ -71,46 +71,46 @@ proxy:
|
|
|
71
71
|
# for multi-host primary roles.
|
|
72
72
|
loadbalancer: lb.example.com
|
|
73
73
|
|
|
74
|
-
# Sharing one loadbalancer between several
|
|
74
|
+
# Sharing one loadbalancer between several dash apps
|
|
75
75
|
#
|
|
76
|
-
# More than one
|
|
76
|
+
# More than one dash app may point `loadbalancer:` at the same host. Each app
|
|
77
77
|
# registers its own service on the shared kamal-proxy and keeps its own
|
|
78
78
|
# deploy.yml; the load balancer multiplexes them by hostname.
|
|
79
79
|
#
|
|
80
|
-
# The rules
|
|
80
|
+
# The rules dash enforces for that topology:
|
|
81
81
|
#
|
|
82
82
|
# * Service state survives a reboot. kamal-proxy persists its services in the
|
|
83
83
|
# `kamal-loadbalancer-config` volume (or `kamal-proxy-config` when the
|
|
84
|
-
# loadbalancer shares a proxy host), and `
|
|
84
|
+
# loadbalancer shares a proxy host), and `dash proxy reboot` only replaces
|
|
85
85
|
# the container. Rebooting from app A does not drop app B's routes — the
|
|
86
86
|
# surviving service list is printed after the restart.
|
|
87
87
|
#
|
|
88
88
|
# * Service names must be unique across apps. The loadbalancer registers a
|
|
89
89
|
# service under the bare `service:` name, so two apps — or two destinations
|
|
90
90
|
# of one app — sharing a name would take over each other's routes. The first
|
|
91
|
-
# app to deploy claims the name in `.
|
|
91
|
+
# app to deploy claims the name in `.dash/loadbalancer/services/<service>`
|
|
92
92
|
# on the loadbalancer host; a second app deploying the same name fails at
|
|
93
93
|
# deploy time instead of silently winning.
|
|
94
94
|
#
|
|
95
95
|
# * Apps sharing a loadbalancer must agree on `proxy/run`. All of them boot the
|
|
96
96
|
# same container, so the first app to boot records its run configuration in
|
|
97
|
-
# `.
|
|
97
|
+
# `.dash/loadbalancer/run_config`. Another app booting with a different
|
|
98
98
|
# `proxy/run` fails; the same app changing its own gets the usual drift
|
|
99
|
-
# warning and applies it on `
|
|
99
|
+
# warning and applies it on `dash proxy reboot`.
|
|
100
100
|
#
|
|
101
|
-
# * `
|
|
101
|
+
# * `dash proxy remove` refuses while other apps are installed on the
|
|
102
102
|
# loadbalancer host, exactly as it does for a proxy host. Use `--force` to
|
|
103
103
|
# override, which removes the shared loadbalancer for every app on it.
|
|
104
104
|
|
|
105
105
|
# Automatic proxy reboot on deploy
|
|
106
106
|
#
|
|
107
|
-
# When `
|
|
107
|
+
# When `dash deploy` detects that the running kamal-proxy container was
|
|
108
108
|
# started with a different image, version or run options than the current
|
|
109
109
|
# configuration, it reboots the proxy automatically — one host at a time —
|
|
110
110
|
# before booting the app.
|
|
111
111
|
#
|
|
112
112
|
# Set to false to opt out. Kamal will then print a warning when drift is
|
|
113
|
-
# detected and leave the proxy untouched until you run `
|
|
113
|
+
# detected and leave the proxy untouched until you run `dash proxy reboot`.
|
|
114
114
|
#
|
|
115
115
|
# Root-level `proxy` setting only; ignored inside role-specific proxy blocks.
|
|
116
116
|
#
|
|
@@ -155,14 +155,14 @@ proxy:
|
|
|
155
155
|
# in an incoming handshake. A path is resolved against a healthy app target; an
|
|
156
156
|
# absolute http(s) URL is called directly. Answer 2xx to approve. On-demand TLS
|
|
157
157
|
# replaces the static hostname list, so it cannot be combined with
|
|
158
|
-
# `host`/`hosts`, with `certificate_pem`, or with `ssl_domains` —
|
|
158
|
+
# `host`/`hosts`, with `certificate_pem`, or with `ssl_domains` — dash rejects
|
|
159
159
|
# those at config time, because kamal-proxy would reject the deploy and there
|
|
160
160
|
# is no sensible winner to pick.
|
|
161
161
|
#
|
|
162
162
|
# `client_ca_pem` requires mutual TLS: clients must present a certificate
|
|
163
163
|
# signed by this CA bundle. Like `certificate_pem` it names a secret in
|
|
164
|
-
# `.
|
|
165
|
-
# under `.
|
|
164
|
+
# `.dash/secrets`; the content is uploaded next to the app's TLS material
|
|
165
|
+
# under `.dash/proxy/apps-config`, and the proxy is given the path it sees
|
|
166
166
|
# inside its own container. An empty secret fails the deploy rather than
|
|
167
167
|
# silently turning mTLS off.
|
|
168
168
|
ssl:
|
|
@@ -258,7 +258,7 @@ proxy:
|
|
|
258
258
|
# whitespace trimmed. A value may contain colons — a CSP naming a scheme or a
|
|
259
259
|
# port survives intact.
|
|
260
260
|
#
|
|
261
|
-
# Two things
|
|
261
|
+
# Two things dash rejects rather than letting them fail late: a value with a
|
|
262
262
|
# newline or carriage return in it (that is response splitting, and shell
|
|
263
263
|
# escaping would silently turn it into a literal backslash-n), and a *request*
|
|
264
264
|
# rule naming `Host` — Go carries the host outside the header map, so the rule
|
|
@@ -377,7 +377,7 @@ proxy:
|
|
|
377
377
|
#
|
|
378
378
|
# Set exactly one of `password_secret` or `password` — never both.
|
|
379
379
|
#
|
|
380
|
-
# Prefer `password_secret`: it names an entry in `.
|
|
380
|
+
# Prefer `password_secret`: it names an entry in `.dash/secrets`, so the
|
|
381
381
|
# password never lives in this file.
|
|
382
382
|
#
|
|
383
383
|
# basic_auth:
|
|
@@ -450,7 +450,7 @@ proxy:
|
|
|
450
450
|
# `header` names the header carrying the original client IP (`CF-Connecting-IP`
|
|
451
451
|
# behind Cloudflare, `True-Client-IP` behind some others); kamal-proxy reads it
|
|
452
452
|
# instead of `X-Forwarded-For`. It is only honoured when `trusted_proxies` is
|
|
453
|
-
# set, because otherwise it is just something the client wrote —
|
|
453
|
+
# set, because otherwise it is just something the client wrote — dash rejects
|
|
454
454
|
# that combination rather than appearing to honour it.
|
|
455
455
|
#
|
|
456
456
|
# Addresses and ranges are plain IPv4/IPv6 or CIDR. Write IPv4 as IPv4, not as
|
|
@@ -501,7 +501,7 @@ proxy:
|
|
|
501
501
|
#
|
|
502
502
|
# Refuse requests whose full User-Agent matches one of these RE2 patterns,
|
|
503
503
|
# checked after the IP rules. A missing User-Agent only matches an explicit
|
|
504
|
-
# '^$' pattern. Patterns are matched by kamal-proxy (Go RE2), so
|
|
504
|
+
# '^$' pattern. Patterns are matched by kamal-proxy (Go RE2), so dash checks
|
|
505
505
|
# only their shape, not their syntax.
|
|
506
506
|
deny_user_agents:
|
|
507
507
|
- 'BadBot/.*'
|
|
@@ -509,7 +509,7 @@ proxy:
|
|
|
509
509
|
# ### Notes
|
|
510
510
|
# - The health check path is served without an address check and without a rate
|
|
511
511
|
# limit, so it stays reachable during a deploy. That means it cannot be `/` —
|
|
512
|
-
#
|
|
512
|
+
# dash rejects `healthcheck: path: /` while either feature is on, because it
|
|
513
513
|
# would leave the whole service open. The default `/up` is fine.
|
|
514
514
|
# - When a loadbalancer is configured, all of this moves to the loadbalancer:
|
|
515
515
|
# the per-host proxies see the loadbalancer as their peer, so an allow list
|
|
@@ -681,17 +681,17 @@ proxy:
|
|
|
681
681
|
#
|
|
682
682
|
# ### Administering it
|
|
683
683
|
#
|
|
684
|
-
# `
|
|
684
|
+
# `dash proxy cache stats` reports what the cache is holding (add `--count`
|
|
685
685
|
# to measure entries and bytes per service, `--json` for the raw report),
|
|
686
|
-
# and `
|
|
686
|
+
# and `dash proxy cache purge` drops this app's cached responses
|
|
687
687
|
# (`--path-prefix /assets` to narrow it). Both run on the layer that owns
|
|
688
688
|
# the cache - the loadbalancer when load balancing, else each proxy host.
|
|
689
689
|
#
|
|
690
690
|
# ### When it is not caching
|
|
691
691
|
#
|
|
692
692
|
# A cache that quietly stores nothing is the usual first surprise. Start with
|
|
693
|
-
# `
|
|
694
|
-
# `
|
|
693
|
+
# `dash proxy cache stats`; kamal-proxy also explains every refusal — check
|
|
694
|
+
# `dash proxy logs` for the reason, and the `cache_refusals_total` metric
|
|
695
695
|
# (by `reason`) if you run with `metrics_port`.
|
|
696
696
|
# The common reasons are a missing `Cache-Control: public, max-age=...` on the
|
|
697
697
|
# app's response, a `Set-Cookie` header, a body over `max_body`, and
|
|
@@ -792,7 +792,7 @@ proxy:
|
|
|
792
792
|
#
|
|
793
793
|
# Stopping and starting containers means talking to the runtime, so the proxy
|
|
794
794
|
# must have been booted with `run/docker_socket` set. That is a boot-time
|
|
795
|
-
# prerequisite for a deploy-time setting, so
|
|
795
|
+
# prerequisite for a deploy-time setting, so dash checks it while reading this
|
|
796
796
|
# file rather than letting the first request hang.
|
|
797
797
|
#
|
|
798
798
|
# Setting `run/docker_socket` also mounts that socket into the proxy container
|
|
@@ -832,9 +832,9 @@ proxy:
|
|
|
832
832
|
# `repository` to a host-less path (e.g.
|
|
833
833
|
# myfork/kamal-proxy) - the default repository
|
|
834
834
|
# below already embeds its ghcr.io host
|
|
835
|
-
repository: ghcr.io/zoolutions/
|
|
835
|
+
repository: ghcr.io/zoolutions/dash-proxy # Container repository for the
|
|
836
836
|
# kamal-proxy image (this is the default)
|
|
837
|
-
version: v1.0.0.
|
|
837
|
+
version: v1.0.0.7 # Version tag of the kamal-proxy image to use.
|
|
838
838
|
# Defaults to the minimum version this gem
|
|
839
839
|
# requires - only pin it to roll forward early,
|
|
840
840
|
# never below the default
|
|
@@ -880,7 +880,29 @@ proxy:
|
|
|
880
880
|
# staging environment while you are working out a DNS setup, so you do not
|
|
881
881
|
# burn production rate limits on failed attempts.
|
|
882
882
|
#
|
|
883
|
-
# `
|
|
883
|
+
# `release_probe_interval` is how often, in seconds, the proxy re-checks a
|
|
884
|
+
# domain whose issuance is currently held - which is what decides how long
|
|
885
|
+
# after a DNS cutover the certificate appears (proxy v1.0.0.7+).
|
|
886
|
+
#
|
|
887
|
+
# You can point a host at dash before its DNS is repointed. No certificate
|
|
888
|
+
# is ordered until the first HTTPS request arrives, and the proxy first
|
|
889
|
+
# checks that the domain actually routes back to it - because until it does,
|
|
890
|
+
# an HTTP-01 challenge cannot succeed, and a failed attempt burns Let's
|
|
891
|
+
# Encrypt's limit of five failed authorizations per hostname per hour.
|
|
892
|
+
# Tripping that limit is what would otherwise delay the certificate at the
|
|
893
|
+
# moment of the cutover. Held domains are re-checked on this interval and
|
|
894
|
+
# issued as soon as the domain arrives, so the cutover costs one interval
|
|
895
|
+
# rather than a backoff step.
|
|
896
|
+
#
|
|
897
|
+
# The default is 60. A negative value switches release probing off, leaving
|
|
898
|
+
# a held domain to wait out its backoff. Zones covered by a DNS-01 provider
|
|
899
|
+
# skip all of this: DNS-01 never depends on where a domain points, so their
|
|
900
|
+
# certificates can be issued well before a cutover.
|
|
901
|
+
#
|
|
902
|
+
# `dash proxy domains list` shows what is held and why; `dash proxy domains
|
|
903
|
+
# retry HOST` clears a hold when you already know the cause is fixed.
|
|
904
|
+
#
|
|
905
|
+
# `credentials` names entries in `.dash/secrets` to pass to the proxy
|
|
884
906
|
# container as environment variables - the API credentials your DNS provider
|
|
885
907
|
# needs (`CF_DNS_API_TOKEN`, `LOOPIA_API_USER`, ...). Name them exactly as the
|
|
886
908
|
# provider expects them, since the name is what reaches the container.
|
|
@@ -890,7 +912,7 @@ proxy:
|
|
|
890
912
|
# zone, and `docker run --env` would leave it in process listings and audit
|
|
891
913
|
# logs. Adding or renaming one changes the proxy's config digest, so the next
|
|
892
914
|
# deploy reboots the proxy to pick it up; rotating a value does not, so run
|
|
893
|
-
# `
|
|
915
|
+
# `dash proxy reboot` yourself after a rotation.
|
|
894
916
|
acme:
|
|
895
917
|
email: admin@example.com
|
|
896
918
|
dns_provider:
|
|
@@ -899,6 +921,7 @@ proxy:
|
|
|
899
921
|
default: route53
|
|
900
922
|
prefer_wildcard: true
|
|
901
923
|
http_fallback: false
|
|
924
|
+
release_probe_interval: 60
|
|
902
925
|
directory: https://acme-staging-v02.api.letsencrypt.org/directory
|
|
903
926
|
credentials:
|
|
904
927
|
- CF_DNS_API_TOKEN
|
|
@@ -1035,12 +1058,12 @@ proxy:
|
|
|
1035
1058
|
# `rediss://` URL that every proxy pointed at it shares, so one fetch warms
|
|
1036
1059
|
# the whole fleet.
|
|
1037
1060
|
#
|
|
1038
|
-
# The URL never appears on the proxy's command line:
|
|
1061
|
+
# The URL never appears on the proxy's command line: dash delivers it as
|
|
1039
1062
|
# `CACHE_STORE` in a 0600 env file on the host (alongside any ACME
|
|
1040
1063
|
# credentials), so a password in the URL stays out of process listings and
|
|
1041
1064
|
# kamal's audit log. The trade-off, same as the ACME credentials: changing
|
|
1042
1065
|
# only the URL's *value* does not move the drift digest — run
|
|
1043
|
-
# `
|
|
1066
|
+
# `dash proxy reboot` after rotating it.
|
|
1044
1067
|
#
|
|
1045
1068
|
# `store_timeout` only matters with a shared store, in seconds: how long
|
|
1046
1069
|
# the store may take to answer before the request goes to the app instead —
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# Using a local container registry
|
|
6
6
|
#
|
|
7
|
-
# If the registry server starts with `localhost`,
|
|
7
|
+
# If the registry server starts with `localhost`, dash will start a local Docker registry
|
|
8
8
|
# on that port and push the app image to it.
|
|
9
9
|
registry:
|
|
10
10
|
server: localhost:5555
|
|
@@ -15,13 +15,13 @@ registry:
|
|
|
15
15
|
# set up a private repository before deploying, or change the default repository privacy
|
|
16
16
|
# settings to private in your [Docker Hub settings](https://hub.docker.com/repository-settings/default-privacy).
|
|
17
17
|
#
|
|
18
|
-
# A reference to a secret (in this case, `
|
|
18
|
+
# A reference to a secret (in this case, `DASH_REGISTRY_PASSWORD`) will look up the secret
|
|
19
19
|
# in the local environment:
|
|
20
20
|
registry:
|
|
21
21
|
username:
|
|
22
22
|
- <your docker hub username>
|
|
23
23
|
password:
|
|
24
|
-
-
|
|
24
|
+
- DASH_REGISTRY_PASSWORD
|
|
25
25
|
|
|
26
26
|
# Using AWS ECR as the container registry
|
|
27
27
|
#
|
|
@@ -45,7 +45,7 @@ registry:
|
|
|
45
45
|
# base64 -i /path/to/key.json | tr -d "\\n"
|
|
46
46
|
# ```
|
|
47
47
|
#
|
|
48
|
-
# You'll then need to set the `
|
|
48
|
+
# You'll then need to set the `DASH_REGISTRY_PASSWORD` secret to that value.
|
|
49
49
|
#
|
|
50
50
|
# Use the environment variable as the password along with `_json_key_base64` as the username.
|
|
51
51
|
# Here’s the final configuration:
|
|
@@ -53,12 +53,12 @@ registry:
|
|
|
53
53
|
server: <your registry region>-docker.pkg.dev
|
|
54
54
|
username: _json_key_base64
|
|
55
55
|
password:
|
|
56
|
-
-
|
|
56
|
+
- DASH_REGISTRY_PASSWORD
|
|
57
57
|
|
|
58
58
|
# Validating the configuration
|
|
59
59
|
#
|
|
60
60
|
# You can validate the configuration by running:
|
|
61
61
|
#
|
|
62
62
|
# ```shell
|
|
63
|
-
#
|
|
63
|
+
# dash registry login
|
|
64
64
|
# ```
|
|
@@ -15,7 +15,7 @@ servers:
|
|
|
15
15
|
#
|
|
16
16
|
# This can be a list of hosts if you don't need custom configuration for the role.
|
|
17
17
|
#
|
|
18
|
-
# You can set tags on the hosts for custom env variables (see
|
|
18
|
+
# You can set tags on the hosts for custom env variables (see dash docs env):
|
|
19
19
|
web:
|
|
20
20
|
- 172.1.0.1
|
|
21
21
|
- 172.1.0.2: experiment1
|
|
@@ -11,7 +11,7 @@ servers:
|
|
|
11
11
|
|
|
12
12
|
# Tagging servers
|
|
13
13
|
#
|
|
14
|
-
# Servers can be tagged, with the tags used to add custom env variables (see
|
|
14
|
+
# Servers can be tagged, with the tags used to add custom env variables (see dash docs env).
|
|
15
15
|
servers:
|
|
16
16
|
- 172.0.0.1
|
|
17
17
|
- 172.0.0.2: experiments
|
|
@@ -19,7 +19,7 @@ servers:
|
|
|
19
19
|
|
|
20
20
|
# Roles
|
|
21
21
|
#
|
|
22
|
-
# For more complex deployments (e.g., if you are running job hosts), you can specify roles and configure each separately (see
|
|
22
|
+
# For more complex deployments (e.g., if you are running job hosts), you can specify roles and configure each separately (see dash docs role):
|
|
23
23
|
servers:
|
|
24
24
|
web:
|
|
25
25
|
...
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class
|
|
1
|
+
class Dash::Configuration::Env::Tag
|
|
2
2
|
attr_reader :name, :config, :secrets
|
|
3
3
|
|
|
4
4
|
def initialize(name, config:, secrets:)
|
|
@@ -8,6 +8,6 @@ class Kamal::Configuration::Env::Tag
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def env
|
|
11
|
-
|
|
11
|
+
Dash::Configuration::Env.new(config: config, secrets: secrets)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
class
|
|
2
|
-
include
|
|
1
|
+
class Dash::Configuration::Env
|
|
2
|
+
include Dash::Configuration::Validation
|
|
3
3
|
|
|
4
4
|
attr_reader :context, :clear, :secrets, :secret_keys
|
|
5
|
-
delegate :argumentize, to:
|
|
5
|
+
delegate :argumentize, to: Dash::Utils
|
|
6
6
|
|
|
7
7
|
def initialize(config:, secrets:, context: "env")
|
|
8
8
|
@clear = config.fetch("clear", config.key?("secret") || config.key?("tags") ? {} : config)
|
|
9
9
|
@secrets = secrets
|
|
10
10
|
@secret_keys = config.fetch("secret", [])
|
|
11
11
|
@context = context
|
|
12
|
-
validate! config, context: context, with:
|
|
12
|
+
validate! config, context: context, with: Dash::Configuration::Validator::Env
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def clear_args
|
|
@@ -17,7 +17,7 @@ class Kamal::Configuration::Env
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def secrets_io
|
|
20
|
-
|
|
20
|
+
Dash::EnvFile.new(aliased_secrets).to_io
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def merge(other)
|