roles/koji-web: Deploy the Koji Web UI

The *koji-web* role installs and configures the Koji Web GUI front-end
for Koji. It requires Apache and mod_wsgi. A client certificate is
required for authentication to the hub, and must be placed in the
host-specific subdirectory of `certs/koji`.
jenkins-master
Dustin 2018-08-12 10:08:01 -05:00
parent 6341d972f6
commit da4ec1612c
6 changed files with 188 additions and 0 deletions

View File

@ -0,0 +1,11 @@
koji_uid: 998
koji_gid: 996
koji_home: /var/lib/koji
kojihub_host: "{{ ansible_fqdn }}"
kojihub_url: https://{{ kojihub_host }}/kojihub
kojiweb_hostname: "{{ kojihub_host }}"
kojiweb_url: https://{{ kojiweb_hostname }}/koji
kojifiles_host: "{{ kojihub_host }}"
kojifiles_url: http://{{ kojifiles_host }}/kojifiles
kojiweb_secret: >
{{ lookup("password", "passwords/kojiweb_secret/" + inventory_hostname) }}

View File

@ -0,0 +1,2 @@
- name: update ca trust
command: update-ca-trust

View File

@ -0,0 +1,64 @@
- name: ensure packages are installed
package:
name={{ koji_web_packages|join(',') }}
state=present
tags:
- install
notify: restart httpd
- meta: flush_handlers
- name: ensure koji group exists
group:
name=koji
gid={{ koji_gid }}
state=present
- name: ensure koji user exists
user:
name=koji
home={{ koji_home }}
createhome=no
group=koji
uid={{ koji_uid }}
state=present
- name: ensure koji web certificate is installed
copy:
src={{ item }}
dest=/etc/kojiweb/{{ item|basename }}
mode=0440
owner=root
group=koji
with_fileglob:
- certs/koji/{{ inventory_hostname }}/kojiweb.pem
- name: ensure koji web ca certificates are installed
copy:
src={{ item }}
dest=/etc/kojiweb/{{ item|basename }}
mode=0644
with_fileglob:
- certs/koji/{{ inventory_hostname }}/*.crt
- name: ensure koji hub server ca certificate is trusted
copy:
src={{ item }}
dest=/etc/pki/ca-trust/source/anchors/koji-hub.crt
mode=0644
with_fileglob:
- certs/koji/{{ inventory_hostname }}/kojihubca.crt
notify: update ca trust
- name: ensure koji web is configured
template:
src=web.conf.j2
dest=/etc/kojiweb/web.conf
mode=0644
notify: reload httpd
- name: ensure apache is configured to serve koji web
template:
src=kojiweb.httpd.conf.j2
dest=/etc/httpd/conf.d/kojiweb.conf
notify: reload httpd
- name: ensure apache is allowed to make network connections
seboolean:
name=httpd_can_network_connect
persistent=yes
state=yes

View File

@ -0,0 +1,72 @@
<VirtualHost _default_:443>
Include conf.d/ssl.include
SSLCertificateFile {{ apache_ssl_certificate }}
SSLCertificateKeyFile {{ apache_ssl_certificate_key }}
SSLCertificateChainFile {{ apache_ssl_certificate }}
SSLCACertificateFile {{ apache_ssl_ca_certificate }}
RewriteEngine On
RewriteRule ^/?$ /koji/ [R=301,L]
</VirtualHost>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule /koji/.* https://{{ kojiweb_hostname }}$0 [R=301,L]
#We use wsgi by default
#Alias /koji "/usr/share/koji-web/scripts/wsgi_publisher.py"
#(configuration goes in /etc/kojiweb/web.conf)
WSGIDaemonProcess kojiweb \
user=koji \
group=koji \
display-name=%{GROUP}
WSGIScriptAlias /koji /usr/share/koji-web/scripts/wsgi_publisher.py \
process-group=koji
<Directory "/usr/share/koji-web/scripts/">
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
</Directory>
# uncomment this to enable authentication via Kerberos
# <Location /koji/login>
# AuthType Kerberos
# AuthName "Koji Web UI"
# KrbMethodNegotiate on
# KrbMethodK5Passwd off
# KrbServiceName HTTP
# KrbAuthRealm EXAMPLE.COM
# Krb5Keytab /etc/httpd.keytab
# KrbSaveCredentials off
# Require valid-user
# ErrorDocument 401 /koji-static/errors/unauthorized.html
# </Location>
# uncomment this to enable authentication via SSL client certificates
<Location /koji/login>
SSLVerifyClient optional
SSLVerifyDepth 10
SSLOptions +StdEnvVars
ErrorDocument 401 /koji-static/errors/unauthorized.html
</Location>
Alias /koji-static/ "/usr/share/koji-web/static/"
<Directory "/usr/share/koji-web/static/">
Options None
AllowOverride None
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
</Directory>

View File

@ -0,0 +1,37 @@
{#- vim: set ft=jinja : -#}
[web]
SiteName = koji
#KojiTheme = mytheme
# Key urls
KojiHubURL = {{ kojihub_url }}
KojiFilesURL = {{ kojifiles_url }}
# Kerberos authentication options
# WebPrincipal = koji/web@EXAMPLE.COM
# WebKeytab = /etc/httpd.keytab
# WebCCache = /var/tmp/kojiweb.ccache
# The service name of the principal being used by the hub
# KrbService = host
# SSL authentication options
WebCert = /etc/kojiweb/kojiweb.pem
ClientCA = /etc/kojiweb/clientca.crt
KojiHubCA = /etc/kojiweb/kojihubca.crt
LoginTimeout = 72
# This must be changed and uncommented before deployment
Secret = {{ kojiweb_secret }}
LibPath = /usr/share/koji-web/lib
# If set to True, then the footer will be included literally.
# If False, then the footer will be included as another Kid Template.
# Defaults to True
LiteralFooter = True
# This can be a space-delimited list of the numeric IDs of users that you want
# to hide from tasks listed on the front page. You might want to, for instance,
# hide the activity of an account used for continuous integration.
#HiddenUsers = 5372 1234

View File

@ -0,0 +1,2 @@
koji_web_packages:
- koji-web