Add pburl and pblastreport companion tools to the RPM #15

Merged
benvin merged 1 commits from benvin/pburl-pblastreport into main 2026-07-16 22:37:27 +10:00
Owner

Why

node-lookup output is handy for pivoting to Puppetboard, but there was no quick way to turn a list of hosts into Puppetboard node-page URLs, or to see when each host last ran Puppet. These two small tools close that gap and ship in the same RPM so they're available wherever node-lookup is.

Changes

  • Add pburl: reads hostnames from args or piped node-lookup output (first field of each line, de-duped) and prints <host> <puppetboard-node-page-url>.
  • Add pblastreport: prints <host>\t<last-report-time>\t<url> using report_timestamp from the PuppetDB v4 nodes endpoint. Supports --relative/-r (relative age) and --timezone/-z <IANA> (default: local timezone).
  • Add internal/puppet package shared by both tools: config load, PuppetDB nodes query, Puppetboard URL construction (<base>/node/<certname>), and no-TTY-safe stdin host reading.
  • Add puppetboard_url config key (env NODE_LOOKUP_PUPPETBOARD_URL, default https://puppetboard.k8s.syd1.au.unkin.net) to the shared config so config init/config show scaffold it for the whole tool family. node-lookup's own query behaviour is unchanged.
  • Build all three binaries individually (each is its own main package — a single go build ./... can't emit multiple mains) and generate per-binary bash/zsh/fish completions in the Makefile, build-rpm.sh, and nfpm spec.
  • Cross-compile and attach all three tools per os/arch in the release pipeline; extend .gitignore; go mod tidy promotes cobra/yaml to direct deps.
  • Document the tools, config key, and env var in AGENTS.md.

Testing

  • go test -race ./... passes (new tests cover config precedence, nodes endpoint derivation, host-page URLs, LookupNode, stdin host parsing, and the report-time formatting incl. timezone/relative/edge cases).
  • Built the RPM locally and confirmed it installs all 3 binaries + 9 completion files.
  • Smoke-tested both tools end-to-end against a mock PuppetDB (timezone conversion, relative time, and error handling all correct).

No cross-repo changes needed: the release reuses the existing default ServiceAccount and the artifactapi rpm-internal upload.

## Why `node-lookup` output is handy for pivoting to Puppetboard, but there was no quick way to turn a list of hosts into Puppetboard node-page URLs, or to see when each host last ran Puppet. These two small tools close that gap and ship in the **same RPM** so they're available wherever `node-lookup` is. ## Changes - Add **`pburl`**: reads hostnames from args or piped `node-lookup` output (first field of each line, de-duped) and prints `<host> <puppetboard-node-page-url>`. - Add **`pblastreport`**: prints `<host>\t<last-report-time>\t<url>` using `report_timestamp` from the PuppetDB v4 `nodes` endpoint. Supports `--relative`/`-r` (relative age) and `--timezone`/`-z <IANA>` (default: local timezone). - Add **`internal/puppet`** package shared by both tools: config load, PuppetDB `nodes` query, Puppetboard URL construction (`<base>/node/<certname>`), and no-TTY-safe stdin host reading. - Add **`puppetboard_url`** config key (env `NODE_LOOKUP_PUPPETBOARD_URL`, default `https://puppetboard.k8s.syd1.au.unkin.net`) to the shared config so `config init`/`config show` scaffold it for the whole tool family. `node-lookup`'s own query behaviour is unchanged. - Build all three binaries individually (each is its own `main` package — a single `go build ./...` can't emit multiple mains) and generate per-binary bash/zsh/fish completions in the Makefile, `build-rpm.sh`, and nfpm spec. - Cross-compile and attach all three tools per os/arch in the release pipeline; extend `.gitignore`; `go mod tidy` promotes cobra/yaml to direct deps. - Document the tools, config key, and env var in `AGENTS.md`. ## Testing - `go test -race ./...` passes (new tests cover config precedence, `nodes` endpoint derivation, host-page URLs, `LookupNode`, stdin host parsing, and the report-time formatting incl. timezone/relative/edge cases). - Built the RPM locally and confirmed it installs all 3 binaries + 9 completion files. - Smoke-tested both tools end-to-end against a mock PuppetDB (timezone conversion, relative time, and error handling all correct). No cross-repo changes needed: the release reuses the existing `default` ServiceAccount and the artifactapi `rpm-internal` upload.
unkinben added 1 commit 2026-07-16 22:31:46 +10:00
Add pburl and pblastreport companion tools to the RPM
ci/woodpecker/pr/build Pipeline was successful
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
8800d5ce35
node-lookup output is useful for pivoting to Puppetboard, but there was no
quick way to turn a list of hosts into Puppetboard node-page URLs or to see
when each host last ran Puppet. These two tools close that gap and ship in the
same RPM so they are available wherever node-lookup is.

- Add pburl: reads hostnames from args or piped node-lookup output and prints
  "<host> <puppetboard-node-page-url>".
- Add pblastreport: prints "<host>\t<last-report-time>\t<url>" using
  report_timestamp from the PuppetDB v4 nodes endpoint. Supports --relative/-r
  (relative age) and --timezone/-z <IANA> (default: local timezone).
- Add internal/puppet package shared by both tools: config load, PuppetDB
  nodes query, Puppetboard URL construction, and no-TTY-safe stdin host reading.
- Add puppetboard_url config key (env NODE_LOOKUP_PUPPETBOARD_URL) to the
  shared config so config init/show scaffold it for the whole tool family.
- Build all three binaries individually (each is its own main package) and
  generate per-binary bash/zsh/fish completions in the Makefile, build-rpm.sh,
  and nfpm spec; cross-compile and attach all three per os/arch in the release
  pipeline.
- Document the tools, config key, and env var in AGENTS.md.
benvin merged commit f296056360 into main 2026-07-16 22:37:27 +10:00
benvin deleted branch benvin/pburl-pblastreport 2026-07-16 22:37:27 +10:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unkin/node-lookup#15