From 8677a7986a6d54ae60861a07d312cc5fc5bfe46c Mon Sep 17 00:00:00 2001
From: Hinrikus Wolf <hinrikus@fsmpi.rwth-aachen.de>
Date: Wed, 23 May 2018 18:38:00 +0200
Subject: [PATCH] refactor role, up to a reported bug

---
 uwsgi-python/tasks/app.yml  | 430 ++++++++++++++++++------------------
 uwsgi-python/tasks/main.yml |  13 +-
 2 files changed, 223 insertions(+), 220 deletions(-)

diff --git a/uwsgi-python/tasks/app.yml b/uwsgi-python/tasks/app.yml
index c764126..2a3e8b6 100644
--- a/uwsgi-python/tasks/app.yml
+++ b/uwsgi-python/tasks/app.yml
@@ -1,213 +1,223 @@
 ---
+- debug:
+    msg: "app = {{ app }}"
 
-
-- name: ensure we have python 2
-  apt:
-    name: "{{ item }}"
-    state: installed
+- include_vars: "{{ item }}"
   with_items:
-    - python
-    - python-dev
-    - python-virtualenv
-    - uwsgi-plugin-python
-    - virtualenv
-  when: uwsgi_python == 2
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure we have python 3
-  apt:
-    name: "{{ item }}"
-    state: installed
-  with_items:
-    - python3
-    - python3-dev
-    - python3-virtualenv
-    - uwsgi-plugin-python3
-    - virtualenv
-  when: uwsgi_python == 3
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- include: sqlite.yml
-  when: app_db == "sqlite"
-
-- include: mysql.yml
-  when: app_db == "mysql"
-
-- include: postgres.yml
-  when: app_db == "postgres"
-
-- name: ensure we have a group
-  group:
-    name: "{{ app_group }}"
-    system: yes
-    state: present
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure we have a user
-  user:
-    name: "{{ app_user }}"
-    group: "{{ app_group }}"
-    system: yes
-    home: "{{ app_home }}"
-    shell: /usr/bin/nologin
-    createhome: no
-    state: present
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure a temporary directory exists
-  template:
-    src: tmpfiles.conf.j2
-    dest: "/etc/tmpfiles.d/10-{{ app_name }}.conf"
-    owner: root
-    group: root
-    mode: 0644
-  notify:
-    - create tmpfiles
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure we have our uwsgi config file
-  template:
-    src: uwsgi.ini.j2
-    dest: "/etc/uwsgi/apps/{{ app_instance }}.ini"
-    owner: root
-    group: root
-    mode: 0644
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure additional software is installed
-  apt: name={{ item }} state=present
-  with_items: "{{ app_additional_software }}"
-  when: 
-    - app_additional_software is defined
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure the deploy key is available
-  copy:
-    src: "{{ app_deploy_key }}"
-    dest: "/root/.ssh/{{ app_name }}"
-    owner: root
-    group: root
-    mode: 0600
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-# https://github.com/ansible/ansible/issues/27699
-- name: ensure git module is able to clone
-  command: mount -o remount,exec /tmp
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure we have the program
-  git:
-    repo: "{{ app_git_url }}"
-    dest: "{{ app_path }}"
-    key_file: "/root/.ssh/{{ app_name }}"
-    version: "{{ app_git_version }}"
-  notify:
-    - restart uwsgi instance
-  register: git 
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure git module is not able to clone anymore
-  command: mount -o remount,noexec /tmp
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure we have a virtualenv
-  pip:
-    requirements: "{{ app_path }}/requirements.txt"
-    virtualenv: "{{ app_venv }}"
-    virtualenv_python: "{{ app_python_version }}"
-  notify:
-    - restart uwsgi instance
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure we have our config
-  template:
-    src: "apps/{{ app_name }}.j2"
-    dest: "{{ app_path }}/{{ app_config_file }}"
-    owner: "{{ app_user }}"
-    group: "{{ app_group }}"
-    mode: 0640
-  notify:
-    - restart uwsgi instance
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- name: ensure we have our secret config
-  template:
-    src: secret_config.py.j2
-    dest: "{{ app_path }}/secret_config.py"
-    owner: "{{ app_user }}"
-    group: "{{ app_group }}"
-    mode: 0600
-    force: no
-  notify:
-    - restart uwsgi instance
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-  when: 
-    - secret_config is defined
-    - secret_config == True
-
-
-- include_tasks: "{{ item }}"
-  with_first_found:
-    - files:
-        - "apps/{{ app_name }}.yml"
-      skip: true 
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-- meta: flush_handlers
-
-- name: ensure the service is enabled
-  service:
-    name: "uwsgi@{{ app_instance }}"
-    enabled: yes
-    state: started
-  tags:
-    - uwsgi-app
-    - "{{ app_name }}"
-    - "{{ app_instance }}"
-
-
+    - "../vars/{{ app.app }}.yml"
+    - "{{ inventory_dir }}/vars/{{ app.app_vars }}"
+  tags:
+    - uwsgi-app
+    - "{{ app.app }}"
+    - "{{ app.instance }}"
+    #
+    #- name: ensure we have python 2
+    #  apt:
+    #    name: "{{ item }}"
+    #    state: installed
+    #  with_items:
+    #    - python
+    #    - python-dev
+    #    - python-virtualenv
+    #    - uwsgi-plugin-python
+    #    - virtualenv
+    #  when: uwsgi_python == 2
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure we have python 3
+    #  apt:
+    #    name: "{{ item }}"
+    #    state: installed
+    #  with_items:
+    #    - python3
+    #    - python3-dev
+    #    - python3-virtualenv
+    #    - uwsgi-plugin-python3
+    #    - virtualenv
+    #  when: uwsgi_python == 3
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- include: sqlite.yml
+    #  when: app.db == "sqlite"
+    #
+    #- include: mysql.yml
+    #  when: app.db == "mysql"
+    #
+    #- include: postgres.yml
+    #  when: app.db == "postgres"
+    #
+    #- name: ensure we have a group
+    #  group:
+    #    name: "{{ app.group }}"
+    #    system: yes
+    #    state: present
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure we have a user
+    #  user:
+    #    name: "{{ app.user }}"
+    #    group: "{{ app.group }}"
+    #    system: yes
+    #    home: "{{ app.home }}"
+    #    shell: /usr/bin/nologin
+    #    createhome: no
+    #    state: present
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure a temporary directory exists
+    #  template:
+    #    src: tmpfiles.conf.j2
+    #    dest: "/etc/tmpfiles.d/10-{{ app.name }}.conf"
+    #    owner: root
+    #    group: root
+    #    mode: 0644
+    #  notify:
+    #    - create tmpfiles
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure we have our uwsgi config file
+    #  template:
+    #    src: uwsgi.ini.j2
+    #    dest: "/etc/uwsgi/apps/{{ app.instance }}.ini"
+    #    owner: root
+    #    group: root
+    #    mode: 0644
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure additional software is installed
+    #  apt: name={{ item }} state=present
+    #  with_items: "{{ app.additional_software }}"
+    #  when: 
+    #    - app.additional_software is defined
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure the deploy key is available
+    #  copy:
+    #    src: "{{ app.deploy_key }}"
+    #    dest: "/root/.ssh/{{ app.name }}"
+    #    owner: root
+    #    group: root
+    #    mode: 0600
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    ## https://github.com/ansible/ansible/issues/27699
+    #- name: ensure git module is able to clone
+    #  command: mount -o remount,exec /tmp
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure we have the program
+    #  git:
+    #    repo: "{{ app.git_url }}"
+    #    dest: "{{ app.path }}"
+    #    key_file: "/root/.ssh/{{ app.name }}"
+    #    version: "{{ app.git_version }}"
+    #  notify:
+    #    - restart uwsgi instance
+    #  register: git 
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure git module is not able to clone anymore
+    #  command: mount -o remount,noexec /tmp
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure we have a virtualenv
+    #  pip:
+    #    requirements: "{{ app.path }}/requirements.txt"
+    #    virtualenv: "{{ app.venv }}"
+    #    virtualenv_python: "{{ app.python_version }}"
+    #  notify:
+    #    - restart uwsgi instance
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure we have our config
+    #  template:
+    #    src: "apps/{{ app.name }}.j2"
+    #    dest: "{{ app.path }}/{{ app.config_file }}"
+    #    owner: "{{ app.user }}"
+    #    group: "{{ app.group }}"
+    #    mode: 0640
+    #  notify:
+    #    - restart uwsgi instance
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- name: ensure we have our secret config
+    #  template:
+    #    src: secret_config.py.j2
+    #    dest: "{{ app.path }}/secret_config.py"
+    #    owner: "{{ app.user }}"
+    #    group: "{{ app.group }}"
+    #    mode: 0600
+    #    force: no
+    #  notify:
+    #    - restart uwsgi instance
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #  when: 
+    #    - secret_config is defined
+    #    - secret_config == True
+    #
+    #
+    #- include_tasks: "{{ item }}"
+    #  with_first_found:
+    #    - files:
+    #        - "apps/{{ app.name }}.yml"
+    #      skip: true 
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #- meta: flush_handlers
+    #
+    #- name: ensure the service is enabled
+    #  service:
+    #    name: "uwsgi@{{ app.instance }}"
+    #    enabled: yes
+    #    state: started
+    #  tags:
+    #    - uwsgi-app
+    #    - "{{ app.name }}"
+    #    - "{{ app.instance }}"
+    #
+    #
diff --git a/uwsgi-python/tasks/main.yml b/uwsgi-python/tasks/main.yml
index b109e42..cfed4f1 100644
--- a/uwsgi-python/tasks/main.yml
+++ b/uwsgi-python/tasks/main.yml
@@ -34,15 +34,8 @@
     - uwsgi
     - webservices
 
-# TODO
-# enthält webapps eine mehr-instanz-app mehrfach? wenn ja, ist ../vars/item.yml doof
-# wenn nein, wie realisieren wir das? bsp: schildergenerator mit schilder, boxes
-- include_tasks: app.yml 
-  vars:
-    app_instance: instance #"{{ item.instance }}"
-    app_name: name #"{{ item.app }}"
-  vars_files:
-    - "../vars/{{ item.app }}.yml"
-    - "{{ inventory_dir }}/vars/{{ item.app_vars }}"
+- include_tasks: app.yml  
   with_items: "{{ webapps }}"
+  loop_control:
+    loop_var: app
 
-- 
GitLab