| Index: modules/adblockplus/manifests/web/fileserver/repository.pp |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/modules/adblockplus/manifests/web/fileserver/repository.pp |
| @@ -0,0 +1,87 @@ |
| +# == Type: adblockplus::web::fileserver::repository |
| +# |
| +# Manage a repository on a fileserver. |
| +# |
| +# A repository is a site where a group of people can upload and artifacts. |
| +# |
| +# In its current form, a repository is simply a directory exposed on a web |
| +# server. |
| +# |
| +# The contents of a repository is served on a subdomain of the fileserver. |
| +# |
| +# === parameters: |
| +# |
| +# [*ensure*] |
| +# Whether to set up the repository or not. Removing repositories is not |
| +# supported. |
| +# |
| +# [*fileserver_domain*] |
| +# A string which is the name of the fileserver domain, under which |
| +# each repository has a subdomain. |
| +# |
| +# [*certificate*] |
| +# The name of the SSL certificate file within modules/private/files, if any. |
| +# Requires a private_key as well. |
| +# |
| +# [*fileserver_domain*] |
| +# A string which is the name of the fileserver domain, under which |
| +# each repository has a subdomain. |
| +# |
| +# TODO Figure out how to inherit and use the parent's class domain instead of |
| +# having to duplicate it here. |
| +# |
| +# [*members*] |
| +# An array of usernames that should have write access to the repository. |
| +# |
| +# TODO Members are handled manually on the target server for now. |
| +# Figure out how to provision them. |
| +# |
| +define adblockplus::web::fileserver::repository ( |
| + $ensure = 'present', |
| + $certificate = $::certificate, |
| + $private_key = $::private_key, |
| + $fileserver_domain = "$::fileserver_domain", |
| + $members = [], |
| +){ |
| + |
| + $repositories_directory = "$adblockplus::directory/fileserver/repositories" |
| + $repository_domain = "$name.$fileserver_domain" |
| + $repository_directory = "$repositories_directory/$name" |
| + |
| + if $ensure !~ /^(absent|purged)$/ { |
| + group {"www-$name": |
| + ensure => present, |
| + } |
| + |
| + file {"$repositories_directory/$name": |
| + ensure => directory, |
| + group => "www-$name", |
| + mode => '0775', |
| + require => [ |
| + File["$repositories_directory"], |
| + Group["www-$name"], |
| + ], |
| + } |
| + |
| + realize(File[$adblockplus::directory]) |
| + |
| + # TODO Figure out how to use $adblockplus::web::directory insetad of hardcoded path |
| + file {"/var/www/$name": |
| + ensure => link, |
| + target => "$repositories_directory/$name", |
| + require => [ |
| + File["$repositories_directory/$name"], |
| + Package['nginx'], |
| + ], |
| + } |
| + |
| + nginx::hostconfig{ "$repository_domain": |
| + content => template('adblockplus/web/fileserver/repository.conf.erb'), |
| + is_default => $is_default, |
| + certificate => $certificate, |
| + private_key => $private_key, |
| + domain => $repository_domain, |
| + log => "access_log_fileserver_repository_$repository_domain", |
| + } |
| + } |
| +} |