Skip to main content

@adam/cfgmgmt

v2026.03.30.1

SSH-based configuration management for Linux and macOS.

Manage remote systems over SSH using the check/apply pattern — every model is idempotent and reports whether resources are compliant, non-compliant, applied, or failed. Convergence failures propagate as step failures so workflow orchestration can detect and react to errors.

Includes 36 model types:

  • @adam/cfgmgmt/node — Gather system facts (OS, arch, package managers)
  • @adam/cfgmgmt/file — Create, update, or remove files
  • @adam/cfgmgmt/template — Render EJS templates and deploy to remote hosts. Uses <%= var %> for plain string interpolation (HTML escaping is disabled). Whitespace control: -%> strips the trailing newline (use on loop/conditional lines to avoid blank lines in output), <%_ %> strips leading whitespace, _%> strips all trailing whitespace.
  • @adam/cfgmgmt/directory — Create or remove directories
  • @adam/cfgmgmt/link — Manage symbolic links
  • @adam/cfgmgmt/line — Edit individual lines in files using regex matching
  • @adam/cfgmgmt/exec — Run commands with onlyIf/notIf guards
  • @adam/cfgmgmt/systemd — Manage systemd services and unit files
  • @adam/cfgmgmt/dnf — Manage packages on Fedora/RHEL (with version pinning)
  • @adam/cfgmgmt/apt — Manage packages on Debian/Ubuntu (with version pinning)
  • @adam/cfgmgmt/pacman — Manage packages on Arch Linux
  • @adam/cfgmgmt/homebrew — Manage packages on macOS
  • @adam/cfgmgmt/apt_repository — Manage apt sources and GPG keys
  • @adam/cfgmgmt/dnf_repository — Manage dnf/yum repository files
  • @adam/cfgmgmt/hostname — Set system hostname
  • @adam/cfgmgmt/timezone — Set system timezone
  • @adam/cfgmgmt/user — Manage system users
  • @adam/cfgmgmt/group — Manage system groups
  • @adam/cfgmgmt/authorized_key — Manage SSH authorized keys
  • @adam/cfgmgmt/host_entry — Manage /etc/hosts entries
  • @adam/cfgmgmt/sysctl — Manage kernel parameters
  • @adam/cfgmgmt/kernel_module — Load/unload kernel modules with persistence
  • @adam/cfgmgmt/cron — Manage cron jobs
  • @adam/cfgmgmt/mount — Manage filesystem mounts and fstab
  • @adam/cfgmgmt/firewall — Manage firewall rules (ufw/firewalld/iptables)
  • @adam/cfgmgmt/selinux — Manage SELinux mode and booleans
  • @adam/cfgmgmt/docker_image — Manage Docker images
  • @adam/cfgmgmt/docker_container — Manage Docker containers
  • @adam/cfgmgmt/git — Manage git repository checkouts
  • @adam/cfgmgmt/archive — Extract archives idempotently
  • @adam/cfgmgmt/copy_file — Copy a local file to remote hosts via SCP
  • @adam/cfgmgmt/fetch — Download files from URLs with checksum verification
  • @adam/cfgmgmt/reboot — Reboot hosts and wait for SSH reconnection
  • @adam/cfgmgmt/debug_exec — Run a command on a remote host and capture stdout, stderr, and exit code as data
  • @adam/cfgmgmt/debug_file — Fetch a remote file's content and store it as data
  • @adam/cfgmgmt/certificate — Deploy SSL/TLS certificates with validation

Every model is a factory across hosts — a single definition can target multiple hosts via workflow forEach, with per-host data stored separately.

Connections are multiplexed via OpenSSH ControlMaster sockets. All models (except node and homebrew) support sudo privilege escalation.

Labels

cfgmgmtsshlinuxmacosfedoradebianubuntuarchlinux

Contents

Quality score

How well-documented and verifiable this extension is.

Not yet scored.

A score will be generated the next time this extension is published. The owner can also trigger scoring manually.

Install

$ swamp extension pull @adam/cfgmgmt

@adam/cfgmgmt/nodev2026.03.18.1adam/cfgmgmt/node.ts

Global Arguments

ArgumentTypeDescription
hostnamestringHostname or IP of the remote node
sshUserstringSSH username
sshPortnumberSSH port
sshIdentityFile?stringPath to SSH private key
gatherSSH to node and gather system facts

Resources

info(infinite)— Facts gathered from the node
@adam/cfgmgmt/filev2026.03.18.1adam/cfgmgmt/file.ts

Global Arguments

ArgumentTypeDescription
pathstringAbsolute path of the file on the remote node
ensureenumWhether file should be present or absent
content?stringDesired file content
owner?stringFile owner
group?stringFile group
mode?stringFile permissions in octal (e.g. 0644)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if file matches desired state (dry-run)
applyApply desired file state to the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/templatev2026.03.18.1adam/cfgmgmt/template.ts

Global Arguments

ArgumentTypeDescription
pathstringAbsolute path of the file on the remote node
ensureenumWhether file should be present or absent
template?stringEJS template string
variablesrecordTemplate variables passed to EJS
owner?stringFile owner
group?stringFile group
mode?stringFile permissions in octal (e.g. 0644)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if rendered template matches desired state (dry-run)
applyRender template and apply desired file state to the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/directoryv2026.03.18.1adam/cfgmgmt/directory.ts

Global Arguments

ArgumentTypeDescription
pathstringAbsolute path of the directory
ensureenumWhether directory should be present or absent
owner?stringDirectory owner
group?stringDirectory group
mode?stringDirectory permissions in octal (e.g. 0755)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if directory matches desired state (dry-run)
applyApply desired directory state to the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/linkv2026.03.18.1adam/cfgmgmt/link.ts

Global Arguments

ArgumentTypeDescription
pathstringPath where the symlink should exist
ensureenumWhether symlink should be present or absent
target?stringTarget the symlink should point to
owner?stringSymlink owner
group?stringSymlink group
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if symlink matches desired state (dry-run)
applyApply desired symlink state to the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/execv2026.03.18.1adam/cfgmgmt/exec.ts

Global Arguments

ArgumentTypeDescription
commandstringThe command to execute
onlyIf?stringGuard: only run if this command exits 0
notIf?stringGuard: skip if this command exits 0
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkDry-run: validate SSH connectivity without executing the command
applyExecute the command on the remote node via SSH

Resources

state(infinite)— Result of command execution
@adam/cfgmgmt/systemdv2026.03.18.1adam/cfgmgmt/systemd.ts

Global Arguments

ArgumentTypeDescription
servicestringService name (e.g. nginx or nginx.service)
ensure?enumWhether service should be running or stopped
enabled?booleanWhether the service should be enabled at boot
unitFile?stringFull content of a systemd unit file to deploy
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if service matches desired state (dry-run)
applyApply desired service state to the remote node
restartRestart the service (imperative, always runs)
logsFetch recent journal logs for the service
ArgumentTypeDescription
linesnumberNumber of journal lines to fetch

Resources

state(infinite)— Result of check or apply operation
logs(infinite)— Journal log output for the service
@adam/cfgmgmt/dnfv2026.03.18.1adam/cfgmgmt/dnf.ts

Global Arguments

ArgumentTypeDescription
packagesarrayPackage names to manage
ensureenumWhether packages should be present or absent
version?stringPin to a specific package version (e.g. 1.24.0-1.el9). Applies to all packages in the list.
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if packages match desired state without modifying
applyInstall or remove packages based on ensure state
refreshRefresh the dnf package metadata
upgradeUpgrade all installed packages
listList all installed packages

Resources

state(infinite)— Package operation state
installed(infinite)— All installed packages
@adam/cfgmgmt/aptv2026.03.18.1adam/cfgmgmt/apt.ts

Global Arguments

ArgumentTypeDescription
packagesarrayPackage names to manage
ensureenumWhether packages should be present or absent
version?stringPin to a specific package version (e.g. 1.24.0-1ubuntu1). Applies to all packages in the list.
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if packages match desired state without modifying
applyInstall or remove packages based on ensure state
refreshUpdate the apt package database
upgradeUpgrade all installed packages
listList all installed packages

Resources

state(infinite)— Package operation state
installed(infinite)— All installed packages
@adam/cfgmgmt/pacmanv2026.03.18.1adam/cfgmgmt/pacman.ts

Global Arguments

ArgumentTypeDescription
packagesarrayPackage names to manage
ensureenumWhether packages should be present or absent
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if packages match desired state without modifying
applyInstall or remove packages based on ensure state
refreshUpdate the pacman package database
upgradeUpgrade all installed packages
listList all installed packages

Resources

state(infinite)— Package operation state
installed(infinite)— All installed packages
@adam/cfgmgmt/homebrewv2026.03.18.1adam/cfgmgmt/homebrew.ts

Global Arguments

ArgumentTypeDescription
packagesarrayFormula names to manage
ensureenumWhether packages should be present or absent
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanAccepted but ignored (brew forbids root)
becomeUserstringAccepted but ignored
becomePassword?stringAccepted but ignored
checkCheck if packages match desired state without modifying
applyInstall or remove packages based on ensure state
refreshUpdate the homebrew package database
upgradeUpgrade all installed packages
listList all installed packages

Resources

state(infinite)— Package operation state
installed(infinite)— All installed packages
@adam/cfgmgmt/hostnamev2026.03.18.1adam/cfgmgmt/hostname.ts

Global Arguments

ArgumentTypeDescription
namestringDesired system hostname
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if hostname matches desired state (dry-run)
applySet the system hostname to the desired value

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/timezonev2026.03.18.1adam/cfgmgmt/timezone.ts

Global Arguments

ArgumentTypeDescription
timezonestringDesired IANA timezone (e.g. America/New_York)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if timezone matches desired state (dry-run)
applySet the system timezone to the desired value

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/userv2026.03.18.1adam/cfgmgmt/user.ts

Global Arguments

ArgumentTypeDescription
usernamestringUsername to manage
ensureenumWhether user should be present or absent
uid?numberDesired UID
gid?numberDesired primary GID
groups?arraySupplementary groups
home?stringHome directory path
shell?stringLogin shell
system?booleanCreate as system user
managehomebooleanManage home directory (create with useradd -m, remove with userdel -r)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if user matches desired state (dry-run)
applyCreate, modify, or remove a system user

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/groupv2026.03.18.1adam/cfgmgmt/group.ts

Global Arguments

ArgumentTypeDescription
groupnamestringGroup name to manage
ensureenumWhether group should be present or absent
gid?numberDesired GID
members?arrayGroup members
system?booleanCreate as system group
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if group matches desired state (dry-run)
applyCreate, modify, or remove a system group

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/authorized_keyv2026.03.18.1adam/cfgmgmt/authorized_key.ts

Global Arguments

ArgumentTypeDescription
userstringUser whose authorized_keys file to manage
keystringFull SSH public key line
ensureenumWhether the key should be present or absent
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if SSH authorized key matches desired state (dry-run)
applyAdd or remove an SSH public key from a user's authorized_keys

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/host_entryv2026.03.18.1adam/cfgmgmt/host_entry.ts

Global Arguments

ArgumentTypeDescription
hostnamestringPrimary hostname for the /etc/hosts entry
ipstringIP address for the entry
aliases?arrayAdditional hostname aliases
ensureenumWhether the entry should be present or absent
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if /etc/hosts entry matches desired state (dry-run)
applyAdd, update, or remove an /etc/hosts entry

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/sysctlv2026.03.18.1adam/cfgmgmt/sysctl.ts

Global Arguments

ArgumentTypeDescription
keystringSysctl key (e.g. net.ipv4.ip_forward)
valuestringDesired value
ensureenumWhether the sysctl parameter should be present or absent
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if sysctl parameter matches desired state (dry-run)
applySet or remove a sysctl kernel parameter

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/cronv2026.03.18.1adam/cfgmgmt/cron.ts

Global Arguments

ArgumentTypeDescription
namestringUnique identifier for this cron job
ensureenumWhether the cron job should be present or absent
commandstringCommand to run
userstringUser whose crontab to manage
minutestringMinute (0-59 or *)
hourstringHour (0-23 or *)
daystringDay of month (1-31 or *)
monthstringMonth (1-12 or *)
weekdaystringDay of week (0-7 or *)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if cron job matches desired state (dry-run)
applyAdd, update, or remove a cron job

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/mountv2026.03.18.1adam/cfgmgmt/mount.ts

Global Arguments

ArgumentTypeDescription
pathstringMount point path
devicestringDevice or remote filesystem to mount
fstypestringFilesystem type (e.g. ext4, nfs, tmpfs)
optionsstringMount options (e.g. defaults,noatime)
ensureenumDesired mount state: mounted=fstab+mounted, unmounted=fstab+not mounted, present=fstab only, absent=remove fstab+unmount
dumpnumberfstab dump field
passnumberfstab pass field
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if mount matches desired state (dry-run)
applyManage filesystem mount and fstab entry

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/firewallv2026.03.18.1adam/cfgmgmt/firewall.ts

Global Arguments

ArgumentTypeDescription
portnumberPort number
protocolenumProtocol (tcp or udp)
actionenumFirewall action for the rule
directionenumTraffic direction
source?stringSource CIDR (e.g. 10.0.0.0/8)
ensureenumWhether the rule should be present or absent
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if firewall rule matches desired state (dry-run)
applyAdd or remove a firewall rule

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/selinuxv2026.03.18.1adam/cfgmgmt/selinux.ts

Global Arguments

ArgumentTypeDescription
mode?enumDesired SELinux mode (mutually exclusive with boolean)
boolean?stringSELinux boolean name (mutually exclusive with mode)
booleanValue?enumDesired boolean value
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if SELinux matches desired state (dry-run)
applySet SELinux mode or boolean value

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/docker_imagev2026.03.18.1adam/cfgmgmt/docker_image.ts

Global Arguments

ArgumentTypeDescription
imagestringDocker image name with tag (e.g. nginx:1.25)
ensureenumWhether image should be present or absent
forcebooleanForce pull even if image is already present
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if Docker image matches desired state (dry-run)
applyPull or remove a Docker image
pruneRemove dangling Docker images (imperative, always runs)

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/docker_containerv2026.03.18.1adam/cfgmgmt/docker_container.ts

Global Arguments

ArgumentTypeDescription
namestringContainer name
imagestringDocker image (e.g. nginx:1.25)
ensureenumDesired container state
ports?arrayPort mappings (e.g. ["8080:80", "443:443"])
environment?arrayEnvironment variables (e.g. ["FOO=bar"])
volumes?arrayVolume mounts (e.g. ["/host:/container"])
restart?enumRestart policy
command?stringOverride container command
network?stringDocker network to connect to
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if Docker container matches desired state (dry-run)
applyCreate, start, stop, or remove a Docker container
logsFetch recent container logs
ArgumentTypeDescription
linesnumberNumber of log lines to fetch
restartRestart the container (imperative, always runs)

Resources

state(infinite)— Result of check or apply operation
logs(infinite)— Container log output
@adam/cfgmgmt/gitv2026.03.18.1adam/cfgmgmt/git.ts

Global Arguments

ArgumentTypeDescription
pathstringLocal path for the repository
repostringGit repository URL
revisionstringBranch, tag, or commit hash (default HEAD = default branch)
ensureenumWhether the repository should be present or absent
depth?numberShallow clone depth
owner?stringRepository owner
group?stringRepository group
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if git repository matches desired state (dry-run)
applyClone, update, or remove a git repository

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/archivev2026.03.18.1adam/cfgmgmt/archive.ts

Global Arguments

ArgumentTypeDescription
sourcestringPath to the archive file on the remote node
deststringExtraction destination directory
formatenumArchive format (auto-detected from extension by default)
creates?stringIdempotency guard: skip extraction if this path exists
owner?stringOwner for extracted files
group?stringGroup for extracted files
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if archive has been extracted (dry-run)
applyExtract an archive to the destination directory

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/linev2026.03.18.1adam/cfgmgmt/line.ts

Global Arguments

ArgumentTypeDescription
pathstringAbsolute path of the file on the remote node
regexpstringRegular expression to match the target line. First match is used.
line?stringThe line to insert or replace. Required when ensure is present.
ensureenumWhether the matching line should be present or absent
insertAfter?stringRegex pattern — insert the line after the last match of this pattern if regexp has no match. Defaults to EOF.
insertBefore?stringRegex pattern — insert the line before the first match of this pattern if regexp has no match
createFilebooleanCreate the file if it does not exist (ensure=present only)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if the line matches desired state in the file (dry-run)
applyEnsure a line is present/absent in the file

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/copy_filev2026.03.27.1adam/cfgmgmt/copy_file.ts

Global Arguments

ArgumentTypeDescription
sourcestringPath to the local source file. Resolved relative to the repository root if not absolute.
pathstringAbsolute path of the file on the remote node
ensureenumWhether file should be present or absent
owner?stringFile owner
group?stringFile group
mode?stringFile permissions in octal (e.g. 0644)
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if remote file matches local source file (dry-run)
applyCopy local source file to the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/fetchv2026.03.18.1adam/cfgmgmt/fetch.ts

Global Arguments

ArgumentTypeDescription
urlstringURL to download
pathstringAbsolute path where the downloaded file should be placed on the remote node
checksum?stringExpected checksum of the file (e.g. sha256:abc123...). Used for idempotency.
checksumTypeenumChecksum algorithm to use (md5 is deprecated, prefer sha256)
owner?stringFile owner
group?stringFile group
mode?stringFile permissions in octal (e.g. 0755)
forcebooleanRe-download even if the file already exists and checksum matches
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if the file has been downloaded and matches expected state (dry-run)
applyDownload a file from a URL to the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/apt_repositoryv2026.03.18.1adam/cfgmgmt/apt_repository.ts

Global Arguments

ArgumentTypeDescription
namestringRepository identifier used for the .list/.sources filename (e.g. docker, nodesource)
ensureenumWhether the repository should be present or absent
uris?arrayRepository URIs (e.g. ['https://download.docker.com/linux/ubuntu']). For DEB822 format.
suites?arrayRepository suites (e.g. ['noble']). For DEB822 format.
components?arrayRepository components (e.g. ['stable']). For DEB822 format.
architectures?arrayArchitectures to enable (e.g. ['amd64']). For DEB822 format.
signedBy?stringPath to the GPG keyring file on the remote node (e.g. /usr/share/keyrings/docker.gpg)
gpgKeyUrl?stringURL to download the GPG key from. Will be dearmored and saved to signedBy path.
sourceLine?stringLegacy one-line format: 'deb [options] uri suite component...' — written to /etc/apt/sources.list.d/<name>.list. Mutually exclusive with uris/suites/components.
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if the apt repository is configured as desired (dry-run)
applyConfigure or remove an apt repository on the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/dnf_repositoryv2026.03.18.1adam/cfgmgmt/dnf_repository.ts

Global Arguments

ArgumentTypeDescription
namestringRepository ID used as the [section] name and .repo filename (e.g. docker-ce-stable)
ensureenumWhether the repository should be present or absent
description?stringHuman-readable repository name (e.g. 'Docker CE Stable')
baseurl?stringBase URL of the repository (e.g. https://download.docker.com/linux/fedora/$releasever/$basearch/stable)
metalink?stringMetalink URL (alternative to baseurl)
mirrorlist?stringMirror list URL (alternative to baseurl)
enabledbooleanWhether the repository is enabled
gpgcheckbooleanWhether GPG signature checking is enabled
gpgkey?stringURL of the GPG key for the repository (e.g. https://download.docker.com/linux/fedora/gpg)
sslverify?booleanWhether to verify SSL certificates
repo_gpgcheck?booleanWhether to verify repository metadata GPG signatures
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if the dnf repository is configured as desired (dry-run)
applyConfigure or remove a dnf/yum repository on the remote node

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/kernel_modulev2026.03.18.1adam/cfgmgmt/kernel_module.ts

Global Arguments

ArgumentTypeDescription
namestringKernel module name (e.g. br_netfilter, overlay)
ensureenumWhether the module should be loaded or unloaded
params?stringModule parameters (e.g. 'option1=value1 option2=value2')
persistbooleanPersist the module across reboots via /etc/modules-load.d/
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if the kernel module is loaded/persisted as desired (dry-run)
applyLoad or unload a kernel module and manage persistence

Resources

state(infinite)— Result of check or apply operation
@adam/cfgmgmt/rebootv2026.03.18.1adam/cfgmgmt/reboot.ts

Global Arguments

ArgumentTypeDescription
timeoutnumberMaximum seconds to wait for the host to come back after reboot
messagestringBroadcast message before reboot
testCommandstringCommand to run after reconnection to verify the host is healthy
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck is always non-compliant — reboot is an imperative action
applyReboot the remote host and wait for SSH to become available again

Resources

state(infinite)— Result of the reboot operation
@adam/cfgmgmt/debug_execv2026.03.27.1adam/cfgmgmt/debug_exec.ts

Global Arguments

ArgumentTypeDescription
commandstringThe command to execute on the remote host
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
runExecute the command on the remote host and capture output as data

Resources

state(infinite)— Output captured from remote command execution
@adam/cfgmgmt/debug_filev2026.03.27.1adam/cfgmgmt/debug_file.ts

Global Arguments

ArgumentTypeDescription
pathstringAbsolute path of the file to read on the remote node
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
runFetch the file content from the remote host and store it as data

Resources

state(infinite)— Content fetched from a remote file
@adam/cfgmgmt/certificatev2026.03.18.1adam/cfgmgmt/certificate.ts

Global Arguments

ArgumentTypeDescription
namestringCertificate name — used as a label in state output
certContentstringPEM-encoded certificate content
keyContentstringPEM-encoded private key content
chainContent?stringPEM-encoded certificate chain (intermediate + root CAs)
certPathstringAbsolute path for the certificate file on the remote node
keyPathstringAbsolute path for the private key file on the remote node
chainPath?stringAbsolute path for the chain file on the remote node
owner?stringOwner for all certificate files
group?stringGroup for all certificate files
certModestringPermissions for the certificate file
keyModestringPermissions for the private key file (default: restricted)
chainModestringPermissions for the chain file
validatebooleanValidate that the certificate and key match using openssl
nodeHoststringHostname or IP of the remote node
nodeUserstringSSH username
nodePortnumberSSH port
nodeIdentityFile?stringPath to SSH private key
becomebooleanEnable sudo privilege escalation
becomeUserstringUser to become via sudo
becomePassword?stringPassword for sudo -S
checkCheck if certificates are deployed and match desired state (dry-run)
applyDeploy certificate, key, and optional chain to the remote node

Resources

state(infinite)— Result of check or apply operation