adding readme.md
This commit is contained in:
185
README.md
Normal file
185
README.md
Normal file
@@ -0,0 +1,185 @@
|
||||
# DSC Configuration Compiler
|
||||
|
||||
Ein WinForms-basiertes PowerShell-Tool zum Laden, Kombinieren, Anzeigen und Exportieren von DSC-nahen Konfigurationen auf Basis von `psd1`-Dateien.
|
||||
|
||||
Der Fokus des Projekts liegt auf einem einfachen Template-Workflow:
|
||||
|
||||
- Templates aus Ordnern laden
|
||||
- mehrere Templates zu einer Zielkonfiguration zusammenfuehren
|
||||
- Parameter und Variablen aufloesen
|
||||
- die resultierende Struktur im TreeView pruefen
|
||||
- die zusammengefuehrte Konfiguration wieder als `psd1` exportieren
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Windows
|
||||
- PowerShell mit WinForms-Unterstuetzung
|
||||
- Schreibzugriff auf `%APPDATA%`
|
||||
|
||||
Das Tool speichert Einstellungen und Logs unterhalb von `%APPDATA%\DSC Tool`.
|
||||
|
||||
## Start
|
||||
|
||||
Das Projekt kann direkt ueber `Compiler.ps1` gestartet werden:
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File .\Compiler.ps1
|
||||
```
|
||||
|
||||
Alternativ:
|
||||
|
||||
```powershell
|
||||
pwsh -File .\Compiler.ps1
|
||||
```
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```text
|
||||
.
|
||||
|-- Compiler.ps1
|
||||
|-- Functions/
|
||||
|-- Templates/
|
||||
`-- Deployments/
|
||||
```
|
||||
|
||||
- `Compiler.ps1`: Hauptanwendung, UI, Parser- und Resolver-Logik
|
||||
- `Functions/`: zusaetzliche Funktionen fuer Import, Export, Merge und UI-Aktualisierung
|
||||
- `Templates/`: wiederverwendbare Konfigurationsbausteine
|
||||
- `Deployments/`: exportierte oder vorbereitete Zielkonfigurationen
|
||||
|
||||
## Bedienung
|
||||
|
||||
1. Anwendung starten.
|
||||
2. Falls noetig ueber `Einstellungen -> Ordner waehlen...` den Root-Ordner setzen.
|
||||
3. Templates aus den Kategorien laden.
|
||||
4. Gewuenschte Templates per Doppelklick zur Auswahl hinzufuegen.
|
||||
5. Die Auswahl zusammenfuehren.
|
||||
6. Das Ergebnis im TreeView pruefen.
|
||||
7. Die zusammengefuehrte Konfiguration als `psd1` exportieren.
|
||||
|
||||
Import und Export werden ueber den Deployment-Ordner abgewickelt.
|
||||
|
||||
## Template-Modell
|
||||
|
||||
Templates bestehen aus drei optionalen Hauptbereichen:
|
||||
|
||||
- `Parameters`
|
||||
- `Variables`
|
||||
- `Resources`
|
||||
|
||||
Ein vereinfachtes Beispiel:
|
||||
|
||||
```powershell
|
||||
@{
|
||||
Parameters = @{
|
||||
DatabasePrefix = @{
|
||||
Type = 'string'
|
||||
DefaultValue = 'SP'
|
||||
}
|
||||
}
|
||||
|
||||
Variables = @{
|
||||
ConfigDbName = "[concat(parameters('DatabasePrefix'),'_','Farm_Config')]"
|
||||
}
|
||||
|
||||
Resources = @{
|
||||
NonNodeData = @{
|
||||
Services = @{
|
||||
Example = @{
|
||||
DatabaseName = "[variables('ConfigDbName')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Ausdruckssyntax
|
||||
|
||||
Die Auswertung ist ARM-inspiriert. Template-Ausdruecke stehen in eckigen Klammern:
|
||||
|
||||
```powershell
|
||||
"[concat(parameters('Prefix'),'_','Database')]"
|
||||
```
|
||||
|
||||
Unterstuetzte Referenzen:
|
||||
|
||||
- `parameters('Name')`
|
||||
- `variables('Name')`
|
||||
|
||||
Zusaetzlich werden aus Rueckwaertskompatibilitaet auch diese Varianten verstanden:
|
||||
|
||||
- `Parameter('Name')`
|
||||
- `Variable('Name')`
|
||||
|
||||
Unterstuetzte Funktionen:
|
||||
|
||||
- `concat(...)`
|
||||
- `toLower(...)`
|
||||
- `toUpper(...)`
|
||||
- `substring(...)`
|
||||
- `replace(...)`
|
||||
- `indexOf(...)`
|
||||
- `firstIndexOf(...)`
|
||||
- `lastIndexOf(...)`
|
||||
|
||||
Funktionsnamen werden ohne freie PowerShell-Ausfuehrung ausgewertet. Die `psd1`-Dateien werden als Daten geparst, nicht als beliebiger Script-Code interpretiert.
|
||||
|
||||
## Aufloesungsreihenfolge
|
||||
|
||||
Die Aufloesung erfolgt in dieser Reihenfolge:
|
||||
|
||||
1. Parameterwerte und Defaultwerte
|
||||
2. Variablen
|
||||
3. Ressourcenwerte
|
||||
|
||||
Zirkulaere Variablenreferenzen werden erkannt und als Fehler behandelt.
|
||||
|
||||
## Merge-Verhalten
|
||||
|
||||
Beim Zusammenfuehren mehrerer Templates werden vorhandene Eintraege rekursiv kombiniert:
|
||||
|
||||
- Hashtables werden rekursiv gemerged
|
||||
- Arrays werden anhand passender Name-Felder zusammengefuehrt
|
||||
- fehlende Werte aus Templates werden in das Ergebnis uebernommen
|
||||
|
||||
Die finale Anzeige im TreeView basiert auf dem zusammengefuehrten und bereits aufgeloesten Modell.
|
||||
|
||||
## Export
|
||||
|
||||
Der Export schreibt die aktuelle TreeView-Struktur wieder in eine `psd1`-Datei.
|
||||
|
||||
Standardziel beim Speichern ist:
|
||||
|
||||
```text
|
||||
Deployments\merged_config.psd1
|
||||
```
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Einstellungen werden benutzerbezogen gespeichert.
|
||||
- Logs werden pro Tag unter `%APPDATA%\DSC Tool\Logs` geschrieben.
|
||||
- Templates sollten deklarativ bleiben und nur Daten plus Template-Ausdruecke enthalten.
|
||||
- Fuer neue Templates wird die ARM-aehnliche Syntax mit `parameters()` und `variables()` empfohlen.
|
||||
|
||||
## Beispielinhalt
|
||||
|
||||
Im Repository ist bereits ein groesseres Beispiel enthalten:
|
||||
|
||||
- `Templates\Service\SharePointServer.psd1`
|
||||
|
||||
Dieses Template zeigt die Verwendung von:
|
||||
|
||||
- Parametern
|
||||
- Variablen
|
||||
- verschachtelten Ressourcen
|
||||
- String-Funktionen wie `concat()` und `substring()`
|
||||
|
||||
## Weiterentwicklung
|
||||
|
||||
Sinnvolle naechste Schritte fuer das Projekt sind:
|
||||
|
||||
- Tests fuer Parser, Resolver und Merge-Verhalten
|
||||
- typsicherer Export-Roundtrip
|
||||
- robustere Initialisierung der Pfade und Settings
|
||||
- weitere Template-Funktionen nach Bedarf
|
||||
Reference in New Issue
Block a user