summaryrefslogtreecommitdiff
path: root/puppet/modules/git/manifests/clone.pp
blob: 29f0b2b356c2eaaff978d05303a3b6c67f4e4b6d (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
# submodules: Whether we should initialize and update
#             submodules as well
#             Default: false
# clone_before: before which resources a cloning should
#               happen. This is releveant in combination
#               with submodules as the exec of submodules
#               requires the `cwd` and you might get a
#               dependency cycle if you manage $projectroot
#               somewhere else.
define git::clone(
  $ensure = present,
  $git_repo,
  $projectroot,
  $submodules = false,
  $clone_before = 'absent',
  $cloneddir_user='root',
  $cloneddir_group='0',
  $cloneddir_restrict_mode=true
){
  case $ensure {
    absent: {
      exec{"rm -rf $projectroot":
        onlyif => "test -d  $projectroot",
      }
    }
    default: {
      require ::git
      exec {"git-clone_${name}":
        command => "git clone --no-hardlinks ${git_repo} ${projectroot}",
        creates => "${projectroot}/.git",
        user => root,
        notify => Exec["git-clone-chown_${name}"],
      }
      if $clone_before != 'absent' {
        Exec["git-clone_${name}"]{
          before => $clone_before,
        }
      }
      if $submodules {
        exec{"git-submodules_${name}":
          command => "git submodule init && git submodule update",
          cwd => $projectroot,
          refreshonly => true,
          subscribe => Exec["git-clone_${name}"],
        }
      }
      exec {"git-clone-chown_${name}":
        command => "chown -R ${cloneddir_user}:${cloneddir_group} ${projectroot};chmod -R og-rwx ${projectroot}/.git",
        refreshonly => true
      }
      if $cloneddir_restrict_mode {
        exec {"git-clone-chmod_${name}":
          command => "chmod -R o-rwx ${projectroot}",
          refreshonly => true,
          subscribe => Exec["git-clone_${name}"],
        }
      }
    }
  }
}