diff --git a/application-filesender.yml b/application-filesender.yml new file mode 100644 index 0000000..1dc6188 --- /dev/null +++ b/application-filesender.yml @@ -0,0 +1,158 @@ +- name: Install and configure Jupyter + hosts: + - localhost + gather_facts: false + tasks: + - name: Wait for system to become reachable + wait_for_connection: + timeout: 300 + + - name: Gather facts for first time + setup: + + - name: Ubuntu + when: ansible_facts['os_family'] != 'Debian' + fail: + msg: The Jupyter Notebook component is only implemented for distros of the Debian family + + - name: Install required packages + apt: + name: + - apt-transport-https + - python3 + - python3-setuptools + - python3-pip + - jq + - curl + - ca-certificates + - gnupg + state: present + update_cache: yes + + - name: Create keyrings dir + file: + path: /etc/apt/keyrings + state: directory + + - name: Install gpg key + shell: > + curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key + | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg + + - name: deb install + shell: > + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" + | sudo tee /etc/apt/sources.list.d/nodesource.list + + - name: Install NodeJS + apt: + name: nodejs + allow_unauthenticated: yes + update_cache: yes + + - name: Ensure python 3 packages for Jupyter are installed + pip: + name: "{{ packages }}" + virtualenv: /etc/src/venv/src-venv + vars: + packages: + - jupyterhub==5.4.2 + - jupyterlab==4.4.10 + - virtualenv==20.24.2 + - jupyterlab-git==0.51.2 + - jhub-remote-user-authenticator==0.1.0 + - traitlets==5.9.0 + - jupyterhub-singleuser-profiles==0.7.0 + + - name: Ensure python 3 packages for Jupyter are installed + when: "{{ jupyter_simultaneous_edit }}" + pip: + name: jupyter-collaboration + virtualenv: /etc/src/venv/src-venv + + - name: Ensure configurable-http-proxy is installed + npm: + global: yes + name: configurable-http-proxy + version: '4.5.5' + + - name: Ensure Jupyter configuration directory exists + file: + path: /etc/jupyterhub/ + state: directory + + - name: Ensure systemd directory exists + file: + path: /usr/lib/systemd/system + state: directory + + - name: Create nginx location block + copy: + dest: /etc/nginx/app-location-conf.d/jupyterhub.conf + mode: 0644 + content: | + location {{ jupyter_nginx_location|default('/') }} { + error_page 401 = @custom_401; + auth_request /validate; + auth_request_set $username $upstream_http_username; + proxy_set_header REMOTE_USER $username; + proxy_pass http://127.0.0.1:8000; + proxy_redirect http://localhost:8000/ $scheme://$host/; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + client_max_body_size 10G; + } + + - name: Restart nginx + service: + name: nginx + state: restarted + + - name: Ensure jupyter configuration is in place + template: + src: files/jupyterhub_config.py + dest: /etc/jupyterhub/jupyterhub_config.py + + - name: Ensure jupyter systemd config is in place + copy: + dest: /usr/lib/systemd/system/jupyterhub.service + content: | + [Unit] + Description=Jypyter Hub daemon + After=network.target + + [Service] + Type=simple + ExecStart=/etc/src/venv/src-venv/bin/jupyterhub --config=/etc/jupyterhub/jupyterhub_config.py + Restart=on-failure + RestartSec=42s + + [Install] + WantedBy=multi-user.target + + - name: Upgrade nbdime + pip: + name: nbdime + extra_args: --upgrade + virtualenv: /etc/src/venv/src-venv + + - name: Reload jupyterhub service + systemd: + state: restarted + daemon_reload: yes + name: jupyterhub + + - name: Ensure Jupyterhub is started + register: start_jupyterhub + service: + name: jupyterhub + state: restarted + enabled: yes + + - debug: + msg: 'service_url: {"url": "https://{{ ansible_host }}", "tag": "web", "description": "Jupyter"}' + when: (start_jupyterhub is succeeded)