MODULES-11721: Add Puppet 9 support - #475
Open
span786 wants to merge 1 commit into
Open
Conversation
Widens the puppet requirement in metadata.json to >= 8.0.0 < 10.0.0. The module's CI tooling can't resolve or lint under Puppet 9 as-is, so most of this change is dependency and workflow plumbing to make the Puppet 9 lane actually run: voxpupuli-puppet-lint-plugins bumped to ~> 7.0 (puppet-lint 5.x), puppetlabs_spec_helper and puppet_litmus temporarily pinned to git main (their released versions don't yet carry the puppet-lint relaxation and --collection-platform-exclude respectively), and the Gemfile resolves Puppet 9 (8.99.x) prereleases from PUPPET_GEM_SOURCE with a puppetcore fallback and warning when that secret isn't configured. ci.yml, nightly.yml and mend.yml gain ruby_version: "3.2" (voxpupuli puppet-lint-plugins 7.0 requires ruby >= 3.2). The Acceptance flags in ci.yml/nightly.yml gain --collection-platform-exclude for 9:redhat-7, 9:centos-7, 9:oraclelinux-7, 9:scientific-7 (all el7, no Puppet 9 agent), 9:debian-10, 9:ubuntu-18.04 and 9:ubuntu-20.04 -- confirmed against this module's own metadata.json and matrix_from_metadata_v3 output, not copied from another module. ci.yml/nightly.yml are marked unmanaged in .sync.yml since pdk-templates can't express ruby_version or the collection excludes. On the Ruby 4 / Puppet 9 lane, puppet_litmus pulls in bolt 4.x, which depends on faraday-patron -> patron; patron builds a libcurl native extension and the CI runner has no libcurl headers, so the Spec job in ci.yml/nightly.yml now sets additional_packages: "libcurl4-openssl-dev" to install them before bundle install (same fix as puppetlabs-lvm#391). No manifest/type/provider/function/spec behaviour changes. Co-Authored-By: Claude <[email protected]>
span786
force-pushed
the
MODULES-11721-add-puppet-9-support-in-puppetlabs-java_ks
branch
from
August 12, 2026 10:37
e0ff713 to
751988a
Compare
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.
Summary
Adds Puppet 9 support to
puppetlabs-java_ks. Widening the version bound inmetadata.jsonis a one-line change; the rest is the dependency and workflow work needed to make the Puppet 9 lane actually run. Same approach as puppetlabs/puppetlabs-firewall#1302.No behaviour changes — no
.pp, type, provider or spec file is touched.metadata.jsonpuppetrequirement:>= 8.0.0 < 9.0.0→>= 8.0.0 < 10.0.0.dependenciesis empty, so nothing else needed widening.operatingsystem_supportdeliberately unchanged — EOL platforms are dropped from the Puppet 9 lane only (see below), preserving their Puppet 8 coverage.Gemfilevoxpupuli-puppet-lint-plugins~> 5.0→~> 7.0puppet-lint5.x, needed for the Puppet 9 / Ruby 4 lane.puppetlabs_spec_helper→ gitmainpuppet-lint ~> 4.0and cannot resolve alongside the above.mainhas relaxed it to~> 5.0but is unreleased.puppet_litmus→ gitmain--collection-platform-excludeis in no released version (v2.7.0 does not carry it). This module's matrix passes that flag on every run, so falling back to a released gem would fail the job on an unrecognised option.puppet/facterresolved fromPUPPET_GEM_SOURCE8.99.xprereleases from an internal source; falls back to puppetcore when the variable is unset.Both git pins carry
TODO(MODULES-11721)markers.Deliberate divergence from firewall#1302's diff: this module's Gemfile has a different shape — no
gemsource_puppetcorevariable, a two-argumentlocation_for, and an existingPUPPET_FORGE_TOKEN-gated branch. Rather than importing firewall's abstraction wholesale, the Puppet 9 branch was added ahead of the existing conditional, keeping the change minimal and idiomatic to this file.This ordering is load-bearing, not cosmetic. The pre-existing
elsif !ENV['PUPPET_FORGE_TOKEN'].to_s.empty?branch hardcodespuppet ~> 8.11, ignoringPUPPET_GEM_VERSION. CI sets both that token andPUPPET_GEM_VERSION=~> 9.0, so had the Puppet 9 check been placed after it, the Puppet 9 spec leg would have silently resolved Puppet 8.11 and reported green while never testing Puppet 9 at all..github/workflows/ci.yml,nightly.yml,mend.ymlruby_version: "3.2". Each job runsbundle lockover the:developmentgroup at the reusable workflow's default ruby (3.1), which can no longer resolvevoxpupuli-puppet-lint-plugins7.0 (requires ruby >= 3.2).secrets: inheritwas already present on this module's Spec job, so unlike firewall#1302 nothing needed adding there.--collection-platform-excludeflags on Acceptance (see below)..sync.ymlci.ymlandnightly.ymlmarkedunmanaged: true, since theruby_versioninput cannot be expressed by pdk-templates and the scheduledpdk updatePR would otherwise silently revert Puppet 9 support.acceptance_flagskept in step with the hand-writtenflags:.Additional Context
Which platforms are excluded from the Puppet 9 lane, and why
9:redhat-7,9:centos-7,9:oraclelinux-7,9:scientific-7,9:debian-10,9:ubuntu-18.04,9:ubuntu-20.04Seven entries rather than firewall's four, because firewall already drops the el-7 clones outright via unconditional
--platform-exclude, whereas this module genuinely tests CentOS 7 / OracleLinux 7 / Scientific 7 under Puppet 8. Every exclude is scoped to collection 9, so Puppet 8 coverage is untouched.Cross-checked against
puppet-agent-private/configs/platforms/on the 9.x line, which no longer containsel-7-*,debian-10-*,ubuntu-18.04-*orubuntu-20.04-*. SLES 12 is still built for Puppet 9, so9:sles-12is deliberately not excluded.No excludes were added for AIX 7.1, Solaris 11, or any Windows release: none of them appear in the generated matrix on any Puppet major, because litmus has no docker or
provision_serviceimage configured for them. That is a pre-existing coverage gap unrelated to Puppet 9, and inventing excludes for untested platforms would be misleading.Infrastructure note — corrected
An earlier revision of this description stated that the Puppet 9 spec lane could not go green
because
PUPPET_GEM_SOURCEwas not populated for this repository. That was wrong. CIresolves and installs the real prerelease:
So the Puppet 9 lane genuinely exercises Puppet 9, and there is no outstanding repo-secrets
blocker. Correcting the record rather than leaving a stale claim in the description.
Note on the prerelease version bound
['>= 8.99.0.a', '< 9']is correct for the prerelease window this PR targets, but< 9will exclude Puppet 9.0.0 once it ships final. Carried over from firewall#1302 for consistency — worth unwinding across the epic alongside the two git pins.Verification
Locally on ruby 3.2.8:
rake syntax,rake lint,rake metadata_lintall clean; rubocop 15 files, no offenses;rake parallel_spec62 examples, 0 failures.manifests/config.pp(the module's only manifest) already satisfies puppet-lint 5.x'sstrict_indent, so no whitespace edits were needed.provision.yamlwas left untouched — it looks stale (debian-8, ubuntu-1404) and is unused by GitHub Actions CI, which drives entirely offmatrix_from_metadata_v3.Related Issues (if any)
Checklist