diff --git a/.gitea/workflows/odoo-restore-open_workshop_install.yaml b/.gitea/workflows/odoo-restore-open_workshop_install.yaml index 4ab2a23..b28ab2e 100644 --- a/.gitea/workflows/odoo-restore-open_workshop_install.yaml +++ b/.gitea/workflows/odoo-restore-open_workshop_install.yaml @@ -7,9 +7,7 @@ on: - 13.0_dev env: - URL_BACKUP: https://odoo.lan.hobbyhimmel.de URL_RESTORE: http://hobbybackend2.fritz.box:9013 - REGISTRY: gitea.lan.hobbyhimmel.de jobs: run-odoo-backup-in-docker: @@ -115,11 +113,14 @@ jobs: - name: Uninstall vvow_pos run: | - echo "Odoo DB Name: ${{ env.DB_NAME }}" - docker exec hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} /bin/bash -c " - cd /home/odoo/custom_addons/open_workshop/scripts && \ - /opt/odoo/odoo/odoo-bin shell -d ${{ env.DB_NAME }} < uninstall_vvow_pos.py" - + docker exec -e ODOO_URL=${{ env.URL_RESTORE }} \ + -e ODOO_DB=${{ env.DB_NAME }} \ + -e ODOO_USERNAME=${{ secrets.ODOO_ADMIN }} \ + -e ODOO_PASSWORD=${{ secrets.ODOO_ADMIN_PASSWORD }} \ + hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} \ + /bin/bash -c " + cd /home/odoo/custom_addons/open_workshop/scripts && \ + python3 uninstall_rpc.py vvow_pos" - name: Fix Database hobbyhimmel with fix_missing_pos_partner.py # In diesem Schritt wird das Skript `fix_missing_pos_partner.py` ausgeführt, um sicherzustellen, dass alle Partner in der Datenbank korrekt sind. @@ -141,47 +142,13 @@ jobs: cd /home/odoo/custom_addons/open_workshop/scripts && \ /opt/odoo/odoo/odoo-bin shell -d ${{ env.DB_NAME }} < import_machine_products.py" - - name: Stoppe Odoo-Container - run: docker stop hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} - - - name: Erstelle temporäres Image vom gestoppten Container - run: docker commit hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} temp-odoo-uninstall:${{ env.ODOO_VERSION }} - - - name: Starte temporären Container im Leerlauf + - name: Uninstall vvow_einweisungen run: | - docker run -d --rm \ - --name odoo_uninstall \ - -v hobbyhimmel_odoo_13_dev_odoo:/home/odoo \ - --network hobbyhimmel_odoo_13_dev_default \ - -e PGHOST=${{ env.DB_HOST }} \ - -e PGPORT=${{ env.DB_PORT }} \ - -e PGUSER=${{ env.DB_USER }} \ - -e PGPASSWORD=${{ env.DB_PASSWORD }} \ - temp-odoo-uninstall:${{ env.ODOO_VERSION }} \ - tail -f /dev/null - - # Warte kurz, bis der Container vollständig läuft - sleep 5 - - - name: Modul vvow_einweisungen deinstallieren - run: | - docker exec odoo_uninstall \ - /opt/odoo/odoo/odoo-bin shell -d ${{ env.DB_NAME }} < /home/odoo/custom_addons/open_workshop/scripts/uninstall_vvow_einweisungen.py - - - name: Stoppe temporären Container - run: docker stop odoo_uninstall - - - name: Starte regulären Odoo-Container wieder - run: docker start hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} - - # - name: Pause vor dem Deinstallieren von vvow_einweisungen - # run: sleep 120 - - # - name: Uninstall vvow_einweisungen - # run: | - # docker exec hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} /bin/bash -c " - # cd /home/odoo/custom_addons/open_workshop/scripts && \ - # /opt/odoo/odoo/odoo-bin shell -d ${{ env.DB_NAME }} < uninstall_vvow_einweisungen.py" - # docker restart hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} - - + docker exec -e ODOO_URL=${{ env.URL_RESTORE }} \ + -e ODOO_DB=${{ env.DB_NAME }} \ + -e ODOO_USERNAME=${{ secrets.ODOO_ADMIN }} \ + -e ODOO_PASSWORD=${{ secrets.ODOO_ADMIN_PASSWORD }} \ + hobbyhimmel_odoo_${{ env.CONTAINER_NAME_EXTENSION }} \ + /bin/bash -c " + cd /home/odoo/custom_addons/open_workshop/scripts && \ + python3 uninstall_rpc.py vvow_einweisungen" diff --git a/scripts/uninstall_rpc.py b/scripts/uninstall_rpc.py new file mode 100755 index 0000000..c5b5a58 --- /dev/null +++ b/scripts/uninstall_rpc.py @@ -0,0 +1,59 @@ +import sys +import os +import xmlrpc.client + +# ---------------------- +# KONFIGURATION AUS UMGEBUNG +# ---------------------- +url = os.getenv("ODOO_URL", "http://localhost:8069") +db = os.getenv("DB_NAME", "hobbyhimmel") +username = os.getenv("ODOO_ADMIN") +password = os.getenv("ODOO_ADMIN_PASSWORD") + +# ---------------------- +# PRÜFUNG DER KONFIGURATION +# ---------------------- +if not all([url, db, username, password]): + print("❌ Fehler: ODOO_URL, ODOO_DB, ODOO_USERNAME und ODOO_PASSWORD müssen als Umgebungsvariablen gesetzt sein.") + sys.exit(1) + +# ---------------------- +# PARAMETER PRÜFEN +# ---------------------- +if len(sys.argv) != 2: + print("❌ Fehler: Modulname muss als Parameter übergeben werden.") + print("👉 Beispiel: python3 uninstall_rpc.py vvow_einweisungen") + sys.exit(1) + +module_name = sys.argv[1] + +# ---------------------- +# AUTHENTIFIZIERUNG +# ---------------------- +common = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/common") +uid = common.authenticate(db, username, password, {}) + +if not uid: + print("❌ Anmeldung fehlgeschlagen. Bitte Zugangsdaten prüfen.") + sys.exit(1) + +# ---------------------- +# MODUL SUCHEN & DEINSTALLIEREN +# ---------------------- +models = xmlrpc.client.ServerProxy(f"{url}/xmlrpc/2/object") + +ids = models.execute_kw(db, uid, password, + 'ir.module.module', 'search', + [[['name', '=', module_name], ['state', '=', 'installed']]], + {'limit': 1} +) + +if ids: + print(f"📦 Deinstalliere Modul: {module_name}") + models.execute_kw(db, uid, password, + 'ir.module.module', 'button_immediate_uninstall', + [ids] + ) + print("✅ Deinstallation abgeschlossen.") +else: + print(f"ℹ️ Modul '{module_name}' ist nicht installiert oder nicht vorhanden.")