| Index: modules/hgweb/manifests/init.pp |
| diff --git a/modules/hgweb/manifests/init.pp b/modules/hgweb/manifests/init.pp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7679a1dd7b84c51ccffd3ab5891c3ba5406732f4 |
| --- /dev/null |
| +++ b/modules/hgweb/manifests/init.pp |
| @@ -0,0 +1,178 @@ |
| +# == Class: hgweb |
| +# |
| +# A hgweb server setup. |
| +# |
| +# === Parameters: |
| +# |
| +# [*domain*] |
| +# The auhority part of the URL the instance is associated with. |
| +# |
| +# [*is_default*] |
| +# Whether the $domain shall become set up as default (or fallback) |
| +# within the HTTP daemon. |
| +# |
| +# [*certificate*] |
| +# The name of the SSL certificate file within modules/private/files, if |
| +# any. Requires a private_key as well. |
| +# |
| +# [*private_key*] |
| +# The name of the private key file within modules/private/files, if any. |
| +# Requires a certificate as well. |
| +# |
| +# [*hgaccess*] |
| +# A prototype directory source for the hgaccess repository. |
| +# |
| +# === Examples: |
| +# |
| +# class {'hgweb': |
| +# domain => 'localhost', |
| +# } |
| +# |
| +class hgweb( |
| + $domain, |
| + $is_default = false, |
| + $certificate = undef, |
| + $private_key = undef, |
| + $hgaccess = 'puppet:///modules/hgweb/hgaccess', |
| +) { |
| + |
| + include ssh, nginx |
| + |
| + $required_packages = ['mercurial-common', 'python-flup', 'spawn-fcgi'] |
| + ensure_packages($required_packages) |
| + |
| + class {'sitescripts': |
| + sitescriptsini_content => template('hgweb/sitescripts.ini.erb'), |
| + } |
| + |
| + |
| + user {'hg': |
| + comment => 'hgweb', |
| + groups => ['www-data'], |
| + home => '/home/hg', |
| + managehome => true, |
| + shell => '/bin/bash', |
| + } |
| + |
| + |
| + file {'/home/hg/.ssh': |
| + ensure => 'directory', |
| + group => 'hg', |
| + mode => 0750, |
| + owner => 'hg', |
| + require => User['hg'], |
| + } |
| + |
| + file {'/home/hg/web': |
| + ensure => 'directory', |
| + group => 'hg', |
| + mode => 0755, |
| + owner => 'hg', |
| + require => User['hg'], |
| + } |
| + |
| + file {'/home/hg/web/hgaccess': |
| + ensure => 'directory', |
| + group => 'hg', |
| + mode => 0644, |
| + owner => 'hg', |
| + recurse => true, |
| + replace => false, |
| + require => File['/home/hg/web'], |
| + source => $hgaccess, |
| + } |
| + |
| + file {'/home/hg/web/hgaccess/.hg/hgrc': |
| + content => template('hgweb/hgrc.erb'), |
| + group => 'hg', |
| + mode => 0644, |
| + owner => 'hg', |
| + require => [ |
| + Class['sitescripts'], |
| + Exec['hgaccess_init'], |
| + ], |
| + } |
| + |
| + |
| + exec {'hgaccess_init': |
| + command => 'hg init .', |
| + creates => '/home/hg/web/hgaccess/.hg', |
| + cwd => '/home/hg/web/hgaccess', |
| + logoutput => true, |
| + path => '/usr/local/bin:/usr/bin:/bin', |
| + require => File['/home/hg/web/hgaccess'], |
| + user => 'hg', |
| + } |
| + |
| + exec {'hgaccess_commit': |
| + command => 'hg add . && hg commit -u Puppet -m "Initial commit"', |
| + creates => '/home/hg/.ssh/authorized_keys', |
| + cwd => '/home/hg/web/hgaccess', |
| + environment => ['PYTHONPATH=/opt/sitescripts'], |
| + logoutput => true, |
| + path => '/usr/local/bin:/usr/bin:/bin', |
| + require => [ |
| + File['/home/hg/web/hgaccess/.hg/hgrc'], |
| + File['/home/hg/.ssh'], |
| + ], |
| + user => 'hg', |
| + } |
| + |
| + |
| + concat::fragment {'sshd_user_hg': |
| + content => 'Match User hg |
| + AllowTcpForwarding no |
| + X11Forwarding no |
| + AllowAgentForwarding no |
| + GatewayPorts no |
| + ForceCommand cd ~/web && PYTHONPATH=/opt/sitescripts hg-ssh $HGREPOS |
| + ', |
| + order => '99', |
| + target => 'sshd_config', |
| + } |
| + |
| + |
| + file {'/etc/hgweb.ini': |
| + mode => 644, |
| + require => Package[$required_packages], |
| + source => 'puppet:///modules/hgweb/hgweb.ini', |
| + } |
| + |
| + file {'/opt/hgweb.fcgi': |
| + mode => 755, |
| + require => File['/etc/hgweb.ini'], |
| + source => 'puppet:///modules/hgweb/hgweb.fcgi', |
| + } |
| + |
| + file {'/etc/init.d/hgweb': |
| + mode => 755, |
| + require => File['/opt/hgweb.fcgi'], |
| + source => 'puppet:///modules/hgweb/hgweb.sh', |
| + } |
| + |
| + file {'/home/hg/web/robots.txt': |
| + group => 'hg', |
| + mode => 0644, |
| + owner => 'hg', |
| + require => File['/home/hg/web'], |
| + source => 'puppet:///modules/hgweb/robots.txt', |
| + } |
| + |
| + service {'hgweb': |
| + enable => true, |
| + ensure => 'running', |
| + hasrestart => true, |
| + hasstatus => false, |
| + pattern => 'hgweb.fcgi', |
| + require => File['/etc/init.d/hgweb'], |
| + subscribe => File['/etc/hgweb.ini'], |
| + } |
| + |
| + nginx::hostconfig {$domain: |
| + certificate => $certificate, |
| + content => 'puppet:///modules/hgweb/nginx.conf', |
| + is_default => $is_default, |
| + log => 'access_log_hg', |
| + private_key => $private_key, |
| + } |
| +} |