define pacman::hook ( Enum['present', 'absent'] $ensure = 'present', Integer $priority = 50, Optional[String] $description = undef, Enum['PreTransation', 'PostTransaction'] $when, String $exec, Optional[Variant[String, Array[String, 1]]] $depends = undef, Boolean $abortOnFail = false, # only for PreTransation Boolean $needsTargets = false, Variant[Pacman::Trigger, Array[Pacman::Trigger, 1]] $trigger, ) { require ::pacman if ($abortOnFail and $when != 'PreTransation') { fail('abortOnFail only valid when "when" => "PreTransation"') } # Normalize triggers to list $triggers = ($trigger ? { Array => $trigger, default => [$trigger], }).map |$trigger| { # Normalize contents of each trigger, making { type => $trigger['type'], operation => $trigger['operation'] ? { Array => $trigger['operation'], default => [$trigger['operation']], }, target => $trigger['target'] ? { Array => $trigger['target'], default => [$trigger['target']], } } } $triggers.each |$trigger| { if $trigger['type'] == 'Path' { $trigger['target'].each |$target| { if $target[0] == '/' { fail("Target paths shouldn't start with '/' ${target} in trigger ${name}") } } } } $str = epp('pacman/hook.epp', { description => $description, depends => $depends ? { Optional => [], Array => $depends, default => [$depends], }, triggers => $triggers, exec => $exec, when => $when, abortOnFail => $abortOnFail, needsTargets => $needsTargets, }) $chksum = $str.md5() file { $chksum: ensure => $ensure, content => $str, path => "${pacman::hooks_path}/${priority}-${name}.hook", checksum => 'md5', checksum_value => $chksum, } }