Making every soft dependency a provision made it hard: a mesh without influxdb could not assign
grafana, and one with influxdb in its catalogue would install it for grafana. A requirement may now
be written {"name": ..., "optional": true}. It resolves as a hard one when a provider is assigned or
reachable, and is otherwise absent: never refused, nothing installed for it. Its binding, credential
and only-when-bound files are left out, its ${bound:...|default:...} placeholders take their
defaults, the module check refuses one that could render empty, and plan and node list it unbound.
22 lines
835 B
Go
22 lines
835 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/novox/mesh-controller/internal/catalogue"
|
|
)
|
|
|
|
// unboundLines say which optional requirements of a machine's modules nothing assigned answers
|
|
// (novox/hq ADR 0330 §7): left unbound rather than refused, with nothing installed for them, so the
|
|
// module runs without — and said, because a data source that never appears is otherwise a silence.
|
|
// Each binds without anybody's act on the first composition after a provider is assigned.
|
|
func unboundLines(plan catalogue.Resolution) []string {
|
|
lines := make([]string, 0, len(plan.Absent))
|
|
for _, a := range plan.Absent {
|
|
lines = append(lines, fmt.Sprintf(
|
|
" unbound %s, optional for %s — nothing assigned provides it; it binds once a provider is "+
|
|
"assigned (novox/hq ADR 0330)", a.Requirement, a.Consumer))
|
|
}
|
|
return lines
|
|
}
|