From f75eb11d665238d388a6bbb23ca2d908d046394a Mon Sep 17 00:00:00 2001
From: hygienic-books <hygienic-books@tentic.net>
Date: Fri, 8 Jul 2022 03:18:56 +0200
Subject: [PATCH] feat(conda): Add conda env setup basics

---
 .../defaults/main.yml.example                 |  5 ++
 .../tasks/50-setup-miniconda-env.yml          | 52 +++++++++++++++++++
 .../10-include-50-miniconda/tasks/main.yml    | 11 +++-
 .../cookiecutter_conda_environment.yml.j2     |  7 +++
 ...e-firewall-source_conda_environment.yml.j2 |  7 +++
 .../tasks/40-install-mailcow.yml              | 33 ++++++------
 6 files changed, 98 insertions(+), 17 deletions(-)
 create mode 100644 ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/cookiecutter_conda_environment.yml.j2
 create mode 100644 ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/update-firewall-source_conda_environment.yml.j2

diff --git a/ansible/roles/10-include-50-miniconda/defaults/main.yml.example b/ansible/roles/10-include-50-miniconda/defaults/main.yml.example
index 58eb7e9..73467c8 100644
--- a/ansible/roles/10-include-50-miniconda/defaults/main.yml.example
+++ b/ansible/roles/10-include-50-miniconda/defaults/main.yml.example
@@ -1,7 +1,12 @@
 miniconda_install_dir: '/opt/miniconda3'
 miniconda_bin_dir: '{{ miniconda_install_dir }}/bin'
+miniconda_envs_dir: '{{ miniconda_install_dir }}/envs'
+miniconda_conda_binary: '{{ miniconda_bin_dir }}/conda'
 miniconda_installer_dl_dir: '{{ miniconda_install_dir }}/_downloaded-installer'
 miniconda_dl_uri_base: 'https://repo.anaconda.com/miniconda/'
 miniconda_dl_uri_file: 'Miniconda3-latest-Linux-x86_64.sh'
 miniconda_dl_uri: '{{ miniconda_dl_uri_base }}{{ miniconda_dl_uri_file }}'
 miniconda_dl_local_abs: '{{ miniconda_installer_dl_dir }}/{{ miniconda_dl_uri_file }}'
+conda_envs_template_dir: '_conda_envs_dir_'
+conda_python_version: '3'
+conda_package_spec: 'pip'
diff --git a/ansible/roles/10-include-50-miniconda/tasks/50-setup-miniconda-env.yml b/ansible/roles/10-include-50-miniconda/tasks/50-setup-miniconda-env.yml
index e3e64a7..39ff676 100644
--- a/ansible/roles/10-include-50-miniconda/tasks/50-setup-miniconda-env.yml
+++ b/ansible/roles/10-include-50-miniconda/tasks/50-setup-miniconda-env.yml
@@ -1,3 +1,55 @@
+- name: 'Set conda env file basename'
+  tags:
+    - 'testing'
+  set_fact:
+    conda_env_file_base: '{{ conda_env_file | basename }}'
+
+
+
+- name: 'Set conda env file absolute path'
+  tags:
+    - 'testing'
+  set_fact:
+    conda_env_file_abs: '{{ miniconda_envs_dir }}/{{ conda_env_file_base | regex_search(''.*?\.yml'', ''\0'') | first }}'
+
+
+
+- name: 'Set conda env name'
+  tags:
+    - 'testing'
+  set_fact:
+    conda_env_name: '{{ conda_env_file_base | regex_search(''(.*?)(_conda_environment.yml)'', ''\1'') | first }}'
+
+
+
+- name: 'Store conda environment.yml file'
+  ansible.builtin.template:
+    src: '{{ conda_env_file }}'
+    dest: '{{ conda_env_file_abs }}'
+
+
+
+- name: 'Set up conda env ''{{ conda_env_name }}'''
+  tags:
+    - 'testing'
+  register: 'rv_conda_env_install'
+  changed_when: 'not rv_conda_env_install.stderr'
+  failed_when: 'false'
+  ansible.builtin.shell: '{{ miniconda_conda_binary }} env create --quiet --file ''{{ conda_env_file_abs }}'''
+
+
+
+#
+#- name: Display paths of all .txt files in dir
+#  tags:
+#    - 'testing'
+#  ansible.builtin.debug: msg={{ lookup('ansible.builtin.fileglob', '_conda_envs_dir_/**', wantlist=True) }}
+
+- name: 'Debug vars'
+  tags:
+    - 'testing'
+  debug:
+    msg: 'asd'
 
 
 
diff --git a/ansible/roles/10-include-50-miniconda/tasks/main.yml b/ansible/roles/10-include-50-miniconda/tasks/main.yml
index 69f0764..b1f5822 100644
--- a/ansible/roles/10-include-50-miniconda/tasks/main.yml
+++ b/ansible/roles/10-include-50-miniconda/tasks/main.yml
@@ -1 +1,10 @@
-- import_tasks: '50-setup-miniconda-env.yml'
+- import_tasks: '40-install-miniconda.yml'
+- name: 'Set up conda environment'
+  tags:
+    - 'testing'
+  loop_control:
+    loop_var: 'conda_env'
+  loop: '{{ lookup(''ansible.builtin.fileglob'', ''{{ role_path }}/templates/{{ conda_envs_template_dir }}/*'', wantlist=True) | map(''regex_search'', conda_envs_template_dir + ''/.*?_conda_environment.yml.j2'') }}'
+  vars:
+    conda_env_file: '{{ conda_env }}'
+  include_tasks: '50-setup-miniconda-env.yml'
diff --git a/ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/cookiecutter_conda_environment.yml.j2 b/ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/cookiecutter_conda_environment.yml.j2
new file mode 100644
index 0000000..1f433fd
--- /dev/null
+++ b/ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/cookiecutter_conda_environment.yml.j2
@@ -0,0 +1,7 @@
+name: cookiecutter
+channels:
+  - defaults
+dependencies:
+  - python=3
+  - pip
+prefix: {{ miniconda_envs_dir }}/cookiecutter
diff --git a/ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/update-firewall-source_conda_environment.yml.j2 b/ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/update-firewall-source_conda_environment.yml.j2
new file mode 100644
index 0000000..bd2cb89
--- /dev/null
+++ b/ansible/roles/10-include-50-miniconda/templates/_conda_envs_dir_/update-firewall-source_conda_environment.yml.j2
@@ -0,0 +1,7 @@
+name: update-firewall-source
+channels:
+  - defaults
+dependencies:
+  - python=3
+  - pip
+prefix: {{ miniconda_envs_dir }}/update-firewall-source
diff --git a/ansible/roles/50-service-mailcow/tasks/40-install-mailcow.yml b/ansible/roles/50-service-mailcow/tasks/40-install-mailcow.yml
index f2f6d17..a7d4213 100644
--- a/ansible/roles/50-service-mailcow/tasks/40-install-mailcow.yml
+++ b/ansible/roles/50-service-mailcow/tasks/40-install-mailcow.yml
@@ -26,27 +26,28 @@
 
 - name: 'Install Miniconda'
   tags:
-    'testing'
+    - 'testing'
   ansible.builtin.include_role:
     name: '10-include-50-miniconda'
-    tasks_from: '40-install-miniconda'
+    # tasks_from: '40-install-miniconda'
 
 
 
-- name: 'Install Miniconda'
-  loop_control:
-    loop_var: 'conda'
-  loop:
-    - { task: 'setup', data: 'alter' }
-    - { task: 'setup', data: 'wasn' }
-    - { task: 'setup', data: 'digger' }
-  vars:
-    task: '{{ conda.task }}'
-    data: '{{ conda.data }}'
-  ansible.builtin.include_role:
-    name: '10-include-50-miniconda'
-    tasks_from: '40-install-miniconda'
-
+#- name: 'Set up Miniconda env'
+#  tags:
+#    - 'testing'
+#  loop_control:
+#    loop_var: 'conda'
+#  loop:
+#    - { env_name: 'cookiecutter', python_version: '3', package_spec: 'pip' }
+#    - { env_name: 'update-firewall-source', python_version: '3', package_spec: 'pip' }
+#  vars:
+#    env_name: '{{ conda.env_name }}'
+#    python_version: '{{ conda.python_version }}'
+#    package_spec: '{{ conda.package_spec }}'
+#  ansible.builtin.include_role:
+#    name: '10-include-50-miniconda'
+#
 
 
 - name: 'Populate service facts'