An edge node below it. The parent's public key is pinned:
ulid:n-edge1data_dir:/datakey_file:/keys/edge1.keyapi:{ addr:":443", local_addr:":80", token:"change-me"}mqtt:{ addr:":8883"}mqtt_local:{ addr:":1883"}parent:url:https://global.example.com:9443pubkey:3f1c…# printed by colca-keygen for the parent's key
The edge is then placed and enrolled at its parent once. An identity binds to a
system element, not to a path, so the element comes first; its id is a ULID.
The child's mount is wherever that element sits, now and after any rename:
exportCOLCA_TOKEN=...# api.token from the parent's config# 1. the element the child hangs fromcurl-sk-H"X-Colca-Token: $COLCA_TOKEN"-H"Content-Type: application/json"\-XPOSThttps://global.example.com/publish\-d'{"topic":"colca/v1/_SystemElement/n-global/edge1","payload":{"id":"01J8Z3Y8S5ZC0KQ9M2F5T7W4XB","name":"edge1"}}'# 2. the child's key, bound to that elementcurl-sk-H"X-Colca-Token: $COLCA_TOKEN"-H"Content-Type: application/json"\-XPOSThttps://global.example.com/enroll\-d'{"ulid":"n-edge1","kind":"node","element":"01J8Z3Y8S5ZC0KQ9M2F5T7W4XB","pubkey":"<edge1 public key>"}'
Machines and external services are enrolled the same way, with
"kind":"external" and the grants they need. There are no lists of children
or clients in the file: identities are runtime state, stored by the node.
HTTPS API for machines, administrators and people.
api.token
Admin token for X-Colca-Token. Empty authenticates nobody.
api.local_addr
Plaintext HTTP door for local services. Never publish it.
mqtt.addr
MQTT over TLS for enrolled machines and external services.
mqtt_local.addr
Plaintext MQTT door for local services. Never publish it.
mqtt_human.tcp_addr
MQTT over TLS for people, token in the password.
mqtt_human.ws_addr
MQTT over WebSocket for browsers.
repl.addr
Replication door for child nodes.
tls.cert_file, tls.key_file
Optional certificate for the HTTP API and the doors people use, for clients that expect one from a CA. Replication and the machine door always present the node's own key.
parent.url
https://host:port of the parent's replication door. Absent means this node is a root.
parent.pubkey
Hex public key of the parent, checked on every connection.
How often the pruner runs. 0 turns it off; leaving the key out keeps the default.
…streams.<name>.max_age
see below
Records older than this may be pruned. Go duration syntax; there is no d unit.
…streams.<name>.max_bytes
none
Size limit, KiB/MiB/GiB/TiB or bytes. Applies in addition to the age.
…streams.<name>.ignore_cursors_after
0
After how long a cursor that stopped moving no longer protects the stream. 0 means never.
…streams.<name>.keep_forever
false
Never prune this stream. Cannot be combined with max_age.
Default ages: metrics and logs 14 days (336h); entities, alarms,
annotations and audit 365 days (8760h); commands 90 days (2160h).
commands cannot be set below 7 days, so a valid command is never pruned
before a child that was offline could fetch it. definitions are compacted,
not aged.