Skip to content

Add types and providers for Pulpcore RPM resources - #408

Open
alexjfisher wants to merge 1 commit into
theforeman:masterfrom
alexjfisher:pulpcore_types
Open

alexjfisher wants to merge 1 commit into
theforeman:masterfrom
alexjfisher:pulpcore_types

Conversation

@alexjfisher

Copy link
Copy Markdown
Contributor

Added types for managing RPM 'remotes', 'repositories' and 'distributions' resources using the pulp CLI.

Providers are layered so the common logic can be shared and the CLI implementation swapped later, (with perhaps direct calls to the REST API, or the autogenerated ruby bindings??)

  • A grandparent provider holds the lifecycle/prefetch/flush mechanics, the property getter/setter macros, and the href->name lookup.
  • A per-resource parent maps the Pulp API hash to Puppet properties.
  • A CLI mixin shells out to pulp and parses its JSON responses.
  • A concrete cli provider wires them together.

Coverage is intentionally partial, starting with the properties I needed today. Adding any additional properties should be fairly straightforward.

Attribution: The type and provider implementation is my own work. The unit tests were largely drafted with help from ChatGPT. The code review and the resulting cleanup refactors were co-authored with Claude, (which also helped refine the tests).

Added types for managing RPM 'remotes', 'repositories' and 'distributions'
resources using the `pulp` CLI.

Providers are layered so the common logic can be shared and the CLI
implementation swapped later, (with perhaps direct calls to the REST API, or
the autogenerated ruby bindings??)

* A grandparent provider holds the lifecycle/prefetch/flush mechanics, the
property getter/setter macros, and the href->name lookup.
* A per-resource parent maps the Pulp API hash to Puppet properties.
* A CLI mixin shells out to `pulp` and parses its JSON responses.
* A concrete `cli` provider wires them together.

Coverage is intentionally partial, starting with the properties I needed today.
Adding any additional properties should be fairly straightforward.

Attribution: The type and provider implementation is my own work. The unit
tests were largely drafted with help from ChatGPT. The code review and the
resulting cleanup refactors were co-authored with Claude, (which also helped
refine the tests).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@alexjfisher

Copy link
Copy Markdown
Contributor Author

@ekohl Does this look ok to you? I purposefully made sure the type names didn't clash with the ones someone else had written here #375 (comment).

Shame they didn't make theirs public, but it at least shows there might be an audience for such types and it's not just me!

@alexjfisher
alexjfisher requested a review from evgeni July 28, 2026 13:32
@alexjfisher

Copy link
Copy Markdown
Contributor Author

@ekohl Any chance of getting this in?

@alexjfisher

Copy link
Copy Markdown
Contributor Author

@ehelms ? I'd love to get this into a release, (as well as some other module improvements I was working on but haven't submitted yet).

@ehelms

ehelms commented Sep 24, 2026

Copy link
Copy Markdown
Member

As a lot of our focus is on foremanctl, and we've always had a mixed sense of maintenance of Puppet types for managing resources of the services, I think as long as you are willing to maintain and support these I have no problems merging it.

@alexjfisher

Copy link
Copy Markdown
Contributor Author

As a lot of our focus is on foremanctl, and we've always had a mixed sense of maintenance of Puppet types for managing resources of the services, I think as long as you are willing to maintain and support these I have no problems merging it.

The types are independent from the rest of the module, so shouldn't cause any existing users issues. I'm happy to continue to submit enhancements/fixes and review any PRs that might come in for them. Do you want me to add a section to the README? We could perhaps even mark them as 'experimental' types if you'd like.

@ehelms

ehelms commented Sep 24, 2026

Copy link
Copy Markdown
Member

Do you want me to add a section to the README?

Yes please!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants