LEFT | RIGHT |
1 # == Class: adblockplus::web::fileserver | 1 # == Class: adblockplus::web::fileserver |
2 # | 2 # |
3 # Serves files for different repositories over https. | 3 # A fileserver serves multiple file repositories. |
4 # | 4 # |
5 # === Parameters: | 5 # === Parameters: |
6 # | 6 # |
7 # [*domain*] | 7 # [*domain*] |
8 # A string for the domain serving traffic. | 8 # A string which is the name of the fileserver domain, under which |
| 9 # each repository has a subdomain. |
9 # | 10 # |
10 # [*certificate*] | 11 # [*certificate*] |
11 # The name of the SSL certificate file within modules/private/files, if any. | 12 # The name of the SSL certificate file within modules/private/files, if any. |
12 # Requires a private_key as well. | 13 # Requires a private_key as well. |
13 # | 14 # |
14 # [*private_key*] | 15 # [*private_key*] |
15 # The name of the private key file within modules/private/files, if any. | 16 # The name of the private key file within modules/private/files, if any. |
16 # Requires a certificate as well. | 17 # Requires a certificate as well. |
17 # | 18 # |
18 # [*is_default*] | 19 # [*is_default*] |
19 # Passed on to nginx (whether or not the site config should be default). | 20 # Passed on to nginx (whether or not the site config should be default). |
20 # | 21 # |
21 # [*repository*] | 22 # [*repositories*] |
22 # A string that is the name of the repository to serve. A repository | 23 # A collection (hash) of repositories to serve. |
23 # is a collection of files uploaded by a group of users. | 24 # The contents of a repository is served on a subdomain of the fileserver. |
24 # | |
25 # TODO Convert this into a collection of *repositories* | |
26 # | 25 # |
27 class adblockplus::web::fileserver( | 26 class adblockplus::web::fileserver( |
| 27 $ensure = 'present', |
28 $domain, | 28 $domain, |
29 $certificate, | 29 $certificate = undef, |
30 $private_key, | 30 $private_key = undef, |
31 $is_default=false, | 31 $repositories={}, |
32 $repository='v8', | |
33 ){ | 32 ){ |
34 | 33 |
35 include nginx | 34 include nginx |
36 include adblockplus | 35 include adblockplus |
37 include adblockplus::web | 36 include adblockplus::web |
38 | 37 |
39 nginx::hostconfig{$domain: | |
40 source => 'puppet:///modules/adblockplus/nginx/fileserver.conf', | |
41 is_default => $is_default, | |
42 certificate => $certificate, | |
43 private_key => $private_key, | |
44 log => 'access_log_files' | |
45 } | |
46 | |
47 # Root directory for serving repositories | |
48 realize(File[$adblockplus::directory]) | 38 realize(File[$adblockplus::directory]) |
49 | 39 |
50 | 40 file {"$adblockplus::directory/fileserver": |
51 file {[ | |
52 "$adblockplus::directory/fileserver", | |
53 "$adblockplus::directory/fileserver/repositories" | |
54 ]: | |
55 ensure => directory, | 41 ensure => directory, |
56 } | 42 } |
57 | 43 |
58 $repositories_directory = "$adblockplus::directory/fileserver/repositories" | 44 ensure_resources('adblockplus::web::fileserver::repository', $repositories, { |
| 45 ensure => 'present', |
| 46 }) |
59 | 47 |
60 # TODO Base these entries on a map of directories and members: $repositories | 48 nginx::hostconfig{ "$domain": |
61 # For each entry in repositories, (1) create the group , (2) folder and (3) sy
mlink into /var/www/ | 49 source => 'puppet:///modules/adblockplus/nginx/fileserver.conf', |
62 # as is done below for the example 'v8': | 50 is_default => true, |
63 | 51 certificate => $certificate, |
64 # (1) Create the group | 52 private_key => $private_key, |
65 group {"www-$repository": | 53 log => 'access_log_fileserver', |
66 ensure => present, | |
67 # TODO Members are handled manually on the target server for now. Should go
into configuration. | |
68 } | 54 } |
69 | |
70 # (2) create the repository folder | |
71 file {"$repositories_directory/$repository": | |
72 ensure => directory, | |
73 group => "www-$repository", | |
74 mode => '0775', | |
75 require => [ | |
76 File["$repositories_directory"], | |
77 Group["www-$repository"], | |
78 ], | |
79 } | |
80 | |
81 # (3) symlink the repository into www: | |
82 file {"/var/www/$repository": | |
83 ensure => link, | |
84 target => "$repositories_directory/$repository", | |
85 require => [ | |
86 File["$repositories_directory/$repository"], | |
87 Package['nginx'], | |
88 ], | |
89 } | |
90 | |
91 } | 55 } |
92 | 56 |
LEFT | RIGHT |