summaryrefslogtreecommitdiff
path: root/code/environments/production/modules/apt/manifests/key.pp
blob: 1933b3f9110b996e666208132e06188d1dc8c5a6 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# == Define: apt::key
define apt::key (
    String $id                           = $title,
    Enum['present', 'absent'] $ensure    = present,
    Optional[String] $content            = undef,
    Optional[String] $source             = undef,
    String $server                       = $::apt::keyserver,
    Optional[String] $options            = undef,
    ) {

  assert_type(
    Pattern[
      /\A(0x)?[0-9a-fA-F]{8}\Z/,
      /\A(0x)?[0-9a-fA-F]{16}\Z/,
      /\A(0x)?[0-9a-fA-F]{40}\Z/,
    ], $id)

  if $source {
    assert_type(Pattern[/\Ahttps?:\/\//, /\Aftp:\/\//, /\A\/\w+/], $source)
  }

  if $server {
    assert_type(Pattern[/\A((hkp|http|https):\/\/)?([a-z\d])([a-z\d-]{0,61}\.)+[a-z\d]+(:\d{2,5})?$/], $server)
  }

  case $ensure {
    present: {
      if defined(Anchor["apt_key ${id} absent"]){
        fail("key with id ${id} already ensured as absent")
      }

      if !defined(Anchor["apt_key ${id} present"]) {
        apt_key { $title:
          ensure  => $ensure,
          id      => $id,
          source  => $source,
          content => $content,
          server  => $server,
          options => $options,
        } -> anchor { "apt_key ${id} present": }

        case $facts['os']['name'] {
          'Debian': {
            if versioncmp($facts['os']['release']['major'], '9') >= 0 {
              ensure_packages(['dirmngr'])
              Apt::Key<| title == $title |>
            }
          }
          'Ubuntu': {
            if versioncmp($facts['os']['release']['full'], '17.04') >= 0 {
              ensure_packages(['dirmngr'])
              Apt::Key<| title == $title |>
            }
          }
          default: { }
        }
      }
    }

    absent: {
      if defined(Anchor["apt_key ${id} present"]){
        fail("key with id ${id} already ensured as present")
      }

      if !defined(Anchor["apt_key ${id} absent"]){
        apt_key { $title:
          ensure  => $ensure,
          id      => $id,
          source  => $source,
          content => $content,
          server  => $server,
          options => $options,
        } -> anchor { "apt_key ${id} absent": }
      }
    }

    default: {
      fail "Invalid 'ensure' value '${ensure}' for apt::key"
    }
  }
}