# The swarm's metrics store as every hive sees it: the name it answers on and # its port, identical on every host. What the host running it decides, and the # container itself, are in ./swarm-victoriametrics.nix. { lib, config, ... }: let hyperhiveCfg = config.services.hyperhive; swarmDomain = hyperhiveCfg.swarm.domain; # Total on a null swarm domain for the same reason every sibling module is: # the required-domain assertion in hive-network.nix should be what an # operator sees, not a coercion error from here. domainBase = if swarmDomain == null then "invalid" else swarmDomain; in { # What the store IS from any hive's point of view: the name it answers on and # the port. `enable`, `package` and `retentionPeriod` are decisions of the # host that runs it and live under `deploy.*`. options.services.hyperhive.swarm.victoriametrics = { machine = lib.mkOption { type = lib.types.str; readOnly = true; default = "swarm-victoriametrics"; description = '' Container name. Read-only: the name appears in host paths and in `machinectl`, so it is a fact other modules may read rather than a knob. ''; }; domain = lib.mkOption { type = lib.types.str; default = "metrics.${domainBase}"; defaultText = lib.literalExpression ''"metrics.''${services.hyperhive.swarm.domain}"''; description = '' Name the gateway serves this on. A sibling of the swarm's other service names, so the swarm-services sub-CA can issue for it — see `hive-tls.nix` for why a service name being a sibling rather than a child decides which CA may sign it. ''; }; port = lib.mkOption { type = lib.types.port; default = 8428; description = '' Port VictoriaMetrics listens on, bound to loopback only on the host that runs it: its write endpoint is unauthenticated, so the gateway's vhost there is the only route to it. Upstream's own default, kept so an operator reading VictoriaMetrics documentation finds what they expect. ''; }; }; }