From f9e86b69f0c2354c0169219e8512958c4255d1e9 Mon Sep 17 00:00:00 2001
From: bax1489 <fabian.gallenkamp@uni-hamburg.de>
Date: Thu, 29 Aug 2019 14:12:39 +0200
Subject: [PATCH] Added postgresql; Changed naming of subtasks; Created
 supervisor template; Added python 3.7 compatibility

---
 .gitignore                              |  1 +
 setup_otree.yml => configure_otree.yml  | 29 +++++++++++++++----------
 configure_postgresql.yml                | 16 +++++++-------
 configure_supervisor.yml                |  1 +
 setup_firewall.yml => configure_ufw.yml |  0
 site.yml                                | 15 ++++++++++---
 6 files changed, 40 insertions(+), 22 deletions(-)
 rename setup_otree.yml => configure_otree.yml (81%)
 create mode 100644 configure_supervisor.yml
 rename setup_firewall.yml => configure_ufw.yml (100%)

diff --git a/.gitignore b/.gitignore
index d335928..7999768 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ group_vars/otree_servers.yml
 files/
 *.retry
 *.swp
+*.save
diff --git a/setup_otree.yml b/configure_otree.yml
similarity index 81%
rename from setup_otree.yml
rename to configure_otree.yml
index cfc3b76..9a09c17 100644
--- a/setup_otree.yml
+++ b/configure_otree.yml
@@ -3,7 +3,7 @@
   become: true
   hosts: all
   tasks:
-    #- name: create directory or clone
+    # create new project from given directory (in "files/$user") or clone project from given git-repository
     - name: remove old projects
       file:
         state: absent
@@ -50,14 +50,24 @@
       with_dict: "{{ otree_users }}"
       when: item.value.override and item.value.app_repo is not defined
 
-    # install python dependencies
+    # clear old venv directory since python.X -m venv --clear is only executed once on creation 
+    - name: remove old venv
+      file:
+        state: absent
+        path: "/home/{{ item.key }}/.venv_otree/"
+      become: yes
+      become_user: "{{ item.key }}"
+      with_dict: "{{ otree_users }}"
+      when: item.value.override
+
+
+    # install python dependencies, otree and
     - name: install psycopg2
       pip:
         name: psycopg2
-        state: forcereinstall
-        #state: present
+        state: present
         virtualenv: "/home/{{ item.key }}/.venv_otree"
-        virtualenv_command: "/usr/bin/python3 -m venv"
+        virtualenv_command: "/usr/bin/python{{ '3.7' if item.value.pre_release else '3'}} -m venv"
       become: yes
       become_user: "{{ item.key }}"
       with_dict: "{{ otree_users }}"
@@ -66,11 +76,10 @@
     - name: install otree
       pip:
         name: otree
-        state: forcereinstall
-#        state: present
+        state: present
         extra_args: "{{ '--pre' if item.value.pre_release else '' }}"
         virtualenv: "/home/{{ item.key }}/.venv_otree"
-        virtualenv_command: "/usr/bin/python3 -m venv"
+        virtualenv_command: "/usr/bin/python{{ '3.7' if item.value.pre_release else '3'}} -m venv"
       become: yes
       become_user: "{{ item.key }}"
       with_dict: "{{ otree_users }}"
@@ -81,7 +90,7 @@
         state: present
         requirements: "/home/{{ item.key }}/otree/requirements.txt"
         virtualenv: "/home/{{ item.key }}/.venv_otree"
-        virtualenv_command: "/usr/bin/python3 -m venv"
+        virtualenv_command: "/usr/bin/python{{ '3.7' if item.value.pre_release else '3'}} -m venv"
       become: yes
       become_user: "{{ item.key }}"
       with_dict: "{{ otree_users }}"
@@ -123,5 +132,3 @@
         state: restarted
       with_dict: "{{ otree_users }}"
     # TODO: set up otree (create venv, install pip packages, adapt .bashrc, run resetdb
-
-
diff --git a/configure_postgresql.yml b/configure_postgresql.yml
index 8e437a7..43e9781 100644
--- a/configure_postgresql.yml
+++ b/configure_postgresql.yml
@@ -6,7 +6,7 @@
     # enable PostgreSQL service
     - name: ensure postgres service is enabled and running
       service:
-        name:postgresql
+        name: postgresql
         state: started
         enabled: yes
 
@@ -21,18 +21,18 @@
         state: present
       with_dict: "{{ otree_users }}"
       when: item.value.override
+      become: yes
+      become_user: postgres
 
     - name: ensure users have access to the databases
       postgresql_user:
         db: "instance_{{ item.key }}"
-        name: "{{ item }}"
-        name: "{{ item }}"
+        name: "{{ item.key }}"
+        password: "{{ item.value.admin_pw }}"
         priv: ALL
+        role_attr_flags: NOSUPERUSER,NOCREATEDB
         state: present
       with_dict: "{{ otree_users }}"
       when: item.value.override
-
-    - name: ensure users do not have unnecessary priviliges
-      postgresql_user:
-        role_attr_flags: NOSUPERUSER,NOCREATEDB
-      when: item.value.override
+      become: yes
+      become_user: postgres
diff --git a/configure_supervisor.yml b/configure_supervisor.yml
new file mode 100644
index 0000000..6eeb900
--- /dev/null
+++ b/configure_supervisor.yml
@@ -0,0 +1 @@
+FIXME: TODO
diff --git a/setup_firewall.yml b/configure_ufw.yml
similarity index 100%
rename from setup_firewall.yml
rename to configure_ufw.yml
diff --git a/site.yml b/site.yml
index c15f381..301b99c 100644
--- a/site.yml
+++ b/site.yml
@@ -10,6 +10,10 @@
       - python3-pip 
       - python3-dev
       - python3-venv
+      - python3.7
+      - python3.7-dev
+      - python3.7-venv
+      - python-psycopg2
       - libpq-dev
       - redis-server
       - git
@@ -53,8 +57,13 @@
         name: "{{ item }}"
         state: absent
       with_items: "{{ removed_users }}"
-    # TODO: remove supervisor configs 
+    # FIXME: remove supervisor configs for deleted users
 
+    # add python repos, FIXME should be avoided by using recent unbuntu version
+    #- name: add ppa repository with python versions
+    #  apt_repository: "ppa:deadsnakes/ppa"
+    #  state: present
+    
     # install all apt packages
     - name: update package information
       apt: update_cache=yes
@@ -66,5 +75,5 @@
 
 - import_playbook: "configure_nginx.yml"
 - import_playbook: "configure_postgresql.yml"
-- import_playbook: "setup_otree.yml"
-- import_playbook: "setup_firewall.yml"
+- import_playbook: "configure_otree.yml"
+- import_playbook: "configure_ufw.yml"
-- 
GitLab