summaryrefslogtreecommitdiff
path: root/modules/pacman/manifests
diff options
context:
space:
mode:
Diffstat (limited to 'modules/pacman/manifests')
-rw-r--r--modules/pacman/manifests/hook.pp80
-rw-r--r--modules/pacman/manifests/init.pp44
-rw-r--r--modules/pacman/manifests/repo.pp24
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 ,
+ ;
+ }
+}