Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package orthos2 for openSUSE:Factory checked in at 2023-05-04 17:10:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/orthos2 (Old) and /work/SRC/openSUSE:Factory/.orthos2.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "orthos2" Thu May 4 17:10:28 2023 rev:6 rq:1084715 version:1.2.169+git.a693485 Changes: -------- --- /work/SRC/openSUSE:Factory/orthos2/orthos2.changes 2023-03-25 18:55:51.282820227 +0100 +++ /work/SRC/openSUSE:Factory/.orthos2.new.1533/orthos2.changes 2023-05-04 17:10:46.964438100 +0200 @@ -1,0 +2,20 @@ +Thu May 04 13:39:53 UTC 2023 - tr...@suse.de + +- Update to version 1.2.169+git.a693485: + * fix: run isort on remaining files + * fix: Remove unsupported cobbler_server from django admin panel + +------------------------------------------------------------------- +Wed May 03 13:49:46 UTC 2023 - laurin.fael...@suse.com + +- Update to version 1.2.166+git.1eaf582: + * Refactor Domain-CobblerServer relationship to 0:1 + * Fix circular import (#201) + * IPv4 and IPv6 internal machine object attribute needs updating when moving domain + * Use get on clean_data dictionary and consistently remove self when using the variable + * ci: Add isort linter to github actions + * fix: Run isort for more idiomatic imports + * Add architecture validation to machine admin panel + * Implement naive FQDN Change + +------------------------------------------------------------------- Old: ---- orthos2-1.2.154+git.40b86d2.obscpio New: ---- orthos2-1.2.169+git.a693485.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ orthos2.spec ++++++ --- /var/tmp/diff_new_pack.btdVvT/_old 2023-05-04 17:10:47.724442550 +0200 +++ /var/tmp/diff_new_pack.btdVvT/_new 2023-05-04 17:10:47.732442597 +0200 @@ -12,7 +12,7 @@ # Please submit bugfixes or comments via https://bugs.opensuse.org/ Name: orthos2 -Version: 1.2.154+git.40b86d2 +Version: 1.2.169+git.a693485 Release: 0 Summary: Machine administration Url: https://github.com/openSUSE/orthos2 ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.btdVvT/_old 2023-05-04 17:10:47.788442925 +0200 +++ /var/tmp/diff_new_pack.btdVvT/_new 2023-05-04 17:10:47.792442948 +0200 @@ -3,6 +3,6 @@ <param name="url">git://github.com/openSUSE/orthos2.git</param> <param name="changesrevision">f0a52a1538932125ce7b208da99ed73f08955ea0</param></service><service name="tar_scm"> <param name="url">https://github.com/openSUSE/orthos2.git</param> - <param name="changesrevision">40b86d2e9a98629b5745f842f2f43a80ba41947f</param></service></servicedata> + <param name="changesrevision">a693485533889750f553759487e456d86799c6c2</param></service></servicedata> (No newline at EOF) ++++++ orthos2-1.2.154+git.40b86d2.obscpio -> orthos2-1.2.169+git.a693485.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/.github/workflows/lint.yml new/orthos2-1.2.169+git.a693485/.github/workflows/lint.yml --- old/orthos2-1.2.154+git.40b86d2/.github/workflows/lint.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/.github/workflows/lint.yml 2023-05-04 15:32:01.000000000 +0200 @@ -0,0 +1,20 @@ +name: Lint +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + isort: + name: isort + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: 3.6 + - uses: isort/isort-action@master + with: + requirementsFiles: "pyproject.toml" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/dmesg.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/dmesg.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/dmesg.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/dmesg.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = "if [ -e /var/log/boot.msg ]; then cat /var/log/boot.msg; else journalctl -xl | head -n200; fi" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/dmidecode.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/dmidecode.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/dmidecode.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/dmidecode.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = ["dmidecode"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/hwinfo.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/hwinfo.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/hwinfo.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/hwinfo.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = ["hwinfo"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/last.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/last.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/last.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/last.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = "last | grep -v reboot | head -n 1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lsmod.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lsmod.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lsmod.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lsmod.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = ["lsmod"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lspci.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lspci.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lspci.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lspci.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = ["lspci"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lsscsi.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lsscsi.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lsscsi.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lsscsi.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = ["lsscsi", "-s"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lsusb.fact new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lsusb.fact --- old/orthos2-1.2.154+git.40b86d2/ansible/roles/add_custom_facts/files/facts.d/lsusb.fact 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/ansible/roles/add_custom_facts/files/facts.d/lsusb.fact 2023-05-04 15:32:01.000000000 +0200 @@ -4,7 +4,6 @@ import subprocess import sys - data = dict() command = ["lsusb"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/docs/conf.py new/orthos2-1.2.169+git.a693485/docs/conf.py --- old/orthos2-1.2.154+git.40b86d2/docs/conf.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/docs/conf.py 2023-05-04 15:32:01.000000000 +0200 @@ -12,6 +12,7 @@ # import os import sys + sys.path.insert(0, os.path.abspath('..')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/__init__.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/__init__.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/__init__.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/__init__.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,22 +1,22 @@ -from orthos2.api.commands.base import BaseAPIView, get_machine, getException +from orthos2.api.commands.add import (AddAnnotationCommand, AddBMCCommand, + AddCommand, AddMachineCommand, + AddRemotePowerCommand, + AddRemotePowerDeviceCommand, + AddSerialConsoleCommand, AddVMCommand) +from orthos2.api.commands.delete import (DeleteCommand, DeleteMachineCommand, + DeleteRemotePowerCommand, + DeleteRemotePowerDeviceCommand, + DeleteSerialConsoleCommand) from orthos2.api.commands.info import InfoCommand +from orthos2.api.commands.power import PowerCommand from orthos2.api.commands.query import QueryCommand -from orthos2.api.commands.reserve import ReserveCommand +from orthos2.api.commands.regenerate import RegenerateCommand from orthos2.api.commands.release import ReleaseCommand -from orthos2.api.commands.reservationhistory import ReservationHistoryCommand from orthos2.api.commands.rescan import RescanCommand -from orthos2.api.commands.regenerate import RegenerateCommand +from orthos2.api.commands.reservationhistory import ReservationHistoryCommand +from orthos2.api.commands.reserve import ReserveCommand from orthos2.api.commands.serverconfig import ServerConfigCommand from orthos2.api.commands.setup import SetupCommand -from orthos2.api.commands.power import PowerCommand -from orthos2.api.commands.add import (AddCommand, AddVMCommand, AddMachineCommand, - AddSerialConsoleCommand, AddAnnotationCommand, - AddRemotePowerCommand, AddBMCCommand, - AddRemotePowerDeviceCommand) -from orthos2.api.commands.delete import (DeleteCommand, DeleteMachineCommand, - DeleteSerialConsoleCommand, DeleteRemotePowerCommand, - DeleteRemotePowerDeviceCommand) - __all__ = [ 'InfoCommand', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/add.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/add.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/add.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/add.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,19 +1,19 @@ import json import logging -from django.urls import re_path from django.contrib.auth.models import AnonymousUser from django.http import HttpResponseRedirect, JsonResponse from django.shortcuts import redirect, reverse +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine -from orthos2.api.forms import (AnnotationAPIForm, BMCAPIForm, MachineAPIForm, RemotePowerAPIForm, - RemotePowerDeviceAPIForm, SerialConsoleAPIForm, - VirtualMachineAPIForm) +from orthos2.api.commands.base import BaseAPIView, get_machine +from orthos2.api.forms import (AnnotationAPIForm, BMCAPIForm, MachineAPIForm, + RemotePowerAPIForm, RemotePowerDeviceAPIForm, + SerialConsoleAPIForm, VirtualMachineAPIForm) from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, - InfoMessage, InputSerializer, Message, - Serializer) -from orthos2.data.models import (Annotation, BMC, Machine, RemotePower, + InfoMessage, InputSerializer, + Message, Serializer) +from orthos2.data.models import (BMC, Annotation, Machine, RemotePower, RemotePowerDevice, SerialConsole) from orthos2.utils.misc import add_offset_to_date, format_cli_form_errors diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/base.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/base.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/base.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/base.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,5 +1,5 @@ -import sys import linecache +import sys from django.shortcuts import redirect from rest_framework.views import APIView diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/delete.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/delete.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/delete.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/delete.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,16 +1,18 @@ import json import logging -from django.urls import re_path from django.contrib.auth.models import AnonymousUser from django.http import JsonResponse from django.shortcuts import redirect, reverse +from django.urls import re_path -from orthos2.api.commands import BaseAPIView +from orthos2.api.commands.base import BaseAPIView from orthos2.api.forms import (DeleteMachineAPIForm, DeleteRemotePowerAPIForm, - DeleteRemotePowerDeviceAPIForm, DeleteSerialConsoleAPIForm) -from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, InputSerializer) -from orthos2.data.models import (Machine, RemotePowerDevice) + DeleteRemotePowerDeviceAPIForm, + DeleteSerialConsoleAPIForm) +from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, + InputSerializer) +from orthos2.data.models import Machine, RemotePowerDevice from orthos2.utils.misc import format_cli_form_errors logger = logging.getLogger('api') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/info.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/info.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/info.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/info.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,7 +1,7 @@ -from django.urls import re_path from django.http import HttpResponseRedirect, JsonResponse +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine, getException +from orthos2.api.commands.base import BaseAPIView, get_machine, getException from orthos2.api.serializers.machine import MachineSerializer from orthos2.api.serializers.misc import ErrorMessage, Serializer from orthos2.data.models import Machine diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/power.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/power.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/power.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/power.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,8 +1,8 @@ -from django.urls import re_path from django.contrib.auth.models import AnonymousUser from django.http import HttpResponseRedirect +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine +from orthos2.api.commands.base import BaseAPIView, get_machine from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, Message, Serializer) from orthos2.data.models import RemotePower diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/query.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/query.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/query.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/query.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,9 +1,9 @@ import json -from django.urls import re_path from django.http import JsonResponse +from django.urls import re_path -from orthos2.api.commands import BaseAPIView +from orthos2.api.commands.base import BaseAPIView from orthos2.api.models import APIQuery from orthos2.api.serializers.misc import ErrorMessage, InfoMessage diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/regenerate.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/regenerate.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/regenerate.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/regenerate.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,15 +1,15 @@ -from django.urls import re_path from django.contrib.auth.models import AnonymousUser from django.http import HttpResponseRedirect +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine +from orthos2.api.commands.base import BaseAPIView, get_machine from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, Message, Serializer) -from orthos2.data.signals import (signal_cobbler_regenerate, - signal_serialconsole_regenerate, - signal_cobbler_machine_update) -from orthos2.utils.misc import get_hostname, get_domain from orthos2.data.models import Domain, Machine +from orthos2.data.signals import (signal_cobbler_machine_update, + signal_cobbler_regenerate, + signal_serialconsole_regenerate) +from orthos2.utils.misc import get_domain, get_hostname class RegenerateCommand(BaseAPIView): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/release.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/release.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/release.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/release.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,8 +1,8 @@ -from django.urls import re_path from django.contrib.auth.models import AnonymousUser from django.http import HttpResponseRedirect +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine +from orthos2.api.commands.base import BaseAPIView, get_machine from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, Message, Serializer) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/rescan.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/rescan.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/rescan.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/rescan.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,10 +1,11 @@ -from django.urls import re_path from django.http import HttpResponseRedirect +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine -from orthos2.api.serializers.misc import ErrorMessage, InfoMessage, Message, Serializer -from orthos2.taskmanager.tasks.machinetasks import MachineCheck +from orthos2.api.commands.base import BaseAPIView, get_machine +from orthos2.api.serializers.misc import (ErrorMessage, InfoMessage, Message, + Serializer) from orthos2.taskmanager.tasks.daily import DailyMachineChecks +from orthos2.taskmanager.tasks.machinetasks import MachineCheck class RescanCommand(BaseAPIView): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/reservationhistory.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/reservationhistory.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/reservationhistory.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/reservationhistory.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,7 +1,7 @@ -from django.urls import re_path from django.http import HttpResponseRedirect, JsonResponse +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine +from orthos2.api.commands.base import BaseAPIView, get_machine from orthos2.api.serializers.misc import ErrorMessage, InfoMessage, Serializer from orthos2.data.models import ReservationHistory diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/reserve.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/reserve.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/reserve.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/reserve.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,16 +1,16 @@ import datetime import json -from django.urls import re_path from django.contrib.auth.models import AnonymousUser, User from django.http import HttpResponseRedirect +from django.urls import re_path -from orthos2.utils.misc import add_offset_to_date, format_cli_form_errors -from orthos2.api.commands import BaseAPIView, get_machine +from orthos2.api.commands.base import BaseAPIView, get_machine from orthos2.api.forms import ReserveMachineAPIForm from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, InputSerializer, Message, Serializer) from orthos2.data.models import Machine +from orthos2.utils.misc import add_offset_to_date, format_cli_form_errors class ReserveCommand(BaseAPIView): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/serverconfig.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/serverconfig.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/serverconfig.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/serverconfig.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,8 +1,8 @@ -from django.urls import re_path from django.contrib.auth.models import AnonymousUser from django.http import JsonResponse +from django.urls import re_path -from orthos2.api.commands import BaseAPIView +from orthos2.api.commands.base import BaseAPIView from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, InfoMessage) from orthos2.data.models import ServerConfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/setup.py new/orthos2-1.2.169+git.a693485/orthos2/api/commands/setup.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/commands/setup.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/commands/setup.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,10 +1,10 @@ import logging -from django.urls import re_path from django.contrib.auth.models import AnonymousUser from django.http import HttpResponseRedirect, JsonResponse +from django.urls import re_path -from orthos2.api.commands import BaseAPIView, get_machine +from orthos2.api.commands.base import BaseAPIView, get_machine from orthos2.api.serializers.misc import (AuthRequiredSerializer, ErrorMessage, InfoMessage, Message, Serializer) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/forms.py new/orthos2-1.2.169+git.a693485/orthos2/api/forms.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/forms.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/forms.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,21 +1,21 @@ import logging from django import forms -from django.forms.models import ModelChoiceIteratorValue from django.forms import inlineformset_factory from django.forms.fields import (BooleanField, CharField, ChoiceField, DateField, DecimalField, IntegerField) +from django.forms.models import ModelChoiceIteratorValue from django.template.defaultfilters import slugify -from orthos2.data.models import (Architecture, Enclosure, Machine, MachineGroup, - NetworkInterface, RemotePower, SerialConsole, - System, RemotePowerDevice, SerialConsoleType, +from orthos2.data.models import (Architecture, Enclosure, Machine, + MachineGroup, NetworkInterface, RemotePower, + RemotePowerDevice, SerialConsole, + SerialConsoleType, System, is_unique_mac_address, validate_dns, validate_mac_address) from orthos2.data.models.domain import validate_domain_ending from orthos2.frontend.forms import ReserveMachineForm, VirtualMachineForm - logger = logging.getLogger('api') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/models.py new/orthos2-1.2.169+git.a693485/orthos2/api/models.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/models.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/models.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,16 +1,16 @@ import logging import re -from django.core.exceptions import (FieldDoesNotExist, - MultipleObjectsReturned) +from django.core.exceptions import FieldDoesNotExist, MultipleObjectsReturned from django.db.models import Field, Q from django.db.models.functions import Length from orthos2.api.lookups import NotEqual from orthos2.data.models import (Annotation, Architecture, Domain, Enclosure, - Installation, Machine, MachineGroup, NetworkInterface, - PCIDevice, Platform, RemotePower, SerialConsole, - SerialConsoleType, System, User, Vendor) + Installation, Machine, MachineGroup, + NetworkInterface, PCIDevice, Platform, + RemotePower, SerialConsole, SerialConsoleType, + System, User, Vendor) logger = logging.getLogger('api') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/serializers/bmc.py new/orthos2-1.2.169+git.a693485/orthos2/api/serializers/bmc.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/serializers/bmc.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/serializers/bmc.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,4 +1,5 @@ from rest_framework import serializers + from orthos2.data.models import BMC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/api/serializers/machine.py new/orthos2-1.2.169+git.a693485/orthos2/api/serializers/machine.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/api/serializers/machine.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/api/serializers/machine.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,10 +1,11 @@ from rest_framework import serializers from orthos2.data.models import Machine + from .annotation import AnnotationSerializer +from .bmc import BMCSerializer from .installation import InstallationSerializer from .networkinterface import NetworkInterfaceSerializer -from .bmc import BMCSerializer class NetworkInterfaceListingField(NetworkInterfaceSerializer): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/admin.py new/orthos2-1.2.169+git.a693485/orthos2/data/admin.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/admin.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/admin.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,21 +1,21 @@ from django import forms -from django.urls import re_path from django.contrib import admin, messages from django.contrib.admin.templatetags.admin_list import _boolean_icon from django.core.exceptions import ValidationError from django.db.models import Q from django.shortcuts import redirect -from django.urls import reverse +from django.urls import re_path, reverse from django.utils.html import format_html -from orthos2.utils.remotepowertype import RemotePowerType from orthos2.api.forms import RemotePowerDeviceAPIForm +from orthos2.utils.remotepowertype import RemotePowerType -from .models import (Annotation, Architecture, BMC, Domain, Enclosure, - Machine, MachineGroup, MachineGroupMembership, DomainAdmin, - NetworkInterface, Platform, RemotePower, RemotePowerDevice, - SerialConsole, SerialConsoleType, ServerConfig, System, Vendor, - is_unique_mac_address, validate_mac_address) +from .models import (BMC, Annotation, Architecture, Domain, DomainAdmin, + Enclosure, Machine, MachineGroup, MachineGroupMembership, + NetworkInterface, Platform, RemotePower, + RemotePowerDevice, SerialConsole, SerialConsoleType, + ServerConfig, System, Vendor, is_unique_mac_address, + validate_mac_address) class BMCInlineFormset(forms.models.BaseInlineFormSet): @@ -101,7 +101,8 @@ port, dev.fence_name)) else: if port: - raise forms.ValidationError("Fence {} needs no port, please leave emtpy".format(fence.fence)) + raise forms.ValidationError( + "Fence {} needs no port, please leave emtpy".format(fence.fence)) class RemotePowerInlineRpower(admin.StackedInline): @@ -238,8 +239,6 @@ fqdn = self.cleaned_data['fqdn'] if hasattr(self, 'machine'): - if fqdn != self.machine.fqdn: - raise ValidationError("Machines must not be renamed. Delete and add them if needed") # We do not reach below check, but we do if we would allow renaming at some point if Machine.objects.filter(fqdn=fqdn).exclude(pk=self.machine.pk): raise ValidationError("FQDN is already in use!") @@ -255,8 +254,8 @@ """ cleaned_data = self.cleaned_data - check_connectivity = cleaned_data['check_connectivity'] - collect_system_information = cleaned_data['collect_system_information'] + check_connectivity = cleaned_data.get('check_connectivity') + collect_system_information = cleaned_data.get('collect_system_information') if collect_system_information and check_connectivity != Machine.Connectivity.ALL: self.add_error( @@ -264,27 +263,30 @@ "Connectivity check must set to 'Full'" ) - hypervisor = self.cleaned_data.get('hypervisor') - system = self.cleaned_data.get('system') + hypervisor = cleaned_data.get('hypervisor') + system = cleaned_data.get('system') if hypervisor and System.objects.filter(name=system, virtual=False): - self.add_error('system', "System type is not virtual. Only Virtual Machines may have a hypervisor") + self.add_error( + 'system', "System type is not virtual. Only Virtual Machines may have a hypervisor") self.add_error('hypervisor', "System type {} is not virtual. Only Virtual Machines may have " "a hypervisor".format(system)) - vm_dedicated_host = self.cleaned_data.get('vm_dedicated_host') + vm_dedicated_host = cleaned_data.get('vm_dedicated_host') if vm_dedicated_host and System.objects.filter(name=system, allowHypervisor=False): self.add_error('system', "System type cannot serve as a hypervisor") self.add_error('vm_dedicated_host', "System cannot be set as dedicated VM host") - mac = self.cleaned_data.get('mac_address') - unknown_mac = self.cleaned_data.get('unknown_mac') + mac = cleaned_data.get('mac_address') + unknown_mac = cleaned_data.get('unknown_mac') if mac and unknown_mac: self.add_error('unknown_mac', "MAC unknown must not be selected when a MAC is provided") self.add_error('mac_address', "MAC unknown must not be selected when a MAC is provided") if not mac and not unknown_mac: - self.add_error('unknown_mac', "Either specify a MAC, or confirm that the MAC is not yet known") - self.add_error('mac_address', "Either specify a MAC, or confirm that the MAC is not yet known") + self.add_error( + 'unknown_mac', "Either specify a MAC, or confirm that the MAC is not yet known") + self.add_error( + 'mac_address', "Either specify a MAC, or confirm that the MAC is not yet known") return cleaned_data @@ -571,16 +573,14 @@ ) # enables nifty unobtrusive JavaScript âfilterâ interface filter_horizontal = ( - 'cobbler_server', 'supported_architectures', ) inlines = (ArchsInline, ) def cobbler_server_list(self, obj): - """Return DHCP server list as string.""" - if obj.cobbler_server.all().count() == 0: - return '-' - return ', '.join([cobbler_server.fqdn for cobbler_server in obj.cobbler_server.all()]) + """Return DHCP server FQDN as string.""" + cobbler_server = obj.cobbler_server + return cobbler_server.fqdn if cobbler_server else '-' def delete_model(self, request, obj=None): try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/management/commands/dump_db.py new/orthos2-1.2.169+git.a693485/orthos2/data/management/commands/dump_db.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/management/commands/dump_db.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/management/commands/dump_db.py 2023-05-04 15:32:01.000000000 +0200 @@ -6,7 +6,7 @@ from django.core.management.base import BaseCommand from orthos2.data.models.domain import Domain, DomainAdmin -from orthos2.data.models.machine import Machine, Enclosure, NetworkInterface +from orthos2.data.models.machine import Enclosure, Machine, NetworkInterface from orthos2.taskmanager.models import DailyTask USAGE = """ @@ -110,8 +110,8 @@ self.add_machine(d_obj.tftp_server.fqdn) if d_obj.cscreen_server: self.add_machine(d_obj.cscreen_server.fqdn) - if d_obj.cobbler_server and len(d_obj.cobbler_server.all()): - self.add_machine(d_obj.cobbler_server.all()[0].fqdn) + if d_obj.cobbler_server: + self.add_machine(d_obj.cobbler_server.fqdn) query = Domain.objects.filter(name=d_obj) self.queries.extend(query) @@ -135,7 +135,7 @@ for item in query: item.tftp_server = None item.cscreen_server = None - item.cobbler_server.set([]) + item.cobbler_server = None self.queries.extend(query) self.add_machine("markeb.arch.suse.de") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/__init__.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/__init__.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/__init__.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/__init__.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,20 +1,20 @@ -from .machine import * # noqa: F403 -from .enclosure import * # noqa: F403 -from .architecture import * # noqa: F403 -from .domain import * # noqa: F403 -from .platform import * # noqa: F403 -from .system import * # noqa: F403 -from .serverconfig import * # noqa: F403 -from .installation import * # noqa: F403 -from .vendor import * # noqa: F403 -from .networkinterface import * # noqa: F403 -from .reservationhistory import * # noqa: F403 -from .serialconsole import * # noqa: F403 -from .remotepower import * # noqa: F403 -from .machinegroup import MachineGroup, MachineGroupMembership +from .annotation import Annotation +from .architecture import * # noqa: F403 +from .bmc import * # noqa: F403 from .component import Component from .components.pci import PCIDevice -from .annotation import Annotation -from .virtualizationapi import * # noqa: F403 -from .bmc import * # noqa: F403 -from .remotepowerdevice import * # noqa: F403 +from .domain import * # noqa: F403 +from .enclosure import * # noqa: F403 +from .installation import * # noqa: F403 +from .machine import * # noqa: F403 +from .machinegroup import MachineGroup, MachineGroupMembership +from .networkinterface import * # noqa: F403 +from .platform import * # noqa: F403 +from .remotepower import * # noqa: F403 +from .remotepowerdevice import * # noqa: F403 +from .reservationhistory import * # noqa: F403 +from .serialconsole import * # noqa: F403 +from .serverconfig import * # noqa: F403 +from .system import * # noqa: F403 +from .vendor import * # noqa: F403 +from .virtualizationapi import * # noqa: F403 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/bmc.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/bmc.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/bmc.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/bmc.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,6 +1,7 @@ from django.db import models from orthos2.utils.remotepowertype import get_remote_power_type_choices + from .machine import Machine diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/domain.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/domain.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/domain.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/domain.py 2023-05-04 15:32:01.000000000 +0200 @@ -4,6 +4,7 @@ from django.core.exceptions import ValidationError from django.db import models from django.template import Context, Template + from orthos2.utils.misc import has_valid_domain_ending from .architecture import Architecture @@ -35,11 +36,13 @@ validators=[validate_domain_ending] ) - cobbler_server = models.ManyToManyField( + cobbler_server = models.ForeignKey( 'data.Machine', related_name='cobbler_server_for', verbose_name='Cobbler server', + null=True, blank=True, + on_delete=models.SET_NULL, limit_choices_to={'administrative': True} ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/machine.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/machine.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/machine.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/machine.py 2023-05-04 15:32:01.000000000 +0200 @@ -6,21 +6,21 @@ from django.conf import settings from django.contrib.auth.models import User from django.core import serializers -from django.core.exceptions import (PermissionDenied, ValidationError, ObjectDoesNotExist) +from django.core.exceptions import (ObjectDoesNotExist, PermissionDenied, + ValidationError) from django.db import models from django.db.models import Q from django.utils import timezone -from orthos2.utils.misc import (Serializer, get_domain, get_hostname, - get_ipv4, get_ipv6, get_s390_hostname, - is_dns_resolvable) - from orthos2.data.exceptions import ReleaseException, ReserveException +from orthos2.utils.misc import (Serializer, get_domain, get_hostname, get_ipv4, + get_ipv6, get_s390_hostname, is_dns_resolvable) + from .architecture import Architecture from .domain import Domain, DomainAdmin, validate_domain_ending from .enclosure import Enclosure from .machinegroup import MachineGroup -from .networkinterface import validate_mac_address, NetworkInterface +from .networkinterface import NetworkInterface, validate_mac_address from .platform import Platform from .system import System from .virtualizationapi import VirtualizationAPI @@ -699,8 +699,23 @@ update_sconsole = True if self.fqdn_domain != self._original.fqdn_domain: - raise NotImplementedError( - "Moving machines between domains is not implemented yet") + logger.info(f"Domain change for: %s", self.fqdn) + # TODO: add error handling (checking whether the signal went through) + # Not removing the machine from the original Cobbler system, because there is no easy remove signal + # and it's probably not even necessary + # Add the machine to the new Cobbler system + # TODO: check if machine is known to us, and also a cobbler server + new_domain_id = self.fqdn_domain.pk + self.__ipv4 = get_ipv4(self.fqdn) + self.__ipv6 = get_ipv6(self.fqdn) + from orthos2.data.signals import signal_cobbler_machine_update + signal_cobbler_machine_update.send( + sender=self.__class__, machine_id=self.pk, domain_id=new_domain_id) + + # Sync DHCP on the new domain + from orthos2.data.signals import signal_cobbler_sync_dhcp + signal_cobbler_sync_dhcp.send(sender=self.__class__, domain_id=new_domain_id) + return if update_machine: from orthos2.data.signals import signal_cobbler_machine_update @@ -711,6 +726,7 @@ sender=self.__class__, domain_id=domain_id, machine_id=machine_id) if sync_dhcp: from orthos2.data.signals import signal_cobbler_sync_dhcp + # regenerate DHCP on all domains (deletion/registration) if domain changed domain_id = self.fqdn_domain.pk signal_cobbler_sync_dhcp.send(sender=self.__class__, domain_id=domain_id) @@ -750,7 +766,7 @@ is_administrative.boolean = True def is_cobbler_server(self): - return self.domain_set.all().exists() + return self.cobbler_server_for.exists() is_cobbler_server.boolean = True def is_virtual_machine(self): @@ -1114,8 +1130,8 @@ def scan(self, action='all', user=None): """Start scanning/checking the machine by creating a task.""" from orthos2.taskmanager import tasks - from orthos2.taskmanager.tasks.ansible import Ansible from orthos2.taskmanager.models import TaskManager + from orthos2.taskmanager.tasks.ansible import Ansible if action.lower() not in tasks.MachineCheck.Scan.Action.as_list: raise Exception("Unknown scan option '{}'!".format(action)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/remotepower.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/remotepower.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/remotepower.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/remotepower.py 2023-05-04 15:32:01.000000000 +0200 @@ -3,7 +3,9 @@ from django.core.exceptions import ValidationError from django.db import models -from orthos2.utils.remotepowertype import RemotePowerType, get_remote_power_type_choices +from orthos2.utils.remotepowertype import (RemotePowerType, + get_remote_power_type_choices) + from . import ServerConfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/remotepowerdevice.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/remotepowerdevice.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/remotepowerdevice.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/remotepowerdevice.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,7 +1,8 @@ -from django.db import models from django.core.exceptions import ObjectDoesNotExist +from django.db import models from orthos2.utils.remotepowertype import get_remote_power_type_choices + from . import ServerConfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/system.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/system.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/system.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/system.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,4 +1,5 @@ from django.db import models + from orthos2.utils.misc import safe_get_or_default diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/virtualizationapi.py new/orthos2-1.2.169+git.a693485/orthos2/data/models/virtualizationapi.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/models/virtualizationapi.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/models/virtualizationapi.py 2023-05-04 15:32:01.000000000 +0200 @@ -80,10 +80,12 @@ Method returns a new `Machine` object and calls the subclass to actually create the virtual machine physically. """ - from orthos2.data.models import (Architecture, Machine, RemotePower, - SerialConsole, SerialConsoleType, System) from django.contrib.auth.models import User + from orthos2.data.models import (Architecture, Machine, RemotePower, + SerialConsole, SerialConsoleType, + System) + vm = Machine() vm.unsaved_networkinterfaces = [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/scripts/dump_test_db.py new/orthos2-1.2.169+git.a693485/orthos2/data/scripts/dump_test_db.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/scripts/dump_test_db.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/scripts/dump_test_db.py 2023-05-04 15:32:01.000000000 +0200 @@ -3,8 +3,9 @@ import os from django.apps import apps + from orthos2.data.models.domain import Domain, DomainAdmin -from orthos2.data.models.machine import Machine, Enclosure, NetworkInterface +from orthos2.data.models.machine import Enclosure, Machine, NetworkInterface from orthos2.taskmanager.models import DailyTask USAGE = """ @@ -40,7 +41,8 @@ Modules = {} # General also includes taskmanager.dailytask and basic arch.suse.de domain -Modules['general'] = ("Serverconfig", "System", "Architecture", "Vendor", "Platform", "Serialconsoletype") +Modules['general'] = ("Serverconfig", "System", "Architecture", + "Vendor", "Platform", "Serialconsoletype") Modules['domain'] = ("Domain", "Domainadmin") @@ -99,8 +101,8 @@ add_machine(d_obj.tftp_server.fqdn, queries) if d_obj.cscreen_server: add_machine(d_obj.cscreen_server.fqdn, queries) - if d_obj.cobbler_server and len(d_obj.cobbler_server.all()): - add_machine(d_obj.cobbler_server.all()[0].fqdn, queries) + if d_obj.cobbler_server: + add_machine(d_obj.cobbler_server.fqdn, queries) query = Domain.objects.filter(name=d_obj) queries.extend(query) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/signals.py new/orthos2-1.2.169+git.a693485/orthos2/data/signals.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/signals.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/signals.py 2023-05-04 15:32:01.000000000 +0200 @@ -6,12 +6,15 @@ from django.db.models.signals import (post_delete, post_init, post_save, pre_delete, pre_save) from django.dispatch import Signal, receiver + from orthos2.taskmanager import tasks from orthos2.taskmanager.models import TaskManager -from orthos2.utils.misc import (Serializer, get_hostname) from orthos2.utils.cobbler import CobblerServer +from orthos2.utils.misc import Serializer, get_hostname + +from .models import (Machine, NetworkInterface, SerialConsole, ServerConfig, + is_unique_mac_address) -from .models import (Machine, NetworkInterface, SerialConsole, ServerConfig, is_unique_mac_address) logger = logging.getLogger('orthos') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/data/templates/admin/data/machine/change_form.html new/orthos2-1.2.169+git.a693485/orthos2/data/templates/admin/data/machine/change_form.html --- old/orthos2-1.2.154+git.40b86d2/orthos2/data/templates/admin/data/machine/change_form.html 1970-01-01 01:00:00.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/data/templates/admin/data/machine/change_form.html 2023-05-04 15:32:01.000000000 +0200 @@ -0,0 +1,37 @@ +{% extends 'admin/change_form.html' %} + +{% block extrahead %} +<script> + document.addEventListener('DOMContentLoaded', function () { + const architectureSystemMapping = { + 's390x': ['zVM', 'zKVM', 'LPAR zSeries'], + 'x86_64': ['BareMetal', 'KVM', 'XEN'] + }; + + function filterSystems() { + const architectureSelect = document.getElementById('id_architecture'); + const systemSelect = document.getElementById('id_system'); + const selectedSystem = systemSelect.options[systemSelect.selectedIndex].text; + const selectedArchitecture = architectureSelect.options[architectureSelect.selectedIndex].text; + const allowedSystems = architectureSystemMapping[selectedArchitecture] || []; + + if (!allowedSystems.includes(selectedSystem)) { + systemSelect.selectedIndex = 0; + } + + for (let i = 0; i < systemSelect.options.length; i++) { + const systemOption = systemSelect.options[i]; + if (allowedSystems.length === 0 || allowedSystems.includes(systemOption.text)) { + systemOption.style.display = 'block'; + systemOption.disabled = false; + } else { + systemOption.disabled = true; + } + } + } + + document.getElementById('id_architecture').addEventListener('change', filterSystems); + filterSystems(); + }); +</script> +{% endblock %} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/ajax.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/ajax.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/ajax.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/ajax.py 2023-05-04 15:32:01.000000000 +0200 @@ -4,8 +4,8 @@ from django.http import JsonResponse from django.template.defaultfilters import urlize -from orthos2.frontend.templatetags.tags import vm_record from orthos2.data.models import Annotation, Machine, RemotePower +from orthos2.frontend.templatetags.tags import vm_record from .decorators import check_permissions diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/forms.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/forms.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/forms.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/forms.py 2023-05-04 15:32:01.000000000 +0200 @@ -8,8 +8,8 @@ from django.utils import timezone from django.utils.formats import date_format -from orthos2.data.models import (Installation, Machine, Platform, - ServerConfig, System, Vendor) +from orthos2.data.models import (Installation, Machine, Platform, ServerConfig, + System, Vendor) logger = logging.getLogger('views') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/management/commands/serialconsole-ws.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/management/commands/serialconsole-ws.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/management/commands/serialconsole-ws.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/management/commands/serialconsole-ws.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,4 +1,5 @@ import sys + try: from ptyprocess import PtyProcessUnicode from terminado import TermSocket, UniqueTermManager diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/admin/test_machine.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/admin/test_machine.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/admin/test_machine.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/admin/test_machine.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,5 +1,4 @@ from django.test import TestCase - from django_webtest import WebTest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/admin/test_machine_views.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/admin/test_machine_views.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/admin/test_machine_views.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/admin/test_machine_views.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,5 +1,4 @@ import mock - from django.urls import reverse from django_webtest import WebTest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/user/test_ldap.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/user/test_ldap.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/user/test_ldap.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/user/test_ldap.py 2023-05-04 15:32:01.000000000 +0200 @@ -6,6 +6,7 @@ from django.urls import reverse from django_webtest import WebTest + from orthos2.data.models.serverconfig import ServerConfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/user/test_restore_password.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/user/test_restore_password.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/tests/user/test_restore_password.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/tests/user/test_restore_password.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,6 +1,7 @@ from django.contrib.auth.models import User from django.urls import reverse from django_webtest import WebTest + from orthos2.taskmanager.models import SingleTask diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/urls.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/urls.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/urls.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/urls.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,8 +1,9 @@ -from django.urls import re_path from django.contrib.auth import views as auth_views +from django.urls import re_path from django.views.generic import RedirectView from . import ajax, views + app_name = 'orthos2.frontend' urlpatterns = [ re_path(r'^$', RedirectView.as_view(pattern_name='frontend:free_machines'), name='root'), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/views.py new/orthos2-1.2.169+git.a693485/orthos2/frontend/views.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/frontend/views.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/frontend/views.py 2023-05-04 15:32:01.000000000 +0200 @@ -25,7 +25,6 @@ from django.views.decorators.csrf import csrf_protect from django.views.decorators.debug import sensitive_post_parameters from django.views.generic import ListView - from rest_framework.authtoken.models import Token from orthos2.data.models import (Architecture, Domain, Machine, MachineGroup, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/settings.py new/orthos2-1.2.169+git.a693485/orthos2/settings.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/settings.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/settings.py 2023-05-04 15:32:01.000000000 +0200 @@ -14,8 +14,8 @@ import logging.config import os import sys -from socket import getfqdn, gethostname from pwd import getpwuid +from socket import getfqdn, gethostname from django.contrib.messages import constants as messages diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/admin.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/admin.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/admin.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/admin.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,9 +1,8 @@ import datetime -from django.urls import re_path from django.contrib import admin, messages from django.shortcuts import redirect -from django.urls import reverse +from django.urls import re_path, reverse from django.utils.html import format_html from .models import DailyTask, SingleTask diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/executer.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/executer.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/executer.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/executer.py 2023-05-04 15:32:01.000000000 +0200 @@ -6,15 +6,15 @@ from queue import Queue from threading import Thread -from django.utils import timezone -from django.db.utils import InterfaceError from django import db +from django.db.utils import InterfaceError +from django.utils import timezone from orthos2.data.models import ServerConfig + from . import Priority from .models import BaseTask, DailyTask, SingleTask - logger = logging.getLogger('tasks') PRIORITIES = [Priority.HIGH, Priority.NORMAL] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/management/commands/taskmanager.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/management/commands/taskmanager.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/management/commands/taskmanager.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/management/commands/taskmanager.py 2023-05-04 15:32:01.000000000 +0200 @@ -6,6 +6,7 @@ from django.conf import settings from django.core.management.base import BaseCommand + from orthos2.taskmanager.executer import TaskExecuter logger = logging.getLogger('tasks') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/models.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/models.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/models.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/models.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,6 +1,5 @@ import json import logging - from hashlib import sha1 from django.db import models diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/__init__.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/__init__.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/__init__.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/__init__.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,9 +1,9 @@ -from .machinetasks import RegenerateMOTD, MachineCheck -from .notifications import (CheckReservationExpiration, SendRestoredPassword, - SendReservationInformation, CheckMultipleAccounts, - CheckForPrimaryNetwork) +from .cobbler import RegenerateCobbler, SyncCobblerDHCP, UpdateCobblerMachine +from .daily import (DailyCheckForPrimaryNetwork, + DailyCheckReservationExpirations, DailyMachineChecks) +from .machinetasks import MachineCheck, RegenerateMOTD +from .notifications import (CheckForPrimaryNetwork, CheckMultipleAccounts, + CheckReservationExpiration, + SendReservationInformation, SendRestoredPassword) from .sconsole import RegenerateSerialConsole -from .cobbler import RegenerateCobbler, UpdateCobblerMachine, SyncCobblerDHCP -from .daily import (DailyMachineChecks, DailyCheckReservationExpirations, - DailyCheckForPrimaryNetwork) from .setup import SetupMachine diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/ansible.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/ansible.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/ansible.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/ansible.py 2023-05-04 15:32:01.000000000 +0200 @@ -5,20 +5,19 @@ passing ansible collected data instead of self called functions ''' +import glob +import json +import logging import os import shutil -import glob import threading -import logging -import json from datetime import datetime from django.template.loader import render_to_string -from orthos2.taskmanager.models import Task from orthos2.data.models import Machine -from orthos2.utils.misc import normalize_ascii -from orthos2.utils.misc import execute +from orthos2.taskmanager.models import Task +from orthos2.utils.misc import execute, normalize_ascii logger = logging.getLogger('tasks') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/cobbler.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/cobbler.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/cobbler.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/cobbler.py 2023-05-04 15:32:01.000000000 +0200 @@ -42,7 +42,7 @@ logger.info("--- Start Cobbler deployment ---") for domain in domains: - if domain.cobbler_server.all().count() == 0: + if not domain.cobbler_server: logger.info("Domain '%s' has no Cobbler server... skip", domain.name) continue @@ -53,19 +53,18 @@ logger.info("Generate Cobbler configuration for '%s'...", domain.name) # deploy generated DHCP files on all servers belonging to one domain - for server in domain.cobbler_server.all(): - - cobbler_server = CobblerServer(server.fqdn, domain) - try: - logger.info("* Cobbler deployment started...") - cobbler_server.deploy() - logger.info("* Cobbler deployment finished successfully") - except Exception as e: - message = "* Cobbler deployment failed; {}".format(e) - if isinstance(e, (SystemError, SyntaxError)): - logger.exception(message) - else: - logger.exception(message) + cobbler_server = domain.cobbler_server + cobbler_server_obj = CobblerServer(cobbler_server.fqdn, domain) + try: + logger.info("* Cobbler deployment started...") + cobbler_server_obj.deploy() + logger.info("* Cobbler deployment finished successfully") + except Exception as e: + message = "* Cobbler deployment failed; {}".format(e) + if isinstance(e, (SystemError, SyntaxError)): + logger.exception(message) + else: + logger.exception(message) except SSH.Exception as e: logger.exception(e) @@ -85,23 +84,23 @@ domain = Domain.objects.get(pk=self._domain_id) machine = Machine.objects.get(pk=self._machine_id) logger.info("Cobbler update started") - if domain.cobbler_server.all().count() == 0: + if not domain.cobbler_server: logger.info("Domain '%s' has no Cobbler server... aborting", domain.name) return logger.info("Generate Cobbler update configuration for '%s'...", machine.fqdn) # deploy generated DHCP files on all servers belonging to one domain - for server in domain.cobbler_server.all(): - cobbler_server = CobblerServer(server.fqdn, domain) - try: - logger.info("* Cobbler deployment started...") - cobbler_server.update_or_add(machine) - logger.info("* Cobbler deployment finished successfully") - except Exception as e: - message = "* Cobbler deployment failed; {}".format(e) - if isinstance(e, (SystemError, SyntaxError)): - logger.exception(message) - else: - logger.exception(message) + cobbler_server = domain.cobbler_server + cobbler_server_obj = CobblerServer(cobbler_server.fqdn, domain) + try: + logger.info("* Cobbler deployment started...") + cobbler_server_obj.update_or_add(machine) + logger.info("* Cobbler deployment finished successfully") + except Exception as e: + message = "* Cobbler deployment failed; {}".format(e) + if isinstance(e, (SystemError, SyntaxError)): + logger.exception(message) + else: + logger.exception(message) except SSH.Exception as e: logger.exception(e) except Domain.DoesNotExist: @@ -126,12 +125,12 @@ def execute(self): try: domain = Domain.objects.get(pk=self._domain_id) - if domain.cobbler_server.all().count() == 0: + if not domain.cobbler_server: logger.info("Domain '%s' has no Cobbler server... aborting", domain.name) return - for server in domain.cobbler_server.all(): - cobbler_server = CobblerServer(server.fqdn, domain) - cobbler_server.sync_dhcp() + cobbler_server = domain.cobbler_server + cobbler_server_obj = CobblerServer(cobbler_server.fqdn, domain) + cobbler_server_obj.sync_dhcp() except Domain.DoesNotExist: logger.error("No Domain with id %s, aborting", self._domain_id) except Domain.MultipleObjectsReturned: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/machinetasks.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/machinetasks.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/machinetasks.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/machinetasks.py 2023-05-04 15:32:01.000000000 +0200 @@ -4,9 +4,10 @@ from orthos2.data.models import Machine, NetworkInterface, ServerConfig from orthos2.taskmanager.models import Task -from orthos2.utils.machinechecks import (get_installations, get_networkinterfaces, - get_status_ip, login_test, - nmap_check, ping_check_ipv4, ping_check_ipv6) +from orthos2.utils.machinechecks import (get_installations, + get_networkinterfaces, get_status_ip, + login_test, nmap_check, + ping_check_ipv4, ping_check_ipv6) from orthos2.utils.misc import sync, wrap80 from orthos2.utils.ssh import SSH diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/notifications.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/notifications.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/notifications.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/notifications.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,12 +1,12 @@ import logging from django.conf import settings -from django.utils import timezone from django.contrib.auth.models import User +from django.utils import timezone -from orthos2.data.models import Machine, Domain, DomainAdmin +from orthos2.data.models import Domain, DomainAdmin, Machine from orthos2.taskmanager.models import Task -from orthos2.utils.misc import send_email, get_domain +from orthos2.utils.misc import get_domain, send_email logger = logging.getLogger('tasks') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/sconsole.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/sconsole.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/sconsole.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/sconsole.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,6 +1,6 @@ import logging -from orthos2.data.models import ServerConfig, Domain +from orthos2.data.models import Domain, ServerConfig from orthos2.taskmanager.models import Task from orthos2.utils.ssh import SSH diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/setup.py new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/setup.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/taskmanager/tasks/setup.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/taskmanager/tasks/setup.py 2023-05-04 15:32:01.000000000 +0200 @@ -2,8 +2,8 @@ from orthos2.data.models import Machine, ServerConfig from orthos2.taskmanager.models import Task +from orthos2.utils.cobbler import CobblerException, CobblerServer from orthos2.utils.ssh import SSH -from orthos2.utils.cobbler import CobblerServer, CobblerException logger = logging.getLogger('tasks') @@ -26,27 +26,22 @@ try: machine = Machine.objects.get(fqdn=self.fqdn) domain = machine.fqdn_domain - servers = domain.cobbler_server.all() - if not servers: + server = domain.cobbler_server + if not server: logger.warning("No cobbler server available for '%s'", machine.fqdn_domain.name) return - for server in servers: - try: - logger.debug("trying %s for setup", server.fqdn) - cobbler_server = CobblerServer(server.fqdn, domain) - cobbler_server.setup(machine, self.choice) - - except CobblerException as e: - logger.warning("Setup of %s with %s failed on %s with %s", machine.fqdn, - self.choice, server.fqdn, e) - else: - logger.debug("success") - machine.reboot() - break + try: + logger.debug("trying %s for setup", server.fqdn) + cobbler_server = CobblerServer(server.fqdn, domain) + cobbler_server.setup(machine, self.choice) + + except CobblerException as e: + logger.warning("Setup of %s with %s failed on %s with %s", machine.fqdn, + self.choice, server.fqdn, e) else: - logger.exception("Setup of %s with %s failed on all cobbler servers", - machine.fqdn, self.choice) + logger.debug("success") + machine.reboot() except SSH.Exception as exception: logger.exception(exception) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/urls.py new/orthos2-1.2.169+git.a693485/orthos2/urls.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/urls.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/urls.py 2023-05-04 15:32:01.000000000 +0200 @@ -15,8 +15,8 @@ 1. Import the include() function: from django.urls import url, include 2. Add a URL to urlpatterns: re_path(r'^blog/', include('blog.urls')) """ -from django.urls import include, re_path from django.contrib import admin +from django.urls import include, re_path urlpatterns = [ re_path(r'^', include('orthos2.frontend.urls', namespace='frontend')), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/utils/cobbler.py new/orthos2-1.2.169+git.a693485/orthos2/utils/cobbler.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/utils/cobbler.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/utils/cobbler.py 2023-05-04 15:32:01.000000000 +0200 @@ -3,9 +3,9 @@ from django.template import Context, Template from orthos2.data.models import Machine, ServerConfig -from orthos2.utils.ssh import SSH from orthos2.utils.misc import get_hostname, get_ipv4, get_ipv6 from orthos2.utils.remotepowertype import RemotePowerType +from orthos2.utils.ssh import SSH logger = logging.getLogger('utils') @@ -172,9 +172,9 @@ :returns: The corresponding cobbler server or None """ domain = machine.fqdn_domain - server = domain.cobbler_server.all() - if server and server[0]: - return CobblerServer(server[0].fqdn, domain) + server = domain.cobbler_server + if server: + return CobblerServer(server.fqdn, domain) return None def connect(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/utils/hostnamefinder.py new/orthos2-1.2.169+git.a693485/orthos2/utils/hostnamefinder.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/utils/hostnamefinder.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/utils/hostnamefinder.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,5 +1,5 @@ -import socket import logging +import socket from django.conf import settings diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/utils/machinechecks.py new/orthos2-1.2.169+git.a693485/orthos2/utils/machinechecks.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/utils/machinechecks.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/utils/machinechecks.py 2023-05-04 15:32:01.000000000 +0200 @@ -4,10 +4,11 @@ import threading from decimal import Decimal -from orthos2.data.models import Architecture, Installation, Machine, NetworkInterface +from orthos2.data.models import (Architecture, Installation, Machine, + NetworkInterface) from orthos2.utils.misc import execute, normalize_ascii -from orthos2.utils.ssh import SSH from orthos2.utils.remote import ssh_execute +from orthos2.utils.ssh import SSH ARPHRD_IEEE80211 = 801 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/utils/remotepowertype.py new/orthos2-1.2.169+git.a693485/orthos2/utils/remotepowertype.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/utils/remotepowertype.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/utils/remotepowertype.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,4 +1,5 @@ import logging + from django.conf import settings diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/utils/ssh.py new/orthos2-1.2.169+git.a693485/orthos2/utils/ssh.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/utils/ssh.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/utils/ssh.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,8 +1,8 @@ import logging import os import socket -import paramiko +import paramiko from django.conf import settings from orthos2.data.models import Machine, ServerConfig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/utils/tests/test_cobbler.py new/orthos2-1.2.169+git.a693485/orthos2/utils/tests/test_cobbler.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/utils/tests/test_cobbler.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/utils/tests/test_cobbler.py 2023-05-04 15:32:01.000000000 +0200 @@ -1,8 +1,8 @@ import logging -import mock -from mock import MagicMock, NonCallableMagicMock +import mock from django.test import TestCase +from mock import MagicMock, NonCallableMagicMock import orthos2.utils.cobbler as cobbler from orthos2.data.models import Architecture, Domain, Machine, MachineGroup diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/orthos2/utils/tests/test_misc.py new/orthos2-1.2.169+git.a693485/orthos2/utils/tests/test_misc.py --- old/orthos2-1.2.154+git.40b86d2/orthos2/utils/tests/test_misc.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/orthos2/utils/tests/test_misc.py 2023-05-04 15:32:01.000000000 +0200 @@ -2,6 +2,7 @@ import mock from django.test import TestCase + from orthos2.utils.machinechecks import nmap_check, ping_check from orthos2.utils.misc import (execute, get_domain, get_hostname, has_valid_domain_ending, is_dns_resolvable, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/orthos2-1.2.154+git.40b86d2/setup.py new/orthos2-1.2.169+git.a693485/setup.py --- old/orthos2-1.2.154+git.40b86d2/setup.py 2023-03-20 17:05:03.000000000 +0100 +++ new/orthos2-1.2.169+git.a693485/setup.py 2023-05-04 15:32:01.000000000 +0200 @@ -2,6 +2,7 @@ import os from glob import glob + from setuptools import find_packages, setup logpath = os.environ.get('LOG_PATH', "/var/log/orthos2") ++++++ orthos2.obsinfo ++++++ --- /var/tmp/diff_new_pack.btdVvT/_old 2023-05-04 17:10:48.196445313 +0200 +++ /var/tmp/diff_new_pack.btdVvT/_new 2023-05-04 17:10:48.208445384 +0200 @@ -1,5 +1,5 @@ name: orthos2 -version: 1.2.154+git.40b86d2 -mtime: 1679328303 -commit: 40b86d2e9a98629b5745f842f2f43a80ba41947f +version: 1.2.169+git.a693485 +mtime: 1683207121 +commit: a693485533889750f553759487e456d86799c6c2