summaryrefslogtreecommitdiff
path: root/manifests/repo.pp
blob: e2ee780160ac06fcfed4ecb3781b1e4104c31640 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# @summary A Pacman repo
#
# @param ensure
# @param repo_name
#   Name of repo, exposed to mirrorlists as $repo
# @param siglevel
# @param usage
# @param include
#   A repolist to include, mutually exclusive with $server and $source
# @param server
#   A direct server to use, mutually exclusive with $include and $source
# @param source
#   A complete list of sources to pull from.
#   Should be a list of strings on the form "Include = ${include}" or
#   "Server = ${server}". Where include is a path to a mirrorlist, and
#   server is a direct url.
#
#   Mutually exclusive with $include and $server.
define pacman::repo (
  Enum['present', 'absent'] $ensure = 'present',
  String $repo_name = $name,
  Optional[Enum['Never', 'Optional', 'Required']] $siglevel = undef,
  Optional[Enum['Sync', 'Search', 'Install', 'Upgrade', 'All']] $usage = undef,
  Optional[String] $include = undef,
  Optional[String] $server = undef,
  Optional[Array[String,1]] $source = undef,
) {
  require pacman::setup

  if $repo_name == 'local' {
    fail('Repo name "local" is reserved by Pacman')
  }

  # Check that at mots one of the following are defined
  # At least one is required, but that is checked bellow.
  if [$include, $server, $source].filter |$x| { $x =~ NotUndef }.length > 1 {
    fail('$include, $server, and $source mutually exclusive')
  }

  $source_ = if $source {
    $source
  } elsif $server {
    ["Server = ${server}"]
  } elsif $include {
    ["Include = ${include}"]
  } else {
    fail('$source, $include, or $server required')
  }

  concat::fragment { "pacman.conf - repo - ${repo_name}":
    target  => $pacman::conf_path,
    content => epp("${module_name}/repo.epp", {
        'name'     => $repo_name,
        'siglevel' => $siglevel,
        'usage'    => $usage,
        'source'   => $source_,
    }),
  }
}