Skip to content

settings

Everything that is not a machine. Nothing here is required: default_creds is needed only once some node labops manages has no creds of its own, and the dns and proxy blocks are subsystems you opt into — leaving one out simply means the matching commands have nothing to act on and say so.

Settings

Everything that is not a node: credentials, the secret store, and the optional DNS, proxy and target-set subsystems.

Nothing here is required. Leaving dns or proxy out does not disable a feature you were using — it means the corresponding commands have nothing to act on and say so, rather than guessing.

Key Type Default Description
default_creds Creds unset Credentials used for every node that does not carry its own creds. Required only when some node labops manages (os other than unmanaged) has no creds of its own — a render-only or DNS-only config never connects to anything and so needs none. YamlRoot enforces that, because it is the only place that can see both.
env_file path to a file unset The secret store labops reads API tokens from. Defaults to a .env next to the config file; set this to point elsewhere, relative to the config file or absolute. labops only ever reads it, and it is git-ignored.
dns Dns unset Local DNS, published to Pi-hole v6. Omit to leave the dns commands with nothing to do.
proxy Proxy unset The Caddy reverse proxy. Omit to leave the proxy commands with nothing to do; web_services entries are then tracked but not routed.
targets map of name → Selector empty Named, reusable selections for labops update <name> — the same four filters as the CLI options. Put the sweeps you run often here instead of retyping them.

Creds

SSH credentials, either as settings.default_creds or per node.

Exactly one auth method must be set — a password or a key, never both and never neither. An ambiguous pair is a validation error rather than a silent preference, because which one labops picked would only become visible when a connection failed.

Key Type Default Description
username string required The SSH user labops connects as.
password string unset Password authentication. Mutually exclusive with ssh_key_path. Note that some operations only work with a key, so labops warns when this is the only method available.
ssh_key_path path to a file unset Path to a private key. ~ is expanded. Mutually exclusive with password. The file must exist, so a typo fails at labops validate rather than at connection time.

Selector

Which nodes a command acts on. Every field empty means "no constraint".

AND across fields, OR within a field::

kind: [lxc], os: [debian]  ->  debian containers
tags: [prod, edge]         ->  tagged prod OR edge

A Pydantic model rather than a parsed string because it has two front doors that must agree: the labops update CLI options, and the reusable named sets under settings.targets. One model means one matcher, one set of error messages, and no grammar to keep in sync.

Key Type Default Description
kind list of host | vm | lxc empty Node classes to include: host, vm, lxc — the node's place in the tree. A single value may be written unquoted instead of as a list.
os list of debian | alpine | redhat | unmanaged empty Operating systems to include: debian, alpine, redhat, unmanaged.
tags list of string empty Match nodes carrying any of these tags. Tags are local to the node that declares them and are not inherited, so use under to sweep a subtree.
under list of string empty Node names. Matches each named node and everything below it, so this is how you select a whole Proxmox host with its guests. An unknown name is an error rather than an empty selection, which would look like a successful no-op.
exclude list of string empty Node names to exclude. Each named node and everything below it is removed after the positive filters have run. An unknown name is an error, same as under.