fix(cli): make the IPAM CLI plugin installable via datumctl#67
Merged
Conversation
`datumctl plugin install milo-os/ipam` failed with:
parse plugin manifest: json: cannot unmarshal string into Go struct
field PluginManifest.min_api_version of type int
The milo-ipam binary hand-rolled its own copy of datumctl's plugin
manifest struct and declared `min_api_version` as a string holding the
Kubernetes API group/version ("ipam.miloapis.com/v1alpha1"). datumctl's
contract defines `min_api_version` as an integer plugin-contract version,
so unmarshalling the emitted manifest failed and the plugin could not be
installed.
Adopt datumctl's plugin SDK instead of duplicating the contract:
- Build `plugin.Manifest` and serve it via `plugin.ServeManifest` in
main(), so the datumctl <-> plugin manifest contract is enforced by the
compiler and cannot drift. (The SDK is already a dependency, used by
transport.go and entitlement.go.)
- `min_api_version` is now the integer contract version (1); the IPAM API
group/version stays as a human-facing string shown by `version`.
- Drop the redundant `--plugin-manifest` cobra flag; the SDK intercepts
it before cobra runs.
Requires a patch release for the fix to reach `datumctl plugin install`,
which pulls the published binary.
auto-merge was automatically disabled
July 1, 2026 21:30
Pull request was converted to draft
privateip
approved these changes
Jul 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Impact
Installing the IPAM CLI plugin fails for everyone today:
Until this is fixed, no one can add
datumctl ipamto their CLI — pools and prefixes can't be managed from the command line at all.Cause
During install, datumctl reads a small manifest the plugin reports about itself. One field,
min_api_version, was being sent as text when datumctl expects a number, so the install aborts before the plugin is ever added.Fix
The plugin now produces its manifest from datumctl's official plugin SDK instead of a hand-maintained copy. The format matches what datumctl expects, and — because it's generated from the shared definition — it can't quietly drift out of sync again.
After this change,
datumctl plugin install milo-os/ipamsucceeds anddatumctl ipamis available.Shipping
The fix reaches users through a published build, so a patch release should follow merge. No change to the plugin catalog is required.
Related work
milo-ipamplugin and its manifest.datumctl plugin installacross platforms; this change completes that effort by making the published manifest actually parse.v0.3.0catalog entry (the build affected by this bug); the follow-up patch release will supersede it.