summaryrefslogtreecommitdiff
path: root/manifests/init.pp
blob: 0dfb3adb2f5777cef273d008c04e4c545b63644b (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#
# User module based on git://git.puppet.immerda.ch/module-user.git
#
# Password hash can be generated with mkpasswd provided by whois
# debian package: mkpasswd -H md5
#
class user {

  define manage( 
    $ensure           = present,
    $uid              = 'absent',
    $gid              = 'uid',
    $groups           = [],
    $managehome       = true,
    $homedir_mode     = '0750',
    $name_comment     = 'absent',
    $homedir          = 'absent',
    $password         = 'absent',
    $shell            = 'absent',
    $sshkey           = 'absent',
    $sshkey_type      = 'absent',
    $membership       = 'minimum',
    $tag              = false) {

    if $password != 'absent' {

      $real_groups = $groups ? {
        '' => [ "$title", ],
        default => $groups,
      }

      $real_homedir = $homedir ? {
        'absent' => "/home/$name",
        default  => $homedir,
      }
  
      $real_name_comment = $name_comment ? {
        'absent' => $name,
        default  => $name_comment,
      }
  
      $real_sshkey_type = $sshkey_type ? {
        'absent' => "ssh-dss",
        default  => $sshkey_type,
      }

      $real_shell = $shell ? {
        'absent' =>  $operatingsystem ? {
                       openbsd => "/usr/local/bin/bash",
                       default => "/bin/bash",
                      },
        default => $shell,
      }

      if $managehome {
          if $ensure == 'absent' {
              file{"$real_homedir":
                  ensure => absent,
                  purge => true,
                  force => true,
                  recurse => true,
              }
          } else {
              file{"$real_homedir":
                  ensure => directory,
                  require => User[$name],
                  owner => $name, mode => $homedir_mode;
              }
              case $gid {
                  'absent','uid': {
                      File[$real_homedir]{
                          group => $name,
                      }
                  }
                  default: {
                      File[$real_homedir]{
                          group => $gid,
                      }
                  }
              }
          }
      }

      if $uid != 'absent' {
          User[$name]{
              uid => $uid,
          }
      }
  
      if $gid != 'absent' {
          if $gid == 'uid' {
              if $uid != 'absent' {
                  $real_gid = $uid
              }
          } else {
              $real_gid = $gid
          }
          if $real_gid {
              User[$name]{
                  gid => $real_gid,
              }
          }
      }

      user { "$title":
        ensure     => $ensure,
        allowdupe  => false,
        comment    => "$real_name_comment",
        home       => $real_homedir,
        managehome => $managehome,
        shell      => $real_shell,
        groups     => $real_groups,
        membership => $membership,
        password   => $password,
        tag        => $tag,
      }

      # lots of bugs preventing a good implementation for ssh keys
      # http://projects.reductivelabs.com/issues/1409
      # http://projects.reductivelabs.com/issues/2004
      # http://projects.reductivelabs.com/issues/2020
      # http://groups.google.com/group/puppet-users/browse_thread/thread/131bc7cdc507e3c8/6b61dbcd0b6a68b5?lnk=raot
      if $sshkey != 'absent' {
        ssh_authorized_key { "$title":
          ensure  => $ensure,
          key     => $sshkey,
          tag     => $tag,
          user    => $title,
          type    => $real_sshkey_type,
          target  => "$real_homedir/.ssh/authorized_keys",
          require => User["$title"],
        }
      }
    }
  }
}