fixed import_machine_prdoucts, prepared for gitea actions
This commit is contained in:
parent
a5e14a07d7
commit
ba4bc5dc8d
111
.gitea/workflows/odoo-restore-open_workshop_install.yaml
Normal file
111
.gitea/workflows/odoo-restore-open_workshop_install.yaml
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
name: odoo-backup-restore
|
||||
on:
|
||||
schedule:
|
||||
- cron: "21 5 * * *" # Dieser Job wird täglich um 05:21 Uhr UTC ausgeführt.
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
# workflow_dispatch:
|
||||
|
||||
env:
|
||||
URL_BACKUP: https://odoo.lan.hobbyhimmel.de
|
||||
URL_RESTORE: http://hobbybackend2.fritz.box:9013
|
||||
|
||||
jobs:
|
||||
run-odoo-backup-in-docker:
|
||||
runs-on: ["hobbybackend2","ubuntu-latest"] # Gibt an, dass der Job entweder auf 'hobbybackend1' und 'ubuntu-latest' läuft.
|
||||
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
# Dieser Schritt holt den Code des Repositories in die Action-Umgebung.
|
||||
# Dies ist notwendig, um auf Dateien im Repository wie Skripte oder Konfigurationen zugreifen zu können.
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Docker container
|
||||
# Dieser Schritt startet einen Docker-Container basierend auf dem "ubuntu:latest" Image.
|
||||
# Er läuft im Hintergrund (`-d`), und wir verwenden `tail -f /dev/null`, um den Container laufend zu halten.
|
||||
# Danach werden benötigte Pakete wie `gnupg`, `openssh-client`, `curl` und `sshpass` installiert.
|
||||
run: |
|
||||
docker run -d --name ${{ github.workflow }} ubuntu:latest tail -f /dev/null
|
||||
docker exec ${{ github.workflow }} apt-get update
|
||||
docker exec ${{ github.workflow }} apt-get install -y gnupg openssh-client curl sshpass
|
||||
|
||||
- name: Copy SSH keys to the container
|
||||
# In diesem Schritt werden SSH-Schlüssel aus den GitHub Secrets in temporäre Dateien geschrieben.
|
||||
# Diese Dateien werden dann in den Docker-Container kopiert, um SSH-Zugriff innerhalb des Containers zu ermöglichen.
|
||||
# Schließlich werden die Berechtigungen des privaten Schlüssels (id_rsa) auf 600 gesetzt.
|
||||
run: |
|
||||
docker exec ${{ github.workflow }} mkdir -p /root/.ssh
|
||||
echo "${{ secrets.OPENSSH_PRIVATE_KEY }}" > ssh_private_key
|
||||
echo "${{ secrets.OPENSSH_PUBLIC_KEY }}" > ssh_public_key
|
||||
docker cp ssh_private_key ${{ github.workflow }}:/root/.ssh/id_rsa
|
||||
docker cp ssh_public_key ${{ github.workflow }}:/root/.ssh/id_rsa.pub
|
||||
docker exec ${{ github.workflow }} chmod 600 /root/.ssh/id_rsa
|
||||
|
||||
- name: Copy PGP keys to the container
|
||||
# Hier werden die GPG-Schlüssel (PGP-Schlüssel) in den Container kopiert, um Backups verschlüsseln zu können.
|
||||
# Die GPG-Schlüssel werden ebenfalls aus den GitHub Secrets entnommen und temporär in Dateien gespeichert,
|
||||
# die anschließend importiert werden.
|
||||
run: |
|
||||
echo "${{ secrets.PGP_PRIVATE_KEY }}" > pgp_private_key.asc
|
||||
echo "${{ secrets.PGP_PUBLIC_KEY }}" > pgp_public_key.asc
|
||||
docker cp pgp_private_key.asc ${{ github.workflow }}:/root/pgp_private_key.asc
|
||||
docker cp pgp_public_key.asc ${{ github.workflow }}:/root/pgp_public_key.asc
|
||||
docker exec ${{ github.workflow }} gpg --batch --import /root/pgp_private_key.asc
|
||||
docker exec ${{ github.workflow }} gpg --import /root/pgp_public_key.asc
|
||||
rm pgp_private_key.asc pgp_public_key.asc
|
||||
|
||||
- name: Add Host to Known Hosts
|
||||
# In diesem Schritt wird der SSH-Host-Schlüssel des Remote-Servers (ALL_INKL_HOST) zum "known_hosts"-File
|
||||
# des Containers hinzugefügt, um SSH-Verbindungen zum Remote-Server zu ermöglichen, ohne dass Warnungen angezeigt werden.
|
||||
# Der Host-Schlüssel wird mit `ssh-keyscan` gesammelt und in `known_hosts` eingetragen.
|
||||
run: |
|
||||
echo "This is the host: ${{ secrets.ALL_INKL_HOST }}"
|
||||
docker exec ${{ github.workflow }} bash -c "mkdir -p /root/.ssh && touch /root/.ssh/known_hosts && chmod 600 /root/.ssh/known_hosts"
|
||||
docker exec ${{ github.workflow }} bash -c "ssh-keyscan -H '${{ secrets.ALL_INKL_HOST }}' >> /root/.ssh/known_hosts"
|
||||
docker exec ${{ github.workflow }} bash -c "cat /root/.ssh/known_hosts" # Optional: Ausgabe zur Überprüfung
|
||||
|
||||
- name: Run the restore script in Docker container
|
||||
# In diesem Schritt wird das Skript `odoo-restore.sh` in den Container kopiert und dort ausgeführt.
|
||||
# Die für das Skript notwendigen Umgebungsvariablen (wie z.B. ... ) werden mitgegeben.
|
||||
# Das Skript entpackt das Backup-Archiv.
|
||||
# Das Skript löscht die bisherige Datenbank und fügt die neue Datenbank wieder ein.
|
||||
# Anschließend wird das Odoo filestore wiederhergestellt.
|
||||
run: |
|
||||
docker cp ./scripts/odoo-restore.sh ${{ github.workflow }}:/root/odoo-restore.sh
|
||||
docker exec -e ADMIN_PASSWORD=${{ secrets.ODOO_ADMIN_PASSWORD }} \
|
||||
-e sftp_host=${{ secrets.SFTP_HOST }} \
|
||||
-e sftp_user=${{ secrets.SFTP_USER }} \
|
||||
-e sftp_password=${{ secrets.SFTP_PASSWD }} \
|
||||
${{ github.workflow }} /bin/bash -c "bash /root/odoo-restore.sh '${{ env.URL_RESTORE }}'"
|
||||
#-name: Uninstall vvow_pos
|
||||
# In diesem Schritt wird das Modul `vvow_pos` deinstalliert, um sicherzustellen, dass es keine Konflikte mit der neuen Datenbank gibt.
|
||||
|
||||
- name: Clone or update custom_addons open_workshop repository
|
||||
working-directory: .
|
||||
run: |
|
||||
docker exec ${{ github.repository_owner }}_${{ env.CONTAINER_NAME }}_${{ env.CONTAINER_NAME_EXTENSION }} /bin/bash -c "
|
||||
git config --global pull.ff only && \
|
||||
if [ ! -d /home/odoo/custom_addons/open_workshop ]; then
|
||||
git clone https://gitea:${{ secrets.BUILD_ACTION }}@gitea.lan.hobbyhimmel.de/hobbyhimmel/open_workshop.git /home/odoo/custom_addons/open_workshop;
|
||||
cd /home/odoo/custom_addons/open_workshop && git fetch && git checkout ${{ env.ODOO_VERSION }}_dev && git pull;
|
||||
else
|
||||
cd /home/odoo/custom_addons/open_workshop && git fetch && git checkout ${{ env.ODOO_VERSION }}_dev && git pull;
|
||||
fi"
|
||||
|
||||
-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.
|
||||
|
||||
-name: Install open_workshop
|
||||
# Install open_workshop and run necessary migrations
|
||||
|
||||
-name: Restart Docker Container
|
||||
|
||||
-name: Uninstall vvow_einweisungen
|
||||
|
||||
- name: Stop and remove Docker container
|
||||
# Nachdem das Backup abgeschlossen ist, wird der Docker-Container gestoppt und entfernt,
|
||||
# um keine Ressourcen auf dem Host unnötig zu verbrauchen.
|
||||
run: |
|
||||
docker stop ${{ github.workflow }}
|
||||
docker rm ${{ github.workflow }}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from odoo import SUPERUSER_ID
|
||||
from odoo.api import Environment
|
||||
from . import import_machine_products
|
||||
#from . import import_machine_products
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
|
@ -31,7 +31,7 @@ def run_migration(cr, registry):
|
|||
|
||||
|
||||
|
||||
import_machine_products.run_import(cr, registry)
|
||||
#import_machine_products.run_import(cr, registry)
|
||||
|
||||
|
||||
''' Funktioniert nicht:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,79 @@
|
|||
# import_machine_products.py
|
||||
# odoo-bin shell -d deine_datenbank < import_machine_products.py
|
||||
import logging
|
||||
from odoo import api, SUPERUSER_ID
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
# Mapping von product_id > machine_id
|
||||
TRAINING_MAPPING = {
|
||||
'16':'1',
|
||||
'11':'2',
|
||||
'10':'4',
|
||||
'117':'5',
|
||||
'14':'6',
|
||||
'12':'7',
|
||||
'15':'8',
|
||||
'118':'10',
|
||||
'118':'11',
|
||||
'118':'12',
|
||||
'18':'15',
|
||||
'18':'16',
|
||||
'13':'18',
|
||||
'17':'19',
|
||||
}
|
||||
|
||||
# Mapping von product_id > machine_id
|
||||
USAGE_MAPPING = {
|
||||
'50':'1',
|
||||
'49':'2',
|
||||
'49':'3',
|
||||
'49':'4',
|
||||
'53':'5',
|
||||
'52':'7',
|
||||
'55':'8',
|
||||
'59':'15',
|
||||
'60':'15',
|
||||
'59':'16',
|
||||
'60':'16',
|
||||
'57':'18',
|
||||
'58':'19',
|
||||
}
|
||||
|
||||
def run_import(cr, registry):
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
|
||||
machine_model = env['ows.machine']
|
||||
product_model = env['product.product']
|
||||
training_model = env['ows.machine.training']
|
||||
usage_model = env['ows.machine.product']
|
||||
|
||||
created_training = 0
|
||||
created_usage = 0
|
||||
|
||||
for product_id, machine_id in TRAINING_MAPPING.items():
|
||||
machine = machine_model.search([('id', '=', machine_id)], limit=1)
|
||||
product = product_model.search([('id', '=', product_id)], limit=1)
|
||||
if machine and product:
|
||||
training_model.create({
|
||||
'machine_id': machine.id,
|
||||
'training_id': product.id,
|
||||
})
|
||||
created_training += 1
|
||||
|
||||
for product_id, machine_id in USAGE_MAPPING.items():
|
||||
machine = machine_model.search([('id', '=', machine_id)], limit=1)
|
||||
product = product_model.search([('id', '=', product_id)], limit=1)
|
||||
if machine and product:
|
||||
usage_model.create({
|
||||
'machine_id': machine.id,
|
||||
'product_id': product.id,
|
||||
})
|
||||
created_usage += 1
|
||||
|
||||
_logger.info(f"[OWS Import] ✅ Trainings-Zuordnungen erstellt: {created_training}, Nutzungs-Zuordnungen erstellt: {created_usage}")
|
||||
env.cr.commit()
|
||||
|
||||
# Automatischer Start in odoo-bin shell
|
||||
if 'env' in globals():
|
||||
run_import(env.cr, env.registry)
|
||||
34
scripts/odoo-restore.sh
Normal file
34
scripts/odoo-restore.sh
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
BACKUP_DIR=~ # Verzeichnis, in dem das Backup temporär gespeichert wird.
|
||||
#MONITOR_URL='https://cronitor.link/p/c6debfe4e00f46fe9eb430ab9d2b2588/7PPIpd' # Cronitor-URL zur Überwachung des Skriptstatus.
|
||||
ODOO_DATABASE=hobbyhimmel # Der Name der Odoo-Datenbank, die wiederhergestellt werden soll.
|
||||
DEFAULT_URL="http://hobbybackend2.fritz.box:9013" # Standard-URL für die Odoo-Datenbank-Backup-API.
|
||||
URL="${1:-$DEFAULT_URL}" # Falls ein Argument übergeben wird, wird es als URL genutzt, sonst bleibt die Standard-URL.
|
||||
BACKUP_NAME=${ODOO_DATABASE}.$(date +%F).zip # Der Name der Backup-Datei, wobei das aktuelle Datum an den Namen angehängt wird.
|
||||
|
||||
# Function to report failure to Cronitor with step
|
||||
# Diese Funktion meldet einen Fehler an Cronitor und beendet das Skript.
|
||||
# Parameter: $1 - Der Schrittname, der beim Fehlschlag gemeldet wird.
|
||||
report_failure() {
|
||||
local step=$1 # Schrittname wird als erster Parameter übergeben.
|
||||
#curl "$MONITOR_URL?state=fail&message=$step" # Meldet den Fehlerstatus an Cronitor.
|
||||
exit 1 # Beendet das Skript mit Exit-Code 1 (Fehler).
|
||||
}
|
||||
|
||||
|
||||
curl -X POST -s \
|
||||
-F "master_pwd=${ADMIN_PASSWORD}" \
|
||||
-F "name=${ODOO_DATABASE}" \
|
||||
${URL}/web/database/drop || report_failure "Database deletion"
|
||||
|
||||
curl \
|
||||
-F "master_pwd=${ADMIN_PASSWORD}" \
|
||||
-F "name=${ODOO_DATABASE}" \
|
||||
-F "backup_file=@${BACKUP_DIR}/${BACKUP_NAME}" \
|
||||
-F "backup_format=zip" \
|
||||
-F "copy=true" \
|
||||
${URL}/web/database/restore || report_failure "Database restoration"
|
||||
|
||||
# If everything was successful, report completion
|
||||
# Meldet den erfolgreichen Abschluss des Skripts an Cronitor.
|
||||
#curl "$MONITOR_URL?state=complete"
|
||||
Loading…
Reference in New Issue
Block a user