<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: puppet</title>
    <description>The latest articles on DEV Community by puppet (@puppet).</description>
    <link>https://dev.to/puppet</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2526%2Feb944fe4-e889-4760-9c3a-ea74c1c6557b.jpg</url>
      <title>DEV Community: puppet</title>
      <link>https://dev.to/puppet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/puppet"/>
    <language>en</language>
    <item>
      <title>Puppet Enterprise 2025.10 Resolves Malformed Task and Plan Metadata Failures</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Tue, 31 Mar 2026 18:28:46 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-enterprise-202510-resolves-malformed-task-and-plan-metadata-failures-gp4</link>
      <guid>https://dev.to/puppet/puppet-enterprise-202510-resolves-malformed-task-and-plan-metadata-failures-gp4</guid>
      <description>&lt;p&gt;We’ve released a patch in &lt;strong&gt;Puppet Enterprise 2025.10&lt;/strong&gt; to resolve an issue affecting task and plan metadata handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prior to PE 2025.9:&lt;/strong&gt; Malformed task or plan metadata was logged in the &lt;code&gt;bolt-server&lt;/code&gt; log, and the affected task or plan was ignored. Other tasks and plans continued to work as expected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In PE 2025.9:&lt;/strong&gt; Malformed metadata caused the task and plan listing to fail to load entirely and prevented affected tasks or plans from running. Errors were written to the &lt;code&gt;bolt-server&lt;/code&gt; log.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With PE 2025.10:&lt;/strong&gt; Task and plans retain the improvements from 2025.9 but will now also load correctly even when malformed metadata is present.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More:&lt;/strong&gt; 👉  &lt;a href="https://help.puppet.com/pe/current/topics/release-notes-pe-x-10.htm" rel="noopener noreferrer"&gt;Official 2025.10 Release Notes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Puppet Enterprise 2025.9 and 2023.8.9 are available!</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 25 Mar 2026 13:24:08 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-enterprise-20259-and-202389-are-available-1kma</link>
      <guid>https://dev.to/puppet/puppet-enterprise-20259-and-202389-are-available-1kma</guid>
      <description>&lt;p&gt;Puppet Enterprise 2025.9 and 2023.8.9 are now available, delivering improved operational visibility, expanded agent platform support, and important security fixes for both the latest and 2023.8 LTS streams.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new in PE 2025.9?
&lt;/h2&gt;

&lt;p&gt;In Puppet Enterprise 2025.9, this release improves day-to-day operations with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time visibility into Advanced Patching runs directly in the PE console&lt;/li&gt;
&lt;li&gt;Clearer error and warning messages when patch group creation fails, plus retry support from the console or API&lt;/li&gt;
&lt;li&gt;The ability to edit workflows and stop running workflows from the PE console or via API&lt;/li&gt;
&lt;li&gt;Agent support for Debian 13 on amd64 and aarch64&lt;/li&gt;
&lt;li&gt;Multiple CVEs addressed, along with fixes to Advanced Patching behavior and Infra Assistant reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's new in PE 2025.8.9?
&lt;/h2&gt;

&lt;p&gt;Puppet Enterprise 2023.8.9 adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent support for Debian 13 on amd64 and aarch64&lt;/li&gt;
&lt;li&gt;Multiple security fixes for customers on the 2023.8 LTS stream&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Release notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/pe/current/topics/release-notes-pe-x-9.htm" rel="noopener noreferrer"&gt;2025.9 Release notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/pe/2023.8/topics/release-notes-pe-x-y-9.htm" rel="noopener noreferrer"&gt;2023.8.9 Release notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔔Lifecycle Reminder
&lt;/h2&gt;

&lt;p&gt;Starting with Puppet Enterprise 2026.0 (expected August 2026), Puppet Enterprise will move from the STS/LTS model to a Latest / Latest-1 support lifecycle.&lt;/p&gt;

&lt;p&gt;Read more: &lt;a href="https://www.puppet.com/products/puppet-enterprise/support-lifecycle" rel="noopener noreferrer"&gt;https://www.puppet.com/products/puppet-enterprise/support-lifecycle&lt;/a&gt;&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Ubuntu 24.04 support comes to Puppet SCE for Linux</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 18 Mar 2026 17:52:28 +0000</pubDate>
      <link>https://dev.to/puppet/ubuntu-2404-support-comes-to-puppet-sce-for-linux-3omb</link>
      <guid>https://dev.to/puppet/ubuntu-2404-support-comes-to-puppet-sce-for-linux-3omb</guid>
      <description>&lt;p&gt;The latest 2.6.0 version of &lt;strong&gt;Puppet Security Compliance Enforcement (SCE) for Linux&lt;/strong&gt; is now available. This release adds support for Ubuntu 24.04 LTS and includes a few operational improvements aimed at making SCE easier to run and troubleshoot in day‑to‑day Puppet environments.&lt;/p&gt;

&lt;p&gt;Below is a quick overview of what’s new.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ubuntu 24.04 LTS support
&lt;/h2&gt;

&lt;p&gt;One of the main additions in this release is support for &lt;strong&gt;Ubuntu 24.04 LTS&lt;/strong&gt;. SCE for Linux now allows you to enforce the &lt;strong&gt;CIS benchmarks v1.0.0&lt;/strong&gt; on Ubuntu 24.04 systems. Both Level 1 and Level 2 CIS profiles are supported.&lt;/p&gt;




&lt;h2&gt;
  
  
  Operational improvements
&lt;/h2&gt;

&lt;p&gt;This release also includes some changes intended to improve visibility and troubleshooting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Logging changes
&lt;/h3&gt;

&lt;p&gt;Most SCE logs are now written to the &lt;strong&gt;Puppet agent run log&lt;/strong&gt;. This means you can get more insight into SCE behavior by running the Puppet agent in debug mode, rather than checking separate log locations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updated mount information fact
&lt;/h3&gt;

&lt;p&gt;The custom fact &lt;strong&gt;&lt;code&gt;sce_mount_info&lt;/code&gt;&lt;/strong&gt; has been updated to report information about &lt;strong&gt;all mounted file systems&lt;/strong&gt;, providing a more complete view of the system during enforcement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updated Puppet module dependencies
&lt;/h3&gt;

&lt;p&gt;SCE for Linux now supports the latest versions of &lt;code&gt;puppet/systemd&lt;/code&gt;, &lt;code&gt;puppet/logrotate&lt;/code&gt;, and &lt;code&gt;puppetlabs/augeas_core&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resolved issues
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Puppet runs no longer fail on systems where the &lt;strong&gt;&lt;code&gt;rsyslog&lt;/code&gt;&lt;/strong&gt; package is not installed. This helps avoid unnecessary failures on minimal or customized Linux images.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unnecessary &lt;code&gt;PAM_POSITION_ALIASES&lt;/code&gt; warning messages related to the &lt;code&gt;augeasproviders_pam&lt;/code&gt; module should no longer display.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  More details
&lt;/h2&gt;

&lt;p&gt;For the full list of changes and additional details, see the official release notes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://help.puppet.com/sce/current/linux/scel_relnotes_260.htm" rel="noopener noreferrer"&gt;https://help.puppet.com/sce/current/linux/scel_relnotes_260.htm&lt;/a&gt;&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>security</category>
    </item>
    <item>
      <title>Puppet Agent OS Support EOL: 90 Day Notice</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Fri, 13 Mar 2026 13:13:55 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-agent-os-support-eol-90-day-notice-4k9c</link>
      <guid>https://dev.to/puppet/puppet-agent-os-support-eol-90-day-notice-4k9c</guid>
      <description>&lt;p&gt;ℹ️ &lt;strong&gt;NOTE:&lt;/strong&gt; &lt;em&gt;This notice was &lt;a href="https://groups.google.com/g/puppet-announce/c/7awnfHR0ZEg" rel="noopener noreferrer"&gt;originally posted by the Product Team&lt;/a&gt; on 2026-03-12&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is a 90-day notice that Puppet Agent support for the following operating system platforms is reaching End of Life (EOL). Support for these platforms will be discontinued in upcoming Puppet releases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Linux 2&lt;/li&gt;
&lt;li&gt;Debian 10&lt;/li&gt;
&lt;li&gt;Fedora 40&lt;/li&gt;
&lt;li&gt;Red Hat Enterprise Linux 7&lt;/li&gt;
&lt;li&gt;Ubuntu 18.04&lt;/li&gt;
&lt;li&gt;Ubuntu 20.04&lt;/li&gt;
&lt;li&gt;Windows 10&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After this period, these platforms will no longer receive updates or be included in future puppet-agent releases.&lt;/p&gt;

&lt;p&gt;If you have any questions or concerns regarding this change, please don’t hesitate to reach out.&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Puppetlabs Modules Roundup – February 2026</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Thu, 05 Mar 2026 16:51:13 +0000</pubDate>
      <link>https://dev.to/puppet/puppetlabs-modules-roundup-february-2026-2p98</link>
      <guid>https://dev.to/puppet/puppetlabs-modules-roundup-february-2026-2p98</guid>
      <description>&lt;p&gt;Welcome back to the Puppetlabs Modules Roundup! This series is all about keeping you in the loop on what’s new and updated in the Perforce Puppet &lt;code&gt;puppetlabs&lt;/code&gt; modules on the Forge. This month we look back at the latest updates from February 2026.&lt;/p&gt;

&lt;p&gt;If you want a quick look at the latest developments across the Puppet module ecosystem, this is the place to catch up!&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlighted Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SQL Server 2025 and DSC Reporting Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The latest sqlserver module release now supports SQL Server 2025&lt;/li&gt;
&lt;li&gt;The latest sce_windows module corrects DSC reporting issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Continued Deprecation of Puppet 7 in New Releases
&lt;/h3&gt;

&lt;p&gt;A few more modules received updates to have better alignment with Puppet Core and have stopped supporting Puppet 7 in the new releases, in line with changes to other modules from previous months.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;firewall&lt;/li&gt;
&lt;li&gt;inifile&lt;/li&gt;
&lt;li&gt;sqlserver&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Updates Happened to Puppetlabs Modules in February 2026?
&lt;/h2&gt;

&lt;p&gt;The following is an alphabetical listing of modules which received updates in February 2026. If a module had multiple versions released the updates are collected together, numbered with the "latest" version available.  &lt;/p&gt;




&lt;h3&gt;
  
  
  docker 10.4.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-10 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/docker" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Several updates to support Puppet Core better and updates for APT keyrings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Now uses puppetlabs-apt for modern APT keyrings on Debian family (by &lt;a href="https://github.com/kenyon" rel="noopener noreferrer"&gt;kenyon&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;APT keyring used to manage GPG key (by &lt;a href="https://github.com/techsk8" rel="noopener noreferrer"&gt;techsk8&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dependency on &lt;code&gt;cgroupfs-mount&lt;/code&gt; for Debian Trixie has been removed (by &lt;a href="https://github.com/zen-fu" rel="noopener noreferrer"&gt;zen-fu&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Services with restart &lt;code&gt;no&lt;/code&gt; are now ignored in the &lt;code&gt;exists?&lt;/code&gt; method&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Puppet 7 support removed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target ruby version updated to 3.1 (2.7 removed)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changes to better support PDK latest releases&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CI tests now run against Ubuntu 24.04 (replacing Ubuntu 20.04)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  firewall 8.3.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-09 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/firewall" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Several updates to support Puppet Core better and updates for SUSE IPv6:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;IPv6 rule saving command added for SUSE in utility&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Puppet 7 support removed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target ruby version updated to 3.1 (2.7 removed)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changes to better support PDK latest releases&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CI tests now run against Debian 12 instead of Debian 10 for primary testing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  influxdb 3.0.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-05 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/influxdb" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Small release here to provide an updated GPG key.&lt;/p&gt;




&lt;h3&gt;
  
  
  inifile 6.3.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-17 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/inifile" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Several updates to support Puppet Core better and updates for handling empty sections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Removing the last setting of a section will no longer remove the “empty” section (by &lt;a href="https://github.com/smortex" rel="noopener noreferrer"&gt;smortex&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Puppet 7 support removed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target ruby version updated to 3.1 (2.7 removed)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changes to better support PDK latest releases&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  puppet_agent 4.27.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-24 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/puppet_agent/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Debian 13 (Trixie) acceptance tests added for ARM and x86_64&lt;/p&gt;




&lt;h3&gt;
  
  
  pwshlib 2.0.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-24 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/pwshlib/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;This release fixes per-property change event reporting in PE when using DSC resources with custom_insync.&lt;/p&gt;




&lt;h3&gt;
  
  
  sce_windows 2.2.1
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-24 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/sce_windows/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;SCE for Windows now supports the latest versions of the puppetlabs‑pwshlib dependency, including a fix for DSC reporting issues. In addition, resource names are updated to correctly reference SCE instead of the legacy CEM name.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the official &lt;a href="https://help.puppet.com/sce/current/windows/scew_relnotes_v221.htm" rel="noopener noreferrer"&gt;release notes for Security Compliance Enforcement 2.2.1&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  sqlserver 5.1.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-02-26 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/sqlserver/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Support was added for SQL Server 2025 along with changes to better support Puppet Core.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Support added for SQL Server 2025&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Several changes to match with requirements for Puppet Core&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Puppet 7 support removed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Target ruby version updated to 3.1 (2.6 removed)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changes to better support PDK latest releases&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Until Next Time!
&lt;/h2&gt;

&lt;p&gt;That’s a wrap for this roundup! If you want to dive deeper into any of these modules, check out the module documentation &lt;a href="https://forge.puppet.com" rel="noopener noreferrer"&gt;on the Forge&lt;/a&gt; or explore the individual module repos on GitHub for more details.&lt;/p&gt;

&lt;p&gt;Got feedback or ideas for future updates? We’d love to hear from you! Add a comment here or join the conversation in the &lt;a href="https://slack.puppet.com/" rel="noopener noreferrer"&gt;Perforce Community Slack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Catch you at the next roundup!&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Puppet Security Compliance Enforcement for Windows now fixes DSC reporting issues</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 25 Feb 2026 15:40:03 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-security-compliance-enforcement-for-windows-now-fixes-dsc-reporting-issues-1ea5</link>
      <guid>https://dev.to/puppet/puppet-security-compliance-enforcement-for-windows-now-fixes-dsc-reporting-issues-1ea5</guid>
      <description>&lt;p&gt;Security Compliance Enforcement (SCE) for Windows now supports the latest versions of the puppetlabs‑pwshlib dependency, including a fix for DSC reporting issues. In addition, resource names are updated to correctly reference SCE instead of the legacy CEM name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; When updating to the latest release of SCE for Windows, you will also want to upgrade &lt;code&gt;puppetlabs-pwshlib&lt;/code&gt; as well.&lt;/p&gt;

&lt;p&gt;💾 Download the latest SCE for Windows from the Forge: &lt;a href="https://forge.puppet.com/modules/puppetlabs/sce_windows/readme" rel="noopener noreferrer"&gt;sce_windows module&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;📖 Read more in the &lt;a href="https://help.puppet.com/sce/current/windows/scew_relnotes_v221.htm" rel="noopener noreferrer"&gt;latest release notes for SCE for Windows&lt;/a&gt; .&lt;/p&gt;

</description>
      <category>automation</category>
      <category>microsoft</category>
      <category>news</category>
      <category>security</category>
    </item>
    <item>
      <title>Puppet Core 8.17 Drops with Major Security Updates</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Fri, 20 Feb 2026 13:19:28 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-core-817-drops-with-major-security-updates-4g8o</link>
      <guid>https://dev.to/puppet/puppet-core-817-drops-with-major-security-updates-4g8o</guid>
      <description>&lt;p&gt;The Puppet Core team is at it again keeping on top of industry vulnerabilities! This release updates or removes dependencies to resolve nearly 20 reported CVEs (details in the release notes).&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Updates in 8.17
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Curl updated to 8.18 [addresses 8 CVEs]&lt;/li&gt;
&lt;li&gt;Ruby updated to version 3.2.10 [addresses 2 CVEs]&lt;/li&gt;
&lt;li&gt;OpenSSL updated to version 3.0.19 [addresses 8 CVEs] &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deprecations and removals
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Ruby API has been removed from leatherman as part of ongoing efforts to streamline and modernize internal components.&lt;/li&gt;
&lt;li&gt;Brotli and zstd have been removed from agent curl builds. No impact to Puppet or PXP agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Check out the full &lt;a href="https://help.puppet.com/core/current/Content/PuppetCore/PuppetReleaseNotes/release_notes_puppet_x-8-17-0.htm" rel="noopener noreferrer"&gt;official Release notes for 8.17&lt;/a&gt;&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>devops</category>
    </item>
    <item>
      <title>Puppetlabs Modules Roundup – January 2026</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Thu, 05 Feb 2026 13:54:46 +0000</pubDate>
      <link>https://dev.to/puppet/puppetlabs-modules-roundup-january-2026-2le8</link>
      <guid>https://dev.to/puppet/puppetlabs-modules-roundup-january-2026-2le8</guid>
      <description>&lt;p&gt;Welcome back to the Puppetlabs Modules Roundup! This series is all about keeping you in the loop on what’s new and updated in the Perforce Puppet ‘puppetlabs’ modules on the Forge. This month we look back at the latest updates from January 2026.&lt;/p&gt;

&lt;p&gt;If you want a quick look at the latest developments across the Puppet module ecosystem, this is the place to catch up!&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlighted Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New Continuous Delivery releases!
&lt;/h3&gt;

&lt;p&gt;New releases for v5.14.0 and v4.39.0 brought updates to the CD modules, including dropping support for Puppet 7 and Ruby 2.7. See details in the release notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;v5.14.0 👉 &lt;a href="https://help.puppet.com/cdpe/current/Content/UserGuide/CDPE/ReleaseNotes/cd_release_notes.htm#Version5140" rel="noopener noreferrer"&gt;Continuous Delivery (CD) release notes | Continuous Delivery (CD) | 5.14.0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;v4.39 👉 &lt;a href="https://www.puppet.com/docs/continuous-delivery/4.x/cd_release_notes#version-4-39-0" rel="noopener noreferrer"&gt;Continuous Delivery for PE release notes&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Continued Deprecation of Puppet 7 in New Releases
&lt;/h3&gt;

&lt;p&gt;A few more modules received updates to have better alignment with Puppet Core and stop supporting Puppet 7 in the new releases, in line with changes to other modules from previous months.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cd4peadm&lt;/li&gt;
&lt;li&gt;wsus_client&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Updates Happened to Puppetlabs Modules in January 2026?
&lt;/h2&gt;

&lt;p&gt;The following is an alphabetical listing of modules which received updates in January 2026. If a module had multiple versions released the updates are collected together, numbered with the ‘latest’ version available.  &lt;/p&gt;




&lt;h3&gt;
  
  
  cd4peadm 5.14.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-01-27 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/cd4peadm/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The v5.14.0 release had several improvements, including multiple security updates to resolve vulnerabilities. Puppet 7 and Ruby 2.7 support was also dropped in the new releases for both the v5 and v4 streams. Check the release notes for the full details!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;v5.14.0 👉 &lt;a href="https://help.puppet.com/cdpe/current/Content/UserGuide/CDPE/ReleaseNotes/cd_release_notes.htm#Version5140" rel="noopener noreferrer"&gt;Continuous Delivery (CD) release notes | Continuous Delivery (CD) | 5.14.0&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  peadm 3.35.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-01-22 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/peadm/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Minor updates to add support for the latest Puppet Enterprise releases for 2023.8.8 and 2025.8.&lt;/p&gt;




&lt;h3&gt;
  
  
  wsus_client 6.3.0
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-01-23 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/wsus_client/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Several updates to support Puppet Core better, including PDK and Puppet version updates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support added for configuring Active Hours in WSUS client module

&lt;ul&gt;
&lt;li&gt;New parameters &lt;code&gt;active_hours_start&lt;/code&gt; and &lt;code&gt;active_hours_end&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Puppet 7 support removed&lt;/li&gt;

&lt;li&gt;Target ruby version updated to 3.1 (2.7 removed)&lt;/li&gt;

&lt;li&gt;Changes to better support PDK latest releases&lt;/li&gt;

&lt;li&gt;Puppet Agent outdated pin removed&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  zone_core 2.0.2
&lt;/h3&gt;

&lt;p&gt;📅 Latest release: 2026-01-05 (🌐 &lt;a href="https://forge.puppet.com/modules/puppetlabs/zone_core/readme" rel="noopener noreferrer"&gt;View on the Forge&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Mostly under-the-hood maintenance changes here, including an update to allow more recent versions of &lt;code&gt;puppetlabs/zfs_core&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Until Next Time!
&lt;/h2&gt;

&lt;p&gt;That’s a wrap for this roundup! If you want to dive deeper into any of these modules, check out the module documentation &lt;a href="https://forge.puppet.com" rel="noopener noreferrer"&gt;on the Forge&lt;/a&gt; or explore the individual module repos on GitHub for more details.&lt;/p&gt;

&lt;p&gt;Got feedback or ideas for future updates? We’d love to hear from you! Add a comment here or join the conversation in the &lt;a href="https://slack.puppet.com/" rel="noopener noreferrer"&gt;Perforce Community Slack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Catch you at the next roundup in March!&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Puppet Continuous Delivery (CD) 5.14.0 and 4.39.0 now available!</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Fri, 30 Jan 2026 13:15:09 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-cd-5140-and-4390-now-available-1g4j</link>
      <guid>https://dev.to/puppet/puppet-cd-5140-and-4390-now-available-1g4j</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;👀 &lt;strong&gt;Important reminder:&lt;/strong&gt; Continuous Delivery 4.x reaches its end‑of‑life on February 5, 2026. Upgrade to CD 5.x to ensure continued support, security updates, and feature enhancements. For full details and information about migrating to CD version 5.x, see &lt;a href="https://help.puppet.com/cdpe/current/Content/UserGuide/CDPE/cd_eol.htm" rel="noopener noreferrer"&gt;End-of-life announcement: Continuous Delivery version 4.x&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Highlights in CD 5.14.0
&lt;/h2&gt;

&lt;p&gt;In addition to important fixes and security updates, version 5.14.0 provides Puppet Enterprise (PE) and PE Advanced customers with improvements across usability, security, and platform reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Improved in‑app error messaging to more clearly communicate CORS and other browser‑level errors, making configuration issues easier to diagnose.&lt;/li&gt;
&lt;li&gt;Strengthened password validation for users creating or updating accounts. Passwords must now be at least 12 characters and include uppercase, lowercase, numeric, and special characters.&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;puppet‑dev‑tools&lt;/code&gt; image to include PDK 3.6.1, which requires compatibility with Puppet 8 and Ruby 3.x. Continued support for Puppet 7 and Ruby 2.7 via: &lt;a href="http://gcr.io/platform-services-297419/puppet-dev-tools:puppet7" rel="noopener noreferrer"&gt;gcr.io/platform-services-297419/puppet-dev-tools:puppet7&lt;/a&gt; (includes PDK 3.4.1).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Impact Analysis:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Fixed issue where resource changes were incorrectly reported for certain data types.&lt;/li&gt;
&lt;li&gt;Impact Analysis now correctly validates oversized titles and returns clear error messaging.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Corrected pipeline status links sent to version‑control providers.&lt;/li&gt;

&lt;li&gt;Azure DevOps Server integration fix for truncated host URLs that previously broke repository links.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security updates
&lt;/h3&gt;

&lt;p&gt;This release includes fixes for the following vulnerabilities: CVE‑2026‑21452, CVE‑2025‑68161, CVE‑2024‑49761, CVE‑2025‑68973, CVE‑2025‑6020, and CVE‑2025‑13465&lt;/p&gt;

&lt;p&gt;🔗 Get the full details on everything in the &lt;a href="https://help.puppet.com/cdpe/current/Content/UserGuide/CDPE/ReleaseNotes/cd_release_notes.htm#Version5140" rel="noopener noreferrer"&gt;5.14.0 release notes&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CD 4.39.0
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Updated puppet‑dev‑tools image to include PDK 3.6.1, aligning CD pipelines with Puppet 8 and Ruby 3.x requirements. Continued Puppet 7 support available via the puppet7 image (PDK 3.4.1).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Impact Analysis:&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;Fixed issue where resource changes were incorrectly reported for certain data types.&lt;/li&gt;
&lt;li&gt;Impact Analysis now correctly validates oversized titles and returns clear error messaging.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security updates
&lt;/h3&gt;

&lt;p&gt;This version includes fixes for the following vulnerabilities: CVE‑2026‑21452, CVE‑2025‑68161, CVE‑2025‑68973, CVE‑2025‑6020, and CVE‑2025‑13465.&lt;/p&gt;

&lt;p&gt;🔗 Full detail in the &lt;a href="https://www.puppet.com/docs/continuous-delivery/4.x/cd_release_notes#cd_release_notes-version-4-39-0" rel="noopener noreferrer"&gt;4.39.0 release notes&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>PEClient.rb - The Puppet API Ruby Client Library</title>
      <dc:creator>Zach Bensley</dc:creator>
      <pubDate>Thu, 29 Jan 2026 10:39:57 +0000</pubDate>
      <link>https://dev.to/puppet/peclientrb-the-puppet-api-ruby-client-library-31jb</link>
      <guid>https://dev.to/puppet/peclientrb-the-puppet-api-ruby-client-library-31jb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhy2o5z8t3cq4s5n5vmt0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhy2o5z8t3cq4s5n5vmt0.png" alt="API Styled Banner" width="555" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL; DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you’ve ever glued together 12 &lt;code&gt;curl&lt;/code&gt; calls, piped them through &lt;code&gt;jq&lt;/code&gt;, and told yourself “This is fine”… This PEClient Ruby library might be just what you need.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/puppetlabs/pe_client.rb" rel="noopener noreferrer"&gt;PEClient.rb&lt;/a&gt; is a &lt;a href="https://www.ruby-lang.org/en/" rel="noopener noreferrer"&gt;Ruby&lt;/a&gt; client library for &lt;a href="https://help.puppet.com/pe/current/topics/api_index.htm" rel="noopener noreferrer"&gt;Puppet Enterprise / Puppet Core HTTP APIs&lt;/a&gt; that lets you call endpoints like Ruby code, not like a shell script that is one whitespace away from chaos.&lt;/p&gt;

&lt;p&gt;Use the PEClient library when &lt;a href="https://www.puppet.com/downloads/client-tools" rel="noopener noreferrer"&gt;pe-client-tools&lt;/a&gt; doesn’t go far enough, or when you need Puppet API access &lt;em&gt;inside&lt;/em&gt; your Ruby automation (Rake tasks, CI jobs, internal tooling). This post will help you better understand when to reach for PEClient, how it works, and quick examples to start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Folrt5nvdx8bmrkhnbpab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Folrt5nvdx8bmrkhnbpab.png" alt="Automate all the things meme" width="667" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;p&gt;PEClient will be a great fit for you if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You operate Puppet at scale and need &lt;strong&gt;repeatable automation&lt;/strong&gt;, not “ClickOps.”&lt;/li&gt;
&lt;li&gt;You’re integrating Puppet with other tooling (&lt;a href="https://developer.hashicorp.com/terraform" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt;, CI/CD, internal platforms).&lt;/li&gt;
&lt;li&gt;You need API access beyond what the Console or &lt;code&gt;pe-client-tools&lt;/code&gt; conveniently exposes.&lt;/li&gt;
&lt;li&gt;You would rather write Ruby than parse CLI output that changes on update day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PEClient is not an official, supported, Perforce Puppet library and is maintained on a best-effort basis. That means it is not a fit for teams that can only use libraries that have official vendor support and SLAs on response. However, if you love bringing in new open-source tools into your stack, this will be a great fit!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Puppet exposes a lot of API endpoints, which is great, until you’re stuck assembling authentication, headers, request bodies, and response parsing in every script.&lt;/p&gt;

&lt;p&gt;Sure, you &lt;em&gt;can&lt;/em&gt; &lt;code&gt;curl&lt;/code&gt; everything… but you’ll eventually end up maintaining your own mini client anyway. Nobody wakes up excited to debug their own ad‑hoc HTTP wrapper at 2 A.M.&lt;/p&gt;

&lt;p&gt;If you’re hitting APIs with ad‑hoc scripts, you end up researching endpoints, wiring auth and headers, and managing request/response parsing. Then you must maintain it. Wasting time on the scripts which is time stolen from real automation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What About &lt;code&gt;pe-client-tools&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.puppet.com/downloads/client-tools" rel="noopener noreferrer"&gt;Puppet Enterprise Client Tools&lt;/a&gt; are great for humans at a terminal providing “secure and convenient” access from a workstation.&lt;/p&gt;

&lt;p&gt;When you embed these tools inside automation, you inherit a few risks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parsing CLI output is &lt;strong&gt;brittle&lt;/strong&gt; (format changes happen).&lt;/li&gt;
&lt;li&gt;You end up writing a wrapper anyway (input validation, retries, error mapping).&lt;/li&gt;
&lt;li&gt;Your "library" becomes a collection of shell-outs (harder to test, harder to maintain).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  There is a Better Way!
&lt;/h2&gt;

&lt;p&gt;With Puppet already using Ruby, your team is most likely already familiar with the language.&lt;br&gt;
You probably have custom tooling you use to automate things like provisioning your infrastructure, handling ad-hoc requests from management, and more.&lt;/p&gt;

&lt;p&gt;Why not leave the finer details of how to talk to APIs to a library that can take that off your hands? Built using &lt;a href="https://github.com/lostisland/faraday" rel="noopener noreferrer"&gt;Faraday&lt;/a&gt;, the PEClient library requests and responses use Plain Old Ruby Objects (PORO), no special &lt;code&gt;Structs&lt;/code&gt;, and no custom objects to force your data into. &lt;code&gt;PEClient.rb&lt;/code&gt; allows you to write API calls in the most natural way we know how... with Ruby!&lt;/p&gt;

&lt;p&gt;The PEClient library has as few dependencies as possible with &lt;code&gt;faraday&lt;/code&gt; being the only one. And if you are wondering about Ruby support, we’ve got that covered too. PEClient supports all currently supported Ruby versions (3.2 to 4.0), with each version being tested to confirm it works as expected.&lt;/p&gt;

&lt;p&gt;In practice, this means less glue code, fewer brittle wrappers, and API calls that read like Ruby instead of raw HTTP.&lt;/p&gt;

&lt;p&gt;What you get with PEClient:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby methods that map to Puppet APIs (no DIY URL stitching)&lt;/li&gt;
&lt;li&gt;Plain hashes in/out (PORO-friendly)&lt;/li&gt;
&lt;li&gt;Token or certificate authentication supported&lt;/li&gt;
&lt;li&gt;Consistent error classes for HTTP failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, what's the catch? Good news! There isn’t one. PEClient is designed to be easy to implement, so you can focus automating your infrastructure.&lt;/p&gt;
&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Ease of use was a primary goal for this library. It should be easy to install, use, and customize to suit your needs.&lt;/p&gt;

&lt;p&gt;To facilitate this, the library is designed using a client for handling HTTP interactions and Resources which provide entry points for the API endpoints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resources are lazy loaded only being required when you need it.&lt;/li&gt;
&lt;li&gt;The client owns connection/authorization concerns.&lt;/li&gt;
&lt;li&gt;Resources group the API endpoints in a way that mirrors the docs, so you can discover APIs via code completion.&lt;/li&gt;
&lt;li&gt;Lazy loading keeps startup time low, handy for short-lived jobs like CI steps or one-off automation runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkoy9onzwx7feq010kdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkoy9onzwx7feq010kdr.png" alt="Flow chart showing how client library has been designed" width="800" height="1035"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Quickstart
&lt;/h2&gt;

&lt;p&gt;Install the gem via Bundler to pull the repository directly from GitHub.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Gemfile&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"pe_client"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;git: &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/puppetlabs/pe_client.rb"&lt;/span&gt;

&lt;span class="c1"&gt;# Install&lt;/span&gt;
&lt;span class="n"&gt;bundle&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following is an example with minimal configuration, configuring the client using environment variables. Once the client has been initialised an API request can be made, such as calling the RBAC V1 API endpoint to return the current user.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;base_url&lt;/code&gt; is the URL of your puppet server, for example &lt;code&gt;https://puppet.example.com&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;api_key&lt;/code&gt; is your RBAC API key generated through &lt;a href="https://help.puppet.com/pe/current/topics/rbac_token_auth_generate_token.htm" rel="noopener noreferrer"&gt;puppet-access&lt;/a&gt; (part of &lt;code&gt;pe-client-tools&lt;/code&gt;), the &lt;a href="https://help.puppet.com/pe/current/topics/rbac-token-auth-generate-token-console.htm" rel="noopener noreferrer"&gt;PE Console&lt;/a&gt; or with &lt;code&gt;PEClient&lt;/code&gt; by calling &lt;a href="https://github.com/puppetlabs/pe_client.rb/blob/main/lib/pe_client/resources/rbac.v1/tokens.rb#L38" rel="noopener noreferrer"&gt;&lt;code&gt;client.rbac_v1.tokens.generate&lt;/code&gt;&lt;/a&gt;.&lt;br&gt;
&lt;code&gt;ca_file&lt;/code&gt; is your certificate authority public key to secure the connection between &lt;code&gt;PEClient&lt;/code&gt; and your Puppet Server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Initializes the client, authenticates, and performs a simple call&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;PEClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;  
  &lt;span class="ss"&gt;base_url: &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_BASE_URL"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_API_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;ca_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_CA_FILE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/etc/puppetlabs/puppet/ssl/certs/ca.pem"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get the current user (who the API Key belongs to)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rbac_v1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;current&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; &lt;/span&gt;
&lt;span class="c1"&gt;# {"email" =&amp;gt; "",&lt;/span&gt;
&lt;span class="c1"&gt;#  "is_revoked" =&amp;gt; false,&lt;/span&gt;
&lt;span class="c1"&gt;#  "last_login" =&amp;gt; "2025-12-16T01:56:58.87Z",&lt;/span&gt;
&lt;span class="c1"&gt;#  "is_remote" =&amp;gt; false,&lt;/span&gt;
&lt;span class="c1"&gt;#  "login" =&amp;gt; "admin",&lt;/span&gt;
&lt;span class="c1"&gt;#  "is_superuser" =&amp;gt; true,&lt;/span&gt;
&lt;span class="c1"&gt;#  "id" =&amp;gt; "42bf351c-f9ec-40af-84ad-e976fec7f4bd",&lt;/span&gt;
&lt;span class="c1"&gt;#  "role_ids" =&amp;gt; [1],&lt;/span&gt;
&lt;span class="c1"&gt;#  "display_name" =&amp;gt; "Administrator",&lt;/span&gt;
&lt;span class="c1"&gt;#  "is_group" =&amp;gt; false}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Authentication
&lt;/h2&gt;

&lt;p&gt;With Puppet Enterprise you have two methods available for authentication: RBAC and Certificate.&lt;/p&gt;

&lt;p&gt;If you need to interact with majority of the API endpoints provided, you usually want to use RBAC for authentication. RBAC is used to grant individual users the permission to perform specific actions without needing to give them the keys to the kingdom.&lt;br&gt;
You can generate an API Token either through the PE Console, or straight from within &lt;code&gt;PEClient&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The following example shows multiple ways to initialize the client:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Providing an API Token that you have already generated.&lt;/li&gt;
&lt;li&gt;Generating a token using PEClient.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Bring your own token&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;PEClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;base_url: &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_BASE_URL"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_API_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;ca_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_CA_FILE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/etc/puppetlabs/puppet/ssl/certs/ca.pem"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Generate a token&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;PEClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;base_url: &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_BASE_URL"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;ca_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_CA_FILE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/etc/puppetlabs/puppet/ssl/certs/ca.pem"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;## Creates a token that lasts 5 minutes&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rbac_v1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;login:    &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;USERNAME&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;password: &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;PASSWORD&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;lifetime: &lt;/span&gt;&lt;span class="s2"&gt;"5m"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;## =&amp;gt; {"token" =&amp;gt; "generated_secret_api_key"}&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;PEClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;base_url: &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_BASE_URL"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="ss"&gt;api_key:  &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="ss"&gt;ca_file:  &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_CA_FILE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/etc/puppetlabs/puppet/ssl/certs/ca.pem"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;What about those API endpoints that don't support RBAC but require a certificate? &lt;code&gt;PEClient.rb&lt;/code&gt; can handle that too! This example shows how to initialize the client with a client certificate and key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Client certificate authentication&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;PEClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;base_url: &lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_BASE_URL"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="n"&gt;ca_file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"PE_CA_FILE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"/etc/puppetlabs/puppet/ssl/certs/ca.pem"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:client_cert&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/path/to/client_cert.pem'&lt;/span&gt;
  &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:client_key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/path/to/client_key.pem'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Errors
&lt;/h2&gt;

&lt;p&gt;All errors raised by &lt;code&gt;PEClient.rb&lt;/code&gt; come under the &lt;code&gt;PEClient::Error&lt;/code&gt; base class, which can be used to capture any generic error raised by &lt;code&gt;PEClient.rb&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For HTTP Errors a &lt;code&gt;PEClient::HTTPError&lt;/code&gt; base class is used.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# HTTP 400 errors  &lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BadRequestError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;HTTPError&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;  
&lt;span class="c1"&gt;# HTTP 401 errors  &lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UnauthorizedError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;HTTPError&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;  
&lt;span class="c1"&gt;# HTTP 403 errors  &lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ForbiddenError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;HTTPError&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;  
&lt;span class="c1"&gt;# HTTP 404 errors  &lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NotFoundError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;HTTPError&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;  
&lt;span class="c1"&gt;# HTTP 409 errors  &lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConflictError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;HTTPError&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;  
&lt;span class="c1"&gt;# HTTP 500-599 errors  &lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ServerError&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;HTTPError&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;begin&lt;/span&gt;
  &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rbac_v1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"invalid SID"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="no"&gt;PEClient&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTTPError&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
  &lt;span class="nb"&gt;warn&lt;/span&gt; &lt;span class="s2"&gt;"HTTP &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;body&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="no"&gt;PEClient&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Error&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
  &lt;span class="nb"&gt;warn&lt;/span&gt; &lt;span class="s2"&gt;"PEClient error: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Compatibility and Versioning
&lt;/h2&gt;

&lt;p&gt;These are the current language and API compatibility notes at the time of publishing. Please check the &lt;a href="https://github.com/puppetlabs/pe_client.rb" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; for the latest notes on compatibility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ruby:&lt;/strong&gt; 3.2–4.0 (CI tested)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Puppet API versions:&lt;/strong&gt; Targeting PE 2025.6 / Puppet Core 8.16+&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deprecations:&lt;/strong&gt; Marked endpoints emit warnings via &lt;code&gt;@deprecated&lt;/code&gt; docs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where Can I Find PEClient?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;PEClient&lt;/code&gt; can be found &lt;a href="https://github.com/puppetlabs/pe_client.rb" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;. Please note that this library is not an official, supported Perforce product and is maintained on a best-effort basis.&lt;br&gt;
If you encounter any bugs or want to request a missing feature, please raise an &lt;a href="https://github.com/puppetlabs/pe_client.rb/issues" rel="noopener noreferrer"&gt;issue&lt;/a&gt;. Pull Requests are always welcome!&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Puppet Enterprise 2025.8 and 2023.8.8 now available</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 21 Jan 2026 13:16:18 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-enterprise-20258-and-202388-now-available-5dhc</link>
      <guid>https://dev.to/puppet/puppet-enterprise-20258-and-202388-now-available-5dhc</guid>
      <description>&lt;p&gt;These releases deliver an important security update and fix a defect affecting Advanced Patching in PE 2025.7.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updates in PE 2025.8
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Patching: Resolved an issue causing Puppet run failures:&lt;/strong&gt; In PE 2025.7, removing nodes from all patch groups could cause Puppet runs to fail on those nodes. This issue has been fixed, restoring consistent and expected Puppet run behavior.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Addressed CVE‑2025‑58767:&lt;/strong&gt; Although this CVE was partially addressed in the previous PE release (PE 2025.7), an update to Puppet Server’s vendored gems was missing. The complete fix is included in this release.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Updates in PE 2023.8.8
&lt;/h2&gt;

&lt;p&gt;This release also includes the complete fix for CVE‑2025‑58767.&lt;/p&gt;

&lt;p&gt;🤔 &lt;strong&gt;Reminder:&lt;/strong&gt; In August 2026, Puppet Enterprise 2023.x will now stop receiving maintenance releases. See more details in the release notes!&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn more from the official release notes
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://help.puppet.com/pe/current/topics/release-notes-pe-x-8.htm" rel="noopener noreferrer"&gt;2025.8 Release notes&lt;/a&gt; &lt;br&gt;
🔗 &lt;a href="https://help.puppet.com/pe/2023.8/topics/release-notes-pe-x-y-8.htm" rel="noopener noreferrer"&gt;2023.8.7 Release notes&lt;/a&gt; &lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Run Bolt on RHEL 10/Windows 11 and a new plan_context function in Bolt 5.0.1</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Thu, 15 Jan 2026 16:12:17 +0000</pubDate>
      <link>https://dev.to/puppet/run-bolt-on-rhel-10windows-11-and-a-new-plancontext-function-in-bolt-501-15lo</link>
      <guid>https://dev.to/puppet/run-bolt-on-rhel-10windows-11-and-a-new-plancontext-function-in-bolt-501-15lo</guid>
      <description>&lt;p&gt;You can now &lt;a href="https://help.puppet.com/bolt/current/topics/bolt_installing.htm" rel="noopener noreferrer"&gt;install Bolt 5.0.1&lt;/a&gt; which brings a new &lt;code&gt;plan_context&lt;/code&gt; function to get information about whether a plan is running in Bolt or Puppet Enterprise. Windows 11 and RHEL 10 support were also added!&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Note:&lt;/strong&gt; RHEL 10 package is available for Puppet Enterprise (PE) customers.&lt;/p&gt;

&lt;p&gt;You can see details on the changes in &lt;a href="https://help.puppet.com/bolt/current/topics/changelog.htm#Bolt50120260108" rel="noopener noreferrer"&gt;the official release notes&lt;/a&gt; for Bolt 5.0.1.&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
  </channel>
</rss>
