Deployment: Service-File aus Repository lesen statt inline generieren #78

Closed
opened 2025-06-23 19:51:10 +02:00 by Michael · 1 comment
Michael commented 2025-06-23 19:51:10 +02:00 (Migrated from gitea.dragons-at-work.de)

Problem

Aktuell generiert das Deployment-Script deploy_walter.sh das OpenBSD Service-File inline in der fix_service_file() Funktion:

walter_exec_as_root "sh -c 'cat > /etc/rc.d/furt << "EOF"
#!/bin/ksh
daemon="$TARGET_DIR/scripts/start.sh"
# ... inline content
EOF'"

Das führt zu Wartungsproblemen:

  • Service-File-Logic ist im Deployment-Script versteckt
  • Änderungen am Service-File erfordern Deployment-Script-Updates
  • Schwer zu testen und zu versionieren

Lösung

Das Service-File sollte aus dem Repository gelesen werden:

furt-lua/
├── deployment/
│   └── openbsd/
│       └── rc.d-furt        # <- Bereits vorhanden

Implementierung

  1. Deployment-Script anpassen:

    • fix_service_file() Funktion ersetzen durch deploy_service_file()
    • Service-File aus deployment/openbsd/rc.d-furt lesen
    • Mit Template-Variablen für TARGET_DIR und SERVICE_USER
  2. Template-System:

    # rc.d-furt Template mit Platzhaltern:
    daemon="{{TARGET_DIR}}/scripts/start.sh"
    daemon_user="{{SERVICE_USER}}"
    
  3. Deployment-Funktion:

    deploy_service_file() {
        log_step "Deploying OpenBSD service file"
    
        local template_file="$SOURCE_DIR/deployment/openbsd/rc.d-furt"
        local temp_file="/tmp/furt-service-$$"
    
        # Replace template variables
        sed -e "s|{{TARGET_DIR}}|$TARGET_DIR|g" \
            -e "s|{{SERVICE_USER}}|$SERVICE_USER|g" \
            "$template_file" > "$temp_file"
    
        # Deploy to walter
        scp "$temp_file" "$WALTER_HOST:/tmp/rc.d-furt"
        walter_exec_as_root "mv /tmp/rc.d-furt /etc/rc.d/furt"
        walter_exec_as_root "chmod +x /etc/rc.d/furt"
    
        rm "$temp_file"
    }
    

Vorteile

  • Service-File versioniert und testbar
  • Separation of Concerns
  • Template-basiert für verschiedene Umgebungen
  • Deployment-Script wird einfacher

Akzeptanzkriterien

  • Service-File wird aus Repository gelesen
  • Template-Variablen für TARGET_DIR und SERVICE_USER
  • Deployment-Script vereinfacht
  • Backwards-kompatibel mit bestehenden Deployments
  • Tests für Template-Replacement

Technische Notes

Service-File Location: deployment/openbsd/rc.d-furt
Template-Engine: sed-basiert für minimale Dependencies
Deployment-Target: /etc/rc.d/furt auf walter

## Problem Aktuell generiert das Deployment-Script `deploy_walter.sh` das OpenBSD Service-File inline in der `fix_service_file()` Funktion: ```bash walter_exec_as_root "sh -c 'cat > /etc/rc.d/furt << "EOF" #!/bin/ksh daemon="$TARGET_DIR/scripts/start.sh" # ... inline content EOF'" ``` Das führt zu Wartungsproblemen: - Service-File-Logic ist im Deployment-Script versteckt - Änderungen am Service-File erfordern Deployment-Script-Updates - Schwer zu testen und zu versionieren ## Lösung Das Service-File sollte aus dem Repository gelesen werden: ``` furt-lua/ ├── deployment/ │ └── openbsd/ │ └── rc.d-furt # <- Bereits vorhanden ``` ## Implementierung 1. **Deployment-Script anpassen:** - `fix_service_file()` Funktion ersetzen durch `deploy_service_file()` - Service-File aus `deployment/openbsd/rc.d-furt` lesen - Mit Template-Variablen für `TARGET_DIR` und `SERVICE_USER` 2. **Template-System:** ```bash # rc.d-furt Template mit Platzhaltern: daemon="{{TARGET_DIR}}/scripts/start.sh" daemon_user="{{SERVICE_USER}}" ``` 3. **Deployment-Funktion:** ```bash deploy_service_file() { log_step "Deploying OpenBSD service file" local template_file="$SOURCE_DIR/deployment/openbsd/rc.d-furt" local temp_file="/tmp/furt-service-$$" # Replace template variables sed -e "s|{{TARGET_DIR}}|$TARGET_DIR|g" \ -e "s|{{SERVICE_USER}}|$SERVICE_USER|g" \ "$template_file" > "$temp_file" # Deploy to walter scp "$temp_file" "$WALTER_HOST:/tmp/rc.d-furt" walter_exec_as_root "mv /tmp/rc.d-furt /etc/rc.d/furt" walter_exec_as_root "chmod +x /etc/rc.d/furt" rm "$temp_file" } ``` ## Vorteile - ✅ Service-File versioniert und testbar - ✅ Separation of Concerns - ✅ Template-basiert für verschiedene Umgebungen - ✅ Deployment-Script wird einfacher ## Akzeptanzkriterien - [ ] Service-File wird aus Repository gelesen - [ ] Template-Variablen für TARGET_DIR und SERVICE_USER - [ ] Deployment-Script vereinfacht - [ ] Backwards-kompatibel mit bestehenden Deployments - [ ] Tests für Template-Replacement ## Technische Notes Service-File Location: `deployment/openbsd/rc.d-furt` Template-Engine: sed-basiert für minimale Dependencies Deployment-Target: `/etc/rc.d/furt` auf walter
michael added this to the v0.1.2 - Gateway Basics milestone 2025-08-14 05:20:48 +02:00
Owner

Dieses wird jetzt in der installation.md des wiki beschrieben, so das immer da aktuelle file genommen wird.

Dieses wird jetzt in der installation.md des wiki beschrieben, so das immer da aktuelle file genommen wird.
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: DAW/furt#78
No description provided.