mirror of
https://github.com/jupyterhub/the-littlest-jupyterhub.git
synced 2025-12-18 21:54:05 +08:00
Merge pull request #221 from yuvipanda/ubuntu-version
Provide better error message when running on unsupported distro
This commit is contained in:
@@ -57,7 +57,7 @@ jobs:
|
|||||||
- run:
|
- run:
|
||||||
name: setup python3
|
name: setup python3
|
||||||
command: |
|
command: |
|
||||||
apk add --no-cache python3
|
apk add --no-cache python3 pytest
|
||||||
|
|
||||||
- checkout
|
- checkout
|
||||||
- setup_remote_docker
|
- setup_remote_docker
|
||||||
@@ -79,6 +79,12 @@ jobs:
|
|||||||
--installer-args "--plugin /srv/src/integration-tests/plugins/simplest" \
|
--installer-args "--plugin /srv/src/integration-tests/plugins/simplest" \
|
||||||
plugins test_simplest_plugin.py
|
plugins test_simplest_plugin.py
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Run bootstrap checks
|
||||||
|
command: |
|
||||||
|
py.test integration-tests/test_bootstrap.py
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
documentation:
|
documentation:
|
||||||
docker:
|
docker:
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ This script is run as:
|
|||||||
curl <script-url> | sudo python3 -
|
curl <script-url> | sudo python3 -
|
||||||
|
|
||||||
Constraints:
|
Constraints:
|
||||||
- Be compatible with Python 3.4 (since we support Ubuntu 16.04)
|
- Entire script should be compatible with Python 3.6 (We run on Ubuntu 18.04+)
|
||||||
|
- Script should parse in Python 3.4 (since we exit with useful error message on Ubuntu 14.04+)
|
||||||
- Use stdlib modules only
|
- Use stdlib modules only
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
@@ -17,8 +18,31 @@ import sys
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
def get_os_release_variable(key):
|
||||||
|
"""
|
||||||
|
Return value for key from /etc/os-release
|
||||||
|
|
||||||
|
/etc/os-release is a bash file, so should use bash to parse it.
|
||||||
|
|
||||||
|
Returns empty string if key is not found.
|
||||||
|
"""
|
||||||
|
return subprocess.check_output([
|
||||||
|
'/bin/bash', '-c',
|
||||||
|
"source /etc/os-release && echo ${{{key}}}".format(key=key)
|
||||||
|
]).decode().strip()
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
||||||
|
# Support only Ubuntu 18.04+
|
||||||
|
distro = get_os_release_variable('ID')
|
||||||
|
version = float(get_os_release_variable('VERSION_ID'))
|
||||||
|
if distro != 'ubuntu':
|
||||||
|
print('The Littlest JupyterHub currently supports Ubuntu Linux only')
|
||||||
|
sys.exit(1)
|
||||||
|
elif float(version) < 18.04:
|
||||||
|
print('The Littlest JupyterHub requires Ubuntu 18.04 or higher')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
install_prefix = os.environ.get('TLJH_INSTALL_PREFIX', '/opt/tljh')
|
install_prefix = os.environ.get('TLJH_INSTALL_PREFIX', '/opt/tljh')
|
||||||
hub_prefix = os.path.join(install_prefix, 'hub')
|
hub_prefix = os.path.join(install_prefix, 'hub')
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ A simple `JupyterHub <https://github.com/jupyterhub/jupyterhub>`_ distribution f
|
|||||||
a small (0-100) number of users on a single server. We recommend reading
|
a small (0-100) number of users on a single server. We recommend reading
|
||||||
:ref:`topic/whentouse` to determine if this is the right tool for you.
|
:ref:`topic/whentouse` to determine if this is the right tool for you.
|
||||||
|
|
||||||
|
|
||||||
Development Status
|
Development Status
|
||||||
==================
|
==================
|
||||||
|
|
||||||
@@ -18,7 +19,8 @@ Installation
|
|||||||
============
|
============
|
||||||
|
|
||||||
The Littlest JupyterHub (TLJH) can run on any server that is running at least
|
The Littlest JupyterHub (TLJH) can run on any server that is running at least
|
||||||
Ubuntu 18.04. We have a bunch of tutorials to get you started.
|
**Ubuntu 18.04**. Earlier versions of Ubuntu are not supported.
|
||||||
|
We have a bunch of tutorials to get you started.
|
||||||
|
|
||||||
- Tutorials to create a new server from scratch on a cloud provider & run TLJH
|
- Tutorials to create a new server from scratch on a cloud provider & run TLJH
|
||||||
on it. These are **recommended** if you do not have much experience setting up
|
on it. These are **recommended** if you do not have much experience setting up
|
||||||
|
|||||||
@@ -4,12 +4,14 @@ import os
|
|||||||
|
|
||||||
from pytest import fixture
|
from pytest import fixture
|
||||||
|
|
||||||
from tljh.config import CONFIG_FILE, reload_component
|
|
||||||
|
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def preserve_config(request):
|
def preserve_config(request):
|
||||||
"""Fixture to save and restore config around tests"""
|
"""Fixture to save and restore config around tests"""
|
||||||
|
# Import TLJH only when needed. This lets us run tests in places
|
||||||
|
# where TLJH is not installed - particularly, the 'distro check' test.
|
||||||
|
from tljh.config import CONFIG_FILE, reload_component
|
||||||
if os.path.exists(CONFIG_FILE):
|
if os.path.exists(CONFIG_FILE):
|
||||||
with open(CONFIG_FILE) as f:
|
with open(CONFIG_FILE) as f:
|
||||||
save_config = f.read()
|
save_config = f.read()
|
||||||
|
|||||||
44
integration-tests/test_bootstrap.py
Normal file
44
integration-tests/test_bootstrap.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
"""
|
||||||
|
Test running bootstrap script in different circumstances
|
||||||
|
"""
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
|
def test_ubuntu_too_old():
|
||||||
|
"""
|
||||||
|
Error with a useful message when running in older Ubuntu
|
||||||
|
"""
|
||||||
|
container_name = 'old-distro-test'
|
||||||
|
|
||||||
|
# stop container if it is already running
|
||||||
|
subprocess.run([
|
||||||
|
'docker', 'rm', '-f', container_name
|
||||||
|
])
|
||||||
|
|
||||||
|
# Start a detached Ubuntu 16.04 container
|
||||||
|
subprocess.check_call([
|
||||||
|
'docker', 'run', '--detach', '--name', container_name, 'ubuntu:16.04',
|
||||||
|
'/bin/bash', '-c', 'sleep 1000s'
|
||||||
|
])
|
||||||
|
# Install python3 inside the ubuntu container
|
||||||
|
# There is no trusted Ubuntu+Python3 container we can use
|
||||||
|
subprocess.check_output([
|
||||||
|
'docker', 'exec', container_name, 'apt-get', 'update'
|
||||||
|
])
|
||||||
|
subprocess.check_output([
|
||||||
|
'docker', 'exec', container_name, 'apt-get', 'install', '--yes', 'python3'
|
||||||
|
])
|
||||||
|
# Copy only the bootstrap script to container, so this is faster
|
||||||
|
subprocess.check_call([
|
||||||
|
'docker',
|
||||||
|
'cp',
|
||||||
|
'bootstrap/', f'{container_name}:/srv'
|
||||||
|
])
|
||||||
|
|
||||||
|
# Run bootstrap script, validate that it fails appropriately
|
||||||
|
output = subprocess.run([
|
||||||
|
'docker', 'exec', '-i', container_name,
|
||||||
|
'python3', '/srv/bootstrap/bootstrap.py'
|
||||||
|
], check=False, stdout=subprocess.PIPE, encoding='utf-8')
|
||||||
|
assert output.stdout == 'The Littlest JupyterHub requires Ubuntu 18.04 or higher\n'
|
||||||
|
assert output.returncode == 1
|
||||||
Reference in New Issue
Block a user