let a stack compute its settings without make
A stack can now ship <name>.env and <name>.sh next to its compose files. The hook is sourced with the tag helpers available, which is what the computing .mk files of the catalogue were using make for: 29 of its 44 .mk files only exist to build variables like the fabio tags. Converting stack/host/fabio.mk by hand gives byte-identical output for the route tag, and drops a trailing comma the make version left in the listener list. Also: APP_HOST and APP_URI are computed (the tag helpers build on them), --color controls the escape codes rather than always emitting them, and make test-portability runs the CLI under busybox ash and dash.
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
stack/<name>/<name>.yml the services
|
||||
stack/<name>/<name>.local.yml what only makes sense on a workstation (published ports…)
|
||||
stack/<name>/<name>.labels.yml the registrator labels, so routing stays optional
|
||||
stack/<name>/<name>.env plain settings: versions, defaults
|
||||
stack/<name>/<name>.sh computed settings (fabio tags), no make needed
|
||||
stack/<name>/.env.dist the variables it expects, with defaults
|
||||
stack/<name>/README.md what it is and what it needs
|
||||
```
|
||||
|
||||
@@ -99,6 +99,33 @@ parsed, never sourced, so a value may contain a `#` or a `$(...)` without
|
||||
breaking anything or being executed. The make engine included `.env` as a
|
||||
makefile, where both broke.
|
||||
|
||||
## Per-stack settings
|
||||
|
||||
A stack keeps its own settings next to its compose files:
|
||||
|
||||
| file | for |
|
||||
|---|---|
|
||||
| `<name>.env` | plain values: versions, defaults |
|
||||
| `<name>.env.<env>` | the same, for one environment |
|
||||
| `<name>.sh` | values that have to be computed |
|
||||
| `<name>.mk` | the legacy make snippet; still read for its groups |
|
||||
|
||||
A `.sh` hook is sourced with the myos helpers available, and sets variables
|
||||
directly. This is what lets a stack work on a machine that has no make:
|
||||
|
||||
```sh
|
||||
# stack/host/fabio.sh
|
||||
HOST_FABIO_VERSION=${HOST_FABIO_VERSION:-1.6.3}
|
||||
HOST_FABIO_SERVICE_9998_NAME=${HOST_FABIO_SERVICE_9998_NAME:-fabio}
|
||||
HOST_FABIO_SERVICE_9998_AUTH=${HOST_FABIO_SERVICE_9998_AUTH:-default}
|
||||
HOST_FABIO_SERVICE_9998_TAGS=${HOST_FABIO_SERVICE_9998_TAGS:-$(myos_tagprefix HOST_FABIO 9998)}
|
||||
```
|
||||
|
||||
Always write `${VAR:-default}` so the environment and the `.env` still win.
|
||||
Helpers available in a hook: `myos_tagprefix`, `myos_urlprefix`, `myos_uri`,
|
||||
`myos_url`, `myos_envprefix`, `myos_servicenvs`, `myos_var`, `myos_lower`,
|
||||
`myos_upper`.
|
||||
|
||||
## Groups
|
||||
|
||||
A group is a lowercase name whose value lists stacks. It can live in a `.env`,
|
||||
|
||||
Reference in New Issue
Block a user