diff options
Diffstat (limited to 'modules/pacman/manifests')
-rw-r--r-- | modules/pacman/manifests/hook.pp | 80 | ||||
-rw-r--r-- | modules/pacman/manifests/init.pp | 44 | ||||
-rw-r--r-- | modules/pacman/manifests/repo.pp | 24 |
3 files changed, 148 insertions, 0 deletions
diff --git a/modules/pacman/manifests/hook.pp b/modules/pacman/manifests/hook.pp new file mode 100644 index 0000000..f8478e6 --- /dev/null +++ b/modules/pacman/manifests/hook.pp @@ -0,0 +1,80 @@ + +type Pacman::Operation = Enum['Install', 'Upgrade', 'Remove'] +# type Variant[Type, Array[Type, 1]] = Variant[Type, Array[Type, 1]] + +type Pacman::Trigger = Struct[{ + type => Enum['Path', 'Package'], + operation => Variant[Pacman::Operation, Array[Pacman::Operation, 1]], + target => Variant[String, Array[String, 1]], +}] + +define pacman::hook ( + 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 => 'present', + content => $str, + path => "${pacman::hooks_path}/${priority}-${name}.hook", + checksum => 'md5', + checksum_value => $chksum, + } +} diff --git a/modules/pacman/manifests/init.pp b/modules/pacman/manifests/init.pp new file mode 100644 index 0000000..fb23328 --- /dev/null +++ b/modules/pacman/manifests/init.pp @@ -0,0 +1,44 @@ +class pacman ( + String $hooks_path = '/etc/pacman.d/hooks-puppet', + String $conf_path = '/etc/pacman.conf', + Boolean $ilovecandy = false, +) { + + ini_setting { 'Pacman HookDir': + path => $conf_path, + section => 'options', + setting => 'HookDir', + value => $hooks_path, + + } + + ini_setting { 'Pacman ILoveCandy': + ensure => if ($ilovecandy) { present } else { absent }, + path => '/etc/pacman.conf', + section => 'options', + setting => 'ILoveCandy', + key_val_separator => '', + value => '', + } + + if versioncmp($facts['pacman-version'], '6.0.0') >= 0 { + ini_setting { 'Pacman parallel downloads': + path => '/etc/pacman.conf', + section => 'options', + setting => 'ParallelDownloads', + value => 8, + } + } + + file { $hooks_path: + ensure => directory, + recurse => true, + purge => true, + } + + file { '/etc/pacman.d/mirrorlist': + ensure => present, + backup => true, + source => 'puppet:///modules/pacman/mirrorlist', + } +} diff --git a/modules/pacman/manifests/repo.pp b/modules/pacman/manifests/repo.pp new file mode 100644 index 0000000..28f92b0 --- /dev/null +++ b/modules/pacman/manifests/repo.pp @@ -0,0 +1,24 @@ +define pacman::repo ( + Enum['present', 'absent'] $ensure = 'present', + String $repo_name = $name, + # String $include, + String $server, + String $sig_level, +) { + + ini_setting { + default: + ensure => $ensure, + path => $::pacman::conf_path, + section => $repo_name , + ; + "Pacman repo [${repo_name}] server": + setting => 'Server', + value => $server , + ; + "Pacman repo [${repo_name}] SigLevel": + setting => 'SigLevel', + value => $sig_level , + ; + } +} |