From 7e7ad8653f718b86f56d8fe2ed922947dfb4af2c Mon Sep 17 00:00:00 2001 From: shirenn <shirenn@crans.org> Date: Fri, 5 Feb 2021 12:29:44 +0100 Subject: [PATCH 1/3] [cas] CRANSIBLEISED bro --- group_vars/django_cas.yml | 23 +++++++++++++++++++ hosts | 3 +++ plays/cas.yml | 9 ++++---- roles/django-cas/README.md | 20 +++++++++++++++- roles/django-cas/tasks/main.yml | 7 +++--- .../templates/cas/settings_local.py.j2 | 14 +++++------ roles/django-cas/templates/cron.d/cas.j2 | 6 ++--- .../templates/nginx/sites-available/cas.j2 | 9 ++++---- .../templates/update-motd.d/05-service.j2 | 2 +- .../templates/uwsgi/apps-available/cas.ini.j2 | 4 ++-- 10 files changed, 71 insertions(+), 26 deletions(-) create mode 100644 group_vars/django_cas.yml diff --git a/group_vars/django_cas.yml b/group_vars/django_cas.yml new file mode 100644 index 00000000..859efff6 --- /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 068bb8d6..53dac242 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 f9006c6c..a55a8ab1 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 6b9b47c5..12d25c0d 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.pas et faire un `./manage.py collectstatic`. + +## Variables + +On rassemble dans le dictionnaire django_cas toutes les variables liés au déploiement du cas. Voici une liste exhaustif des paramètres à définir : + + - repo: Endroit d'où cloner les sources. Par défaut au crans, on utilise le répo : 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 discution avec le ldap + - dn: nom derrière lequel sont stocké 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 discution avec la base de donnée + - 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 optionnel permettant de faire tourner le cas derrière un reverse proxy tout en gardant les informations de connections 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 1d3b919a..3b40472c 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 5ae99cf1..484276d8 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 0fd4795d..b0b6292d 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 c243822e..2372ae92 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 242bc2ca..8a0f3b38 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 7ec92804..3055665b 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 -- GitLab From 38bc1473b52e4ac1e009128f6023c4d6043a9211 Mon Sep 17 00:00:00 2001 From: pa <pa@crans.org> Date: Fri, 5 Feb 2021 13:15:15 +0100 Subject: [PATCH 2/3] [cas] Correct typo in README.md --- roles/django-cas/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/django-cas/README.md b/roles/django-cas/README.md index 12d25c0d..6d1caa48 100644 --- a/roles/django-cas/README.md +++ b/roles/django-cas/README.md @@ -1,6 +1,6 @@ # Django CAS -Une fois le rôle appliqué il faut aller dans django_cas.pas 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 -- GitLab From 7947971b6237b7b73f2c168c2b2522b0a438b26c Mon Sep 17 00:00:00 2001 From: ynerant <ynerant@crans.org> Date: Sun, 7 Feb 2021 17:58:54 +0100 Subject: [PATCH 3/3] [cas] Fix some typos on README.md --- roles/django-cas/README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/roles/django-cas/README.md b/roles/django-cas/README.md index 6d1caa48..e7ca8006 100644 --- a/roles/django-cas/README.md +++ b/roles/django-cas/README.md @@ -4,18 +4,18 @@ Une fois le rôle appliqué il faut aller dans django_cas.path et faire un `./ma ## Variables -On rassemble dans le dictionnaire django_cas toutes les variables liés au déploiement du cas. Voici une liste exhaustif des paramètres à définir : +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 répo : 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 discution avec le ldap - - dn: nom derrière lequel sont stocké 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 discution avec la base de donnée - - 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 optionnel permettant de faire tourner le cas derrière un reverse proxy tout en gardant les informations de connections originales de l'utilisateur. Il doit contenir la liste d'ip du reverse-proxy avec lequel il se connectera au CAS. + - 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. -- GitLab