Puppet Class: stdlib::manage

Defined in:
manifests/manage.pp

Summary

A simple place to define trivial resources

Overview

Sometimes your systems require a single simple resource. It can feel unnecessary to create a module for a single resource. There are a number of possible patterns to generate trivial resource definitions. This is an attempt to create a single clear method for uncomplicated resources. There is __limited__ support for ‘before`, `require`, `notify`, and `subscribe`.

Examples:

class { 'stdlib::manage':
  'create_resources'      => {
    'file'                => {
      '/etc/motd.d/hello' => {
        'content'         => 'I say Hi',
        'notify'          => 'Service[sshd]',
      },
      '/etc/motd'         => {
        'ensure'          => 'file',
        'epp'             => {
          'template'      => 'profile/motd.epp',
        }
      },
      '/etc/information'  => {
        'ensure'          => 'file',
        'erb'             => {
          'template'      => 'profile/informaiton.erb',
        }
      }
    },
    'package'             => {
      'example'           => {
        'ensure'          => 'installed',
        'subscribe'       => ['Service[sshd]', 'Exec[something]'],
      }
    }
  }
}
stdlib::manage::create_resources:
  file:
    '/etc/motd.d/hello':
      content: I say Hi
      notify: 'Service[sshd]'
    '/etc/motd':
      ensure: 'file'
      epp:
        template: 'profile/motd.epp'
        context: {}
    '/etc/information':
      ensure: 'file'
      erb:
        template: 'profile/information.erb'
  package:
    example:
      ensure: installed
      subscribe:
        - 'Service[sshd]'
        - 'Exec[something]'

Parameters:

  • create_resources (Hash[String, Hash]) (defaults to: {})

    A hash of resources to create NOTE: functions, such as ‘template` or `epp`, are not directly evaluated

    but processed as Puppet code based on epp and erb hash keys.
    


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'manifests/manage.pp', line 67

class stdlib::manage (
  Hash[String, Hash] $create_resources = {}
) {
  $create_resources.each |$type, $resources| {
    $resources.each |$title, $attributes| {
      case $type {
        'file': {
          # sanity checks
          # epp, erb and content are exclusive
          if 'epp' in $attributes and 'content' in $attributes {
            fail("You can not set 'epp' and 'content' for file ${title}")
          }
          if 'erb' in $attributes and 'content' in $attributes {
            fail("You can not set 'erb' and 'content' for file ${title}")
          }
          if 'erb' in $attributes and 'epp' in $attributes {
            fail("You can not set 'erb' and 'epp' for file ${title}")
          }

          if 'epp' in $attributes {
            if 'template' in $attributes['epp'] {
              if 'context' in $attributes['epp'] {
                $content = epp($attributes['epp']['template'], $attributes['epp']['context'])
              } else {
                $content = epp($attributes['epp']['template'])
              }
            } else {
              fail("No template configured for epp for file ${title}")
            }
          } elsif 'erb' in $attributes {
            if 'template' in $attributes['erb'] {
              $content = template($attributes['erb']['template'])
            } else {
              fail("No template configured for erb for file ${title}")
            }
          } elsif 'content' in $attributes {
            $content = $attributes['content']
          } else {
            $content = undef
          }
          file { $title:
            *       => $attributes - 'erb' - 'epp' - 'content',
            content => $content,
          }
        }
        default: {
          create_resources($type, { $title => $attributes })
        }
      }
    }
  }
}