Posted On 11.02.2026

ConfDroid Puppet Modules – confdroid_resources

0 comments
confdroid.com >> blog >> ConfDroid Puppet Modules – confdroid_resources

confdroid_resources – Puppet Module

confdroid_resources is a small, focused Puppet module that automates the installation and configuration of common YUM / DNF repositories on Rocky Linux (and other Enterprise Linux 9 family systems). Its primary purpose is to make sure essential third-party repositories — especially EPEL — are reliably present on every managed node without causing duplicate resource conflicts.

Why this module exists

Rocky Linux (and other RHEL derivatives) rely on YUM/DNF repositories to provide software packages. Many useful packages — debugging tools, monitoring agents, additional utilities, and more — live outside the base OS repositories and are only available through EPEL (Extra Packages for Enterprise Linux).

In Puppet, repository definitions are singletons: you can only declare a yumrepo resource once per module & catalog. Attempting to declare the same repository multiple times (for example, in different modules that depend on EPEL) causes a duplicate resource conflict and catalog compilation failure.

The cleanest solution is to:

  • Define important shared repositories once, in a central place
  • Include that central definition in every node’s catalog
  • Let other modules simply assume the repository is already present

That central place is confdroid_resources.

How it works

The module declares the most commonly needed repositories (starting with EPEL) in a controlled, idempotent way. Because these repositories are declared only once and included globally, downstream modules can safely install packages that depend on them without worrying about duplication errors. You can also enable or disable individual repositories via class parameters or Hiera/Foreman data — without touching the rest of your codebase.

Typical usage pattern

  1. Include confdroid_resources in every node’s catalog (usually via a base profile, site.pp, or Foreman host group / global classes) (recommended).

    include confdroid_resources

    This way, the module is applied on all hosts, since likely all will need the repos. In case any hosts should not have it enabled, the parameter $rs_enable_epel should be set to .

  2. Any other module can now safely install packages from EPEL (or other managed repos):

    package { 'htop':
    ensure  => installed,
    require => Class['confdroid_resources'],
    }

    Or better yet, simply include the requirement in your module:

    require confdroid_resources

    This simply ensures that the confdroid_resource module is applied first. No need to declare yumrepo { ‘epel’: … } again — it’s already there.

Features

  • Installs and configures EPEL by default
  • Supports enabling/disabling repositories via parameters
  • Idempotent and conflict-free design
  • Clean separation of concerns: shared repos live in one place
  • Works on Rocky Linux 9 / AlmaLinux 9 / RHEL 9 derivatives

Planned additions

  • Support for additional popular repositories (PowerTools/CRB, RPM Fusion, etc.)
  • GPG key management
  • More granular enable/disable controls per repo

Getting started

Add the module to your environment (via the ConfDroid Forge or by cloning the repo), then simply include it in your base profile or node classification.

# Example in a base profile class
class profile::base {
  include confdroid_resources
}

That’s it — EPEL (and any future shared repos) will be available everywhere, without duplication headaches. Happy automating! 🚀 Questions, feedback, or feature requests → https://feedback.confdroid.com


Did you find this post helpful? You can support me.

Hetzner Referral
Substack
ConfDroid Feedback Portal

Related posts

Author Profile

12ww1160DevOps engineer & architect

Leave a Reply

Your email address will not be published. Required fields are marked *

13 + 16 =

Related Post

Migrating my cloud to Kubernetes – storage – the final decision SSHFS

Anyone following my quest to migrate to Kubernetes has been reading about the thoughts and…

Wikijs | Postgresql | Transport Encryption

Today I am on a quest to have all my applications running in Kubernetes containers…

Kubernetes – What’s all the fuzz about it?

So I have been in the IT business for more than 20 years and seen…
Social Media Auto Publish Powered By : XYZScripts.com