diff --git a/group_vars/django_cas.yml b/group_vars/django_cas.yml new file mode 100644 index 0000000000000000000000000000000000000000..859efff617ac5d91c495a1e01caf8036b4b146d0 --- /dev/null +++ b/group_vars/django_cas.yml @@ -0,0 +1,23 @@ +--- +glob_django_cas: + repo: 'http://gitlab.adm.crans.org/nounous/django-cas.git' + path: '/var/local/django-cas' + url: + - cas.crans.org + - cas.adm.crans.org + - login.crans.org + - login.adm.crans.org + - auth.crans.org + - auth.adm.crans.org + ldap: + dn: 'cn=Utilisateurs,dc=crans,dc=org' + password: "{{ vault_cas_ldap_password }}" + user: 'cn=cas,ou=service-users,dc=crans,dc=org' + server: 172.16.10.157 + db: + host: tealc.adm.crans.org + password: "{{ vault_cas_database_password }}" + secret_key: "{{ vault_cas_secret_key }}" + reverse_proxy: + - '10.231.136.0/24' + - '2a0c:700:0:2::/64' diff --git a/hosts b/hosts index 068bb8d659e35d8acd15bd9445ccb0f77cc8408d..53dac242f18661f50376bba89dba071d08b3fbd5 100644 --- a/hosts +++ b/hosts @@ -22,6 +22,9 @@ reverseproxy [dhcp:children] routeurs_vm +[django_cas] +cas.adm.crans.org + [dns_auth_master] silice.adm.crans.org diff --git a/plays/cas.yml b/plays/cas.yml index f9006c6cf4186c14f1da7080eceda2b6892cf5c1..a55a8ab1140a3d6c4c45c4104cc44170dc8f997a 100755 --- a/plays/cas.yml +++ b/plays/cas.yml @@ -2,9 +2,8 @@ --- # Django CAS server -- hosts: cas.adm.crans.org +- hosts: django_cas vars: - cas_secret_key: "{{ vault_cas_secret_key }}" - cas_ldap_password: "{{ vault_cas_ldap_password }}" - cas_database_password: "{{ vault_cas_database_password }}" - roles: ["django-cas"] + django_cas: "{{ glob_django_cas | default({}) | combine(loc_django_cas | default({})) }}" + roles: + - django-cas diff --git a/roles/django-cas/README.md b/roles/django-cas/README.md index 6b9b47c5a55dbebdd4426148d054be4d4c511f3c..e7ca8006a30d577d4f1ecf8f408167771c1e6381 100644 --- a/roles/django-cas/README.md +++ b/roles/django-cas/README.md @@ -1,3 +1,21 @@ # Django CAS -Une fois le rôle appliqué il faut aller dans `/var/local/django-cas` et faire un `./manage.py collectstatic`. +Une fois le rôle appliqué il faut aller dans django_cas.path et faire un `./manage.py collectstatic`. + +## Variables + +On rassemble dans le dictionnaire django_cas toutes les variables liées au déploiement du cas. Voici une liste exhaustive des paramètres à définir : + + - repo : Endroit d'où cloner les sources. Par défaut au crans, on utilise le dépôt : https://gitlab.crans.org/nounous/django-cas.git + - path : Là où on va installer le logiciel. + - url : Une liste d'url qui vont servir le cas + - ldap : dictionnaire qui configure la discussion avec le ldap + - dn : nom derrière lequel sont stockés les utilisateurs dans le ldap + - password : mot de passe de connection au ldap + - user : utilisateur avec lequel on se connecte + - server : serveur sur lequel le ldap est situé + - db : dictionnaire qui configure la discussion avec la base de données + - host : l'hôte sur lequel la base de données se trouve + - password : mot de passe d'accès + - secret_key : le secret de django_cas + - reverse_proxy : liste optionnelle permettant de faire tourner le cas derrière un reverse proxy tout en gardant les informations de connection originales de l'utilisateur. Il doit contenir la liste d'ip du reverse-proxy avec lequel il se connectera au CAS. diff --git a/roles/django-cas/tasks/main.yml b/roles/django-cas/tasks/main.yml index 1d3b919ade3e0b821b30f3b26161c16d8a56175c..3b40472cd43f06852cd9ff4eefb6a3a55230d011 100644 --- a/roles/django-cas/tasks/main.yml +++ b/roles/django-cas/tasks/main.yml @@ -16,15 +16,16 @@ - name: Clone Django CAS project repository git: - repo: http://gitlab.adm.crans.org/nounous/django-cas.git - dest: /var/local/django-cas + repo: '{{ django_cas.repo }}' + dest: '{{ django_cas.path }}' + force: yes version: master umask: '002' - name: Configure Django CAS template: src: cas/settings_local.py.j2 - dest: /var/local/django-cas/cas/settings_local.py + dest: '{{ django_cas.path }}/cas/settings_local.py' mode: 0600 owner: www-data notify: Restart uwsgi diff --git a/roles/django-cas/templates/cas/settings_local.py.j2 b/roles/django-cas/templates/cas/settings_local.py.j2 index 5ae99cf1907ee9c966dd6e89f3d97046a5b2a044..484276d8ab5e0cce36314e715cc8a53041c3b99c 100644 --- a/roles/django-cas/templates/cas/settings_local.py.j2 +++ b/roles/django-cas/templates/cas/settings_local.py.j2 @@ -1,20 +1,20 @@ {{ ansible_header | comment }} -SECRET_KEY = '{{ cas_secret_key }}' +SECRET_KEY = '{{ django_cas.secret_key }}' # Settings for the CAS server -CAS_LDAP_SERVER = "172.16.10.90" -CAS_LDAP_USER = "cn=cas,ou=service-users,dc=crans,dc=org" -CAS_LDAP_PASSWORD = "{{ cas_ldap_password }}" -CAS_LDAP_BASE_DN = "cn=Utilisateurs,dc=crans,dc=org" +CAS_LDAP_SERVER = "{{ django_cas.ldap.server }}" +CAS_LDAP_USER = "{{ django_cas.ldap.user }}" +CAS_LDAP_PASSWORD = "{{ django_cas.ldap.password }}" +CAS_LDAP_BASE_DN = "{{ django_cas.ldap.dn }}" # Database DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'cas', - 'HOST': 'pgsql.adm.crans.org', + 'HOST': '{{ django_cas.db.host }}', 'USER': 'cas', - 'PASSWORD': '{{ cas_database_password }}', + 'PASSWORD': '{{ django_cas.db.password }}', } } diff --git a/roles/django-cas/templates/cron.d/cas.j2 b/roles/django-cas/templates/cron.d/cas.j2 index 0fd4795d6532f8716531f58759e738f4cc1a4aef..b0b6292de9f3fe7ac5040af4021cbad42d93f904 100644 --- a/roles/django-cas/templates/cron.d/cas.j2 +++ b/roles/django-cas/templates/cron.d/cas.j2 @@ -1,4 +1,4 @@ {{ ansible_header | comment }} -0 0 * * * www-data /var/local/django-cas/manage.py clearsessions -*/5 * * * * www-data /var/local/django-cas/manage.py cas_clean_tickets -5 0 * * * www-data /var/local/django-cas/manage.py cas_clean_sessions +0 0 * * * www-data {{ django_cas.path }}/manage.py clearsessions +*/5 * * * * www-data {{ django_cas.path }}/manage.py cas_clean_tickets +5 0 * * * www-data {{ django_cas.path }}/manage.py cas_clean_sessions diff --git a/roles/django-cas/templates/nginx/sites-available/cas.j2 b/roles/django-cas/templates/nginx/sites-available/cas.j2 index c243822e7c4092d0f60072b28f61ad7db200d53d..2372ae9260c51c3f34d2443c637371a211eb5530 100644 --- a/roles/django-cas/templates/nginx/sites-available/cas.j2 +++ b/roles/django-cas/templates/nginx/sites-available/cas.j2 @@ -1,7 +1,7 @@ {{ ansible_header | comment }} server { - server_name cas.crans.org cas.adm.crans.org login.crans.org login.adm.crans.org auth.crans.org auth.adm.crans.org; + server_name {{ django_cas.url | join(' ') }}; listen 80; listen [::]:80; @@ -11,11 +11,12 @@ server { } location /static { - alias /var/local/django-cas/cas/local_static; + alias {{ django_cas.path }}/cas/local_static; } - set_real_ip_from 10.231.136.0/24; - set_real_ip_from 2a0c:700:0:2::/64; +{% for ip in django_cas.reverse_proxy | default([]) %} + set_real_ip_from {{ ip }}; +{% endfor %} real_ip_header P-Real-Ip; location / { diff --git a/roles/django-cas/templates/update-motd.d/05-service.j2 b/roles/django-cas/templates/update-motd.d/05-service.j2 index 242bc2caf02799a49661c811768270e7e3117947..8a0f3b389599e780a794aa5f2c0cd2b3e5f012b2 100755 --- a/roles/django-cas/templates/update-motd.d/05-service.j2 +++ b/roles/django-cas/templates/update-motd.d/05-service.j2 @@ -1,3 +1,3 @@ #!/usr/bin/tail +14 {{ ansible_header | comment }} -[0m> [38;5;82mdjango-cas-server[0m a été déployé sur cette machine. Voir [38;5;6m/var/local/django-cas/[0m. +[0m> [38;5;82mdjango-cas-server[0m a été déployé sur cette machine. Voir [38;5;6m{{ django_cas.path }}[0m. diff --git a/roles/django-cas/templates/uwsgi/apps-available/cas.ini.j2 b/roles/django-cas/templates/uwsgi/apps-available/cas.ini.j2 index 7ec928041916bf200963d03cf89aa2206523da44..3055665b24238f78996256ea23ccfa5f20a394eb 100644 --- a/roles/django-cas/templates/uwsgi/apps-available/cas.ini.j2 +++ b/roles/django-cas/templates/uwsgi/apps-available/cas.ini.j2 @@ -2,8 +2,8 @@ [uwsgi] plugin = python3 -chdir = /var/local/django-cas/ -wsgi-file = /var/local/django-cas/cas/wsgi.py +chdir = {{ django_cas.path }}/ +wsgi-file = {{ django_cas.path }}/cas/wsgi.py max-request=50 cheaper = 1 cheaper-initial = 1