1010```
1111_dev/
1212├── _devcontainers/ ← Zentralisierte Devcontainer-Templates
13- │ ├── headless/ ← Für Beispiele ohne VNC (VNC=false oder nicht gesetzt)
13+ │ ├── headless/ ← Für Beispiele mit RMKS_DEVCONTAINER=headless
1414│ │ ├── copier.yml
1515│ │ └── template/
1616│ │ └── .devcontainer/
1717│ │ ├── devcontainer.json.jinja
1818│ │ └── setup.sh
19- │ └── desktop/ ← Für Beispiele mit VNC (VNC=true)
19+ │ └── desktop/ ← Für Beispiele mit RMKS_DEVCONTAINER=desktop
2020│ ├── copier.yml
2121│ └── template/
2222│ └── .devcontainer/
@@ -33,28 +33,26 @@ _dev/
3333│ └── versions.partial.md.jinja ← Versions-Tabelle für README
3434├── _examples/ ← Copier-Quellen für examples/ (vollständige Beispiele)
3535│ ├── cryptolibrary-simple/
36- │ │ ├── .rcc ← SPACE=rf-libcrypto
3736│ │ ├── copier.yml
3837│ │ ├── README.partial.md ← Beispiel-spezifischer README-Teil
3938│ │ └── template/
39+ │ │ └── .env ← RMKS_ENVIRONMENT, RMKS_DEVCONTAINER, VNC_RESOLUTION optional
4040│ ├── web-cryptolibrary/
41- │ │ ├── .rcc ← SPACE=rf-libbrowser-libcrypto
4241│ │ ├── copier.yml
4342│ │ ├── README.partial.md
4443│ │ └── template/
45- │ │ └── .env ← VNC=true , VNC_RESOLUTION optional
44+ │ │ └── .env ← RMKS_ENVIRONMENT, RMKS_DEVCONTAINER , VNC_RESOLUTION optional
4645│ └── web-webshop/
4746│ └── …
4847├── _shared/
4948│ └── README.md.jinja ← Gemeinsame README-Sektionen
5049├── _templates/ ← Copier-Quellen für templates/ (minimale Skeletons)
5150├── _labs/ ← Copier-Quellen für labs/ (Checkmk-Praxislabs für Studenten)
5251│ └── robotmk-lab-slac26/
53- │ ├── .devcontainer-type ← Zeigt auf den cmk25-Devcontainer-Typ
54- │ ├── .rcc ← SPACE=rf-full
5552│ ├── copier.yml
5653│ ├── README.partial.md ← Lab-spezifischer README-Teil
5754│ └── template/
55+ │ └── .env ← RMKS_ENVIRONMENT, RMKS_DEVCONTAINER, VNC_RESOLUTION optional
5856├── config/
5957│ └── versions.env ← Versionspins (einzige Pflegestelle!)
6058├── .rcc/ ← RCC-Binaries (NICHT committed)
@@ -124,32 +122,31 @@ Jeder Beispieltyp hat ein eigenes Template (kein Mono-Template mit `{% if %}`-Ch
124122
125123```
126124_dev/_examples/cryptolibrary/
127- ├── .rcc ← Zeigt auf das RCC-Environment: SPACE=rf-libbrowser-libcrypto
128125├── copier.yml ← Variablen-Definitionen (werden von versions.env befüllt)
129126└── template/ ← Inhalt, der nach examples/cryptolibrary/ kopiert wird
127+ ├── .env ← RMKS_ENVIRONMENT + RMKS_DEVCONTAINER + projekt-spezifische Vars
130128 ├── robot.yaml ← Statische Datei (wird unverändert kopiert)
131129 ├── suite.robot ← Statische Datei
132130 ├── robot.toml ← Statische Datei
133131 ├── keys/ ← Statische Dateien (CryptoLibrary-Schlüssel)
134- ├── .rcc ← Wird ins generierte Beispiel kopiert (Space-Name)
135132 └── .copier-answers.yml.jinja ← Tracking-Datei (wird generiert)
136133 # conda.yaml fehlt hier absichtlich — wird vom Environment injiziert (s. u.)
137134```
138135
139136> ** ` _subdirectory: template ` ** in ` copier.yml ` ist entscheidend: Copier kopiert nur den
140137> Inhalt von ` template/ ` , nicht ` copier.yml ` selbst.
141138
142- ### Shared Environments — ` _environments/ ` und ` .rcc `
139+ ### Shared Environments — ` _environments/ ` und ` RMKS_ENVIRONMENT `
143140
144141Mehrere Beispiele teilen sich oft dieselbe ` conda.yaml ` (z. B. alle, die Browser + Crypto
145142benötigen). Statt die ` conda.yaml.jinja ` in jedes Template zu duplizieren, gibt es eine
146143zentrale Quelle in ` _environments/ ` .
147144
148145** Ablauf beim Generieren:**
149146
150- 1 . ` generate-all.sh ` liest die ` .rcc ` -Datei im Quell-Verzeichnis :
147+ 1 . ` generate-all.sh ` liest ` RMKS_ENVIRONMENT ` aus ` template/.env ` :
151148 ``` ini
152- SPACE =rf-libbrowser-libcrypto
149+ RMKS_ENVIRONMENT =rf-libbrowser-libcrypto
153150 ```
1541512 . Es ruft Copier für ` _environments/rf-libbrowser-libcrypto/ ` auf und ** injiziert**
155152 ` conda.yaml ` in ` _dev/_examples/<name>/template/ ` (temporär, für den nächsten Schritt).
@@ -169,8 +166,9 @@ Der **Space-Name** (`rf-libbrowser-libcrypto`) hat zwei Bedeutungen:
169166- Verzeichnisname in ` _environments/ ` → Copier findet das richtige Template
170167- RCC Holotree Space-Name → Beispiele mit demselben Space teilen sich den Environment-Cache
171168
172- Das generierte ` examples/<name>/.rcc ` (mit ` SPACE=rf-libbrowser-libcrypto ` ) wird auch von
173- ` task test ` und dem GitHub-Actions-Workflow gelesen, um den richtigen Space zu übergeben.
169+ ` RMKS_ENVIRONMENT ` in ` template/.env ` wird von ` generate-all.sh ` gelesen, um den richtigen
170+ Space zu injizieren, und von ` task test ` / ` task shell ` , um den richtigen Space an RCC zu
171+ übergeben.
174172
175173### ` .copier-answers.yml ` — Tracking-Datei
176174
@@ -284,7 +282,8 @@ Falls das neue Beispiel Browser + Crypto benötigt (wie alle bisherigen):
284282
2852831 . ** Quellen anlegen** :
286284 - ` _dev/_examples/<name>/copier.yml ` (minimalst: nur ` _subdirectory: template ` )
287- - ` _dev/_examples/<name>/.rcc ` mit ` SPACE=rf-libbrowser-libcrypto `
285+ - ` _dev/_examples/<name>/template/.env ` mit ` RMKS_ENVIRONMENT=rf-libbrowser-libcrypto `
286+ und ` RMKS_DEVCONTAINER=desktop ` (oder ` headless ` )
288287 - ` _dev/_examples/<name>/template/ ` mit ` robot.yaml ` , ` suite.robot ` , ` robot.toml ` , ...
289288 - Analog für ` _dev/_templates/<name>/ ` (Skeleton-Variante)
2902892 . ** Generieren** : ` task generate EXAMPLE=<name> `
@@ -302,9 +301,9 @@ Falls das neue Beispiel andere Dependencies braucht (z. B. nur SeleniumLibrary):
302301 └── template/
303302 └── conda.yaml.jinja ← conda-Abhängigkeiten mit Jinja2-Variablen
304303 ```
305- 2 . ** ` .rcc ` im Quell-Verzeichnis ** auf den neuen Space zeigen lassen :
304+ 2 . ** ` RMKS_ENVIRONMENT ` ** in ` template/.env ` auf den neuen Space-Namen setzen :
306305 ``` ini
307- SPACE =<space-name>
306+ RMKS_ENVIRONMENT =<space-name>
308307 ```
3093083 . Falls neue Versionen nötig: in ` versions.env ` ergänzen und in ` generate-all.sh/ps1 ` als
310309 ` --data ` -Parameter aufnehmen.
@@ -323,7 +322,7 @@ GitHub-Repos veröffentlicht, die direkt als Codespace geöffnet werden können.
323322| ---| ---| ---| ---|
324323| Zweck | Vollständige Beispiele | Minimale Skeletons | Praxislabs (mehrere Suites) |
325324| Devcontainer | ` desktop ` oder ` headless ` | keiner | ` cmk25 ` (Checkmk-Image) |
326- | Devcontainer-Steuerung | VNC in ` .env ` | — | ` .devcontainer-type ` -Datei |
325+ | Devcontainer-Steuerung | ` RMKS_DEVCONTAINER ` in ` template/ .env` | — | ` RMKS_DEVCONTAINER ` in ` template/.env ` |
327326| CI (GitHub Actions) | ✓ | — | — |
328327| Codespace-Zielrepo | ` robotmk/example-<name> ` | — | eigenes Repo (manuell pushen) |
329328| Suiten-Status | vollständig & lauffähig | Skeleton | können unvollständig sein |
@@ -333,34 +332,27 @@ GitHub-Repos veröffentlicht, die direkt als Codespace geöffnet werden können.
3333321 . ** Quellen anlegen** :
334333 ```
335334 _dev/_labs/<name>/
336- ├── .devcontainer-type ← Inhalt: cmk25
337- ├── .rcc ← SPACE=<env-name>
338335 ├── copier.yml ← minimal: nur _subdirectory: template
339336 ├── README.partial.md ← Lab-spezifischer README-Teil (s. u.)
340337 └── template/
338+ ├── .env ← RMKS_ENVIRONMENT=<env-name>, RMKS_DEVCONTAINER=cmk25
341339 ├── robot.yaml
342- ├── .env
343340 └── rf-suites/ ← oder beliebige Struktur
344341 ├── robot.toml
345342 └── suite.robot
346343 ```
347344
348- 2 . ** ` .devcontainer-type ` anlegen** :
349- ``` bash
350- echo " cmk25" > _dev/_labs/< name> /.devcontainer-type
351- ```
352-
353- 3 . ** ` README.partial.md ` anlegen** — enthält ` {% include 'how-to-run-lab.partial.md' %} `
345+ 2 . ** ` README.partial.md ` anlegen** — enthält ` {% include 'how-to-run-lab.partial.md' %} `
354346 statt ` how-to-run.partial.md ` . Als Vorlage kann ` _dev/_labs/robotmk-lab-slac26/README.partial.md `
355347 dienen.
356348
357- 4 . ** Generieren** :
349+ 3 . ** Generieren** :
358350 ``` bash
359351 task generate EXAMPLE=< name>
360352 ```
361353 Erzeugt ` labs/<name>/ ` mit fertigem ` .devcontainer/ ` .
362354
363- 5 . ** Veröffentlichen** (manuell):
355+ 4 . ** Veröffentlichen** (manuell):
364356 ``` bash
365357 cd labs/< name>
366358 git init && git add . && git commit -m " initial"
@@ -539,20 +531,17 @@ _dev/_devcontainers/
539531 └── install_cmk_agent.sh
540532```
541533
542- ** Steuerung über ` .env ` oder ` .devcontainer-type ` :**
534+ ** Steuerung über ` RMKS_DEVCONTAINER ` in ` template/.env ` :**
543535
544- ` generate-all.sh ` wählt den Devcontainer-Typ nach folgender Priorität:
536+ ` generate-all.sh ` liest ` RMKS_DEVCONTAINER ` direkt aus ` template/.env ` und injiziert
537+ den passenden Devcontainer-Typ. Kein separates ` .devcontainer-type ` -File nötig.
545538
546- 1 . ** ` .devcontainer-type ` -Datei** im Quell-Verzeichnis (für Labs): Enthält den gewünschten
547- Typ explizit (z. B. ` cmk25 ` ). Überschreibt die VNC-Erkennung vollständig.
548- 2 . ** ` VNC ` -Variable** in ` template/.env ` (für Beispiele): Wie bisher.
549-
550- | Mechanismus | Wert | Injizierter Typ | Beschreibung |
551- | ---| ---| ---| ---|
552- | ` .devcontainer-type ` | ` cmk25 ` | ` cmk25 ` | Checkmk Pro 2.5 + desktop-lite + RCC |
553- | ` .env ` | ` VNC=true ` | ` desktop ` | Python-Image + noVNC-Desktop |
554- | ` .env ` | ` VNC=false ` oder fehlend | ` headless ` | Python-Image, kein VNC |
555- | keine ` .env ` , kein ` .devcontainer-type ` | — | kein Devcontainer | Injektion übersprungen |
539+ | ` RMKS_DEVCONTAINER ` | Injizierter Typ | Beschreibung |
540+ | ---| ---| ---|
541+ | ` desktop ` | ` desktop ` | Python-Image + noVNC-Desktop |
542+ | ` headless ` | ` headless ` | Python-Image, kein VNC |
543+ | ` cmk25 ` | ` cmk25 ` | Checkmk Pro 2.5 + desktop-lite + RCC |
544+ | nicht gesetzt / keine ` .env ` | — | Injektion übersprungen |
556545
557546### VNC-Auflösung (` VNC_RESOLUTION ` )
558547
@@ -591,24 +580,25 @@ Alle Typen führen `setup.sh` per `postCreateCommand` aus.
591580
592581### Devcontainer für ein neues Beispiel (examples/templates)
593582
594- Kein manuelles Anlegen nötig — einfach in ` template/.env ` eintragen:
583+ In ` template/.env ` eintragen:
595584
596585``` dotenv
597- VNC=true # → desktop-Devcontainer wird injiziert
598- # oder weglassen # → headless-Devcontainer wird injiziert
586+ RMKS_DEVCONTAINER=desktop # → desktop-Devcontainer wird injiziert
587+ # oder:
588+ RMKS_DEVCONTAINER=headless # → headless-Devcontainer wird injiziert
599589```
600590
601591` task generate EXAMPLE=<name> ` erledigt den Rest.
602592
603593### Devcontainer für ein neues Lab
604594
605- Eine ` .devcontainer-type ` -Datei im Lab-Verzeichnis anlegen :
595+ In ` template/.env ` eintragen :
606596
607- ``` bash
608- echo " cmk25" > _dev/_labs/ < name > /.devcontainer-type
597+ ``` dotenv
598+ RMKS_DEVCONTAINER= cmk25
609599```
610600
611- Damit wird der ` cmk25 ` -Typ unabhängig von ` .env ` injiziert. Kein VNC-Eintrag in ` .env ` nötig .
601+ Damit wird der ` cmk25 ` -Typ injiziert.
612602
613603### Codespaces-Badge in Sub-Repos
614604
0 commit comments