diff --git a/.gitignore b/.gitignore index 9893533..11a0b9e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.retry ansible/hosts.yml ansible/group_vars/all/* +ansible/roles/10-include-50-miniconda/defaults/* ansible/roles/20-common-20-ssh/defaults/* ansible/roles/20-common-20-ssh/files/root/.ssh/* !*.example diff --git a/ansible/roles/10-include-50-miniconda/defaults/main.yml.example b/ansible/roles/10-include-50-miniconda/defaults/main.yml.example new file mode 100644 index 0000000..58eb7e9 --- /dev/null +++ b/ansible/roles/10-include-50-miniconda/defaults/main.yml.example @@ -0,0 +1,7 @@ +miniconda_install_dir: '/opt/miniconda3' +miniconda_bin_dir: '{{ miniconda_install_dir }}/bin' +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 }}' diff --git a/ansible/roles/10-include-50-miniconda/files/_current_user_home_/.condarc b/ansible/roles/10-include-50-miniconda/files/_current_user_home_/.condarc new file mode 100644 index 0000000..14d8073 --- /dev/null +++ b/ansible/roles/10-include-50-miniconda/files/_current_user_home_/.condarc @@ -0,0 +1 @@ +auto_activate_base: false diff --git a/ansible/roles/10-include-50-miniconda/tasks/40-install-miniconda.yml b/ansible/roles/10-include-50-miniconda/tasks/40-install-miniconda.yml new file mode 100644 index 0000000..ab4d114 --- /dev/null +++ b/ansible/roles/10-include-50-miniconda/tasks/40-install-miniconda.yml @@ -0,0 +1,87 @@ +- name: 'Create Miniconda base dir' + loop_control: + loop_var: 'conda_dir' + loop: + - { path: '{{ miniconda_install_dir }}', state: 'directory' } + - { path: '{{ miniconda_installer_dl_dir }}', state: 'directory' } + ansible.builtin.file: + path: '{{ conda_dir.path }}' + state: '{{ conda_dir.state }}' + + + +- name: 'Download latest Miniconda installer' + ansible.builtin.get_url: + url: '{{ miniconda_dl_uri }}' + dest: '{{ miniconda_dl_local_abs }}' + + + +- name: 'Set execute bit on Miniconda installer' + ansible.builtin.file: + path: '{{ miniconda_dl_local_abs }}' + mode: 'a+x' + + + +- name: 'Get Miniconda installer help output' + register: 'rv_miniconda_installer_help' + changed_when: 'rv_miniconda_installer_help.rc != 2' + failed_when: 'rv_miniconda_installer_help.rc != 2' + ansible.builtin.shell: '{{ miniconda_dl_local_abs }} -h' + + + +- name: 'Get Miniconda installer version from help output' + when: 'rv_miniconda_installer_help.rc == 2' + set_fact: + miniconda_installer_version: '{{ rv_miniconda_installer_help.stdout | regex_search(''Installs Miniconda3 (py.*?_)(.*?)(\n)'', ''\2'') }}' + + + +- name: 'Get conda version output' + register: 'rv_conda_version_output' + changed_when: 'rv_conda_version_output.rc != 0' + failed_when: 'false' + ansible.builtin.shell: 'conda --version 2> ''/dev/null''' + + + +- name: 'Get conda version from version output' + register: 'rv_conda_version' + changed_when: '(not conda_version) or (rv_conda_version_output.rc != 0)' + failed_when: 'false' + set_fact: + conda_version: '{{ rv_conda_version_output.stdout | regex_search(''conda ([^\r\n\f]+)'', ''\1'') }}' + + + +- name: 'If Miniconda old or missing: install it' + when: '(miniconda_installer_version | first is version(''4.11.9'', ''>'')) or (not conda_version)' + register: 'rv_miniconda_install' + ansible.builtin.shell: '{{ miniconda_dl_local_abs }} -b -p ''{{ miniconda_install_dir }}'' -u' + + + +- name: 'If Miniconda was installed: Initialize' + when: 'rv_miniconda_install.changed' + register: 'rv_conda_init' + ansible.builtin.shell: '{{ miniconda_conda_binary }} init' + + + +- name: 'Set ~/.condarc file' + tags: + - 'testing' + ansible.builtin.copy: + src: '_current_user_home_/.condarc' + dest: '{{ ansible_env.HOME }}/.condarc' + mode: '0644' + + + +- name: 'Debug vars' + tags: + - 'testing' + debug: + msg: '{{ ansible_env.HOME }}' diff --git a/ansible/roles/10-include-50-miniconda/tasks/main.yml b/ansible/roles/10-include-50-miniconda/tasks/main.yml new file mode 100644 index 0000000..69f0764 --- /dev/null +++ b/ansible/roles/10-include-50-miniconda/tasks/main.yml @@ -0,0 +1 @@ +- import_tasks: '50-setup-miniconda-env.yml'