Files
the-littlest-jupyterhub/.circleci/integration-test.py

107 lines
2.7 KiB
Python
Raw Normal View History

import argparse
import subprocess
import os
def build_systemd_image(image_name, source_path):
"""
Build docker image with systemd at source_path.
Built image is tagged with image_name
"""
subprocess.check_call([
'docker', 'build', '-t', image_name, source_path
])
def run_systemd_image(image_name, container_name):
"""
Run docker image with systemd
Image named image_name should be built with build_systemd_image.
Container named container_name will be started.
"""
subprocess.check_call([
'docker', 'run',
'--privileged',
'-v /sys/fs/cgroup:/sys/fs/cgroup',
'--detach',
'--name', container_name,
image_name
])
def remove_systemd_container(container_name):
"""
Stop & remove docker container if it exists.
"""
try:
subprocess.check_output([
'docker', 'inspect', container_name
])
except subprocess.CalledProcessError:
# No such container exists, nothing to do
return
subprocess.check_call([
'docker', 'rm', '-f', container_name
])
def run_container_command(container_name, cmd):
"""
Run cmd in a running container with a bash shell
"""
subprocess.check_call([
'docker', 'exec',
'-it', container_name,
'/bin/bash', '-c', cmd
])
def copy_to_container(container_name, src_path, dest_path):
"""
Copy files from src_path to dest_path inside container_name
"""
subprocess.check_call([
'docker', 'cp',
src_path, f'{container_name}:{dest_path}'
])
def main():
argparser = argparse.ArgumentParser()
subparsers = argparser.add_subparsers(dest='action')
subparsers.add_parser('build-image')
subparsers.add_parser('start-container')
subparsers.add_parser('stop-container')
subparsers.add_parser('run').add_argument(
'command',
)
copy_parser = subparsers.add_parser('copy')
copy_parser.add_argument('src')
copy_parser.add_argument('dest')
args = argparser.parse_args()
image_name = 'tljh-systemd'
container_name = 'tljh-ci-run'
source_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if args.action == 'build-image':
build_systemd_image(image_name, source_path)
elif args.action == 'start-container':
run_systemd_image(image_name, container_name)
elif args.action == 'stop-container':
remove_systemd_container(container_name)
elif args.action == 'run':
run_container_command(container_name, args.command)
elif args.action == 'copy':
copy_to_container(container_name, args.src, args.dest)
if __name__ == '__main__':
main()