<?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 tagged 'puppet' on DEV Community.</description>
    <link>https://dev.to/t/puppet</link>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tag/puppet"/>
    <language>en</language>
    <item>
      <title>ConfDroid Puppet Modules - java</title>
      <dc:creator>12ww1160</dc:creator>
      <pubDate>Sat, 18 Apr 2026 16:24:20 +0000</pubDate>
      <link>https://dev.to/12ww1160/confdroid-puppet-modules-java-5abd</link>
      <guid>https://dev.to/12ww1160/confdroid-puppet-modules-java-5abd</guid>
      <description>&lt;h2&gt;
  
  
  Introducing confdroid_java: A Lightweight Helper for Reliable Java Installations
&lt;/h2&gt;

&lt;p&gt;We’re continuing the ConfDroid Puppet modules series with a small but essential addition: &lt;strong&gt;confdroid_java&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This module does exactly one thing—and does it well. It installs and configures a specified Java version so that other Puppet modules can simply rely on it being there. No more guessing, no more manual setup, and no more version conflicts when you spin up Java-based services.&lt;/p&gt;

&lt;p&gt;Think of it as the Java counterpart to our popular &lt;strong&gt;confdroid_php&lt;/strong&gt; module. Just as &lt;code&gt;confdroid_php&lt;/code&gt; prepares a clean PHP environment for applications like WordPress or Nagios, confdroid_java sets up the exact Java runtime that tools like &lt;code&gt;confdroid_jenkins&lt;/code&gt; (and any future Java-dependent modules) expect. It keeps everything consistent, reproducible, and ready for automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What confdroid_java actually does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Installs the Java binaries you specify through parameters&lt;/li&gt;
&lt;li&gt;Places all necessary configuration files in the correct locations&lt;/li&gt;
&lt;li&gt;Automatically applies the right SELinux contexts (and gracefully ignores them on systems where SELinux is disabled)&lt;/li&gt;
&lt;li&gt;Stays deliberately lightweight—no unnecessary features, no external module dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is designed to be a silent foundation. You include it once, and every Java-needing module that follows can simply assume a working Java environment is already in place. Confdroid modules which rely on it like &lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_jenkins" rel="noopener noreferrer"&gt;confdroid_jenkins&lt;/a&gt; automatically add it, as long as it is in the Puppet catalogue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported platforms
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fully tested and validated on Rocky Linux 9&lt;/li&gt;
&lt;li&gt;Expected to work on all RHEL 9-based distributions&lt;/li&gt;
&lt;li&gt;Requires Puppet 8&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;The simplest way is just to include the class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight puppet"&gt;&lt;code&gt;&lt;span class="k"&gt;node&lt;/span&gt; &lt;span class="s1"&gt;'example.example.net'&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nc"&gt;confdroid_java&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, if you manage your nodes with Foreman, simply set the desired parameters (Java version, installation source, etc.) directly in the host or host-group configuration. No extra code required.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Important note: This module is meant for fresh systems. If Java has already been installed or configured manually on a server, applying confdroid_java could overwrite those changes. Always test in a lab environment first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Where to get it
&lt;/h2&gt;

&lt;p&gt;The full module, complete documentation, and parameter reference are available right now in the &lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_java" rel="noopener noreferrer"&gt;Confdroid Forge:&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ll also find the generated documentation in the &lt;code&gt;doc/&lt;/code&gt; folder inside the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this module matters
&lt;/h2&gt;

&lt;p&gt;In larger Puppet environments, helper modules like confdroid_java (and its PHP sibling) are the glue that makes everything else click. They remove duplication, enforce consistency, and let the bigger application modules focus on what they do best—managing Jenkins, application servers, or any other Java workload—without reinventing the Java installation wheel every time.&lt;br&gt;
If you’re already running other ConfDroid modules on Rocky 9, adding confdroid_java is a quick win that will make your Java-based services even more reliable and easier to maintain.&lt;br&gt;
Happy automating!&lt;br&gt;
As always, feedback and pull requests are welcome in the repository.&lt;/p&gt;




&lt;p&gt;Did you find this post helpful?  You can support me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/grizzly_coda" rel="noopener noreferrer"&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%2F2znn4km0i2jib7ru1sm9.png" alt="" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hetzner.cloud/?ref=EY14C8Tema9j" rel="noopener noreferrer"&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%2Fyab43i0ysz9uwuq267u0.png" alt="Hetzner Referral" width="400" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://confdroid.substack.com/subscribe?params=%5Bobject%20Object%5D" rel="noopener noreferrer"&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%2F9r49xyl05rwkjb52xbqg.png" alt="Substack" width="250" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://feedback.confdroid.com/" rel="noopener noreferrer"&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%2Fy7d47hck6vziak35nfgf.png" alt="ConfDroid Feedback Portal" width="300" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Related posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-pilot/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Pilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-puppet/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Puppet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-resources/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - confdroid_resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-postgresql/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Postgresql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-gitea/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Gitea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-apache/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nagios/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Nagios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nrpe/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - NRPE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-fail2ban/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Fail2ban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-automatic/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Automatic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-selinux/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Selinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-ssh/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - SSH&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>puppet</category>
      <category>foreman</category>
    </item>
    <item>
      <title>ConfDroid Puppet Modules - SSH</title>
      <dc:creator>12ww1160</dc:creator>
      <pubDate>Sat, 18 Apr 2026 15:33:33 +0000</pubDate>
      <link>https://dev.to/12ww1160/confdroid-puppet-modules-ssh-1kke</link>
      <guid>https://dev.to/12ww1160/confdroid-puppet-modules-ssh-1kke</guid>
      <description>&lt;h2&gt;
  
  
  Introducing confdroid_ssh: Reliable and Hardened SSH Access for Your Rocky 9 Servers
&lt;/h2&gt;

&lt;p&gt;SSH is the primary way we access and manage Linux servers. When SSH stops working, everything else grinds to a halt — troubleshooting becomes painful, and automation pipelines can fail.&lt;/p&gt;

&lt;p&gt;To solve this, I created &lt;strong&gt;confdroid_ssh&lt;/strong&gt;, a new Puppet 8 module that ensures the SSH daemon (sshd) is always installed, properly configured, running, and reachable.&lt;/p&gt;

&lt;p&gt;The module provides a hardened, consistent SSH setup across your entire infrastructure while making it easy to apply custom security policies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Module Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Guarantees SSH access is always available.&lt;/li&gt;
&lt;li&gt;Applies secure defaults for ciphers, MAC algorithms, and other important settings&lt;/li&gt;
&lt;li&gt;Manages the main sshd_config safely through drop-in files in /etc/ssh/sshd_config.d/&lt;/li&gt;
&lt;li&gt;Handles SELinux contexts automatically (works great together with confdroid_selinux)&lt;/li&gt;
&lt;li&gt;Optionally manages firewall rules to keep the SSH port open&lt;/li&gt;
&lt;li&gt;Prevents configuration drift and manual overrides that often cause problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It fits perfectly into the Confdroid collection alongside &lt;code&gt;confdroid_selinux&lt;/code&gt; (for global SELinux enforcement) and &lt;code&gt;confdroid_fail2ban&lt;/code&gt; (for brute-force protection on SSH).&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Installs the SSH server packages and required binaries&lt;/li&gt;
&lt;li&gt;Manages the sshd service (ensures it is enabled and running)&lt;/li&gt;
&lt;li&gt;Supports custom configuration snippets via the confdroid_ssh::custom::custom_config define&lt;/li&gt;
&lt;li&gt;Automatically applies correct SELinux contexts&lt;/li&gt;
&lt;li&gt;Optionally opens the SSH port in the firewall (iptables/nftables)&lt;/li&gt;
&lt;li&gt;Designed for Rocky 9 (and other RHEL 9-based systems)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example: Adding Custom Configuration
&lt;/h2&gt;

&lt;p&gt;You can easily add your own secure settings without touching the main config file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight puppet"&gt;&lt;code&gt;&lt;span class="n"&gt;confdroid_ssh::custom::custom_config&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;'30-my-hardening'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="py"&gt;config_name&lt;/span&gt;    &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'30-my-hardening'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="py"&gt;config_content&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'PasswordAuthentication no'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'PermitRootLogin no'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'MaxAuthTries 3'&lt;/span&gt;&lt;span class="p"&gt;,&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;This creates a cleanly managed file /etc/ssh/sshd_config.d/30-my-hardening.conf, overriding default settings from the main configuration file.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Fits in the Confdroid Ecosystem
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;confdroid_ssh&lt;/code&gt; works hand-in-hand with the rest of the collection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;confdroid_selinux&lt;/code&gt; ensures the global SELinux mode is set correctly&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;confdroid_fail2ban&lt;/code&gt; protects SSH against brute-force attacks
All other modules benefit from reliable SSH access for management and deployment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Important Notes
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Warning: This module overwrites SSH configuration. Do not use it right on systems that have heavy manual SSH customizations. Always test first in a non-production environment, and move your manual configuration into the module via the provided define see example. It is likely best practice to use small snippets depending on various conditions &lt;strong&gt;only when&lt;/strong&gt; they apply. Not every Linux system follows the same pattern depending on the applications it hosts.&lt;br&gt;
The module follows the Confdroid “ENC-first” philosophy — configure everything comfortably through Foreman smart class parameters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can find the full module, source code, parameter reference, and documentation &lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_ssh" rel="noopener noreferrer"&gt;here: https://sourcecode.confdroid.com/confdroid/confdroid_ssh&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;With &lt;code&gt;confdroid_ssh&lt;/code&gt;, you no longer have to worry about SSH breaking after updates or configuration changes. It provides a solid, hardened, and fully automated foundation for secure remote access across your Rocky 9 fleet.&lt;/p&gt;

&lt;p&gt;Combined with &lt;code&gt;confdroid_selinux&lt;/code&gt; and &lt;code&gt;confdroid_fail2ban&lt;/code&gt;, it forms a strong security layer that keeps your servers accessible to you — but not to attackers.&lt;br&gt;
Have you ever lost SSH access due to a misconfiguration or update? How do you currently manage SSH hardening across your servers? Share your experiences or questions in the comments — I’d love to hear them!&lt;/p&gt;




&lt;p&gt;Did you find this post helpful?  You can support me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/grizzly_coda" rel="noopener noreferrer"&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%2F2znn4km0i2jib7ru1sm9.png" alt="" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hetzner.cloud/?ref=EY14C8Tema9j" rel="noopener noreferrer"&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%2Fyab43i0ysz9uwuq267u0.png" alt="Hetzner Referral" width="400" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://confdroid.substack.com/subscribe?params=%5Bobject%20Object%5D" rel="noopener noreferrer"&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%2F9r49xyl05rwkjb52xbqg.png" alt="Substack" width="250" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://feedback.confdroid.com/" rel="noopener noreferrer"&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%2Fy7d47hck6vziak35nfgf.png" alt="ConfDroid Feedback Portal" width="300" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Related posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-pilot/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Pilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-puppet/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Puppet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-resources/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - confdroid_resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-postgresql/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Postgresql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-gitea/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Gitea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-apache/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nagios/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Nagios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nrpe/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - NRPE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-fail2ban/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Fail2ban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-automatic/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Automatic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-selinux/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Selinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-java/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sshd</category>
      <category>access</category>
      <category>puppet</category>
      <category>foreman</category>
    </item>
    <item>
      <title>Security Compliance Management 3.7.0 Is Now Available</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Wed, 15 Apr 2026 14:56:44 +0000</pubDate>
      <link>https://dev.to/puppet/security-compliance-management-370-is-now-available-1i47</link>
      <guid>https://dev.to/puppet/security-compliance-management-370-is-now-available-1i47</guid>
      <description>&lt;p&gt;Security Compliance Management (SCM) 3.7.0 helps teams assess systems against recognized security benchmarks. This release supports evolving baselines and improves audit readiness, operational reliability, and overall governance by giving administrators tighter control over platform performance, user access, and API security within the Puppet Enterprise platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new in this release
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Expanded benchmark coverage for evolving environments
&lt;/h3&gt;

&lt;p&gt;SCM 3.7.0 updates CIS-CAT Pro Assessor benchmark coverage to support newer operating systems and standards. This helps ensure compliance reporting remains current as teams adopt new platforms.&lt;/p&gt;

&lt;p&gt;Highlights include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;New CIS benchmarks for numerous Linux distributions and macOS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An updated benchmark for Microsoft Windows 11 Enterprise.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  More predictable performance during compliance scans
&lt;/h3&gt;

&lt;p&gt;Administrators can now control JVM memory allocation for the CIS Assessor, allowing performance tuning based on environment size and available resources. This results in more reliable scans and fewer disruptions during compliance assessments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Greater control over user access and session behavior
&lt;/h3&gt;

&lt;p&gt;New centralized session management options allow administrators to better align SCM authentication behavior with corporate security and identity policies. The outcome is reduced risk from long-lived sessions and improved governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Improved API governance and security posture
&lt;/h3&gt;

&lt;p&gt;Additional GraphQL controls help limit exposure and enforce request limits in regulated or security-sensitive environments. The smaller API attack surface provides stronger API governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security fixes and dependency updates
&lt;/h3&gt;

&lt;p&gt;This release addresses multiple known vulnerabilities across core dependencies, helping reduce inherited risk and support ongoing vulnerability management.&lt;/p&gt;

&lt;p&gt;For a complete list of addressed CVEs and detailed configuration guidance, see the release notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Upgrade to SCM 3.7.0
&lt;/h2&gt;

&lt;p&gt;Organizations should consider upgrading to SCM 3.7.0 to reduce compliance gaps, stabilize large-scale assessments, and strengthen security controls as environments grow more complex.&lt;/p&gt;

&lt;p&gt;With this release, teams can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Maintain audit readiness as new operating systems and benchmarks are adopted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improve scan reliability and performance in large-scale environments managed through Puppet Enterprise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Centralize and standardize user session and API behavior across the platform.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduce exposure to known vulnerabilities through updated dependencies and security fixes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Review the &lt;a href="https://help.puppet.com/scm/current/Content/UserGuide/SCM/Release_notes/release_notes.htm#SecurityComplianceManagement370" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; for technical details and configuration information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Upgrade to SCM 3.7.0 to take advantage of expanded coverage and new governance controls.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>puppet</category>
      <category>security</category>
    </item>
    <item>
      <title>Generate a Puppet Module Using GitHub Copilot and VS Code</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Mon, 13 Apr 2026 13:23:29 +0000</pubDate>
      <link>https://dev.to/puppet/generate-a-puppet-module-using-github-copilot-and-vs-code-50mm</link>
      <guid>https://dev.to/puppet/generate-a-puppet-module-using-github-copilot-and-vs-code-50mm</guid>
      <description>&lt;p&gt;This tutorial shows how to use GitHub Copilot with the Puppet Model Context Protocol (MCP) server to generate, validate, and refine a Puppet module—even if you’re new to Puppet development. &lt;/p&gt;

&lt;h3&gt;
  
  
  What You’ll Learn 
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  How to configure GitHub Copilot with the Puppet MCP server &lt;/li&gt;
&lt;li&gt;  How AI agents can use the Puppet Development Kit (PDK) to generate Puppet modules &lt;/li&gt;
&lt;li&gt;  How AI agents can use the PDK to validate and iterate on generated Puppet code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Challenge: Overcoming the Puppet Module Learning Curve 
&lt;/h2&gt;

&lt;p&gt;When you start automating infrastructure with Puppet, you might face an initial learning curve. You will begin to learn Puppet syntax, best practices around module structure and Puppet Domain-Specific Language (DSL), and even what tools are available to you.  &lt;/p&gt;

&lt;p&gt;To help DevOps practitioners get started, Puppet first released an MCP server to &lt;a href="https://help.puppet.com/pe/current/topics/infra-assistant-code-assist.htm" rel="noopener noreferrer"&gt;accelerate development&lt;/a&gt; when using the new Puppet EdgeOps module for &lt;a href="https://www.puppet.com/blog/puppet-edge-code-assist" rel="noopener noreferrer"&gt;working with network devices&lt;/a&gt;. Starting with Puppet Enterprise Advanced 2025.7, tools are available to provide even more guidance and information for working with agents on Puppet code in control repos, tasks, and modules. Traditional module development demanded deep domain expertise that teams often lack, but using modern AI-assisted development flows can help you bridge the knowledge gap. &lt;/p&gt;

&lt;p&gt;Puppet's MCP server can be used with your favorite Integrated Development Environment (IDE) and code assist agent so that you can describe your requirements in natural language and work with your agent to get validated Puppet code and architecture. This tutorial demonstrates the use of Visual Studio (VS) Code and GitHub Copilot to generate a Puppet module with minimal Puppet expertise, helping you get started faster!  &lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt; AI tools make mistakes, just like people. For this reason, your process should always involve review and testing as part of the end-to-end process. Use these tools to augment yourself and the team, but make those tools earn your trust. &lt;/p&gt;

&lt;p&gt;Time to get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack Overview: VS Code, GitHub Copilot, and Puppet MCP 
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.puppet.com/sites/default/files/inline-images/1.png" rel="noopener noreferrer"&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%2Fdz63dnnmh3aa53llhhw7.png" alt="Flow chart depicting VS Code, GitHub, and MCP Server" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this tutorial, the Puppet development workflow will combine three key technologies: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;&lt;strong&gt;Visual Studio Code&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; Serves as the IDE where all coding (and code generation) happens.  &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://code.visualstudio.com/docs/copilot/overview" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; Acts as the AI coding assistant that provides intelligent code suggestions and executes autonomous tasks.  &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/infra-assistant-code-assist.htm" rel="noopener noreferrer"&gt;&lt;strong&gt;Puppet MCP server&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;:&lt;/strong&gt; Exposes Puppet-specific intelligence through MCP, enabling GitHub Copilot to better generate Puppet solutions.  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The MCP server provides &lt;a href="https://help.puppet.com/pe/current/topics/available-mcp-tools-for-code-assist.htm" rel="noopener noreferrer"&gt;several tools&lt;/a&gt; to provide Puppet language guides, information about Puppet environment entities, Puppet documentation, and networking info. This integration eliminates context switching between documentation, terminal windows, and code editors and provides the information required by AI agents to support smooth transitions from one step to the next.  &lt;/p&gt;

&lt;p&gt;Authentication to the Puppet MCP server happens via Puppet Enterprise (PE) API keys with &lt;a href="https://help.puppet.com/pe/current/topics/adding-an-mcp-server.htm" rel="noopener noreferrer"&gt;secure token storage in VS Code&lt;/a&gt;. The MCP architecture follows a client-server model where VS Code instantiates client connections to the Puppet MCP server running in your Puppet Enterprise environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites and Required Software Installation 
&lt;/h2&gt;

&lt;p&gt;This brief tutorial is based on the assumption that you have met several prerequisites. Plan time to go through this checklist before starting: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Obtain your authentication credentials to download Perforce Puppet applications. The credentials are either your Forge API key or your &lt;a href="https://help.puppet.com/pe/current/topics/verify_installed_licenses_and_active_nodes.htm?Highlight=%22license%20id%22" rel="noopener noreferrer"&gt;Puppet Enterprise license ID&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/installing.htm" rel="noopener noreferrer"&gt;Install Puppet Enterprise Advanced 2025.7+&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/enabling-the-infra-assistant.htm" rel="noopener noreferrer"&gt;Enable the Infra Assistant feature on your PE server&lt;/a&gt;. You do not have to configure the Infra Assistant OpenAI settings, but the Infra Assistant must be turned on in order for the MCP server to accept requests from your agent. &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/rbac-token-auth-generate-token-console.htm" rel="noopener noreferrer"&gt;Generate a valid Puppet Enterprise API key&lt;/a&gt; from the console for a user with the &lt;code&gt;infrastructure_assistant:use&lt;/code&gt; permission. (The API key is sometimes called a token.)&lt;/li&gt;
&lt;li&gt;  Install &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; on your development machine and complete configuration tasks: &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://code.visualstudio.com/docs/copilot/overview#_getting-started" rel="noopener noreferrer"&gt;Configure the GitHub Copilot extension&lt;/a&gt; in Visual Studio Code. &lt;/li&gt;
&lt;li&gt;  Configure GitHub Copilot to &lt;a href="https://code.visualstudio.com/docs/copilot/customization/mcp-servers" rel="noopener noreferrer"&gt;use MCP servers in VS Code&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;  Ensure that your developer machine has network access to the PE console host. &lt;/li&gt;
&lt;li&gt;  Verify that your developer machine &lt;a href="https://portal.perforce.com/s/article/8078496522135?utm_medium=social&amp;amp;utm_source=youtube&amp;amp;utm_campaign=2025-puppet-forge&amp;amp;utm_content=puppet-forge" rel="noopener noreferrer"&gt;trusts the PE console CA certificate&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tutorial Walkthrough: From Empty Repository to Generated Module 
&lt;/h2&gt;

&lt;p&gt;These steps walk through how you can take a completely empty repository to a validated Puppet module by using an AI-assisted flow in Visual Studio with a code assistant. Remember to meet the previously listed prerequisites! The following steps use GitHub Copilot, but if you happen to use a different stack (like Claude Code or Cursor), the process is mostly the same.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; In this tutorial, “agent chat” refers to the GitHub Copilot Agent chat window in Visual Studio Code. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Using your favorite source control tool, create a blank repository to begin working. &lt;/li&gt;
&lt;li&gt; Clone the repository and open it in Visual Studio Code. &lt;/li&gt;
&lt;li&gt; To support the use of Puppet tools, install GitHub Copilot instructions in your solution. Sample instructions are &lt;a href="https://github.com/jst-cyr/puppet-copilot-instructions-example" rel="noopener noreferrer"&gt;available on GitHub&lt;/a&gt;. 
&lt;strong&gt;Tip:&lt;/strong&gt; Some models cannot easily find instructions in subfolders and  search only in the root directory. Some models look only for the &lt;code&gt;copilot-instructions.md&lt;/code&gt; file. The example provides a &lt;code&gt;README.md&lt;/code&gt; and a &lt;code&gt;copilot-instructions.md&lt;/code&gt; file that help lead the model toward the custom Puppet instructions file.  &lt;/li&gt;
&lt;li&gt; &lt;a href="https://help.puppet.com/pe/current/topics/adding-an-mcp-server.htm" rel="noopener noreferrer"&gt;Add the Puppet MCP server&lt;/a&gt; to your &lt;code&gt;mcp.json&lt;/code&gt; file. &lt;/li&gt;
&lt;li&gt; Start the Puppet MCP server, either by clicking &lt;strong&gt;Start&lt;/strong&gt; in your &lt;code&gt;mcp.json&lt;/code&gt; file or through the &lt;strong&gt;MCP Servers – Installed&lt;/strong&gt; list in the &lt;strong&gt;Extensions&lt;/strong&gt; view. &lt;/li&gt;
&lt;li&gt; Open an agent chat window for GitHub Copilot. &lt;/li&gt;
&lt;li&gt; Run a prompt to generate a new module. For example: “I want to create a new Puppet module to automate the provisioning of new AWS VMs. Please follow best practices for Puppet module creation.” &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note that this is a simple prompt example. To follow context engineering best practices, you would provide much more detail to get your desired output. For tutorial purposes, the prompt is intentionally lightweight. By using a simple prompt, you can recognize the extra context and benefits provided by Puppet tools to accelerate your progress.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/F25NUANJT04"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Puppet Development Kit (PDK) 
&lt;/h2&gt;

&lt;p&gt;At this point, your agent should be running and attempting to solve the problem. The agent will quickly detect the need for  additional information from the &lt;strong&gt;Puppet MCP server.&lt;/strong&gt; In addition, the agent will determine that the &lt;strong&gt;Puppet Development Kit (PDK)&lt;/strong&gt; must be used to create modules. In my model testing, the GitHub Copilot agent undertook the following tasks, which required minimal input from the user: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Processed the provided Puppet instructions and determined that the Puppet MCP server should be connected to retrieve guidelines. &lt;/li&gt;
&lt;li&gt; Attempted to connect to the Puppet MCP server for the &lt;code&gt;get_puppet_guide&lt;/code&gt; tool and augmented the context with information from the Puppet MCP server. &lt;/li&gt;
&lt;li&gt; Recognized that the PDK is required and attempted to check whether PDK was installed (by running &lt;code&gt;pdk --version&lt;/code&gt;). &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If PDK was not detected, attempted to fetch the PDK installation instructions. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The agent may use different URLs to search for the PDK installation instructions. Eventually, the agent will find the correct installation instructions for the operating system. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After the agent discovered the installation instructions, the agent determined that authentication credentials are required to download the software. At this point, the user would be prompted for Forge credentials or Puppet Enterprise credentials. At the prompt, you will specify the type of credentials. For example: “Here is my license ID: abcdefghizjklmnopzrstuvwxyz1”. This sample prompt informs the agent to use a Puppet Enterprise license ID, instead of a Forge API key, as the authentication method. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Submit the prompt and the agent will begin to download and install the PDK. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agent typically installs the PDK as part of its setup routine. In practice, the agent might run incorrect commands or fail to use elevated privileges on the first attempt. When that happens, allow the agent to iterate until the installation succeeds. &lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Tip:&lt;/strong&gt; This is a huge boost for new users because the agent can search for instructions and quickly iterate through installation failures, while you focus on reviewing the results. &lt;/p&gt;

&lt;p&gt;After the agent successfully completes the PDK download and installation on your behalf, the agent continues with module generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating the Module 
&lt;/h2&gt;

&lt;p&gt;With the PDK installed, it’s time to create the first steps of a module that will accomplish your goals. Only minimal context is provided in the tutorial example for provisioning new AWS VMs. The models will attempt to create the functionality you require based on their training data, the context from the Puppet MCP server, and the context you provide. The better your prompting, the more accurate the output will be. For this tutorial, however, assume that you are not trying to generate the module in one step and will follow up with further prompting to refine the module. During this tutorial step, the agent will generate the basics of the module. &lt;/p&gt;

&lt;p&gt;At this stage, GitHub Copilot typically performs the following actions without requiring additional prompts: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; After completing installation, validates the installation by running &lt;code&gt;pdk --version&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt; If successful, creates a module with a PDK command like &lt;code&gt;pdk new module aws_provisioning --skip-interview&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt; After the PDK module creation logic completes processing, creates profile classes for AWS VM provisioning. This command might be &lt;code&gt;pdk new class aws_provisioning&lt;/code&gt; or similar. &lt;/li&gt;
&lt;li&gt; Creates additional supporting classes. In my testing, the agent ran these additional commands: 

&lt;ol&gt;
&lt;li&gt; &lt;code&gt;pdk new class aws_provisioning::config&lt;/code&gt; &lt;/li&gt;
&lt;li&gt; &lt;code&gt;pdk new class aws_provisioning::instance&lt;/code&gt; &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt; After the basic structure of the classes is in place, begins implementing Puppet code for the classes. The actions resemble typical code generation steps, creating and editing a variety of files and patching them with new implementation logic. &lt;/li&gt;

&lt;li&gt; When the initial code generation is completed on top of the PDK skeleton implementations, updates documentation such as the &lt;code&gt;metadata.json&lt;/code&gt; file and the README file to match the needs of the generated code. &lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;When documentation updates are completed, a typical agent might stop without validating further. However, by setting the context for the agent with knowledge of PDK and its capabilities as well as the best practices from the Puppet MCP server, the agent knows that validation of modules is an important next step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validating the Module 
&lt;/h2&gt;

&lt;p&gt;PDK supports validation of a module to ensure that it meets specific standards. Even with the best practices and instructions that were provided to the agent, along with its training, agents can make mistakes. With validation, you can catch some of these mistakes up front. Augmenting with tools is a key strategy for agentic workflows. Using the agent as an automation process to leverage the tools you have is a great way to take advantage of more deterministic capabilities along with the non-deterministic nature of the agentic automation. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; For validation, the agent should attempt to use the PDK: &lt;code&gt;pdk validate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; PDK should find issues, even if they are only indentation issues in YAML files. The agent should then attempt to correct the issues with code assist using the output of the PDK validation. &lt;/li&gt;
&lt;li&gt; When the patch edits are complete, the agent should run PDK validation again (&lt;code&gt;pdk validate&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If more issues are found, the agent should circle back and try to resolve them, looping until no more issues are found, but typically the first run of validation should find all issues. &lt;/p&gt;

&lt;p&gt;You can now continue your own testing and building out the module with a solid base that follows Puppet best practices! This workflow compresses the traditional learning curve and gets you to the interesting bits of your development much faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Benefits of Agent-Assisted Module Creation 
&lt;/h2&gt;

&lt;p&gt;This AI-assisted approach offers several key advantages over manual development: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Agent-led requirements detection and installation help you get started so that your system achieves a correct state. &lt;/li&gt;
&lt;li&gt;  Autonomous error detection and correction reduce debugging time significantly. &lt;/li&gt;
&lt;li&gt;  The agent's ability to reference the Puppet MCP server and official Puppet documentation helps to ensure that generated code follows best practices and coding standards.  &lt;/li&gt;
&lt;li&gt;  Integration with PDK tooling provides deterministic automation and continuous quality checks throughout the development process.  &lt;/li&gt;
&lt;li&gt;  Structured instruction files create a consistent and repeatable development experience across different projects and team members. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By building your AI-assisted flow on top of solid DevOps tools and practices, you’ll be equipped to avoid the typical challenges faced by generic coding models. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;“DevOps is not dying. It is becoming the economic and operational foundation for AI at scale.&lt;/strong&gt;&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;The data shows the same pattern across every domain: AI succeeds when delivery systems are standardized, centralized, automated, and measurable. Where those foundations are weak, AI magnifies existing gaps in coordination, governance, auditability, cost, and outcomes.”&lt;/strong&gt;&lt;/em&gt; &lt;br&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;-&lt;/strong&gt;&lt;/em&gt; &lt;a href="https://www.perforce.com/resources/state-of-devops/conclusion?utm_medium=social&amp;amp;utm_source=youtube&amp;amp;utm_campaign=2025-puppet-forge&amp;amp;utm_content=puppet-forge" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;strong&gt;State of DevOps Report 2026&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Challenges and Solutions in AI-Assisted Puppet Development 
&lt;/h2&gt;

&lt;p&gt;You might encounter a few common challenges when using AI agents for Puppet module generation: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; According to a &lt;a href="https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals" rel="noopener noreferrer"&gt;recent evaluation by Vercel&lt;/a&gt;, coding agents &lt;strong&gt;ignore available skills in 56% of cases,&lt;/strong&gt; choosing not to invoke skills even when relevant documentation exists. The solution involves using instruction files that force context loading rather than relying on agent decisions. In the evaluation, Vercel found that directly embedding a compressed 8 KB docs index into an &lt;code&gt;AGENTS.md&lt;/code&gt; file helped coding agents achieve 100% pass rates compared to 79% with skills combined with explicit instructions. In my own tests with GitHub Copilot, references from the README.md file to other instruction files helped the agent, with less sophisticated models, to find the correct instructions and load them.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Agents sometimes refuse to use PDK or read proper installation instructions&lt;/strong&gt;, requiring iterative prompt refinement. The solution involves adding explicit installation commands, troubleshooting steps, and URL references to your &lt;code&gt;copilot-instructions.md&lt;/code&gt; file. Ensure that you follow &lt;a href="https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals" rel="noopener noreferrer"&gt;best practices for instructions files to keep them lean&lt;/a&gt;. Getting GitHub Copilot to consistently read instruction files requires understanding that passive context (always-loaded files) outperforms active retrieval (on-demand skills). Instruction files should be concise (fewer than 1,000 lines), structured with headings and bullet points, and use imperative rules rather than long paragraphs.  &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;AI agents can get stuck in validation and fixing loops.&lt;/strong&gt; For linting and validation errors that agents struggle to fix, adding error-specific guidance to instruction files helps GitHub Copilot learn from mistakes. The goal is to eliminate decision points by providing persistent context rather than making agents decide when to look up information.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Table 1: Common challenges in AI-assisted Puppet module development and recommended solutions 
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge &lt;/th&gt;
&lt;th&gt;Impact &lt;/th&gt;
&lt;th&gt;Solution &lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agents ignore MCP tools (56% of cases) &lt;/td&gt;
&lt;td&gt;Skills documentation not invoked when needed &lt;/td&gt;
&lt;td&gt;Use .github/copilot-instructions.md for passive context loading (achieves 100% pass rate versus 79% with on-demand skills). &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDK installation issues &lt;/td&gt;
&lt;td&gt;Agents fail to use PDK or read installation instructions &lt;/td&gt;
&lt;td&gt;Add explicit installation commands and troubleshooting steps to copilot-instructions.md. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inconsistent reading of instruction files &lt;/td&gt;
&lt;td&gt;Agent decisions create unpredictable behavior &lt;/td&gt;
&lt;td&gt;Provide persistent context (always-loaded files) rather than relying on agent retrieval decisions. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incorrect Puppet code or missing namespaces or invalid spacing &lt;/td&gt;
&lt;td&gt;Generated configurations fail validation &lt;/td&gt;
&lt;td&gt;Include specific vendor configuration examples in instruction files and use PDK validation for testing modules. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation errors agents can't fix &lt;/td&gt;
&lt;td&gt;Repeated mistakes across generations &lt;/td&gt;
&lt;td&gt;Document error-specific guidance in instruction files so agents learn from past failures. &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File structure guidelines &lt;/td&gt;
&lt;td&gt;Keep instruction files concise (fewer than 1,000 lines) with clear structure &lt;/td&gt;
&lt;td&gt;Use headings, bullet points, and imperative rules instead of long paragraphs.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Should You Use Agent Skills or Instructions? 
&lt;/h2&gt;

&lt;p&gt;Vercel's research on AI agent instruction approaches provides compelling evidence to show why instruction files are essential for effective AI-assisted development. Their evaluation tested Next.js 16 API generation using four configurations:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; No documentation: 53% pass rate &lt;/li&gt;
&lt;li&gt; Skills with default behavior: 53% pass rate, same as no documentation &lt;/li&gt;
&lt;li&gt; Skills with explicit trigger instructions: 79% pass rate &lt;/li&gt;
&lt;li&gt; A compressed 8 KB docs index in AGENTS.md: 100% pass rate &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The static markdown file outperformed sophisticated retrieval systems because the file eliminated decision points where agents must choose whether to invoke tools. In 56% of eval cases, skills were never invoked despite being available, producing no improvement over the baseline. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.puppet.com/sites/default/files/inline-images/2_0.png" rel="noopener noreferrer"&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%2Fa7z7h9xf8dwzhnxwauiq.png" alt="AI Agent Performance: Instruction Approach comparison" width="800" height="450"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Although these findings were focused on web development frameworks like Next.js, similar issues occur with agents across language frameworks and IDEs. For Puppet development, my testing found that combining instructions, PDK tooling, and the Puppet MCP server gave agents the best chance to have the correct context information.  &lt;/p&gt;

&lt;p&gt;AI-assisted development is still evolving but is expected to become an important part of many DevOps team processes. The Model Context Protocol is establishing itself as an enterprise-wide standard enabling vendor interoperability, with companies like Figma, Notion, Linear, Atlassian, and MongoDB building MCP servers that work seamlessly together. &lt;/p&gt;

&lt;p&gt;For infrastructure-as-code specifically, the shift toward “vibe coding” is opening up the opportunity for developers to express intentions in natural language rather than memorizing command-line syntax or the specifics of the Puppet Desired State Language (DSL).  Given a solid base of DevOps tools across the lifecycle, from development to testing to operations, coding assistants are well positioned to take advantage of these tools, thus unlocking opportunities for more practitioners to achieve greater efficiency across the entire workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  References 
&lt;/h2&gt;

&lt;p&gt;Check out the following sources, some of which were referenced in the document, and some of which provide a deeper dive if this topic is of interest to you! &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://github.com/jst-cyr/puppet-copilot-instructions-example" rel="noopener noreferrer"&gt;Sample instructions for GitHub Copilot and Puppet MCP server&lt;/a&gt; (github.com/jst-cyr) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/installing.htm" rel="noopener noreferrer"&gt;Installing Puppet Enterprise (PE)&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/infra-assistant-code-assist.htm" rel="noopener noreferrer"&gt;Infra Assistant: code assist&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/enabling-the-infra-assistant.htm" rel="noopener noreferrer"&gt;Infra Assistant: Enable the Infra Assistant&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/available-mcp-tools-for-code-assist.htm" rel="noopener noreferrer"&gt;Infra Assistant - code assist: Available MCP tools&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/configuring-your-client-to-use-the-mcp-server.htm" rel="noopener noreferrer"&gt;Infra Assistant - code assist: Configuring your client to use the MCP server&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/adding-an-mcp-server.htm" rel="noopener noreferrer"&gt;Infra Assistant - code assist: Add the Puppet MCP server&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/rbac-token-auth-generate-token-console.htm" rel="noopener noreferrer"&gt;SAML authentication: Generate a token in the console&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://help.puppet.com/pe/current/topics/verify_installed_licenses_and_active_nodes.htm" rel="noopener noreferrer"&gt;View your license details | Puppet Enterprise&lt;/a&gt; (help.puppet.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://portal.perforce.com/s/article/8078496522135?utm_medium=social&amp;amp;utm_source=youtube&amp;amp;utm_campaign=2025-puppet-forge&amp;amp;utm_content=puppet-forge" rel="noopener noreferrer"&gt;Get the Puppet CA certificate chain in Puppet Enterprise&lt;/a&gt; (portal.perforce.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.puppet.com/blog/puppet-edge-code-assist" rel="noopener noreferrer"&gt;Build Tasks for Network Devices Faster with Code Assistance and Puppet Edge&lt;/a&gt; (puppet.com)  &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.perforce.com/resources/state-of-devops?utm_medium=social&amp;amp;utm_source=youtube&amp;amp;utm_campaign=2025-puppet-forge&amp;amp;utm_content=puppet-forge" rel="noopener noreferrer"&gt;The State of DevOps Report 2026&lt;/a&gt; (perforce.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals" rel="noopener noreferrer"&gt;AGENTS.md outperforms skills in our agent evals&lt;/a&gt; (vercel.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://code.visualstudio.com/docs/copilot/customization/mcp-servers" rel="noopener noreferrer"&gt;GitHub Copilot: Use MCP servers in VS Code&lt;/a&gt; (code.visualstudio.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://code.visualstudio.com/docs/copilot/overview" rel="noopener noreferrer"&gt;GitHub Copilot in VS Code&lt;/a&gt; (code.visualstudio.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://docs.github.com/en/copilot/tutorials/use-custom-instructions" rel="noopener noreferrer"&gt;Using custom instructions to unlock the power of Copilot code review&lt;/a&gt; (docs.github.com) &lt;/li&gt;
&lt;li&gt;  &lt;a href="https://dev.to/razvan_dim/bridging-the-gap-a-deep-dive-into-the-model-context-protocol-mcp-4e0p"&gt;Bridging the Gap: A Deep Dive into the Model Context Protocol (MCP)&lt;/a&gt; (dev.to)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>puppet</category>
      <category>githubcopilot</category>
      <category>vscode</category>
      <category>aiops</category>
    </item>
    <item>
      <title>Installing PDK on a Linux Workstation (Manual Edition)</title>
      <dc:creator>Matthew Stone</dc:creator>
      <pubDate>Sat, 11 Apr 2026 19:05:38 +0000</pubDate>
      <link>https://dev.to/souldo/installing-pdk-on-a-linux-workstation-manual-edition-7ao</link>
      <guid>https://dev.to/souldo/installing-pdk-on-a-linux-workstation-manual-edition-7ao</guid>
      <description>&lt;p&gt;Getting PDK installed and updated can be a bit...&lt;em&gt;weird&lt;/em&gt; these days, and after running into a few bumps I thought I'd share my compiled notes that streamlined a few different pages in the Puppet help documentation. Note: this is for manual setup. At some point I'll add the super fun Puppet version of this to make it simple and automated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;One of the following: a Puppet Core license, a Puppet Enterprise License, a Puppet Core development license.&lt;/li&gt;
&lt;li&gt;a Linux workstation. In this example I'm working with Fedora 33.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Gather Your Credentials
&lt;/h3&gt;

&lt;p&gt;First things first, let's get our credentials in order.&lt;/p&gt;

&lt;h4&gt;
  
  
  For Puppet Enterprise users:
&lt;/h4&gt;

&lt;p&gt;The username is &lt;strong&gt;license-id&lt;/strong&gt;. The password can be found via the PE console. Log into the console, click on &lt;strong&gt;License&lt;/strong&gt; in the left side menus and then click &lt;strong&gt;Copy license id&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  For Puppet Core users:
&lt;/h4&gt;

&lt;p&gt;The username is &lt;strong&gt;forge-key&lt;/strong&gt;. The password can be found and/or created by logging into the Puppet Forge. Click on your account at the upper right corner and select &lt;strong&gt;View Profile&lt;/strong&gt;. On the left side, select &lt;strong&gt;API Keys&lt;/strong&gt;. Generate an API key and copy the key. That is your password. Make a note to save this for future use as once you leave that page you'll have to create a new one if you forget it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Download and Setup the Repository File
&lt;/h3&gt;

&lt;p&gt;First, let's grab the repository. You can find the relevant RPM or DEB from either &lt;a href="//yum-puppetcore.puppet.com/public"&gt;yum-puppetcore.puppet.com/public&lt;/a&gt; or &lt;a href="//apt-puppetcore.puppet.com/public"&gt;apt-puppetcore.puppet.com/public&lt;/a&gt;. Once you've found the right one, let's download and install!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://yum-puppetcore.puppet.com/public/puppet8-release-el-9.noarch.rpm

&lt;span class="nb"&gt;sudo &lt;/span&gt;rpm &lt;span class="nt"&gt;-ivh&lt;/span&gt; puppet8-release-el-8-noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you've done the above, you'll be able to edit the repo file at /etc/yum.repos.d/puppet8-release.repo. Let's take a look at the contents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[puppet8]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;Puppet 8 Repository el 8 - $basearch&lt;/span&gt;
&lt;span class="py"&gt;baseurl&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;https://yum-puppetcore.puppet.com/puppet8/el/8/$basearch&lt;/span&gt;
&lt;span class="py"&gt;gpgkey&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puppet8-release&lt;/span&gt;
&lt;span class="py"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;gpgcheck&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;

&lt;span class="c"&gt;## Add authentication here by uncommenting and filling in values
&lt;/span&gt;
&lt;span class="c"&gt;#username=&amp;lt;api_user&amp;gt;
#password=&amp;lt;api_key&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's pretty straightforward here. Remove the &lt;code&gt;#&lt;/code&gt; from username and password, then copy your username and password from above into the &lt;code&gt;&amp;lt;api_user&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;api_key&amp;gt;&lt;/code&gt; spaces, respectively. Save and quit editing the file.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Update and Install
&lt;/h3&gt;

&lt;p&gt;At this point we have our repo file, we have our credentials configured and we just need to update the repos and install pdk. a simple &lt;code&gt;yum update&lt;/code&gt; followed by &lt;code&gt;yum install pdk&lt;/code&gt; should get us there.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;root@choplifter:/home/matthew#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;yum update
&lt;span class="go"&gt;Updating and loading repositories:
 Puppet 8 Repository el 8 - x86_64            100% |  14.2 KiB/s |  14.1 KiB |  00m01s
Repositories loaded.
Nothing to do.
&lt;/span&gt;&lt;span class="gp"&gt;root@choplifter:/home/matthew#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;pdk
&lt;span class="go"&gt;Updating and loading repositories:
Repositories loaded.
Package                   Arch     Version                    Repository          Size
Installing:
 pdk                      x86_64   3.6.1.1-1.el9              puppet8        223.8 MiB

Transaction Summary:
 Installing:         1 package

Total size of inbound packages is 57 MiB. Need to download 57 MiB.
After this operation, 224 MiB extra will be used (install 224 MiB, remove 0 B).
Is this ok [y/N]: Y
[1/1] pdk-0:3.6.1.1-1.el9.x86_64              100% |  15.8 MiB/s |  57.0 MiB |  00m04s
--------------------------------------------------------------------------------------
[1/1] Total                                   100% |  15.8 MiB/s |  57.0 MiB |  00m04s
Running transaction
Importing OpenPGP key 0x9E61EF26:
&lt;/span&gt;&lt;span class="gp"&gt; UserID     : "Puppet, Inc. Release Key (Puppet, Inc. Release Key) &amp;lt;release@puppet.com&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"
&lt;/span&gt;&lt;span class="go"&gt; Fingerprint: D6811ED3ADEEB8441AF5AA8F4528B6CD9E61EF26
 From       : file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puppet8-release
Is this ok [y/N]: Y
The key was successfully imported.
[1/3] Verify package files                    100% |   5.0   B/s |   1.0   B |  00m00s
[2/3] Prepare transaction                     100% |   3.0   B/s |   1.0   B |  00m00s
[3/3] Installing pdk-0:3.6.1.1-1.el9.x86_64   100% |  72.0 MiB/s | 228.5 MiB |  00m03s
Complete!

&lt;/span&gt;&lt;span class="gp"&gt;root@choplifter:/home/matthew#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pdk &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;span class="go"&gt;3.6.1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all there is to it! As an added bonus, this is the same repo for Bolt and all the Puppet Core bits, so if you need the agent on your box it's as easy as another &lt;code&gt;yum install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Or dnf. Whatever.&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>pdk</category>
      <category>linux</category>
    </item>
    <item>
      <title>ConfDroid Puppet Modules - Selinux</title>
      <dc:creator>12ww1160</dc:creator>
      <pubDate>Sat, 11 Apr 2026 10:04:51 +0000</pubDate>
      <link>https://dev.to/12ww1160/confdroid-puppet-modules-selinux-4im3</link>
      <guid>https://dev.to/12ww1160/confdroid-puppet-modules-selinux-4im3</guid>
      <description>&lt;h2&gt;
  
  
  Introducing confdroid_selinux: Declarative SELinux Management for Your Rocky 9 Servers
&lt;/h2&gt;

&lt;p&gt;Security-Enhanced Linux (SELinux) is one of the most powerful built-in defenses on modern Linux systems. Unlike traditional permission-based security (user/group/other), SELinux adds &lt;strong&gt;mandatory access control (MAC)&lt;/strong&gt; at the kernel level. It labels every process, file, directory, and network port with a security context and enforces strict policies that say exactly what each subject is allowed to do with each object — no matter what the file permissions say.&lt;/p&gt;

&lt;p&gt;This means even if an attacker gains root or tricks a service into writing a malicious file, SELinux can still block the attack because the file simply doesn’t have the right context.&lt;br&gt;
Many enterprise Linux distributions enable SELinux &lt;strong&gt;by default&lt;/strong&gt; in enforcing mode on fresh installs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rocky Linux 9&lt;/li&gt;
&lt;li&gt;AlmaLinux 9&lt;/li&gt;
&lt;li&gt;Red Hat Enterprise Linux (RHEL) 9&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On these systems, SELinux is not an afterthought — it’s a core part of the security model.&lt;/p&gt;

&lt;h2&gt;
  
  
  How SELinux Stops Real-World Attacks
&lt;/h2&gt;

&lt;p&gt;Imagine an attacker sends a phishing email with a malicious script disguised as a legitimate configuration file. The user (or a compromised service) downloads and places the file in &lt;code&gt;/tmp&lt;/code&gt; or a web directory.&lt;/p&gt;

&lt;p&gt;Without SELinux:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the file has execute permissions, the attacker might be able to run it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With SELinux (enforcing mode):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The file gets created with the wrong security context (for example, &lt;code&gt;user_tmp_t&lt;/code&gt; instead of &lt;code&gt;httpd_exec_t&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Even if the attacker somehow makes the file executable, SELinux denies execution or access because the policy doesn’t allow it.&lt;/li&gt;
&lt;li&gt;The attack is stopped cold, and an audit log entry is generated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SELinux turns potential disasters into harmless denied operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Manual SELinux Management
&lt;/h2&gt;

&lt;p&gt;While SELinux is powerful, managing it consistently across many servers is painful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forgetting to run &lt;code&gt;restorecon&lt;/code&gt; after placing files&lt;/li&gt;
&lt;li&gt;Accidentally setting the wrong mode (setenforce)&lt;/li&gt;
&lt;li&gt;Configuration drift between hosts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s exactly why I built &lt;strong&gt;confdroid_selinux&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What confdroid_selinux Does
&lt;/h2&gt;

&lt;p&gt;This new Puppet 8 module (tested on Rocky 9) gives you full declarative control over SELinux:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installs all required SELinux tools and binaries&lt;/li&gt;
&lt;li&gt;Manages the main configuration file &lt;code&gt;/etc/sysconfig/selinux&lt;/code&gt; with correct permissions and SELinux contexts&lt;/li&gt;
&lt;li&gt;Controls the global SELinux mode (enforcing or permissive) — the Puppet equivalent of setenforce&lt;/li&gt;
&lt;li&gt;Ensures every file and directory managed by other Confdroid modules receives the proper SELinux context&lt;/li&gt;
&lt;li&gt;Works cleanly on enforcing-mode systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All other Confdroid modules (see the &lt;a href="https://sourcecode.confdroid.com/confdroid/puppet_collection" rel="noopener noreferrer"&gt;full collection overview&lt;/a&gt;) already include proper SELinux context handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_apache" rel="noopener noreferrer"&gt;confdroid_apache&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_gitea" rel="noopener noreferrer"&gt;confdroid_gitea&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_php" rel="noopener noreferrer"&gt;confdroid_php&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_php" rel="noopener noreferrer"&gt;confdroid_fail2ban&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_automatic" rel="noopener noreferrer"&gt;confdroid_automatic&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_nrpe" rel="noopener noreferrer"&gt;confdroid_nrpe&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_nagios" rel="noopener noreferrer"&gt;confdroid_nagios&lt;/a&gt;,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and many more.&lt;/p&gt;

&lt;p&gt;They work even better when &lt;code&gt;**confdroid_selinux**&lt;/code&gt; is present, because the global policy and mode are managed in one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  SELinux Management Flow with the Module
&lt;/h2&gt;

&lt;p&gt;Here’s how the module turns your Puppet run into reliable SELinux enforcement:&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%2F20z827cy5qyeoyp8iecz.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%2F20z827cy5qyeoyp8iecz.png" alt="Mermaid diagram" width="542" height="1166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Easy Deployment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple inclusion&lt;/strong&gt;:
in your site.pp or nodes.pp:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight puppet"&gt;&lt;code&gt;&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nc"&gt;confdroid_selinux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;with Foreman (recommended)&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add the &lt;code&gt;confdroid_selinux::params&lt;/code&gt; class to the host or host group and override parameters (mode, etc.) as smart class parameters.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Important notes:&lt;br&gt;
Test in a non-production environment first.&lt;br&gt;
If you are switching from disabled to enforcing mode, a reboot is required (the module does not reboot automatically to avoid surprises).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can find the full module, source code, and parameter reference here:&lt;br&gt;
&lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_selinux" rel="noopener noreferrer"&gt;→&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;SELinux is no longer optional on modern enterprise Linux. With &lt;code&gt;confdroid_selinux&lt;/code&gt;, you get consistent, version-controlled, and fully automated SELinux management that works hand-in-hand with the rest of the Confdroid collection.&lt;br&gt;
Your servers stay secure by default — even when things go wrong elsewhere.&lt;br&gt;
Have you been running SELinux in enforcing mode across your fleet, or are you still in permissive because of management headaches? Would you like to see more advanced features (custom Booleans, custom modules, etc.) in a future version? Let me know in the comments!&lt;/p&gt;




&lt;p&gt;Did you find this post helpful?  You can support me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/grizzly_coda" rel="noopener noreferrer"&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%2F2znn4km0i2jib7ru1sm9.png" alt="" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hetzner.cloud/?ref=EY14C8Tema9j" rel="noopener noreferrer"&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%2Fyab43i0ysz9uwuq267u0.png" alt="Hetzner Referral" width="400" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://confdroid.substack.com/subscribe?params=%5Bobject%20Object%5D" rel="noopener noreferrer"&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%2F9r49xyl05rwkjb52xbqg.png" alt="Substack" width="250" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://feedback.confdroid.com/" rel="noopener noreferrer"&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%2Fy7d47hck6vziak35nfgf.png" alt="ConfDroid Feedback Portal" width="300" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Related posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-pilot/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Pilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-puppet/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Puppet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-resources/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - confdroid_resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-postgresql/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Postgresql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-gitea/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Gitea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-apache/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nagios/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Nagios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nrpe/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - NRPE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-fail2ban/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Fail2ban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-automatic/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Automatic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-ssh/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-java/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>selinux</category>
      <category>security</category>
      <category>puppet</category>
      <category>foreman</category>
    </item>
    <item>
      <title>Puppet Core 8.18.0 is out: macOS 15 support and key security updates</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Thu, 09 Apr 2026 12:06:38 +0000</pubDate>
      <link>https://dev.to/puppet/puppet-core-8180-is-out-macos-15-support-and-key-security-updates-2ng8</link>
      <guid>https://dev.to/puppet/puppet-core-8180-is-out-macos-15-support-and-key-security-updates-2ng8</guid>
      <description>&lt;p&gt;You can now download Puppet Core &lt;strong&gt;8.18.0&lt;/strong&gt;! This update adds support for macOS 15 and includes several important security updates to help keep your infrastructure protected.&lt;/p&gt;

&lt;p&gt;As always, Puppet Core releases focus on stability, platform support, and staying ahead of reported vulnerabilities.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://help.puppet.com/core/current/Content/PuppetCore/PuppetReleaseNotes/release_notes_puppet_x-8-18-0.htm" rel="noopener noreferrer"&gt;Official Puppet Core 8.18 release notes&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s new in Puppet Core 8.18.0
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Support for macOS 15&lt;/strong&gt;: Puppet Core now supports macOS 15 on both x86_64 and ARM architectures. This enables continued management of macOS systems using the same automation controls and policies you already rely on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security focused dependency updates
&lt;/h2&gt;

&lt;p&gt;Security remains a top priority in every Puppet Core release. This release includes updates to several bundled components to address recently disclosed security vulnerabilities. By delivering these updates as part of hardened Puppet Core builds, you reduce dependency risk without tracking, validating, or rebuilding components independently. &lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 libxml2 updated
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;libxml2&lt;/strong&gt; has been updated to &lt;strong&gt;version 2.15.2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Addresses the following CVEs:

&lt;ul&gt;
&lt;li&gt;CVE-2026-0989&lt;/li&gt;
&lt;li&gt;CVE-2026-0990&lt;/li&gt;
&lt;li&gt;CVE-2026-0992&lt;/li&gt;
&lt;li&gt;CVE-2026-1757&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔐 zlib gem updated
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;zlib gem&lt;/strong&gt; updated to &lt;strong&gt;version 3.0.1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Addresses:

&lt;ul&gt;
&lt;li&gt;CVE-2026-27820&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔐 curl updated
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;curl&lt;/strong&gt; updated to &lt;strong&gt;version 8.19.0&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Addresses:

&lt;ul&gt;
&lt;li&gt;CVE-2026-1965&lt;/li&gt;
&lt;li&gt;CVE-2026-3783&lt;/li&gt;
&lt;li&gt;CVE-2026-3784&lt;/li&gt;
&lt;li&gt;CVE-2026-3805&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If you rely on Puppet Core in security‑sensitive or regulated environments, this release is strongly recommended.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Puppet Core 8.18.0
&lt;/h2&gt;

&lt;p&gt;You can upgrade to Puppet Core 8.18.0 using your existing Puppet Core repositories and standard upgrade workflows. Upgrading to Puppet Core 8.18.0 helps you take advantage of the latest platform support, reduce exposure to dependency related security risk, and rely on vendor-tested packages instead of managing updates yourself.&lt;/p&gt;

&lt;p&gt;As always:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test upgrades in a staging environment first&lt;/li&gt;
&lt;li&gt;Review the full release notes for platform‑specific details&lt;/li&gt;
&lt;li&gt;Roll out broadly once validated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📄 &lt;strong&gt;Puppet Core Installation Docs:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/core/current/Content/PuppetCore/install_puppet.htm" rel="noopener noreferrer"&gt;Installing Puppet Core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.puppet.com/core/current/Content/PuppetCore/upgrade.htm" rel="noopener noreferrer"&gt;Upgrading Puppet Core&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let us know how it goes
&lt;/h2&gt;

&lt;p&gt;If you’re upgrading to 8.18.0, running Puppet Core on macOS 15, or have feedback on this release, let us know in the comments. Your input helps shape future updates.&lt;/p&gt;

&lt;p&gt;Happy puppeting!&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>devops</category>
      <category>security</category>
      <category>automation</category>
    </item>
    <item>
      <title>Puppet Enterprise - Neue Releases und Upgrade Zyklen</title>
      <dc:creator>Martin Alfke</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:59:44 +0000</pubDate>
      <link>https://dev.to/betadots/puppet-enterprise-neue-releases-und-upgrade-zyklen-i13</link>
      <guid>https://dev.to/betadots/puppet-enterprise-neue-releases-und-upgrade-zyklen-i13</guid>
      <description>&lt;p&gt;Bisher gab es bei Puppet Enterprise 2 unterschiedliche Support Releases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LTS - Long Term Support und&lt;/li&gt;
&lt;li&gt;STS - Standard (oder Short) Term Support&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Die LTS Releases hatten üblicherweise 2 bis 3 Jahre Support, bevor man ein Upgrade durchführen musste.&lt;br&gt;
Bei STS Releases bezog sich der Support nur auf das jeweils letzte Release.&lt;/p&gt;

&lt;p&gt;Mit Puppet Enterprise 2026 (&lt;a href="https://www.puppet.com/products/puppet-enterprise/support-lifecycle" rel="noopener noreferrer"&gt;Release ist angekündigt für August 2026&lt;/a&gt;) hat &lt;a href="https://perforce.com" rel="noopener noreferrer"&gt;Perforce&lt;/a&gt; die Support Matrix überarbeitet.&lt;br&gt;
Der neue Support Zyklus wird als &lt;code&gt;Latest / Latest-1&lt;/code&gt; bezeichnet.&lt;/p&gt;

&lt;p&gt;In diesem Posting werden die wesentlichen Unterschiede dargestellt und was man in Zukunft bei der Nutzung von Puppet Enterprise berücksichtigen sollte.&lt;/p&gt;




&lt;h2&gt;
  
  
  Latest
&lt;/h2&gt;

&lt;p&gt;Mit &lt;code&gt;Latest&lt;/code&gt; wird das jeweils aktuelle Puppet Enterprise &lt;strong&gt;Major&lt;/strong&gt; Release bezeichnet.&lt;br&gt;
Aktuell ist dies das letzte Release von PE 2025.&lt;/p&gt;

&lt;p&gt;Mit dem Release von PE 2026, wird PE 2026 das &lt;code&gt;Latest&lt;/code&gt; Support Release.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Latest&lt;/code&gt; Releases haben einen vollständigen Support über einen Zeitraum von 12 Monaten.&lt;br&gt;
Innerhalb dieses Zeitraumes sind neue Features und Verbesserungen, Sicherheitsupdates und Fehlerkorrekturen im Support verfügbar.&lt;/p&gt;

&lt;p&gt;Danach gibt es in der Folge Minor Releases, die vierteljährlich zur Verfügung gestellt werden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latest-1
&lt;/h2&gt;

&lt;p&gt;Als &lt;code&gt;Latest-1&lt;/code&gt; wird das jeweilige vorherige Release bezeichnet, nachdem eine neue Major Version veröffentlicht wurde.&lt;/p&gt;

&lt;p&gt;Wenn PE 2026 released wird, wird das PE 2025 Release zu &lt;code&gt;Latest-1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Latest-1&lt;/code&gt; Releases haben einen eingeschränkten Support über einen Zeitraum von 12 Monaten.&lt;br&gt;
Innerhalb dieses Zeitraumes sind nur Sicherheitsupdates und Fehlerkorrekturen im Support verfügbar.&lt;/p&gt;

&lt;h2&gt;
  
  
  aktuelles LTS Releases
&lt;/h2&gt;

&lt;p&gt;Das aktuelle LTS Release von Puppet Enterprise ist die Version 2023.8.&lt;br&gt;
Mit dem Release von PE 2026 wird diese Version nicht mehr unterstützt.&lt;/p&gt;

&lt;p&gt;Alle anderen älteren Puppet Enterprise Releases sind nicht mehr im Support enthalten.&lt;br&gt;
Wenn eine ältere Puppet Enterprise Version als PE 2025 im Einsatz ist, sollte unbedingt ein Upgrade geplant und durchgeführt werden. Welche Upgrades möglich sind, ist in der &lt;a href="https://help.puppet.com/pe/current/topics/supported_upgrade_paths.htm" rel="noopener noreferrer"&gt;Dokumentation zu Puppet Enterprise Upgrades&lt;/a&gt; hinterlegt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Releases und Support Zeitraum
&lt;/h2&gt;

&lt;p&gt;Stand 08.04.2026&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PE Version&lt;/th&gt;
&lt;th&gt;Support Beginn&lt;/th&gt;
&lt;th&gt;Support Name&lt;/th&gt;
&lt;th&gt;Support Umfang&lt;/th&gt;
&lt;th&gt;Support Ende&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2023.8.x&lt;/td&gt;
&lt;td&gt; aktuell&lt;/td&gt;
&lt;td&gt;LTS&lt;/td&gt;
&lt;td&gt;Vollständiger Support&lt;/td&gt;
&lt;td&gt;08/2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2023.8.x&lt;/td&gt;
&lt;td&gt;08/2026&lt;/td&gt;
&lt;td&gt;LTS&lt;/td&gt;
&lt;td&gt;eingeschränkter Support&lt;/td&gt;
&lt;td&gt;02/2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 2025.x&lt;/td&gt;
&lt;td&gt;aktuell&lt;/td&gt;
&lt;td&gt;Latest&lt;/td&gt;
&lt;td&gt;Vollständiger Support&lt;/td&gt;
&lt;td&gt;08/2026&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025.x&lt;/td&gt;
&lt;td&gt;08/2026&lt;/td&gt;
&lt;td&gt;Latest-1&lt;/td&gt;
&lt;td&gt;eingeschränkter Support&lt;/td&gt;
&lt;td&gt;08/2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026.x&lt;/td&gt;
&lt;td&gt;08/2026&lt;/td&gt;
&lt;td&gt;Latest&lt;/td&gt;
&lt;td&gt; Vollständiger Support&lt;/td&gt;
&lt;td&gt;??/2027&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026.x&lt;/td&gt;
&lt;td&gt;??/2027&lt;/td&gt;
&lt;td&gt;Latest-1&lt;/td&gt;
&lt;td&gt; eingeschränkter Support&lt;/td&gt;
&lt;td&gt;??/2028&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 2027.x&lt;/td&gt;
&lt;td&gt;??/2027&lt;/td&gt;
&lt;td&gt;Latest&lt;/td&gt;
&lt;td&gt;Vollständiger Support&lt;/td&gt;
&lt;td&gt;??/2028&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2027.x&lt;/td&gt;
&lt;td&gt;??/2028&lt;/td&gt;
&lt;td&gt;Latest-1&lt;/td&gt;
&lt;td&gt;eingeschränkter Support&lt;/td&gt;
&lt;td&gt;??/2029&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2028.x&lt;/td&gt;
&lt;td&gt;??/2028&lt;/td&gt;
&lt;td&gt; Latest&lt;/td&gt;
&lt;td&gt; Vollständiger Support&lt;/td&gt;
&lt;td&gt; ??/2029&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Zusammenfassung
&lt;/h2&gt;

&lt;p&gt;Perforce entwirrt und standardisiert die Support Zyklen.&lt;br&gt;
Mit den jährliche Major Releases und definierten Zeiträumen für den eingeschränkten Support können Kunden innerhalb von 24 Monaten ein Update durchführen, ohne den Support zu verlieren.&lt;/p&gt;

&lt;p&gt;Bei der Vorbereitung und Durchführung von Updates unterstützen wir unsere Kunden gern.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>puppet</category>
      <category>news</category>
    </item>
    <item>
      <title>Building a Compliance-First Digital Entertainment Platform: Lessons from BLCTX Global's Asia Launch</title>
      <dc:creator>BLCTX Global </dc:creator>
      <pubDate>Tue, 07 Apr 2026 12:23:43 +0000</pubDate>
      <link>https://dev.to/blctxglobal/building-a-compliance-first-digital-entertainment-platform-lessons-from-blctx-globals-asia-launch-56jp</link>
      <guid>https://dev.to/blctxglobal/building-a-compliance-first-digital-entertainment-platform-lessons-from-blctx-globals-asia-launch-56jp</guid>
      <description>&lt;p&gt;Most write-ups about gaming platforms focus on the front-end — the UX, the animations, the payment flow. I want to talk about the part of the stack that doesn't get enough attention: compliance architecture.&lt;br&gt;
The launch of BLCTX Global — the international brand of Singapore Pools, now expanding into Malaysia, India, Thailand, and Vietnam — is a useful case study in what it actually means to build a regulated digital platform from the ground up.&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%2Fs4f4yyj2117uvemzy9iy.jpg" 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%2Fs4f4yyj2117uvemzy9iy.jpg" alt=" " width="800" height="513"&gt;&lt;/a&gt;&lt;br&gt;
The Core Engineering Challenge&lt;br&gt;
When you operate across multiple jurisdictions, "compliance" stops being a checkbox and becomes a system design problem. Each market has its own rules around:&lt;/p&gt;

&lt;p&gt;Age verification (KYC thresholds vary)&lt;br&gt;
Payment processing and AML monitoring&lt;br&gt;
Data residency and user privacy&lt;br&gt;
Responsible-play tooling (deposit limits, cool-off periods, self-exclusion)&lt;br&gt;
Audit logging and regulatory reporting&lt;/p&gt;

&lt;p&gt;A platform like BLCTX Global, backed by 57 years of Singapore Pools' operating discipline, has to encode all of this into a system that still feels seamless to the end user.&lt;br&gt;
Architectural Principles Worth Borrowing&lt;br&gt;
Whether you're building in regtech, fintech, or any high-trust domain, there are takeaways here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compliance as a service, not a feature. Treat KYC, AML, and responsible-use tooling as core platform services that every product surface consumes — not as bolt-ons per feature.&lt;/li&gt;
&lt;li&gt;Per-jurisdiction configuration. Avoid hardcoding rules. Use a policy engine so a single deployment can serve multiple markets with different rule sets.&lt;/li&gt;
&lt;li&gt;Transparency by design. Every transaction, every account action, every payout should be auditable end-to-end. If a regulator asks "what happened on April 7 at 2:13pm for user X," the answer should take seconds to produce.&lt;/li&gt;
&lt;li&gt;User protection defaults. Default limits are stricter than the maximum allowed. Users can opt up — but they have to actively choose to.
Why This Matters Beyond Gaming
The principles BLCTX Global is operationalizing — institutional compliance, transparency, user protection — are exactly the principles every high-trust digital platform needs, whether you're shipping payments, healthcare, or identity infrastructure.
The lesson: compliance architecture is product architecture. Treat it that way from day one and your platform earns trust as a feature, not a marketing claim.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What compliance challenges are you tackling in your own platform builds? Drop a comment — I'd love to compare notes.&lt;/p&gt;

</description>
      <category>puppet</category>
      <category>fintech</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>ConfDroid Puppet Modules - Automatic</title>
      <dc:creator>12ww1160</dc:creator>
      <pubDate>Tue, 07 Apr 2026 10:59:02 +0000</pubDate>
      <link>https://dev.to/12ww1160/confdroid-puppet-modules-automatic-537d</link>
      <guid>https://dev.to/12ww1160/confdroid-puppet-modules-automatic-537d</guid>
      <description>&lt;h2&gt;
  
  
  Introducing confdroid_automatic: Hands-Off OS Updates for Your Rocky 9 Servers
&lt;/h2&gt;

&lt;p&gt;Keeping operating systems patched is one of the most important — yet often neglected — parts of server maintenance. Security updates arrive regularly, and manually applying them across dozens or hundreds of machines quickly becomes a burden and a source of risk.&lt;/p&gt;

&lt;p&gt;That’s why I’m happy to release &lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_automatic" rel="noopener noreferrer"&gt;&lt;strong&gt;confdroid_automatic&lt;/strong&gt;&lt;/a&gt;, the latest addition to the Confdroid Puppet collection.&lt;/p&gt;

&lt;p&gt;This module brings reliable, automated OS updates to Rocky 9 (and other RHEL 9-based) systems by managing &lt;code&gt;dnf-automatic&lt;/code&gt; declaratively with Puppet 8. It installs the necessary packages, configures update behavior, applies correct SELinux contexts, and ensures the systemd timer runs as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Automated Updates Matter
&lt;/h2&gt;

&lt;p&gt;Security patches close vulnerabilities before attackers can exploit them. &lt;code&gt;dnf-automatic&lt;/code&gt; already does most of the heavy lifting out of the box — it can download and apply updates on a schedule, send notifications, and even reboot when needed. The challenge is managing it consistently across your entire fleet without configuration drift.&lt;/p&gt;

&lt;p&gt;Additionally, production systems may need a different set of policies for updates than development or staging system, i.e. only security updates, while other stages use fully updated systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;confdroid_automatic&lt;/strong&gt; solves that by turning dnf-automatic into a fully Puppet-controlled service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Installs and configures the &lt;code&gt;dnf-automatic&lt;/code&gt; package&lt;/li&gt;
&lt;li&gt;Manages the main configuration file (&lt;code&gt;/etc/dnf/automatic.conf&lt;/code&gt;) with proper permissions and SELinux contexts&lt;/li&gt;
&lt;li&gt;Controls the &lt;code&gt;dnf-automatic.timer&lt;/code&gt; systemd service&lt;/li&gt;
&lt;li&gt;Supports flexible parameters you can override via Foreman ENC or Hiera&lt;/li&gt;
&lt;li&gt;Includes sensible defaults for production use while allowing fine-tuning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Main tunable parameters include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ac_upgrade_type&lt;/code&gt;-  'default', 'security', 'minimal' or 'all'&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ac_apply_updates&lt;/code&gt; — whether to actually install updates (or just download them)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ac_download_updates&lt;/code&gt; — enable downloading of available packages&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ac_random_sleep&lt;/code&gt; — add a random delay (in seconds) to prevent all servers from updating at the exact same moment&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ac_reboot&lt;/code&gt; - when to reboot after applied updates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ac_email_to&lt;/code&gt; - which email address to notify&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automatic Update Flow
&lt;/h2&gt;

&lt;p&gt;Here’s how the module turns Puppet configuration into real-world automated patching:&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%2Faxbnqljesfg108m7sdqs.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%2Faxbnqljesfg108m7sdqs.png" alt="Mermaid diagram" width="508" height="1780"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The flow ensures updates are applied safely and predictably. The optional random sleep helps avoid “thundering herd” problems in larger environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use It
&lt;/h2&gt;

&lt;p&gt;Import the module via r10k (Puppetfile).&lt;/p&gt;

&lt;p&gt;The simplest way to enable automatic updates on a node is in site.pp:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight puppet"&gt;&lt;code&gt;&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="nc"&gt;confdroid_automatic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To apply via Foreman:&lt;/p&gt;

&lt;p&gt;Assign &lt;strong&gt;confdroid_automatic::params&lt;/strong&gt; to the host or hostgroup in Question and override parameters as required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Important Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Test thoroughly in a non-production environment first. Automatic updates can cause reboots or service restarts.&lt;/li&gt;
&lt;li&gt;If you already have a manual dnf-automatic configuration, the module will overwrite it — start clean or review the generated config carefully.&lt;/li&gt;
&lt;li&gt;The module handles SELinux contexts automatically, so it works smoothly on enforcing-mode Rocky 9 systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find the full module, source code, and parameter reference &lt;a href="https://sourcecode.confdroid.com/confdroid/confdroid_automatic" rel="noopener noreferrer"&gt;here: https://sourcecode.confdroid.com/confdroid/confdroid_automatic&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;With &lt;strong&gt;confdroid_automatic&lt;/strong&gt;, keeping your Rocky 9 fleet patched becomes a truly hands-off process. Combined with the rest of the Confdroid collection (including monitoring via &lt;code&gt;confdroid_nagios&lt;/code&gt;), you get a consistent, secure, and maintainable update strategy.&lt;/p&gt;

&lt;p&gt;Automated patching is no longer a nice-to-have — it’s a baseline security requirement. This module makes it simple, repeatable, and fully integrated into your Puppet workflow.&lt;/p&gt;

&lt;p&gt;Have you been managing OS updates manually or with scripts? Would you like automatic reboots enabled or prefer a download-only approach? Drop your thoughts or questions in the comments — I’d love to hear how you handle patching in your environment.&lt;/p&gt;




&lt;p&gt;Did you find this post helpful?  You can support me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/grizzly_coda" rel="noopener noreferrer"&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%2F2znn4km0i2jib7ru1sm9.png" alt="" width="170" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hetzner.cloud/?ref=EY14C8Tema9j" rel="noopener noreferrer"&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%2Fyab43i0ysz9uwuq267u0.png" alt="Hetzner Referral" width="400" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://confdroid.substack.com/subscribe?params=%5Bobject%20Object%5D" rel="noopener noreferrer"&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%2F9r49xyl05rwkjb52xbqg.png" alt="Substack" width="250" height="30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://feedback.confdroid.com/" rel="noopener noreferrer"&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%2Fy7d47hck6vziak35nfgf.png" alt="ConfDroid Feedback Portal" width="300" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Related posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-pilot/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Pilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-puppet/" rel="noopener noreferrer"&gt;Confdroid Puppet Modules - Puppet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-resources/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - confdroid_resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-postgresql/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Postgresql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-gitea/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Gitea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-apache/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Apache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nagios/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Nagios&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-nrpe/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - NRPE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-fail2ban/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Fail2ban&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-selinux/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - Selinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-ssh/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://confdroid.com/confdroid-puppet-module-java/" rel="noopener noreferrer"&gt;ConfDroid Puppet Modules - java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>confdroid</category>
      <category>updates</category>
      <category>puppet</category>
      <category>foreman</category>
    </item>
    <item>
      <title>Puppetlabs Modules Roundup – March 2026</title>
      <dc:creator>Jason St-Cyr</dc:creator>
      <pubDate>Mon, 06 Apr 2026 14:24:03 +0000</pubDate>
      <link>https://dev.to/puppet/puppetlabs-modules-roundup-march-2026-3bde</link>
      <guid>https://dev.to/puppet/puppetlabs-modules-roundup-march-2026-3bde</guid>
      <description>&lt;p&gt;March 2026 brought 4 Puppetlabs module releases in the Puppetlabs Forge catalog. Read along to see what changed this month!&lt;/p&gt;

&lt;p&gt;Across the month, the clearest themes were compatibility updates across Puppet Enterprise (PE), supported platforms, and operational hardening and troubleshooting improvements.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Compatibility updates across PE and supported platforms
&lt;/h3&gt;

&lt;p&gt;March releases leaned toward version-alignment work, with updates for newer Puppet Enterprise releases, Ubuntu 24.04 benchmark coverage, and dependency ranges that allow newer supporting modules.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added support for PE 2023.8.9 and 2025.9.0.&lt;/li&gt;
&lt;li&gt;Added CIS Benchmark support for Ubuntu 24.04 Server Levels 1 and 2.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Operational hardening and troubleshooting improvements
&lt;/h3&gt;

&lt;p&gt;Several releases focused on making "Day Two" operations safer and easier to debug through better validation, more useful logging, and targeted runtime fixes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added installer untar checks and deduplicated hosts in the legacy compiler group.&lt;/li&gt;
&lt;li&gt;Moved most SCE-specific logging into the Puppet agent run log for easier debugging.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The following is an alphabetical listing of modules which received updates in March 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;
  
  
  cd4pe 3.4.0
&lt;/h3&gt;

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

&lt;p&gt;This release focuses on updated puppetlabs-docker and puppetlabs-hocon dependencies to allow usage of newer versions while also addressing updated module with PDK 3.6.1.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updated puppetlabs-docker and puppetlabs-hocon dependencies to allow usage of newer versions&lt;/li&gt;
&lt;li&gt;Updated module with PDK 3.6.1&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  peadm 3.36.0
&lt;/h3&gt;

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

&lt;p&gt;This release focuses on adding support for PE 2023.8.9 and 2025.9.0 while also addressing deduplicate hosts in legacy compiler group.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding support for PE 2023.8.9 and 2025.9.0 &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/657" rel="noopener noreferrer"&gt;#657&lt;/a&gt; (&lt;a href="https://github.com/Jade2153" rel="noopener noreferrer"&gt;Jade2153&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PE-43572) deduplicate hosts in legacy compiler group &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/658" rel="noopener noreferrer"&gt;#658&lt;/a&gt; (&lt;a href="https://github.com/davidmalloncares" rel="noopener noreferrer"&gt;davidmalloncares&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;(PE-42686) Add checks to installer untar command &lt;a href="https://github.com/puppetlabs/puppetlabs-peadm/pull/654" rel="noopener noreferrer"&gt;#654&lt;/a&gt; (&lt;a href="https://github.com/davidmalloncares" rel="noopener noreferrer"&gt;davidmalloncares&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  sce_linux 2.6.0
&lt;/h3&gt;

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

&lt;p&gt;This release focuses on support for Ubuntu 24.04. You can use Security Compliance Enforcement (SCE) to enforce the Center for Internet Security (CIS) Benchmark for Ubuntu Linux 24.04, v1.0.0, Server Levels 1 and 2 while also addressing support for Puppet module dependencies.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check the official &lt;a href="https://help.puppet.com/sce/current/linux/scel_relnotes_260.htm" rel="noopener noreferrer"&gt;release notes for sce_linux 2.6.0&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  sqlserver 5.1.1
&lt;/h3&gt;

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

&lt;p&gt;Small change this month to ensure permission the variable is set.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(MODULES-11613) Set permission variable in permission sql EPP &lt;a href="https://github.com/puppetlabs/puppetlabs-sqlserver/pull/500" rel="noopener noreferrer"&gt;#500&lt;/a&gt; (&lt;a href="https://github.com/shubhamshinde360" rel="noopener noreferrer"&gt;shubhamshinde360&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;That wraps up the March 2026 roundup. If any of the modules overlap with your environment, the linked Forge pages and release notes are worth a closer look.&lt;/p&gt;

&lt;p&gt;Feedback on the series is always useful, especially if there are module families or release-note patterns that deserve more attention in future editions.&lt;/p&gt;

&lt;p&gt;More updates coming next month when the April 2026 releases land.&lt;/p&gt;

</description>
      <category>puppet</category>
    </item>
    <item>
      <title>Cybersecurity 2026: Identity, Autonomy, and the Collapse of Passive Control</title>
      <dc:creator>Eldor Zufarov</dc:creator>
      <pubDate>Thu, 02 Apr 2026 06:03:58 +0000</pubDate>
      <link>https://dev.to/eldor_zufarov_1966/cybersecurity-2026-identity-autonomy-and-the-collapse-of-passive-control-1gbf</link>
      <guid>https://dev.to/eldor_zufarov_1966/cybersecurity-2026-identity-autonomy-and-the-collapse-of-passive-control-1gbf</guid>
      <description>&lt;h2&gt;
  
  
  Cybersecurity 2026: Identity, Autonomy, and the Collapse of Passive Control
&lt;/h2&gt;

&lt;p&gt;The latest industry discussions around AI governance reinforce a reality many engineering teams are already experiencing: identity governance was designed for humans — but the majority of identities executing code today are not.&lt;/p&gt;

&lt;p&gt;AI agents, CI/CD pipelines, service accounts, and ephemeral workloads now authenticate, act, and mutate infrastructure faster than traditional controls can observe.&lt;/p&gt;

&lt;p&gt;We are moving from a world of &lt;strong&gt;User Access&lt;/strong&gt; to a world of &lt;strong&gt;Machine Execution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This shift is not philosophical. It is architectural.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Non‑Human Identities Operate at Machine Speed
&lt;/h2&gt;

&lt;p&gt;In July 2025, a widely discussed incident described how an autonomous AI agent deleted &lt;strong&gt;1,206 database records in seconds&lt;/strong&gt;, ignoring an active code freeze. The example was highlighted in a Cloud Security Alliance industry roundup on AI and identity governance.&lt;/p&gt;

&lt;p&gt;The lesson was not about "AI intelligence failure." The agent behaved according to its permissions.&lt;/p&gt;

&lt;p&gt;The problem was privilege without boundary enforcement.&lt;/p&gt;

&lt;p&gt;Autonomous systems inherit the scope we assign to them. If that scope is excessive, autonomy becomes amplification.&lt;/p&gt;

&lt;p&gt;Traditional IAM models assume:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human pacing&lt;/li&gt;
&lt;li&gt;Manual review windows&lt;/li&gt;
&lt;li&gt;Observable change cycles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agentic systems violate all three assumptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engineering Implication
&lt;/h3&gt;

&lt;p&gt;Security controls must operate at the same velocity as execution. Detection after commit is too late when mutation happens in seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architectural Response: Pre‑Commit Enforcement
&lt;/h3&gt;

&lt;p&gt;Instead of relying purely on runtime detection or post‑merge scanning, enforcement can shift closer to developer intent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intercept commits before merge&lt;/li&gt;
&lt;li&gt;Validate secrets and tokens&lt;/li&gt;
&lt;li&gt;Analyze infrastructure changes semantically&lt;/li&gt;
&lt;li&gt;Block unsafe mutations deterministically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This model replaces passive observation with active boundary control.&lt;/p&gt;

&lt;p&gt;Sentinel Core implements this pattern by operating as a real‑time enforcement layer in the development workflow, preventing unsafe commits before they enter the repository history.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Offboarding Is No Longer a Human Problem
&lt;/h2&gt;

&lt;p&gt;In high‑pressure transitions or rapid restructuring events, disabling Slack or email access is insufficient.&lt;/p&gt;

&lt;p&gt;Machine identities persist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long‑lived service tokens&lt;/li&gt;
&lt;li&gt;CI runners with inherited permissions&lt;/li&gt;
&lt;li&gt;Infrastructure‑as‑Code with embedded credentials&lt;/li&gt;
&lt;li&gt;Kubernetes service accounts with cluster‑wide scope&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If infrastructure state is not continuously validated against declared intent, drift accumulates silently.&lt;/p&gt;

&lt;p&gt;Drift plus stale privilege equals latent risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engineering Implication
&lt;/h3&gt;

&lt;p&gt;Governance must expand beyond user access revocation into verifiable infrastructure integrity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architectural Response: Immutable Audit + IaC Guardrails
&lt;/h3&gt;

&lt;p&gt;Embedding enforcement directly into Infrastructure as Code workflows ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terraform plans are validated before merge&lt;/li&gt;
&lt;li&gt;Kubernetes manifests are policy‑checked pre‑deployment&lt;/li&gt;
&lt;li&gt;Docker configurations are scanned for privilege escalation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each blocked violation can be logged as an immutable artifact tied to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commit hash&lt;/li&gt;
&lt;li&gt;Machine identity&lt;/li&gt;
&lt;li&gt;User mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates an auditable chain of intent, not just activity.&lt;/p&gt;

&lt;p&gt;Sentinel Core integrates this enforcement into repository workflows, generating traceable records for every rejected mutation.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Compliance Must Become Computable
&lt;/h2&gt;

&lt;p&gt;Static documentation cannot keep pace with dynamic AI‑driven systems.&lt;/p&gt;

&lt;p&gt;With evolving updates to ISO 27701 and SOC 2 guidance, compliance cannot rely solely on narrative evidence or spreadsheet tracking.&lt;/p&gt;

&lt;p&gt;It must be derived from system state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engineering Implication
&lt;/h3&gt;

&lt;p&gt;Technical findings must map deterministically to governance frameworks.&lt;/p&gt;

&lt;p&gt;A vulnerability or misconfiguration should:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Be machine‑detectable&lt;/li&gt;
&lt;li&gt;Map to a specific control requirement&lt;/li&gt;
&lt;li&gt;Produce reproducible evidence&lt;/li&gt;
&lt;li&gt;Generate tamper‑evident reporting&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Architectural Response: Compliance as Code
&lt;/h3&gt;

&lt;p&gt;Auditor Core transforms raw technical signals into structured audit evidence by mapping findings to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SOC 2 Trust Services Criteria&lt;/li&gt;
&lt;li&gt;ISO/IEC 27001:2022&lt;/li&gt;
&lt;li&gt;CIS Controls v8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Findings are aggregated into a derived posture score and packaged into integrity‑sealed reports using SHA‑256 hashing to provide tamper‑evident verification.&lt;/p&gt;

&lt;p&gt;This shifts compliance from documentation theater to computational integrity.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Structural Reality
&lt;/h2&gt;

&lt;p&gt;Agentic AI does not introduce new security principles.&lt;/p&gt;

&lt;p&gt;It exposes weaknesses in our existing ones.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identity without scope discipline becomes privilege escalation.&lt;/li&gt;
&lt;li&gt;Automation without integrity guarantees becomes systemic risk.&lt;/li&gt;
&lt;li&gt;Compliance without computation becomes performance art.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Organizations that adapt will not simply add more policies.&lt;/p&gt;

&lt;p&gt;They will redefine trust boundaries around execution itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Security Alliance Industry Roundup on AI, Identity, and Governance:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/pulse/new-security-landscape-ai-identity-privacy-cloud-security-alliance-ovo1c/" rel="noopener noreferrer"&gt;CSA Roundup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DataWizual/auditor-core-technical-overview" rel="noopener noreferrer"&gt;https://github.com/DataWizual/auditor-core-technical-overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/DataWizual/sentinel-core-technical-overview" rel="noopener noreferrer"&gt;https://github.com/DataWizual/sentinel-core-technical-overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>ai</category>
      <category>puppet</category>
    </item>
  </channel>
</rss>
