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
-
Include confdroid_resources in every node’s catalog (usually via a base profile, site.pp, or Foreman host group / global classes) (recommended).
include confdroid_resourcesThis 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_epelshould be set to. -
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_resourcesThis simply ensures that the
confdroid_resourcemodule 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.



Related posts
Author Profile
Latest entries
blog11.02.2026ConfDroid Puppet Modules – confdroid_resources
blog11.02.2026ConfDroid Puppet Modules – Puppet
blog07.02.2026Puppet with Foreman – Host Registration
blog02.02.2026Publishing Pipeline – LinkedIn Support



