Sign inSign up

zenika/ztraining2strigo

By zenika

•Updated about 2 months ago

Create Strigo class for Zenika training.

Image
0

10K+

zenika/ztraining2strigo repository overview

⁠Ztraining2strigo

Create Strigo class for Zenika training.

⁠Install

⁠Windows
  1. Download the ztraining2strigo-x.y.z.exe from latest release.
  2. Rename it to ztraining2strigo.exe
  3. Add it to your PATH

An alternative is to follow the procedure for other OS⁠.

⁠Other OS
  1. Make sure to have Python⁠ >= 3.11 installed.

  2. Download the ztraining2strigo-x.y.z-py3-none-any.whl from latest release.

  3. Install the wheel package:

    pip install ztraining2strigo-x.y.z-py3-none-any.whl
    
⁠Docker
  1. Get the image zenika/ztraining2strigo:x.y.z:

    docker image pull zenika/ztraining2strigo:x.y.z
    
  2. Define an alias ztraining2strigo:

    alias ztraining2strigo='docker container run --rm --volume $(pwd):/training --user $(id -u):$(id -g) --env STRIGO_ORG_ID --env STRIGO_API_KEY --env Z2S_TRACE_HTTP --interactive --tty zenika/ztraining2strigo:x.y.z'
    

⁠Strigo authentication

  1. Go to https://app.strigo.io/settings#account⁠
  2. Scroll to section "Authentication Credentials"
  3. Define the environment variables:
  • STRIGO_ORG_ID with the value of "Organization ID"
  • STRIGO_API_KEY with the value of "API Key"

If the environment variables are not set, the Strigo credentials will be asked when launching the tool.

⁠Usage

  1. Go to the root of your training
  2. Launch any command of the ztraining2strigo binary
$ ztraining2strigo --help
usage: ztraining2strigo [-h] [--config CONFIG] COMMAND ...

positional arguments:
  COMMAND          sub-command help
    create         Create config for new Strigo class. The class parameters are asked interactively.
    retrieve       Retrieve config from existing Strigo class
    update         Update Strigo class from config

optional arguments:
  -h, --help       show this help message and exit
  --config CONFIG
⁠Retrieve configuration from existing Strigo class
$ ztraining2strigo retrieve --help
usage: ztraining2strigo retrieve [-h] CLASS_ID

positional arguments:
  CLASS_ID    Existing Strigo class ID

optional arguments:
  -h, --help  show this help message and exit

This command can be used to create the configuration⁠ from existing Strigo class.

  • The configuration will be stored inside a strigo.json file at the root of your training (or one referenced by --config)
  • The presentation filename will be searched recursively in the training directory and used in config if found, otherwise just prefixed with PDF/
  • The presentation
  • The init scripts will be downloaded into Installation/strigo/init_<machine_name>.sh
  • The post launch scripts will be downloaded into Installation/strigo/post_launch_<machine_name>.sh

After launching this command, you can:

  • Edit the generated configuration
  • Reorganize the scripts to mutualize if possible/necessary
⁠Create configuration from scratch
$ ztraining2strigo create --help
usage: ztraining2strigo create [-h]

optional arguments:
  -h, --help  show this help message and exit

This command can be used to create a configuration⁠ and the corresponding Strigo class.

  • All necessary elements of a Strigo class will be asked interactively
  • The configuration will be stored inside a strigo.json file at the root of your training (or one referenced by --config)
  • The class will be created on Strigo
⁠Update Strigo class from configuration
$ ztraining2strigo update --help
usage: ztraining2strigo update [-h] [--dry-run] [--diff] [--save-scripts DIR]

optional arguments:
  -h, --help           show this help message and exit
  --dry-run, -n        Do not perform update
  --diff, -d           Display diff of changes to apply in machines scripts
  --save-scripts DIR   Save the init and post launch scripts that will be uploaded into DIR, one file per machine

This command can be used to update a Strigo class from local configuration⁠.

  • Update is idempotent: if Strigo class is already as described by configuration, nothing will be done
  • It is possible to check if an updated should be performed by using the --dry-run option
  • It is possible to inspect the assembled scripts before they are uploaded by using the --save-scripts option, which writes one init_<machine_name>.<sh|ps1> and/or post_launch_<machine_name>.ps1 file per machine into the given directory

⁠Configuration

Configuration is stored in JSON format inside a strigo.json file at the root of your training (or one referenced by --config).

There is a JSON Schema⁠ available at https://raw.githubusercontent.com/Zenika-Training/ztraining2strigo/main/strigo.schema.json⁠.

  • id: the Strigo ID of the class, shouldn't be changed
  • name: the name of the class
  • description: the list of lines of description of the class (can be empty list [])
  • labels: the list of labels the class (can be empty list [])
  • presentations: the list of presentation materials, can only contains 1 element for now (Strigo model)
    • file: the path to presentation file (typically pdf/Zenika-Formation-xxx-Slides.pdf or pdf/Zenika-training-material-Slides.pdf)
    • notes_source: the path to the listing of slides for notes extraction (should be Slides/slides.json)
  • resources: the list of lab machines
    • name: the display name of the machine
    • instance_type: the size of the machine (one of t3.medium, t3.large or t3.xlarge, see AWS EC2 T3 Instances⁠)
    • image: the machine image, can be the normalized name of the preconfigured Strigo images (lower case, space replaced by simple hyphen -), or a custom image:
      • image_id: the AMI ID
      • image_user: the default user of the AMI
      • ec2_region: the region of the AMI
    • init_scripts: the list of init scripts to use for the machine, content of all the scripts will be concatenated into 1 init script in Strigo. Can be either:
      • a reference to a local script:
        • path: the path of the local script inside the training repository
      • a reference to a script from strigo-init-script-libs⁠:
        • script: the filename of the script
        • version: the git version of the script to get (defaults to main)
        • env: the mapping of environment variables for the script
    • post_launch_scripts: the list of post launch batch scripts (Windows only) to use for the machine, content of all the scripts will be concatenated into 1 init script in Strigo. Same format as init_scripts
    • view_interface: the default interface of the machine (one of terminal or desktop, defaults to none)
    • webview_links: the list of web interfaces of the machine:
      • name: the name of the interface
      • url: the URL of the interface (something of the form http://instance.autolab.strigo.io:<port>)

Example:

{
  "$schema": "https://raw.githubusercontent.com/Zenika-Training/ztraining2strigo/main/strigo.schema.json",
  "name": "My training",
  "id": "43t8s3ZNSGwy89Ffo",
  "description": [
    "The description of the training",
    "",
    "Can be on multiple lines in a list"
  ],
  "presentations": [
    {
      "file": "pdf/Zenika-training-material-Slides.pdf",
      "notes_source": "Slides/slides.json"
    }
  ],
  "resources": [
    {
      "name": "machine1",
      "instance_type": "t2.medium",
      "image": "ubuntu-16.04.2",
      "init_scripts": [
        {
          "path": "Installation/strigo/init_all.sh"
        },
        {
          "path": "Installation/strigo/init_machine1.sh"
        },
        {
          "script": "code-server.sh",
          "env": {
            "code_server_version": "3.11.1",
            "code_server_extensions": "ms-azuretools.vscode-docker coenraads.bracket-pair-colorizer-2",
            "code_server_settings": "{\"workbench.colorTheme\": \"Default Dark+\"}"
          }
        }
      ],
      "post_launch_scripts": [],
      "webview_links": [
        {
          "name": "code-server",
          "url": "http://instance.autolab.strigo.io:9999"
        }
      ]
    },
    {
      "name": "machine2",
      "instance_type": "t2.xlarge",
      "image": {
        "image_id": "ami-0b209583a4a1146dd",
        "image_user": "ubuntu",
        "ec2_region": "eu-west-3"
      },
      "init_scripts": [
        {
          "path": "Installation/strigo/init_all.sh"
        }
      ],
      "post_launch_scripts": [],
      "webview_links": []
    }
  ]
}

⁠Build package

Building requirement is a Python environment >= 3.11.

⁠Python wheel
./build.sh
⁠Windows binary
.\build_windows.ps1
⁠Docker image
docker image build --tag zenika/ztraining2strigo .

⁠Debugging

You can activate HTTP traces by setting the environment variable Z2S_TRACE_HTTP to 1 or True.

⁠Continuous Integration (CI/CD) & Docker Hub

This repository is integrated with Docker Hub to automate the building and publishing of our Docker images.

⁠Automated Builds

A GitHub Webhook is configured on this repository to notify Docker Hub whenever code changes occur :

  • Trigger Events: : push and pull-request.
  • Target : Webhook VCS Docker Hub (https://hub.docker.com/api/build/v1/vcs/...).
  • Action : Docker Hub fetches the commit code, builds the image using the Dockerfile at the root directory, and publishes the new version to our registry

Attention : Warning: Do not delete this Webhook in the repository settings (Settings > Webhooks). Removing it will break the automatic update process for images on Docker Hub.

Tag summary

Content type

Image

Digest

sha256:c2d6ed266…

Size

17 MB

Last updated

about 2 months ago

docker pull zenika/ztraining2strigo