- [X] QA'd all new/changed functionality manually Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.3 to 1.82.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc-go/releases">google.golang.org/grpc's releases</a>.</em></p> <blockquote> <h2>Release 1.82.1</h2> <h1>Security</h1> <ul> <li>server: Stop reading from the connection when flooded by HTTP/2 frames. The default value for this limit is 100 frames, excluding DATA and HEADERS, and may be changed by setting environment variable <code>GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT</code>.</li> <li>xds/rbac: Support <code>Metadata</code> and <code>RequestedServerName</code> permissions matcher fields. If present in a DENY rule, previously these would be ignored and fail-open.</li> <li>xds/rbac: Fix panic when parsing unsupported fields in <code>NotRule</code>/<code>NotId</code> permissions.</li> <li>xds/rbac: Support the deprecated <code>source_ip</code> principal identifier by treating it as equivalent to <code>direct_remote_ip</code>.</li> </ul> <h2>Release 1.82.0</h2> <h1>Behavior Changes</h1> <ul> <li>server: Remove support for <code>GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKING</code> environment varibale. Strict incoming RPC path validation (which has been the default since <code>v1.79.3</code>) can no longer be disabled. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9112">#9112</a>)</li> <li>transport: Add environment variable to change the default max header list size from <code>16MB</code> to <code>8KB</code>. This may be enabled by setting <code>GRPC_GO_EXPERIMENTAL_ENABLE_8KB_DEFAULT_HEADER_LIST_SIZE=true</code>. This will be enabled by default in a subsequent release. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9019">#9019</a>)</li> <li>balancer: Load Balancing policy registry is now case-sensitive. Set <code>GRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES=false</code> (and file an issue) to revert to case-insensitive behavior. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9017">#9017</a>)</li> </ul> <h1>New Features</h1> <ul> <li>experimental/stats: Expose a new API, <code>NewContextWithLabelCallback</code>, to register a callback that is invoked when telemetry labels are added. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8877">#8877</a>) <ul> <li>Special Thanks: <a href="https://github.com/seth-epps"><code>@seth-epps</code></a></li> </ul> </li> <li>client: Return a portion of the response body in the error message, when the client receives an unexpected non-gRPC HTTP response, to make debugging easier. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8929">#8929</a>) <ul> <li>Special Thanks: <a href="https://github.com/chengxilo"><code>@chengxilo</code></a></li> </ul> </li> <li>server: Add environment variable <code>GRPC_GO_SERVER_GOROUTINE_LABELS</code> that controls setting <code>runtime/pprof.Labels</code> on goroutines spawned by the server. Set <code>GRPC_GO_SERVER_GOROUTINE_LABELS=grpc.method=true</code> to add the <code>grpc.method</code> label on goroutines spawned to handle incoming requests. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9082">#9082</a>) <ul> <li>Special Thanks: <a href="https://github.com/dfinkel"><code>@dfinkel</code></a></li> </ul> </li> </ul> <h1>Bug Fixes</h1> <ul> <li>xds/server: Fix a memory leak of HTTP filter instances occurring when route configurations are updated in-place during a Route Discovery Service (RDS) update. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9138">#9138</a>)</li> <li>grpc: In the deprecated <code>gzip</code> Compressor (used via the deprecated <code>WithCompressor</code> dial option), enforce the <code>MaxRecvMsgSize</code> limit on the decompressed message buffer, preventing excessive memory allocation from highly compressed payloads. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9114">#9114</a>) <ul> <li>Special Thanks: <a href="https://github.com/evilgensec"><code>@evilgensec</code></a></li> </ul> </li> <li>stats/opentelemetry: Record retry attempts, <code>grpc.previous-rpc-attempts</code>, at the call level and not the attempt level. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8923">#8923</a>)</li> <li>encoding: Ensure <code>Close()</code> is always called on readers returned from <code>Compressor.Decompress</code> if possible. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9135">#9135</a>)</li> <li>channelz: Fix the <code>LastMessageSentTimestamp</code> and <code>LastMessageReceivedTimestamp</code> fields in <code>SocketMetrics</code> to ensure they contain correct timestamp values. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9109">#9109</a>)</li> </ul> <h2>Release 1.81.1</h2> <h1>Security</h1> <ul> <li>xds/rbac: Fix a potential authorization bypass caused by incorrectly falling through URI/DNS SANs to Subject Distinguished Name (DN) when matching the authenticated principal name. With this fix, only the first non-empty identity source will be used, as per <a href="https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md">gRFC A41</a>. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9111">#9111</a>) <ul> <li>Special Thanks: <a href="https://github.com/al4an444"><code>@al4an444</code></a></li> </ul> </li> </ul> <h1>Bug Fixes</h1> <ul> <li>otel: Segregate client and server RPC information used for metrics and traces, to avoid one overwriting the other. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9081">#9081</a>)</li> </ul> <h2>Release 1.81.0</h2> <h1>Behavior Changes</h1> <ul> <li>balancer/rls: Switch gauge metrics to asynchronous emission (once per collection cycle) to reduce telemetry noise and align with other gRPC language implementations. (<a href="https://redirect.github.com/grpc/grpc-go/issues/8808">#8808</a>)</li> </ul> <h1>Dependencies</h1> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/grpc/grpc-go/commit/ebd8f06a09426fbece97157c95c3917abff28f4e"><code>ebd8f06</code></a> Change version to 1.82.1 (<a href="https://redirect.github.com/grpc/grpc-go/issues/9238">#9238</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/4ea465d4ab98013f72a142fe0fc89c19770b2935"><code>4ea465d</code></a> Cherry-pick commits (<a href="https://redirect.github.com/grpc/grpc-go/issues/9236">#9236</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/9494a2cf32a0ec9d35420af401445ef3c9f66f05"><code>9494a2c</code></a> Change version to 1.82.1-dev (<a href="https://redirect.github.com/grpc/grpc-go/issues/9171">#9171</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/bd239854f0ab7f1ee63457d47f7c1d2675e1f736"><code>bd23985</code></a> Change version to 1.82.0 (<a href="https://redirect.github.com/grpc/grpc-go/issues/9170">#9170</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/0f3086db7a755b6af83a90809471dd7f645b345a"><code>0f3086d</code></a> Fix minor issues not covered by PR <a href="https://redirect.github.com/grpc/grpc-go/issues/9137">#9137</a> (<a href="https://redirect.github.com/grpc/grpc-go/issues/9147">#9147</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/fef07fbb2b94b668e8daca1f6b70433dcd36c1c8"><code>fef07fb</code></a> internal: Split v3procservicepb import into pb and grpc for extproc (<a href="https://redirect.github.com/grpc/grpc-go/issues/9163">#9163</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/91dd64f4b83cb5134e279d1126ebb1ccf47d4d31"><code>91dd64f</code></a> transport: surface subsequent data when receiving non-gRPC header (<a href="https://redirect.github.com/grpc/grpc-go/issues/8929">#8929</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/adc97de9521a9f377dab5e911039842dc4de23e5"><code>adc97de</code></a> test/kokoro: add config for regional-td test (<a href="https://redirect.github.com/grpc/grpc-go/issues/9158">#9158</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/57c9ff14e05b535ee6995ba49bc882b287a175de"><code>57c9ff1</code></a> xds: ensure full-string matching for RBAC Filter rules (<a href="https://redirect.github.com/grpc/grpc-go/issues/9148">#9148</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/b58f32d9ff07c612d64e677bd826bcbec88af9bd"><code>b58f32d</code></a> server: Set a pprof label on new stream goroutines (<a href="https://redirect.github.com/grpc/grpc-go/issues/9082">#9082</a>)</li> <li>Additional commits viewable in <a href="https://github.com/grpc/grpc-go/compare/v1.79.3...v1.82.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/fleetdm/fleet/network/alerts). </details> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Lucas Manuel Rodriguez <lucas@fleetdm.com>
dibble
⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣤⣤⠀⣀⣀⣀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⡆⠸⣿⣿⣿⣷⣶⣤⣄⣾⣷⡄⠀⠀⠀⠀⠀⠀
⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀
⠀⣤⣤⣤⣈⡉⠛⢿⣿⣿⣿⣿⣿⡆⢸⣿⣿⣿⣿⣿⣿⣿⣿⣧⣽⣿⣷⣄⠀⠀
⠀⢿⠿⣿⣿⣿⣷⣤⡈⢻⣿⣿⣿⣇⠈⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⡄⠀
⠀⠈⠀⢸⣿⣿⣿⣿⠇⠀⠛⠛⠛⠋⠀⢻⣿⣿⡟⢉⠀⠀⠈⠙⠛⠿⠏⣿⣷⠀
⠀⠀⢠⣿⣿⡿⠟⢁⡄⠀⠀⠀⠀⠀⠀⠈⣿⣿⡇⣾⡀⠀⠀⠀⠀⠀⠀⠸⠿⠀
⠀⠀⠸⣿⣿⠀⢸⣿⣇⠀⠀⠀⠀⠀⠀⠀⢹⣿⡇⠸⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠙⠛⠃⠀⠛⠛⠀⠀⠀⠀⠀⠀⠀⠘⠛⠛⠀⠙⠃⠀⠀⠀⠀⠀⠀⠀⠀
🌱 dibble — Fleet's seed slinger — Dibble the Tapir
A dibble (n.) is a pointed wooden tool for poking holes in soil and planting seeds. This dibble is a pointed CLI for poking holes in your Fleet server and planting test data.
dibble is the one-stop tool for populating a Fleet server with everything
you'd want for dev or testing — users, teams (fleets), policies, reports,
labels, scripts, MDM profiles, software, enroll secrets, certificate authorities,
and vulnerable software inventory.
Hosts are intentionally out of scope. Use cmd/osquery-perf
for those — duplicating its work here would be a waste of perfectly good seeds.
dibble hosts is a thin convenience around osquery-perf: it lists the fleets,
lets you pick one with a radio button, fetches that fleet's enroll secret, and
prints (or runs) the go run cmd/osquery-perf/agent.go ... invocation.
Ctrl-C is forwarded to the child so simulated hosts shut down cleanly.
Quickstart
# Build
make dibble # writes ./tools/dibble/dibble
# Run the wizard (recommended first time)
./tools/dibble/dibble
# Or skip the wizard and use flags
./tools/dibble/dibble all \
--fleet-url http://localhost:8080 \
--api-token "$FLEET_API_TOKEN"
The wizard asks for any missing config (Fleet URL, API token), offers to save
it to ~/.dibble.yaml, lets you pick a theme and which entities to seed, and
then plants the seeds.
Subcommands
| Command | What it plants |
|---|---|
dibble all |
Everything below, with idempotent defaults |
dibble users |
Themed users with rotating roles (observer → admin) |
dibble teams |
Teams (aka fleets) with themed names |
dibble policies |
Global + per-team policies, mixed platforms |
dibble reports |
Saved reports (formerly "queries"), various intervals |
dibble labels |
Dynamic, query-based labels |
dibble scripts |
Saved scripts (.sh, .ps1, .zsh) global + per-team |
dibble profiles |
Apple .mobileconfig + Windows .xml MDM profiles |
dibble software |
Upload custom installers (2-3 per ext) + add Fleet-maintained apps. Subcommands: all, custom, maintained. |
dibble enroll-secrets |
Per-team enroll secrets — the credential fleetd uses to join a team. Distinct from "Fleet secrets" (secret variables). Global enroll secret is left alone. |
dibble cas |
Certificate Authorities (placeholder for now) |
dibble vulns |
Vulnerable software, written directly to MySQL |
dibble activities |
Fake activity rows, written directly to MySQL — non-idempotent, marked with * |
dibble idp |
IDP accounts (mdm_idp_accounts) for seeded users + round-robin host assignments (host_mdm_idp_accounts), written directly to MySQL |
dibble hosts |
Radio-pick a fleet, fetch its enroll secret, and print or run the matching cmd/osquery-perf command (Ctrl-C forwarded) |
dibble ping |
Sanity-check --fleet-url and --api-token |
dibble version |
Print version + signature line |
Aliases: dibble fleets ↔ dibble teams, dibble queries ↔ dibble reports.
Configuration
Three layers, highest precedence first:
- CLI flags:
--fleet-url,--api-token,--theme,--insecure,--suffix,--dry-run,-v - Environment:
FLEET_URL,FLEET_API_TOKEN,DIBBLE_THEME - Config file:
~/.dibble.yaml(written by the wizard)
Example ~/.dibble.yaml:
fleet_url: https://localhost:8080
api_token: abc123...
theme: mix
insecure: true # set when targeting a Fleet with a self-signed cert
Pass
--insecure(or setinsecure: truein the config file) to skip TLS verification — same convention asfleetctl --insecure. The wizard offers this automatically when it can't validate the cert on first ping.
Re-seeding (avoiding "skipped" on repeat runs)
dibble is idempotent: a name like Heart of Gold exists in Fleet after your
first run, so the second dibble all reports 0 created, N skipped for
everything global (labels, policies, reports, …). To get fresh entries each
run, append a --suffix:
./tools/dibble/dibble all --suffix auto # random 4-char tag per run
./tools/dibble/dibble all --suffix demo2 # explicit tag — useful for reruns
Names become Heart of Gold (auto-b3f1), Towel readiness check (demo2),
etc. Emails get the suffix as a +tag so they remain unique and valid.
Themes
Each theme is a curated set of character names that get used for users, teams,
policies, software titles, labels, and scripts. Pick one with
--theme <name> or let mix interleave them all.
| Theme | Display |
|---|---|
mix (default) |
Interleave every theme |
hitchhikers |
Hitchhiker's Guide to the Galaxy |
goodplace |
The Good Place |
parksrec |
Parks and Recreation |
tng |
Star Trek: The Next Generation |
lotr |
The Lord of the Rings |
dbz |
Dragon Ball Z |
robin_williams |
Robin Williams characters |
ghibli |
Studio Ghibli |
cosmere |
Brandon Sanderson's Cosmere |
sailor_moon |
Sailor Moon |
Adding a theme: drop a new file in themes/ that calls Register(Theme{...})
from init(). The wizard, --theme flag, and mix blend pick it up automatically.
Legacy tools → dibble
These older tools are deprecated in favor of dibble but still on disk — each has a banner in its README pointing at the dibble equivalent. We'll remove them once nothing references them. Use dibble for new work.
| Old path | dibble equivalent |
|---|---|
tools/team-builder/ |
dibble teams --count N |
tools/loadtest/fleetd_labels/ |
dibble labels --count N |
tools/loadtest/scripts_and_profiles/ |
dibble scripts + dibble profiles |
tools/loadtest/unified_queue/ |
dibble software (enqueue path is a TODO) |
tools/mdm/apple/loadtest/ |
dibble teams + dibble profiles |
tools/software/vulnerabilities/seed_data/ |
dibble vulns --macos N --ubuntu N --windows N |
tools/software/vulnerabilities/performance_test/seeder/ |
dibble vulns --macos N --ubuntu N --windows N (bulk mode) |
tools/seed_data/queries/ |
dibble reports --count N |
Out-of-scope and not absorbed (those tools still live in tools/):
cmd/osquery-perf— hosts (intentionally not replicated).tools/loadtest/osquery— osqueryd CPU/mem profiling shell scripts.tools/mdm/assets— encrypted-asset export/import (backup, not seeding).tools/saml— SimpleSAMLPHP fixture for SSO testing.
Design notes & known TODOs
- API-first. Most seeders call the Fleet API as a bearer-authed client.
The exceptions are
dibble vulnsanddibble activities, which write directly to MySQL — Fleet has no "create vulnerability" or "create activity" endpoint by design. - Idempotent. Re-running
dibble allagainst an already-seeded Fleet reports "skipped" rather than failing. Exception:dibble activitiesis intentionally non-idempotent — every run inserts a fresh batch prefixed with*and tagged with the current run id, so seeded rows are obvious in the UI and don't conflate across runs. - Custom-package software upload uploads a curated set of installer
fixtures (
.pkg,.deb,.msi,.exe,.rpm,.tar.gz,.ipa) bundled into the dibble binary. The.msiand.exeslots use upstream-signed installers (python-manager, 7-Zip) so the Fleet osquery agent installer is never surfaced as a custom software item.vim.debis excluded for size. - Fleet-maintained apps are added via the catalog endpoint
(
/api/latest/fleet/software/fleet_maintained_apps) —dibble software maintainedPOSTs the first N entries the server returns. - Mock CA creation also isn't wired up — placeholder until a mock CA type lands in Fleet.
- Manual labels and hosts need a populated host inventory; dibble doesn't spin up hosts (see osquery-perf).
Contributing
dibble follows the standard Go project layout:
tools/dibble/
├── cmd/dibble/ # main entry point (just calls command.Execute)
├── pkg/
│ ├── command/ # cobra commands, client, wizard, logging
│ ├── seed/ # per-entity seed logic
│ └── themes/ # character/media datasets + tapir mascot
├── go.mod / go.sum # dibble has its own module
└── README.md
dibble is a standalone Go module (github.com/fleetdm/fleet/v4/tools/dibble)
so its dependencies don't bleed into the root Fleet go.mod.
- Build:
make dibblefrom the repo root, orgo build -o dibble ./cmd/dibblefromtools/dibble. - Tests:
cd tools/dibble && go test ./... - Lint:
cd tools/dibble && golangci-lint run(the repo-levelmake lint-go-incrementalskips this module).