aboutsummaryrefslogtreecommitdiff
path: root/manifests/init.pp
blob: e3972bd3c5d4c862cfcdb1132849b1dbc8849b4f (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
class ikiwiki {
  package { [ "ikiwiki", "po4a" ]:
    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 = $domain, $ensure = 'present', $description = false,
                  $adminuser = 'yourname', $adminemail = 'me@example.org', $instance = 'ikiwiki',
                  $account_creation_password = false, $add_plugins = false, $disable_plugins = false,
                  $protocol = 'https') {

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

    case $ensure {
      'present': {
        file { "/etc/ikiwiki/$name.setup":
          ensure  => present,
          content => template('ikiwiki/ikiwiki.setup.erb'),
          owner   => www-data,
          group   => www-data,
          mode    => 640,
          notify  => Exec["ikiwiki_refresh_${name}"],
        }

        exec { "ikiwiki_refresh_${name}":
          command     => "/usr/local/sbin/ikiwiki-refresh $name $instance",
          user        => root,
          refreshonly => true,
        }
    
        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
        # gitolite 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___gitolite_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   => gitolite,
          mode    => 6550,
          require => File["/etc/ikiwiki/$name.setup"],
        }
      }
      'absent': {
        file { "/etc/ikiwiki/$name.setup":
          ensure  => absent,
        }
      }
    }
  }
}