Daten importieren
Excel-Import mit allen Tabellenblättern, Spalten und der Referenz-Syntax, Markdown- und YAML-Import für Regulierungen sowie alle Artisan-Befehle von swark.
Überblick
| Weg | Befehl | Für |
|---|---|---|
| Excel-Import | php artisan swark:import:datamodel <pfad> |
Fast alle strukturierten Daten (Strategie, Compliance, Auditing, Infrastruktur) |
| Markdown/YAML-Import | derselbe Befehl, Unterordner regulations/ |
Regulierungen mit Kapiteln und Controls |
| Content-Import | php artisan swark:import:content <pfad> |
Texte in die Tabelle content (im Frontend kaum wirksam, siehe Kapitel Content) |
Alle Befehle laufen im Container im Verzeichnis /var/www/html (bei Instanzen von Nerd-IT führt das Betriebsteam den Import aus).
Der Befehl swark:import:datamodel
php artisan swark:import:datamodel <pfad> [--governance] [--compliance] [--it] [--auditing] [--markdown-only]
| Argument / Option | Wirkung |
|---|---|
<pfad> |
Ordner mit einer Datei import.xlsx (und optional einem Unterordner regulations/) oder direkt der Pfad zu einer .xlsx-Datei; dann gilt deren Ordner als Wurzel |
| keine Kategorie-Option | Alle Kategorien werden importiert |
--governance, --compliance, --it, --auditing |
Nur diese Kategorien (plus immer die Grunddaten) |
--markdown-only |
Excel überspringen, nur den Ordner regulations/ einlesen |
Ablauf:
- Excel (falls vorhanden und nicht
--markdown-only): Blätter werden über ihren Namen gefunden und in fester Reihenfolge eingelesen. Fehlt ein Blatt einer aktivierten Kategorie, bricht der Import mit «Specified sheet 'X' does not exist» ab. Zusätzliche Blätter werden ignoriert. Der Excel-Import läuft in einer Datenbanktransaktion; bei einem Fehler wird er vollständig zurückgerollt. - Markdown/YAML: Unterordner
regulations/(nur wenn Kategorie Compliance aktiv ist). - Nachlauf: Bei aktiver Kategorie Compliance werden die Geltungsbereiche aller Regeln neu ermittelt.
Fehlt import.xlsx, erscheint eine Warnung und der Import fährt mit Schritt 2 fort.
Verhalten bei wiederholtem Import
- Objekte werden über ihre Scomp-ID gefunden und aktualisiert (Upsert). Objekte ohne Scomp-Spalte werden über ihre natürlichen Schlüssel gefunden (zum Beispiel Release über Software und Version).
- Es wird nichts gelöscht: Zeilen, die aus der Excel-Datei entfernt wurden, bleiben in der Datenbank.
- Zuordnungen von Findings, Massnahmen und KPIs werden je Zeile gelöscht und neu geschrieben, ebenso die Messung eines KPI.
- Für einen sauberen Neuaufbau: Datenbank leeren (
php artisan migrate:fresh --force) und neu importieren. Das löscht auch alle Benutzer und alle im Admin-Bereich erfassten Daten.
Kategorien und Reihenfolge
Die Reihenfolge der Blätter in der Datei ist egal; swark liest in dieser Reihenfolge:
| Schritt | Kategorie | Blätter |
|---|---|---|
| 1 | immer (Grunddaten) | Technologies, Criticality, Protection goals, Data classifications |
| 2 | compliance | Regulations, Regulation chapters, Regulation controls |
| 3 | auditing | Scope templates, Policies, Rules |
| 4 | governance | Strategies, Strategy questions, Strategy objectives, Measurement periods |
| 5 | it | Actors, Logical zones, Stages, Protocol stacks, Resource types, Software, Systems, Releases, Managed accounts, Managed offers, Managed subscriptions, Baremetals, Clusters, Hosts, Runtimes, Application instances, danach zweite Durchgänge: Cluster-Mitglieder (Blatt Clusters), Hosts in Clustern (Blatt Hosts), Ressourcennutzung und Verbindungen (Blatt Application instances) |
| 6 | governance + auditing + compliance | Findings, Actions |
| 7 | governance + auditing | Metrics |
Wer nur eine Kategorie importiert, braucht nur die Blätter dieser Kategorie und der Grunddaten. Referenzen auf Objekte aus nicht importierten Kategorien funktionieren nur innerhalb desselben Laufs; ein Blatt kann nur auf Scomp-IDs verweisen, die im selben Importlauf schon eingelesen wurden (Ausnahme: Resource Type db-schema, siehe unten).
Aufbau eines Blatts
- Die ersten 1 bis 3 Zeilen sind Kopfzeilen; ihre Anzahl ist je Blatt fest (Spalte «Kopf» in den Tabellen unten). Die Daten beginnen in der Zeile danach.
- Spalten werden über ihre Position (A, B, C …) gelesen, nicht über die Überschrift. Die Überschriften dürfen frei formuliert sein, die Reihenfolge nicht.
- Leere Zeilen werden übersprungen.
- Pflichtfelder (in den Tabellen mit «Pflicht» markiert): Ist die Zelle leer, bricht der Import mit «Invalid empty string at [Sheet:'…',row:…,col:…]» ab.
- Spalten mit dem Vermerk «nicht importiert» werden gelesen, aber nicht gespeichert.
- Datumswerte am besten als Text im Format
JJJJ-MM-TT(oderTT.MM.JJJJ) eingeben, nicht als Excel-Datumszahl.
Referenz-Syntax
Die zweite Kopfzeile vieler Blätter beschreibt, was in eine Spalte gehört. Die Notation:
| Schreibweise | Bedeutung | Beispiel |
|---|---|---|
${typ.scomp_id} |
Scomp-ID eines Objekts dieses Typs | ${stage.scomp_id} → prod |
${a.scomp_id}:${b.scomp_id} |
Zusammengesetzter Schlüssel, Teile mit Doppelpunkt | ${software.scomp_id}:${release.scomp_id} → debian:12 |
typ:… |
Typisierte Referenz: der Typ steht als erstes Element | strategy_question:2029:techstack |
* |
Mehrere Werte, durch Komma getrennt | ${actor.scomp_id}* → it,devops |
? |
Optional, darf leer bleiben | ${technology.scomp_id}? |
a \| b |
Alternativen | ${baremetal.scomp_id \| host.scomp_id} |
Besondere Schlüssel:
<software>:latestverweist auf die Release, die beim Einlesen der Software als «latest» markiert war. Beim ersten Import ist das die automatisch angelegte Platzhalter-Release*.<technologie>:latestverweist auf die automatisch angelegte Versionlatesteiner Technologie.- Regulierungskapitel:
<regulierung>:<kapitelnummer>, Controls:<regulierung>:<control-id>, Fragen und Ziele:<strategie>:<scomp-id>(Ziele zusätzlich auch nur<scomp-id>). - Protokoll-Stacks werden über ihren Namen in Kleinbuchstaben angesprochen (zum Beispiel
https,json/rest over https). - Logische Zonen sind in Klein- und Grossschreibung ansprechbar (
internundINTERN).
Verweist eine Zelle auf einen unbekannten Schlüssel, bricht der Import mit «Key 'x' of type 'y' is not registered» ab und listet die bekannten Werte.
Die Tabellenblätter
Das Beispiel-Workbook der Demo (Importvorlage mit Lumen-Daten herunterladen) enthält alle 33 Blätter. Spalten der Reihe nach ab A.
Grunddaten
Technologies (Kopf: 1)
| Spalte | Inhalt |
|---|---|
| A Name | Pflicht |
| B Scomp-ID | Pflicht |
| C Type | protocol, language, framework, data-format, concept, other |
| D Versions | Versionen, durch Komma getrennt, zum Beispiel 1.2,1.3 |
Beispiel: TLS | tls | protocol | 1.2,1.3. Hinweis: Protokoll-Stacks im Demo-Datensatz verweisen auf eine Technologie any, die deshalb ebenfalls angelegt sein muss.
Criticality (Kopf: 1)
| Spalte | Inhalt |
|---|---|
| A Name | Anzeigename, zum Beispiel Hoch |
| B Scomp-ID | Pflicht |
| C Position | Zahl für die Reihenfolge; leer = Zeilennummer |
Protection goals (Kopf: 1)
| Spalte | Inhalt |
|---|---|
| A Name | zum Beispiel Vertraulichkeit |
| B Scomp-ID | Pflicht |
| C Description | Text |
| D Levels | Pflicht; Stufen durch Komma, aufsteigend, zum Beispiel Normal,Hoch,Sehr hoch |
Data classifications (Kopf: 1)
| Spalte | Inhalt |
|---|---|
| A Name | zum Beispiel Vertraulich |
| B Scomp-ID | Pflicht |
| C Description | Text |
Compliance
Regulations (Kopf: 1): A Name, B Scomp-ID (Pflicht).
Regulation chapters (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Chapter number | Pflicht; muss über alle Excel-Regulierungen eindeutig sein |
| B Regulation | Pflicht; ${regulation.scomp_id} |
| C Name | Überschrift |
| D Official content | Amtlicher Text |
| E Actual status | Ist-Zustand |
| F Target status | Soll-Zustand |
Regulation controls (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Control ID | Pflicht |
| B Regulation / Chapter | Pflicht; ${regulation.scomp_id} oder ${regulation.scomp_id}:${kapitelnummer}, zum Beispiel vait:1.2.d |
| C Name | Pflicht |
| D Content | Text |
Auditing
Scope templates (Kopf: 1)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Scomp-ID | Pflicht |
| C Description | |
| D Instance of / Class | PHP-Klasse; in 0.2.1 nur Swark\DataModel\Infrastructure\Repository\Scope\ItemsByScompId |
| E Instance parameters | JSON, zum Beispiel {"type":"logical_zone"} |
| F Template options | JSON, optional |
Policies (Kopf: 1): A Name, B Scomp-ID (Pflicht), C Description (Markdown).
Rules (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Policy | Pflicht; ${policy.scomp_id} |
| C Scomp-ID | Pflicht |
| D Description | HTML-Text |
| E Referenced scopes | Pflicht; je Zeile in der Zelle <scope_template-scomp-id>:<JSON-Optionen>, mehrere durch Zeilenumbruch |
Beispiel E: logical-zones-by-scomp-id:{"scomp_ids":["b2x"]}.
Governance
Strategies (Kopf: 1): A Name, B Scomp-ID (Pflicht).
Strategy questions (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | Frage |
| B Scomp-ID | Pflicht |
| C Strategy | Pflicht; genau eine ${strategy.scomp_id}. Die Kopfzeile spricht von mehreren Strategien; in 0.2.1 wird nur ein Wert unterstützt. |
Strategy objectives (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Scomp-ID | Pflicht |
| C Description | Markdown |
| D Reason | Begründung |
| E Strategy | Pflicht; ${strategy.scomp_id} |
| F Answers questions | optional, Komma-Liste aus strategy_question:<strategie>:<frage> und regulation_chapter:<regulierung>:<kapitel> |
Measurement periods (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | zum Beispiel 2025 1. Halbjahr |
| B Scomp-ID | Pflicht |
| C Description | |
| D Begin at | Datum (Pflichtfeld in der Datenbank) |
| E End at | Datum |
Die erste Periode im Blatt ist die Standardperiode für alle Messungen aus dem Blatt «Metrics».
Findings, Massnahmen, Metriken
Findings (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Scomp-ID | Pflicht |
| C Description | Markdown |
| D Control | Komma-Liste aus regulation_control:<regulierung>:<control-id> und strategy_objective:<strategie>:<ziel> |
| E References | nicht importiert |
| F Criticality | ${criticality.scomp_id} (Priorität) |
Actions (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Scomp-ID | Pflicht |
| C Description | Markdown |
| D Actionable | Komma-Liste aus strategy_objective:<strategie>:<ziel>, regulation_control:<regulierung>:<control-id>, finding:<scomp-id> |
| E References | nicht importiert |
| F Begin at | Datum |
| G End at / Duration | Dauer relativ zum Beginn, zum Beispiel 4w, 3 months, 10 days. Ohne Beginn bleibt das Ende leer. Ein festes Enddatum ist hier nicht möglich (im Admin-Bereich schon). |
Metrics (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Scomp-ID | Pflicht |
| C Description | |
| D Type | boolean, decimal, percentage, time_seconds, time_minutes, time_hours, time_days |
| E Precision | Nachkommastellen, leer = 0 |
| F Goal direction | higher oder lower |
| G Goal value | Zielwert; nur wenn gesetzt, entstehen KPI und Messung |
| H Threshold 1 | Schwellwert; gesetzt = Metrik ist messbar |
| I Threshold 2 | Schwellwert; leer = Metrik gilt als Systemparameter |
| J Assigned | Komma-Liste aus action:<scomp-id> und strategy_objective:<strategie>:<ziel> |
| K Current value | Aktueller Wert in der Standardperiode |
Infrastruktur und Architektur (Kategorie it)
Actors (Kopf: 1): A Name, B Scomp-ID (Pflicht).
Logical zones (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | zum Beispiel CORE |
| B Scomp-ID | Pflicht |
| C Description | |
| D Data classification | ${data_classification.scomp_id} |
| E Actors | ${actor.scomp_id}* |
| F Allow access to | ${logical_zone.scomp_id}* (Zielzonen) |
| G Deny access to | ${logical_zone.scomp_id}*; ohne Eintrag gilt ohnehin «verweigert» |
Die Zugriffsregeln werden erst nach allen Zonen eingelesen; Vorwärtsverweise auf spätere Zeilen sind daher erlaubt.
Stages (Kopf: 1): A Name (Pflicht), B Scomp-ID (Pflicht).
Protocol stacks (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | Pflicht; der Name in Kleinbuchstaben ist der Schlüssel für Verweise |
| B Port | Standard-Port (ganze Zahl) |
| C Application layer | ${technology.scomp_id}, typischerweise Typ data-format |
| D Presentation layer | ${technology.scomp_id} |
| E Session layer | ${technology.scomp_id} |
| F Transport layer | ${technology.scomp_id} |
| G Network layer | ${technology.scomp_id} |
In 0.2.1 müssen alle fünf Schichtspalten befüllt sein; eine leere Zelle führt zum Abbruch.
Resource types (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | Pflicht |
| B Scomp-ID | Pflicht |
| C Technology | ${technology.scomp_id}? |
Pflichteintrag: Ein Resource Type mit der Scomp-ID db-schema muss existieren (in diesem Blatt oder schon in der Datenbank), sobald die Kategorie it importiert wird. Sonst bricht der Import beim Blatt «Application instances» ab.
Software (Kopf: 1)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Scomp-ID | Pflicht |
| C Vendor | Herstellername; legt die Organisation an (Scomp-ID aus dem Namen, zum Beispiel red_hat) |
| D Releases | Versionen, durch Komma getrennt |
| E Is virtualizer | beliebiger Wert = ja |
| F Is operating system | beliebiger Wert = ja |
| G Is runtime | beliebiger Wert = ja |
| H Is library | beliebiger Wert = ja |
| I Notes | nicht importiert |
Jede neue Software erhält automatisch eine Platzhalter-Release *.
Systems (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | Pflicht |
| B Scomp-ID | Pflicht |
| C Description | |
| D Stage | ${stage.scomp_id} |
| E Zone | ${logical_zone.scomp_id} |
| F Business criticality | ${criticality.scomp_id} |
| G Infrastructure criticality | ${criticality.scomp_id} |
| H Composed of | Komma-Liste aus software:<scomp-id> und resource_type:<scomp-id> |
Releases (Kopf: 2): A Software (Pflicht, ${software.scomp_id}), B Version (Pflicht). Jede Zeile markiert ihre Version als «latest» der Software; die letzte Zeile einer Software gewinnt.
Managed accounts (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Vendor | Pflicht; Providername, legt die Organisation als Managed Service Provider an |
| B Name | Kontoname |
| C Scomp-ID | Pflicht |
| D Notes | nicht importiert |
Managed offers (Kopf: 3)
| Spalte | Inhalt |
|---|---|
| A Vendor | Pflicht; Name eines Providers, der bereits als Organisation bekannt ist (aus Managed accounts oder Software) |
| B Name | Angebotsname |
| C Scomp-ID | Pflicht |
| D Software | ${software.scomp_id}? |
Managed subscriptions (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Account | Pflicht; ${managed_account.scomp_id} |
| B Offer | Pflicht; ${managed_offer.scomp_id} |
| C Name | Name des Abonnements |
| D Resources | Komma-Liste <resource_type-scomp-id>:<ressourcenname>, zum Beispiel entra-id:entra-id-prod; legt die Ressourcen mit dem Abonnement als Provider an |
Baremetals (Kopf: 3)
| Spalte | Inhalt |
|---|---|
| A Name | |
| B Scomp-ID | Pflicht |
| C Description | |
| D Offer | ${managed_offer.scomp_id}? |
| E Account | ${managed_account.scomp_id}? |
| F Region | Regionsname; wird als Region des Providers angelegt |
| G Availability zone | Zonenname; wird in der Region angelegt |
D bis G nur für gemietete Maschinen; D und E müssen dann beide gesetzt sein.
Clusters (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Scomp-ID | Pflicht; zugleich Clustername |
| B Members | Komma-Liste typ:<scomp-id> mit Typ host, parent-host, child-host, runtime, rt, application_instance oder ai |
| C Type | Modus: failover, replica, lb oder leer |
| D Stage | ${stage.scomp_id} |
| E Notes | nicht importiert |
Die Mitglieder werden erst nach Hosts, Runtimes und Application Instances zugeordnet; Verweise auf später eingelesene Objekte sind daher erlaubt.
Hosts (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | zum Beispiel dc1.internal |
| B Scomp-ID | Pflicht |
| C Parent | Pflicht; baremetal:<scomp-id>, host:<scomp-id> (virtualisiert auf diesem Host) oder cluster:<scomp-id> (Mitglied eines Clusters) |
| D Operating system | Pflicht; <software>:<version> oder <software>:latest, zum Beispiel debian:12 |
| E Virtualizer | optional, <software>:<version> |
| F IP addresses | nicht importiert |
| G DNS names | nicht importiert |
| H Notes | nicht importiert |
Ein Eltern-Host muss in einer früheren Zeile stehen.
Runtimes (Kopf: 2)
| Spalte | Inhalt |
|---|---|
| A Name | zum Beispiel Kubernetes |
| B Scomp-ID | Pflicht |
| C Host | Pflicht; ${host.scomp_id} |
| D Software release | Pflicht; <software>:<version>, zum Beispiel kubernetes:1.27.6 |
Application instances (Kopf: 3)
| Spalte | Inhalt |
|---|---|
| A Software | ${software.scomp_id}; verwendet immer <software>:latest |
| B Scomp-ID | Pflicht |
| C Logical zone | Zonen-Scomp-ID; unbekannte Werte werden ohne Fehler ignoriert |
| D Stage | ${stage.scomp_id} |
| E System | ${system.scomp_id} |
| F Database schema | Komma-Liste <provider>:<schemaname>; Provider ist die Scomp-ID eines Clusters oder einer Application Instance. Legt Ressourcen vom Typ db-schema an und eine Beziehung «uses». |
| G Connects to | Komma-Liste <ziel>:<protokoll-stack>:<port>; Ziel ist die Scomp-ID eines Clusters, einer Application Instance oder einer Ressource. Legt eine Beziehung «connects_to» an. |
| H Host | Executor: ${host.scomp_id} |
| I Runtime | Executor: ${runtime.scomp_id} |
| J Replica, K Failover, L Cluster/VIP | nicht importiert |
| M Kubernetes Cluster | Executor: ${cluster.scomp_id}, nur zusammen mit O |
| N Deployment | nicht importiert |
| O Namespace | Namespace-Name; wird im Cluster angelegt |
Genau ein Executor ist nötig: H, sonst I, sonst M mit O. Fehlt er, bricht der Import mit «Can not locate executor type» ab.
Beispiele aus dem Demo-Datensatz:
wsus | wsus-prod | INFRA | prod | | mssql-wsus-prod:wsus | | dc1
rancher | rancher-infra | INFRA | prod | | | kubernetes-prod:ssh:22,kubernetes-prod:https:8443 | | | | | | kubernetes-prod | | rancher
Einschränkung 0.2.1: Eine bestimmte Version lässt sich für eine Application Instance im Excel nicht angeben; das Frontend zeigt die Version *. Die Release kann danach im Panel Operations geändert werden; ein erneuter Import setzt sie wieder auf latest zurück.
Markdown- und YAML-Import
Liegt neben import.xlsx ein Ordner regulations/, liest der Import ihn ein (Kategorie Compliance muss aktiv sein; mit --markdown-only nur dieser Teil):
<import-ordner>/
├── import.xlsx
└── regulations/
└── <regulierung>/ Ordnername = Scomp-ID der Regulierung
├── data.yaml optional: name, scomp_id
└── <kapitel>/ Ordnername = Kapitelnummer
├── law.md Frontmatter heading, relevancy (yes | partly | no); Inhalt = amtlicher Text
├── summary.md Inhalt = Zusammenfassung
├── actual.md Inhalt = Ist-Zustand
├── target.md Inhalt = Soll-Zustand
└── controls/
└── <beliebig>.md Frontmatter external_id, name; Inhalt = Control-Text
Beispiel law.md:
---
relevancy: partly
heading: Meldepflichten
---
Text des Artikels …
Beispiel controls/1.md:
---
name: Konzepte für Risikoanalyse
external_id: 21.2.a
---
Konzepte in Bezug auf die Risikoanalyse sind vorhanden.
Regeln:
- Alle Dateien sind optional. Existiert
law.md, muss das Frontmatterheadingundrelevancyenthalten. - Kapitel werden über Regulierung und Kapitelnummer gefunden und aktualisiert, Controls über Regulierung und
external_id. - Eigene Ist- und Sollzustände für die mitgelieferte NIS2 lassen sich in einem eigenen Import-Ordner ablegen:
regulations/nis2/21/actual.mdusw. Nur vorhandene Dateien überschreiben die jeweiligen Felder.
Frontmatter ist YAML zwischen zwei Zeilen --- am Dateianfang.
Weitere Artisan-Befehle
| Befehl | Zweck | Status 0.2.1 |
|---|---|---|
swark:import:datamodel <pfad> |
Excel- und Markdown-Import (siehe oben) | funktioniert |
swark:import:content <pfad> |
Importiert .md, .html und .txt aus Unterordnern von <pfad> in die Tabelle content. Scomp-ID = <unterordner>_<dateiname bis zum ersten Punkt>. Bereits vorhandene Einträge werden nur ersetzt, wenn das Frontmatter updated_at neuer ist. |
funktioniert, Inhalte erscheinen aber in der Regel nicht im Frontend (siehe Kapitel Content) |
swark:create-user --name= --email= --password= [--skip-on-existing-user] |
Legt einen Benutzer an; ohne --password wird ein Passwort erzeugt und ausgegeben. Die Option --is-admin existiert, hat aber keine Wirkung. |
funktioniert |
cluster:import --kube-config= --kube-user= --kube-cluster= --kube-context= --account= |
Soll Nodes eines Kubernetes-Clusters als Baremetal, Host und Runtime übernehmen | nicht lauffähig: nutzt eine REST-API unter http://localhost:8000/api, deren Routen in 0.2.1 nicht registriert sind |
k8:token-review --kube-config= … |
Listet Tokens eines Kubernetes-Clusters mit Ablaufdatum (Token maskiert) | nur lesend gegen Kubernetes; im Hosting ohne Kube-Config nicht nutzbar |
helm:update |
Sucht für Software mit einer Quelle vom Typ helm neuere Chart-Versionen auf Artifact Hub und legt Releases an |
Quellen (source, source_provider) lassen sich weder per Excel noch im Admin-Bereich erfassen; nur mit direkt in der Datenbank angelegten Quellen nutzbar |
app:process-batch-dependencies <xlsx> |
Wertet Batch-Abhängigkeiten aus einer Excel-Datei aus und schreibt PlantUML-Gantt und Graphviz-Dateien | Entwicklerwerkzeug; schreibt fest nach /mnt/c/temp, im Container nicht sinnvoll |
app:ingest-flat-structure-deprecated |
Alter YAML-Import | veraltet und nicht lauffähig (kein Speicherort konfiguriert) |
Ein Export der Daten als Excel-Vorlage ist im Code vorbereitet, aber in 0.2.1 weder als Befehl noch in der Oberfläche erreichbar. Die README von swark nennt die Befehle app:import und app:import:content; diese existieren in 0.2.1 nicht (richtig: swark:import:datamodel und swark:import:content).
Zusätzlich stehen die Laravel- und Filament-Standardbefehle zur Verfügung, etwa migrate, migrate:fresh, optimize, optimize:clear, storage:link, route:list und make:filament-user.
Vorgehen für einen Erstimport
- Die Importvorlage als Ausgangspunkt nehmen, Demo-Zeilen löschen, Kopfzeilen stehen lassen.
- Blätter in der Reihenfolge der Abhängigkeiten befüllen: Grunddaten → Zonen, Stages, Technologien, Protokoll-Stacks, Resource Types (mit
db-schema) → Software und Releases → Baremetals, Hosts, Runtimes, Cluster → Application Instances → Strategie, Compliance, Findings, Massnahmen, Metriken. - Für leere Kategorien die Blätter trotzdem stehen lassen (nur Kopfzeilen) oder den Import mit Kategorie-Optionen einschränken.
- Import ausführen und die Ausgabe prüfen («Importing sheet …», «… done»). Bei einem Abbruch nennt die Meldung Blatt, Zeile und Spalte bzw. den unbekannten Schlüssel.
- Optional NIS2:
php artisan swark:import:datamodel --markdown-only default-importables.