go-puppet-bolt

Puppet Bolt core in pure Go โ€” inventory, tasks, YAML and Puppet-language plans, and SSH / WinRM / local transports.

pure Go ยท zero cgo inventory v2 tasks YAML + .pp plans SSH / WinRM / local apply blocks executor target queries 100% coverage 6 arches + wasm
Documentation GitHub
Documentation (MkDocs Material + mike) License: BSD-3-Clause Go 1.26.4+ Coverage 100%

go-puppet-bolt is a pragmatic, pure-Go (CGO_ENABLED=0) port of the core of Puppet Bolt, the agentless orchestrator. It parses Bolt inventory, tasks and plans and runs them over pluggable transports โ€” with no Ruby runtime and no cgo, so it cross-compiles to every 64-bit Go target and WebAssembly and links into a static binary. Inventory v2 resolves effective config / facts / vars through the group hierarchy and selects targets by name, alias, group or glob; tasks validate arguments against declared parameter types; YAML plans run an ordered sequence of task / command / script / eval / plan / resources / message steps; Puppet-language (.pp) plans run through go-puppet/puppet with their plan functions dispatched to real targets; apply blocks compile a catalog and report; and an Executor runs work across targets โ€” over a host-local, a full SSH or a full WinRM transport โ€” into a ResultSet. Its non-stdlib dependencies are all pure Go. 100% coverage, six arches.

Inventory (v2) ready

Targets, nested groups, per-group / per-target config / facts / vars / features, effective-value resolution through the hierarchy (deep merge, closest group wins, target overrides all), and target selection by name / alias / group / glob (TargetsForQuery).

Tasks ready

Parses the Bolt task *.json metadata shape (typed parameters, input_method, supports_noop, implementations, files) and validates arguments against the declared parameter types.

YAML plans ready

plan.yaml parameters plus an ordered list of task / command / script / eval / plan / resources / message steps with targets, per-step parameters and a return expression, executed by a step runner.

Transports & executor ready

A Transport interface with a host-local LocalTransport (injectable CommandRunner seam), a full pure-Go SSH transport (SSHTransport, over golang.org/x/crypto/ssh) and a full pure-Go WinRM transport (WinRMTransport, WS-Management over net/http, with basic / negotiate (NTLM) / ssl auth); an Executor runs a command, script or task across targets into a ResultSet.

Puppet-language plans & apply ready

Puppet-language (.pp) plans run through go-puppet/puppet (RunPuppetPlan), with run_task / run_command / run_script / get_targets / apply dispatched to real targets; apply blocks and the resources step compile a catalog and report (ApplyCatalog). Remote resource enforcement (needs a Puppet agent), WinRM Kerberos/CredSSP and PuppetDB _plugin resolvers are documented boundaries.

The Bolt orchestration engine of the go-puppet-bolt org: inventory, task and plan (YAML and Puppet-language) parsing plus an executor over local, SSH and WinRM transports, in pure Go. Part of the pure-Go Puppet stack alongside go-facter, go-hiera, go-pcore and go-puppet.