diff --git a/debian-repository/tasks/main.yml b/debian-repository/tasks/main.yml index 35bd3ff2a0e1c4fd885bf0c27241bb7d9f6435e6..bd45f5a4faf91aa5e3d3905bb050559c9233cbac 100644 --- a/debian-repository/tasks/main.yml +++ b/debian-repository/tasks/main.yml @@ -1,25 +1,36 @@ --- -# file: roles/repository/tasks/main.yml +# file: debian-repository/tasks/main.yml -- name: ensure we have a group - group: name=repo system=yes state=present +- name: ensure we have a repo group + group: + name: repo + system: yes + state: present tags: - - group - - config - - repository + - debian-repository + - webservices -- name: ensure we have a user - user: name=repo group=repo system=yes home=/srv/repo shell=/usr/bin/nologin createhome=no state=present +- name: ensure we have a repo user + user: + name: repo + group: repo + system: yes + home: /srv/repo + shell: /usr/bin/nologin + createhome: no + state: present tags: - - user - - config - - repository + - debian-repository + - webservices - name: ensure we have the packaging software installed - apt: name={{item}} state=present + apt: + name: "{{ item }}" + state: present with_items: - mini-dinstall tags: - packages - - repository + - debian-repository + - webservices diff --git a/meckerkasten/defaults/main.yml b/meckerkasten/defaults/main.yml index f9ce0e61c3430b6d2995e72b995c292885dd9362..e83bc41313c31a5767be4b1e28df407dde070b43 100644 --- a/meckerkasten/defaults/main.yml +++ b/meckerkasten/defaults/main.yml @@ -1,7 +1,7 @@ --- -# file: roles/meckerkasten/defaults/main.yml +# file: meckerkasten/defaults/main.yml -meckerkasten_web_root: /var/www/meckerkasten +meckerkasten_web_root: /var/www/meckerkasten/program meckerkasten_name: meckerkasten meckerkasten_user: meckerkasten meckerkasten_group: meckerkasten @@ -9,3 +9,5 @@ meckerkasten_admins: [["FSMPI Admins", "admin@fsmpi.rwth-aachen.de"]] meckerkasten_sender: meckerkasten@fsmpi.rwth-aachen.de meckerkasten_mail_host: mail.fsmpi.rwth-aachen.de meckerkasten_allowed_hosts: ["www.fsmpi.rwth-aachen.de"] + +meckerkasten_ldap_cert: /etc/ssl/certs/rwth_chain.pem diff --git a/meckerkasten/handlers/main.yml b/meckerkasten/handlers/main.yml index 05c45495ae69983785dd45b0c451c5610b82c6c6..056b2bd343bd402b896ea7e57cfb90e7260a9b55 100644 --- a/meckerkasten/handlers/main.yml +++ b/meckerkasten/handlers/main.yml @@ -1,13 +1,14 @@ --- -# file: roles/meckerkasten/handlers/main.yml +# file: meckerkasten/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: restart uwsgi for meckerkasten - service: name="{{item}}" state=restarted enabled=yes - with_items: - - "{{meckerkasten_name}}" + service: + name: "{{ meckerkasten_name }}" + state: restarted + enabled: yes - name: create tmpfiles command: systemd-tmpfiles --create diff --git a/meckerkasten/meta/main.yml b/meckerkasten/meta/main.yml index 82a6f858a6a4e9ea5ad3c56003b32eb50504f44c..417a6ee7d3f594f790e10851751fb7a73175e1f5 100644 --- a/meckerkasten/meta/main.yml +++ b/meckerkasten/meta/main.yml @@ -1,5 +1,4 @@ --- -# file:roles/meckerkasten/meta/main.yml +# file: meckerkasten/meta/main.yml dependencies: - - { role: webserver } - - { role: uwsgi-python, uwsgi_name: "{{meckerkasten_name}}", uwsgi_user: "{{meckerkasten_user}}", uwsgi_group: "{{meckerkasten_group}}", uwsgi_path: "{{meckerkasten_web_root}}/program", uwsgi_home: "{{meckerkasten_web_root}}", uwsgi_program: "meckerkasten/wsgi.py", uwsgi_callable: "application", uwsgi_command: "runserver", uwsgi_db: "sqlite", uwsgi_python: 2 } + - { role: uwsgi-python, uwsgi_name: "{{meckerkasten_name}}", uwsgi_user: "{{meckerkasten_user}}", uwsgi_group: "{{meckerkasten_group}}", uwsgi_path: "{{meckerkasten_web_root}}", uwsgi_home: "{{meckerkasten_web_root}}", uwsgi_program: "meckerkasten/wsgi.py", uwsgi_callable: "application", uwsgi_command: "runserver", uwsgi_db: "sqlite", uwsgi_python: 2 } diff --git a/meckerkasten/tasks/main.yml b/meckerkasten/tasks/main.yml index 902ea8751422cbf4d43b25f70c28f3df08472acc..0e4e42ec055c3d8c2dcc5bf32a7dd53027e7b23c 100644 --- a/meckerkasten/tasks/main.yml +++ b/meckerkasten/tasks/main.yml @@ -1,75 +1,70 @@ --- -# file: roles/meckerkasten/tasks/main.yml +# file: meckerkasten/tasks/main.yml -- name: ensure we have a folder for the program - file: path="{{meckerkasten_web_root}}" state=directory owner="{{meckerkasten_user}}" group="{{meckerkasten_group}}" mode=0755 - tags: - - directory - - meckerkasten - -- name: ensure we have a .ssh directory - file: path="{{meckerkasten_web_root}}/.ssh" state=directory owner="{{meckerkasten_user}}" group="{{meckerkasten_group}}" mode=0755 - tags: - - directory - - meckerkasten - -- name: ensure we have our deploy key - copy: src="{{item}}" dest="{{meckerkasten_web_root}}/.ssh/" owner="{{meckerkasten_user}}" group="{{meckerkasten_group}}" mode=0600 - with_items: - - deploy-key - - deploy-key.pub +- name: ensure the deploy key is available + copy: + src: "{{ meckerkasten_deploy_key }}" + dest: /root/.ssh/meckerkasten + owner: root + group: root + mode: 0600 tags: - - ssh - meckerkasten + - webservices -- name: ensure we have our .ssh config - template: src=config dest="{{meckerkasten_web_root}}/.ssh/config" owner="{{meckerkasten_user}}" group="{{meckerkasten_group}}" mode=0644 +# https://github.com/ansible/ansible/issues/27699 +- name: ensure fucking git module is able to clone + command: mount -o remount,exec /tmp tags: - - ssh - meckerkasten + - webservices - name: ensure we have the program - git: repo=git@git.fsmpi.rwth-aachen.de:studi-systeme/meckerkasten.git dest="{{meckerkasten_web_root}}/program" - become: yes - become_user: "{{meckerkasten_user}}" + git: + repo: git@git.fsmpi.rwth-aachen.de:studi-systeme/meckerkasten.git + dest: "{{ meckerkasten_web_root }}" + key_file: /root/.ssh/meckerkasten + version: HEAD notify: - restart uwsgi for meckerkasten tags: - - git - meckerkasten + - webservices + +- name: ensure fucking git module is not able to clone anymore + command: mount -o remount,noexec /tmp + tags: + - meckerkasten + - webservices - name: ensure we have a virtualenv pip: - requirements: "{{meckerkasten_web_root}}/program/requirements.txt" - virtualenv: "{{meckerkasten_web_root}}/program" + requirements: "{{ meckerkasten_web_root }}/requirements.txt" + virtualenv: "{{ meckerkasten_web_root }}" virtualenv_python: python2 - become: yes - become_user: "{{meckerkasten_user}}" notify: - restart uwsgi for meckerkasten tags: - - pip - - python - meckerkasten + - webservices - name: ensure we have our config template: - src: settings.py - dest: "{{meckerkasten_web_root}}/program/meckerkasten/settings.py" - owner: "{{meckerkasten_user}}" - group: "{{meckerkasten_group}}" - mode: 0644 + src: settings.py.j2 + dest: "{{ meckerkasten_web_root }}/meckerkasten/settings.py" + owner: "{{ meckerkasten_user }}" + group: "{{ meckerkasten_group }}" + mode: 0640 notify: - restart uwsgi for meckerkasten tags: - - config - - python - meckerkasten + - webservices - name: ensure the unit file exists template: - src: meckerkasten.service - dest: "/etc/systemd/system/{{meckerkasten_name}}.service" + src: meckerkasten.service.j2 + dest: "/etc/systemd/system/{{ meckerkasten_name }}.service" owner: root group: root mode: 0644 @@ -77,17 +72,16 @@ - reload systemd service files - restart uwsgi for meckerkasten tags: - - config - - systemd - meckerkasten + - webservices - meta: flush_handlers -- name: ensure the services are enabled - service: name="{{item}}" enabled=yes - with_items: - - "{{meckerkasten_name}}" +- name: ensure the service is enabled + service: + name: "{{ meckerkasten_name }}" + enabled: yes + state: started tags: - - config - - systemd - meckerkasten + - webservices diff --git a/meckerkasten/templates/config b/meckerkasten/templates/config deleted file mode 100644 index 950461dd95d47aba0f2b26fb3b1a9b6bd6b915f3..0000000000000000000000000000000000000000 --- a/meckerkasten/templates/config +++ /dev/null @@ -1,4 +0,0 @@ -Host git.fsmpi.rwth-aachen.de -HostName git.fsmpi.rwth-aachen.de -User git -IdentityFile {{meckerkasten_web_root}}/.ssh/deploy-key diff --git a/meckerkasten/templates/meckerkasten.service b/meckerkasten/templates/meckerkasten.service.j2 similarity index 64% rename from meckerkasten/templates/meckerkasten.service rename to meckerkasten/templates/meckerkasten.service.j2 index 5d031f9ca3fd31461677866d6cca3f1ea9cfd73b..ea9b89cfe4a1a94155cfdbec07560f5c013f8cf7 100644 --- a/meckerkasten/templates/meckerkasten.service +++ b/meckerkasten/templates/meckerkasten.service.j2 @@ -3,8 +3,10 @@ Description=Meckerkasten After=network.target [Service] -Environment=LDAPTLS_CACERT=/etc/ssl/certs/rwth_chain.pem -Environment=MECKERKASTEN_WEB_ROOT={{meckerkasten_web_root}}/program/ +{% if meckerkasten_ldap_cert %} +Environment=LDAPTLS_CACERT={{ meckerkasten_ldap_cert }} +{% endif %} +Environment=MECKERKASTEN_WEB_ROOT={{meckerkasten_web_root}}/ Environment=MECKERKASTEN_WEB_SUBDIR=meckerkasten ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{meckerkasten_name}}.ini Restart=always diff --git a/meckerkasten/templates/settings.py b/meckerkasten/templates/settings.py.j2 similarity index 82% rename from meckerkasten/templates/settings.py rename to meckerkasten/templates/settings.py.j2 index 6b17804d245deb00761ad1757f8b67c285763504..965b63f89d21b9f22b55c9328d817f30cc9fbb1e 100644 --- a/meckerkasten/templates/settings.py +++ b/meckerkasten/templates/settings.py.j2 @@ -1,28 +1,29 @@ # Django settings for meckerkasten project. -DEBUG = True +DEBUG = False ADMINS = ( {% for name, address in meckerkasten_admins %} - ('{{name}}', '{{address}}'), + ('{{ name }}', '{{ address }}'), {% endfor %} ) - -SERVER_EMAIL = "{{meckerkasten_sender}}" -EMAIL_HOST = "{{meckerkasten_mail_host}}" -EMAIL_HOST_USER = "{{meckerkasten_mail_user|default('')}}" -EMAIL_HOST_PASSWORD = "{{meckerkasten_mail_password|default('')}}" - MANAGERS = ADMINS +SERVER_EMAIL = "{{ meckerkasten_sender }}" +EMAIL_HOST = "{{ meckerkasten_mail_host }}" +EMAIL_HOST_USER = "{{ meckerkasten_mail_user|default('') }}" +EMAIL_HOST_PASSWORD = "{{ meckerkasten_mail_password|default('') }}" +EMAIL_PORT = {{ meckerkasten_mail_port|default('25') }} +DEFAUL_FROM_EMAIL = "{{ meckerkasten_sender }}" + DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': 'meckerkasten.sqlite3', # Or path to database file if using sqlite3. - 'USER': '', # Not used with sqlite3. - 'PASSWORD': '', # Not used with sqlite3. - 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. - 'PORT': '', # Set to empty string for default. Not used with sqlite3. + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': 'meckerkasten.sqlite3', + 'USER': '', + 'PASSWORD': '', + 'HOST': '', + 'PORT': '', } } @@ -30,7 +31,7 @@ DATABASES = { # See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts ALLOWED_HOSTS = [ {% for host in meckerkasten_allowed_hosts %} - "{{host}}" + "{{ host }}" {% endfor %} ] @@ -92,7 +93,7 @@ STATICFILES_FINDERS = ( ) # Make this unique, and don't share it with anybody. -SECRET_KEY = '{{(2**2048)|random}}' +SECRET_KEY = '{{ (2**2048)|random }}' TEMPLATES = [ { @@ -168,9 +169,3 @@ LOGGING = { }, } } - -EMAIL_HOST = "{{meckerkasten_mail_host}}" -EMAIL_HOST_USER = "" -EMAIL_HOST_PASSWORD = "" -EMAIL_PORT = 25 -DEFAUL_FROM_EMAIL = "root@fsmpi.rwth-aachen.de" diff --git a/mediawiki/defaults/main.yml b/mediawiki/defaults/main.yml index 9c04cacfb90edae6130d401b2a1ad1c5ff878fce..4c2b7d243aed2371f4986da09c311863f14d057b 100644 --- a/mediawiki/defaults/main.yml +++ b/mediawiki/defaults/main.yml @@ -1,5 +1,5 @@ --- -# file: roles/mediawiki/defaults/main.yml +# file: mediawiki/defaults/main.yml mediawiki_web_root: /var/www diff --git a/mediawiki/handlers/main.yml b/mediawiki/handlers/main.yml index 0de5dcd788a2759ebedff7197a6df1eef31c304f..ae4e9283c5ed4e8fa6ec2ac017f8ea238ae9c8bb 100644 --- a/mediawiki/handlers/main.yml +++ b/mediawiki/handlers/main.yml @@ -1,11 +1,14 @@ --- -# file: roles/mediawiki/handlers/main.yml +# file: mediawiki/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: "restart uwsgi for {{ mediawiki_name }}" - service: "name=mediawiki-{{ mediawiki_name }} state=restarted enabled=yes" + service: + name: "mediawiki-{{ mediawiki_name }}" + state: restarted + enabled: yes - name: create tmpfiles shell: systemd-tmpfiles --create diff --git a/mediawiki/meta/main.yml b/mediawiki/meta/main.yml index 8c99dfce25159796ead9633182a9326f9238bb19..633491489b5015ce47f8c24361b8272808c8eb9b 100644 --- a/mediawiki/meta/main.yml +++ b/mediawiki/meta/main.yml @@ -1,5 +1,4 @@ --- -# file: roles/mediawiki/meta/main.yml +# file: mediawiki/meta/main.yml dependencies: - { role: php-fpm, fpm_pool: "{{mediawiki_name}}", fpm_user: "{{mediawiki_user}}", fpm_group: "{{mediawiki_group}}", fpm_socket_user: "{{mediawiki_user}}", fpm_socket_group: www-data } - - { role: postgres } diff --git a/mediawiki/tasks/ldap.yml b/mediawiki/tasks/ldap.yml index f1998a474068c168e77ec34e84615441c6eac53b..501c3096aba92a38e83ee3c5c5b558b5c9b3e207 100644 --- a/mediawiki/tasks/ldap.yml +++ b/mediawiki/tasks/ldap.yml @@ -1,11 +1,11 @@ --- -# file: roles/mediawiki/tasks/ldap.yml +# file: mediawiki/tasks/ldap.yml - name: ensure we have the auth extension git: repo: https://git.fsmpi.rwth-aachen.de/robin/mediawiki-remoteuser.git dest: "/var/lib/mediawiki/extensions/AuthRemoteuser" + version: HEAD tags: - - git - - packages - mediawiki + - webservices diff --git a/mediawiki/tasks/main.yml b/mediawiki/tasks/main.yml index c794a6b51ceb7e9ffa8cae438ccac2a6aa6e4b44..305d34830af7143b4e0ad169957c2c1873f8e6a2 100644 --- a/mediawiki/tasks/main.yml +++ b/mediawiki/tasks/main.yml @@ -1,23 +1,24 @@ --- -# file: roles/mediawiki/tasks/main.yml +# file: mediawiki/tasks/main.yml - name: ensure packages for mediawiki are installed on jessie - apt: name={{ item }} state=latest install_recommends=no - with_items: - - mediawiki + apt: + name: mediawiki + state: installed + install_recommends: no when: debian_version == "jessie" tags: - - packages - mediawiki + - webservices - name: ensure packages for mediawiki are installed on stretch - apt: name={{ item }} state=present - with_items: - - mediawiki + apt: + name: mediawiki + state: installed when: debian_version == "stretch" tags: - - packages - mediawiki + - webservices - name: "ensure group for {{ mediawiki_name }} exists" group: @@ -25,9 +26,8 @@ state: present system: yes tags: - - users - - config - mediawiki + - webservices - name: "ensure user for {{ mediawiki_name }} exists" user: @@ -39,9 +39,8 @@ home: "{{ mediawiki_web_root }}" createhome: no tags: - - users - - config - mediawiki + - webservices - name: "ensure the wiki folder for {{ mediawiki_name }} exists" file: @@ -51,8 +50,8 @@ group: "{{ mediawiki_group }}" path: "{{ mediawiki_web_root }}/{{ mediawiki_name }}" tags: - - config - mediawiki + - webservices - name: "ensure the wiki uploads folder for {{ mediawiki_name }} exists" file: @@ -62,15 +61,15 @@ group: "{{ mediawiki_group }}" path: "{{ mediawiki_web_root }}/{{ mediawiki_name }}/images" tags: - - config - mediawiki + - webservices - name: "get other mediawiki files for {{ mediawiki_name }}" shell: ls --hide=LocalSettings.php --hide=images /usr/share/mediawiki register: mediawiki_other_files tags: - - config - mediawiki + - webservices - name: "ensure other mediawiki files for {{ mediawiki_name }} are linked" file: @@ -78,47 +77,40 @@ src: "/usr/share/mediawiki/{{ item }}" dest: "{{ mediawiki_web_root }}/{{ mediawiki_name }}/{{ item }}" force: yes - with_items: "{{mediawiki_other_files.stdout_lines}}" + with_items: "{{ mediawiki_other_files.stdout_lines }}" tags: - - config - mediawiki + - webservices - name: ensure we have a unique temporary cache directory - lineinfile: - dest: /etc/tmpfiles.d/10-mediawiki.conf - line: "d /tmp/{{mediawiki_name}} 0775 {{mediawiki_user}} {{mediawiki_group}} - -" - create: yes + template: + src: tmpfiles.j2 + dest: "/etc/tmpfiles.d/10-mediawiki-{{ mediawiki_name }}.conf" + owner: root + group: root + mode: 0644 notify: - create tmpfiles tags: - - config - mediawiki - -#- name: "ensure the library mediawiki uses for diffs is enabled" -# file: -# state: link -# src: "../../mods-available/wikidiff2.ini" -# dest: "/etc/php5/embed/conf.d/wikidiff2.ini" -# tags: -# - config -# - mediawiki -# - php + - webservices - include: postgres.yml when: mediawiki_dbtype == "postgres" +- include: mysql.yml + when: mediawiki_dbtype == "mysql" + - include: ldap.yml when: mediawiki_use_ldap - name: ensure we are running maintenance regularly - cron: - name: "mediawiki maintenance" - hour: "0" - minute: "0" - job: "/usr/bin/php {{mediawiki_web_root}}/{{mediawiki_name}}/maintenance/runJobs.php --conf {{mediawiki_web_root}}/{{mediawiki_name}}/LocalSettings.php" - become: yes - become_user: "{{mediawiki_user}}" + template: + src: crontab.j2 + dest: "/etc/cron.d/mediawiki-{{ mediawiki_name }}-maint" + owner: root + group: root + mode: 0644 tags: - - cron - - config - mediawiki + - webservices diff --git a/mediawiki/tasks/mysql.yml b/mediawiki/tasks/mysql.yml new file mode 100644 index 0000000000000000000000000000000000000000..1405f249efa1a213009b270460eef94604a832f8 --- /dev/null +++ b/mediawiki/tasks/mysql.yml @@ -0,0 +1,21 @@ +--- +# file: mediawiki/tasks/mysql.yml + +- name: ensure php can talk with mysql on jessie + apt: + name: php5-mysql + state: installed + when: debian_version == "jessie" + tags: + - mediawiki + - webservices + +- name: ensure php can talk with mysql on stretch + apt: + name: php-mysql + state: installed + when: debian_version == "stretch" + tags: + - mediawiki + - webservices + diff --git a/mediawiki/tasks/postgres.yml b/mediawiki/tasks/postgres.yml index a3de64e32776a794cfb62ffdb701517d6a32dbcb..2eb59091241b301bdf7ad30019e94629e7b038e5 100644 --- a/mediawiki/tasks/postgres.yml +++ b/mediawiki/tasks/postgres.yml @@ -1,21 +1,23 @@ --- -# file: roles/mediawiki/tasks/postgres.yml +# file: mediawiki/tasks/postgres.yml -- name: "ensure php can talk with postgres on jessie" - apt: name=php5-pgsql state=latest +- name: ensure php can talk with postgres on jessie + apt: + name: php5-pgsql + state: installed when: debian_version == "jessie" tags: - - packages - - postgresql - mediawiki + - webservices -- name: "ensure php can talk with postgres on stretch" - apt: name=php-pgsql state=present +- name: ensure php can talk with postgres on stretch + apt: + name: php-pgsql + state: installed when: debian_version == "stretch" tags: - - packages - - postgresql - mediawiki + - webservices - name: "ensure the database user for {{ mediawiki_name }} exists" postgresql_user: @@ -26,9 +28,8 @@ become: yes become_user: postgres tags: - - postgresql - - config - mediawiki + - webservices - name: "ensure the database for {{ mediawiki_name }} exists" postgresql_db: @@ -38,9 +39,8 @@ become: yes become_user: postgres tags: - - postgresql - - config - mediawiki + - webservices - name: "ensure the database user has priviliges for {{ mediawiki_name }}" postgresql_privs: @@ -52,6 +52,5 @@ become: yes become_user: postgres tags: - - postgresql - - config - mediawiki + - webservices diff --git a/mediawiki/templates/crontab.j2 b/mediawiki/templates/crontab.j2 new file mode 100644 index 0000000000000000000000000000000000000000..d3a63cfe9e32781547745e759762db42cfd061cd --- /dev/null +++ b/mediawiki/templates/crontab.j2 @@ -0,0 +1 @@ +0 0 * * * {{ mediawiki_user }} /usr/bin/php {{ mediawiki_web_root }}/{{ mediawiki_name }}/maintenance/runJobs.php --conf {{ mediawiki_web_root }}/{{ mediawiki_name }}/LocalSettings.php diff --git a/mediawiki/templates/mediawiki.ini.j2 b/mediawiki/templates/mediawiki.ini.j2 deleted file mode 100644 index 6684a59defbf81100fab9350cd0002deec024894..0000000000000000000000000000000000000000 --- a/mediawiki/templates/mediawiki.ini.j2 +++ /dev/null @@ -1,23 +0,0 @@ -[uwsgi] -uwsgi-socket = /run/uwsgi/app/mediawiki-{{ mediawiki_name }}/mediawiki-{{ mediawiki_name }}.sock -chmod-socket = 660 -chown-socket = {{ mediawiki_user }}:www-data -autoload = -master = -processes = 4 -workers = 4 -prio = -5 -harakiri = 5 -chdir = {{ mediawiki_web_root }}/{{ mediawiki_name }} -uid = {{ mediawiki_user }} -gid = {{ mediawiki_group }} -logto = /var/log/uwsgi-mediawiki-{{ mediawiki_name }}.log -logfile-chown = {{ mediawiki_user }}:{{ mediawiki_group }} -logfile-chmod = 664 -log-date = -log-4xx = -log-5xx = -log-x-forwarded-for = -plugin = php -php-index = index.php -env = MW_INSTALL_PATH={{ mediawiki_web_root }}/{{ mediawiki_name }} diff --git a/mediawiki/templates/mediawiki.service.j2 b/mediawiki/templates/mediawiki.service.j2 deleted file mode 100644 index 1dd799174a823a50bedd7cd4514e8d3c12643d93..0000000000000000000000000000000000000000 --- a/mediawiki/templates/mediawiki.service.j2 +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=MediaWiki {{ mediawiki_name }} forwarded by uwsgi -After=network.target - -[Service] -ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/mediawiki-{{ mediawiki_name }}.ini -Restart=always -KillSignal=SIGQUIT -Type=notify -NotifyAccess=all - -[Install] -WantedBy=multi-user.target diff --git a/mediawiki/templates/tmpfiles.j2 b/mediawiki/templates/tmpfiles.j2 new file mode 100644 index 0000000000000000000000000000000000000000..cd6225d2b1e2cdcb8c0cbe88ed91db317e00be4c --- /dev/null +++ b/mediawiki/templates/tmpfiles.j2 @@ -0,0 +1 @@ +d /tmp/{{ mediawiki_name }} 0775 {{ mediawiki_user }} {{ mediawiki_group }} - - diff --git a/php-fpm/defaults/main.yml b/php-fpm/defaults/main.yml index ad1acfff87a8e19e6f17457dc59230a169ff86a0..4df56c336c8357b6ea8a06483c67b5b51f7a37a7 100644 --- a/php-fpm/defaults/main.yml +++ b/php-fpm/defaults/main.yml @@ -1,5 +1,5 @@ --- -# file: roles/php-fpm/defaults/mail.yml +# file: php-fpm/defaults/mail.yml fpm_pool: www fpm_user: www-data diff --git a/php-fpm/handlers/main.yml b/php-fpm/handlers/main.yml index 3fd2471de3f8ede95c313fd3086121c5d26fed63..710c0f6116f490a2c1551624b7d87d9fae08fc9d 100644 --- a/php-fpm/handlers/main.yml +++ b/php-fpm/handlers/main.yml @@ -1,5 +1,5 @@ --- -# file: roles/php-fpm/handlers/main.yml +# file: php-fpm/handlers/main.yml - name: restart php-fpm service: name=php7.0-fpm.service state=restarted diff --git a/php-fpm/tasks/main.yml b/php-fpm/tasks/main.yml index 50f5bf47aed9ab13e46aadc9fda39289c0dd9a16..fdea86362ab6a289d60a01607bf0e3ef5d6a76b4 100644 --- a/php-fpm/tasks/main.yml +++ b/php-fpm/tasks/main.yml @@ -1,8 +1,10 @@ --- -# file: roles/php-fpm/tasks/main.yml +# file: php-fpm/tasks/main.yml - name: ensure php-fpm is installed on stretch - apt: name="{{item}}" state=present + apt: + name: "{{ item }}" + state: present with_items: - php - php-fpm @@ -10,25 +12,25 @@ notify: - restart php-fpm tags: - - packages - - php - php-fpm + - webservices - name: ensure php-fpm is installed on jessie - apt: name="{{item}}" state=present + apt: + name: "{{ item }}" + state: present with_items: - php5 - php5-fpm when: debian_version == "jessie" tags: - - packages - - php - php-fpm + - webservices - name: ensure we have the pool we want template: - src: pool.conf - dest: "/etc/php/7.0/fpm/pool.d/{{fpm_pool}}.conf" + src: pool.conf.j2 + dest: "/etc/php/7.0/fpm/pool.d/{{ fpm_pool }}.conf" owner: root group: root mode: 0644 @@ -36,7 +38,5 @@ notify: - restart php-fpm tags: - - config - - php - php-fpm - + - webservices diff --git a/php-fpm/templates/pool.conf b/php-fpm/templates/pool.conf deleted file mode 100644 index f7f846fdf4ee68aa43bf7d6a24b97fb951bba3bd..0000000000000000000000000000000000000000 --- a/php-fpm/templates/pool.conf +++ /dev/null @@ -1,14 +0,0 @@ -[{{fpm_pool}}] -user = {{fpm_user}} -group = {{fpm_group}} - -listen = /run/php/{{fpm_pool}}-fpm.sock - -listen.owner = {{fpm_socket_user}} -listen.group = {{fpm_socket_group}} - -pm = dynamic -pm.max_children = 5 -pm.start_servers = 2 -pm.min_spare_servers = 1 -pm.max_spare_servers = 3 diff --git a/php-fpm/templates/pool.conf.j2 b/php-fpm/templates/pool.conf.j2 new file mode 100644 index 0000000000000000000000000000000000000000..2695e216c8d15be4a1f330bbef50ea0878f3bf5d --- /dev/null +++ b/php-fpm/templates/pool.conf.j2 @@ -0,0 +1,14 @@ +[{{ fpm_pool }}] +user = {{ fpm_user }} +group = {{ fpm_group }} + +listen = /run/php/{{ fpm_pool }}-fpm.sock + +listen.owner = {{ fpm_socket_user }} +listen.group = {{ fpm_socket_group }} + +pm = dynamic +pm.max_children = 5 +pm.start_servers = 2 +pm.min_spare_servers = 1 +pm.max_spare_servers = 3 diff --git a/protokollsystem/defaults/main.yml b/protokollsystem/defaults/main.yml index 4f5aec1ee5c4b97741c7bdd7efa053041f7b288e..2ffb469e083f2bbe482b091c16e9002e4c7a4aad 100644 --- a/protokollsystem/defaults/main.yml +++ b/protokollsystem/defaults/main.yml @@ -1,8 +1,66 @@ --- -# file: roles/protokollsystem/defaults/main.yml +# file: protokollsystem/defaults/main.yml -protokolle_web_root: /var/www/protokollsystem +protokolle_web_root: /var/www/protokollsystem/program protokolle_name: protokollsystem protokolle_user: protokolle protokolle_group: protokolle protokolle_celery_concurrency: 4 +protokolle_ldap_cert: /etc/ssl/certs/rwth_chain.pem + +protokolle_mail: True +protokolle_mail_from: 'Gustav Geier <protokolle@fsmpi.rwth-aachen.de>' +protokolle_mail_host: 'mail.fsmpi.rwth-aachen.de:25' +protokolle_mail_user: '' +protokolle_mail_password: '' +protokolle_mail_tls: False # 'tls' or 'starttls' + +protokolle_celery_broker: 'redis://localhost:6379/0' + +protokolle_url_root: 'protokolle.fsmpi.rwth-aachen.de' +protokolle_url_proto: 'https' +protokolle_url_path: '/' + +protokolle_printing: True +protokolle_printing_server: 'printsrv.fsmpi.rwth-aachen.de:631' +protokolle_printing_user: 'protokolle' +protokolle_printing_printers: + - printer: kopierer + options: ["ColorModel=Gray", "KCStaple=Center", "KCPunch=2HoleEUR", "Duplex=DuplexNoTumble"] + - printer: hoern_kopierer + options: ["Duplex=DuplexNoTumble"] + +protokolle_etherpad: True +protokolle_etherpad_url: 'https://fachschaften.rwth-aachen.de/etherpad' + +protokolle_wiki: True +protokolle_wiki_api: 'https://www.fsmpi.rwth-aachen.de/wiki/api.php' +protokolle_wiki_anonymous: False +protokolle_wiki_user: 'protocolpusher' +protokolle_wiki_password: '0h3CjGju' +protokolle_wiki_domain: 'fsmpi' + +protokolle_calendar: True +protokolle_calendar_url: '' + +protokolle_admin_mail: 'admin@fsmpi.rwth-aachen.de' +protokolle_admin_group: 'protokolladmin' + +protokolle_latex_local_templates: '' # local-templates +protokolle_latex_logo_template: '' # asta-logo.tex +protokolle_latex_geometry: '' # bottom=1.6cm,top=1.6cm,inner=2.5cm,outer=1.0cm,footskip=1.0cm,headsep=0.6cm +protokolle_latex_pagestyle: '' # fancy +protokolle_latex_packages: [] # ["[absolute]{textpos}", "{fancyheadings}"] +protokolle_latex_header_footer: None # True + +protokolle_auth_max_duration: 86400 +protokolle_auth_backends: + - type: ADManager + host: auth.fsmpi.rwth-aachen.de + domain: FSMPI + user_dn: 'cn=users,dc=fsmpi,dc=rwth-aachen,dc=de' + group_dn: 'dc=fsmpi,dc=rwth-aachen,dc=de' + ca_cert: '/etc/ssl/certs/rwth_chain.pem' + obsolete: False +protokolle_auth_obsoletion_warning: 'Bitte migriere deinen Fachschaftsaccount im <a href=\"https://migration.fsmpi.rwth-aachen.de\">Migrationstool</a>!' + diff --git a/protokollsystem/handlers/main.yml b/protokollsystem/handlers/main.yml index a2a8db7cdb40321c7c44092bf3cc11b324e87b52..6a11f0a90f6e2fb5d6be19f0fff95a49061e22a5 100644 --- a/protokollsystem/handlers/main.yml +++ b/protokollsystem/handlers/main.yml @@ -1,14 +1,16 @@ --- -# file: roles/protokollsystem/handlers/main.yml +# file: protokollsystem/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: restart uwsgi for protokollsystem - service: name="{{item}}" state=restarted enabled=yes + service: + name: "{{ item }}" + state: restarted with_items: - - "{{protokolle_name}}" - - "{{protokolle_name}}-celery" + - "{{ protokolle_name }}" + - "{{ protokolle_name }}-celery" - name: create tmpfiles command: systemd-tmpfiles --create diff --git a/protokollsystem/meta/main.yml b/protokollsystem/meta/main.yml index 561292b67b6826174e507d8591fb9928bf64dc0c..c8705ba558878478ea4096e0458d90983afff549 100644 --- a/protokollsystem/meta/main.yml +++ b/protokollsystem/meta/main.yml @@ -1,9 +1,6 @@ --- -# file:roles/protokollsystem/meta/main.yml +# file: protokollsystem/meta/main.yml dependencies: - - { role: webserver } - - { role: redis-server } - - { role: postgres } - { role: texlive } - { role: cups-client } - { role: uwsgi-python, uwsgi_name: "{{protokolle_name}}", uwsgi_user: "{{protokolle_user}}", uwsgi_group: "{{protokolle_group}}", uwsgi_path: "{{protokolle_web_root}}/program", uwsgi_home: "{{protokolle_web_root}}", uwsgi_program: "server.py", uwsgi_callable: "app", uwsgi_command: "runserver", uwsgi_db: "postgres", uwsgi_python: 3, uwsgi_mules: 1 } diff --git a/protokollsystem/tasks/main.yml b/protokollsystem/tasks/main.yml index 3ff8f512dfb35b86391b188af63c956f245ca3b4..a03f105bb0508dc23fccd217a21978f692e47eaa 100644 --- a/protokollsystem/tasks/main.yml +++ b/protokollsystem/tasks/main.yml @@ -1,84 +1,99 @@ --- -# file: roles/protokollsystem/tasks/main.yml +# file: protokollsystem/tasks/main.yml -- name: ensure we have the fonts - apt: name="{{item}}" state=present +- name: ensure we have all required software and fonts + apt: + name: "{{ item }}" + state: present with_items: + - python3-virtualenv + - virtualenv + - libxml2-dev + - libxslt-dev - fontconfig - tex-gyre tags: - - packages - protokollsystem + - webservices -- name: ensure we have a folder for the program - file: path="{{protokolle_web_root}}" state=directory owner="{{protokolle_user}}" group="{{protokolle_group}}" mode=0755 - tags: - - directory - - protokollsystem - -- name: ensure we have a .ssh directory - file: path="{{protokolle_web_root}}/.ssh" state=directory owner="{{protokolle_user}}" group="{{protokolle_group}}" mode=0755 - tags: - - directory - - protokollsystem - -- name: ensure we have our deploy key - copy: src="{{item}}" dest="{{protokolle_web_root}}/.ssh/" owner="{{protokolle_user}}" group="{{protokolle_group}}" mode=0600 - with_items: - - deploy-key - - deploy-key.pub +- name: ensure the deploy key is available + copy: + src: "{{ protokolle_deploy_key }}" + dest: /root/.ssh/protokolle + owner: root + group: root + mode: 0600 tags: - - ssh - protokollsystem + - webservices -- name: ensure we have our .ssh config - template: src=config dest="{{protokolle_web_root}}/.ssh/config" owner="{{protokolle_user}}" group="{{protokolle_group}}" mode=0644 +# https://github.com/ansible/ansible/issues/27699 +- name: ensure fucking git module is able to clone + command: mount -o remount,exec /tmp tags: - - ssh - protokollsystem + - webservices - name: ensure we have the program - git: repo=git@git.fsmpi.rwth-aachen.de:protokollsystem/proto3.git dest="{{protokolle_web_root}}/program" - become: yes - become_user: "{{protokolle_user}}" + git: + repo: git@git.fsmpi.rwth-aachen.de:protokollsystem/proto3.git + dest: "{{ protokolle_web_root }}" + accept_hostkey: True # TODO remove this + key_file: /root/.ssh/protokolle notify: - restart uwsgi for protokollsystem tags: - - git - protokollsystem + - webservices + +- name: ensure fucking git module is not able to clone anymore + command: mount -o remount,noexec /tmp + tags: + - protokollsystem + - webservices - name: ensure we have a virtualenv pip: - requirements: "{{protokolle_web_root}}/program/requirements.txt" - virtualenv: "{{protokolle_web_root}}/program" + requirements: "{{ protokolle_web_root }}/requirements.txt" + virtualenv: "{{ protokolle_web_root }}" virtualenv_python: python3 - become: yes - become_user: "{{protokolle_user}}" notify: - restart uwsgi for protokollsystem tags: - - pip - - python - protokollsystem + - webservices - name: ensure we have our config template: - src: config.py - dest: "{{protokolle_web_root}}/program/config.py" - owner: "{{protokolle_user}}" - group: "{{protokolle_group}}" + src: config.py.j2 + dest: "{{ protokolle_web_root }}/config.py" + owner: "{{ protokolle_user }}" + group: "{{ protokolle_group }}" + mode: 0640 + notify: + - restart uwsgi for protokollsystem + tags: + - protokollsystem + - webservices + +- name: ensure we have our local templates + copy: + src: "{{ protokolle_local_templates }}" + dest: "{{ protokolle_web_root }}/" + owner: "{{ protokolle_user }}" + group: "{{ protokolle_group }}" mode: 0644 + when: protokolle_local_templates notify: - restart uwsgi for protokollsystem tags: - - config - - python - protokollsystem + - webservices - name: ensure the unit file exists template: - src: protokollsystem.service - dest: "/etc/systemd/system/{{protokolle_name}}.service" + src: protokollsystem.service.j2 + dest: "/etc/systemd/system/{{ protokolle_name }}.service" owner: root group: root mode: 0644 @@ -86,14 +101,13 @@ - reload systemd service files - restart uwsgi for protokollsystem tags: - - config - - systemd - protokollsystem + - webservices - name: ensure the celery unit file exists template: - src: celery.service - dest: "/etc/systemd/system/{{protokolle_name}}-celery.service" + src: celery.service.j2 + dest: "/etc/systemd/system/{{ protokolle_name }}-celery.service" owner: root group: root mode: 0644 @@ -101,19 +115,19 @@ - reload systemd service files - restart uwsgi for protokollsystem tags: - - config - - systemd - - celery - protokollsystem + - webservices - meta: flush_handlers - name: ensure the services are enabled - service: name="{{item}}" enabled=yes + service: + name: "{{ item }}" + enabled: yes + state: started with_items: - - "{{protokolle_name}}" - - "{{protokolle_name}}-celery" + - "{{ protokolle_name }}" + - "{{ protokolle_name }}-celery" tags: - - config - - systemd - protokollsystem + - webservices diff --git a/protokollsystem/templates/celery.service b/protokollsystem/templates/celery.service deleted file mode 100644 index 360a975cf4fdf51d83d665ac76c8a1df9fc9d4af..0000000000000000000000000000000000000000 --- a/protokollsystem/templates/celery.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Protokollsystem-Celery -After=network.target - -[Service] -User={{protokolle_user}} -Group={{protokolle_group}} -WorkingDirectory={{protokolle_web_root}}/program -Environment=VIRTUAL_ENV="{{protokolle_web_root}}/program" -ExecStart={{protokolle_web_root}}/program/bin/celery -A server.celery worker --loglevel=DEBUG --concurrency={{protokolle_celery_concurrency}} -Restart=always - -[Install] -WantedBy=multi-user.target diff --git a/protokollsystem/templates/celery.service.j2 b/protokollsystem/templates/celery.service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..512f08b503de9212034d44b02b1e9f3a39d9481c --- /dev/null +++ b/protokollsystem/templates/celery.service.j2 @@ -0,0 +1,14 @@ +[Unit] +Description={{ protokolle_name }}-Celery +After=network.target + +[Service] +User={{ protokolle_user }} +Group={{ protokolle_group }} +WorkingDirectory={{ protokolle_web_root }} +Environment=VIRTUAL_ENV="{{ protokolle_web_root }}" +ExecStart={{ protokolle_web_root }}/bin/celery -A server.celery worker --loglevel=DEBUG --concurrency={{ protokolle_celery_concurrency }} +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/protokollsystem/templates/config b/protokollsystem/templates/config deleted file mode 100644 index 0998e43d453f18d9fef362788acc1e9682a2e783..0000000000000000000000000000000000000000 --- a/protokollsystem/templates/config +++ /dev/null @@ -1,4 +0,0 @@ -Host git.fsmpi.rwth-aachen.de -HostName git.fsmpi.rwth-aachen.de -User git -IdentityFile {{protokolle_web_root}}/.ssh/deploy-key diff --git a/protokollsystem/templates/config.py b/protokollsystem/templates/config.py deleted file mode 100644 index 7f6cf84379e9e4a3405958ec0dba455b1b07e81c..0000000000000000000000000000000000000000 --- a/protokollsystem/templates/config.py +++ /dev/null @@ -1,135 +0,0 @@ -SQLALCHEMY_DATABASE_URI = "postgresql://{{protokolle_user}}:@/{{protokolle_name}}" -SQLALCHEMY_TRACK_MODIFICATIONS = False - -SECRET_KEY = "{{protokolle_secret}}" - -DEBUG = False - -MAIL_ACTIVE = True -MAIL_FROM = "Gustav Geier <protokolle@fsmpi.rwth-aachen.de>" -MAIL_HOST = "mail.fsmpi.rwth-aachen.de:25" -MAIL_USER = "" -MAIL_PASSWORD = "" -MAIL_USE_TLS = False - -CELERY_BROKER_URL = "redis://localhost:6379/0" -CELERY_TASK_SERIALIZER = "pickle" -CELERY_ACCEPT_CONTENT = ["pickle"] - -URL_ROOT = "protokolle.fsmpi.rwth-aachen.de" -URL_PROTO = "https" -URL_PATH = "/" -URL_PARAMS = "" - -PRINTING_ACTIVE = True -PRINTING_SERVER = "printsrv.fsmpi.rwth-aachen.de:631" -PRINTING_USER = "protokolle" -PRINTING_PRINTERS = { - "kopierer": ["ColorModel=Gray", "KCStaple=Center", "KCPunch=2HoleEUR", "Duplex=DuplexNoTumble"], - "hoern_kopierer": ["Duplex=DuplexNoTumble"] -} - -ETHERPAD_ACTIVE = True -ETHERPAD_URL = "https://fachschaften.rwth-aachen.de/etherpad" -EMPTY_ETHERPAD = """Welcome to Etherpad! - -This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents! - -Get involved with Etherpad at http://etherpad.org - -""" - -WIKI_ACTIVE = True -WIKI_API_URL = "https://www.fsmpi.rwth-aachen.de/wiki/api.php" -WIKI_ANONYMOUS = False -WIKI_USER = "protocolpusher" -WIKI_PASSWORD = "0h3CjGju" -WIKI_DOMAIN = "fsmpi" - -CALENDAR_ACTIVE = True -CALENDAR_URL = "" -CALENDAR_DEFAULT_DURATION = 3 -CALENDAR_MAX_REQUESTS = 10 - -SESSION_PROTECTION = "strong" - -SECURITY_KEY = "{{protokolle_security_key}}" -from auth import LdapManager, ADManager -AUTH_MAX_DURATION = 86400 -AUTH_BACKENDS = [ -# LdapManager( -# host="rumo.fsmpi.rwth-aachen.de", -# user_dn="uid={},ou=users,dc=fsmpi,dc=rwth-aachen,dc=de", -# group_dn="dc=fsmpi,dc=rwth-aachen,dc=de", -# obsolete=True), - ADManager( - host="auth.fsmpi.rwth-aachen.de", - domain="FSMPI", - user_dn="cn=users,dc=fsmpi,dc=rwth-aachen,dc=de", - group_dn="dc=fsmpi,dc=rwth-aachen,dc=de", - ca_cert="/etc/ssl/certs/rwth_chain.pem"), -] - -OBSOLETION_WARNING = "Bitte migriere deinen Fachschaftsaccount im <a href=\"https://migration.fsmpi.rwth-aachen.de\">Migrationstool</a>!" - -ERROR_CONTEXT_LINES = 3 - -PAGE_LENGTH = 20 -PAGE_DIFF = 3 - -MAX_INDEX_DAYS = 14 - -ADMIN_MAIL = "admin@fsmpi.rwth-aachen.de" -ADMIN_GROUP = "protokolladmin" - -PARSER_LAZY = False - -FUZZY_MIN_SCORE = 90 - -FONTS = { - "main": { - "extension": ".pfb", - "path": "/usr/share/fonts/type1/gsfonts/", - "regular": "n019003l", - "bold": "n019004l", - "italic": "n019023l", - "bolditalic": "n019024l" - }, - "roman": { - "extension": ".pfb", - "path": "/usr/share/fonts/type1/gsfonts/", - "regular": "n021003l", - "bold": "n021004l", - "italic": "n021023l", - "bolditalic": "n021024l" - }, - "sans": { - "extension": ".pfb", - "path": "/usr/share/fonts/type1/gsfonts/", - "regular": "n019003l", - "bold": "n019004l", - "italic": "n019023l", - "bolditalic": "n019024l" - }, - "mono": { - "extension": ".pfb", - "path": "/usr/share/fonts/type1/gsfonts/", - "regular": "n022003l", - "bold": "n022004l", - "italic": "n022023l", - "bolditalic": "n022024l" - } -} - - -DOCUMENTS_PATH = "documents" - -PRIVATE_KEYWORDS = ["private", "internal", "privat", "intern"] - -LATEX_BULLETPOINTS = [ - r"\textbullet", - r"\normalfont \bfseries \textendash", - r"$\circ$", - r"\textperiodcentered" -] - diff --git a/protokollsystem/templates/config.py.j2 b/protokollsystem/templates/config.py.j2 new file mode 100644 index 0000000000000000000000000000000000000000..abe32780d738f8dc540e15a83c5bd7c9d23a3b95 --- /dev/null +++ b/protokollsystem/templates/config.py.j2 @@ -0,0 +1,158 @@ +SQLALCHEMY_DATABASE_URI = "postgresql://{{ protokolle_user }}:@/{{ protokolle_name }}" +SQLALCHEMY_TRACK_MODIFICATIONS = False + +SECRET_KEY = "{{ protokolle_secret }}" + +DEBUG = False + +MAIL_ACTIVE = {{ protokolle_mail }} +MAIL_FROM = "{{ protokolle_mail_from }}" +MAIL_HOST = "{{ protokolle_mail_host }}" +MAIL_USER = "{{ protokolle_mail_user }}" +MAIL_PASSWORD = "{{ protokolle_mail_password }}" +{% if protokolle_mail_tls == 'tls' %} +MAIL_USE_TLS = True +MAIL_USE_STARTTLS = False +{% else if protokolle_mail_tls == 'starttls' %} +MAIL_USE_TLS = False +MAIL_USE_STARTTLS = True +{% else %} +MAIL_USE_TLS = False +MAIL_USE_STARTTLS = False +{% endif %} + +CELERY_BROKER_URL = "{{ protokolle_celery_broker }}" +CELERY_TASK_SERIALIZER = "pickle" +CELERY_ACCEPT_CONTENT = ["pickle"] + +URL_ROOT = "{{ protokolle_url_root }}" +URL_PROTO = "{{ protokolle_url_proto }}" +URL_PATH = "{{ protokolle_url_path }}" +URL_PARAMS = "" + +PRINTING_ACTIVE = {{ protokolle_printing }} +PRINTING_SERVER = "{{ protokolle_printing_server }}" +PRINTING_USER = "{{ protokolle_printing_user }}" +PRINTING_PRINTERS = { +{% for p in protokolle_printing_printers %} + "{{ p.printer }}": [ +{% for o in p.options %} + "{{ o }}", +{% endfor %} + ], +{% endfor %} +} + +ETHERPAD_ACTIVE = {{ protokolle_etherpad }} +ETHERPAD_URL = "{{ protokolle_etherpad_url }}" +EMPTY_ETHERPAD = """Welcome to Etherpad! + +This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents! + +Get involved with Etherpad at http://etherpad.org + +""" + +WIKI_ACTIVE = {{ protokolle_wiki }} +WIKI_API_URL = "{{ protokolle_wiki_api }}" +WIKI_ANONYMOUS = {{ protokolle_wiki_anonymous }} +WIKI_USER = "{{ protokolle_wiki_user }}" +WIKI_PASSWORD = "{{ protokolle_wiki_password }}" +WIKI_DOMAIN = "{{ protokolle_wiki_domain }}" + +CALENDAR_ACTIVE = {{ protokolle_calendar }} +CALENDAR_URL = "{{ protokolle_calendar_url }}" +CALENDAR_DEFAULT_DURATION = 3 +CALENDAR_MAX_REQUESTS = 10 + +SESSION_PROTECTION = "strong" + +SECURITY_KEY = "{{ protokolle_security_key }}" +from auth import LdapManager, ADManager +AUTH_MAX_DURATION = {{ protokolle_auth_max_duration }} +AUTH_BACKENDS = [ +{% for auth in protokolle_auth_backends %} + {{ auth.type }}( + host="{{ auth.host }}", + domain="{{ auth.domain }}", + user_dn="{{ auth.user_dn }}", + group_dn="{{ auth.group_dn }}", + ca_cert="{{ auth.ca_cert }}", + obsolete={{ auth.obsolete }}), +{% endfor %} +] + +OBSOLETION_WARNING = "{{ protokolle_auth_obsoletion_warning }}" + +ERROR_CONTEXT_LINES = 3 + +PAGE_LENGTH = 20 +PAGE_DIFF = 3 + +MAX_INDEX_DAYS = 14 + +ADMIN_MAIL = "{{ protokolle_admin_mail }}" +ADMIN_GROUP = "{{ protokolle_admin_group }}" + +PARSER_LAZY = False + +FUZZY_MIN_SCORE = 90 + +FONTS = { + "main": { + "extension": ".pfb", + "path": "/usr/share/fonts/type1/gsfonts/", + "regular": "n019003l", + "bold": "n019004l", + "italic": "n019023l", + "bolditalic": "n019024l" + }, + "roman": { + "extension": ".pfb", + "path": "/usr/share/fonts/type1/gsfonts/", + "regular": "n021003l", + "bold": "n021004l", + "italic": "n021023l", + "bolditalic": "n021024l" + }, + "sans": { + "extension": ".pfb", + "path": "/usr/share/fonts/type1/gsfonts/", + "regular": "n019003l", + "bold": "n019004l", + "italic": "n019023l", + "bolditalic": "n019024l" + }, + "mono": { + "extension": ".pfb", + "path": "/usr/share/fonts/type1/gsfonts/", + "regular": "n022003l", + "bold": "n022004l", + "italic": "n022023l", + "bolditalic": "n022024l" + } +} + + +DOCUMENTS_PATH = "documents" + +PRIVATE_KEYWORDS = ["private", "internal", "privat", "intern"] + +LATEX_BULLETPOINTS = [ + r"\textbullet", + r"\normalfont \bfseries \textendash", + r"$\circ$", + r"\textperiodcentered" +] + +LATEX_LOCAL_TEMPLATES = "{{ protokolle_latex_local_templates }}" +LATEX_LOGO_TEMPLATE = "{{ protokolle_latex_logo_template }}" +LATEX_GEOMETRY = "{{ protokolle_latex_geometry }}" +LATEX_PAGESTYLE = "{{ protokolle_latex_pagestyle }}" +LATEX_ADDITIONAL_PACKAGES = ["{{ protokolle_latex_packages|join('", "') }}"] +{% if protokolle_latex_header_footer %} +LATEX_HEADER_FOOTER = True +{% else if protokolle_latex_header_footer == False %} +LATEX_HEADER_FOOTER = False +{% endif %} + diff --git a/protokollsystem/templates/protokollsystem.service b/protokollsystem/templates/protokollsystem.service deleted file mode 100644 index 12c030a321489cef635d95dd80238e6926dddc4a..0000000000000000000000000000000000000000 --- a/protokollsystem/templates/protokollsystem.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=Protokollsystem -After=network.target -Wants=protokollsystem-celery.service - -[Service] -Environment=LDAPTLS_CACERT=/etc/ssl/certs/rwth_chain.pem -ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{protokolle_name}}.ini -Restart=always -KillSignal=SIGTERM -Type=notify -NotifyAccess=all - -[Install] -WantedBy=multi-user.target diff --git a/protokollsystem/templates/protokollsystem.service.j2 b/protokollsystem/templates/protokollsystem.service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..177b92f94a5f7077765a8300ce8f43ba5b07e1c0 --- /dev/null +++ b/protokollsystem/templates/protokollsystem.service.j2 @@ -0,0 +1,17 @@ +[Unit] +Description={{ protokolle_name }} +After=network.target +Wants=protokollsystem-celery.service + +[Service] +{% if protokolle_ldap_cert %} +Environment=LDAPTLS_CACERT={{ protokolle_ldap_cert }} +{% endif %} +ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{ protokolle_name }}.ini +Restart=always +KillSignal=SIGTERM +Type=notify +NotifyAccess=all + +[Install] +WantedBy=multi-user.target diff --git a/schildergenerator/defaults/main.yml b/schildergenerator/defaults/main.yml index 71b5b4161fa82337a6bd2e274f5411d6af7d90a0..b39cf2482fb6414073057d9db36c1a5cb0b4ac4b 100644 --- a/schildergenerator/defaults/main.yml +++ b/schildergenerator/defaults/main.yml @@ -1,7 +1,7 @@ --- -# file: roles/schildergenerator/defaults/main.yml +# file: schildergenerator/defaults/main.yml -schilder_web_root: /var/www/schilder +schilder_web_root: /var/www/schilder/program schilder_name: schilder schilder_user: schilder schilder_group: schilder diff --git a/schildergenerator/handlers/main.yml b/schildergenerator/handlers/main.yml index 297692941bc67e0cd709d05dce0f96fd0014c8fc..9453d1bfcfb93d3824cd9aeb4eecd642ff35da17 100644 --- a/schildergenerator/handlers/main.yml +++ b/schildergenerator/handlers/main.yml @@ -1,11 +1,13 @@ --- -# file: roles/schilder/handlers/main.yml +# file: schildergenerator/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: restart uwsgi for schilder - service: name="{{schilder_name}}" state=restarted enabled=yes + service: + name: "{{ schilder_name }}" + state: restarted - name: create tmpfiles command: systemd-tmpfiles --create diff --git a/schildergenerator/meta/main.yml b/schildergenerator/meta/main.yml index 891398649ba33ddeeb08c6b808f320402aede046..a2939c374ebf9e8c5871ec44def63b2d52c36774 100644 --- a/schildergenerator/meta/main.yml +++ b/schildergenerator/meta/main.yml @@ -1,8 +1,7 @@ --- -# file: roles/schildergenerator/meta/main.yml +# file: schildergenerator/meta/main.yml dependencies: - - { role: webserver } - { role: texlive } - { role: cups-client } - { role: uwsgi-python, uwsgi_name: "{{schilder_name}}", uwsgi_user: "{{schilder_user}}", uwsgi_group: "{{schilder_group}}", uwsgi_path: "{{schilder_web_root}}/program", uwsgi_home: "{{schilder_web_root}}", uwsgi_program: "schilder.py", uwsgi_callable: "app", uwsgi_command: "", uwsgi_db: "", uwsgi_python: 2, uwsgi_mules: 0 } diff --git a/schildergenerator/tasks/main.yml b/schildergenerator/tasks/main.yml index 4926a68d00cf7328a3ff802e768fcc7ac60653c1..ebaa0055128725d0f7017872a761f5ac404feaa4 100644 --- a/schildergenerator/tasks/main.yml +++ b/schildergenerator/tasks/main.yml @@ -1,66 +1,57 @@ --- -# file: roles/schildergenerator/tasks/main.yml +# file: schildergenerator/tasks/main.yml - name: ensure we have necessary software installed - apt: name="{{item}}" state=present + apt: + name: "{{ item }}" + state: present with_items: - graphicsmagick - python-pythonmagick tags: - - packages - schildergenerator + - webservices -- name: ensure we have the folders for the program - file: - path: "{{item}}" - state: directory - owner: "{{schilder_user}}" - group: "{{schilder_group}}" - mode: 0755 - with_items: - - "{{schilder_web_root}}" - - "{{schilder_web_root}}/program" +- name: ensure the deploy key is available + copy: + src: "{{ schilder_deploy_key }}" + dest: /root/.ssh/schildergenerator + owner: root + group: root + mode: 0600 tags: - - directory - schildergenerator + - webservices -- name: ensure we have a .ssh directory - file: path="{{schilder_web_root}}/.ssh" state=directory owner="{{schilder_user}}" group="{{schilder_group}}" mode=0755 +# https://github.com/ansible/ansible/issues/27699 +- name: ensure fucking git module is able to clone + command: mount -o remount,exec /tmp tags: - - directory - schildergenerator + - webservices -- name: ensure we have our deploy key - copy: src="{{item}}" dest="{{schilder_web_root}}/.ssh/" owner="{{schilder_user}}" group="{{schilder_group}}" mode=0600 - with_items: - - deploy-key - - deploy-key.pub +- name: ensure the git is at the current revision + git: + repo: git@git.fsmpi.rwth-aachen.de:schilder/schildergenerator.git + dest: "{{ schilder_web_root }}" + key_file: /root/.ssh/schildergenerator + version: HEAD + notify: + - restart uwsgi for schilder tags: - - ssh - schildergenerator + - webservices -- name: ensure we have our .ssh config - template: src=config dest="{{schilder_web_root}}/.ssh/config" owner="{{schilder_user}}" group="{{schilder_group}}" mode=0644 +- name: ensure fucking git module is not able to clone anymore + command: mount -o remount,noexec /tmp tags: - - ssh - schildergenerator - -#- name: ensure we have the program -# git: -# repo: "git@git.fsmpi.rwth-aachen.de:schilder/schildergenerator.git" -# dest: "{{schilder_web_root}}/program" -# become: yes -# become_user: "{{schilder_user}}" -# notify: -# - restart uwsgi for schilder -# tags: -# - git -# - schildergenerator + - webservices - name: ensure git ignores local files lineinfile: - dest: "{{schilder_web_root}}/program/.git/info/exclude" - line: "{{item}}" + dest: "{{ schilder_web_root }}/.git/info/exclude" + line: "{{ item }}" state: present with_items: - data/ @@ -69,66 +60,61 @@ - local/ - share/ tags: - - git - schildergenerator + - webservices - name: ensure we have our requirements copy: src: requirements.txt - dest: "{{schilder_web_root}}/requirements.txt" - owner: "{{schilder_user}}" - group: "{{schilder_group}}" + dest: "{{ schilder_web_root }}/requirements.txt" + owner: "{{ schilder_user }}" + group: "{{ schilder_group }}" mode: 0644 tags: - - pip - - python - schildergenerator + - webservices - name: ensure we have a virtualenv pip: - requirements: "{{schilder_web_root}}/requirements.txt" - virtualenv: "{{schilder_web_root}}/program" + requirements: "{{ schilder_web_root }}/requirements.txt" + virtualenv: "{{ schilder_web_root }}" virtualenv_python: python2 virtualenv_site_packages: yes - become: yes - become_user: "{{schilder_user}}" notify: - restart uwsgi for schilder tags: - - pip - - python - schildergenerator + - webservices - name: ensure we have our config template: - src: config.py - dest: "{{schilder_web_root}}/program/config.py" - owner: "{{schilder_user}}" - group: "{{schilder_group}}" + src: config.py.j2 + dest: "{{ schilder_web_root }}/config.py" + owner: "{{ schilder_user }}" + group: "{{ schilder_group }}" mode: 0644 notify: - restart uwsgi for schilder tags: - - config - - python - schildergenerator + - webservices - name: ensure we have our templates git: - repo: "{{schilder_templates_url}}" - dest: "{{schilder_web_root}}/tex" - become: yes - become_user: "{{schilder_user}}" + repo: "{{ schilder_templates_url }}" + dest: "{{ schilder_web_root }}/tex" + key_file: /root/.ssh/schildergenerator + version: HEAD notify: - restart uwsgi for schilder tags: - - git - schildergenerator + - webservices - name: ensure the unit file exists template: - src: schilder.service - dest: "/etc/systemd/system/{{schilder_name}}.service" + src: schilder.service.j2 + dest: "/etc/systemd/system/{{ schilder_name }}.service" owner: root group: root mode: 0644 @@ -136,15 +122,16 @@ - reload systemd service files - restart uwsgi for schilder tags: - - config - - systemd - schildergenerator + - webservices - meta: flush_handlers - name: ensure the service is enabled - service: name="{{schilder_name}}.service" enabled=yes + service: + name: "{{ schilder_name }}" + enabled: yes + state: started tags: - - config - - systemd - schildergenerator + - webservices diff --git a/schildergenerator/templates/config b/schildergenerator/templates/config deleted file mode 100644 index ad5d5ca1a16dc7d2c6e2accf41ff16173e566564..0000000000000000000000000000000000000000 --- a/schildergenerator/templates/config +++ /dev/null @@ -1,4 +0,0 @@ -Host git.fsmpi.rwth-aachen.de -HostName git.fsmpi.rwth-aachen.de -User git -IdentityFile {{schilder_web_root}}/.ssh/deploy-key diff --git a/schildergenerator/templates/config.py b/schildergenerator/templates/config.py.j2 similarity index 87% rename from schildergenerator/templates/config.py rename to schildergenerator/templates/config.py.j2 index a237a96312123f0511512fa1104beccf6a9c0b6a..956b84cd52bc1aeaaf6cf837e21881ea12e6c342 100644 --- a/schildergenerator/templates/config.py +++ b/schildergenerator/templates/config.py.j2 @@ -3,12 +3,12 @@ # Secret key (used for session cookie encryption). Needs to be set to some random string. # Yes, just smash your keyboard for some random characters. No, don't publish them anywhere. # Yes, you will need this. If you get random RuntimeErrors, you did not set this. -app_secret = '{{range(10**15, 10**16)|random}}' +app_secret = '{{ range(10**15, 10**16)|random }}' ## You will need to use absolute paths! # Base directory. You need to set this again in schilder.wsgi if you use WSGI. -basedir = '{{schilder_web_root}}/program' +basedir = '{{ schilder_web_root }}' # Temp directory for imagemagick/pdflatex work files (needs to be writeable) tmpdir = '/tmp' @@ -22,7 +22,7 @@ datadir = basedir + '/data' templatedir = basedir + '/templates' # TeX template directory -textemplatedir = '{{schilder_web_root}}/tex' +textemplatedir = '{{ schilder_web_root }}/tex' # TeX support file directory (all files that might be needed by a tex template) texsupportdir = textemplatedir + '/support' @@ -48,15 +48,15 @@ allowed_extensions = set(['png', 'jpg', 'jpeg', 'gif', 'svg']) # CUPS printer names printers = { {% for printer in schilder_printers %} - '{{printer.description}}': '{{printer.name}}', + '{{ printer.description }}': '{{ printer.name }}', {% endfor %} } -printserver = '{{schilder_printsrv}}' +printserver = '{{ schilder_printsrv }}' # additional lpr options. Use an empty list if not needed. lproptions = [ {% for option in schilder_lproptions %} - '{{option}}', + '{{ option }}', {% endfor %} ] diff --git a/schildergenerator/templates/schilder.service b/schildergenerator/templates/schilder.service.j2 similarity index 55% rename from schildergenerator/templates/schilder.service rename to schildergenerator/templates/schilder.service.j2 index 7921cb7a5d4baa7a96052ff96306f3e06e46b1e2..fdd6e0a06f0e831d4ca366e223bb0973ecd8c35e 100644 --- a/schildergenerator/templates/schilder.service +++ b/schildergenerator/templates/schilder.service.j2 @@ -1,9 +1,9 @@ [Unit] -Description=Protokollsystem +Description={{ schilder_name }} After=network.target [Service] -ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{schilder_name}}.ini +ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{ schilder_name }}.ini Restart=always KillSignal=SIGQUIT Type=notify diff --git a/sso/defaults/main.yml b/sso/defaults/main.yml index 1b4f14611b15f039b6eb26fde6014439383aa52c..4942386699f69c658ea627fddb28690a86a48978 100644 --- a/sso/defaults/main.yml +++ b/sso/defaults/main.yml @@ -1,5 +1,5 @@ --- -# file: roles/sso/defaults/main.yml +# file: sso/defaults/main.yml program_name: sso program_user: sso @@ -13,4 +13,6 @@ sso_auth_group_dn: "dc=fsmpi,dc=rwth-aachen,dc=de" sso_auth_ca_cert: /etc/ssl/certs/rwth_chain.pem sso_auth_domain: FSMPI -sso_domain: "{{domain}}" +sso_domain: "{{ domain }}" + +program_dir: "{{web_root}}/{{program_name}}/program" diff --git a/sso/handlers/main.yml b/sso/handlers/main.yml index a3d40451721753725ef0ab2c0aef36a3f569cb27..e1ae721b5051f231f71e53bc18f107c438dd6d4b 100644 --- a/sso/handlers/main.yml +++ b/sso/handlers/main.yml @@ -1,8 +1,10 @@ --- -# file: roles/sso/handlers/main.yml +# file: sso/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: restart program - service: name="{{program_name}}" state=restarted enabled=yes + service: + name: "{{ program_name }}" + state: restarted diff --git a/sso/meta/main.yml b/sso/meta/main.yml index 57ffb924047dc675c356eca7ab44af62134a4bf9..7c7a58297721b24cf275b4110bf03311595d64e5 100644 --- a/sso/meta/main.yml +++ b/sso/meta/main.yml @@ -1,7 +1,5 @@ --- -# file: roles/sso/meta/main.yml +# file: sso/meta/main.yml dependencies: - - { role: webserver, tags: ["sso"] } - - { role: git-deployed, tags: ["sso"] } - { role: uwsgi-python, uwsgi_name: "{{program_name}}", uwsgi_user: "{{program_user}}", uwsgi_group: "{{program_group}}", uwsgi_path: "{{web_root}}/{{program_name}}/program", uwsgi_home: "{{web_root}}/{{program_name}}", uwsgi_program: "sso.py", uwsgi_callable: "app", uwsgi_command: "runserver", tags: ["sso"] } diff --git a/sso/tasks/main.yml b/sso/tasks/main.yml index 86c2e142b25034561f277b77ffcdd06e4dc57c72..1498efd0a554a62b46f5e2e863b5d2a6a72b9718 100644 --- a/sso/tasks/main.yml +++ b/sso/tasks/main.yml @@ -1,66 +1,93 @@ --- -# file: role/sso/tasks/main.yml +# file: sso/tasks/main.yml -- set_fact: - program_dir: "{{web_root}}/{{program_name}}/program" +- name: ensure the deploy key is available + copy: + src: "{{ sso_deploy_key }}" + dest: /root/.ssh/sso + owner: root + group: root + mode: 0600 + tags: + - sso + - webservices + +# https://github.com/ansible/ansible/issues/27699 +- name: ensure fucking git module is able to clone + command: mount -o remount,exec /tmp + tags: + - sso + - webservices + +- name: ensure the git is at the current revision + git: + repo: git@git.fsmpi.rwth-aachen.de:infra/sso.git + dest: "{{ program_dir }}" + key_file: /root/.ssh/sso + version: HEAD + notify: + - restart program + tags: + - sso + - webservices + +- name: ensure fucking git module is not able to clone anymore + command: mount -o remount,noexec /tmp + tags: + - sso + - webservices - name: ensure we have a virtualenv pip: - requirements: "{{program_dir}}/requirements.txt" - virtualenv: "{{program_dir}}" + requirements: "{{ program_dir }}/requirements.txt" + virtualenv: "{{ program_dir }}" virtualenv_python: python3 - become: yes - become_user: "{{program_user}}" notify: - restart program tags: - - pip - - python - sso + - webservices - name: ensure we have our config template: - src: config.py - dest: "{{program_dir}}/config.py" - owner: "{{program_user}}" - group: "{{program_group}}" + src: config.py.j2 + dest: "{{ program_dir }}/config.py" + owner: "{{ program_user }}" + group: "{{ program_group }}" mode: 0644 notify: - restart program tags: - - config - - python - - sso + - sso + - webservices - name: ensure we have our secret config template: src: secret_config.py - dest: "{{program_dir}}/secret_config.py" - owner: "{{program_user}}" - group: "{{program_group}}" + dest: "{{ program_dir }}/secret_config.py" + owner: "{{ program_user }}" + group: "{{ program_group }}" mode: 0600 force: no notify: - restart program tags: - - config - - python - - sso + - sso + - webservices - name: ensure git ignores our secret config lineinfile: - dest: "{{program_dir}}/.git/info/exclude" + dest: "{{ program_dir }}/.git/info/exclude" line: "secret_config.py" state: present tags: - - config - - git - sso + - webservices - name: ensure the unit file exists template: - src: sso.service - dest: "/etc/systemd/system/{{program_name}}.service" + src: sso.service.j2 + dest: "/etc/systemd/system/{{ program_name }}.service" owner: root group: root mode: 0644 @@ -68,15 +95,16 @@ - reload systemd service files - restart program tags: - - config - - systemd - sso + - webservices - meta: flush_handlers - name: ensure the service is enabled - service: name="{{program_name}}" enabled=yes + service: + name: "{{program_name}}" + enabled: yes + state: started tags: - - config - - systemd - sso + - webservices diff --git a/sso/templates/config.py b/sso/templates/config.py.j2 similarity index 54% rename from sso/templates/config.py rename to sso/templates/config.py.j2 index 2b62397996e07c22987ede7087cd95c77901da7d..c9988a6fecbddaf057c8328819932318c165cf9b 100644 --- a/sso/templates/config.py +++ b/sso/templates/config.py.j2 @@ -4,19 +4,19 @@ from auth import LdapManager, ADManager {% if sso_auth_use_ad %} AUTH_MANAGER = ADManager( - host="{{sso_auth_host}}", - domain="{{sso_auth_domain}}", - user_dn="{{sso_auth_user_dn}}", - group_dn="{{sso_auth_group_dn}}", - ca_cert="{{sso_auth_ca_cert}}") + host="{{ sso_auth_host }}", + domain="{{ sso_auth_domain }}", + user_dn="{{ sso_auth_user_dn }}", + group_dn="{{ sso_auth_group_dn }}", + ca_cert="{{ sso_auth_ca_cert }}") {% else %} AUTH_MANAGER = LdapManager( - host="{{sso_auth_host}}", - user_dn="{{sso_auth_user_dn}}", - group_dn="{{sso_auth_group_dn}}") + host="{{ sso_auth_host }}", + user_dn="{{ sso_auth_user_dn }}", + group_dn="{{ sso_auth_group_dn }}") {% endif %} -SESSION_COOKIE_DOMAIN = "{{sso_domain}}" +SESSION_COOKIE_DOMAIN = "{{ sso_domain }}" SESSION_COOKIE_NAME = "SSO-{}-SESSION".format(SESSION_COOKIE_DOMAIN.split(".")[0].upper()) SESSION_COOKIE_HTTPONLY = True SESSION_REFRESH_EACH_REQUEST = True diff --git a/sso/templates/secret_config.py b/sso/templates/secret_config.py deleted file mode 100644 index 23fb517f5f040fad4aa5ba058966d3c92048f760..0000000000000000000000000000000000000000 --- a/sso/templates/secret_config.py +++ /dev/null @@ -1 +0,0 @@ -secret_key = '{{(2**2048)|random}}' diff --git a/sso/templates/secret_config.py.j2 b/sso/templates/secret_config.py.j2 new file mode 100644 index 0000000000000000000000000000000000000000..4fe5c96549857b61df5312e62a3283976da32ff7 --- /dev/null +++ b/sso/templates/secret_config.py.j2 @@ -0,0 +1 @@ +secret_key = '{{ (2**2048)|random }}' diff --git a/sso/templates/sso.service b/sso/templates/sso.service.j2 similarity index 67% rename from sso/templates/sso.service rename to sso/templates/sso.service.j2 index 439baef3d2a2cfe546197c8fc389866e53206fdb..a727ea3dce4ce8912283a67663e4250910e9bd42 100644 --- a/sso/templates/sso.service +++ b/sso/templates/sso.service.j2 @@ -3,7 +3,7 @@ Description=Single sign-on After=network.target [Service] -ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{program_name}}.ini +ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{ program_name }}.ini Restart=always KillSignal=SIGTERM Type=notify diff --git a/uwsgi-php/meta/main.yml b/uwsgi-php/meta/main.yml index 8a60ee77f32aa542f09e0d29224c262ec96e45ce..a378589dd46dd52ad42ab0ca36c2903a20d19441 100644 --- a/uwsgi-php/meta/main.yml +++ b/uwsgi-php/meta/main.yml @@ -1,4 +1,4 @@ --- -# file: roles/uwsgi-php/meta/main.yml +# file: uwsgi-php/meta/main.yml dependencies: - { role: uwsgi } diff --git a/uwsgi-php/tasks/main.yml b/uwsgi-php/tasks/main.yml index a6e06db7f60e51e4d3a07b372233fb89c740153b..bfd49cdf871751675cf9f9aee50d5a53cd87582d 100644 --- a/uwsgi-php/tasks/main.yml +++ b/uwsgi-php/tasks/main.yml @@ -1,12 +1,14 @@ --- -# file: roles/uwsgi-php/tasks/main.yml +# file: uwsgi-php/tasks/main.yml - name: ensure packages for uwsgi-php are installed - apt: name={{ item }} state=latest + apt: + name: "{{ item }}" + state: installed with_items: - php5 - php5-curl - uwsgi-plugin-php tags: - uwsgi - - packages + - webservices diff --git a/uwsgi-python/defaults/main.yml b/uwsgi-python/defaults/main.yml index 4165f0800b6338cce68c0b84f6b9997dee8ac47c..7df95ee169845893eaa2cae784a7d381a978fd0a 100644 --- a/uwsgi-python/defaults/main.yml +++ b/uwsgi-python/defaults/main.yml @@ -1,5 +1,5 @@ --- -# files: roles/uwsgi-python/defaults/main.yml +# files: uwsgi-python/defaults/main.yml uwsgi_name: uwsgi uwsgi_user: uwsgi diff --git a/uwsgi-python/handlers/main.yml b/uwsgi-python/handlers/main.yml index 50114394bad956804d4748192bcf1136d60cb1ea..c28bb7dd9f2d88756bf3f99a344f849d9946a905 100644 --- a/uwsgi-python/handlers/main.yml +++ b/uwsgi-python/handlers/main.yml @@ -1,5 +1,5 @@ --- -# file: roles/uwsgi-python/handlers/main.yml +# file: uwsgi-python/handlers/main.yml - name: create tmpfiles command: systemd-tmpfiles --create diff --git a/uwsgi-python/meta/main.yml b/uwsgi-python/meta/main.yml index f6ade0b85330e157e139c8a5a20fa4a8ed350d94..97abf43d219480c45fd9c13a3d68585dadacb4a3 100644 --- a/uwsgi-python/meta/main.yml +++ b/uwsgi-python/meta/main.yml @@ -1,4 +1,4 @@ --- -# file: roles/uwsgi-python/meta/main.yml +# file: uwsgi-python/meta/main.yml dependencies: - { role: uwsgi } diff --git a/uwsgi-python/tasks/main.yml b/uwsgi-python/tasks/main.yml index 82c72a6ceddffb9bd13336333796b19f17a01284..a6c9a0819bbdcc7306cf866c0ce15a2538e5cb72 100644 --- a/uwsgi-python/tasks/main.yml +++ b/uwsgi-python/tasks/main.yml @@ -1,8 +1,10 @@ --- -# file: roles/uwsgi-python/tasks/main.yml +# file: uwsgi-python/tasks/main.yml - name: ensure we have python 2 - apt: name="{{item}}" + apt: + name: "{{ item }}" + state: installed with_items: - python - python-dev @@ -11,11 +13,13 @@ - virtualenv when: uwsgi_python == 2 tags: - - packages - uwsgi-python + - webservices - name: ensure we have python 3 - apt: name="{{item}}" + apt: + name: "{{ item }}" + state: installed with_items: - python3 - python3-dev @@ -24,165 +28,72 @@ - virtualenv when: uwsgi_python == 3 tags: - - packages - uwsgi-python + - webservices - name: ensure we have the necessary libraries for ldap - apt: name="{{item}}" + apt: + name: "{{ item }}" + state: installed with_items: - libsasl2-dev - libssl-dev - libldap2-dev tags: - - packages - uwsgi-python - - ldap + - webservices -- name: ensure we have sqlite installed - apt: name="{{item}}" - with_items: - - sqlite3 +- include: sqlite.yml when: uwsgi_db == "sqlite" - tags: - - packages - - uwsgi-python - - sqlite -- name: ensure we have python mysql packages - apt: name="{{item}}" - with_items: - - python-mysqldb - - python3-mysqldb - - default-libmysqlclient-dev +- include: mysql.yml when: uwsgi_db == "mysql" - tags: - - packages - - uwsgi-python - - mysql -- name: "get database password for mysql" - local_action: pass name="db/{{ansible_hostname}}-mysql" state=present generate=20 store=FSMPI_PASSWORD_STORE_DIR limit=yes - register: mysql_password - when: uwsgi_db == "mysql" - no_log: True - tags: - - config - - uwsgi-python - - mysql - - password - -- name: "ensure the mysql database exists" - mysql_db: - name: "{{uwsgi_name}}" - state: present - login_user: root - login_password: "{{mysql_password.password}}" - when: uwsgi_db == "mysql" - no_log: True - tags: - - config - - mysql - - uwsgi-python - -- name: "ensure we have a user password for mysql" - local_action: pass name="db/{{ansible_hostname}}-mysql-{{uwsgi_user}}" state=present generate=20 store=FSMPI_PASSWORD_STORE_DIR limit=yes - register: mysql_user_password - when: uwsgi_db == "mysql" - no_log: True - tags: - - config - - uwsgi-python - - mysql - - password - -- name: ensure the database user for mysql exists - mysql_user: - name: "{{uwsgi_user}}" - password: "{{mysql_user_password.password}}" - state: present - login_user: root - login_password: "{{mysql_password.password}}" - priv: "{{uwsgi_name}}.*:ALL" - when: uwsgi_db == "mysql" - no_log: True - tags: - - config - - mysql - - uwsgi-python - -- name: ensure we have a postgres database user - postgresql_user: - name: "{{uwsgi_user}}" - state: present - become: yes - become_user: postgres - when: uwsgi_db == "postgres" - tags: - - postgresql - - config - - uwsgi-python - -- name: ensure we have a postgres database - postgresql_db: - name: "{{uwsgi_name}}" - owner: "{{uwsgi_user}}" - state: present - become: yes - become_user: postgres - when: uwsgi_db == "postgres" - tags: - - postgresql - - config - - uwsgi-python - -- name: ensure the database user has privileges - postgresql_privs: - database: "{{uwsgi_name}}" - roles: "{{uwsgi_user}}" - privs: ALL - state: present - type: database - become: yes - become_user: postgres +- include: postgres.yml when: uwsgi_db == "postgres" - tags: - - postgresql - - config - - uwsgi_python - name: ensure we have a group - group: name="{{uwsgi_group}}" system=yes state=present + group: + name: "{{ uwsgi_group }}" + system: yes + state: present tags: - - group - - config - uwsgi-python + - webservices - name: ensure we have a user - user: name="{{uwsgi_user}}" group="{{uwsgi_group}}" system=yes home="{{uwsgi_home}}" shell=/usr/bin/nologin createhome=no state=present + user: + name: "{{ uwsgi_user }}" + group: "{{ uwsgi_group }}" + system: yes + home: "{{ uwsgi_home }}" + shell: /usr/bin/nologin + createhome: no + state: present tags: - - user - - config - uwsgi-python + - webservices - name: ensure a temporary directory exists - lineinfile: + templates: + src: tmpfiles.conf.j2 dest: "/etc/tmpfiles.d/10-{{uwsgi_name}}.conf" - line: "d /run/uwsgi/app/{{uwsgi_name}} 0775 {{uwsgi_user}} {{uwsgi_group}} - -" - create: yes + owner: root + group: root + mode: 0644 notify: - create tmpfiles tags: - - config - uwsgi-python + - webservices - name: ensure we have our uwsgi config file template: - src: uwsgi.ini - dest: "/etc/uwsgi/apps-available/{{uwsgi_name}}.ini" + src: uwsgi.ini.j2 + dest: "/etc/uwsgi/apps-available/{{ uwsgi_name }}.ini" owner: root group: root mode: 0644 tags: - - config - - uwsgi - uwsgi-python + - webservices diff --git a/uwsgi-python/tasks/mysql.yml b/uwsgi-python/tasks/mysql.yml new file mode 100644 index 0000000000000000000000000000000000000000..0a676c28bdabb141af1365b083b0e32f588ec0df --- /dev/null +++ b/uwsgi-python/tasks/mysql.yml @@ -0,0 +1,38 @@ +--- +# file: uwsgi-python/tasks/mysql.yml + +- name: ensure we have python mysql packages + apt: + name: "{{ item }}" + state: installed + with_items: + - python-mysqldb + - python3-mysqldb + - default-libmysqlclient-dev + tags: + - uwsgi-python + - webservices + +- name: ensure the mysql database exists + mysql_db: + name: "{{ uwsgi_name }}" + state: present + login_user: root + login_password: "{{db/{{ansible_hostname}}-mysql}}" + no_log: True + tags: + - uwsgi-python + - webservices + +- name: ensure the database user for mysql exists + mysql_user: + name: "{{uwsgi_user}}" + password: "{{db/{{ansible_hostname}}-mysql-{{uwsgi_user}}}}" + state: present + login_user: root + login_password: "{{}}" + priv: "{{uwsgi_name}}.*:ALL" + no_log: True + tags: + - uwsgi-python + - webservices diff --git a/uwsgi-python/tasks/postgres.yml b/uwsgi-python/tasks/postgres.yml new file mode 100644 index 0000000000000000000000000000000000000000..5b0a5b5b8f7535f2f02ce5ce9f77d7dfe03f4d18 --- /dev/null +++ b/uwsgi-python/tasks/postgres.yml @@ -0,0 +1,36 @@ +--- +# file: uwsgi-python/tasks/postgres.yml + +- name: ensure we have a postgres database user + postgresql_user: + name: "{{ uwsgi_user }}" + state: present + become: yes + become_user: postgres + tags: + - uwsgi-python + - webservices + +- name: ensure we have a postgres database + postgresql_db: + name: "{{ uwsgi_name }}" + owner: "{{ uwsgi_user }}" + state: present + become: yes + become_user: postgres + tags: + - uwsgi-python + - webservices + +- name: ensure the database user has privileges + postgresql_privs: + database: "{{ uwsgi_name }}" + roles: "{{ uwsgi_user }}" + privs: ALL + state: present + type: database + become: yes + become_user: postgres + tags: + - uwsgi-python + - webservices diff --git a/uwsgi-python/tasks/sqlite.yml b/uwsgi-python/tasks/sqlite.yml new file mode 100644 index 0000000000000000000000000000000000000000..491657d734cb09b0b979c85c56ea00f7d09775c2 --- /dev/null +++ b/uwsgi-python/tasks/sqlite.yml @@ -0,0 +1,11 @@ +--- +# file: uwsgi-python/tasks/sqlite.yml + +- name: ensure we have sqlite installed + apt: + name: sqlite3 + state: installed + tags: + - uwsgi-python + - webservices + diff --git a/uwsgi-python/templates/tmpfiles.conf.j2 b/uwsgi-python/templates/tmpfiles.conf.j2 new file mode 100644 index 0000000000000000000000000000000000000000..4dba06e9a3e556ed71bf92bee0797c52c9b521af --- /dev/null +++ b/uwsgi-python/templates/tmpfiles.conf.j2 @@ -0,0 +1 @@ +d /run/uwsgi/app/{{uwsgi_name}} 0775 {{uwsgi_user}} {{uwsgi_group}} - - diff --git a/uwsgi-python/templates/uwsgi.ini b/uwsgi-python/templates/uwsgi.ini.j2 similarity index 100% rename from uwsgi-python/templates/uwsgi.ini rename to uwsgi-python/templates/uwsgi.ini.j2 diff --git a/uwsgi/files/tmpfiles.conf b/uwsgi/files/tmpfiles.conf new file mode 100644 index 0000000000000000000000000000000000000000..50b2862b7b5bfbdf7fafd0f4e6a54f0280e8c743 --- /dev/null +++ b/uwsgi/files/tmpfiles.conf @@ -0,0 +1,2 @@ +d /run/uwsgi 0755 root root - - +d /run/uwsgi/app 0755 root root - - diff --git a/uwsgi/handlers/main.yml b/uwsgi/handlers/main.yml index 97bfdde069bd77167e985951ac73e7ba03ea7819..66f7827fa119ae9bea42ffacb3eaca529fbef45e 100644 --- a/uwsgi/handlers/main.yml +++ b/uwsgi/handlers/main.yml @@ -1,5 +1,5 @@ --- -# file: roles/uwsgi/handlers/main.yml +# file: uwsgi/handlers/main.yml - name: create tmpfiles shell: systemd-tmpfiles --create diff --git a/uwsgi/tasks/main.yml b/uwsgi/tasks/main.yml index 2a22fca04b453319eccf4efd19a2031e30270f70..d8ffa47e659449ce5439b991d94bfd8aa5e794a1 100644 --- a/uwsgi/tasks/main.yml +++ b/uwsgi/tasks/main.yml @@ -1,24 +1,24 @@ --- -# file: roles/uwsgi/tasks/main.yml +# file: uwsgi/tasks/main.yml - name: ensure uwsgi is installed - apt: name=uwsgi state=latest + apt: + name: uwsgi + state: installed tags: - uwsgi - - packages + - webservices - name: ensure a temporary directory exists - lineinfile: dest=/etc/tmpfiles.d/10-uwsgi.conf line="d /run/uwsgi 0755 root root - -" create=yes + copy: + src: tmpfiles.conf + dest: /etc/tmpfiles.d/10-uwsgi.conf + owner: root + group: root + mode: 0644 notify: - create tmpfiles tags: - uwsgi - - tmpdirs + - webservices -- name: ensure a temporary subdirectory exists - lineinfile: dest=/etc/tmpfiles.d/10-uwsgi.conf line="d /run/uwsgi/app 0755 root root - -" create=yes - notify: - - create tmpfiles - tags: - - uwsgi - - tmpdirs diff --git a/wahlhelfer/defaults/main.yml b/wahlhelfer/defaults/main.yml index c62e365812ee0ce3cce44abd38555d93a9a120d0..8072db039a723494ee7441665fa81e27029b8010 100644 --- a/wahlhelfer/defaults/main.yml +++ b/wahlhelfer/defaults/main.yml @@ -1,7 +1,7 @@ --- -# file: roles/wahlhelfer/defaults/main.yml +# file: wahlhelfer/defaults/main.yml -wahlhelfer_web_root: /var/www/wahlhelfer +wahlhelfer_web_root: /var/www/wahlhelfer/program wahlhelfer_name: wahlhelfer wahlhelfer_user: wahlhelfer wahlhelfer_group: wahlhelfer @@ -9,3 +9,5 @@ wahlhelfer_admins: [["Robin Sonnabend", "robin@fsmpi.rwth-aachen.de"]] wahlhelfer_sender: wahlhelfer@fsmpi.rwth-aachen.de wahlhelfer_mail_host: mail.fsmpi.rwth-aachen.de wahlhelfer_allowed_hosts: ["wahlhelfer.stud.rwth-aachen.de"] + +wahlhelfer_ldap_cert: /etc/ssl/certs/rwth_chain.pem diff --git a/wahlhelfer/handlers/main.yml b/wahlhelfer/handlers/main.yml index 31d4abeea89c68f292e28d86b3782f8dccf096bf..47338d1870dc30cdd4422dc947f39d89795eb922 100644 --- a/wahlhelfer/handlers/main.yml +++ b/wahlhelfer/handlers/main.yml @@ -1,13 +1,13 @@ --- -# file: roles/wahlhelfer/handlers/main.yml +# file: wahlhelfer/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: restart uwsgi for wahlhelfer - service: name="{{item}}" state=restarted enabled=yes - with_items: - - "{{wahlhelfer_name}}" + service: + name: "{{ wahlhelfer_name }}" + state: restarted - name: create tmpfiles command: systemd-tmpfiles --create diff --git a/wahlhelfer/meta/main.yml b/wahlhelfer/meta/main.yml index a6bc815a8228932d814b35e7dcf1d7d49dbe36e2..93f17bf5fd4868a47b3e05a2ce222ccf1eb1ff36 100644 --- a/wahlhelfer/meta/main.yml +++ b/wahlhelfer/meta/main.yml @@ -1,6 +1,4 @@ --- -# file:roles/wahlhelfer/meta/main.yml +# file: wahlhelfer/meta/main.yml dependencies: - - { role: webserver } - - { role: mysql } - { role: uwsgi-python, uwsgi_name: "{{wahlhelfer_name}}", uwsgi_user: "{{wahlhelfer_user}}", uwsgi_group: "{{wahlhelfer_group}}", uwsgi_path: "{{wahlhelfer_web_root}}/program", uwsgi_home: "{{wahlhelfer_web_root}}", uwsgi_program: "main/wsgi.py", uwsgi_callable: "application", uwsgi_command: "runserver", uwsgi_db: "mysql", uwsgi_python: 3 } diff --git a/wahlhelfer/tasks/main.yml b/wahlhelfer/tasks/main.yml index 538ffe86b14653def216163a4033036b9d7895b0..d264492e6200ea33710076a1f19b0669890ce466 100644 --- a/wahlhelfer/tasks/main.yml +++ b/wahlhelfer/tasks/main.yml @@ -1,89 +1,84 @@ --- -# file: roles/wahlhelfer/tasks/main.yml +# file: wahlhelfer/tasks/main.yml -- name: ensure we have a folder for the program - file: path="{{wahlhelfer_web_root}}" state=directory owner="{{wahlhelfer_user}}" group="{{wahlhelfer_group}}" mode=0755 - tags: - - directory - - wahlhelfer - -- name: ensure we have a .ssh directory - file: path="{{wahlhelfer_web_root}}/.ssh" state=directory owner="{{wahlhelfer_user}}" group="{{wahlhelfer_group}}" mode=0755 +- name: ensure the deploy key is available + copy: + src: "{{ wahlhelfer_deploy_key }}" + dest: /root/.ssh/wahlhelfer + owner: root + group: root + mode: 0600 tags: - - directory - wahlhelfer + - webservices -- name: ensure we have our deploy key - copy: src="{{item}}" dest="{{wahlhelfer_web_root}}/.ssh/" owner="{{wahlhelfer_user}}" group="{{wahlhelfer_group}}" mode=0600 - with_items: - - deploy-key - - deploy-key.pub +# https://github.com/ansible/ansible/issues/27699 +- name: ensure fucking git module is able to clone + command: mount -o remount,exec /tmp tags: - - ssh - wahlhelfer + - webservices -- name: ensure we have our .ssh config - template: src=config dest="{{wahlhelfer_web_root}}/.ssh/config" owner="{{wahlhelfer_user}}" group="{{wahlhelfer_group}}" mode=0644 +- name: ensure the git is at the current revision + git: + repo: git@git.fsmpi.rwth-aachen.de:wahl/wahlhelfer.git + dest: "{{ wahlhelfer_web_root }}" + key_file: /root/.ssh/wahlhelfer + version: HEAD + notify: + - restart uwsgi for wahlhelfer tags: - - ssh - wahlhelfer + - webservices -- name: ensure we have the program - git: repo=git@git.fsmpi.rwth-aachen.de:wahl/wahlhelfer.git dest="{{wahlhelfer_web_root}}/program" - become: yes - become_user: "{{wahlhelfer_user}}" - notify: - - restart uwsgi for wahlhelfer +- name: ensure fucking git module is not able to clone anymore + command: mount -o remount,noexec /tmp tags: - - git - wahlhelfer + - webservices - name: ensure we have a virtualenv pip: - requirements: "{{wahlhelfer_web_root}}/program/requirements.txt" - virtualenv: "{{wahlhelfer_web_root}}/program" + requirements: "{{ wahlhelfer_web_root }}/requirements.txt" + virtualenv: "{{ wahlhelfer_web_root }}" virtualenv_python: python3 - become: yes - become_user: "{{wahlhelfer_user}}" notify: - restart uwsgi for wahlhelfer tags: - - pip - - python - wahlhelfer + - webservices - name: ensure we have our config template: - src: settings.py - dest: "{{wahlhelfer_web_root}}/program/main/settings.py" - owner: "{{wahlhelfer_user}}" - group: "{{wahlhelfer_group}}" + src: settings.py.j2 + dest: "{{ wahlhelfer_web_root }}/main/settings.py" + owner: "{{ wahlhelfer_user }}" + group: "{{ wahlhelfer_group }}" mode: 0644 notify: - restart uwsgi for wahlhelfer tags: - - config - - python - wahlhelfer + - webservices - name: ensure we have the linear solver copy: - src: "{{item}}" - dest: "{{wahlhelfer_web_root}}/program/zibopt/" - owner: "{{wahlhelfer_user}}" - group: "{{wahlhelfer_group}}" + src: "{{ item }}" + dest: "{{ wahlhelfer_web_root }}/zibopt/" + owner: "{{ wahlhelfer_user }}" + group: "{{ wahlhelfer_group }}" mode: 0755 with_items: - scip - zimpl tags: - - packages - wahlhelfer + - webservices - name: ensure the unit file exists template: - src: wahlhelfer.service - dest: "/etc/systemd/system/{{wahlhelfer_name}}.service" + src: wahlhelfer.service.j2 + dest: "/etc/systemd/system/{{ wahlhelfer_name }}.service" owner: root group: root mode: 0644 @@ -91,17 +86,16 @@ - reload systemd service files - restart uwsgi for wahlhelfer tags: - - config - - systemd - wahlhelfer + - webservices - meta: flush_handlers - name: ensure the services are enabled - service: name="{{item}}" enabled=yes - with_items: - - "{{wahlhelfer_name}}" + service: + name: "{{ wahlhelfer_name }}" + enabled: yes + state: started tags: - - config - - systemd - wahlhelfer + - webservices diff --git a/wahlhelfer/templates/config b/wahlhelfer/templates/config deleted file mode 100644 index a13911a644d24b598274220ba33dd4227ae2f1f8..0000000000000000000000000000000000000000 --- a/wahlhelfer/templates/config +++ /dev/null @@ -1,4 +0,0 @@ -Host git.fsmpi.rwth-aachen.de -HostName git.fsmpi.rwth-aachen.de -User git -IdentityFile {{wahlhelfer_web_root}}/.ssh/deploy-key diff --git a/wahlhelfer/templates/settings.py b/wahlhelfer/templates/settings.py.j2 similarity index 84% rename from wahlhelfer/templates/settings.py rename to wahlhelfer/templates/settings.py.j2 index 4bbd12cac44c4561ea19d024cca9a1b3d993b175..243d062c7e8a2169c37b3e21ac498fd5420ddc7c 100644 --- a/wahlhelfer/templates/settings.py +++ b/wahlhelfer/templates/settings.py.j2 @@ -4,28 +4,27 @@ DEBUG = True ADMINS = ( {% for name, address in wahlhelfer_admins %} - ('{{name}}', '{{address}}'), + ('{{ name }}', '{{ address }}'), {% endfor %} ) - -SERVER_EMAIL = "{{wahlhelfer_sender}}" -EMAIL_HOST = "{{wahlhelfer_mail_host}}" -EMAIL_HOST_USER = "{{wahlhelfer_mail_user|default('')}}" -EMAIL_HOST_PASSWORD = "{{wahlhelfer_mail_password|default('')}}" - MANAGERS = ADMINS +SERVER_EMAIL = "{{ wahlhelfer_sender }}" +EMAIL_HOST = "{{ wahlhelfer_mail_host }}" +EMAIL_HOST_USER = "{{ wahlhelfer_mail_user|default('') }}" +EMAIL_HOST_PASSWORD = "{{ wahlhelfer_mail_password|default('') }}" + LOGIN_URL = '/' LOGIN_REDIRECT_URL = '/' DATABASES = { 'default': { - 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': '{{wahlhelfer_name}}', # Or path to database file if using sqlite3. - 'USER': '{{wahlhelfer_user}}', # Not used with sqlite3. - 'PASSWORD': '{{mysql_user_password.password}}', # Not used with sqlite3. - 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. - 'PORT': '', # Set to empty string for default. Not used with sqlite3. + 'ENGINE': 'django.db.backends.mysql', + 'NAME': '{{ wahlhelfer_name }}', + 'USER': '{{ wahlhelfer_user }}', + 'PASSWORD': '{{ mysql_user_password.password }}', + 'HOST': '', + 'PORT': '', } } @@ -33,7 +32,7 @@ DATABASES = { # See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts ALLOWED_HOSTS = [ {% for host in wahlhelfer_allowed_hosts %} - "{{host}}" + "{{ host }}" {% endfor %} ] @@ -95,7 +94,7 @@ STATICFILES_FINDERS = ( ) # Make this unique, and don't share it with anybody. -SECRET_KEY = '{{(2**2048)|random}}' +SECRET_KEY = '{{ (2**2048)|random }}' TEMPLATES = [ { diff --git a/wahlhelfer/templates/wahlhelfer.service b/wahlhelfer/templates/wahlhelfer.service deleted file mode 100644 index a27cd0442e2777514d95ee1cb353fe654a3df184..0000000000000000000000000000000000000000 --- a/wahlhelfer/templates/wahlhelfer.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=Wahlhelferorganisation -After=network.target - -[Service] -Environment=LDAPTLS_CACERT=/etc/ssl/certs/rwth_chain.pem -Environment=WAHLHELFER_WEB_ROOT={{wahlhelfer_web_root}}/program/ -ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{wahlhelfer_name}}.ini -Restart=always -KillSignal=SIGQUIT -Type=notify -NotifyAccess=all - -[Install] -WantedBy=multi-user.target diff --git a/wahlhelfer/templates/wahlhelfer.service.j2 b/wahlhelfer/templates/wahlhelfer.service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..ea742dbed8d430d9d125985c0fa681b5c46245a3 --- /dev/null +++ b/wahlhelfer/templates/wahlhelfer.service.j2 @@ -0,0 +1,17 @@ +[Unit] +Description=Wahlhelferorganisation +After=network.target + +[Service] +{% if wahlhelfer_ldap_cert %} +Environment=LDAPTLS_CACERT={{ wahlhelfer_ldap_cert }} +{% endif %} +Environment=WAHLHELFER_WEB_ROOT={{wahlhelfer_web_root}}/ +ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{ wahlhelfer_name }}.ini +Restart=always +KillSignal=SIGQUIT +Type=notify +NotifyAccess=all + +[Install] +WantedBy=multi-user.target diff --git a/wahlsystem/defaults/main.yml b/wahlsystem/defaults/main.yml index c3d626fb39a8666dd6d773bf1f31ec077e0828a9..9f7325682cb4ad931f55f101a42be90adb5c2594 100644 --- a/wahlsystem/defaults/main.yml +++ b/wahlsystem/defaults/main.yml @@ -1,8 +1,28 @@ --- -# file: roles/protokollsystem/defaults/main.yml +# file: wahlsystem/defaults/main.yml -wahl_web_root: /var/www/wahlsystem +wahl_web_root: /var/www/wahlsystem/program wahl_name: wahlsystem wahl_user: wahl wahl_group: wahl wahl_celery_concurrency: 1 +wahl_ldap_cert: /etc/ssl/certs/rwth_chain.pem + +wahl_secret: '***REMOVED***' +wahl_mail: True +wahl_mail_from: 'wahl@fsmpi.rwth-aachen.de' +wahl_mail_host: 'mail.fsmpi.rwth-aachen.de:25' +wahl_mail_user: '' +wahl_mail_password: '' +wahl_mail_tls: False +wahl_mail_prefix: 'Wahlsystem' +wahl_celery_broker: 'redis://localhost:6379/0' +wahl_server_name: 'wahl.stud.rwth-aachen.de' +wahl_url_root: 'wahl.stud.rwth-aachen.de' +wahl_url_proto: 'https' +wahl_url_path: '/' +wahl_mailman_api_url: 'https://lists.fsmpi.rwth-aachen.de/mailmanAPI' +wahl_mailman_api_key: '***REMOVED***' +wahl_mailman_default_newpw: 'LnbVEiblyk8qhzmvjJhS' +wahl_mailman_host: 'lists.fsmpi.rwth-aachen.de' + diff --git a/wahlsystem/handlers/main.yml b/wahlsystem/handlers/main.yml index 05605fd5dcc4e70d37c75b3f4aa257b285f07fe3..99db7419882837bc316f696f13b59b370fdc5b9f 100644 --- a/wahlsystem/handlers/main.yml +++ b/wahlsystem/handlers/main.yml @@ -1,14 +1,16 @@ --- -# file: roles/protokollsystem/handlers/main.yml +# file: wahlsystem/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: restart uwsgi for wahlsystem - service: name="{{item}}" state=restarted enabled=yes + service: + name: "{{ item }}" + state: restarted with_items: - - "{{wahl_name}}" - - "{{wahl_name}}-celery" + - "{{ wahl_name }}" + - "{{ wahl_name }}-celery" - name: create tmpfiles command: systemd-tmpfiles --create diff --git a/wahlsystem/meta/main.yml b/wahlsystem/meta/main.yml index 775dd3a43578abb12025f375afb4ebca38557529..2a053bfa62096128bd41ac14e0cac65a7cac42ee 100644 --- a/wahlsystem/meta/main.yml +++ b/wahlsystem/meta/main.yml @@ -1,9 +1,6 @@ --- -# file:roles/protokollsystem/meta/main.yml +# file: wahlsystem/meta/main.yml dependencies: - - { role: webserver } - - { role: redis-server } - - { role: postgres } - { role: texlive } - { role: cups-client } - { role: uwsgi-python, uwsgi_name: "{{wahl_name}}", uwsgi_user: "{{wahl_user}}", uwsgi_group: "{{wahl_group}}", uwsgi_path: "{{wahl_web_root}}/program", uwsgi_home: "{{wahl_web_root}}", uwsgi_program: "server.py", uwsgi_callable: "app", uwsgi_command: "runserver", uwsgi_db: "postgres", uwsgi_python: 3, uwsgi_mules: 0, uwsgi_harakiri: 30 } diff --git a/wahlsystem/tasks/main.yml b/wahlsystem/tasks/main.yml index f099e781447ed4eadd02e61ef2c1842e316f754c..fd2f27c8e8c594ad5fe38232a493d96b46862797 100644 --- a/wahlsystem/tasks/main.yml +++ b/wahlsystem/tasks/main.yml @@ -1,98 +1,93 @@ --- -# file: roles/wahlsystem/tasks/main.yml +# file: wahlsystem/tasks/main.yml -- name: ensure we have the fonts - apt: name="{{item}}" state=present +- name: ensure we have the required software and fonts + apt: + name: "{{ item }}" + state: present with_items: - fontconfig - tex-gyre + - virtualenv tags: - - packages - wahlsystem + - webservices -- name: ensure we have a folder for the program - file: path="{{wahl_web_root}}" state=directory owner="{{wahl_user}}" group="{{wahl_group}}" mode=0755 - tags: - - directory - - wahlsystem - -- name: ensure we have a .ssh directory - file: path="{{wahl_web_root}}/.ssh" state=directory owner="{{wahl_user}}" group="{{wahl_group}}" mode=0755 - tags: - - directory - - wahlsystem - -- name: ensure we have our deploy key - copy: src="{{item}}" dest="{{wahl_web_root}}/.ssh/" owner="{{wahl_user}}" group="{{wahl_group}}" mode=0600 - with_items: - - deploy-key - - deploy-key.pub +- name: ensure the deploy key is available + copy: + src: "{{ wahl_deploy_key }}" + dest: /root/.ssh/wahlsystem + owner: root + group: root + mode: 0600 tags: - - ssh - wahlsystem + - webservices -- name: ensure we have our .ssh config - template: src=config dest="{{wahl_web_root}}/.ssh/config" owner="{{wahl_user}}" group="{{wahl_group}}" mode=0644 +# https://github.com/ansible/ansible/issues/27699 +- name: ensure fucking git module is able to clone + command: mount -o remount,exec /tmp tags: - - ssh - wahlsystem + - webservices -- name: ensure we have the program - git: repo=git@git.fsmpi.rwth-aachen.de:wahl/wahlsys.git dest="{{wahl_web_root}}/program" - become: yes - become_user: "{{wahl_user}}" +- name: ensure the git is at the current revision + git: + repo: git@git.fsmpi.rwth-aachen.de:wahl/wahlsys.git + dest: "{{ wahl_web_root }}" + key_file: /root/.ssh/wahlsystem + version: HEAD notify: - restart uwsgi for wahlsystem tags: - - git - wahlsystem + - webservices -- name: ensure we have virtualenv installed - apt: name=virtualenv state=present +- name: ensure fucking git module is not able to clone anymore + command: mount -o remount,noexec /tmp tags: - - packages - wahlsystem + - webservices - name: ensure we have a virtualenv pip: - requirements: "{{wahl_web_root}}/program/requirements.txt" - virtualenv: "{{wahl_web_root}}/program" + requirements: "{{ wahl_web_root }}/requirements.txt" + virtualenv: "{{ wahl_web_root }}" virtualenv_python: python3 - become: yes - become_user: "{{wahl_user}}" notify: - restart uwsgi for wahlsystem tags: - - pip - - python - wahlsystem + - webservices -- name: ensure we have the necessary folders - file: name={{item}} state=directory owner="{{wahl_user}}" group="{{wahl_group}}" mode=0755 - with_items: - - "{{wahl_web_root}}/program/blogfiles" +- name: ensure we have the necessary folder + file: + name: "{{ wahl_web_root }}/blogfiles" + state: directory + owner: "{{ wahl_user }}" + group: "{{ wahl_group }}" + mode: 0755 tags: - - directories - wahlsystem + - webservices - name: ensure we have our config template: - src: config.py - dest: "{{wahl_web_root}}/program/config.py" - owner: "{{wahl_user}}" - group: "{{wahl_group}}" + src: config.py.j2 + dest: "{{ wahl_web_root }}/config.py" + owner: "{{ wahl_user }}" + group: "{{ wahl_group }}" mode: 0644 notify: - restart uwsgi for wahlsystem tags: - - config - - python - wahlsystem + - webservices - name: ensure the unit file exists template: - src: wahlsystem.service - dest: "/etc/systemd/system/{{wahl_name}}.service" + src: wahlsystem.service.j2 + dest: "/etc/systemd/system/{{ wahl_name }}.service" owner: root group: root mode: 0644 @@ -100,14 +95,13 @@ - reload systemd service files - restart uwsgi for wahlsystem tags: - - config - - systemd - wahlsystem + - webservices - name: ensure the celery unit file exists template: - src: celery.service - dest: "/etc/systemd/system/{{wahl_name}}-celery.service" + src: celery.service.j2 + dest: "/etc/systemd/system/{{ wahl_name }}-celery.service" owner: root group: root mode: 0644 @@ -115,19 +109,19 @@ - reload systemd service files - restart uwsgi for wahlsystem tags: - - config - - systemd - - celery - wahlsystem + - webservices - meta: flush_handlers - name: ensure the services are enabled - service: name="{{item}}" enabled=yes + service: + name: "{{ item }}" + enabled: yes + state: started with_items: - - "{{wahl_name}}" - - "{{wahl_name}}-celery" + - "{{ wahl_name }}" + - "{{ wahl_name }}-celery" tags: - - config - - systemd - wahlsystem + - webservices diff --git a/wahlsystem/templates/celery.service b/wahlsystem/templates/celery.service deleted file mode 100644 index 0f46cf213b79e4d68845c85a79159d5e2c4592fd..0000000000000000000000000000000000000000 --- a/wahlsystem/templates/celery.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Wahlsystem-Celery -After=network.target - -[Service] -User={{wahl_user}} -Group={{wahl_group}} -WorkingDirectory={{wahl_web_root}}/program -Environment=VIRTUAL_ENV="{{wahl_web_root}}/program" -ExecStart={{wahl_web_root}}/program/bin/celery -A server.celery worker --loglevel=DEBUG --concurrency={{wahl_celery_concurrency}} -Restart=always - -[Install] -WantedBy=multi-user.target diff --git a/wahlsystem/templates/celery.service.j2 b/wahlsystem/templates/celery.service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..8f14b5f35761cbeb8d455c64d6725995341838cb --- /dev/null +++ b/wahlsystem/templates/celery.service.j2 @@ -0,0 +1,14 @@ +[Unit] +Description=Wahlsystem-Celery +After=network.target + +[Service] +User={{ wahl_user }} +Group={{ wahl_group }} +WorkingDirectory={{ wahl_web_root }} +Environment=VIRTUAL_ENV="{{ wahl_web_root }}" +ExecStart={{ wahl_web_root }}/bin/celery -A server.celery worker --loglevel=DEBUG --concurrency={{ wahl_celery_concurrency }} +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/wahlsystem/templates/config b/wahlsystem/templates/config deleted file mode 100644 index bbcaec7f106d833e9fafb36943d00f07e1df98c3..0000000000000000000000000000000000000000 --- a/wahlsystem/templates/config +++ /dev/null @@ -1,4 +0,0 @@ -Host git.fsmpi.rwth-aachen.de -HostName git.fsmpi.rwth-aachen.de -User git -IdentityFile {{wahl_web_root}}/.ssh/deploy-key diff --git a/wahlsystem/templates/config.py b/wahlsystem/templates/config.py deleted file mode 100644 index 7597a1f26b8fc988c74769c4198d7e9a7f39a645..0000000000000000000000000000000000000000 --- a/wahlsystem/templates/config.py +++ /dev/null @@ -1,26 +0,0 @@ -SQLALCHEMY_DATABASE_URI = "postgresql://{{wahl_user}}:@/{{wahl_name}}" -SQLALCHEMY_TRACK_MODIFICATIONS = False -SECRET_KEY = "***REMOVED***" -DEBUG = False -MAIL_ACTIVE = True -MAIL_FROM = "wahl@fsmpi.rwth-aachen.de" -MAIL_HOST = "mail.fsmpi.rwth-aachen.de:25" -MAIL_USER = None -MAIL_PASSWORD = None -MAIL_USE_TLS = False -MAIL_PREFIX = "Wahlsystem" -#CELERY_BROKER_URL = "sqla+postgresql://user:password@host/message-database" -#CELERY_BROKER_URL = "redis+socket:///run/redis/redis.sock" -CELERY_BROKER_URL = "redis://localhost:6379/0" -CELERY_TASK_SERIALIZER = "pickle" -CELERY_ACCEPT_CONTENT = ["pickle"] -SERVER_NAME = "wahl.stud.rwth-aachen.de" -PREFERRED_URL_SCHEME = "https" -URL_ROOT = "wahl.stud.rwth-aachen.de" -URL_PROTO = "https" -URL_PATH = "/" -URL_PARAMS = "" -MAILMAN_API_URL = "https://lists.fsmpi.rwth-aachen.de/mailmanAPI" -MAILMAN_API_KEY = "***REMOVED***" -MAILMAN_DEFAULT_NEW_PASSWORD = "LnbVEiblyk8qhzmvjJhS" -MAILMAN_HOST = "lists.fsmpi.rwth-aachen.de" diff --git a/wahlsystem/templates/config.py.j2 b/wahlsystem/templates/config.py.j2 new file mode 100644 index 0000000000000000000000000000000000000000..155f62c3e85af3de2c992cb9f3f38788bdd7534b --- /dev/null +++ b/wahlsystem/templates/config.py.j2 @@ -0,0 +1,33 @@ +SQLALCHEMY_DATABASE_URI = "postgresql://{{ wahl_user }}:@/{{ wahl_name }}" +SQLALCHEMY_TRACK_MODIFICATIONS = False +SECRET_KEY = "{{ wahl_secret }}" +DEBUG = False +MAIL_ACTIVE = {{ wahl_mail }} +MAIL_FROM = "{{ wahl_mail_from }}" +MAIL_HOST = "{{ wahl_mail_host }}" +MAIL_USER = "{{ wahl_mail_user }}" +MAIL_PASSWORD = "{{ wahl_mail_password }}" +{% if wahl_mail_tls == 'tls' %} +MAIL_USE_TLS = True +MAIL_USE_STARTTLS = False +{% else if wahl_mail_tls == 'starttls' %} +MAIL_USE_TLS = False +MAIL_USE_STARTTLS = True +{% else %} +MAIL_USE_TLS = False +MAIL_USE_STARTTLS = False +{% endif %} +MAIL_PREFIX = "{{ wahl_mail_prefix }}" +CELERY_BROKER_URL = "{{ wahl_celery_broker }}" +CELERY_TASK_SERIALIZER = "pickle" +CELERY_ACCEPT_CONTENT = ["pickle"] +SERVER_NAME = "{{ wahl_server_name }}" +PREFERRED_URL_SCHEME = "{{ wahl_url_proto }}" +URL_ROOT = "{{ wahl_url_root }}" +URL_PROTO = "{{ wahl_url_proto }}" +URL_PATH = "{{ wahl_url_path }}" +URL_PARAMS = "" +MAILMAN_API_URL = "{{ wahl_mailman_api_url }}" +MAILMAN_API_KEY = "{{ wahl_mailman_api_key }}" +MAILMAN_DEFAULT_NEW_PASSWORD = "{{ wahl_mailman_default_newpw }}" +MAILMAN_HOST = "{{ wahl_mailman_host }}" diff --git a/wahlsystem/templates/wahlsystem.service b/wahlsystem/templates/wahlsystem.service.j2 similarity index 54% rename from wahlsystem/templates/wahlsystem.service rename to wahlsystem/templates/wahlsystem.service.j2 index 29ea1679b07931e6b5d9a31e2683791eac9f947d..c035bba44baa5bb781a0cc80f3a683d36546082d 100644 --- a/wahlsystem/templates/wahlsystem.service +++ b/wahlsystem/templates/wahlsystem.service.j2 @@ -4,8 +4,10 @@ After=network.target Wants=wahlsystem-celery.service [Service] -Environment=LDAPTLS_CACERT=/etc/ssl/certs/rwth_chain.pem -ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{wahl_name}}.ini +{% if wahl_ldap_cert %} +Environment=LDAPTLS_CACERT={{ wahl_ldap_cert }} +{% endif %} +ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps-available/{{ wahl_name }}.ini Restart=always KillSignal=SIGQUIT Type=notify diff --git a/webserver/files/tmpfiles.conf b/webserver/files/tmpfiles.conf new file mode 100644 index 0000000000000000000000000000000000000000..b13000cd1fca9fd84e606d0059f21757fd9c1a5c --- /dev/null +++ b/webserver/files/tmpfiles.conf @@ -0,0 +1 @@ +d /run/nginx 0750 www-data nginx-proxy - - diff --git a/webserver/handlers/main.yml b/webserver/handlers/main.yml index e58a6acd99ca434391309b227b48723a5483f1f9..73b78fb0939591d3ac2a621b44cbc2b2e5794853 100644 --- a/webserver/handlers/main.yml +++ b/webserver/handlers/main.yml @@ -1,14 +1,18 @@ --- -# file: roles/webserver/handlers/main.yml +# file: webserver/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: restart nginx - service: name=nginx state=restarted + service: + name: nginx + state: restarted - name: restart nginx-proxy - service: name=nginx-proxy state=restarted + service: + name: nginx-proxy + state: restarted - name: create tmpfiles command: systemd-tmpfiles --create diff --git a/webserver/tasks/main.yml b/webserver/tasks/main.yml index 9738e07e4d1bdaf7c8c4350eb0d5a38b053448a5..8854d2198d38cad00fd2261a646b4e9c9b8d8e43 100644 --- a/webserver/tasks/main.yml +++ b/webserver/tasks/main.yml @@ -1,8 +1,10 @@ --- -# file: roles/webserver/tasks/main.yml +# file: webserver/tasks/main.yml - name: ensure nginx is installed - apt: name={{ item }} state=latest + apt: + name: "{{ item }}" + state: installed with_items: - nginx - nginx-full @@ -10,116 +12,164 @@ - restart nginx - restart nginx-proxy tags: - - packages - nginx + - webservices - name: ensure we got our nginx config - copy: src=nginx.conf dest=/etc/nginx/nginx.conf owner=root group=root mode=0644 + copy: + src: nginx.conf + dest: /etc/nginx/nginx.conf + owner: root + group: root + mode: 0644 notify: - restart nginx tags: - - config - nginx + - webservices - name: ensure we got our nginx-proxy config - template: src=nginx-proxy.conf dest=/etc/nginx/nginx-proxy.conf owner=root group=root mode=0644 + template: + src: nginx-proxy.conf.j2 + dest: /etc/nginx/nginx-proxy.conf + owner: root + group: root + mode: 0644 notify: - restart nginx-proxy tags: - - config - nginx + - webservices - name: ensure there is the nginx-proxy group - group: name=nginx-proxy state=present system=yes + group: + name: nginx-proxy + state: present + system: yes tags: - - config - nginx + - webservices - name: ensure there is the nginx-proxy user - user: name=nginx-proxy state=present group=nginx-proxy system=yes shell=/usr/sbin/nologin home=/var/www createhome=no + user: + name: nginx-proxy + state: present + group: nginx-proxy + system: yes + shell: /usr/sbin/nologin + home: /var/www + createhome: no tags: - - config - nginx + - webservices - name: ensure there is some tls-proxy config - template: src=tls-proxy.j2 dest=/etc/nginx/sites-available/tls-proxy owner=root group=root mode=0644 force=no + template: + src: tls-proxy.j2 + dest: /etc/nginx/sites-available/tls-proxy + owner: root + group: root + mode: 0644 + force: no notify: - restart nginx-proxy tags: - - config - nginx + - webservices - name: ensure there is some main config - copy: src=main dest=/etc/nginx/sites-available/main owner=root group=root mode=0644 force=no + copy: + src: main + dest: /etc/nginx/sites-available/main + owner: root + group: root + mode: 0644 + force: no notify: - restart nginx tags: - - config - - nginx - -- name: ensure the main config is activated - file: path=/etc/nginx/sites-enabled/main state=link src=/etc/nginx/sites-available/main - notify: - - restart nginx - tags: - - config - nginx + - webservices - name: ensure there is the sso example snippet - copy: src="{{item}}" dest=/etc/nginx/snippets/ owner=root group=root mode=0644 + copy: + src: "{{ item }}" + dest: /etc/nginx/snippets/ + owner: root + group: root + mode: 0644 with_items: - sso.conf - sso-auth.conf - sso-locations.conf tags: - - config - nginx + - webservices - name: ensure we have a directory for sockets - lineinfile: + copy: + src: tmpfiles.conf dest: /etc/tmpfiles.d/10-nginx.conf - line: "d /run/nginx 0750 www-data nginx-proxy - -" - create: yes + owner: root + group: root + mode: 0644 notify: - create tmpfiles tags: - - config - nginx + - webservices - name: ensure the default config is not activated - file: path=/etc/nginx/sites-enabled/default state=absent + file: + path: /etc/nginx/sites-enabled/default + state: absent notify: - restart nginx tags: - - config - nginx + - webservices - name: ensure there is a lib dir for nginx-proxy - file: path=/var/lib/nginx-proxy state=directory owner=root group=root mode=0755 + file: + path: /var/lib/nginx-proxy + state: directory + owner: root + group: root + mode: 0755 tags: - - config - nginx + - webservices - name: ensure there is a nginx-proxy service - copy: src=nginx-proxy.service dest=/etc/systemd/system/nginx-proxy.service owner=root group=root mode=0644 + copy: + src: nginx-proxy.service + dest: /etc/systemd/system/nginx-proxy.service + owner: root + group: root + mode: 0644 notify: - reload systemd service files - restart nginx-proxy tags: - - service - nginx + - webservices - meta: flush_handlers - name: ensure nginx is enabled and running - service: name=nginx state=running enabled=yes + service: + name: nginx + state: started + enabled: yes tags: - - service - nginx + - webservices - name: ensure nginx-proxy is enabled and running - service: name=nginx-proxy state=running enabled=yes + service: + name: nginx-proxy + state: started + enabled: yes tags: - - service - nginx - + - webservices diff --git a/webserver/templates/nginx-proxy.conf b/webserver/templates/nginx-proxy.conf.j2 similarity index 100% rename from webserver/templates/nginx-proxy.conf rename to webserver/templates/nginx-proxy.conf.j2 diff --git a/wordpress/defaults/main.yml b/wordpress/defaults/main.yml index 4d3d5e4e35eebddc008cca1ea568b390bda03052..45f4a4b2197de4312d8f3c5d6c0ab47795db38ae 100644 --- a/wordpress/defaults/main.yml +++ b/wordpress/defaults/main.yml @@ -1,5 +1,5 @@ --- -# file: roles/wordpress/defaults/main.yml +# file: wordpress/defaults/main.yml wordpress_web_root: /var/www diff --git a/wordpress/handlers/main.yml b/wordpress/handlers/main.yml index a1d5ccf1a5cb678e7947fcf52bb129191d365b1e..54ac6b8afb92da3a29ae5f141a41b0fb54631fb3 100644 --- a/wordpress/handlers/main.yml +++ b/wordpress/handlers/main.yml @@ -1,11 +1,13 @@ --- -# file: roles/wordpress/handlers/main.yml +# file: wordpress/handlers/main.yml - name: reload systemd service files command: systemctl daemon-reload - name: "restart uwsgi for {{ wordpress_name }}" - service: "name=wordpress-{{ wordpress_name }} state=restarted enabled=yes" + service: + name: "wordpress-{{ wordpress_name }}" + state: restarted - name: create tmpfiles shell: systemd-tmpfiles --create diff --git a/wordpress/meta/main.yml b/wordpress/meta/main.yml index 2324e43a8bb885912955537b9997c7f455060f01..a47367479c8a040299e933bf21c1a9c7372a1c51 100644 --- a/wordpress/meta/main.yml +++ b/wordpress/meta/main.yml @@ -1,6 +1,5 @@ --- -# file: roles/wordpress/meta/main.yml +# file: wordpress/meta/main.yml dependencies: - { role: uwsgi-php } - - { role: mysql } diff --git a/wordpress/tasks/main.yml b/wordpress/tasks/main.yml index afda9bac10902bca9f95429175dd5a66f6474856..2089dcab83e78cc1dede8cc8bd093dbf96d3e226 100644 --- a/wordpress/tasks/main.yml +++ b/wordpress/tasks/main.yml @@ -1,17 +1,35 @@ --- -# file: roles/wordpress/tasks/main.yml +# file: wordpress/tasks/main.yml - name: ensure we have aufs tools - apt: name=aufs-tools state=latest install_recommends=no + apt: + name: aufs-tools + state: installed + install_recommends: no tags: - - packages - wordpress - -- name: ensure the wordpress package from backports is installed - apt: name=wordpress state=latest install_recommends=no default-release=jessie-backports + - webservices + +- name: ensure the wordpress package is installed + apt: + name: wordpress + state: installed + install_recommends: no + default-release: jessie-backports + when: debian_version == 'jessie' + tags: + - wordpress + - webservices + +- name: ensure the wordpress package is installed + apt: + name: wordpress + state: installed + install_recommends: no + when: debian_version == 'stretch' tags: - - packages - wordpress + - webservices - name: "ensure group for {{ wordpress_name }} exists" group: @@ -19,9 +37,8 @@ state: present system: yes tags: - - users - - config - wordpress + - webservices - name: "ensure user for {{ wordpress_name }} exists" user: @@ -33,9 +50,8 @@ home: "{{ wordpress_web_root }}" createhome: no tags: - - users - - config - wordpress + - webservices - name: "ensure the wordpress folders for {{ wordpress_name }} exists" file: @@ -48,8 +64,8 @@ - "{{ wordpress_name }}-files" - "{{ wordpress_name }}" tags: - - config - wordpress + - webservices - name: "ensure local folders without write permissions for {{ wordpress_name }} exist" file: @@ -61,8 +77,8 @@ with_items: - wp-content tags: - - config - wordpress + - webservices - name: "ensure local folders with write permissions for {{ wordpress_name }} exist" file: @@ -78,39 +94,40 @@ - wp-content/themes - wp-content/upgrade tags: - - config - wordpress + - webservices - name: "ensure the directories for {{ wordpress_name }} are mounted above each other" mount: state: mounted fstype: aufs name: "{{ wordpress_web_root }}/{{ wordpress_name }}/" - opts: "br={{ wordpress_web_root }}/{{ wordpress_name }}-files/:/usr/share/wordpress" + opts: "br={{ wordpress_web_root }}/{{ wordpress_name }}-files/:/usr/share/wordpress,udba=reval" src: none tags: - - mount - - config - wordpress + - webservices - name: "ensure temporary directories for {{ wordpress_name }} exist" - lineinfile: + template: + src: tmpfiles.conf.j2 dest: "/etc/tmpfiles.d/10-wordpress-{{ wordpress_name }}.conf" - line: "d /run/uwsgi/app/wordpress-{{ wordpress_name }} 0775 {{ wordpress_user }} {{ wordpress_group }} - -" - create: yes + owner: root + group: root + mode: 0644 notify: - - create tmpfiles + - create tmpfiles tags: - - config - wordpress + - webservices - name: "ensure the config for {{ wordpress_name }} exists" template: src: wp-config.php.j2 dest: "{{ wordpress_web_root }}/{{ wordpress_name }}-files/wp-config.php" tags: - - config - wordpress + - webservices - name: "get randomness for secrets for {{ wordpress_name }}" set_fact: @@ -129,8 +146,8 @@ dest: "{{ wordpress_web_root }}/{{ wordpress_name }}-files/secrets.php" force: no tags: - - config - wordpress + - webservices - name: "ensure wordpress can access javascript files that debian places somewhere else" file: @@ -138,8 +155,8 @@ dest: "{{ wordpress_web_root }}/javascript" state: link tags: - - config - wordpress + - webservices - include: mysql.yml @@ -150,8 +167,8 @@ notify: - "restart uwsgi for {{ wordpress_name }}" tags: - - config - wordpress + - webservices - name: "ensure the unit file for {{ wordpress_name }} exists" template: @@ -161,16 +178,14 @@ - reload systemd service files - "restart uwsgi for {{ wordpress_name }}" tags: - - config - wordpress - - service + - webservices - name: "ensure the service for {{ wordpress_name }} is running" service: name: "wordpress-{{ wordpress_name }}" - state: running + state: started enabled: yes tags: - - config - wordpress - - service + - webservices diff --git a/wordpress/tasks/mysql.yml b/wordpress/tasks/mysql.yml index 9e1fc51485ec444fed5caf97cc803c4aae19f7b8..903e40a11c9218d42c79533683f4012f15edeb88 100644 --- a/wordpress/tasks/mysql.yml +++ b/wordpress/tasks/mysql.yml @@ -1,35 +1,34 @@ --- -# file: roles/wordpress/tasks/mysql.yml +# file: wordpress/tasks/mysql.yml -- name: "ensure php can talk with mysql" - apt: name=php5-mysql state=latest +- name: ensure php can talk with mysql + apt: + name: php5-mysql + state: latest + when: debian_version == 'jessie' tags: - - packages - - mysql - wordpress + - webservices -- name: "get database password for {{ wordpress_name }}" - local_action: pass name="db/{{ wordpress_dbhost }}-{{ wordpress_dbtype }}" state=present generate=20 store=FSMPI_PASSWORD_STORE_DIR limit=yes - #local_action: "pass store=FSMPI_PASSWORD_STORE_DIR name=db/{{ wordpress_dbhost }}-{{ wordpress_dbtype }} limit=True" - register: wordpress_db_login_password - no_log: True +- name: ensure php can talk with mysql + apt: + name: php-mysql + state: latest + when: debian_version == 'stretch' tags: - - config - - password - wordpress - - mysql + - webservices - name: "ensure the database for {{ wordpress_name }} exists" mysql_db: name: "{{ wordpress_dbname }}" state: present login_user: root - login_password: "{{ wordpress_db_login_password.password }}" + login_password: "{{ lookup('passwordstore', 'db/{{ wordpress_dbhost }}-{{ wordpress_dbtype }} create=true length=20')}}" no_log: True tags: - - mysql - - config - wordpress + - webservices - name: "ensure the database user for {{ wordpress_name }} exists" mysql_user: @@ -37,11 +36,10 @@ password: "{{ wordpress_dbpassword }}" state: present login_user: root - login_password: "{{ wordpress_db_login_password.password }}" + login_password: "{{ lookup('passwordstore', 'db/{{ wordpress_dbhost }}-{{ wordpress_dbtype }} create=true length=20')}}" priv: "{{ wordpress_dbname }}.*:ALL" no_log: True tags: - - mysql - - config - wordpress + - webservices diff --git a/wordpress/templates/tmpfiles.conf.j2 b/wordpress/templates/tmpfiles.conf.j2 new file mode 100644 index 0000000000000000000000000000000000000000..20bc5ac775d3efa6f50ee42be7c7dca0867a337b --- /dev/null +++ b/wordpress/templates/tmpfiles.conf.j2 @@ -0,0 +1 @@ +d /run/uwsgi/app/wordpress-{{ wordpress_name }} 0775 {{ wordpress_user }} {{ wordpress_group }} - -