# @summary Manages a cgit server # # Many of these options maps directly to cgit's options (replace # underscore with dash). # # Also see cgitrc(5). # # @param root_title # Top title of webpage # @param root_desc # Description under title on web page # @param scan_path # Directory to scan for git repos # @param clone_url # List of URLs to be shown as cloneable for each repo. # @param root # Webroot, media files and similar will be placed here # @param filterpath # Where filter files shouldbe placed # @param root_readme_source # Source attribute passed along to puppet's file for the global # summary page. Mutually exclusive with root_readme_content. # @param root_readme_content # Content attribute passed along to puppet's file for the global # summary page. Mutually exclusive with root_readme_source. # @param root_readme_sha256 # SHA256 sum of root_readme_{source,content} # @param root_readme_extension # Optional extension of file. Useful if ones "about" filter checks # filename to determine rendering. # @param enable_http_clone # Enable cgit's built in dump HTTP clone entdpoint. # @param public_repos # A list of repos under scan_path which should be public. Used if # manage_server is set to nginx, and is also dumped to the file # /usr/local/var/public-repos, for use by custom filters. # @param users # Used for basic auth by nginx, if manage_server is true. # @param manage_server # Should a webserver be managed by us. Currently only nginx is # supported. # @param server_name # Passed to nginx::resource::server's server_name. # @param htpasswd # Path to htpasswd file used by nginx's basic auth. # @param cgitrc # Path to system cgitrc file. # @param filters # CGIT filters to be managed. # @see cgit::filter class cgit ( String $root_title, String $root_desc, String $scan_path, Array[String] $clone_url = [], String $root = '/var/www/cgit', String $filterpath = '/usr/lib/cgit/puppet-controlled-filters', String $root_readme_source = "puppet:///modules/${module_name}/root_readme", Optional[String] $root_readme_content = undef, Optional[String] $root_readme_sha256 = undef, String $root_readme_extension = '', # lint:ignore:params_empty_string_assignment Boolean $enable_http_clone = false, Array[String] $public_repos = [], Array[Struct[{ name => String, pass => String, }]] $users = [], Variant[Boolean, Enum['nginx']] $manage_server = false, Optional[String] $server_name = undef, String $htpasswd = '/var/lib/nginx/cgit-htpasswd', String $cgitrc = '/etc/cgitrc', Hash[String, Hash] $filters = {}, ) { # TODO figure out where CSS comes from ensure_packages([ 'git', 'cgit', ], { ensure => installed }) # Cgit::Filter <| |> -> Concat[$cgitrc] concat { $cgitrc: ensure => present, } concat::fragment { 'cgit config upper half': order => 0, content => epp('cgit/upper.epp'), target => $cgitrc, } concat::fragment { 'cgit config lower half': order => 99, content => epp('cgit/lower.epp'), target => $cgitrc, } create_resources(cgit::filter, $filters) file { "${root}/logo": ensure => directory, } file { "${root}/logo/logo.png": ensure => file, source => 'puppet:///modules/cgit/logo.png', } file { "${root}/logo/logo_large.png": ensure => file, source => 'puppet:///modules/cgit/logo_large.png', } $chksum = if $root_readme_sha256 != undef { { 'checksum' => 'sha256', 'checksum_value' => $root_readme_sha256, } } else { {} } $readme = "${root}/README${root_readme_extension}" if $root_readme_content { file { $readme: ensure => file, content => $root_readme_content, * => $chksum, } } else { file { $readme: ensure => file, source => $root_readme_source, * => $chksum, } } file { ['/usr/local', '/usr/local/var']: ensure => directory, } file { '/usr/local/var/public-repos': ensure => file, content => ($public_repos << '').join("\n"), } if $manage_server { if $server_name == undef { fail('server_name must be set if manage_server is set') } } case $manage_server { 'nginx': { include cgit::nginx } default: { } } }