Skip to content

feat(deploy): add remote_config_path to stock asap-otel-agent OpAMP blocks - #391

Merged
zzylol merged 1 commit into
mainfrom
feat/agent-config-remote-config-path-sweep
May 18, 2026
Merged

zzylol merged 1 commit into
mainfrom
feat/agent-config-remote-config-path-sweep

Conversation

@zzylol

@zzylol zzylol commented May 18, 2026

Copy link
Copy Markdown
Contributor

Summary

PR #383 (and #389 follow-up) added the RemoteConfigPath field to the patched opampextension: when set, the extension applies pushed AgentRemoteConfig by writing the YAML to disk and exiting, so a restart-policy-enabled supervisor brings the agent back with the new config. The mvp-smoke-test agent uses this field via its overlay-mounted agent.yaml, but the 13 stock agent yamls in deploy/mvp-singlenode/configs/asap-otel-agent-*.yaml still ship without it — so OpAMP-apply silently no-ops in stock single-node deploys.

This PR adds remote_config_path: /etc/otel/config.yaml (the same path the collector boots from via --config=/etc/otel/config.yaml, and the same convention the smoke-test uses) to the extensions.opamp: block of every stock yaml that already declares one.

Files touched (13)

All 13 stock asap-otel-agent-*.yaml files with an existing extensions.opamp: block:

  • asap-otel-agent-allsketches.yaml
  • asap-otel-agent-b0-prometheus.yaml
  • asap-otel-agent-b0-victoriametrics.yaml
  • asap-otel-agent-b1-serf-prometheus.yaml
  • asap-otel-agent-b3-delta-direct.yaml
  • asap-otel-agent-b5-gorilla-prometheus.yaml
  • asap-otel-agent-b5-gorilla-victoriametrics.yaml
  • asap-otel-agent-b6-asap-single-sketch.yaml
  • asap-otel-agent-b6-gorilla-s3.yaml
  • asap-otel-agent-cms-direct.yaml
  • asap-otel-agent-cs-direct.yaml
  • asap-otel-agent-hll-direct.yaml
  • asap-otel-agent-kll-direct.yaml

The 6 stock yamls WITHOUT an extensions.opamp: block (b0a-raw-stream, b0b-raw-batched, b2-full, b3-delta, b4-tunable, kafka-fragment) are intentionally left alone — adding remote_config_path would require also wiring up extensions: + service.extensions:, which is out of scope for this sweep.

Operational caveat (flagged inline in each yaml's comment)

The stock agents-N{1,10,100}.yml compose overlays mount /etc/otel/config.yaml read-only (:ro suffix on the bind mount) and do NOT set a restart policy on the agent service. As-shipped, the extension's disk-write will fail with EROFS and the agent process will exit without coming back.

To actually exercise OpAMP-apply persistence in a stock deploy, the operator must additionally:

  1. Drop :ro from the agent's config volume mount (so the opampextension can write back to the same path the collector boots from), and
  2. Add restart: unless-stopped (or equivalent) to the agent service so the container respawns after the extension exits.

The smoke-test's mvp-smoke-test/compose/smoke-overlay.yml does both via volumes: !override + restart: unless-stopped — that is the reference pattern. The compose-side wiring update is deferred to a follow-up PR so this change stays narrowly scoped to the agent yaml schema.

Test plan

  • All 13 modified files parse with python3 -c "import yaml; ..." (verified — every file parses with extensions.opamp.remote_config_path == "/etc/otel/config.yaml")
  • All 19 stock asap-otel-agent-*.yaml files parse (sanity)
  • The 6 yamls without an opamp block are unchanged (verified — only 13 files modified)
  • Operational follow-up tracked: update agents-N{1,10,100}.yml overlays to drop :ro + add restart: unless-stopped so OpAMP-apply persists end-to-end in stock deploys

🤖 Generated with Claude Code

…locks

PR #383 (and #389 follow-up) added the `RemoteConfigPath` field to the
patched opampextension: when set, the extension applies pushed
AgentRemoteConfig by writing the YAML to disk and exiting, so a
restart-policy-enabled supervisor (Docker `restart: unless-stopped`,
systemd, k8s) brings the agent back up with the new config. The
mvp-smoke-test agent uses this field via its overlay-mounted
`agent.yaml`, but the 13 stock agent yamls in
`deploy/mvp-singlenode/configs/asap-otel-agent-*.yaml` still ship
without it, so OpAMP-apply silently no-ops in stock single-node deploys
(the controller's push is received, the extension reports back, but
nothing is persisted across the implied restart — the next boot reloads
the same static bootstrap yaml).

This change adds `remote_config_path: /etc/otel/config.yaml` (the same
path the collector boots from via `--config=/etc/otel/config.yaml`, and
the same convention the smoke-test uses) to the `extensions.opamp:`
block of every stock yaml that already declares one.

Files touched (13):
  - asap-otel-agent-allsketches.yaml
  - asap-otel-agent-b0-prometheus.yaml
  - asap-otel-agent-b0-victoriametrics.yaml
  - asap-otel-agent-b1-serf-prometheus.yaml
  - asap-otel-agent-b3-delta-direct.yaml
  - asap-otel-agent-b5-gorilla-prometheus.yaml
  - asap-otel-agent-b5-gorilla-victoriametrics.yaml
  - asap-otel-agent-b6-asap-single-sketch.yaml
  - asap-otel-agent-b6-gorilla-s3.yaml
  - asap-otel-agent-cms-direct.yaml
  - asap-otel-agent-cs-direct.yaml
  - asap-otel-agent-hll-direct.yaml
  - asap-otel-agent-kll-direct.yaml

The 6 stock yamls WITHOUT an `extensions.opamp:` block
(`b0a-raw-stream`, `b0b-raw-batched`, `b2-full`, `b3-delta`,
`b4-tunable`, `kafka-fragment`) are intentionally left alone — adding
`remote_config_path` would require also wiring up `extensions:` +
`service.extensions:`, which is out of scope for this sweep.

OPERATIONAL CAVEAT (flagged inline + in each yaml's comment): the
stock `agents-N{1,10,100}.yml` compose overlays mount
`/etc/otel/config.yaml` read-only (`:ro` suffix on the bind mount) and
do NOT set a restart policy on the agent service. As-shipped, the
extension's disk-write will fail with EROFS and the agent process will
exit without coming back. To actually exercise OpAMP-apply persistence
in a stock deploy, the operator must additionally:

  1. Drop `:ro` from the agent's config volume mount (so the
     opampextension can write back to the same path the collector
     boots from), and
  2. Add `restart: unless-stopped` (or equivalent) to the agent
     service so the container respawns after the extension exits.

The smoke-test's `mvp-smoke-test/compose/smoke-overlay.yml` does both
via `volumes: !override` + `restart: unless-stopped` — that is the
reference pattern. The compose-side wiring update is deferred to a
follow-up so this PR stays narrowly scoped to the agent yaml schema.

YAML validity verified with `python3 -c "import yaml; ..."` over all
19 stock agent yamls; the 13 modified files parse with
`extensions.opamp.remote_config_path == "/etc/otel/config.yaml"`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@zzylol
zzylol merged commit 91dc62a into main May 18, 2026
@zzylol
zzylol deleted the feat/agent-config-remote-config-path-sweep branch July 17, 2026 20:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant