summaryrefslogtreecommitdiff
path: root/manifests/server.pp
blob: 25111f84d472c605fd304f4b3d7445a25674d008 (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
82
83
84
85
86
87
88
89
class backupninja::server {
  $real_backupdir = $backupdir ? {
    '' => "/backup",
    default => $backupdir,
  }
  $real_backupkeys = $backupkeys ? {
    '' => "$fileserver/keys/backupkeys",
    default => $backupkeys,
  }
  $real_backupserver_tag = $backupserver_tag? {
    '' => $fqdn,
    default => $backupserver_tag
  }
  group { "backupninjas":
    ensure => "present",
    gid => 700
  }
  file { "$real_backupdir":
    ensure => "directory",
    mode => 710, owner => root, group => "backupninjas"
  }
  User <<| tag == "backupninja-$real_backupserver_tag" |>>
  File <<| tag == "backupninja-$real_backupserver_tag" |>>

  # this define allows nodes to declare a remote backup sandbox, that have to
  # get created on the server
  define sandbox($host = false, $dir = false, $keys = false, $uid = false, $gid = "backupninjas") {
    $real_host = $host ? {
      false => $fqdn,
      default => $host,
    }
    $real_dir = $dir ? {
      false => "${backupninja::server::real_backupdir}/$fqdn",
      default => $dir,
    }
    $real_keys = $keys ? {
      false => "${backupninja::server::real_backupkeys}",
      default => $keys,
    }
    @@file { "$real_dir":
      ensure => directory,
      mode => 750, owner => $name, group => 0,
      tag => "backupninja-$real_host",
    }
    @@file { "$real_dir/.ssh":
      ensure => directory,
      mode => 700, owner => $name, group => 0,
      require => File["$real_dir"],
      tag => "backupninja-$real_host",
    }
    @@file { "$real_dir/.ssh/authorized_keys":
      ensure => present,
      mode => 644, owner => 0, group => 0,
      source => "$real_backupkeys/${name}_id_rsa.pub",
      require => File["$real_dir/.ssh"],
      tag => "backupninja-$real_host",
    }
    
    case $uid {
      false: {
        @@user { "$name":
          ensure  => "present",
          gid     => "$gid",
          comment => "$name backup sandbox",
          home    => "$real_dir",
          managehome => true,
          shell   => "/bin/sh",
          password => '*',
          require => Group['backupninjas'],
          tag => "backupninja-$real_host"
        }
      }
      default: {
        @@user { "$name":
          ensure  => "present",
          uid     => "$uid",
          gid     => "$gid",
          comment => "$name backup sandbox",
          home    => "$real_dir",
          managehome => true,
          shell   => "/bin/sh",
          password => '*',
          require => Group['backupninjas'],
          tag => "backupninja-$real_host"
        }
      }
    }
  }
}