| Index: modules/adblockplus/manifests/web/static.pp | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/modules/adblockplus/manifests/web/static.pp | 
| @@ -0,0 +1,117 @@ | 
| +# == Class: adblockplus::web::static | 
| +# | 
| +# Manage a simple Nginx-based webserver for static content | 
| +# that uses a customizable deployment script to e.g. fetch the content | 
| +# from a repository server (ref. http://hub.eyeo.com/issues/4523) | 
| +# | 
| +# === Parameters: | 
| +# | 
| +# [*domain*] | 
| +#   The domain name for the website. | 
| +# | 
| +# [*ssl_certificate*] | 
| +#   The name of the SSL certificate file within modules/private/files, if any. | 
| +#   Requires a private_key as well. | 
| +# | 
| +# [*ssl_private_key*] | 
| +#   The name of the private key file within modules/private/files, if any. | 
| +#   Requires a certificate as well. | 
| +# | 
| +# [*ensure*] | 
| +#   Whether to set up the website or not, e.g. "asbsent" or "present". | 
| +# | 
| +# [*deploy_user*] | 
| +#   User that will be used to issue commands. | 
| +# | 
| +# [*deploy_user_authorized_keys*] | 
| +#   Array of public keys that will have access to ssh commands | 
| +# | 
| +# [*hooks*] | 
| +#   Hash of adblockplus::web::static::hook items to set up in this context. | 
| +# | 
| +# === Examples: | 
| +# | 
| +#   class {'adblockplus::web::static': | 
| +#     domain => 'help.eyeo.com', | 
| +#     hooks => { | 
| +#       own-uname => { | 
| +#         file => { | 
| +#           content => 'uname -a', | 
| +#         } | 
| +#       } | 
| +#     }, | 
| +#   } | 
| +# | 
| +class adblockplus::web::static ( | 
| +  $domain, | 
| +  $ssl_certificate = undef, | 
| +  $ssl_private_key = undef, | 
| +  $ensure = 'present', | 
| +  $deploy_user = 'web-deploy', | 
| +  $deploy_user_authorized_keys = [], | 
| +  $hooks = {}, | 
| +) { | 
| + | 
| +  include adblockplus::web | 
| +  include nginx | 
| +  include ssh | 
| + | 
| +  File { | 
| +    mode => '0755', | 
| +    owner => $deploy_user, | 
| +    group => $deploy_user, | 
| +  } | 
| + | 
| +  ensure_resource('file', "/var/www/$domain", { | 
| +    ensure => ensure_directory_state($ensure), | 
| +    owner => 'www-data', | 
| +    group => 'www-data', | 
| +  }) | 
| + | 
| +  ensure_resource('nginx::hostconfig', $title, { | 
| +    content => template('adblockplus/web/static.conf.erb'), | 
| +    certificate => $ssl_certificate, | 
| +    domain => $domain, | 
| +    is_default => true, | 
| +    private_key => $ssl_private_key, | 
| +    log => 'web.access.log', | 
| +  }) | 
| + | 
| +  $content = [ | 
| +    "Match User ${deploy_user}", | 
| +    'AllowTcpForwarding no', | 
| +    'X11Forwarding no', | 
| +    'AllowAgentForwarding no', | 
| +    'GatewayPorts no', | 
| +    'ForceCommand /usr/local/bin/hooks_wrapper $SSH_ORIGINAL_COMMAND', | 
| +  ] | 
| + | 
| +  ensure_resource('concat::fragment', 'helpcenter', { | 
| +    content => join($content, "\n\t"), | 
| +    ensure => 'present', | 
| +    target => 'sshd_config', | 
| +    order => '20', | 
| +  }) | 
| + | 
| +  ensure_resource('adblockplus::user', $deploy_user, { | 
| +    authorized_keys => $deploy_user_authorized_keys, | 
| +    ensure => $ensure, | 
| +    shell => '/bin/bash', | 
| +    groups => ['www-data'], | 
| +  }) | 
| + | 
| +  $wrapper_path = "/home/${deploy_user}/bin" | 
| +  ensure_resource('file', 'commands_dir', { | 
| +    path => $wrapper_path, | 
| +    ensure => ensure_directory_state($ensure), | 
| +  }) | 
| + | 
| +  ensure_resource('file', '/usr/local/bin/hooks_wrapper', { | 
| +    ensure => ensure_file_state($ensure), | 
| +    content => template('adblockplus/web/hooks_wrapper.sh.erb'), | 
| +  }) | 
| + | 
| +  # https://docs.puppet.com/puppet/latest/function.html#createresources | 
| +  create_resources('adblockplus::web::static::hook', $hooks) | 
| +} | 
| + | 
|  |