Skip to content

Extension-level configuration to control which services are enabled #12764

@maxpain

Description

@maxpain

Problem

Extensions that ship multiple services (e.g., FRR with zebra, bgpd, bfdd, staticd, mgmtd) have no way to let users control which services should be started. All registered extension services start automatically when the extension is installed.

Currently, the only mechanism to delay service startup is configuration: true in the service's depends section, but this blocks Talos boot if no ExtensionServiceConfig is provided — making it unsuitable for optional services.

Use Case

FRR (Free Range Routing) provides ~15 routing daemons, but most users only need 2-3 of them (e.g., zebra + bgpd). Right now, the extension either:

  • Starts all daemons (wasteful, noisy logs)
  • Uses configuration: true to gate startup, but then blocks boot if the user doesn't configure every single daemon

Proposal

An extension-level configuration mechanism (as opposed to per-service ExtensionServiceConfig) that allows users to declare which services from a multi-service extension should be enabled.

For example, something like:

apiVersion: v1alpha1
kind: ExtensionConfig
name: frr
services:
  - mgmtd
  - zebra
  - bgpd

Or alternatively, a configuration: optional dependency that means "wait for config if it exists, but don't block boot if it doesn't":

depends:
  - configuration: optional

Context

This came up while developing the FRR extension (siderolabs/extensions#977). Related discussion in that PR with @smira and @dsseng.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions