Removed full paths authored by Seyfried's avatar Seyfried
Die Kommandos ```deployclass``` und ```deployvm``` stellen Klassensätze bzw. einzelne VMs zur Verfügung.
Das Anlegen einer Klasse besteht aus zwei Schritten. Zunächst muss auf der Webseite das Klassenprojekt angelegt werden, der SSH-Key hinterlegt und die Firewall-Einstellungen festgelegt werden. Dann können für jeden Schüler GMs in dieses Projekt instanziiert werden. Dies geschieht Skript-basiert anhand der ASV-Daten, die in einer speziellen CSV-Datei auf dem Cloudstack-Management-Server liegen.
# Anlegen einer Klasse in Cloudstack (GUI)
Nach dem Einloggen auf dem [Cloudstack-Server](https://cloudstack.hhs.karlsruhe.de) muss ein Projekt mit dem Klassenname angelegt werden (Projects->New project). Wichtig für den automatisierten Zugriff der Skript ist der korrekte Klassenname (keine Teilklasse, A/B o.ä.).
Nun wechselt man in das neu angelegte Projekt. Dies geht entweder von der Projekt-Seite mit diesem Button:
<img src="uploads/60b30c2a14c7213b412fc4e445af8bba/Bildschirmfoto_2023-09-29_um_09.10.14.png" alt="screenshot" width="300" />
...oder auf der Cloudstack-Seite oben mit einem Klick in das Projekt-Feld (dort steht nach dem Einloggen zunächst "Default View"):
<img src="uploads/814842dfa40a00730daed1e609cf7d9a/Bildschirmfoto_2023-09-29_um_09.12.50.png" alt="screenshot" width="500" />
In der Projekt-Ansicht wechselt man nun in den Menüpunkt "Compute" und selektiert "SSH Keys".
<img src="uploads/2da605c830b980c1fc6d22889771e8fb/Bildschirmfoto_2023-09-29_um_09.14.01.png" alt="screenshot" width="250" />
Mit einem Klick auf "Create a SSH key pair" kann man aus einem (zuvor generierten!) SSH-Key den Public Key hinterlegen und dem Schlüssel einen Namen vergeben.
Der letzte erforderliche Schritt ist, unter Network den Punkt "Security groups" zu öffnen und in der Sicherheitsgruppe "default" eine Ingress rule anzulegen mit den Protokollen "Any" und dem CIDR ```0.0.0.0/0``` (oder auch gerne detailliertere Regeln, dann können die Schülerinnen und Schüler allerdings ggf. nicht auf einen Serverdienst ihrer VM zugreifen, wenn dieser hier nicht hinterlegt ist).
# Skripte
## deployclass
**Aufruf:** ```/home/administrator/bin/deployclass -c <class> [-t <template>] [-f flavor]```
instanziiere VMs mit der Vorlage ```<template>``` (oder Ubuntu, wenn nichts angegeben). ```flavor``` ist der serviceoffering (Small, Medium usw.).
**Voraussetzungen:** Projekt ```<class>``` muss in cloudstack bereits existieren. Dieses Projekt muss auf der Cloudstack-Webseite unter "Instances" einen SSH-Schlüssel hinterlegt haben.
Admin-Benutzer (Account "administrator") werden auf jeder VM mit dem Passwort GebTTMMJJJJ mit dem Geburtstag jedes Schülers angelegt. Die DNS-Einträge werden so aktualisiert, dass ```<schüler-name>.vm.hhs.karlsruhe.de``` auf die IP der VM zeigt.
Beachte: der erste SSH-Schlüssel des Projekts wird verwendet, falls dort mehrere hinterlegt sein sollten. Dies ist nur der Zugang für Lehrkräfte, falls Schüler sich aussperren. VM-seitig können natürlich weitere SSH-Keys mit Putty und ggf. puttygen oder ssh-keygen hinterlegt werden.
## deployvm
**Aufruf:** ```/home/administrator/bin/deployvm <project> <distro> <name> <pwd>```
Das ```<project>``` muss auf cloudstack bereits existieren. Der ```<distro>``` Parameter wird gegen die verfügbaren Templates gematcht. Eine Liste der verfügbaren Templates kann ausgegeben werden mit
```cmk list templates templatefilter=executable | jq '.template[].name'```.
Die Kommandos ```deployclass``` und ```deployvm``` stellen Klassensätze bzw. einzelne VMs zur Verfügung.
Das Anlegen einer Klasse besteht aus zwei Schritten. Zunächst muss auf der Webseite das Klassenprojekt angelegt werden, der SSH-Key hinterlegt und die Firewall-Einstellungen festgelegt werden. Dann können für jeden Schüler GMs in dieses Projekt instanziiert werden. Dies geschieht Skript-basiert anhand der ASV-Daten, die in einer speziellen CSV-Datei auf dem Cloudstack-Management-Server liegen.
# Anlegen einer Klasse in Cloudstack (GUI)
Nach dem Einloggen auf dem [Cloudstack-Server](https://cloudstack.hhs.karlsruhe.de) muss ein Projekt mit dem Klassenname angelegt werden (Projects->New project). Wichtig für den automatisierten Zugriff der Skript ist der korrekte Klassenname (keine Teilklasse, A/B o.ä.).
Nun wechselt man in das neu angelegte Projekt. Dies geht entweder von der Projekt-Seite mit diesem Button:
<img src="uploads/60b30c2a14c7213b412fc4e445af8bba/Bildschirmfoto_2023-09-29_um_09.10.14.png" alt="screenshot" width="300" />
...oder auf der Cloudstack-Seite oben mit einem Klick in das Projekt-Feld (dort steht nach dem Einloggen zunächst "Default View"):
<img src="uploads/814842dfa40a00730daed1e609cf7d9a/Bildschirmfoto_2023-09-29_um_09.12.50.png" alt="screenshot" width="500" />
In der Projekt-Ansicht wechselt man nun in den Menüpunkt "Compute" und selektiert "SSH Keys".
<img src="uploads/2da605c830b980c1fc6d22889771e8fb/Bildschirmfoto_2023-09-29_um_09.14.01.png" alt="screenshot" width="250" />
Mit einem Klick auf "Create a SSH key pair" kann man aus einem (zuvor generierten!) SSH-Key den Public Key hinterlegen und dem Schlüssel einen Namen vergeben.
Der letzte erforderliche Schritt ist, unter Network den Punkt "Security groups" zu öffnen und in der Sicherheitsgruppe "default" eine Ingress rule anzulegen mit den Protokollen "Any" und dem CIDR ```0.0.0.0/0``` (oder auch gerne detailliertere Regeln, dann können die Schülerinnen und Schüler allerdings ggf. nicht auf einen Serverdienst ihrer VM zugreifen, wenn dieser hier nicht hinterlegt ist).
# Skripte
## deployclass
**Aufruf:** ```deployclass -c <class> [-t <template>] [-f flavor]```
instanziiere VMs mit der Vorlage ```<template>``` (oder Ubuntu, wenn nichts angegeben). ```flavor``` ist der serviceoffering (Small, Medium usw.).
**Voraussetzungen:** Projekt ```<class>``` muss in cloudstack bereits existieren. Dieses Projekt muss auf der Cloudstack-Webseite unter "Instances" einen SSH-Schlüssel hinterlegt haben.
Admin-Benutzer (Account "administrator") werden auf jeder VM mit dem Passwort GebTTMMJJJJ mit dem Geburtstag jedes Schülers angelegt. Die DNS-Einträge werden so aktualisiert, dass ```<schüler-name>.vm.hhs.karlsruhe.de``` auf die IP der VM zeigt.
Beachte: der erste SSH-Schlüssel des Projekts wird verwendet, falls dort mehrere hinterlegt sein sollten. Dies ist nur der Zugang für Lehrkräfte, falls Schüler sich aussperren. VM-seitig können natürlich weitere SSH-Keys mit Putty und ggf. puttygen oder ssh-keygen hinterlegt werden.
## deployvm
**Aufruf:** ```deployvm <project> <distro> <name> <pwd>```
Das ```<project>``` muss auf cloudstack bereits existieren. Der ```<distro>``` Parameter wird gegen die verfügbaren Templates gematcht. Eine Liste der verfügbaren Templates kann ausgegeben werden mit
```cmk list templates templatefilter=executable | jq '.template[].name'```.
```<name>``` ist der Name der VM. Dieser wird in den DNS-Einträgen abgespeichert unter ```<name>.vm.hhs.karlsruhe.de```. Der Adminuser kann nur im Skript konfiguriert werden. Derzeit lautet dieser "administrator".
\ No newline at end of file