Skip to content

Provide a Vox Pupuli alternative to PDK #68

Open

Description

@rwaffen

We should provide for new and existing users of OpenVox an easy and approachable way to get started with a new module.

In the past there was the PDK, which may not be the best, but it was something.
Now we as Vox Pupuli should provide a better approach, which is also more manageable from the tech side.

Key point should be:

  • low effort for users
  • fancy tools, but also keep in mind strict environments
    • for example containers might be bad for high security, older or gov orgs
  • integrates well with our other tools
  • integrates maybe well with ci
    • this can maybe be outsourced to another tool like voxbox
  • dependencies should be easy manageable
  • maybe there is a way to bundle the dependencies and ship it as one package
  • reduce our own boilerplate even more

@binford2k mentioned cookycutter

PS.: feel free to updated, move, change this issue if it's not fitting anymore

Activity

  1. jstraw commented on May 20, 2025

    @jstraw

    most of this can be accomplished by wrapping bundle and modulesync.

    I'd say reuse pmt, but I don't particularly want to deal with go templates, I'd prefer we stick to erb or jinja2 and something easily compatible with system python or system ruby.

  2. binford2k commented on May 20, 2025

    @binford2k
    Contributor

    My big requirement is that it not be a massive monolith again. I don't care if we create a single entrypoint, but the various tools themselves need to be small and self-contained. The module code generator should not be the same thing as the spec runner. The developer UX should not be the same thing as what runs in CI. Adding a tool or feature to the devkit should not require understanding a complex indirector.

  3. jay7x commented on May 21, 2025

    @jay7x

    It'd be nice to have a tool, that bundles the Ruby and all the gems in it, so end user should not care about Ruby management (think about enterprise and compliance). Using containers is easy, but hard to negotiate with security teams in some environments. Not sure if it's possible to make PDK better with those restrictions in place..

  4. Ph0B1uS commented on May 22, 2025

    @Ph0B1uS

    PDK made the barrier of entry into module development significantly lower for me personally and I love the fact that it contains an easy way to set up new modules, classes and validate the code afterwards too.
    That being said I do think that the idea of NOT designing another monolith to take its place is a very good one, can't say that I have any ideas on how to maintain the ease of use when going for a more modularised approach though.

  5. logicminds commented on Jun 11, 2025

    @logicminds

    Many years ago before PDK was created I wrote puppet-retrospec which was famous for auto generating unit tests. It worked well for me but acted more like cookie cutter than PDK. This tool was a two part system that used a parent tool simply called retrospec with a plugin system.

    The idea was simple. Make the puppet module sexy with all the best practices by retrofitting it. Or start from scratch. At one point puppet-retrospec had more ways to create module components than PDK. But PDK was also about switching rubies and puppet versions which I found value in that. I eventually stopped development on retrospec because puppet 5 removed some features I used but it was the closest thing to PDK since it only focused on content generation.

    Modulesync solved a different problem in that it kept modules up2date and was also based on a template system. Did not work well with PDK templates.

    I was a big supporter of PDK. Even though it was similar to my tool, the ecosystem really needed a supported tool and I pushed it to all my clients because it really did ease the pain.

    A future tool should take all three methods into consideration as there are several phases of module development.

    1. New module creation
    2. Module Maintenance and features
    3. Retrofit old modules

    Of course we need an easy way to

    • test
    • validate
    • release
    • deploy
    • notify

    My thoughts are that since module sync is so pervasive and good already, a wrapper tool would be needed (as stated above). The retrospec framework I built could be that wrapper tool and it could be compiled into a "single binary" like pdk with some other ruby tooling as well to make it easy to get started. But are we not just re-inventing the same thing?

    My next question is:

    Would building an agentic service to create a scaffold that is described by the user via AI prompt be the next thing? Why scaffold when we can describe. But this is a whole new topic.

    Just an example: https://chatgpt.com/share/6848d9d8-f168-8004-851d-24119120827c

  6. jstraw commented on Jun 11, 2025

    @jstraw

    Please keep AI crap away from me. I don't want or need an LLM anywhere near a toolset that modifies things as root (even a few steps removed)

    I would prefer to do something like git where the subcommands are all their own binary (git-*) over a single binary.

    TThe developer UX should not be the same thing as what runs in CI. Adding a tool or feature to the devkit should not require understanding a complex indirector.

    I agree that the access point shouldn't be the same, but what it does should be as close to identical as possible. (Running tests in this tool should do the thing in the way that CI does it, so if you succeed one, you are sure that it will work in the other.

  7. jay7x commented on Jun 11, 2025

    @jay7x

    Running tests in this tool should do the thing in the way that CI does it, so if you succeed one, you are sure that it will work in the other

    That reminds me about cirrus-cli - a tool that allows you to run a Citrus CI/CD pipeline locally (in a container or a VM, as described in the pipeline config file). That's amazing experience, when you can just run the same pipeline steps locally. It's like a Makefile, but with every target isolated. But... it requires docker (didn't try with podman) :(

  8. tuxmea commented on Jun 11, 2025

    @tuxmea

    The new tool should be self containing, so it is easy to use in airgapped environments.

    Many of our customers don't allow internet access. The only way to get tests working at the moment: place the pdk package on a local mirror.
    The new package should have everything it needs to be able to run without internet access.

  9. jstraw commented on Jun 14, 2025

    @jstraw

    I am fine with targetting airgap, but I think that's a secondary goal. Lets get a working system (knowing we want to support airgap) then add the airgap capability.

    If there's a local gem mirror, is that still count as an airgap?

  10. tuxmea commented on Jun 16, 2025

    @tuxmea

    If there's a local gem mirror, is that still count as an airgap?

    Any local repo is considered to be air gapped.
    It is more a question how to transfer the gems into the environment.

    The most simple (and already used) way is containers (e.g. voxbox already is on a local registry at several airgapped customers).

  11. binford2k commented on Jun 17, 2025

    @binford2k
    Contributor

    @jstraw what I meant about developer UX vs. CI wasn't the tests that were run, it's the interface. For example, some early versions of the PDK were famous for crapping out thousands of lines of

    |
    \
    -
    /
    |
    \
    -
    /
    

    because they neglected to plan for CI usage and it tried to render a spinner into the logs. And at the same time, we don't want local developer usage to spit out GitHub CI check annotations to your console while running rake spec.

  12. binford2k commented on Jun 17, 2025

    @binford2k
    Contributor

    The new tool should be self containing, so it is easy to use in airgapped environments.

    Rather than making the tool itself fully self-contained, can we build another tool(s) to fit into the suite that would let users manage their own offline cache(s)? Whether that's eg containers or RVM gemsets or artifactory mirrors is open for interpretation.

  13. rwaffen commented on Jun 18, 2025

    @rwaffen
    MemberAuthor

    something like pre-commit, where you can add repos with custom/3rd party/local hooks?

  14. silug commented on Jul 15, 2025

    @silug

    For reference, I was just reminded of a feature of pdk that I use: pdk build. I'm sure there are myriad other ways to build a module, but I do like the simplicity of being able to specify files to ignore in .pdkignore (which works like .gitignore), and the pdk gem makes it easy to run pdk build from Ruby code.

  15. jokreliable commented on Aug 18, 2025

    @jokreliable

    I am interested in helping with docs/guides/tutorials/references.

    my personal usage is just as a helping tool for creating modules/classes/etc and to run unit tests locally (and in CI). It would be nice to have something that also handles other kings of tests (maybe relying on beaker for that specifically).

  16. krisavi commented on Jan 5, 2026

    @krisavi

    PDK also had integration to the vscode as extension. It provides simple auto-completion there.

    Basically some alternative to https://puppet-vscode.github.io/ that doesn't need pdk would be good for users. If in the background pulls multiple smaller modules or one monolithic thing doesn't even matter that much.

    Generally it is more required to simplify entry into developing puppet modules. In current form it seems to be something that only people familiar with puppet can easily do. For new people it seems quite complicated to get into development.

  17. jay7x commented on Jan 5, 2026

    @jay7x

    @krisavi You don't need PDK for this. The extension can use puppet agent instead. Click in the status bar, in very right corner, just before the "bell" icon. I guess you should have PDK there. Though, you should be able to select Puppet in the drop-down menu after as long as you have Puppet/OpenVox agent installed.

  18. nsballmann commented on Jan 13, 2026

    @nsballmann

    This seems to become more important as Perforce decided to not publicly release PDK anymore.

    Last Open Source release of PDK was 3.4.0:

    But there were PDK releases since:

    But to quote https://help.puppet.com/pdk/current/topics/pdk_install.htm:

    To download and install PDK, which is stored in a protected repository, you must authenticate using either your Puppet Core or Puppet Enterprise (PE) credentials.

  19. avitacco commented on Mar 5, 2026

    @avitacco

    I'm not sure if it is of interest to the community at large, but I've started working on a tool I call "hammer" (horrible name, I'll admit). It is written in Go and is meant to replace pdk for some functionality, specifically pdk new [...], pdk build, and pdk release.

    The plan is to embed default templates in the binary with an option to use externally defined templates as well.

    Being written in Go, replicating pdk validate, pdk test unit, and litmus functionality will be challenging. If I can find an easy way to accomplish it, I might try to add that later.

  20. corporate-gadfly commented on Mar 5, 2026

    @corporate-gadfly

    hammer is also the CLI on foreman, so it will be very hard to disambiguate (given the proxmity of the two projects).

  21. avitacco commented on Mar 5, 2026

    @avitacco

    Ahhh crap, I was hoping to find something that wasn't like go-pkd. I suspected hammer was taken by something else in the ecosystem, I'll have to rethink it. I'm open to suggestions :-).

    Edit: would something like voxdk be too on the nose?

  22. jay7x commented on Mar 6, 2026

    @jay7x

    You may want to check pct made (and deprecated) by perforce while ago. I did a refresh of it here: https://github.com/jay7x/pct.

  23. logicminds commented on Mar 6, 2026

    @logicminds

    Looks similar to what I created https://github.com/nwops/retrospec. These are all static file generators based on templates. Which only solves some of the problem. If I had to do this again I would just pick a compiled language and shell out to ruby when needed. However, issue is trying to solve an opinionated workflow problem which provides shortcuts for users. Creating the path of least resistance for anyone writing a module or interact with the ecosystem.

  24. krisavi commented on Mar 6, 2026

    @krisavi

    @krisavi You don't need PDK for this. The extension can use puppet agent instead. Click in the status bar, in very right corner, just before the "bell" icon. I guess you should have PDK there. Though, you should be able to select Puppet in the drop-down menu after as long as you have Puppet/OpenVox agent installed.

    Unfortunately you do need it... For me it worked on my old laptop since I had PDK downloaded and installed when it was still available and the plugin still functions. PDK provided linting function. Agent itself doesn't provide much for the extension. On new laptop I haven't been able to get it working.

    NeoVim and Mason are struggling to install puppet language highlighting as well. Update at least didn't work and had to manually symlink some of the binaries towards PDK that was installed via homebrew.

  25. nsballmann commented on Mar 6, 2026

    @nsballmann

    For a new name, what speaks against ovdk? OpenVox Development Kit? Maybe, reserving the name for an actual fork of pdk (if possible due to licensing)?

  26. avitacco commented on Mar 6, 2026

    @avitacco

    For a new name, what speaks against ovdk? OpenVox Development Kit? Maybe, reserving the name for an actual fork of pdk (if possible due to licensing)?

    Exactly that, as this is my personal project, it feels like flag planting to name it ovdk. I don't want to hijack this thread further with the discussion of my project's name; there's an issue for it in my repo all are welcome to participate there.

  27. nsballmann commented on Mar 6, 2026

    @nsballmann

    For a new name, what speaks against ovdk? OpenVox Development Kit? Maybe, reserving the name for an actual fork of pdk (if possible due to licensing)?

    Exactly that, as this is my personal project, it feels like flag planting to name it ovdk. I don't want to hijack this thread further with the discussion of my project's name; there's an issue for it in my repo all are welcome to participate there.

    No worries, I consider my comment more of a general question/remark for the original issue.

  28. cvquesty commented on Mar 13, 2026

    @cvquesty

    Man, I so appreciate everyone on this thread. Put my hat into the ring of "a single easy set of commands, standalone operation, and out-of-the-box testing with a low barrier of entry to users".

    WHATEVER the toolset... for me it's more providing a way of working than a specific tool.

  29. avitacco commented on Apr 14, 2026

    @avitacco

    Now that I have gotten jig to v1.0.0, I'd like to explore making template changes and adding functionality to better solve the problems this community needs solving.

    Currently, the application has the same functionality as pdk except without validate or test unit. I'd like to make changes to the default templates to better match the OpenVox testing framework's needs and explore adding a command that could pass testing off to existing commands.

    Thanks in advance!

  30. nsballmann commented on Sep 18, 2026

    @nsballmann

    Another thing that I want you to make aware of is copier (not knowing if it's already in use).

    On first glance it just looks like a generic project templating tool. The thing that copier IMHO does better than all of the other templating tools is that the template is versioned and that feedback loops into existing projects exist.

    This means as an maintainer, if you set up RenovateBot or similar, you will get automatic MRs/PRs for template updates that result from learnings in the projects/modules that use the template. That way as a maintainer you are still in control if you want to take the template changes in or not. You will easily see conflicts in case you deviated from the template.

    copier additionally can ask specific questions when initially creating a project/module and maintains those answers for the future template updates. The usual example is CI, e.g. should GitHub or GitLab CI files be generated. I'd usually argue both as this simplifies moving from one platform to another if the CI portion of the template is maintained equally. In the Puppet/OpenVox context I would expect a question like "Is this a control repo or a module repo?".

    I would help with maintaining a copier puppet/openvox template. And this template could then refer to jig, pdk or any other tool for specific aspects around module and control repo development.

    WDYT?

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions