rcon func on the instance command channel: WebSocket JSON WebRCON with Identifier correlation (skips chat/log noise frames) and full Valve Source RCON over TCP (auth, exec, multi-packet reassembly via empty probe, 1MiB cap). Protocol inferred from game, explicit kind override in [instance.rcon]. Always 127.0.0.1 — agent is co-located. Hardening from review: WebRCON password never interpolated into error contexts/logs (redacted URL); probe-tolerant termination — a quiet period after received data ends the response for servers that don't echo the probe (Soulmask conformance unverified), so data is never discarded on probe timeout. 13/13 tests green incl. mock Source-RCON server (auth/multi-packet/ errors) and mock WebRCON server (noise-frame skipping). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
57 lines
1.8 KiB
TOML
57 lines
1.8 KiB
TOML
# Corrosion Host Agent configuration
|
|
# Default location: /etc/corrosion/agent.toml (Linux)
|
|
# C:\ProgramData\Corrosion\agent.toml (Windows)
|
|
# Override with: corrosion-host-agent --config /path/to/agent.toml
|
|
#
|
|
# Secrets can come from the environment instead of this file:
|
|
# CORROSION_LICENSE_ID, CORROSION_NATS_URL, CORROSION_NATS_TOKEN
|
|
|
|
[agent]
|
|
license_id = "your-license-uuid"
|
|
nats_url = "nats://nats.corrosionmgmt.com:4222"
|
|
# nats_token = "set-me-or-use-CORROSION_NATS_TOKEN"
|
|
heartbeat_seconds = 60
|
|
log_level = "info"
|
|
|
|
# One agent supervises every game instance on this host.
|
|
# Each instance gets a stable id (lowercase letters, digits, '-', '_') that
|
|
# the panel uses to address it. Changing an id orphans its panel history.
|
|
|
|
[[instance]]
|
|
id = "rust-main"
|
|
game = "rust" # rust | conan | soulmask | dune
|
|
root = "/opt/rustserver"
|
|
label = "Main 2x Vanilla"
|
|
|
|
# RCON lets the panel send console commands to the running server.
|
|
# For rust the protocol is WebRCON (WebSocket JSON); for conan/soulmask it is
|
|
# Source RCON (Valve TCP binary). `kind` is optional — it is inferred from
|
|
# the game name when absent.
|
|
#
|
|
# The [instance.rcon] sub-table MUST immediately follow the [[instance]] entry
|
|
# it belongs to (standard TOML array-of-tables scoping rule).
|
|
[instance.rcon]
|
|
port = 28016
|
|
password = "changeme"
|
|
# kind = "webrcon" # explicit override; omit to infer from game
|
|
|
|
# [[instance]]
|
|
# id = "soulmask-main"
|
|
# game = "soulmask"
|
|
# root = "/opt/soulmask/main"
|
|
# label = "Cloud Mist Forest (cluster main)"
|
|
#
|
|
# [instance.rcon]
|
|
# port = 19000
|
|
# password = "changeme"
|
|
# # kind = "source" # inferred automatically for soulmask
|
|
|
|
[prober]
|
|
interval_seconds = 300
|
|
|
|
# Extra outbound TCP checks beyond the built-in defaults:
|
|
# [[prober.target]]
|
|
# name = "steam-cdn"
|
|
# host = "steamcdn-a.akamaihd.net"
|
|
# port = 443
|