LocalAgent fields
Reference for kind: LocalAgent. Deploy flow is on Local node.
apiVersion: datasance.com/v3 # required, string
kind: LocalAgent # required, string
metadata:
name: local # no, string. Empty becomes local
namespace: my-ecn # no, string. Must match -n when both are set
tags: [] # no, list of string
spec:
host: 127.0.0.1 # no, string. spec.config.host wins for the Controller host
controllerEndpoint: https://127.0.0.1:51121 # no, string
airgap: false # no, bool
package: # no, object. Same keys as Agent
version: "1.1.0" # no, string
container:
image: ghcr.io/datasance/edgelet:1.1.0 # no, string
registry: registry.example.com # no, string
username: pull-user # no, string
password: pull-token # no, string
wasm:
edgelet-wasmtime: # no, object. The key is the handler name
url: https://example.com/shim.tar.gz # no, string. Keep url or path
path: /opt/shims/edgelet-wasmtime.tar.gz # no, string. Keep url or path
sha256: "<sha256>" # no, string
scripts: # no, object. dir is required when this block is set
dir: /opt/bootstrap # required when scripts is set, string
deps:
entrypoint: deps.sh # no, string
args: [] # no, list
install:
entrypoint: install.sh # no, string
args: [] # no, list
uninstall:
entrypoint: uninstall.sh # no, string
args: [] # no, list
config:
description: Local node # no, string
location: desk # no, string
latitude: 0.0 # no, float
longitude: 0.0 # no, float
arch: amd64 # recommended, string
host: 127.0.0.1 # no, string
deploymentType: native # no, string, default native
containerEngine: edgelet # no, string, default edgelet
containerEngineUrl: unix:///run/edgelet/containerd.sock # no, string
networkInterface: lo0 # no, string
diskLimit: 10 # no, int64
diskDirectory: /var/lib/edgelet # no, string
memoryLimit: 1024 # no, int64
cpuLimit: 100 # no, int64
logLimit: 100 # no, int64
logDirectory: /var/log/edgelet # no, string
logFileCount: 5 # no, int64
statusFrequency: 10 # no, float
changeFrequency: 10 # no, float
watchdogEnabled: true # no, bool
logLevel: info # no, string
pruningFrequency: 60 # no, float
availableDiskThreshold: 80 # no, float
timeZone: UTC # no, string
gpsMode: off # no, string
gpsScanFrequency: 0 # no, float
gpsDevice: /dev/ttyUSB0 # no, string
edgeGuardFrequency: 0 # no, float. 0 disables
upstreamRouters: # no, list of string
- default-router
routerConfig:
routerMode: edge # no, string, default edge
messagingPort: 5671 # no, int, default 5671
edgeRouterPort: 45671 # no, int. Interior mode only
interRouterPort: 55671 # no, int. Interior mode only
upstreamNatsServers: # no, list of string
- default-nats-hub
natsConfig:
natsMode: leaf # no, string, default leaf
natsServerPort: 4222 # no, int, default 4222
natsLeafPort: 7422 # no, int, default 7422
natsClusterPort: 6222 # no, int. Server mode only
natsMqttPort: 8883 # no, int, default 8883
natsHttpPort: 8222 # no, int, default 8222
jsStorageSize: 10G # no, string, default 10G
jsMemoryStoreSize: 1G # no, string, default 1G
Not deployed
These fields come back from describe. Leave them out of the file you pass to deploy.
uuid: "<uuid>" # describe only, string
created: "<timestamp>" # describe only, string
metadata.namespace, when set, must match -n. If metadata.name is empty, the name becomes local.
Fields specific to LocalAgent
| Field | Type | Required | Description |
|---|---|---|---|
host | string | No | Legacy host. spec.config.host wins for the Controller host. |
controllerEndpoint | string | No | Override Controller URL for provision |
airgap | bool | No | Same as a remote Agent |
uuid | string | No | Set after deploy |
created | string | No | Set after deploy |
There is no ssh block. Bootstrap runs on the local machine.
For a non-system node, potctl rejects deploy when TCP 54321 is already in use. That port is the default local system node layout.
spec.package and spec.scripts
Package and scripts match Agent fields. Local bootstrap sets LOCAL_INSTALL=1, so the remote sudo check does not run. See Bootstrap.
spec.config
Same structure as Agent.spec.config. Paths below are under spec.config.
Host resolution for provision and the Controller API:
spec.config.hostwhen it is non-emptyspec.hostlocalhost
Identity and geo
| Field | Type | Required | Description |
|---|---|---|---|
config.description | string | No | Free text |
config.location | string | No | Location label |
config.latitude | float | No | Geo latitude |
config.longitude | float | No | Geo longitude |
config.arch | string | Recommended | amd64, arm64, arm, riscv64. Synced to archId. |
Runtime
| Field | Type | Default (edge) | Description |
|---|---|---|---|
config.host | string | See precedence above | Controller host |
config.deploymentType | string | native | native or container |
config.containerEngine | string | edgelet | edgelet, docker, or podman |
config.containerEngineUrl | string | Engine default | Socket URL for the engine |
config.networkInterface | string | Bind interface |
Desktop container on macOS or Windows skips host config materialization. See Desktop container.
Resource limits and logging
| Field | Type | Description |
|---|---|---|
config.diskLimit | int64 | Disk quota (GiB) |
config.diskDirectory | string | Data directory |
config.memoryLimit | int64 | Memory limit (MiB) |
config.cpuLimit | int64 | CPU limit (%) |
config.logLimit | int64 | Log size limit |
config.logDirectory | string | Log directory |
config.logFileCount | int64 | Rotated log files |
config.statusFrequency | float | Status interval |
config.changeFrequency | float | Change interval |
config.watchdogEnabled | bool | Watchdog |
config.logLevel | string | Log level |
config.pruningFrequency | float | Prune interval |
config.availableDiskThreshold | float | Disk threshold (%) |
config.timeZone | string | Timezone |
GPS and EdgeGuard
| Field | Type | Description |
|---|---|---|
config.gpsMode | string | For example auto or off |
config.gpsScanFrequency | float | GPS scan interval |
config.gpsDevice | string | GPS device |
config.edgeGuardFrequency | float | 0 disables. See EdgeGuard. |
Router
| Field | Type | Description |
|---|---|---|
config.upstreamRouters | []string | Upstream router node names. Resolved to UUIDs at deploy. |
| Field | Type | Default (edge) | Description |
|---|---|---|---|
config.routerConfig.routerMode | string | edge | edge, interior, or none |
config.routerConfig.messagingPort | int | 5671 | Messaging port |
config.routerConfig.edgeRouterPort | int | Interior only | |
config.routerConfig.interRouterPort | int | Interior only |
NATS
| Field | Type | Description |
|---|---|---|
config.upstreamNatsServers | []string | NATS server node names. Resolved to UUIDs at deploy. |
| Field | Type | Default (edge) | Description |
|---|---|---|---|
config.natsConfig.natsMode | string | leaf | leaf, server, or none |
config.natsConfig.natsServerPort | int | 4222 | Client port |
config.natsConfig.natsLeafPort | int | 7422 | Leaf port |
config.natsConfig.natsClusterPort | int | Server only | |
config.natsConfig.natsMqttPort | int | 8883 | MQTT |
config.natsConfig.natsHttpPort | int | 8222 | Monitoring HTTP |
config.natsConfig.jsStorageSize | string | 10G | JetStream storage |
config.natsConfig.jsMemoryStoreSize | string | 1G | JetStream memory |
Defaults, validation, and deploy processing match Agent fields.
configure agent
Not supported for LocalAgent. The SSH configure command applies to remote nodes only. See Lifecycle.