- name: "Set 'nodejs_install: True' and 'nodejs_enabled: True'" set_fact: nodejs_install: True nodejs_enabled: True - name: NODEJS - run 'nodejs' role (attempt to install & enable Node.js) include_role: name: nodejs - name: FAIL (STOP THE INSTALL) IF 'nodejs_installed is undefined' fail: msg: "JupyterHub install cannot proceed, as Node.js is not installed." when: nodejs_installed is undefined - name: "Install package: python3-venv" package: name: python3-venv state: present - name: Make 3 directories to hold JupyterHub config file: state: directory path: "{{ item }}" with_items: - "{{ jupyterhub_venv }}/etc/jupyter" # /opt/iiab/jupyterhub - "{{ jupyterhub_venv }}/etc/jupyterhub" - "{{ jupyterhub_venv }}/etc/systemd" - name: Use npm to install 'configurable-http-proxy' npm: name: configurable-http-proxy global: yes state: latest - name: "pip install 3 packages into virtual environment: {{ jupyterhub_venv }} (~271 MB total, after 2 Ansible calls)" pip: name: - pip - wheel - jupyterhub virtualenv: "{{ jupyterhub_venv }}" # /opt/iiab/jupyterhub virtualenv_site_packages: no virtualenv_command: python3 -m venv "{{ jupyterhub_venv }}" # 2021-07-29: This works on RasPiOS 10, Debian 11, Ubuntu 20.04 and Mint 20 -- however if you absolutely must use the older Debian 10 -- you can work around errors "can't find Rust compiler" and "This package requires Rust >=1.41.0" if you (1) revert this line to 'virtualenv_command: virtualenv' AND (2) uncomment the line just below #virtualenv_python: python3 # 2021-07-29: Was needed when above line was 'virtualenv_command: virtualenv' (generally for Python 2) extra_args: "--no-cache-dir" # 2021-11-30, 2022-07-07: The "--pre" flag had earlier been needed, for beta-like pre-releases of JupyterHub 2.0.0 # 2022-07-07: Attempting to "pip install" all 7 together (3 above + 4 below) # fails on OS's like 64-bit RasPiOS (but interestingly works on Ubuntu 22.04!) # https://github.com/iiab/iiab/issues/3283 - name: Break up jupyterhub/jupyterlab pip installs into 2 parts (3 packages above + 4 packages here) due to mutual dependency deadlock on some OS's pip: name: - jupyterlab - jupyterhub_firstuseauthenticator - jupyterhub-systemdspawner - ipywidgets virtualenv: "{{ jupyterhub_venv }}" virtualenv_site_packages: no virtualenv_command: python3 -m venv "{{ jupyterhub_venv }}" extra_args: "--no-cache-dir" - name: "Install from template: {{ jupyterhub_venv }}/etc/jupyterhub/jupyterhub_config.py" template: src: jupyterhub_config.py.j2 dest: "{{ jupyterhub_venv }}/etc/jupyterhub/jupyterhub_config.py" - name: "Install from template: /etc/systemd/system/jupyterhub.service" template: src: jupyterhub.service.j2 dest: /etc/systemd/system/jupyterhub.service # 2022-07-07: No longer needed, thx to upstream fixes # - name: Install {{ jupyterhub_venv }}/bin/getsite.py from template, to fetch site_packages path, e.g. {{ jupyterhub_venv }}/lib/python{{ python_version }}/site-packages # template: # src: getsite.py.j2 # dest: "{{ jupyterhub_venv }}/bin/getsite.py" # mode: 0755 # # - name: Install patch_FUA.sh from template -- to (1) fix async password-changing page, and (2) force usernames to lowercase -- patching $SITE_PACKAGES/firstuseauthenticator/firstuseauthenticator.py # template: # src: patch_FUA.sh.j2 # dest: "{{ jupyterhub_venv }}/bin/patch_FUA.sh" # mode: 0755 # # - name: "Run the above two, via: {{ jupyterhub_venv }}/bin/patch_FUA.sh" # command: "{{ jupyterhub_venv }}/bin/patch_FUA.sh" - name: Install patch_http-warning.sh from template, to turn off the warning about http insecurity, in {{ jupyterhub_venv }}/share/jupyterhub/templates/login.html template: src: patch-http-warning.sh.j2 dest: "{{ jupyterhub_venv }}/bin/patch_http-warning.sh" mode: 0755 - name: "Now run it: {{ jupyterhub_venv }}/bin/patch_http-warning.sh" command: "{{ jupyterhub_venv }}/bin/patch_http-warning.sh" # RECORD JupyterHub AS INSTALLED - name: "Set 'jupyterhub_installed: True'" set_fact: jupyterhub_installed: True - name: "Add 'jupyterhub_installed: True' to {{ iiab_state_file }}" lineinfile: path: "{{ iiab_state_file }}" # /etc/iiab/iiab_state.yml regexp: '^jupyterhub_installed' line: 'jupyterhub_installed: True'