119 lines
3.8 KiB
ObjectPascal
119 lines
3.8 KiB
ObjectPascal
|
# @summary A simple place to define trivial resources
|
||
|
#
|
||
|
# 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`.
|
||
|
#
|
||
|
# @param create_resources
|
||
|
# 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.
|
||
|
#
|
||
|
# @example
|
||
|
# 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]'],
|
||
|
# }
|
||
|
# }
|
||
|
# }
|
||
|
# }
|
||
|
#
|
||
|
# @example
|
||
|
# 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]'
|
||
|
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 })
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|