aboutsummaryrefslogtreecommitdiff
path: root/manifests/init.pp
blob: 4c5392d510cd9cf3ae951e5ea181673f95aabcf1 (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
class ikiwiki {
  package { "ikiwiki":
    ensure => installed,
  }

  case $apache_sites_folder {
    '': { fail("you need to define \$apache_sites_folder for ikiwiki module") }
  }

  file { "/usr/local/sbin/ikiwiki-deploy":
    ensure  => present,
    content => template('ikiwiki/deploy.sh.erb'),
    owner   => root,
    group   => root,
    mode    => 755,
  }

  file { "/usr/local/sbin/ikiwiki-refresh":
    ensure  => present,
    content => template('ikiwiki/refresh.sh.erb'),
    owner   => root,
    group   => root,
    mode    => 755,
  }

  define instance($base_url = false, $ensure = 'present', $description = false,
                  $adminuser = 'yourname', $adminemail = 'me@example.org', $instance = 'ikiwiki') {

    $desc = $description ? {
      false   => $title,
      default => $description,
    }

    $ikiwiki_base = $base_url ? {
      false   => $domain,
      default => $base_url,
    }

    file { "/etc/ikiwiki/$name.setup":
      ensure  => $ensure,
      content => template('ikiwiki/ikiwiki.setup.erb'),
      owner   => root,
      group   => root,
      mode    => 644,
      notify  => Exec["ikiwiki_refresh_${name}"],
    }

    case $ensure {
      'present': {
        exec { "ikiwiki_refresh_${name}":
          command     => "/usr/local/sbin/ikiwiki-refresh $name $instance",
          user        => root,
          refreshonly => true,
        }
    
        exec { "/usr/local/sbin/ikiwiki-deploy $name $instance":
          unless => "/bin/sh -c '[ -f ${apache_sites_folder}/${name}/${instance}_src/index.mdwn ]'",
          user   => root,
        }
    
        if !defined(File["${apache_sites_folder}/${name}/${instance}_src"]) {
          file { "${apache_sites_folder}/${name}/${instance}_src":
            ensure  => directory,
            owner   => www-data,
            group   => www-data,
            recurse => true,
            notify  => Exec["ikiwiki_refresh_${name}"],
            require => File["${apache_sites_folder}/${name}"],
          }
        }

        if !defined(File["${apache_sites_folder}/${name}/${instance}"]) {
          file { "${apache_sites_folder}/${name}/${instance}":
            ensure  => directory,
            owner   => www-data,
            group   => www-data,
            recurse => true,
            require => File["${apache_sites_folder}/${name}"],
          }
        }

        if !defined(File["${apache_sites_folder}/${name}"]) {
          file { "${apache_sites_folder}/${name}":
            ensure  => directory,
            owner   => root,
            group   => root,
          }
        }

        # The post-update hook should have www-data as owner so
        # gitosis can do a setuid to it and write to ikiwiki
        # folders without messing the permission scheme.
        #
        # The same is valid for the cgi.
        #
        # See http://ikiwiki.info/rcs/git/
        #     http://ikiwiki.info/forum/multi-user_setup_of_ikiwiki__44___gitosis_and_apache2_in_Debian_Sid/
        #
        file { [ "/var/git/repositories/${name}.git/hooks/post-update",
                 "${apache_sites_folder}/${name}/${instance}/ikiwiki.cgi" ]:
          ensure => present,
          owner  => www-data,
          group  => gitosis,
          mode   => 6550,
        }
      }
    }
  }
}