This repository is used to create ready-to-launch images installed with a research environment of choice.
Currently available research environments: VSCode, Guacamole, RStudio, TheiaIDE
graph TD
B[Openstack Cloud<br> Bielefeld] --> |1. provides latest<br> images| S3[(S-3 Storage <br> Openstack Bielefeld)]
S3 --> |2. uploads latest<br> base images| B
S3 --> |2. uploads latest<br> base images| G[Openstack Cloud <br> Giessen]
Openstack Cloud Bielefeld regularly updates images of different Linux distributions (e.g. Ubuntu). These images will be configured as base images for SimpleVM and uploaded to both Openstack Cloud locations.
Packer is used to create pre-built resenv images.
graph TD
P[Packer] -- 1. connects to<br> cloud --> OS[Openstack Cloud]
OS -->|2. creates with<br> Packer-generated<br> keypair| I[Base image<br> instance]
P -- 3. installs<br> resenv script<br> remotely --> I
I -- 4. creates<br> snapshot --> OS
- Packer connects to Openstack Cloud and launches an instance from a base image
- An installing script is executed remotely to equip the created instance with necessary dependencies
- A snapshot of the prepared instance is created
- The created snapshot with research environment installed is stored as a new image
A GitHub Action is run every working day to manage the automatic update of images. The Action consists of three workflows which can be executed seperately.
graph LR
1(Update base<br> images) --> 2(Update resenv<br> images) --> 3(Remove images)
- The images in S3 storage are checked. When there is a newer version of a base image which is not present on Openstack Giessen, it will be downloaded via a S3 tool and uploaded to Openstack Bielefeld and Openstack Giessen
- After the base image workflow is finished, resenv images will be checkced for both locations. If the newest base image has a later upload date than the newest resenv image, a new version of the resenv image will be built with the newest base.
- After the resenv image workflow is finished, a worklflow deleting duplicating base and resenv images will be executed. One base image and two images from each resenv will be kept in the cloud locations.
packer_resenvs.yml is used to combine ansible script and variable file for any research environment. The generated result will be executed by Packer to install the declared dependencies.
graph TD
S[RESEARCH_ENV.yml] --imported by-->
P[packer_resenvs.yml]
V[RESEARCH_ENV_vars_file.yml] --imported by--> P
P --executed on--> O[Base image<br> instance]
Alongside the YAML files containing installation steps and variables, the name for the new resenv should be denoted in cleanup_resenvs_images.yml and a resenv-specific tag should be added to tags.json.
In order to run the workflows with internal GitHub runners, they should have the following dependencies installed:
- Packer (v. 1.8.2 or higher)
- Minio CLI
Also setup valid credentials for Minio client with./mc alias set osbielefeld https://openstack.cebitec.uni-bielefeld.de:8080 ACCESS_KEY SECRET_KEY
. You can create a keypair withopenstack credential create
- openstacksdk
pip install openstacksdk
- OpenStack RC Files for both Bielefeld and Giessen under home directory, named after
packer-rc-{location}.sh
respectively