A copy of project README as is from: https://github.com/codingfuture/puppet-cfsystem
cfsystem
Description
Configure a bare minimal production system regardless of its purpose. It depends on more specific cfnetwork, cfauth and cffirehol modules.
What it does:
- Whatever cfnetwork does
 - Whatever cfauth does
 - Whatever cffirehol does
 - Setups APT for Debian and Ubuntu
 - Setups timezone
 - Setups hostname based on certname
 - Adds firewall rules as required
 - Setups special location/pool facts for hiera lookup (see cfsystem::hierapool below)
 - Setups email system
 - Setups NTP daemon and command line client for large gap sync
 - Setup all locales and the default locale (configurable)
 - Manages /etc/profile.d/ & adds allowed bin paths to sudo search_paths
 - Installs many handy system tools which almost any admin would expect
 - Forces noop scheduler on SSDs and virtual devices (in guests)
 - Forces custom I/O scheduler for real spinning HDDs (deadline by default)
 - Adds custom rc.local commands, if needed
 - Adds cron job to check if running kernel version matches the latest installed (reboot reminder)
 - 
Auto-detect hardware nodes with IPMI
- Install generic IPMI tools
 - Install Dell-specific tools
 - Other vendors - TODO
 
 - Ruby framework for other cf* modules
 - 
The following helper scripts are installed
cf_clear_email_queue- clear all emails in exim queuecf_clear_frozen_emails- clear only frozen emails in exim queuecf_send_test_email- send test email to admin addresscf_kernel_version_check- check if kernel version mismatch the latest installed onecf_auto_block_scheduler- setup auto-detected I/O scheduler per block devicecf_apt_key_updater <key_id>- run GPG key re-import, if expiredcf_ntpdate- run pre-configured ntpdate
 - 
Public API for Puppet parser:
Cfsystem::CpuWeight- cgroup CPU weightCfsystem::IoWeight- cgroup I/O weightCfsystem::Keytype- ssh key typesCfsystem::Rsabit- RSA key bitscfsystem::query- caching wrapper aroundpuppetdb_query(cached per catalog)cfsystem::stable_sort(arg)- deep sort of Hash/Array to avoid isomorphic configuration “change”cfsystem::add_group($user, $group) >> Resource- make sure user is part of the groupcfsystem::gen_key(name, params, forced_key)- generate or save persistent SSH keycfsystem::gen_pass(name, length, forced_pass)- generate or save persistent passwordcfsystem::gen_port(name, forced_port)- allocate or save persistent network portcfsystem::pretty_json(data)- return pretty formatted JSON stringcf_notify- replacement of standard notify to avoid refresh side-effects
 
Technical Support
- Example configuration
 - Free & Commercial support: support@codingfuture.net
 
Setup
Up to date installation instructions are available in Puppet Forge: https://forge.puppet.com/codingfuture/cfsystem
Please use librarian-puppet or cfpuppetserver module to deal with dependencies.
There is a known r10k issue RK-3 which prevents automatic dependencies of dependencies installation.
Examples
Please check codingufuture/puppet-test for example of a complete infrastructure configuration and Vagrant provisioning.
Implicitly created resources
cfnetwork::describe_services:
    puppet:
        server: 'tcp/8140'
    smtp:
        server: 'tcp/25'
    cfsmtp:
        server:
            - 'tcp/25'  # smtp
            - 'tcp/465' # smtps
            - 'tcp/587' # submission
    # if $cfsystem::add_repo_cacher
    'apcng':
        server: 'tcp/3142'
    # if $cfsystem::repo_proxy
    'aptproxy':
        server: "tcp/${proxy_port}"
cfnetwork::service_ports:
    # foreach $cfsystem::email::listen_ifaces
    "${listen_ifaces}:smtp:cfsystem": {}
    'local:smtp:cfsystem': {}
    # if $cfsystem::add_ntp_server
    "${cfsystem::service_face}:ntp": {}
    # if $cfsystem::add_repo_cacher
    "${cfsystem::service_face}:apcng:cfsystem": {}
    # if ${cfsystem::service_face} not in ['any', 'local']
    'local:apcng:cfsystem': {}
cfnetwork::client_ports:
    'any:puppet:cfsystem':
        user: 'root'
    'local:smtp:cfsystem': {}
    # if $smarthost = undef then dst filtering is disabled
    'any:cfsmtp:cfsystem':
        user => ['root', 'Debian-exim'],
        dst  => $smarthost
    'any:ntp:cfsystem':
        user => ['root', 'ntpd'],
    # if $cfsystem::add_repo_cacher
    'any:http:apcng':
        user: 'apt-cacher-ng'
    # if $cfsystem::add_repo_cacher
    'any:https:apcng':
        user: 'apt-cacher-ng'
    # if $cfsystem::repo_proxy
    'any:aptproxy:cfsystem':
        dst: $proxy_host
        user: 'root'
    # if not $cfsystem::repo_proxy
    'any:http:cfsystem':
        user: 'root'
    # if not $cfsystem::repo_proxy
    'any:https:cfsystem':
        user: 'root'
      Class parameters
cfsystem class
allow_nfs = false- purge RPC packages unless trueadmin_email = undef- email address to use forrootand as the default sink- 
repo_proxy = undef- if set, use the config as HTTP/HTTPS proxy for package retrieval.host- IP or hostnameport- TCP port
 add_repo_cacher = false- if true, install apt-cacher-ng and accept clients on$service_faceservice_face = 'any'- interface to accept client for NTP and HTTP proxy, if enabled separatelyntp_servers = [ '0.pool.ntp.org', '1.pool.ntp.org', '2.pool.ntp.org', '3.pool.ntp.org' ]- upstream NTP serveradd_ntp_server = false- if true, accept NTP service clients on$service_faceEnum['ntp', 'openntpd', 'chrony', 'systemd'] $ntpd_type = 'systemd'- NTP implementation to usetimezone = 'Etc/UTC'- setup system timezoneapt_purge- passed to apt::purge, purge all sources and preferences by defaultapt_update- passed to apt::update, update daily with 300 second timeout by defaultapt_pin = 1001- default priority (>=1001 - force downgrades to make the system consistent)apt_backports_pin = 600- default priority (>=1001 - force downgrades to make the system consistent)real_hdd_scheduler- default scheduler for not SSD and not virtualized HDDsrc_local- list of additional commands to add to /etc/rc.local (SSD and virtual is always ‘noop’)puppet_host = "puppet.${::trusted['domain']}"- Puppet Server hostnamepuppet_cahost = $puppet_host- Puppet CA hostnamepuppet_env = $::environment- Puppet environmentpuppet_use_dns_srv = false- enable support DNS SRV records instead of hostnamesmcollective = false- controls if mcollective service is enabledlocale = 'en_US.UTF-8'- default system localereserve_ram= 64 - amount of ram to reserve for system in automatic calculations$key_server = 'hkp://pgp.mit.edu:80'- default PGP key server$random_feed = true- enable random entropy generating daemon$add_handy_tools = true- install additional tools$puppet_backup_age = '1d'- how long to keep local puppet filebucket backups
cfsystem::bindir type
Setup /etc/profile.d/ & /etc/sudoers.d/ entries for trusted global bin paths. It should not be configured by user. It’s API for other modules.
bin_dir- absolute path to directory for global search path
cfsystem::hierapool class
Automatically including by cfsystem. This values are useful in hiera.yaml configuration
to setup hierarchy based on location and tenant/server pool in it. Example:
    ---
    :backends:
    - yaml
    :hierarchy:
    - "%{::trusted.domain}/%{::trusted.hostname}"
    - "%{::trusted.domain}"
    - "%{::cf_location}/%{::cf_location_pool}"
    - "%{::cf_location}"
    - common
    :merge_behavior: deeper
    :yaml:
    :datadir:
      location = undef- if set, saved into/etc/cflocationpool = undef- if set, aved into/etc/cflocationpool
cfsystem::email class
Setup email server for outgoing emails. Please not that this configuration is not intended to accept internet traffic.
smarthost = undef- if set, use as smarthost to relay outgoing emails throughsmarthost_login = undef- if set, use as login on smarthostsmarthost_password = undef- if set, use as password on smarthost (plain text)relay_nets = <private subnets>- allowed clients for SMTP relay, if relay is enabled with$listen_ifaceslisten_ifaces = undef- list of interface (cfnetwork::ifacenames), besidesloto listen for SMTP client relaydisable_ipv6 = true- if true, IPv6 supports gets disabled (most likely you need it disabled for SMTP)
cfsystem::sysctl class
Setup sysctl entries.
vm_swappiness = 1- 0-100 (%) minimize swap activity by defaultvm_mmax_map_count = 262144- increased by default
cfsystem::debian class
Debian-specific configuration.
apt_url = 'http://deb.debian.org/debian'- APT base URL for Debian repossecurity_apt_url = 'http://security.debian.org/'- APT base URL for Debian security reporelease= ‘jessie’ - Debian release name to configure
cfsystem::ubuntu class
Ubuntu-specific configuration.
apt_url = 'mirror://mirrors.ubuntu.com/mirrors.txt'- APT base URL for Ubuntu reposrelease = 'wily'- Ubuntu release name to configure
cfsystem::debian::debconf type
package = $title- package to configure & installensure = present- passed topackage ensureconfig = []- config entries fordebconf-set-selections
cfsystem::apt::key type
Configure APT key & add automatic update of expired keys
id- PGP key IDextra_opts = {}- any additional options forapt::key
cfsystem::dotenv type
A special helper to create entries in user ~/.env files
user- previously defined user{ $user: home => ‘path’} ($home must be explicitly set)variable- variable namevalue- valueenv_file = '.env'- name of .env file relative to $home
cfsystem::puppetpki type
Make actual Puppet PKI (CA, CRL, client cert and private key) data available to specific user. By default the data is copied under ~/pki/puppet/.
user = $title- local user to usecopy_key = true- if true then private keys of local machine are copied as wellpki_dir = undef- override the default destination folder
cfsystem::haproxy class
Setup haproxy package. No configuration. Used by other modules
$disable_standard = true- controls if default HAProxy service must be disabled
cfsystem::randomfeed class
Setup random entropy generating tools
$type = 'haveged'- tools type$threshold = 2048- minimal random entropy level
cfsystem::sshdir type
Create a basic ~/.ssh/ directory for unattended user account.
$user = $title- system user with ‘home’ parameter
cfsystem::clusterssh type
This feature is trade-off between SSH setup in cluster and security. This functionality creates a single SSH client key and shares across all nodes in cluster. It helps to get rid of puppet facts processing for target-generated secrets.
Besides shared private key, another problem is clear-text private key getting into puppet catalog (which should be secured as well).
$namespace- cluster namespace, e.g. ‘cfdb’$cluster- cluster identifier$is_primary- controls if a new key can be generated$peer_ipset- name of pre-defined cfnetwork::ipset$user- system user with ‘home’ parameter$group = $user- the user’s group$key_type = 'ed25519'- SSH key type$key_bits = 2048- SSH key bits (for RSA)
cfsystem::hwm class
Generic class for HardWare Management
Enum['none', 'auto', 'generic', 'dell', 'smc'] $type = 'auto'- select type of HW vendor, if auto-detection fails.
cfsystem::hwm::generic class
Just a placeholder for generic IPMI system.
cfsystem::hwm::dell class
Support for Dell PowerEdge family.
$community_repo = 'http://linux.dell.com/repo/community'
cfsystem::hwm::smc class
Placeholder for SuperMicro support. Not implemented yet.
cfsystem::pip class
Setup latest pip for Python 2&3 into /usr/local.
cfsystem::metric type
Mostly for internal purposes to declare items for cfmetrics monitoring.
cf_notify type
The standard notify type has a side effect - it generates refresh event
what may harm automation which expects 0 exit code on no resource changes.
Therefore, this drop-in replacement has been provided.
message = $title- message to showloglevel = info- log level to use for the message
cfsystem_service type
Helper type to create cfsystem-integrated services.
cfsystem_timer type
Helper type to create cfsystem-integrated cron-like services.